sliccy 6.182.0 → 6.184.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 +264 -256
- package/dist/ui/assets/SKILL-B4YYagrM.js +1 -0
- package/dist/ui/assets/{SKILL-BpMlcVho.js → SKILL-BbKu0tAh.js} +1 -1
- package/dist/ui/assets/{SKILL-DGelbGt_.js → SKILL-CG7Xvjv7.js} +1 -1
- package/dist/ui/assets/{account-store-BxB3138q.js → account-store-CBy3uUkr.js} +2 -2
- package/dist/ui/assets/{account-store-UA_3Tz4g.js → account-store-D48vh7jd.js} +1 -1
- package/dist/ui/assets/{adobe-C5iQ4vVx.js → adobe-Cnqngn3V.js} +2 -2
- package/dist/ui/assets/{adobe-CGl3cGPR.js → adobe-DN9SWzx5.js} +1 -1
- package/dist/ui/assets/{agent-panels-DfmjvBS2.js → agent-panels-Dj7wt72x.js} +1 -1
- package/dist/ui/assets/{almost-bash-shell-headless-l1xuiFhc.js → almost-bash-shell-headless-DbncEJ15.js} +309 -301
- package/dist/ui/assets/{apply-layout-Bq6bvrT2.js → apply-layout-CKWlNy_m.js} +1 -1
- package/dist/ui/assets/{apps-BX-IbYH9.js → apps-DEhr6ase.js} +1 -1
- package/dist/ui/assets/{azure-openai-BXvWNypo.js → azure-openai-BljHi43t.js} +1 -1
- package/dist/ui/assets/{azure-openai-C2dDMpxW.js → azure-openai-DNeqfy5S.js} +1 -1
- package/dist/ui/assets/{backend-hostfs-DV8kfBUj.js → backend-hostfs-BHTSdKW0.js} +1 -1
- package/dist/ui/assets/{capability-C8I_18AN.js → capability-BgC-ru0t.js} +2 -2
- package/dist/ui/assets/{cdp-B0aSo4ch.js → cdp-Bqv3wfRF.js} +1 -1
- package/dist/ui/assets/{cerebras-D29ytBVb.js → cerebras-CaiKjK1C.js} +1 -1
- package/dist/ui/assets/{cerebras-B2SDJ5pX.js → cerebras-CsNFOxy7.js} +1 -1
- package/dist/ui/assets/{client-Sb_wIqH2.js → client-CmfvXtLV.js} +1 -1
- package/dist/ui/assets/{composer-speech-Dt-gM11M.js → composer-speech-DO_1ARO_.js} +1 -1
- package/dist/ui/assets/{connect-surface-Cb3XqWWR.js → connect-surface-CFDyhjfM.js} +1 -1
- package/dist/ui/assets/{core-B3ULTK7V.js → core-Be1yHH6v.js} +1 -1
- package/dist/ui/assets/{core-CDo7qjEn.js → core-D-Fp1HL2.js} +1 -1
- package/dist/ui/assets/{directed-approval-BEel8QYA.js → directed-approval-BrvnnHDl.js} +1 -1
- package/dist/ui/assets/{discovery-preference-C7kFEKRM.js → discovery-preference-MWZVi-PZ.js} +1 -1
- package/dist/ui/assets/dist-C8ZpEU8V.js +3 -0
- package/dist/ui/assets/{emscripten-vfs-hook-bNKkM3Zb.js → emscripten-vfs-hook-DsODtDYP.js} +1 -1
- package/dist/ui/assets/ensure-speech-assets-C-TN5__M.js +1 -0
- package/dist/ui/assets/{extension-ops-CmuqbGmo.js → extension-ops-DTRUyGkx.js} +1 -1
- package/dist/ui/assets/{float-topology-BvkgNLoi.js → float-topology-B0_dG7En.js} +1 -1
- package/dist/ui/assets/{follower-navigate-watcher-B8Kk1WcF.js → follower-navigate-watcher-DVWQWTGU.js} +1 -1
- package/dist/ui/assets/{frozen-archive-writer-DWckLPIx.js → frozen-archive-writer-C1GtGgkF.js} +1 -1
- package/dist/ui/assets/{fs-Bvj_6WV6.js → fs-Gd3zHsod.js} +1 -1
- package/dist/ui/assets/{fs-Bl1dGTw7.js → fs-WGmHjFqB.js} +2 -2
- package/dist/ui/assets/{gelatiere-store-CslswlOn.js → gelatiere-store-B2plOkO0.js} +1 -1
- package/dist/ui/assets/{gelatiere-unit-DOffAKPD.js → gelatiere-unit-1wIxueza.js} +1 -1
- package/dist/ui/assets/{github-DVquHzS1.js → github-C9vbtD0b.js} +1 -1
- package/dist/ui/assets/{github-DRuWNJ0x.js → github-W7PF4o3P.js} +2 -2
- package/dist/ui/assets/{github-auth-C5UPE82y.js → github-auth-DrNumx5i.js} +1 -1
- package/dist/ui/assets/{github-copilot-DXbnFsoC.js → github-copilot-BQhi7UOk.js} +1 -1
- package/dist/ui/assets/{github-copilot-ha5V9jKJ.js → github-copilot-DpLzu-mE.js} +1 -1
- package/dist/ui/assets/{github-install-z8nzKR56.js → github-install-COa6G7Bf.js} +1 -1
- package/dist/ui/assets/{github-zip-YeBT3Ny7.js → github-zip-Cr9Lysol.js} +1 -1
- package/dist/ui/assets/{guest-tool-gate-Dn4Cs-oT.js → guest-tool-gate-B2z1ggE_.js} +1 -1
- package/dist/ui/assets/{hear-ClByyjXy.js → hear-BJgsPPcn.js} +1 -1
- package/dist/ui/assets/{help-p6vq-7bY.js → help-BFAT_5tA.js} +1 -1
- package/dist/ui/assets/hf-defaults-BwJdGLgk.js +1 -0
- package/dist/ui/assets/hf-download-TLCxnVIL.js +1 -0
- package/dist/ui/assets/installer-C0LqqeMg.js +4 -0
- package/dist/ui/assets/{interrupted-work-recovery-C3eyzaf0.js → interrupted-work-recovery-r9fITX8G.js} +1 -1
- package/dist/ui/assets/{js-realm-worker-C8L3DYxo.js → js-realm-worker-Vb3TOeXV.js} +2 -2
- package/dist/ui/assets/{jsh-executor-BRw7B4H0.js → jsh-executor-Bq_H_UIv.js} +2 -2
- package/dist/ui/assets/{kernel-worker-DJ8FZwqE.js → kernel-worker-B_U-F-B8.js} +10 -10
- package/dist/ui/assets/{lick-ws-bridge-DjxKrqtY.js → lick-ws-bridge-5rjWJX_C.js} +1 -1
- package/dist/ui/assets/{lick-ws-bridge-AHYpxmrH.js → lick-ws-bridge-D9K41aBr.js} +1 -1
- package/dist/ui/assets/{live-session-curation-ChbHqCg_.js → live-session-curation-G-k3QTeJ.js} +1 -1
- package/dist/ui/assets/{live-session-snapshot-CEM9afjE.js → live-session-snapshot-bmMahgEk.js} +1 -1
- package/dist/ui/assets/{local-llm-3Pq3W9JZ.js → local-llm-DXIS7Y11.js} +1 -1
- package/dist/ui/assets/{local-llm-DSfR5Yt1.js → local-llm-GJ4RcMJS.js} +1 -1
- package/dist/ui/assets/{main-DtPQfxOa.js → main-B_JNHrJJ.js} +3 -3
- package/dist/ui/assets/{main-cherry-GQeDS2ns.js → main-cherry-Dj6QX2bL.js} +1 -1
- package/dist/ui/assets/{memory-curation-seam-COOFWWtR.js → memory-curation-seam-DmVivNPt.js} +1 -1
- package/dist/ui/assets/{memory-health-DxPjxnOp.js → memory-health-BLYwkoRF.js} +1 -1
- package/dist/ui/assets/{memory-write-execute-CRxpEM2X.js → memory-write-execute-Bn0Cfxgi.js} +1 -1
- package/dist/ui/assets/{mount-9N6h5nwh.js → mount-DFtXqz7u.js} +3 -3
- package/dist/ui/assets/{mount-bridge-client-C4Ti1B85.js → mount-bridge-client-CaHZ1pkb.js} +1 -1
- package/dist/ui/assets/{mount-bridge-client-BMkDfg_K.js → mount-bridge-client-DRVFK3mJ.js} +1 -1
- package/dist/ui/assets/{mount-Dkwa5rwA.js → mount-mfdOcxjc.js} +1 -1
- package/dist/ui/assets/{new-session-C2Unp_ay.js → new-session-DGf5pu_W.js} +2 -2
- package/dist/ui/assets/{oauth-bootstrap-3r1LKeNV.js → oauth-bootstrap-BnFtxXMH.js} +2 -2
- package/dist/ui/assets/{oauth-service-CxXBA9rC.js → oauth-service-Dn_Xz1FZ.js} +1 -1
- package/dist/ui/assets/{oauth-service-B8mWc7rY.js → oauth-service-_PUd0RqU.js} +1 -1
- package/dist/ui/assets/{onboarding-orchestrator-DagKmKCB.js → onboarding-orchestrator-CM9wBVXY.js} +1 -1
- package/dist/ui/assets/{openai-codex-CJC7uwBp.js → openai-codex-Bw6V8Exo.js} +1 -1
- package/dist/ui/assets/{openai-codex--tiTbtXj.js → openai-codex-CVUojBOm.js} +1 -1
- package/dist/ui/assets/{openrouter-mBY_6dIp.js → openrouter-BC7G4X9j.js} +1 -1
- package/dist/ui/assets/{openrouter-aXBsdtFI.js → openrouter-D4gIK_6x.js} +1 -1
- package/dist/ui/assets/{openrouter-free-BeCg7Ecw.js → openrouter-free-BiR1F8YY.js} +1 -1
- package/dist/ui/assets/{openrouter-free-DqFFRvst.js → openrouter-free-DeIBFCD_.js} +1 -1
- package/dist/ui/assets/{openrouter-oauth-DQIC6b5R.js → openrouter-oauth-S0Wxlisj.js} +1 -1
- package/dist/ui/assets/{openrouter-oauth-C7CZ9fp_.js → openrouter-oauth-yeqiYiPV.js} +1 -1
- package/dist/ui/assets/{opfs-mount-tiZR34GY.js → opfs-mount-XUJ5ILwS.js} +1 -1
- package/dist/ui/assets/{page-approval-service-CYpStEUs.js → page-approval-service-DRZEjhrX.js} +1 -1
- package/dist/ui/assets/{panel-rpc-handlers-D8NOrxvf.js → panel-rpc-handlers-ChwH_sLY.js} +2 -2
- package/dist/ui/assets/{panelize-shell-C_Xs3rhf.js → panelize-shell-CK2wV8d-.js} +4 -4
- package/dist/ui/assets/{pi-edit-execution-kItlGFSm.js → pi-edit-execution-3uSKWHZb.js} +1 -1
- package/dist/ui/assets/{port-bridge-client-CrZ9vnOK.js → port-bridge-client-BiWcfZSc.js} +1 -1
- package/dist/ui/assets/{port-bridge-client-BHH6FPBY.js → port-bridge-client-BvO-1Rao.js} +1 -1
- package/dist/ui/assets/{provider-BtTOwLci.js → provider-B2DAvZVz.js} +2 -2
- package/dist/ui/assets/{provider-settings-PedRbxpK.js → provider-settings-CxXUm2a-.js} +1 -1
- package/dist/ui/assets/provider-store-access-BgECN49p.js +1 -0
- package/dist/ui/assets/provider-store-access-DBb5FZCA.js +1 -0
- package/dist/ui/assets/{provider-DuCd6_sr.js → provider-www4_y-t.js} +1 -1
- package/dist/ui/assets/{providers-BkwBVwkB.js → providers-CCn9vkBK.js} +2 -2
- package/dist/ui/assets/{providers-CWFcdblf.js → providers-CMHhoML-.js} +1 -1
- package/dist/ui/assets/proxied-fetch-DiXk_XGs.js +2 -0
- package/dist/ui/assets/proxied-fetch-J19bK2dG.js +1 -0
- package/dist/ui/assets/{quick-llm-DKsocfis.js → quick-llm-BMe87PgQ.js} +1 -1
- package/dist/ui/assets/{realm-inprocess-CI_Msk8I.js → realm-inprocess-BEYqu95M.js} +1 -1
- package/dist/ui/assets/{recovery-screen-HGByYfVb.js → recovery-screen-SL_yCteM.js} +1 -1
- package/dist/ui/assets/{redirect-uri-Dnc7Ae7l.js → redirect-uri-DlOE4xJ4.js} +1 -1
- package/dist/ui/assets/{remote-terminal-view-C6Ao0U4O.js → remote-terminal-view-B_u_89Rj.js} +1 -1
- package/dist/ui/assets/{rest-ops-vPHUnWou.js → rest-ops-CPEMTyP-.js} +1 -1
- package/dist/ui/assets/{rest-ops-DABw6D2a.js → rest-ops-DKsDUOxE.js} +1 -1
- package/dist/ui/assets/{restore-BsViTTTd.js → restore-BpcmnyLB.js} +1 -1
- package/dist/ui/assets/{run-BLi5_vwK.js → run-BRuN-148.js} +1 -1
- package/dist/ui/assets/{run-CKdymE5z.js → run-BVlVC7jS.js} +9 -9
- package/dist/ui/assets/{run-C0CADtt5.js → run-BulfRDHQ.js} +1 -1
- package/dist/ui/assets/{run-CKI507uv.js → run-DJZs27IU.js} +1 -1
- package/dist/ui/assets/{run-BEHokdPX.js → run-DOQXsmJ-.js} +1 -1
- package/dist/ui/assets/{run-DEBWO_VC.js → run-tjPSuwX3.js} +3 -3
- package/dist/ui/assets/{run-DgblerTV.js → run-ywyYbXgZ.js} +2 -2
- package/dist/ui/assets/{secret-env-Cazzr31P.js → secret-env-iwcdxjpw.js} +1 -1
- package/dist/ui/assets/secret-topology-CZv6A9HW.js +1 -0
- package/dist/ui/assets/{secrets-bridge-client-CiA-2ZIU.js → secrets-bridge-client-B_CG-HIg.js} +1 -1
- package/dist/ui/assets/{secrets-bridge-client-kWWipUuL.js → secrets-bridge-client-CUClOhLJ.js} +1 -1
- package/dist/ui/assets/{session-command-memory-D-p81a7P.js → session-command-memory-CV0M_waq.js} +2 -2
- package/dist/ui/assets/{session-jsonl-CXY4TQ4Y.js → session-jsonl-B8mDQIgn.js} +1 -1
- package/dist/ui/assets/{session-jsonl-C-BZSOHy.js → session-jsonl-C55fQ06x.js} +1 -1
- package/dist/ui/assets/{session-search-index-nhvgyuxV.js → session-search-index-C1J9u4eR.js} +1 -1
- package/dist/ui/assets/{setup-feature-flags-remote-CpzgUHLB.js → setup-feature-flags-remote-BxOb4YCM.js} +1 -1
- package/dist/ui/assets/{setup-model-catalog-BGx3XYFY.js → setup-model-catalog-BmCYvwCH.js} +1 -1
- package/dist/ui/assets/{signed-fetch-t5uBcIk_.js → signed-fetch-BgvaSXVe.js} +1 -1
- package/dist/ui/assets/{silent-renew-backoff-Q1A_jbQH.js → silent-renew-backoff-BOu1oK6b.js} +1 -1
- package/dist/ui/assets/slicc-version-DkDWlaqT.js +1 -0
- package/dist/ui/assets/{snapshot-Bb3mZrhI.js → snapshot-BGAhMToN.js} +1 -1
- package/dist/ui/assets/{snapshot-features-D44t7iA7.js → snapshot-features-Dzfoquou.js} +1 -1
- package/dist/ui/assets/soundscape-DuO1N_6R.js +1 -0
- package/dist/ui/assets/{speak-B-rF7cd2.js → speak-D9CaCxIW.js} +1 -1
- package/dist/ui/assets/{sprinkle-manager-BWdoEwv2.js → sprinkle-manager-QrCEkwte.js} +1 -1
- package/dist/ui/assets/{sprinkle-renderer-B-1HSkrF.js → sprinkle-renderer-DSjbduX4.js} +1 -1
- package/dist/ui/assets/{ssh-DGBxesfZ.js → ssh-DPyBpV4Z.js} +1 -1
- package/dist/ui/assets/{state-B7Ano9ql.js → state-CjMg-jSn.js} +1 -1
- package/dist/ui/assets/{store-B3uS3nQU.js → store-BuIUG1zU.js} +1 -1
- package/dist/ui/assets/{store-DTMATE-h.js → store-Cy7u1gHP.js} +1 -1
- package/dist/ui/assets/{sudo-D8OGZd6t.js → sudo-DPqnJHCC.js} +1 -1
- package/dist/ui/assets/{supervisor-Ck1Ryx2i.js → supervisor-Bz7bCJTe.js} +1 -1
- package/dist/ui/assets/{sync-dialog-C2TF9Y3h.js → sync-dialog-NksAsxfv.js} +1 -1
- package/dist/ui/assets/{transformers-env-h8uZoLwJ.js → transformers-env-DuLhc5Yf.js} +1 -1
- package/dist/ui/assets/{tray-leader-BHyMCdCH.js → tray-leader-DrAT1uER.js} +1 -1
- package/dist/ui/assets/{tray-leave-runtime-DR6t2Cuo.js → tray-leave-runtime-D1UiUa57.js} +1 -1
- package/dist/ui/assets/{tray-runtime-config-DBapPARd.js → tray-runtime-config-DmcF9Q2r.js} +1 -1
- package/dist/ui/assets/{tray-sidecar-BdEGdpUe.js → tray-sidecar-DbDXqX-O.js} +1 -1
- package/dist/ui/assets/{turn-journal-B4vV4fDV.js → turn-journal-Z3e-huge.js} +1 -1
- package/dist/ui/assets/{upgrade-detection-BXyDgjYd.js → upgrade-detection-IwRKooPo.js} +1 -1
- package/dist/ui/assets/{upskill-lick-skip-8Ozx8QGg.js → upskill-lick-skip-Rw_UGQE-.js} +1 -1
- package/dist/ui/assets/voice-reply-DgLON2RB.js +1 -0
- package/dist/ui/assets/{wc-attach-BN8rykoa.js → wc-attach-uXbc45oE.js} +2 -2
- package/dist/ui/assets/{wc-browser-z1N3wGuK.js → wc-browser-CE-PUbku.js} +1 -1
- package/dist/ui/assets/{wc-computers-C1g9iCUj.js → wc-computers-NdNdvSkt.js} +1 -1
- package/dist/ui/assets/{wc-detached-DHD--8Tf.js → wc-detached-ofCqJVys.js} +1 -1
- package/dist/ui/assets/{wc-extension-qof5b3tN.js → wc-extension-D5xZgJSA.js} +2 -2
- package/dist/ui/assets/{wc-follower-sKXDjyv-.js → wc-follower-ChlC4as7.js} +3 -3
- package/dist/ui/assets/{wc-follower-oauth-Bsskcjc7.js → wc-follower-oauth-qsf5anxR.js} +1 -1
- package/dist/ui/assets/{wc-gelatiere-D_uq7S-T.js → wc-gelatiere-CNuHyZeR.js} +1 -1
- package/dist/ui/assets/wc-live-BS1qBXN5.js +428 -0
- package/dist/ui/assets/{wc-nav-DqIdooNV.js → wc-nav-DHvzol8R.js} +2 -2
- package/dist/ui/assets/{wc-onboarding-38WwDwrA.js → wc-onboarding-BbdXkaej.js} +2 -2
- package/dist/ui/assets/{wc-permissions-o70pdgUK.js → wc-permissions-DlaZuLb9.js} +2 -2
- package/dist/ui/assets/{wc-placeholder-DMKTZY8P.js → wc-placeholder-C-OmhEk5.js} +3 -3
- package/dist/ui/assets/{wc-secret-request-CmpDh1Bs.js → wc-secret-request-Ct2mo_Xp.js} +1 -1
- package/dist/ui/assets/{wc-settings-7DxLA_ig.js → wc-settings-Bxt-10hf.js} +3 -3
- package/dist/ui/assets/{wc-shell-DFszC8_0.js → wc-shell-B58cMj3K.js} +362 -199
- package/dist/ui/assets/{wc-shortcut-config-Co6ONiUg.js → wc-shortcut-config-CS_pYZvv.js} +2 -2
- package/dist/ui/assets/{wc-sprinkles-zxKMU9ju.js → wc-sprinkles-CGF297sg.js} +2 -2
- package/dist/ui/assets/{wc-transcript-export-BnOv-hzh.js → wc-transcript-export-BsI6uqmc.js} +2 -2
- package/dist/ui/assets/{wc-tray-B2w3dtCQ.js → wc-tray-Q50Ws_2J.js} +4 -4
- package/dist/ui/assets/welcome-detection-C-ikGXmO.js +1 -0
- package/dist/ui/assets/{whisper-session-BB92W1rY.js → whisper-session-Cz5kwnWR.js} +2 -2
- package/dist/ui/assets/{xai-grok-DsDg76ef.js → xai-grok-DjVaOahu.js} +1 -1
- package/dist/ui/assets/{xai-grok-Btqu459a.js → xai-grok-VlWRZvOP.js} +1 -1
- package/dist/ui/index.html +9 -9
- package/dist/ui/packages/webapp/index.html +9 -9
- package/package.json +1 -1
- package/dist/ui/assets/SKILL-CWxUIsrD.js +0 -1
- package/dist/ui/assets/ensure-speech-assets-DnCun_bM.js +0 -1
- package/dist/ui/assets/installer-hyWN7t-8.js +0 -4
- package/dist/ui/assets/provider-store-access-BbD8NSzf.js +0 -1
- package/dist/ui/assets/provider-store-access-BvzkUnma.js +0 -1
- package/dist/ui/assets/proxied-fetch-BlIpeDaL.js +0 -2
- package/dist/ui/assets/proxied-fetch-CNe6icTW.js +0 -1
- package/dist/ui/assets/secret-topology-DpJD8DzV.js +0 -1
- package/dist/ui/assets/slicc-version-YnqCI9lq.js +0 -1
- package/dist/ui/assets/soundscape-CUzGNWGR.js +0 -1
- package/dist/ui/assets/voice-reply-ChDAb3Rf.js +0 -1
- package/dist/ui/assets/wc-live-DWEUEDdK.js +0 -428
- package/dist/ui/assets/welcome-detection-Cik05qcd.js +0 -1
|
@@ -1,18 +1,18 @@
|
|
|
1
|
-
import{t as e}from"./logger-LESFN7Hj.js";import{r as t,t as n}from"./base64-BPBW1Gzr.js";import{n as r}from"./bridge-protocol-31SWTdS5.js";import{a as i,n as a,o,s,t as c}from"./handoff-link-B3It6xQY.js";import{d as l,f as u,i as d,u as f}from"./account-store-UA_3Tz4g.js";import{a as p,l as m,n as h,o as g}from"./proxied-fetch-CNe6icTW.js";import{t as _}from"./runtime-env-DadgceZk.js";import{t as v}from"./slugify-BYJ6QVAt.js";import{n as ee,t as te}from"./host-command-PUA7nfMk.js";import{a as ne,i as re,n as ie,r as ae,t as oe}from"./snapshot-Bb3mZrhI.js";import{i as se,r as y}from"./panel-rpc-DW7W4w6_.js";import{t as ce}from"./providers-CWFcdblf.js";import{r as le}from"./binary-cache-bSOhqXB1.js";import{i as ue,n as de,r as fe}from"./fetch-body-CuwTaJC_.js";import{s as pe,t as me}from"./api-endpoint-D8lUKmPu.js";import{t as he}from"./compat-uEPf6-XW.js";import{a as ge,i as _e}from"./core-CDo7qjEn.js";import{n as ve,t as ye}from"./mime-types-D7IV6i7k.js";import{t as be}from"./secrets-bridge-client-kWWipUuL.js";import{a as xe,i as Se,n as Ce,r as we}from"./tool-ui-DRnUkp2g.js";import{a as Te,i as Ee,n as b,t as x}from"./path-utils-DNJG-zQf.js";import{n as De,r as Oe,t as ke}from"./merge-file-core-VJlzucJY.js";import{r as Ae}from"./workspace-mode-D0kUKBVS.js";import{n as je,t as Me}from"./thinking-level-5x0UAu9N.js";import{n as Ne,t as Pe}from"./types-D8gIX-W-.js";import{i as Fe}from"./mount-index-CQfmUPuZ.js";import{a as Ie,i as Le,n as Re,o as ze,s as Be,t as Ve}from"./signed-fetch-t5uBcIk_.js";import{o as He}from"./mount-table-store-DrF_Ifaz.js";import{t as Ue}from"./remote-cache-BE5T1-53.js";import{n as We}from"./fs-Bvj_6WV6.js";import{a as Ge}from"./tray-leader-status-CpkFr6n7.js";import{n as Ke,t as qe}from"./slicc-version-YnqCI9lq.js";import{a as Je,i as Ye,o as Xe,r as S,t as Ze}from"./browser-BM_DFzrh.js";import{t as C}from"./subcommand-flags-BZi7j78Q.js";import{n as Qe,r as $e,t as w}from"./subcommand-help-CgO7wRS5.js";import{n as et}from"./cost-command-CitGzr6C.js";import{d as tt,g as nt,i as rt,n as it,o as at}from"./sudoers-BdBYQPUn.js";import{n as ot,r as st,t as ct}from"./approval-timeout-BQ29Z0gf.js";import{a as lt,c as ut,i as dt,l as ft,n as pt,o as mt,r as ht,t as gt}from"./types-BfwydWt7.js";import{n as T,t as _t}from"./boundary-Cp9c_bPu.js";import"./rest-paths-Dia19u9P.js";import{t as vt}from"./html-B_Hg2WOy.js";import{n as yt}from"./llm-session-id-BZyXP_j2.js";import{t as bt}from"./buffer-polyfill-BccMjOKj.js";import{i as xt,o as St}from"./browser-DuyhpHbR.js";import{i as Ct,r as wt,t as Tt}from"./mount-picker-popup-BMils9JY.js";import{t as Et}from"./buffer-B5d1xHaH.js";import{A as Dt,B as E,C as Ot,D,E as kt,F as At,G as jt,H as O,I as k,J as Mt,K as Nt,L as Pt,M as Ft,N as It,O as Lt,P as Rt,R as zt,S as Bt,T as Vt,U as Ht,V as Ut,W as Wt,Y as Gt,_ as Kt,a as qt,b as Jt,c as Yt,d as Xt,f as Zt,g as Qt,h as $t,i as en,j as tn,k as nn,l as rn,m as an,n as on,o as sn,p as A,q as cn,r as ln,s as un,t as dn,u as fn,v as pn,w as mn,x as hn,y as gn,z as _n}from"./isomorphic-git-r9mnHMnp.js";import"./global-db-DJXlpNui.js";import{S as vn,_ as yn,a as bn,b as xn,c as Sn,d as Cn,f as wn,g as Tn,h as En,i as Dn,l as On,n as kn,o as An,p as jn,r as Mn,s as Nn,t as Pn,u as Fn,v as j,x as M,y as In}from"./state-B7Ano9ql.js";import{a as Ln,i as Rn,r as zn,t as Bn}from"./git-config-Bdgu8kD2.js";import{a as Vn,n as Hn,o as Un,r as Wn,s as Gn}from"./jsh-discovery-CnvNKojr.js";import{A as Kn,C as qn,a as Jn,b as Yn,c as Xn,d as Zn,f as Qn,h as $n,i as er,j as tr,l as nr,m as rr,n as ir,o as ar,p as or,r as sr,s as cr,t as N,u as lr,v as ur,y as dr}from"./shared-DfMXB1pm.js";import{_ as fr,a as pr,b as mr,d as hr,f as gr,g as _r,h as vr,i as yr,l as br,m as xr,p as Sr,r as Cr,s as wr,u as Tr,v as Er,x as Dr,y as Or}from"./require-guards-DPf5QETL.js";import{_ as kr,a as Ar,b as jr,c as Mr,d as Nr,f as Pr,g as Fr,h as Ir,l as Lr,m as Rr,n as zr,p as Br,s as Vr,t as Hr,u as Ur,v as Wr,x as Gr,y as Kr}from"./jsh-executor-BRw7B4H0.js";import{n as qr,t as Jr}from"./esbuild-wasm-CeZYVyQ9.js";import{n as Yr}from"./wasm-compiler-Ct7QZURL.js";import{a as Xr,o as Zr,s as Qr,t as $r}from"./usb-device-registry-DFzxaOky.js";import{a as P,i as ei,r as ti,t as ni}from"./just-bash-compat-B-SPHuh_.js";import{i as ri,r as ii,t as ai}from"./script-catalog-DZtOMxvi.js";import{a as oi,c as si,o as ci,s as li,t as ui}from"./types-Dzr0qYl3.js";import{a as di,c as fi,d as pi,f as mi,n as hi,r as gi,u as _i}from"./github-zip-YeBT3Ny7.js";import{i as vi,t as yi}from"./github-auth-C5UPE82y.js";import{a as bi,i as xi,o as Si,r as Ci,t as wi}from"./provenance-DdmsQ3Nr.js";import{a as Ti,c as Ei,i as Di,n as Oi,o as ki,r as Ai,s as ji}from"./github-install-z8nzKR56.js";import{n as Mi,t as Ni}from"./magick-wasm-KFp97Nzb.js";import{i as Pi,n as Fi,r as Ii,t as Li}from"./pdf-raster-BWk6ezTX.js";import{n as Ri}from"./lick-target-env-8JxfVcIV.js";import{t as zi}from"./tmpdir-env-ate4iNcK.js";import{a as Bi,c as Vi,d as Hi,f as Ui,i as Wi,l as Gi,n as Ki,o as qi,p as Ji,r as Yi,s as Xi,t as Zi,u as Qi}from"./installer-hyWN7t-8.js";import{t as $i}from"./ffmpeg-wasm-CV1BmGNS.js";import{t as ea}from"./local-llm-3Pq3W9JZ.js";import{t as ta}from"./client-Sb_wIqH2.js";import{t as na}from"./redirect-uri-Dnc7Ae7l.js";import{a as ra,c as ia,i as aa,o as oa,r as sa,s as ca}from"./v86-vm-DCm7zA2r.js";import{n as la,r as ua}from"./lick-urls-CgPiVwD-.js";let da=null;function fa(e){da=e!==null&&Number.isFinite(e)&&e>0?e:null}function pa(){if(da!==null)return da;let e=globalThis.performance?.timeOrigin;return typeof e==`number`&&Number.isFinite(e)&&e>0?e:Date.now()}new URL(r).hostname;const ma=/^([0-9a-f]{32})--(?:[0-9a-f]{8}-)?([0-9a-f]+)$/i;function ha(e){let t;try{t=new URL(e.includes(`://`)?e:`https://${e}`).hostname}catch{return null}let n=ma.exec(t.split(`.`)[0]??``);if(!n||!t.includes(`.`))return null;let r=n[1].toLowerCase();return`${[r.slice(0,8),r.slice(8,12),r.slice(12,16),r.slice(16,20),r.slice(20)].join(`-`)}.${n[2].toLowerCase()}`}[`ghp_`,`gho_`,`ghu_`,`ghs_`,`ghr_`,`github_pat_`,`sk-`,`pk-`,`xoxb-`,`xoxp-`,`xoxa-`,`xoxs-`,`AKIA`,`ABIA`,`ACCA`,`ASIA`,`sk-ant-`,`Bearer `].sort((e,t)=>t.length-e.length);function ga(e,t){let n=e.toLowerCase(),r=t.toLowerCase();if(n===`*`)return!0;if(!n.startsWith(`*.`))return n===r;let i=n.slice(1);return r.length>i.length&&r.endsWith(i)}function _a(e,t){return e.some(e=>ga(e,t))}const va=`slicc-transcript`,ya=[`canonical-agent-history-unavailable`,`tool-data-may-be-truncated`,`model-metadata-unavailable`,`scoop-history-unavailable`,`attachment-file-missing`,`attachment-association-unavailable`,`complete-snapshot-unavailable`],ba=new Set(`/export/format./export/producer/application./session/id./session/state./session/completeness/status./session/completeness/missing/*./conversations/*/id./conversations/*/kind./conversations/*/parentConversationId./conversations/*/messages/*/id./conversations/*/messages/*/role./conversations/*/messages/*/timestamp./conversations/*/messages/*/toolCallId./conversations/*/messages/*/content/*/type./conversations/*/messages/*/content/*/id./conversations/*/messages/*/content/*/name./conversations/*/messages/*/content/*/attachmentId./delegations/*/sourceConversationId./delegations/*/targetConversationId./delegations/*/toolCallId./attachments/*/id./attachments/*/path./attachments/*/sha256./attachments/*/sourceConversationId./attachments/*/sourceMessageId./attachments/*/handling./attachments/*/missingReason`.split(`.`));function xa(e){return ba.has(e.replace(/\/\d+(?=\/|$)/g,`/*`))}var Sa=class extends Error{code;detail;constructor(e,t){super(t?`${e}: ${t}`:e),this.code=e,this.detail=t,this.name=`TranscriptExportError`}};const Ca=new Set(ya),wa=/^[0-9a-fA-F]{64}$/,Ta=/^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}/;function F(e){return typeof e==`object`&&!!e&&!Array.isArray(e)}function Ea(e){return typeof e==`string`&&wa.test(e)}function Da(e){return Ta.test(e)&&Number.isFinite(Date.parse(e))}function Oa(e,t){let n=t.map(e=>`"${e}"`),r=n[n.length-1];return n.length===2?`${e} must be ${n[0]} or ${r}`:`${e} must be ${n.slice(0,-1).join(`, `)}, or ${r}`}function ka(e,t,n){return typeof e!=`string`||!t.includes(e)?{ok:!1,error:Oa(n,t)}:{ok:!0}}function Aa(e,t,n){for(let r=0;r<e.length;r++){let i=t(e[r],`${n}[${r}]`);if(!i.ok)return i}return{ok:!0}}function ja(e,t){let n=e.type;if(n===`text`){if(typeof e.text!=`string`)return{ok:!1,error:`${t}.text must be a string`}}else if(n===`tool-call`){if(typeof e.id!=`string`||e.id===``)return{ok:!1,error:`${t}.id must be a non-empty string`};if(typeof e.name!=`string`||e.name===``)return{ok:!1,error:`${t}.name must be a non-empty string`};if(!(`input`in e))return{ok:!1,error:`${t}.input must be present`}}else if(typeof e.attachmentId!=`string`||e.attachmentId===``)return{ok:!1,error:`${t}.attachmentId must be a non-empty string`};return{ok:!0}}function Ma(e,t){if(!F(e))return{ok:!1,error:`${t} must be a non-null object`};let n=ka(e.type,[`text`,`tool-call`,`attachment-ref`],`${t}.type`);return n.ok?ja(e,t):n}function Na(e,t){for(let n of[`input`,`output`,`cacheRead`,`cacheWrite`,`totalTokens`]){let r=e[n];if(typeof r!=`number`)return{ok:!1,error:`${t}.${n} must be a number`};if(!Number.isInteger(r)||r<0)return{ok:!1,error:`${t}.${n} must be a non-negative integer`}}return{ok:!0}}function Pa(e,t){for(let n of[`input`,`output`,`cacheRead`,`cacheWrite`,`total`]){let r=e[n];if(typeof r!=`number`)return{ok:!1,error:`${t}.${n} must be a number`};if(!Number.isFinite(r)||r<0)return{ok:!1,error:`${t}.${n} must be a finite non-negative number`}}return{ok:!0}}function Fa(e,t){let n=Na(e,t);if(!n.ok)return n;let r=e.cost;return F(r)?Pa(r,`${t}.cost`):{ok:!1,error:`${t}.cost must be a non-null object`}}function Ia(e,t){if(typeof e.id!=`string`)return{ok:!1,error:`${t}.id must be a string`};if(typeof e.sequence!=`number`)return{ok:!1,error:`${t}.sequence must be a number`};let n=e.sequence;return!Number.isInteger(n)||n<1?{ok:!1,error:`${t}.sequence must be a positive integer`}:typeof e.timestamp==`string`?Da(e.timestamp)?{ok:!0}:{ok:!1,error:`${t}.timestamp must be a valid ISO 8601 date-time string`}:{ok:!1,error:`${t}.timestamp must be a string`}}function La(e,t){let n=e.toolCallId;return typeof n!=`string`||n===``?{ok:!1,error:`${t}.toolCallId must be a non-empty string for tool-result messages`}:{ok:!0}}function Ra(e,t){let n=e.usage;return n===void 0?{ok:!0}:F(n)?Fa(n,`${t}.usage`):{ok:!1,error:`${t}.usage must be a non-null object`}}function za(e,t){if(!F(e))return{ok:!1,error:`${t} must be a non-null object`};let n=ka(e.role,[`user`,`assistant`,`tool-result`],`${t}.role`);if(!n.ok)return n;if(e.role===`tool-result`){let n=La(e,t);if(!n.ok)return n}let r=Ia(e,t);if(!r.ok)return r;let i=e.content;if(!Array.isArray(i))return{ok:!1,error:`${t}.content must be an array`};let a=Aa(i,Ma,`${t}.content`);return a.ok?Ra(e,t):a}function Ba(e,t){if(!F(e))return{ok:!1,error:`${t} must be a non-null object`};if(typeof e.id!=`string`)return{ok:!1,error:`${t}.id must be a string`};if(typeof e.name!=`string`)return{ok:!1,error:`${t}.name must be a string`};let n=ka(e.kind,[`cone`,`scoop`],`${t}.kind`);if(!n.ok)return n;let r=e.messages;return Array.isArray(r)?Aa(r,za,`${t}.messages`):{ok:!1,error:`${t}.messages must be an array`}}function Va(e,t){for(let n of[`id`,`path`,`originalName`,`mimeType`,`sha256`,`sourceConversationId`,`sourceMessageId`])if(typeof e[n]!=`string`)return{ok:!1,error:`${t}.${n} must be a string`};return{ok:!0}}function Ha(e,t){let n=e.path,r=e.sha256,i=e.byteLength;return n===``?{ok:!1,error:`${t}.path must be non-empty when present`}:Ea(r)?!Number.isInteger(i)||i<0?{ok:!1,error:`${t}.byteLength must be a non-negative integer when present`}:e.missingReason===void 0?{ok:!0}:{ok:!1,error:`${t}.missingReason must be absent when present is true`}:{ok:!1,error:`${t}.sha256 must be a 64-char hex string when present`}}const Ua=[`attachment-file-missing`,`attachment-association-unavailable`];function Wa(e,t){let n=e.path,r=e.sha256,i=e.byteLength;return n===``?r===``?i===0?ka(e.missingReason,Ua,`${t}.missingReason`):{ok:!1,error:`${t}.byteLength must be zero when not present`}:{ok:!1,error:`${t}.sha256 must be empty when not present`}:{ok:!1,error:`${t}.path must be empty when not present`}}function Ga(e,t){return e.present?Ha(e,t):Wa(e,t)}function Ka(e,t){if(!F(e))return{ok:!1,error:`${t} must be a non-null object`};let n=Va(e,t);if(!n.ok)return n;if(typeof e.byteLength!=`number`)return{ok:!1,error:`${t}.byteLength must be a number`};if(typeof e.present!=`boolean`)return{ok:!1,error:`${t}.present must be a boolean`};let r=ka(e.handling,[`text-redacted`,`binary-unchanged`],`${t}.handling`);return r.ok?Ga(e,t):r}function qa(e,t){let n=ka(e.kind,[`json`,`attachment`],`${t}.kind`);if(!n.ok)return n;if(e.kind===`json`){if(typeof e.pointer!=`string`)return{ok:!1,error:`${t}.pointer must be a string`};let n=e.pointer;if(n!==``&&!n.startsWith(`/`))return{ok:!1,error:`${t}.pointer must be a valid RFC 6901 JSON pointer`}}else if(typeof e.attachmentId!=`string`||e.attachmentId===``)return{ok:!1,error:`${t}.attachmentId must be a non-empty string`};return{ok:!0}}function Ja(e,t){if(!F(e))return{ok:!1,error:`${t} must be a non-null object`};if(typeof e.id!=`string`)return{ok:!1,error:`${t}.id must be a string`};if(typeof e.category!=`string`)return{ok:!1,error:`${t}.category must be a string`};let n=ka(e.detector,[`known-secret`,`credential-pattern`,`pre-obfuscated`],`${t}.detector`);if(!n.ok)return n;let r=e.target;return F(r)?qa(r,`${t}.target`):{ok:!1,error:`${t}.target must be a non-null object`}}function Ya(e,t){return F(e)?typeof e.sourceConversationId==`string`?typeof e.targetConversationId==`string`?{ok:!0}:{ok:!1,error:`${t}.targetConversationId must be a string`}:{ok:!1,error:`${t}.sourceConversationId must be a string`}:{ok:!1,error:`${t} must be a non-null object`}}function Xa(e,t){return typeof e!=`string`||!Ca.has(e)?{ok:!1,error:`${t} is not a valid completeness reason`}:{ok:!0}}function Za(e){if(!F(e))return{ok:!1,error:`export must be a non-null object`};if(typeof e.id!=`string`)return{ok:!1,error:`export.id must be a string`};if(typeof e.generatedAt!=`string`)return{ok:!1,error:`export.generatedAt must be a string`};if(e.format!==`slicc-transcript`)return{ok:!1,error:`export.format must equal "slicc-transcript"`};let t=e.producer;return F(t)?t.application===`slicc`?typeof t.version==`string`?{ok:!0}:{ok:!1,error:`export.producer.version must be a string`}:{ok:!1,error:`export.producer.application must equal "slicc"`}:{ok:!1,error:`export.producer must be a non-null object`}}function Qa(e){if(!F(e))return{ok:!1,error:`session.completeness must be a non-null object`};let t=ka(e.status,[`complete`,`partial`],`session.completeness.status`);return t.ok?Array.isArray(e.missing)?Aa(e.missing,Xa,`session.completeness.missing`):{ok:!1,error:`session.completeness.missing must be an array`}:t}function $a(e){if(!F(e))return{ok:!1,error:`session must be a non-null object`};if(typeof e.id!=`string`)return{ok:!1,error:`session.id must be a string`};if(typeof e.title!=`string`)return{ok:!1,error:`session.title must be a string`};let t=ka(e.state,[`active`,`frozen`],`session.state`);return t.ok?Qa(e.completeness):t}function eo(e){if(!F(e))return{ok:!1,error:`privacy must be a non-null object`};if(e.reasoningExcluded!==!0)return{ok:!1,error:`privacy.reasoningExcluded must be true`};let t=e.excludedReasoningBlocks;if(typeof t!=`number`)return{ok:!1,error:`privacy.excludedReasoningBlocks must be a number`};if(!Number.isInteger(t)||t<0)return{ok:!1,error:`privacy.excludedReasoningBlocks must be a non-negative integer`};if(e.binaryAttachments!==`included-unchanged`)return{ok:!1,error:`privacy.binaryAttachments must equal "included-unchanged"`};if(!F(e.redactionCounts))return{ok:!1,error:`privacy.redactionCounts must be a non-null object`};let n=e.redactions;return Array.isArray(n)?Aa(n,Ja,`privacy.redactions`):{ok:!1,error:`privacy.redactions must be an array`}}function to(e){let t=e.conversations;if(!Array.isArray(t))return{ok:!1,error:`conversations must be an array`};let n=Aa(t,Ba,`conversations`);if(!n.ok)return n;let r=e.delegations;if(!Array.isArray(r))return{ok:!1,error:`delegations must be an array`};let i=Aa(r,Ya,`delegations`);if(!i.ok)return i;let a=e.attachments;return Array.isArray(a)?Aa(a,Ka,`attachments`):{ok:!1,error:`attachments must be an array`}}function no(e){let t=new Set,n=new Set;for(let r of e){if(!F(r)||typeof r.id!=`string`)continue;if(t.has(r.id))return{ok:!1,error:`duplicate conversation id "${r.id}"`};t.add(r.id);let e=r.messages;if(Array.isArray(e)){for(let t of e)if(!(!F(t)||typeof t.id!=`string`)){if(n.has(t.id))return{ok:!1,error:`duplicate message id "${t.id}"`};n.add(t.id)}}}return{ok:!0}}function ro(e){for(let t of e){if(!F(t))continue;let e=t.messages;if(!Array.isArray(e))continue;let n=typeof t.id==`string`?t.id:`?`,r=0;for(let t of e){if(!F(t)||typeof t.sequence!=`number`)continue;let e=t.sequence;if(e<=r)return{ok:!1,error:`sequences in conversation "${n}" must be strictly increasing`};r=e}}return{ok:!0}}function io(e){let t=[];for(let n of e){if(!F(n))continue;let e=n.content;if(Array.isArray(e))for(let n of e)F(n)&&n.type===`tool-call`&&typeof n.id==`string`&&t.push(n.id)}return t}function ao(e){let t=new Set;for(let n of e){if(!F(n))continue;let e=n.messages;if(Array.isArray(e))for(let n of io(e))t.add(n)}return t}function oo(e,t){for(let n of e){if(!F(n))continue;let e=n.messages;if(Array.isArray(e))for(let n of e){if(!F(n)||n.role!==`tool-result`)continue;let e=n.toolCallId;if(typeof e==`string`&&e!==``&&!t.has(e))return{ok:!1,error:`tool-result message references unknown toolCallId "${e}"`}}}return{ok:!0}}function so(e){return oo(e,ao(e))}function co(e,t){for(let n of e){if(!F(n)||n.type!==`attachment-ref`)continue;let e=n.attachmentId;if(typeof e!=`string`||!t.has(e))return{ok:!1,error:`attachment-ref references unknown attachmentId "${e}"`}}return{ok:!0}}function lo(e,t){for(let n of e){if(!F(n))continue;let e=n.messages;if(Array.isArray(e))for(let n of e){if(!F(n))continue;let e=n.content;if(!Array.isArray(e))continue;let r=co(e,t);if(!r.ok)return r}}return{ok:!0}}function uo(e,t){let n=new Set;for(let e of t)F(e)&&typeof e.id==`string`&&n.add(e.id);return lo(e,n)}function fo(e){let t=new Map;for(let n of e){if(!F(n)||typeof n.id!=`string`)continue;let e=new Set,r=n.messages;if(Array.isArray(r))for(let t of r)F(t)&&typeof t.id==`string`&&e.add(t.id);t.set(n.id,e)}return t}function po(e,t){let n=fo(t);for(let t=0;t<e.length;t++){let r=e[t];if(!F(r))continue;let i=r.sourceConversationId,a=r.sourceMessageId;if(typeof i!=`string`||typeof a!=`string`)continue;let o=n.get(i);if(!o)return{ok:!1,error:`attachments[${t}].sourceConversationId "${i}" does not exist`};if(!o.has(a))return{ok:!1,error:`attachments[${t}].sourceMessageId "${a}" does not exist in conversation "${i}"`}}return{ok:!0}}function mo(e){let t=new Map;for(let n of e){if(!F(n)||typeof n.id!=`string`)continue;let e=Array.isArray(n.messages)?n.messages:[];t.set(n.id,new Set(io(e)))}return t}function ho(e,t,n){for(let r=0;r<e.length;r++){let i=e[r];if(!F(i))continue;let a=i.sourceConversationId,o=i.targetConversationId;if(typeof a!=`string`||!t.has(a))return{ok:!1,error:`delegations[${r}].sourceConversationId "${a}" does not exist`};if(typeof o!=`string`||!t.has(o))return{ok:!1,error:`delegations[${r}].targetConversationId "${o}" does not exist`};let s=i.toolCallId;if(typeof s==`string`&&s!==``&&!n.get(a)?.has(s))return{ok:!1,error:`delegations[${r}].toolCallId "${s}" does not exist in source conversation "${a}"`}}return{ok:!0}}function go(e,t){let n=new Set;for(let e of t)F(e)&&typeof e.id==`string`&&n.add(e.id);return ho(e,n,mo(t))}function _o(e,t,n){if(e.kind!==`attachment`)return{ok:!0};let r=e.attachmentId;return typeof r!=`string`||!t.has(r)?{ok:!1,error:`${n}.attachmentId "${r}" does not reference a known attachment`}:{ok:!0}}function vo(e,t){let n=new Set;for(let e of t)F(e)&&typeof e.id==`string`&&n.add(e.id);for(let t=0;t<e.length;t++){let r=e[t];if(!F(r))continue;let i=r.target;if(!F(i))continue;let a=_o(i,n,`privacy.redactions[${t}].target`);if(!a.ok)return a}return{ok:!0}}function yo(e){let t=e.conversations,n=e.attachments,r=e.delegations,i=e.privacy,a=Array.isArray(i?.redactions)?i.redactions:[],o=no(t);if(!o.ok)return o;let s=ro(t);if(!s.ok)return s;let c=so(t);if(!c.ok)return c;let l=uo(t,n);if(!l.ok)return l;let u=po(n,t);if(!u.ok)return u;let d=go(r,t);return d.ok?vo(a,n):d}function bo(e){let t=to(e);return t.ok?yo(e):t}function xo(e){if(!F(e))return{ok:!1,error:`document must be a non-null object`};if(e.schemaVersion!==1)return{ok:!1,error:`schemaVersion must equal 1`};let t=Za(e.export);if(!t.ok)return t;let n=$a(e.session);if(!n.ok)return n;let r=eo(e.privacy);return r.ok?bo(e):r}async function So(e,t,n){let r=await n({method:`GET`,path:`/${e}/sites/${t}/config.json`,origin:ze});if(r.status===401||r.status===403)throw Error(`not authorized to read the site config for ${e}/${t} — log in via Settings → Providers → Adobe, or pass --backend to skip the probe`);if(r.status===404)throw Error(`no site config for ${e}/${t} — check the org and site names`);if(r.status>=400)throw Error(`site config probe failed for ${e}/${t}: ${r.status}`);let i;try{i=await r.json()}catch(n){throw Error(`site config for ${e}/${t} is not JSON: ${n instanceof Error?n.message:String(n)}`)}let a=i.content?.source?.url;return{backend:Co(a),sourceUrl:a}}function Co(e){if(!e)return`da`;let t;try{t=new URL(e).host}catch{return`da`}return t===`api.aem.live`?`aem`:`da`}const wo=`slicc-sprinkle-routes`;function To(){try{let e=localStorage.getItem(wo);return e?JSON.parse(e):{}}catch{return{}}}function Eo(e){try{localStorage.setItem(wo,JSON.stringify(e))}catch{}}function Do(e){return To()[e]}function Oo(e,t){let n=To();n[e]=t,Eo(n)}function ko(e){let t=To();delete t[e],Eo(t)}function Ao(){return To()}function jo(e,t,n){return ut(t,n,`${e} adapter does not implement ${t}.${n}`)}function Mo(e,t,n,r){let i=n.filter(e=>typeof r?.[e]==`function`),a=n.map(n=>{let i=r?.[n];return[n,typeof i==`function`?i:()=>Promise.resolve(jo(e,t,n))]});return{...Object.fromEntries(a),allowlist:i,supports:e=>i.includes(e)}}function No(e){let{adapter:t,pageGestures:n}=e,r=n??{};return{adapter:t,browser:Mo(t,`browser`,pt,e.browser),network:Mo(t,`network`,lt,e.network),secrets:Mo(t,`secrets`,mt,e.secrets),devices:Mo(t,`devices`,ht,{usbRequest:r.usbRequest,serialRequest:r.serialRequest,hidRequest:r.hidRequest,...e.devices}),mounts:Mo(t,`mounts`,dt,{pickDirectory:r.pickDirectory,...e.mounts}),approvals:Mo(t,`approvals`,gt,e.approvals)}}function Po(e={}){return No({adapter:`connect`,pageGestures:e.pageGestures})}function Fo(e){let t=_t(()=>import(`./extension-ops-CmuqbGmo.js`).then(t=>t.createExtensionOps(e)));return No({adapter:e.adapter,pageGestures:e.pageGestures,network:{crossOriginFetch:e=>T(`network`,`crossOriginFetch`,async()=>(await t()).crossOriginFetch(e))},secrets:{listMaskedEnv:()=>T(`secrets`,`listMaskedEnv`,async()=>(await t()).secrets.listMaskedEnv()),getMasked:e=>T(`secrets`,`getMasked`,async()=>(await t()).secrets.getMasked(e)),set:e=>T(`secrets`,`set`,async()=>(await t()).secrets.set(e)),delete:e=>T(`secrets`,`delete`,async()=>(await t()).secrets.delete(e))},mounts:{signRequest:e=>T(`mounts`,`signRequest`,async()=>(await t()).signRequest(e))},approvals:{request:e=>T(`approvals`,`request`,async()=>(await t()).requestApproval(e))}})}function Io(e={}){let t=_t(()=>import(`./rest-ops-vPHUnWou.js`).then(t=>t.createRestOps(e)),e.controlTimeoutMs??1e4);return No({adapter:`node-rest`,pageGestures:e.pageGestures,network:{localNodeServer:()=>Promise.resolve({ok:!0,value:{available:!0}}),crossOriginFetch:e=>T(`network`,`crossOriginFetch`,async()=>(await t()).crossOriginFetch(e))},secrets:{listMaskedEnv:()=>T(`secrets`,`listMaskedEnv`,async()=>(await t()).secrets.listMaskedEnv()),getMasked:e=>T(`secrets`,`getMasked`,async()=>(await t()).secrets.getMasked(e)),set:e=>T(`secrets`,`set`,async()=>(await t()).secrets.set(e)),delete:e=>T(`secrets`,`delete`,async()=>(await t()).secrets.delete(e))},mounts:{signRequest:e=>T(`mounts`,`signRequest`,async()=>(await t()).signRequest(e))},approvals:{request:e=>T(`approvals`,`request`,async()=>(await t()).requestApproval(e))}})}function Lo(e,t={}){let{pageGestures:n}=t;switch(e){case`node-rest`:return Io({pageGestures:n});case`extension-direct`:case`extension-delegate`:return Fo({adapter:e,pageGestures:n});case`connect`:return Po({pageGestures:n})}}const Ro=e(`quick-llm`);async function zo(e){let t=d();if(!t)return Ro.debug(`No API key for active provider — skipping`),null;let n=u(),r=l(),i;if(i=e.modelId?Uo(n,e.modelId)??Uo(n,r):Bo(n,r),!i)return Ro.debug(`No model available for provider`,{providerId:n}),null;let a={role:`user`,content:e.prompt,timestamp:Date.now()},o={};i.provider===`adobe`&&(o[`X-Session-Id`]=Wo());try{let n=(await he(i,{systemPrompt:e.system,messages:[a]},{apiKey:t,maxTokens:e.maxTokens??60,temperature:e.temperature??.3,signal:e.signal,headers:Object.keys(o).length>0?o:void 0})).content.filter(e=>e.type===`text`).map(e=>e.text).join(``).trim();return n.length>0?n:null}catch(e){return Ro.debug(`Quick label call failed`,{error:e instanceof Error?e.message:String(e)}),null}}function Bo(e,t){let n=f(e);if(n.length===0)return;let r=n.find(e=>e.id===t)??n[0],i=Ho(r.id),a=n.filter(e=>Vo(e,r,i));return a.length===0?r:(a.sort((e,t)=>(e.cost?.input??0)-(t.cost?.input??0)),a[0])}function Vo(e,t,n){if(e.id===t.id)return!1;let r=t.cost?.input??1/0;if((e.cost?.input??1/0)>=r)return!1;let i=e.id.toLowerCase();switch(n){case`claude`:return i.includes(`haiku`);case`gpt`:return/(^|-)mini(-|$)|(^|-)nano(-|$)/.test(i);case`gemini`:return i.includes(`flash`);case`grok`:return/(^|-)mini(-|$)|(^|-)fast(-|$)/.test(i);case`unknown`:return!0}}function Ho(e){let t=e.toLowerCase();return t.includes(`claude`)?`claude`:t.includes(`gemini`)?`gemini`:t.includes(`grok`)?`grok`:/^(gpt|o\d)/.test(t)?`gpt`:`unknown`}function Uo(e,t){return f(e).find(e=>e.id===t)}function Wo(){return yt(`ui-quick-llm`)}const Go=e(`sudo-suggest`),Ko=[`You generalize a single shell command into a minimal glob pattern for an`,`allow-list rule. Output ONLY the pattern on one line — no prose, no quotes,`,`no backticks. Keep the leading command/sub-command verbatim and replace only`,`the volatile tail (args, paths, refs) with a single trailing "*".`,`Examples:`,` git push origin main -> git push*`,` rm -rf build/cache -> rm -rf*`,` npm install left-pad -> npm install*`].join(`
|
|
2
|
-
`),
|
|
3
|
-
`);async function
|
|
4
|
-
`,1)[0]?.trim()??``).replace(/^`+/,``).replace(/`+$/,``).replace(/^["']/,``).replace(/["']$/,``).trim();return t.length===0?null:t}const Xo=e(`sudo:capability-gesture`);function Zo(e,t={}){let n=t.suggest??Jo;return{async requestApproval(t,r){let i=r?.signal,a;if(t.suggestedPattern)a=t.suggestedPattern;else try{a=await n(t,i)}catch{a=t.detail}if(i?.aborted)return Xo.warn(`sudo approval aborted before prompting — denying`,{detail:t.detail}),{decision:`deny`};if(!e)return Xo.warn(`no CapabilityBroker injected for the sudo gesture hop — denying (composition bug, never a guessed transport)`,{detail:t.detail}),{decision:`deny`};let o=await e.approvals.request({kind:t.kind,detail:t.detail,suggestedPattern:a,...t.requester?{requester:t.requester}:{},...t.reason?{reason:t.reason}:{},...t.approver?{approver:t.approver}:{},...i?{signal:i}:{}});return o.ok?ft(o.value,a):(Xo.warn(`capability broker approvals.request failed — denying`,{message:o.message}),{decision:`deny`})}}}const Qo=e(`sudo:tray-first`);function $o(e,t={}){let n=t.suggest??Jo,r=t.timeoutMs??6e5,i=t.getClient??(async()=>{let{getPanelRpcClient:e}=await import(`./panel-rpc-DW7W4w6_.js`).then(e=>e.a);return e()});return{async requestApproval(t,a){if(a?.signal?.aborted)return{decision:`deny`};let o=t.suggestedPattern;if(!o)try{o=await n(t,a?.signal)}catch{o=t.detail}let s={...t,suggestedPattern:o},c=null;try{c=await i()}catch(e){Qo.debug?.(`panel-RPC client lookup threw — using native broker`,{error:e instanceof Error?e.message:String(e)})}if(c)try{let e=await c.call(`sudo-request`,{request:s,mode:`tray-first`},{timeoutMs:r});if(e?.handled!==!1)return es(e?.decision,o)}catch(e){Qo.warn(`tray-first sudo probe failed — using native broker`,{error:e instanceof Error?e.message:String(e)})}return e.requestApproval(s,a)}}}function es(e,t){if(!e||typeof e!=`object`)return{decision:`deny`};let n=e,r=n.attestation===`biometric`||n.attestation===`passcode`||n.attestation===`none`?n.attestation:void 0;return n.decision===`allow`?{decision:`allow`,...r?{attestation:r}:{}}:n.decision===`always`?{decision:`always`,pattern:typeof n.pattern==`string`&&n.pattern.trim().length>0?n.pattern.trim():t,...r?{attestation:r}:{}}:{decision:`deny`}}function ts(e,t){return{requestApproval(n){return t.enqueueSudoRequest(e,n)}}}function ns(){return`lick-${Date.now()}-${Math.random().toString(36).slice(2,10)}`}var rs=class{pending=new Map;timeoutMs;newId;setTimer;clearTimer;onAutoSettle;constructor(e={}){this.timeoutMs=e.timeoutMs??3e5,this.newId=e.newId??ns,this.setTimer=e.setTimer??((e,t)=>setTimeout(e,t)),this.clearTimer=e.clearTimer??(e=>clearTimeout(e)),this.onAutoSettle=e.onAutoSettle??(()=>{})}notifyAutoSettle(e,t,n){try{this.onAutoSettle(e,t,n)}catch{}}register(e,t,n){let r=this.newId();return{id:r,pending:new Promise(i=>{let a=null;Number.isFinite(this.timeoutMs)&&this.timeoutMs>0&&(a=this.setTimer(()=>{let e=this.pending.get(r);e&&(this.pending.delete(r),e.resolve(ot(`cone-timeout`)),this.notifyAutoSettle(r,`expired`,e.scoopJid))},this.timeoutMs)),this.pending.set(r,{scoopJid:e,request:t,resolve:i,timerHandle:a,approverJid:n})})}}resolve(e,t){let n=this.pending.get(e);return n?(this.pending.delete(e),n.timerHandle!=null&&this.clearTimer(n.timerHandle),n.resolve(t),!0):!1}failScoop(e){let t=0;for(let[n,r]of this.pending)r.scoopJid===e&&(this.pending.delete(n),r.timerHandle!=null&&this.clearTimer(r.timerHandle),r.resolve({decision:`deny`}),this.notifyAutoSettle(n,`scoop-dropped`,r.scoopJid),t++);return t}failAll(){let e=0;for(let[t,n]of this.pending)n.timerHandle!=null&&this.clearTimer(n.timerHandle),n.resolve({decision:`deny`}),this.notifyAutoSettle(t,`shutdown`,n.scoopJid),e++;return this.pending.clear(),e}get(e){let t=this.pending.get(e);return t?{id:e,scoopJid:t.scoopJid,request:t.request,...t.approverJid?{approverJid:t.approverJid}:{}}:null}list(){let e=[];for(let[t,n]of this.pending)e.push({id:t,scoopJid:n.scoopJid,request:n.request,...n.approverJid?{approverJid:n.approverJid}:{}});return e}size(){return this.pending.size}};e(`sudo-panel`),typeof globalThis.confirm==`function`&&globalThis.confirm.bind(globalThis),typeof globalThis.prompt==`function`&&globalThis.prompt.bind(globalThis),e(`sudo:page`),e(`sudo`);function is(e){return st(as(e))}function as(e){let t=Zo(e);return e?.adapter===`extension-direct`||e?.adapter===`extension-delegate`?t:$o(t)}let os=null;function ss(e){return os=e,()=>{os===e&&(os=null)}}function cs(){if(!os)throw new Sa(`session-not-found`);return os}const ls=`focus`,us={type:`leaf`,surfaceId:`chat`};function ds(e,t={},n={}){return{zones:{top:null,left:null,middle:null,right:null,bottom:null,...e},rowFr:{top:1,center:1,bottom:1,...n},colFr:{left:1,middle:1,right:1,...t}}}const fs={focus:{name:`focus`,tree:ds({left:us},{left:3,middle:1})}};function ps(e){return fs[e]??null}const ms=`progress`;function hs(e){return/^[A-Za-z_][A-Za-z0-9_]*$/.test(e)}async function gs(){try{let e=await wt();if(e.cancelled)throw Error(`mount: cancelled`);if(e.error)throw Error(`mount: ${e.error}`);if(e.handleInIdb&&typeof e.idbKey==`string`){let t=await Tt(e.idbKey);if(!t)throw Error(`mount: no directory handle found in storage`);return await Ct(t),t}throw Error(`mount: unexpected popup result`)}catch(e){throw Error(`mount: ${e instanceof Error?e.message:String(e)}`)}}async function _s(){if(typeof window>`u`||!(`showDirectoryPicker`in window))throw Error(`mount: local picker requires a user gesture in the panel (unavailable in this runtime). Ask the agent to mount it instead.`);try{return await window.showDirectoryPicker({mode:`readwrite`})}catch(e){throw e instanceof Error&&e.name===`AbortError`?Error(`mount: cancelled`):Error(`mount: ${e instanceof Error?e.message:String(e)}`)}}function vs(e){let t={positional:[],noProbe:!1,clearCache:!1,bodies:!1,json:!1};for(let n=0;n<e.length;n++){let r=e[n];if(r===`--source`)t.source=e[++n];else if(r===`--profile`)t.profile=e[++n];else if(r===`--backend`){let r=e[++n];r===`da`||r===`aem`?t.backend=r:t.backendError=r}else r===`--no-probe`?t.noProbe=!0:r===`--max-body-mb`?t.maxBodyMb=Number(e[++n]):r===`--clear-cache`?t.clearCache=!0:r===`--bodies`?t.bodies=!0:r===`--json`?t.json=!0:t.positional.push(r)}return t}function ys(e){let t=e.match(/^(da|aem):\/\/([^/]+)\/([^/]+)(?:\/(.*))?$/);return t?{scheme:t[1],org:t[2],name:t[3],path:(t[4]??``).replace(/^\/+/,``).replace(/\/+$/,``)}:null}const bs=new Set([`--source`,`--profile`,`--backend`,`--max-body-mb`]);function xs(e){for(let t=0;t<e.length;t++){let n=e[t];if(n===`--`)return!1;if(n===`--help`||n===`-h`)return!0;bs.has(n)&&t++}return!1}function Ss(e){return`aem://${e.org}/${e.name}${e.path?`/${e.path}`:``}`}var Cs=class{options;signedFetchS3;signedFetchDa;constructor(e){this.options=e,this.signedFetchS3=e.signedFetchS3,this.signedFetchDa=e.signedFetchDa}async execute(e,t,n){let r=e[0];if(r===`--help`||r===`-h`)return this.help();if(r===`unmount`||r===`-u`)return this.handleUnmount(e.slice(1),t,`mount unmount`);if(r===`list`||r===`-l`||r===`--list`)return this.handleList();if(r===`refresh`)return this.handleRefresh(e.slice(1),t,n);if(r===`info`)return this.handleInfo(e.slice(1),t);let i=vs(e);if(i.positional.length===0)return this.usageError(`mount: mount point required`);let a=this.resolvePath(i.positional[0],t);return i.backendError===void 0?i.source?i.source.startsWith(`s3://`)?this.mountS3(a,i):i.source.startsWith(`da://`)||i.source.startsWith(`aem://`)?this.mountAdobe(a,i):this.usageError(`mount: invalid source '${i.source}' — expected s3://..., da://... or aem://...`):this.mountLocal(a,n):this.usageError(`mount: invalid --backend '${i.backendError}' — expected 'da' or 'aem'`)}async executeUmount(e,t){return this.handleUnmount(e,t,`umount`)}async mountLocal(e,t){try{if((this.options.isScoop??(()=>!1))())throw Error(`mount: cannot mount local directories from a scoop (no UI). Ask the cone.`);let n=xe();if(!n){let n=await ws(e);if(n)return await this.options.fs.mount(e,n,{env:t}),{stdout:`Mounted '${n.describe().displayName}' → ${e}\nIndexing in background for fast file discovery.\nNote: External changes are not auto-detected — use 'mount refresh ${e}' after modifying files outside the browser.\n`,stderr:``,exitCode:0}}let r;if(n){let t=this.options.acquireLocalMountViaToolUI;if(!t)throw Error(`mount: tool UI not available in this runtime`);r=await t(n,e)}else r=_()?await gs():await _s();let i=Fe.fromHandle(r,{mountId:He()});return await this.options.fs.mount(e,i,{env:t}),{stdout:`Mounted '${i.describe().displayName}' → ${e}\nIndexing in background for fast file discovery.\nNote: External changes are not auto-detected — use 'mount refresh ${e}' after modifying files outside the browser.\n`,stderr:``,exitCode:0}}catch(e){return{stdout:``,stderr:`mount: ${e instanceof Error?e.message:String(e)}\n`,exitCode:1}}}async mountS3(e,t){if(!t.source)return this.usageError(`mount: --source required`);let n=t.profile??`default`,r=He(),i=new Ue({mountId:r,ttlMs:3e4}),a=new Le({source:t.source,profile:n,cache:i,maxBodyBytes:t.maxBodyMb?t.maxBodyMb*1024*1024:void 0,mountId:r,signedFetch:this.signedFetchS3??Re(n)});if(!t.noProbe)try{await a.readDir(`/`)}catch(e){return await a.close(),{stdout:``,stderr:`mount: probe failed for ${t.source} — ${e instanceof Error?e.message:String(e)}\n`,exitCode:1}}return await this.options.fs.mount(e,a),{stdout:`Mounted '${a.describe().displayName}' → ${e} (profile: ${n})\n`,stderr:``,exitCode:0}}async mountAdobe(e,t){if(!t.source)return this.usageError(`mount: --source required`);let n=t.profile??`default`,r=this.signedFetchDa??Ve(),i=ys(t.source);if(!i)return this.usageError(`mount: invalid source '${t.source}' — expected da://org/repo or aem://org/site`);let a=i.scheme===`aem`?`aem`:`da`,o=``;if(t.backend)a=t.backend;else if(i.scheme===`da`)try{a=(await So(i.org,i.name,r)).backend,a===`aem`&&(o=`mount: ${i.org}/${i.name} is on Helix 6 — its content lives in the Source Bus at https://api.aem.live/${i.org}/sites/${i.name}/source, not admin.da.live. Mounting through aem://${i.org}/${i.name}. Pass --backend da to force the old endpoint.\n`)}catch(e){return{stdout:``,stderr:`mount: could not determine the content source for ${t.source} — ${e instanceof Error?e.message:String(e)}. Pass --backend da or --backend aem to skip this probe.\n`,exitCode:1}}let s=He(),c=new Ue({mountId:s,ttlMs:3e4}),l={source:a===`aem`?Ss(i):`da://${i.org}/${i.name}${i.path?`/${i.path}`:``}`,profile:n,cache:c,maxBodyBytes:t.maxBodyMb?t.maxBodyMb*1024*1024:void 0,mountId:s,signedFetch:r},u=a===`aem`?new Be(l):new Ie(l);if(!t.noProbe)try{await u.readDir(`/`)}catch(e){return await u.close(),{stdout:``,stderr:o+`mount: probe failed for ${l.source} — ${e instanceof Error?e.message:String(e)}\n`,exitCode:1}}return await this.options.fs.mount(e,u),{stdout:`Mounted '${u.describe().displayName}' → ${e} (profile: ${n})\n`,stderr:o,exitCode:0}}async handleUnmount(e,t,n){if(xs(e))return n===`umount`?this.umountHelp():this.help();let r=vs(e);if(r.positional.length===0)return{stdout:``,stderr:`${n}: path required\n`,exitCode:1};let i=this.resolvePath(r.positional[0],t);try{let e,t;if(r.clearCache){let{getAllMountEntries:n}=await import(`./mount-table-store-DrF_Ifaz.js`).then(e=>e.r),r=(await n()).find(e=>e.targetPath===i),a=r?.descriptor.kind;r&&(a===`s3`||a===`da`||a===`aem`)&&(e=r.descriptor.mountId,t=r.descriptor.kind)}await this.options.fs.unmount(i);let n=``;if(r.clearCache&&e&&t){let{RemoteMountCache:t}=await import(`./remote-cache-BE5T1-53.js`).then(e=>e.n);await new t({mountId:e,ttlMs:3e4}).clearMount(),n=` (cache cleared)`}else r.clearCache&&(n=` (no remote cache to clear)`);return{stdout:`Unmounted ${i}${n}\n`,stderr:``,exitCode:0}}catch(e){return{stdout:``,stderr:`${n}: ${e instanceof Error?e.message:String(e)}\n`,exitCode:1}}}async handleList(){try{let e=this.options.fs.listMounts();if(e.length===0)return{stdout:`No active mounts
|
|
1
|
+
import{t as e}from"./logger-LESFN7Hj.js";import{r as t,t as n}from"./base64-BPBW1Gzr.js";import{n as r}from"./bridge-protocol-31SWTdS5.js";import{a as i,n as a,o,s,t as c}from"./handoff-link-B3It6xQY.js";import{d as l,f as u,i as d,u as f}from"./account-store-D48vh7jd.js";import{a as p,l as m,n as h,o as g}from"./proxied-fetch-J19bK2dG.js";import{t as _}from"./runtime-env-DadgceZk.js";import{t as v}from"./slugify-BYJ6QVAt.js";import{n as ee,t as te}from"./host-command-PUA7nfMk.js";import{a as ne,i as re,n as ie,r as ae,t as oe}from"./snapshot-BGAhMToN.js";import{i as se,r as y}from"./panel-rpc-DW7W4w6_.js";import{t as ce}from"./providers-CMHhoML-.js";import{r as le}from"./binary-cache-bSOhqXB1.js";import{i as ue,n as de,r as fe}from"./fetch-body-CuwTaJC_.js";import{s as pe,t as me}from"./api-endpoint-D8lUKmPu.js";import{t as he}from"./compat-uEPf6-XW.js";import{a as ge,i as _e}from"./core-D-Fp1HL2.js";import{n as ve,t as ye}from"./mime-types-D7IV6i7k.js";import{t as be}from"./secrets-bridge-client-CUClOhLJ.js";import{a as xe,i as Se,n as Ce,r as we}from"./tool-ui-DRnUkp2g.js";import{a as Te,i as Ee,n as b,t as x}from"./path-utils-DNJG-zQf.js";import{n as De,r as Oe,t as ke}from"./merge-file-core-VJlzucJY.js";import{r as Ae}from"./workspace-mode-D0kUKBVS.js";import{n as je,t as Me}from"./thinking-level-5x0UAu9N.js";import{n as Ne,t as Pe}from"./types-D8gIX-W-.js";import{i as Fe}from"./mount-index-CQfmUPuZ.js";import{a as Ie,i as Le,n as Re,o as ze,s as Be,t as Ve}from"./signed-fetch-BgvaSXVe.js";import{o as He}from"./mount-table-store-DrF_Ifaz.js";import{t as Ue}from"./remote-cache-BE5T1-53.js";import{n as We}from"./fs-Gd3zHsod.js";import{a as Ge}from"./tray-leader-status-CpkFr6n7.js";import{n as Ke,t as qe}from"./slicc-version-DkDWlaqT.js";import{a as Je,i as Ye,o as Xe,r as S,t as Ze}from"./browser-BM_DFzrh.js";import{t as C}from"./subcommand-flags-BZi7j78Q.js";import{n as Qe,r as $e,t as w}from"./subcommand-help-CgO7wRS5.js";import{n as et}from"./cost-command-CitGzr6C.js";import{d as tt,g as nt,i as rt,n as it,o as at}from"./sudoers-BdBYQPUn.js";import{n as ot,r as st,t as ct}from"./approval-timeout-BQ29Z0gf.js";import{a as lt,c as ut,i as dt,l as ft,n as pt,o as mt,r as ht,t as gt}from"./types-BfwydWt7.js";import{n as T,t as _t}from"./boundary-Cp9c_bPu.js";import"./rest-paths-Dia19u9P.js";import{t as vt}from"./html-B_Hg2WOy.js";import{n as yt}from"./llm-session-id-BZyXP_j2.js";import{t as bt}from"./buffer-polyfill-BccMjOKj.js";import{i as xt,o as St}from"./browser-DuyhpHbR.js";import{i as Ct,r as wt,t as Tt}from"./mount-picker-popup-BMils9JY.js";import{t as Et}from"./buffer-B5d1xHaH.js";import{A as Dt,B as E,C as Ot,D,E as kt,F as At,G as jt,H as O,I as k,J as Mt,K as Nt,L as Pt,M as Ft,N as It,O as Lt,P as Rt,R as zt,S as Bt,T as Vt,U as Ht,V as Ut,W as Wt,Y as Gt,_ as Kt,a as qt,b as Jt,c as Yt,d as Xt,f as Zt,g as Qt,h as $t,i as en,j as tn,k as nn,l as rn,m as an,n as on,o as sn,p as A,q as cn,r as ln,s as un,t as dn,u as fn,v as pn,w as mn,x as hn,y as gn,z as _n}from"./isomorphic-git-r9mnHMnp.js";import"./global-db-DJXlpNui.js";import{S as vn,_ as yn,a as bn,b as xn,c as Sn,d as Cn,f as wn,g as Tn,h as En,i as Dn,l as On,n as kn,o as An,p as jn,r as Mn,s as Nn,t as Pn,u as Fn,v as j,x as M,y as In}from"./state-CjMg-jSn.js";import{a as Ln,i as Rn,r as zn,t as Bn}from"./git-config-Bdgu8kD2.js";import{a as Vn,n as Hn,o as Un,r as Wn,s as Gn}from"./jsh-discovery-CnvNKojr.js";import{A as Kn,C as qn,a as Jn,b as Yn,c as Xn,d as Zn,f as Qn,h as $n,i as er,j as tr,l as nr,m as rr,n as ir,o as ar,p as or,r as sr,s as cr,t as N,u as lr,v as ur,y as dr}from"./shared-DfMXB1pm.js";import{_ as fr,a as pr,b as mr,d as hr,f as gr,g as _r,h as vr,i as yr,l as br,m as xr,p as Sr,r as Cr,s as wr,u as Tr,v as Er,x as Dr,y as Or}from"./require-guards-DPf5QETL.js";import{_ as kr,a as Ar,b as jr,c as Mr,d as Nr,f as Pr,g as Fr,h as Ir,l as Lr,m as Rr,n as zr,p as Br,s as Vr,t as Hr,u as Ur,v as Wr,x as Gr,y as Kr}from"./jsh-executor-Bq_H_UIv.js";import{n as qr,t as Jr}from"./esbuild-wasm-CeZYVyQ9.js";import{n as Yr}from"./wasm-compiler-Ct7QZURL.js";import{a as Xr,o as Zr,s as Qr,t as $r}from"./usb-device-registry-DFzxaOky.js";import{a as P,i as ei,r as ti,t as ni}from"./just-bash-compat-B-SPHuh_.js";import{i as ri,r as ii,t as ai}from"./script-catalog-DZtOMxvi.js";import{a as oi,c as si,o as ci,s as li,t as ui}from"./types-Dzr0qYl3.js";import{a as di,c as fi,d as pi,f as mi,n as hi,r as gi,u as _i}from"./github-zip-Cr9Lysol.js";import{i as vi,t as yi}from"./github-auth-DrNumx5i.js";import{a as bi,i as xi,o as Si,r as Ci,t as wi}from"./provenance-DdmsQ3Nr.js";import{a as Ti,c as Ei,i as Di,n as Oi,o as ki,r as Ai,s as ji}from"./github-install-COa6G7Bf.js";import{n as Mi,t as Ni}from"./magick-wasm-KFp97Nzb.js";import{i as Pi,n as Fi,r as Ii,t as Li}from"./pdf-raster-BWk6ezTX.js";import{n as Ri}from"./lick-target-env-8JxfVcIV.js";import{t as zi}from"./tmpdir-env-ate4iNcK.js";import{n as Bi,t as Vi}from"./hf-defaults-BwJdGLgk.js";import{a as Hi,c as Ui,i as Wi,l as Gi,n as Ki,o as qi,r as Ji,s as Yi,t as Xi,u as Zi}from"./installer-C0LqqeMg.js";import{t as Qi}from"./ffmpeg-wasm-CV1BmGNS.js";import{t as $i}from"./local-llm-DXIS7Y11.js";import{t as ea}from"./client-CmfvXtLV.js";import{t as ta}from"./redirect-uri-DlOE4xJ4.js";import{a as na,c as ra,i as ia,o as aa,r as oa,s as sa}from"./v86-vm-DCm7zA2r.js";import{n as ca,r as la}from"./lick-urls-CgPiVwD-.js";let ua=null;function da(e){ua=e!==null&&Number.isFinite(e)&&e>0?e:null}function fa(){if(ua!==null)return ua;let e=globalThis.performance?.timeOrigin;return typeof e==`number`&&Number.isFinite(e)&&e>0?e:Date.now()}new URL(r).hostname;const pa=/^([0-9a-f]{32})--(?:[0-9a-f]{8}-)?([0-9a-f]+)$/i;function ma(e){let t;try{t=new URL(e.includes(`://`)?e:`https://${e}`).hostname}catch{return null}let n=pa.exec(t.split(`.`)[0]??``);if(!n||!t.includes(`.`))return null;let r=n[1].toLowerCase();return`${[r.slice(0,8),r.slice(8,12),r.slice(12,16),r.slice(16,20),r.slice(20)].join(`-`)}.${n[2].toLowerCase()}`}[`ghp_`,`gho_`,`ghu_`,`ghs_`,`ghr_`,`github_pat_`,`sk-`,`pk-`,`xoxb-`,`xoxp-`,`xoxa-`,`xoxs-`,`AKIA`,`ABIA`,`ACCA`,`ASIA`,`sk-ant-`,`Bearer `].sort((e,t)=>t.length-e.length);function ha(e,t){let n=e.toLowerCase(),r=t.toLowerCase();if(n===`*`)return!0;if(!n.startsWith(`*.`))return n===r;let i=n.slice(1);return r.length>i.length&&r.endsWith(i)}function ga(e,t){return e.some(e=>ha(e,t))}const _a=`slicc-transcript`,va=[`canonical-agent-history-unavailable`,`tool-data-may-be-truncated`,`model-metadata-unavailable`,`scoop-history-unavailable`,`attachment-file-missing`,`attachment-association-unavailable`,`complete-snapshot-unavailable`],ya=new Set(`/export/format./export/producer/application./session/id./session/state./session/completeness/status./session/completeness/missing/*./conversations/*/id./conversations/*/kind./conversations/*/parentConversationId./conversations/*/messages/*/id./conversations/*/messages/*/role./conversations/*/messages/*/timestamp./conversations/*/messages/*/toolCallId./conversations/*/messages/*/content/*/type./conversations/*/messages/*/content/*/id./conversations/*/messages/*/content/*/name./conversations/*/messages/*/content/*/attachmentId./delegations/*/sourceConversationId./delegations/*/targetConversationId./delegations/*/toolCallId./attachments/*/id./attachments/*/path./attachments/*/sha256./attachments/*/sourceConversationId./attachments/*/sourceMessageId./attachments/*/handling./attachments/*/missingReason`.split(`.`));function ba(e){return ya.has(e.replace(/\/\d+(?=\/|$)/g,`/*`))}var xa=class extends Error{code;detail;constructor(e,t){super(t?`${e}: ${t}`:e),this.code=e,this.detail=t,this.name=`TranscriptExportError`}};const Sa=new Set(va),Ca=/^[0-9a-fA-F]{64}$/,wa=/^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}/;function F(e){return typeof e==`object`&&!!e&&!Array.isArray(e)}function Ta(e){return typeof e==`string`&&Ca.test(e)}function Ea(e){return wa.test(e)&&Number.isFinite(Date.parse(e))}function Da(e,t){let n=t.map(e=>`"${e}"`),r=n[n.length-1];return n.length===2?`${e} must be ${n[0]} or ${r}`:`${e} must be ${n.slice(0,-1).join(`, `)}, or ${r}`}function Oa(e,t,n){return typeof e!=`string`||!t.includes(e)?{ok:!1,error:Da(n,t)}:{ok:!0}}function ka(e,t,n){for(let r=0;r<e.length;r++){let i=t(e[r],`${n}[${r}]`);if(!i.ok)return i}return{ok:!0}}function Aa(e,t){let n=e.type;if(n===`text`){if(typeof e.text!=`string`)return{ok:!1,error:`${t}.text must be a string`}}else if(n===`tool-call`){if(typeof e.id!=`string`||e.id===``)return{ok:!1,error:`${t}.id must be a non-empty string`};if(typeof e.name!=`string`||e.name===``)return{ok:!1,error:`${t}.name must be a non-empty string`};if(!(`input`in e))return{ok:!1,error:`${t}.input must be present`}}else if(typeof e.attachmentId!=`string`||e.attachmentId===``)return{ok:!1,error:`${t}.attachmentId must be a non-empty string`};return{ok:!0}}function ja(e,t){if(!F(e))return{ok:!1,error:`${t} must be a non-null object`};let n=Oa(e.type,[`text`,`tool-call`,`attachment-ref`],`${t}.type`);return n.ok?Aa(e,t):n}function Ma(e,t){for(let n of[`input`,`output`,`cacheRead`,`cacheWrite`,`totalTokens`]){let r=e[n];if(typeof r!=`number`)return{ok:!1,error:`${t}.${n} must be a number`};if(!Number.isInteger(r)||r<0)return{ok:!1,error:`${t}.${n} must be a non-negative integer`}}return{ok:!0}}function Na(e,t){for(let n of[`input`,`output`,`cacheRead`,`cacheWrite`,`total`]){let r=e[n];if(typeof r!=`number`)return{ok:!1,error:`${t}.${n} must be a number`};if(!Number.isFinite(r)||r<0)return{ok:!1,error:`${t}.${n} must be a finite non-negative number`}}return{ok:!0}}function Pa(e,t){let n=Ma(e,t);if(!n.ok)return n;let r=e.cost;return F(r)?Na(r,`${t}.cost`):{ok:!1,error:`${t}.cost must be a non-null object`}}function Fa(e,t){if(typeof e.id!=`string`)return{ok:!1,error:`${t}.id must be a string`};if(typeof e.sequence!=`number`)return{ok:!1,error:`${t}.sequence must be a number`};let n=e.sequence;return!Number.isInteger(n)||n<1?{ok:!1,error:`${t}.sequence must be a positive integer`}:typeof e.timestamp==`string`?Ea(e.timestamp)?{ok:!0}:{ok:!1,error:`${t}.timestamp must be a valid ISO 8601 date-time string`}:{ok:!1,error:`${t}.timestamp must be a string`}}function Ia(e,t){let n=e.toolCallId;return typeof n!=`string`||n===``?{ok:!1,error:`${t}.toolCallId must be a non-empty string for tool-result messages`}:{ok:!0}}function La(e,t){let n=e.usage;return n===void 0?{ok:!0}:F(n)?Pa(n,`${t}.usage`):{ok:!1,error:`${t}.usage must be a non-null object`}}function Ra(e,t){if(!F(e))return{ok:!1,error:`${t} must be a non-null object`};let n=Oa(e.role,[`user`,`assistant`,`tool-result`],`${t}.role`);if(!n.ok)return n;if(e.role===`tool-result`){let n=Ia(e,t);if(!n.ok)return n}let r=Fa(e,t);if(!r.ok)return r;let i=e.content;if(!Array.isArray(i))return{ok:!1,error:`${t}.content must be an array`};let a=ka(i,ja,`${t}.content`);return a.ok?La(e,t):a}function za(e,t){if(!F(e))return{ok:!1,error:`${t} must be a non-null object`};if(typeof e.id!=`string`)return{ok:!1,error:`${t}.id must be a string`};if(typeof e.name!=`string`)return{ok:!1,error:`${t}.name must be a string`};let n=Oa(e.kind,[`cone`,`scoop`],`${t}.kind`);if(!n.ok)return n;let r=e.messages;return Array.isArray(r)?ka(r,Ra,`${t}.messages`):{ok:!1,error:`${t}.messages must be an array`}}function Ba(e,t){for(let n of[`id`,`path`,`originalName`,`mimeType`,`sha256`,`sourceConversationId`,`sourceMessageId`])if(typeof e[n]!=`string`)return{ok:!1,error:`${t}.${n} must be a string`};return{ok:!0}}function Va(e,t){let n=e.path,r=e.sha256,i=e.byteLength;return n===``?{ok:!1,error:`${t}.path must be non-empty when present`}:Ta(r)?!Number.isInteger(i)||i<0?{ok:!1,error:`${t}.byteLength must be a non-negative integer when present`}:e.missingReason===void 0?{ok:!0}:{ok:!1,error:`${t}.missingReason must be absent when present is true`}:{ok:!1,error:`${t}.sha256 must be a 64-char hex string when present`}}const Ha=[`attachment-file-missing`,`attachment-association-unavailable`];function Ua(e,t){let n=e.path,r=e.sha256,i=e.byteLength;return n===``?r===``?i===0?Oa(e.missingReason,Ha,`${t}.missingReason`):{ok:!1,error:`${t}.byteLength must be zero when not present`}:{ok:!1,error:`${t}.sha256 must be empty when not present`}:{ok:!1,error:`${t}.path must be empty when not present`}}function Wa(e,t){return e.present?Va(e,t):Ua(e,t)}function Ga(e,t){if(!F(e))return{ok:!1,error:`${t} must be a non-null object`};let n=Ba(e,t);if(!n.ok)return n;if(typeof e.byteLength!=`number`)return{ok:!1,error:`${t}.byteLength must be a number`};if(typeof e.present!=`boolean`)return{ok:!1,error:`${t}.present must be a boolean`};let r=Oa(e.handling,[`text-redacted`,`binary-unchanged`],`${t}.handling`);return r.ok?Wa(e,t):r}function Ka(e,t){let n=Oa(e.kind,[`json`,`attachment`],`${t}.kind`);if(!n.ok)return n;if(e.kind===`json`){if(typeof e.pointer!=`string`)return{ok:!1,error:`${t}.pointer must be a string`};let n=e.pointer;if(n!==``&&!n.startsWith(`/`))return{ok:!1,error:`${t}.pointer must be a valid RFC 6901 JSON pointer`}}else if(typeof e.attachmentId!=`string`||e.attachmentId===``)return{ok:!1,error:`${t}.attachmentId must be a non-empty string`};return{ok:!0}}function qa(e,t){if(!F(e))return{ok:!1,error:`${t} must be a non-null object`};if(typeof e.id!=`string`)return{ok:!1,error:`${t}.id must be a string`};if(typeof e.category!=`string`)return{ok:!1,error:`${t}.category must be a string`};let n=Oa(e.detector,[`known-secret`,`credential-pattern`,`pre-obfuscated`],`${t}.detector`);if(!n.ok)return n;let r=e.target;return F(r)?Ka(r,`${t}.target`):{ok:!1,error:`${t}.target must be a non-null object`}}function Ja(e,t){return F(e)?typeof e.sourceConversationId==`string`?typeof e.targetConversationId==`string`?{ok:!0}:{ok:!1,error:`${t}.targetConversationId must be a string`}:{ok:!1,error:`${t}.sourceConversationId must be a string`}:{ok:!1,error:`${t} must be a non-null object`}}function Ya(e,t){return typeof e!=`string`||!Sa.has(e)?{ok:!1,error:`${t} is not a valid completeness reason`}:{ok:!0}}function Xa(e){if(!F(e))return{ok:!1,error:`export must be a non-null object`};if(typeof e.id!=`string`)return{ok:!1,error:`export.id must be a string`};if(typeof e.generatedAt!=`string`)return{ok:!1,error:`export.generatedAt must be a string`};if(e.format!==`slicc-transcript`)return{ok:!1,error:`export.format must equal "slicc-transcript"`};let t=e.producer;return F(t)?t.application===`slicc`?typeof t.version==`string`?{ok:!0}:{ok:!1,error:`export.producer.version must be a string`}:{ok:!1,error:`export.producer.application must equal "slicc"`}:{ok:!1,error:`export.producer must be a non-null object`}}function Za(e){if(!F(e))return{ok:!1,error:`session.completeness must be a non-null object`};let t=Oa(e.status,[`complete`,`partial`],`session.completeness.status`);return t.ok?Array.isArray(e.missing)?ka(e.missing,Ya,`session.completeness.missing`):{ok:!1,error:`session.completeness.missing must be an array`}:t}function Qa(e){if(!F(e))return{ok:!1,error:`session must be a non-null object`};if(typeof e.id!=`string`)return{ok:!1,error:`session.id must be a string`};if(typeof e.title!=`string`)return{ok:!1,error:`session.title must be a string`};let t=Oa(e.state,[`active`,`frozen`],`session.state`);return t.ok?Za(e.completeness):t}function $a(e){if(!F(e))return{ok:!1,error:`privacy must be a non-null object`};if(e.reasoningExcluded!==!0)return{ok:!1,error:`privacy.reasoningExcluded must be true`};let t=e.excludedReasoningBlocks;if(typeof t!=`number`)return{ok:!1,error:`privacy.excludedReasoningBlocks must be a number`};if(!Number.isInteger(t)||t<0)return{ok:!1,error:`privacy.excludedReasoningBlocks must be a non-negative integer`};if(e.binaryAttachments!==`included-unchanged`)return{ok:!1,error:`privacy.binaryAttachments must equal "included-unchanged"`};if(!F(e.redactionCounts))return{ok:!1,error:`privacy.redactionCounts must be a non-null object`};let n=e.redactions;return Array.isArray(n)?ka(n,qa,`privacy.redactions`):{ok:!1,error:`privacy.redactions must be an array`}}function eo(e){let t=e.conversations;if(!Array.isArray(t))return{ok:!1,error:`conversations must be an array`};let n=ka(t,za,`conversations`);if(!n.ok)return n;let r=e.delegations;if(!Array.isArray(r))return{ok:!1,error:`delegations must be an array`};let i=ka(r,Ja,`delegations`);if(!i.ok)return i;let a=e.attachments;return Array.isArray(a)?ka(a,Ga,`attachments`):{ok:!1,error:`attachments must be an array`}}function to(e){let t=new Set,n=new Set;for(let r of e){if(!F(r)||typeof r.id!=`string`)continue;if(t.has(r.id))return{ok:!1,error:`duplicate conversation id "${r.id}"`};t.add(r.id);let e=r.messages;if(Array.isArray(e)){for(let t of e)if(!(!F(t)||typeof t.id!=`string`)){if(n.has(t.id))return{ok:!1,error:`duplicate message id "${t.id}"`};n.add(t.id)}}}return{ok:!0}}function no(e){for(let t of e){if(!F(t))continue;let e=t.messages;if(!Array.isArray(e))continue;let n=typeof t.id==`string`?t.id:`?`,r=0;for(let t of e){if(!F(t)||typeof t.sequence!=`number`)continue;let e=t.sequence;if(e<=r)return{ok:!1,error:`sequences in conversation "${n}" must be strictly increasing`};r=e}}return{ok:!0}}function ro(e){let t=[];for(let n of e){if(!F(n))continue;let e=n.content;if(Array.isArray(e))for(let n of e)F(n)&&n.type===`tool-call`&&typeof n.id==`string`&&t.push(n.id)}return t}function io(e){let t=new Set;for(let n of e){if(!F(n))continue;let e=n.messages;if(Array.isArray(e))for(let n of ro(e))t.add(n)}return t}function ao(e,t){for(let n of e){if(!F(n))continue;let e=n.messages;if(Array.isArray(e))for(let n of e){if(!F(n)||n.role!==`tool-result`)continue;let e=n.toolCallId;if(typeof e==`string`&&e!==``&&!t.has(e))return{ok:!1,error:`tool-result message references unknown toolCallId "${e}"`}}}return{ok:!0}}function oo(e){return ao(e,io(e))}function so(e,t){for(let n of e){if(!F(n)||n.type!==`attachment-ref`)continue;let e=n.attachmentId;if(typeof e!=`string`||!t.has(e))return{ok:!1,error:`attachment-ref references unknown attachmentId "${e}"`}}return{ok:!0}}function co(e,t){for(let n of e){if(!F(n))continue;let e=n.messages;if(Array.isArray(e))for(let n of e){if(!F(n))continue;let e=n.content;if(!Array.isArray(e))continue;let r=so(e,t);if(!r.ok)return r}}return{ok:!0}}function lo(e,t){let n=new Set;for(let e of t)F(e)&&typeof e.id==`string`&&n.add(e.id);return co(e,n)}function uo(e){let t=new Map;for(let n of e){if(!F(n)||typeof n.id!=`string`)continue;let e=new Set,r=n.messages;if(Array.isArray(r))for(let t of r)F(t)&&typeof t.id==`string`&&e.add(t.id);t.set(n.id,e)}return t}function fo(e,t){let n=uo(t);for(let t=0;t<e.length;t++){let r=e[t];if(!F(r))continue;let i=r.sourceConversationId,a=r.sourceMessageId;if(typeof i!=`string`||typeof a!=`string`)continue;let o=n.get(i);if(!o)return{ok:!1,error:`attachments[${t}].sourceConversationId "${i}" does not exist`};if(!o.has(a))return{ok:!1,error:`attachments[${t}].sourceMessageId "${a}" does not exist in conversation "${i}"`}}return{ok:!0}}function po(e){let t=new Map;for(let n of e){if(!F(n)||typeof n.id!=`string`)continue;let e=Array.isArray(n.messages)?n.messages:[];t.set(n.id,new Set(ro(e)))}return t}function mo(e,t,n){for(let r=0;r<e.length;r++){let i=e[r];if(!F(i))continue;let a=i.sourceConversationId,o=i.targetConversationId;if(typeof a!=`string`||!t.has(a))return{ok:!1,error:`delegations[${r}].sourceConversationId "${a}" does not exist`};if(typeof o!=`string`||!t.has(o))return{ok:!1,error:`delegations[${r}].targetConversationId "${o}" does not exist`};let s=i.toolCallId;if(typeof s==`string`&&s!==``&&!n.get(a)?.has(s))return{ok:!1,error:`delegations[${r}].toolCallId "${s}" does not exist in source conversation "${a}"`}}return{ok:!0}}function ho(e,t){let n=new Set;for(let e of t)F(e)&&typeof e.id==`string`&&n.add(e.id);return mo(e,n,po(t))}function go(e,t,n){if(e.kind!==`attachment`)return{ok:!0};let r=e.attachmentId;return typeof r!=`string`||!t.has(r)?{ok:!1,error:`${n}.attachmentId "${r}" does not reference a known attachment`}:{ok:!0}}function _o(e,t){let n=new Set;for(let e of t)F(e)&&typeof e.id==`string`&&n.add(e.id);for(let t=0;t<e.length;t++){let r=e[t];if(!F(r))continue;let i=r.target;if(!F(i))continue;let a=go(i,n,`privacy.redactions[${t}].target`);if(!a.ok)return a}return{ok:!0}}function vo(e){let t=e.conversations,n=e.attachments,r=e.delegations,i=e.privacy,a=Array.isArray(i?.redactions)?i.redactions:[],o=to(t);if(!o.ok)return o;let s=no(t);if(!s.ok)return s;let c=oo(t);if(!c.ok)return c;let l=lo(t,n);if(!l.ok)return l;let u=fo(n,t);if(!u.ok)return u;let d=ho(r,t);return d.ok?_o(a,n):d}function yo(e){let t=eo(e);return t.ok?vo(e):t}function bo(e){if(!F(e))return{ok:!1,error:`document must be a non-null object`};if(e.schemaVersion!==1)return{ok:!1,error:`schemaVersion must equal 1`};let t=Xa(e.export);if(!t.ok)return t;let n=Qa(e.session);if(!n.ok)return n;let r=$a(e.privacy);return r.ok?yo(e):r}async function xo(e,t,n){let r=await n({method:`GET`,path:`/${e}/sites/${t}/config.json`,origin:ze});if(r.status===401||r.status===403)throw Error(`not authorized to read the site config for ${e}/${t} — log in via Settings → Providers → Adobe, or pass --backend to skip the probe`);if(r.status===404)throw Error(`no site config for ${e}/${t} — check the org and site names`);if(r.status>=400)throw Error(`site config probe failed for ${e}/${t}: ${r.status}`);let i;try{i=await r.json()}catch(n){throw Error(`site config for ${e}/${t} is not JSON: ${n instanceof Error?n.message:String(n)}`)}let a=i.content?.source?.url;return{backend:So(a),sourceUrl:a}}function So(e){if(!e)return`da`;let t;try{t=new URL(e).host}catch{return`da`}return t===`api.aem.live`?`aem`:`da`}const Co=`slicc-sprinkle-routes`;function wo(){try{let e=localStorage.getItem(Co);return e?JSON.parse(e):{}}catch{return{}}}function To(e){try{localStorage.setItem(Co,JSON.stringify(e))}catch{}}function Eo(e){return wo()[e]}function Do(e,t){let n=wo();n[e]=t,To(n)}function Oo(e){let t=wo();delete t[e],To(t)}function ko(){return wo()}function Ao(e,t,n){return ut(t,n,`${e} adapter does not implement ${t}.${n}`)}function jo(e,t,n,r){let i=n.filter(e=>typeof r?.[e]==`function`),a=n.map(n=>{let i=r?.[n];return[n,typeof i==`function`?i:()=>Promise.resolve(Ao(e,t,n))]});return{...Object.fromEntries(a),allowlist:i,supports:e=>i.includes(e)}}function Mo(e){let{adapter:t,pageGestures:n}=e,r=n??{};return{adapter:t,browser:jo(t,`browser`,pt,e.browser),network:jo(t,`network`,lt,e.network),secrets:jo(t,`secrets`,mt,e.secrets),devices:jo(t,`devices`,ht,{usbRequest:r.usbRequest,serialRequest:r.serialRequest,hidRequest:r.hidRequest,...e.devices}),mounts:jo(t,`mounts`,dt,{pickDirectory:r.pickDirectory,...e.mounts}),approvals:jo(t,`approvals`,gt,e.approvals)}}function No(e={}){return Mo({adapter:`connect`,pageGestures:e.pageGestures})}function Po(e){let t=_t(()=>import(`./extension-ops-DTRUyGkx.js`).then(t=>t.createExtensionOps(e)));return Mo({adapter:e.adapter,pageGestures:e.pageGestures,network:{crossOriginFetch:e=>T(`network`,`crossOriginFetch`,async()=>(await t()).crossOriginFetch(e))},secrets:{listMaskedEnv:()=>T(`secrets`,`listMaskedEnv`,async()=>(await t()).secrets.listMaskedEnv()),getMasked:e=>T(`secrets`,`getMasked`,async()=>(await t()).secrets.getMasked(e)),set:e=>T(`secrets`,`set`,async()=>(await t()).secrets.set(e)),delete:e=>T(`secrets`,`delete`,async()=>(await t()).secrets.delete(e))},mounts:{signRequest:e=>T(`mounts`,`signRequest`,async()=>(await t()).signRequest(e))},approvals:{request:e=>T(`approvals`,`request`,async()=>(await t()).requestApproval(e))}})}function Fo(e={}){let t=_t(()=>import(`./rest-ops-CPEMTyP-.js`).then(t=>t.createRestOps(e)),e.controlTimeoutMs??1e4);return Mo({adapter:`node-rest`,pageGestures:e.pageGestures,network:{localNodeServer:()=>Promise.resolve({ok:!0,value:{available:!0}}),crossOriginFetch:e=>T(`network`,`crossOriginFetch`,async()=>(await t()).crossOriginFetch(e))},secrets:{listMaskedEnv:()=>T(`secrets`,`listMaskedEnv`,async()=>(await t()).secrets.listMaskedEnv()),getMasked:e=>T(`secrets`,`getMasked`,async()=>(await t()).secrets.getMasked(e)),set:e=>T(`secrets`,`set`,async()=>(await t()).secrets.set(e)),delete:e=>T(`secrets`,`delete`,async()=>(await t()).secrets.delete(e))},mounts:{signRequest:e=>T(`mounts`,`signRequest`,async()=>(await t()).signRequest(e))},approvals:{request:e=>T(`approvals`,`request`,async()=>(await t()).requestApproval(e))}})}function Io(e,t={}){let{pageGestures:n}=t;switch(e){case`node-rest`:return Fo({pageGestures:n});case`extension-direct`:case`extension-delegate`:return Po({adapter:e,pageGestures:n});case`connect`:return No({pageGestures:n})}}const Lo=e(`quick-llm`);async function Ro(e){let t=d();if(!t)return Lo.debug(`No API key for active provider — skipping`),null;let n=u(),r=l(),i;if(i=e.modelId?Ho(n,e.modelId)??Ho(n,r):zo(n,r),!i)return Lo.debug(`No model available for provider`,{providerId:n}),null;let a={role:`user`,content:e.prompt,timestamp:Date.now()},o={};i.provider===`adobe`&&(o[`X-Session-Id`]=Uo());try{let n=(await he(i,{systemPrompt:e.system,messages:[a]},{apiKey:t,maxTokens:e.maxTokens??60,temperature:e.temperature??.3,signal:e.signal,headers:Object.keys(o).length>0?o:void 0})).content.filter(e=>e.type===`text`).map(e=>e.text).join(``).trim();return n.length>0?n:null}catch(e){return Lo.debug(`Quick label call failed`,{error:e instanceof Error?e.message:String(e)}),null}}function zo(e,t){let n=f(e);if(n.length===0)return;let r=n.find(e=>e.id===t)??n[0],i=Vo(r.id),a=n.filter(e=>Bo(e,r,i));return a.length===0?r:(a.sort((e,t)=>(e.cost?.input??0)-(t.cost?.input??0)),a[0])}function Bo(e,t,n){if(e.id===t.id)return!1;let r=t.cost?.input??1/0;if((e.cost?.input??1/0)>=r)return!1;let i=e.id.toLowerCase();switch(n){case`claude`:return i.includes(`haiku`);case`gpt`:return/(^|-)mini(-|$)|(^|-)nano(-|$)/.test(i);case`gemini`:return i.includes(`flash`);case`grok`:return/(^|-)mini(-|$)|(^|-)fast(-|$)/.test(i);case`unknown`:return!0}}function Vo(e){let t=e.toLowerCase();return t.includes(`claude`)?`claude`:t.includes(`gemini`)?`gemini`:t.includes(`grok`)?`grok`:/^(gpt|o\d)/.test(t)?`gpt`:`unknown`}function Ho(e,t){return f(e).find(e=>e.id===t)}function Uo(){return yt(`ui-quick-llm`)}const Wo=e(`sudo-suggest`),Go=[`You generalize a single shell command into a minimal glob pattern for an`,`allow-list rule. Output ONLY the pattern on one line — no prose, no quotes,`,`no backticks. Keep the leading command/sub-command verbatim and replace only`,`the volatile tail (args, paths, refs) with a single trailing "*".`,`Examples:`,` git push origin main -> git push*`,` rm -rf build/cache -> rm -rf*`,` npm install left-pad -> npm install*`].join(`
|
|
2
|
+
`),Ko=[`You generalize a single filesystem path into a minimal glob pattern for an`,`allow-list rule. Output ONLY the pattern on one line — no prose, no quotes,`,`no backticks. Keep the meaningful directory prefix and replace the volatile`,`leaf (and below) with "**". Examples:`,` /workspace/.git/config -> /workspace/.git/**`,` /shared/secrets/openai.key -> /shared/secrets/**`,` /workspace/src/app/main.ts -> /workspace/src/**`].join(`
|
|
3
|
+
`);async function qo(e,t){if(e.suggestedPattern&&e.suggestedPattern.trim().length>0)return e.suggestedPattern.trim();let n=e.detail.trim(),r=e.kind===`command`?Go:Ko,i=null;try{i=await Ro({prompt:n,system:r,maxTokens:40,temperature:0,signal:t})}catch(e){Wo.debug(`suggestPattern: quickLabel threw`,{error:e instanceof Error?e.message:String(e)}),i=null}return Jo(i)||n}function Jo(e){if(!e)return null;let t=(e.split(`
|
|
4
|
+
`,1)[0]?.trim()??``).replace(/^`+/,``).replace(/`+$/,``).replace(/^["']/,``).replace(/["']$/,``).trim();return t.length===0?null:t}const Yo=e(`sudo:capability-gesture`);function Xo(e,t={}){let n=t.suggest??qo;return{async requestApproval(t,r){let i=r?.signal,a;if(t.suggestedPattern)a=t.suggestedPattern;else try{a=await n(t,i)}catch{a=t.detail}if(i?.aborted)return Yo.warn(`sudo approval aborted before prompting — denying`,{detail:t.detail}),{decision:`deny`};if(!e)return Yo.warn(`no CapabilityBroker injected for the sudo gesture hop — denying (composition bug, never a guessed transport)`,{detail:t.detail}),{decision:`deny`};let o=await e.approvals.request({kind:t.kind,detail:t.detail,suggestedPattern:a,...t.requester?{requester:t.requester}:{},...t.reason?{reason:t.reason}:{},...t.approver?{approver:t.approver}:{},...i?{signal:i}:{}});return o.ok?ft(o.value,a):(Yo.warn(`capability broker approvals.request failed — denying`,{message:o.message}),{decision:`deny`})}}}const Zo=e(`sudo:tray-first`);function Qo(e,t={}){let n=t.suggest??qo,r=t.timeoutMs??6e5,i=t.getClient??(async()=>{let{getPanelRpcClient:e}=await import(`./panel-rpc-DW7W4w6_.js`).then(e=>e.a);return e()});return{async requestApproval(t,a){if(a?.signal?.aborted)return{decision:`deny`};let o=t.suggestedPattern;if(!o)try{o=await n(t,a?.signal)}catch{o=t.detail}let s={...t,suggestedPattern:o},c=null;try{c=await i()}catch(e){Zo.debug?.(`panel-RPC client lookup threw — using native broker`,{error:e instanceof Error?e.message:String(e)})}if(c)try{let e=await c.call(`sudo-request`,{request:s,mode:`tray-first`},{timeoutMs:r});if(e?.handled!==!1)return $o(e?.decision,o)}catch(e){Zo.warn(`tray-first sudo probe failed — using native broker`,{error:e instanceof Error?e.message:String(e)})}return e.requestApproval(s,a)}}}function $o(e,t){if(!e||typeof e!=`object`)return{decision:`deny`};let n=e,r=n.attestation===`biometric`||n.attestation===`passcode`||n.attestation===`none`?n.attestation:void 0;return n.decision===`allow`?{decision:`allow`,...r?{attestation:r}:{}}:n.decision===`always`?{decision:`always`,pattern:typeof n.pattern==`string`&&n.pattern.trim().length>0?n.pattern.trim():t,...r?{attestation:r}:{}}:{decision:`deny`}}function es(e,t){return{requestApproval(n){return t.enqueueSudoRequest(e,n)}}}function ts(){return`lick-${Date.now()}-${Math.random().toString(36).slice(2,10)}`}var ns=class{pending=new Map;timeoutMs;newId;setTimer;clearTimer;onAutoSettle;constructor(e={}){this.timeoutMs=e.timeoutMs??3e5,this.newId=e.newId??ts,this.setTimer=e.setTimer??((e,t)=>setTimeout(e,t)),this.clearTimer=e.clearTimer??(e=>clearTimeout(e)),this.onAutoSettle=e.onAutoSettle??(()=>{})}notifyAutoSettle(e,t,n){try{this.onAutoSettle(e,t,n)}catch{}}register(e,t,n){let r=this.newId();return{id:r,pending:new Promise(i=>{let a=null;Number.isFinite(this.timeoutMs)&&this.timeoutMs>0&&(a=this.setTimer(()=>{let e=this.pending.get(r);e&&(this.pending.delete(r),e.resolve(ot(`cone-timeout`)),this.notifyAutoSettle(r,`expired`,e.scoopJid))},this.timeoutMs)),this.pending.set(r,{scoopJid:e,request:t,resolve:i,timerHandle:a,approverJid:n})})}}resolve(e,t){let n=this.pending.get(e);return n?(this.pending.delete(e),n.timerHandle!=null&&this.clearTimer(n.timerHandle),n.resolve(t),!0):!1}failScoop(e){let t=0;for(let[n,r]of this.pending)r.scoopJid===e&&(this.pending.delete(n),r.timerHandle!=null&&this.clearTimer(r.timerHandle),r.resolve({decision:`deny`}),this.notifyAutoSettle(n,`scoop-dropped`,r.scoopJid),t++);return t}failAll(){let e=0;for(let[t,n]of this.pending)n.timerHandle!=null&&this.clearTimer(n.timerHandle),n.resolve({decision:`deny`}),this.notifyAutoSettle(t,`shutdown`,n.scoopJid),e++;return this.pending.clear(),e}get(e){let t=this.pending.get(e);return t?{id:e,scoopJid:t.scoopJid,request:t.request,...t.approverJid?{approverJid:t.approverJid}:{}}:null}list(){let e=[];for(let[t,n]of this.pending)e.push({id:t,scoopJid:n.scoopJid,request:n.request,...n.approverJid?{approverJid:n.approverJid}:{}});return e}size(){return this.pending.size}};e(`sudo-panel`),typeof globalThis.confirm==`function`&&globalThis.confirm.bind(globalThis),typeof globalThis.prompt==`function`&&globalThis.prompt.bind(globalThis),e(`sudo:page`),e(`sudo`);function rs(e){return st(is(e))}function is(e){let t=Xo(e);return e?.adapter===`extension-direct`||e?.adapter===`extension-delegate`?t:Qo(t)}let as=null;function os(e){return as=e,()=>{as===e&&(as=null)}}function ss(){if(!as)throw new xa(`session-not-found`);return as}const cs=`focus`,ls={type:`leaf`,surfaceId:`chat`};function us(e,t={},n={}){return{zones:{top:null,left:null,middle:null,right:null,bottom:null,...e},rowFr:{top:1,center:1,bottom:1,...n},colFr:{left:1,middle:1,right:1,...t}}}const ds={focus:{name:`focus`,tree:us({left:ls},{left:3,middle:1})}};function fs(e){return ds[e]??null}const ps=`progress`;function ms(e){return/^[A-Za-z_][A-Za-z0-9_]*$/.test(e)}async function hs(){try{let e=await wt();if(e.cancelled)throw Error(`mount: cancelled`);if(e.error)throw Error(`mount: ${e.error}`);if(e.handleInIdb&&typeof e.idbKey==`string`){let t=await Tt(e.idbKey);if(!t)throw Error(`mount: no directory handle found in storage`);return await Ct(t),t}throw Error(`mount: unexpected popup result`)}catch(e){throw Error(`mount: ${e instanceof Error?e.message:String(e)}`)}}async function gs(){if(typeof window>`u`||!(`showDirectoryPicker`in window))throw Error(`mount: local picker requires a user gesture in the panel (unavailable in this runtime). Ask the agent to mount it instead.`);try{return await window.showDirectoryPicker({mode:`readwrite`})}catch(e){throw e instanceof Error&&e.name===`AbortError`?Error(`mount: cancelled`):Error(`mount: ${e instanceof Error?e.message:String(e)}`)}}function _s(e){let t={positional:[],noProbe:!1,clearCache:!1,bodies:!1,json:!1};for(let n=0;n<e.length;n++){let r=e[n];if(r===`--source`)t.source=e[++n];else if(r===`--profile`)t.profile=e[++n];else if(r===`--backend`){let r=e[++n];r===`da`||r===`aem`?t.backend=r:t.backendError=r}else r===`--no-probe`?t.noProbe=!0:r===`--max-body-mb`?t.maxBodyMb=Number(e[++n]):r===`--clear-cache`?t.clearCache=!0:r===`--bodies`?t.bodies=!0:r===`--json`?t.json=!0:t.positional.push(r)}return t}function vs(e){let t=e.match(/^(da|aem):\/\/([^/]+)\/([^/]+)(?:\/(.*))?$/);return t?{scheme:t[1],org:t[2],name:t[3],path:(t[4]??``).replace(/^\/+/,``).replace(/\/+$/,``)}:null}const ys=new Set([`--source`,`--profile`,`--backend`,`--max-body-mb`]);function bs(e){for(let t=0;t<e.length;t++){let n=e[t];if(n===`--`)return!1;if(n===`--help`||n===`-h`)return!0;ys.has(n)&&t++}return!1}function xs(e){return`aem://${e.org}/${e.name}${e.path?`/${e.path}`:``}`}var Ss=class{options;signedFetchS3;signedFetchDa;constructor(e){this.options=e,this.signedFetchS3=e.signedFetchS3,this.signedFetchDa=e.signedFetchDa}async execute(e,t,n){let r=e[0];if(r===`--help`||r===`-h`)return this.help();if(r===`unmount`||r===`-u`)return this.handleUnmount(e.slice(1),t,`mount unmount`);if(r===`list`||r===`-l`||r===`--list`)return this.handleList();if(r===`refresh`)return this.handleRefresh(e.slice(1),t,n);if(r===`info`)return this.handleInfo(e.slice(1),t);let i=_s(e);if(i.positional.length===0)return this.usageError(`mount: mount point required`);let a=this.resolvePath(i.positional[0],t);return i.backendError===void 0?i.source?i.source.startsWith(`s3://`)?this.mountS3(a,i):i.source.startsWith(`da://`)||i.source.startsWith(`aem://`)?this.mountAdobe(a,i):this.usageError(`mount: invalid source '${i.source}' — expected s3://..., da://... or aem://...`):this.mountLocal(a,n):this.usageError(`mount: invalid --backend '${i.backendError}' — expected 'da' or 'aem'`)}async executeUmount(e,t){return this.handleUnmount(e,t,`umount`)}async mountLocal(e,t){try{if((this.options.isScoop??(()=>!1))())throw Error(`mount: cannot mount local directories from a scoop (no UI). Ask the cone.`);let n=xe();if(!n){let n=await Cs(e);if(n)return await this.options.fs.mount(e,n,{env:t}),{stdout:`Mounted '${n.describe().displayName}' → ${e}\nIndexing in background for fast file discovery.\nNote: External changes are not auto-detected — use 'mount refresh ${e}' after modifying files outside the browser.\n`,stderr:``,exitCode:0}}let r;if(n){let t=this.options.acquireLocalMountViaToolUI;if(!t)throw Error(`mount: tool UI not available in this runtime`);r=await t(n,e)}else r=_()?await hs():await gs();let i=Fe.fromHandle(r,{mountId:He()});return await this.options.fs.mount(e,i,{env:t}),{stdout:`Mounted '${i.describe().displayName}' → ${e}\nIndexing in background for fast file discovery.\nNote: External changes are not auto-detected — use 'mount refresh ${e}' after modifying files outside the browser.\n`,stderr:``,exitCode:0}}catch(e){return{stdout:``,stderr:`mount: ${e instanceof Error?e.message:String(e)}\n`,exitCode:1}}}async mountS3(e,t){if(!t.source)return this.usageError(`mount: --source required`);let n=t.profile??`default`,r=He(),i=new Ue({mountId:r,ttlMs:3e4}),a=new Le({source:t.source,profile:n,cache:i,maxBodyBytes:t.maxBodyMb?t.maxBodyMb*1024*1024:void 0,mountId:r,signedFetch:this.signedFetchS3??Re(n)});if(!t.noProbe)try{await a.readDir(`/`)}catch(e){return await a.close(),{stdout:``,stderr:`mount: probe failed for ${t.source} — ${e instanceof Error?e.message:String(e)}\n`,exitCode:1}}return await this.options.fs.mount(e,a),{stdout:`Mounted '${a.describe().displayName}' → ${e} (profile: ${n})\n`,stderr:``,exitCode:0}}async mountAdobe(e,t){if(!t.source)return this.usageError(`mount: --source required`);let n=t.profile??`default`,r=this.signedFetchDa??Ve(),i=vs(t.source);if(!i)return this.usageError(`mount: invalid source '${t.source}' — expected da://org/repo or aem://org/site`);let a=i.scheme===`aem`?`aem`:`da`,o=``;if(t.backend)a=t.backend;else if(i.scheme===`da`)try{a=(await xo(i.org,i.name,r)).backend,a===`aem`&&(o=`mount: ${i.org}/${i.name} is on Helix 6 — its content lives in the Source Bus at https://api.aem.live/${i.org}/sites/${i.name}/source, not admin.da.live. Mounting through aem://${i.org}/${i.name}. Pass --backend da to force the old endpoint.\n`)}catch(e){return{stdout:``,stderr:`mount: could not determine the content source for ${t.source} — ${e instanceof Error?e.message:String(e)}. Pass --backend da or --backend aem to skip this probe.\n`,exitCode:1}}let s=He(),c=new Ue({mountId:s,ttlMs:3e4}),l={source:a===`aem`?xs(i):`da://${i.org}/${i.name}${i.path?`/${i.path}`:``}`,profile:n,cache:c,maxBodyBytes:t.maxBodyMb?t.maxBodyMb*1024*1024:void 0,mountId:s,signedFetch:r},u=a===`aem`?new Be(l):new Ie(l);if(!t.noProbe)try{await u.readDir(`/`)}catch(e){return await u.close(),{stdout:``,stderr:o+`mount: probe failed for ${l.source} — ${e instanceof Error?e.message:String(e)}\n`,exitCode:1}}return await this.options.fs.mount(e,u),{stdout:`Mounted '${u.describe().displayName}' → ${e} (profile: ${n})\n`,stderr:o,exitCode:0}}async handleUnmount(e,t,n){if(bs(e))return n===`umount`?this.umountHelp():this.help();let r=_s(e);if(r.positional.length===0)return{stdout:``,stderr:`${n}: path required\n`,exitCode:1};let i=this.resolvePath(r.positional[0],t);try{let e,t;if(r.clearCache){let{getAllMountEntries:n}=await import(`./mount-table-store-DrF_Ifaz.js`).then(e=>e.r),r=(await n()).find(e=>e.targetPath===i),a=r?.descriptor.kind;r&&(a===`s3`||a===`da`||a===`aem`)&&(e=r.descriptor.mountId,t=r.descriptor.kind)}await this.options.fs.unmount(i);let n=``;if(r.clearCache&&e&&t){let{RemoteMountCache:t}=await import(`./remote-cache-BE5T1-53.js`).then(e=>e.n);await new t({mountId:e,ttlMs:3e4}).clearMount(),n=` (cache cleared)`}else r.clearCache&&(n=` (no remote cache to clear)`);return{stdout:`Unmounted ${i}${n}\n`,stderr:``,exitCode:0}}catch(e){return{stdout:``,stderr:`${n}: ${e instanceof Error?e.message:String(e)}\n`,exitCode:1}}}async handleList(){try{let e=this.options.fs.listMounts();if(e.length===0)return{stdout:`No active mounts
|
|
5
5
|
`,stderr:``,exitCode:0};let t=this.options.fs.getMountIndex();return{stdout:e.map(e=>{let n=t.getState(e);if(!n)return e;if(n.status===`ready`)return`${e} (indexed: ${n.indexed} entries)`;if(n.status===`indexing`)return`${e} (indexing: ${n.indexed} entries...)`;if(n.status===`error`)switch(n.abortCause){case`depth-exceeded`:return`${e} (index skipped: directory nesting exceeded the depth limit — reads use the slow path; raise SLICC_MOUNT_INDEX_MAX_DEPTH or 'mount unmount ${e}')`;case`entries-exceeded`:return`${e} (index skipped: mounted tree is too large — reads use the slow path; raise SLICC_MOUNT_INDEX_MAX_ENTRIES or 'mount unmount ${e}')`;case`cycle-detected`:return`${e} (index skipped: self-referential mount cycle detected — run 'mount unmount ${e}' to remove it)`;default:return`${e} (index error: ${n.error})`}return`${e} (pending index)`}).join(`
|
|
6
6
|
`)+`
|
|
7
|
-
`,stderr:``,exitCode:0}}catch(e){return{stdout:``,stderr:`mount list: ${e instanceof Error?e.message:String(e)}\n`,exitCode:1}}}async handleInfo(e,t){if(
|
|
8
|
-
`,exitCode:1};let r=this.resolvePath(n.positional[0],t);try{let{formatMountInfo:e,probeMountInfo:t}=await import(`./probe-info-Cfr3jYru.js`),i=await t(this.options.fs,r);return{stdout:n.json?`${JSON.stringify(i,null,2)}\n`:e(i),stderr:``,exitCode:0}}catch(e){return{stdout:``,stderr:`mount info: ${e instanceof Error?e.message:String(e)}\n`,exitCode:1}}}async handleRefresh(e,t,n){let r=
|
|
7
|
+
`,stderr:``,exitCode:0}}catch(e){return{stdout:``,stderr:`mount list: ${e instanceof Error?e.message:String(e)}\n`,exitCode:1}}}async handleInfo(e,t){if(bs(e))return this.help();let n=_s(e);if(n.positional.length===0)return{stdout:``,stderr:`mount info: path required
|
|
8
|
+
`,exitCode:1};let r=this.resolvePath(n.positional[0],t);try{let{formatMountInfo:e,probeMountInfo:t}=await import(`./probe-info-Cfr3jYru.js`),i=await t(this.options.fs,r);return{stdout:n.json?`${JSON.stringify(i,null,2)}\n`:e(i),stderr:``,exitCode:0}}catch(e){return{stdout:``,stderr:`mount info: ${e instanceof Error?e.message:String(e)}\n`,exitCode:1}}}async handleRefresh(e,t,n){let r=_s(e);if(r.positional.length===0)return{stdout:``,stderr:`mount refresh: path required
|
|
9
9
|
`,exitCode:1};let i=this.resolvePath(r.positional[0],t);try{let e=await this.options.fs.refreshMount(i,{bodies:r.bodies,env:n});return{stdout:`Refreshed ${i}: +${e.added.length} -${e.removed.length} ~${e.changed.length} (${e.unchanged} unchanged, ${e.errors.length} errors)\n`,stderr:e.errors.map(e=>` ${e.path}: ${e.message}\n`).join(``),exitCode:+(e.errors.length>0)}}catch(e){return{stdout:``,stderr:`mount refresh: ${e instanceof Error?e.message:String(e)}\n`,exitCode:1}}}resolvePath(e,t){let n;return n=e.startsWith(`/`)?e:`${t.replace(/\/$/,``)}/${e}`,n.length>1&&(n=n.replace(/\/+$/,``)),n}usageError(e){return{stdout:``,stderr:`${e}\n`,exitCode:1}}umountHelp(){return{stdout:[`Usage: umount [--clear-cache] <path>`,``,"Unmount a mount point. `umount <path>` is an alias for","`mount unmount <path>` — same behaviour, shorter to type.",``,`Options:`,` --clear-cache Also drop cached listings and bodies for a remote mount`,``,`Examples:`,` umount /mnt/myapp`,` umount --clear-cache /mnt/s3`,``,`See also: mount --help, mount list`].join(`
|
|
10
10
|
`)+`
|
|
11
11
|
`,stderr:``,exitCode:0}}help(){return{stdout:[`Usage: mount [OPTIONS] <target-path>`,` mount unmount [--clear-cache] <path>`,` mount list`,` mount --list`,` mount refresh [--bodies] <path>`,` mount info [--json] <path>`,``,`Mount a local directory, S3 bucket, or AEM authoring source into the`,`virtual filesystem.`,``,`Without --source, opens a directory picker (local mount). With --source, mounts`,`a remote source (S3-compatible, da.live, or the Helix 6 Source Bus).`,``,`A da:// source is checked against the site config first: sites upgraded to`,`Helix 6 are re-routed to the Source Bus, because admin.da.live no longer`,`holds their content. Use --backend to force either endpoint.`,``,`Options:`,` --source <url> Remote source: s3://bucket[/prefix], da://org/repo,`,` or aem://org/site`,` --profile <name> Profile name (default: "default")`,` --backend <da|aem> Force the Adobe backend instead of probing the site config`,` --no-probe Skip the root-level probe on mount`,` --max-body-mb <n> Override body size limit (MB)`,``,`Sub-commands:`," unmount [--clear-cache] <path> Remove a mount point (also spelled `umount <path>`)",` list, --list, -l Show active mount points`,` refresh [--bodies] <path> Re-index or revalidate a mount`,` info [--json] <path> Probe volume semantics (case, Unicode, exec bit)`,``,`Examples:`,` mount /mnt/myapp`,` mount --source s3://my-bucket --profile default /mnt/s3`,` mount --source da://my-org/my-repo /mnt/da`,` mount --source aem://my-org/my-site /mnt/aem`,` mount list`,` mount info /tmp`,` mount info --json /mnt/kb`,` mount refresh /mnt/myapp`,` mount unmount /mnt/myapp`,` umount /mnt/myapp`].join(`
|
|
12
12
|
`)+`
|
|
13
|
-
`,stderr:``,exitCode:0}}};async function
|
|
14
|
-
`,exitCode:0};if(r)await
|
|
15
|
-
`)}return Vs(Rs(e.message)??e.message,t)}function Bs(e){let t=e.trim();if(!t)return!1;try{let e=/^[a-zA-Z][a-zA-Z0-9+.-]*:/.test(t)?t:t.includes(`@`)&&t.includes(`:`)?`ssh://${t.replace(`:`,`/`)}`:`https://${t}`,n=new URL(e).hostname.toLowerCase();return n===`github.com`||n.endsWith(`.github.com`)}catch{return/(?:^|[@/])github\.com(?:[/:]|$)/i.test(t)}}function Vs(e,t){if(!/\b401\b|Unauthorized/i.test(e))return e;if(t!==void 0){if(!Bs(t))return e}else if(!/github\.com/i.test(e))return`${e}\nhint: Authentication failed (401). Check credentials for this remote. If this is GitHub, stored \`git config github.token\` may be a stale snapshot — re-run \`oauth-token github\` (or Settings → Providers → GitHub).`;return`${e}\nhint: GitHub returned 401. Stored \`git config github.token\` may be a stale snapshot — git renews the OAuth broker on network ops, but a hand-written token is not refreshed. Re-run \`oauth-token github\` (or Settings → Providers → GitHub). If you must set \`github.token\` manually, capture stdout only (never \`2>&1\`) and prefer leaving the bridge to the OAuth login.`}const Hs={refresh:!1},Us=new Set([`never`,`false`,`0`,`off`,`no`]),Ws=new Set([`always`,`true`,`1`,`on`,`yes`]),Gs=/^(--?)([^=]+)(=.*)?$/,Ks=
|
|
13
|
+
`,stderr:``,exitCode:0}}};async function Cs(e){let t=`pendingMount:term:${e}`,n;try{n=await Tt(t)}catch{return null}if(!n)return null;try{await Ct(n)}catch{return null}return Fe.fromHandle(n,{mountId:He()})}async function ws(e,t,n){let r=n.includes(`-A`)||n.includes(`--all`),i=n.includes(`-u`)||n.includes(`--update`),a=n.includes(`-f`)||n.includes(`--force`),o=n.filter(e=>!e.startsWith(`-`));if(!r&&!i&&o.length===0)return{stdout:``,stderr:`Nothing specified, nothing added.
|
|
14
|
+
`,exitCode:0};if(r)await Ts(e,t,a);else if(o.includes(`.`))await Es(e,t,a);else if(i)await Ds(e,t,a);else for(let n of o)await qt({fs:e.lfs,cache:e.cache,dir:t,filepath:n,force:a});return{stdout:``,stderr:``,exitCode:0}}async function Ts(e,t,n){let r=await O({fs:e.lfs,cache:e.cache,dir:t});for(let[i,,a,o]of r)a!==o&&(a===0?await zt({fs:e.lfs,cache:e.cache,dir:t,filepath:i}):await qt({fs:e.lfs,cache:e.cache,dir:t,filepath:i,force:n}))}async function Es(e,t,n){let r=await O({fs:e.lfs,cache:e.cache,dir:t});for(let[i,,a,o]of r)a!==o&&a!==0&&await qt({fs:e.lfs,cache:e.cache,dir:t,filepath:i,force:n})}async function Ds(e,t,n){let r=await O({fs:e.lfs,cache:e.cache,dir:t});for(let[i,a,o,s]of r)a!==0&&o!==s&&(o===0?await zt({fs:e.lfs,cache:e.cache,dir:t,filepath:i}):await qt({fs:e.lfs,cache:e.cache,dir:t,filepath:i,force:n}))}const Os={boolean:[`dry-run`,`force`,`d`,`x`,`X`,`quiet`],alias:{n:`dry-run`,f:`force`,q:`quiet`}},I={init:{string:[`initial-branch`],alias:{b:`initial-branch`}},clone:{string:[`branch`,`depth`,`origin`,`upload-pack`],boolean:[`single-branch`,`quiet`],alias:{b:`branch`,o:`origin`,q:`quiet`},default:{"single-branch":!0}},commit:{string:[`message`,`author`,`date`,`file`,`cleanup`],boolean:[`amend`,`all`,`allow-empty`],alias:{m:`message`,a:`all`,F:`file`}},log:{string:[`max-count`,`format`,`author`,`committer`,`grep`,`since`,`until`,`skip`,`follow`],boolean:[`oneline`,`stat`,`reverse`,`all`,`color`],alias:{n:`max-count`,pretty:`format`},"--":!0},branch:{string:[`list`,`set-upstream-to`,`track`,`contains`,`no-contains`,`merged`,`no-merged`,`points-at`],boolean:[`color`],alias:{l:`list`,u:`set-upstream-to`,t:`track`}},checkout:{string:[`b`,`B`,`orphan`,`track`,`start-point`,`conflict`],"--":!0},clean:Os,diff:{string:[`format`,`diff-filter`,`unified`],boolean:[`staged`,`cached`,`name-only`,`name-status`,`stat`,`no-index`,`color`],alias:{pretty:`format`,U:`unified`},"--":!0},show:{string:[`format`],boolean:[`stat`,`color`],alias:{pretty:`format`}},status:{boolean:[`short`,`porcelain`,`color`],alias:{s:`short`}},merge:{string:[`message`,`strategy`,`strategy-option`],boolean:[`ff`,`ff-only`,`abort`,`edit`,`quiet`],alias:{m:`message`,s:`strategy`,X:`strategy-option`,q:`quiet`}},"cherry-pick":{boolean:[`no-commit`,`x`],alias:{n:`no-commit`}},revert:{boolean:[`no-commit`],alias:{n:`no-commit`}},rebase:{string:[`onto`,`strategy`,`strategy-option`],boolean:[`continue`,`abort`,`skip`,`interactive`,`rebase-merges`,`autosquash`],alias:{i:`interactive`,s:`strategy`,X:`strategy-option`}},"merge-file":{string:[`L`],boolean:[`stdout`,`quiet`,`diff3`,`ours`,`theirs`,`union`],alias:{p:`stdout`,q:`quiet`}},tag:{string:[`message`,`file`,`list`,`contains`,`points-at`],boolean:[`delete`,`annotate`,`force`],alias:{m:`message`,F:`file`,l:`list`,d:`delete`,a:`annotate`,f:`force`}},fetch:{string:[`depth`,`o`,`refmap`,`upload-pack`,`negotiation-tip`,`server-option`],boolean:[`prune`,`quiet`],alias:{p:`prune`,q:`quiet`}},pull:{string:[`depth`,`s`,`strategy`,`X`,`strategy-option`,`upload-pack`],boolean:[`ff-only`,`ff`,`quiet`],alias:{q:`quiet`}},push:{string:[`o`,`push-option`,`receive-pack`,`repo`,`exec`,`signed`,`4`,`6`],boolean:[`force`,`set-upstream`,`quiet`,`verbose`,`dry-run`,`tags`,`progress`],alias:{f:`force`,u:`set-upstream`,q:`quiet`,v:`verbose`}},"symbolic-ref":{string:[`m`],boolean:[`delete`,`quiet`,`short`,`recurse`],alias:{d:`delete`,q:`quiet`}},"ls-tree":{boolean:[`r`,`d`,`name-only`]},"ls-remote":{boolean:[`heads`,`tags`,`symref`,`exit-code`],alias:{h:`heads`,t:`tags`}}},ks=/^(--?)([^=]+)(=.*)?$/;function As(e){let t=new Set(e.string??[]);for(let n of e.boolean??[])t.add(n),t.add(`no-${n}`);for(let[n,r]of Object.entries(e.alias??{})){t.add(n);for(let e of Array.isArray(r)?r:[r])t.add(e)}return t}function js(e){let t=new Set(e.string??[]);for(let[n,r]of Object.entries(e.alias??{})){let e=[n,...Array.isArray(r)?r:[r]];if(e.some(e=>t.has(e)))for(let n of e)t.add(n)}return t}function Ms(){let e=new Set([`c`,`C`,`git-dir`,`work-tree`]);for(let t of Object.values(I))for(let n of js(t))e.add(n);return e}function Ns(e,t,n){for(let r of e){if(!t.has(r))return r;if(n.has(r))return}}function Ps(e,t){let n=As(t),r=js(t),i=e.indexOf(`--`),a=i===-1?e:e.slice(0,i);for(let e=0;e<a.length;e++){let t=a[e];if(!t.startsWith(`-`)||t===`-`)continue;let i=ks.exec(t);if(!i)continue;let o=i[2];if(i[1]===`-`&&o.length>1&&!i[3]&&!n.has(o)){let e=Ns(o,n,r);if(e)return e;continue}if(!n.has(o))return o;!i[3]&&r.has(o)&&e+1<a.length&&e++}}function Fs(e){return{stdout:``,stderr:`error: unknown ${e.length===1?`switch`:`option`} \`${e}\`\n`,exitCode:129}}function Is(e,t){if(!t)return;let n=Ps(e,t);return n?Fs(n):void 0}function Ls(e,t){let n=e[t];if(n===void 0)return;let r=String(Array.isArray(n)?n[n.length-1]:n);return r===``?void 0:r}function Rs(e){let t=/Could not read packfile at (.+?)\.(?:\s|$)/.exec(e);return t?`unable to read the packfile ${t[1]}: it could not be loaded in one piece — it may be missing or corrupted, or larger than the 100 MB hostfs whole-file limit if this repo is a --mount`:e.startsWith(`Could not read packfile data.`)?`unable to read packfile data: a packfile could not be loaded in one piece — it may be missing or corrupted, or larger than the 100 MB hostfs whole-file limit if this repo is a --mount`:null}function zs(e,t){if(!(e instanceof Error))return Vs(String(e),t);let n=e;if(e.name===`MultipleGitError`||e.name===`AggregateError`||typeof AggregateError<`u`&&e instanceof AggregateError){let e=Array.isArray(n.errors)?n.errors:Array.isArray(n.data?.errors)?n.data?.errors:[];if(e.length>0)return e.map(e=>zs(e,t)).join(`
|
|
15
|
+
`)}return Vs(Rs(e.message)??e.message,t)}function Bs(e){let t=e.trim();if(!t)return!1;try{let e=/^[a-zA-Z][a-zA-Z0-9+.-]*:/.test(t)?t:t.includes(`@`)&&t.includes(`:`)?`ssh://${t.replace(`:`,`/`)}`:`https://${t}`,n=new URL(e).hostname.toLowerCase();return n===`github.com`||n.endsWith(`.github.com`)}catch{return/(?:^|[@/])github\.com(?:[/:]|$)/i.test(t)}}function Vs(e,t){if(!/\b401\b|Unauthorized/i.test(e))return e;if(t!==void 0){if(!Bs(t))return e}else if(!/github\.com/i.test(e))return`${e}\nhint: Authentication failed (401). Check credentials for this remote. If this is GitHub, stored \`git config github.token\` may be a stale snapshot — re-run \`oauth-token github\` (or Settings → Providers → GitHub).`;return`${e}\nhint: GitHub returned 401. Stored \`git config github.token\` may be a stale snapshot — git renews the OAuth broker on network ops, but a hand-written token is not refreshed. Re-run \`oauth-token github\` (or Settings → Providers → GitHub). If you must set \`github.token\` manually, capture stdout only (never \`2>&1\`) and prefer leaving the bridge to the OAuth login.`}const Hs={refresh:!1},Us=new Set([`never`,`false`,`0`,`off`,`no`]),Ws=new Set([`always`,`true`,`1`,`on`,`yes`]),Gs=/^(--?)([^=]+)(=.*)?$/,Ks=Ms();function qs(e){if(e===!1)return`never`;if(e===!0)return`always`;if(typeof e==`number`)return e===0?`never`:e===1?`always`:void 0;if(typeof e!=`string`||e.length===0)return;let t=e.toLowerCase();if(t===`never`||t===`false`||t===`0`||t===`off`||t===`no`)return`never`;if(t===`always`||t===`true`||t===`1`||t===`on`||t===`yes`)return`always`;if(t===`auto`)return`auto`}function Js(e){let t,n=e.indexOf(`--`),r=n===-1?e:e.slice(0,n);for(let e=0;e<r.length;e++){if(Xs(r,e))continue;let n=r[e];if(n===`--no-color`){t=`never`;continue}if(n===`--color`){t=`always`;continue}n.startsWith(`--color=`)&&(t=qs(n.slice(8))??t)}return t}function Ys(e){let t=e.indexOf(`--`),n=[];for(let r=0;r<e.length;r++){if(t!==-1&&r>=t){n.push(...e.slice(r));break}let i=e[r];if(Xs(e,r,t)){n.push(i);continue}if(i.startsWith(`--color=`)){let e=Zs(i.slice(8));e&&n.push(e);continue}n.push(i)}return n}function Xs(e,t,n=-1){if(t===0||n!==-1&&t-1>=n)return!1;let r=e[t-1],i=Gs.exec(r);return!i||i[3]?!1:Ks.has(i[2])}function Zs(e){let t=e.toLowerCase();if(Us.has(t))return`--no-color`;if(Ws.has(t))return`--color`}function Qs(e){let t=e.stdoutIsTTY&&e.term!==`dumb`,n=e=>{if(e===`always`)return!0;if(e===`never`)return!1;if(e===`auto`)return t},r=n(e.cliWhen);if(r!==void 0)return r;let i=n(qs(e.colorUi));return i===void 0?!e.noColorEnv&&t:i}function $s(e,t,n){return e?`\x1b[${t}m${n}\x1b[0m`:n}async function ec(e,t,n){let r=n.includes(`-d`)||n.includes(`-D`)||n.includes(`--delete`),i=n.includes(`-a`)||n.includes(`--all`);if(n.includes(`--show-current`)){let n=await A({fs:e.lfs,dir:t});return{stdout:n?`${n}\n`:``,stderr:``,exitCode:0}}let a=n.find(e=>!e.startsWith(`-`));if(r&&a)return await an({fs:e.lfs,dir:t,ref:a}),{stdout:`Deleted branch ${a}\n`,stderr:``,exitCode:0};if(a&&!r)return await Yt({fs:e.lfs,dir:t,ref:a}),{stdout:``,stderr:``,exitCode:0};let o=await kt({fs:e.lfs,dir:t}),s=await A({fs:e.lfs,dir:t}),c=``;for(let t of o)c+=t===s?`* ${$s(e.useColor,`32`,t)}\n`:` ${t}\n`;if(i)try{let n=await kt({fs:e.lfs,dir:t,remote:`origin`});for(let t of n)c+=` ${$s(e.useColor,`31`,`remotes/origin/${t}`)}\n`}catch{}return{stdout:c,stderr:``,exitCode:0}}async function tc(e,t,n){let r=n.includes(`-b`),i=n.includes(`-f`)||n.includes(`--force`),a=n.indexOf(`--`);if(a!==-1){let r=n.slice(a+1);if(r.length===0)return{stdout:``,stderr:`error: you must specify path(s) to restore
|
|
16
16
|
`,exitCode:1};let i=n.slice(0,a).filter(e=>!e.startsWith(`-`))[0];return oc(e,t,r,i)}let o=n.find(e=>!e.startsWith(`-`));if(!o)return{stdout:``,stderr:`error: you must specify path(s) or a branch to checkout
|
|
17
17
|
`,exitCode:1};if(r){let r=n.indexOf(`-b`),a=n.slice(r+1).filter(e=>!e.startsWith(`-`)),s=a.length>1?a[1]:void 0;try{await Yt({fs:e.lfs,dir:t,ref:o,object:s,checkout:!1,force:i})}catch(e){return ac(e,o)}try{await nc(e,t,o,i)}catch(n){if(!i)try{await an({fs:e.lfs,dir:t,ref:o})}catch{}return ac(n,o)}return await e.fs.flush(),{stdout:`Switched to a new branch '${o}'\n`,stderr:``,exitCode:0}}try{await nc(e,t,o,i)}catch(e){return ac(e,o)}return await e.fs.flush(),{stdout:`Switched to branch '${o}'\n`,stderr:``,exitCode:0}}async function nc(e,t,n,r){let i;try{i=await E({fs:e.lfs,dir:t,ref:`HEAD`})}catch{i=void 0}let a=new Set(await D({fs:e.lfs,cache:e.cache,dir:t}));await rn({fs:e.lfs,cache:e.cache,dir:t,ref:n,force:r});let o=await E({fs:e.lfs,dir:t,ref:n}),s=new Set(await D({fs:e.lfs,cache:e.cache,dir:t,ref:o}));await rc(e,t,a,s),!(!r&&i===o)&&await ic(e,t,o,a,s)}async function rc(e,t,n,r){for(let i of n)if(!r.has(i)){try{await zt({fs:e.lfs,cache:e.cache,dir:t,filepath:i})}catch{}try{await e.fs.rm(`${t}/${i}`)}catch{}}}async function ic(e,t,n,r,i){for(let a of i){if(!r.has(a))continue;let i=`${t}/${a}`;try{let t=await e.fs.lstat(i);if(t.type===`symlink`||t.type===`directory`)continue}catch{continue}let{blob:o}=await At({fs:e.lfs,cache:e.cache,dir:t,oid:n,filepath:a}),s=a.lastIndexOf(`/`);s!==-1&&await e.fs.mkdir(`${t}/${a.slice(0,s)}`,{recursive:!0}),await e.fs.writeFile(i,o),await _n({fs:e.lfs,cache:e.cache,dir:t,filepath:a,ref:n})}}function ac(e,t){if(e instanceof Error&&e.name===`MultipleGitError`)return{stdout:``,stderr:`error: unable to checkout '${t}':\n${zs(e).split(`
|
|
18
18
|
`).map(e=>` ${e}`).join(`
|
|
@@ -21,23 +21,23 @@ import{t as e}from"./logger-LESFN7Hj.js";import{r as t,t as n}from"./base64-BPBW
|
|
|
21
21
|
`,exitCode:128};let c=await uc(e,t,s);if(c===void 0)return{stdout:``,stderr:`fatal: bad revision '${s}'\n`,exitCode:128};try{let n=await fn({fs:e.lfs,cache:e.cache,dir:t,oid:c,abortOnConflict:!1,noUpdateBranch:a,committer:await e.resolveAuthor(t),mergeDriver:sc()});if(a)return{stdout:``,stderr:``,exitCode:0};let r=n,{commit:i}=await k({fs:e.lfs,cache:e.cache,dir:t,oid:n});if(o){let n=i.message.replace(/\s+$/,``);r=await Zt({fs:e.lfs,cache:e.cache,dir:t,message:`${n}\n\n(cherry picked from commit ${c})\n`,author:i.author,committer:await e.resolveAuthor(t),amend:!0})}let s=await A({fs:e.lfs,dir:t}),l=i.message.split(`
|
|
22
22
|
`)[0];return{stdout:`[${s??`HEAD`} ${r.slice(0,7)}] ${l}\n`,stderr:``,exitCode:0}}catch(e){return yc(e,c)}}function yc(e,t){let n=t.slice(0,7);if(e instanceof Error&&e.name===`MergeConflictError`){let t=e.data?.filepaths??[],r=``;for(let e of t)r+=`CONFLICT (content): Merge conflict in ${e}\n`;return r+=`error: could not apply ${n}...\n`,r+=`hint: after resolving the conflicts, mark them with 'git add <paths>',
|
|
23
23
|
`,r+=`hint: then commit the result.
|
|
24
|
-
`,{stdout:``,stderr:r,exitCode:1}}return e instanceof Error&&e.name===`CherryPickMergeCommitError`?{stdout:``,stderr:`error: commit ${t} is a merge but no -m option was given.\nfatal: cherry-pick failed\n`,exitCode:128}:e instanceof Error&&e.name===`CherryPickRootCommitError`?{stdout:``,stderr:`error: ${e.message}\nfatal: cherry-pick failed\n`,exitCode:128}:{stdout:``,stderr:`fatal: ${zs(e)}\n`,exitCode:128}}async function bc(e,t,n){let r=M(n,
|
|
25
|
-
`,exitCode:128};let d=await O({fs:e.lfs,cache:e.cache,dir:t,...Hs}),f=xc(d),p=d.filter(([,e,t,n])=>e===0&&t===2&&n===0).map(([e])=>e),m;if(c||s){let n=(await O({fs:e.lfs,cache:e.cache,dir:t,ignored:!0,...Hs})).filter(([,e,t,n])=>e===0&&t===2&&n===0).map(([e])=>e);if(c){let e=new Set(p);m=n.filter(t=>!e.has(t))}else m=n}else m=p;u.length>0&&(m=m.filter(e=>u.some(t=>Cc(e,t))));let h=new Set,g=new Set;for(let e of m){let t=Sc(e,f);t===null?h.add(e):o&&g.add(t)}let _=[...[...h].sort().map(e=>({display:e,target:e,isDir:!1})),...[...g].sort().map(e=>({display:`${e}/`,target:e,isDir:!0}))],v=``;if(!l){let e=i?`Would remove`:`Removing`;for(let t of _)v+=`${e} ${t.display}\n`}if(!i)for(let n of _){let r=`${t}/${n.target}`;try{await e.fs.rm(r,{recursive:n.isDir})}catch{}}return{stdout:v,stderr:``,exitCode:0}}function xc(e){let t=new Set([``]);for(let[n,r,,i]of e){if(r===0&&i===0)continue;let e=n.lastIndexOf(`/`);for(;e>0;)t.add(n.slice(0,e)),e=n.lastIndexOf(`/`,e-1)}return t}function Sc(e,t){let n=e.split(`/`);if(n.length===1)return null;for(let e=1;e<n.length;e++){let r=n.slice(0,e).join(`/`);if(!t.has(r))return r}return null}function Cc(e,t){let n=t.endsWith(`/`)?t.slice(0,-1):t;return e===n||e.startsWith(`${n}/`)}let wc=null;function Tc(){return wc||=h(),wc}async function*Ec(e,t,n){t&&t({phase:`Receiving`,loaded:e.length,total:n??e.length}),yield e}function Dc(){return{request:async e=>{let{url:t,method:n=`GET`,headers:r={},body:i,onProgress:a}=e,o;if(i){let e=[];for await(let t of i)e.push(t);let t=e.reduce((e,t)=>e+t.length,0),n=new Uint8Array(t),r=0;for(let t of e)n.set(t,r),r+=t.length;let a=``;for(let e=0;e<n.length;e+=32768)a+=String.fromCharCode(...n.subarray(e,e+32768));o=a}let s=await Tc()(t,{method:n,headers:r,body:o}),c=parseInt(s.headers[`content-length`]??`0`,10)||void 0,l=Ec(s.body,a,c);return{url:s.url,method:n,headers:s.headers,body:l,statusCode:s.status,statusMessage:s.statusText}}}}const Oc=Dc();async function kc(e,t,n){let r=
|
|
26
|
-
`,exitCode:128};let c=a[0],l=a[1];if(!l){let e=c.match(/\/([^/]+?)(\.git)?$/);l=e?e[1]:`repo`}let u=b(l.startsWith(`/`)?l:`${t}/${l}`),d=
|
|
24
|
+
`,{stdout:``,stderr:r,exitCode:1}}return e instanceof Error&&e.name===`CherryPickMergeCommitError`?{stdout:``,stderr:`error: commit ${t} is a merge but no -m option was given.\nfatal: cherry-pick failed\n`,exitCode:128}:e instanceof Error&&e.name===`CherryPickRootCommitError`?{stdout:``,stderr:`error: ${e.message}\nfatal: cherry-pick failed\n`,exitCode:128}:{stdout:``,stderr:`fatal: ${zs(e)}\n`,exitCode:128}}async function bc(e,t,n){let r=M(n,Os),i=!!r.flags[`dry-run`],a=!!r.flags.force,o=!!r.flags.d,s=!!r.flags.x,c=!!r.flags.X,l=!!r.flags.quiet,u=r.positionals;if(!i&&!a)return{stdout:``,stderr:`fatal: clean.requireForce defaults to true and neither -i, -n, nor -f given; refusing to clean
|
|
25
|
+
`,exitCode:128};let d=await O({fs:e.lfs,cache:e.cache,dir:t,...Hs}),f=xc(d),p=d.filter(([,e,t,n])=>e===0&&t===2&&n===0).map(([e])=>e),m;if(c||s){let n=(await O({fs:e.lfs,cache:e.cache,dir:t,ignored:!0,...Hs})).filter(([,e,t,n])=>e===0&&t===2&&n===0).map(([e])=>e);if(c){let e=new Set(p);m=n.filter(t=>!e.has(t))}else m=n}else m=p;u.length>0&&(m=m.filter(e=>u.some(t=>Cc(e,t))));let h=new Set,g=new Set;for(let e of m){let t=Sc(e,f);t===null?h.add(e):o&&g.add(t)}let _=[...[...h].sort().map(e=>({display:e,target:e,isDir:!1})),...[...g].sort().map(e=>({display:`${e}/`,target:e,isDir:!0}))],v=``;if(!l){let e=i?`Would remove`:`Removing`;for(let t of _)v+=`${e} ${t.display}\n`}if(!i)for(let n of _){let r=`${t}/${n.target}`;try{await e.fs.rm(r,{recursive:n.isDir})}catch{}}return{stdout:v,stderr:``,exitCode:0}}function xc(e){let t=new Set([``]);for(let[n,r,,i]of e){if(r===0&&i===0)continue;let e=n.lastIndexOf(`/`);for(;e>0;)t.add(n.slice(0,e)),e=n.lastIndexOf(`/`,e-1)}return t}function Sc(e,t){let n=e.split(`/`);if(n.length===1)return null;for(let e=1;e<n.length;e++){let r=n.slice(0,e).join(`/`);if(!t.has(r))return r}return null}function Cc(e,t){let n=t.endsWith(`/`)?t.slice(0,-1):t;return e===n||e.startsWith(`${n}/`)}let wc=null;function Tc(){return wc||=h(),wc}async function*Ec(e,t,n){t&&t({phase:`Receiving`,loaded:e.length,total:n??e.length}),yield e}function Dc(){return{request:async e=>{let{url:t,method:n=`GET`,headers:r={},body:i,onProgress:a}=e,o;if(i){let e=[];for await(let t of i)e.push(t);let t=e.reduce((e,t)=>e+t.length,0),n=new Uint8Array(t),r=0;for(let t of e)n.set(t,r),r+=t.length;let a=``;for(let e=0;e<n.length;e+=32768)a+=String.fromCharCode(...n.subarray(e,e+32768));o=a}let s=await Tc()(t,{method:n,headers:r,body:o}),c=parseInt(s.headers[`content-length`]??`0`,10)||void 0,l=Ec(s.body,a,c);return{url:s.url,method:n,headers:s.headers,body:l,statusCode:s.status,statusMessage:s.statusText}}}}const Oc=Dc();async function kc(e,t,n){let r=Is(n,I.clone);if(r)return r;let{flags:i,positionals:a}=M(n,I.clone),o=i,s=o.quiet===!0;if(a.length===0)return{stdout:``,stderr:`fatal: You must specify a repository to clone.
|
|
26
|
+
`,exitCode:128};let c=a[0],l=a[1];if(!l){let e=c.match(/\/([^/]+?)(\.git)?$/);l=e?e[1]:`repo`}let u=b(l.startsWith(`/`)?l:`${t}/${l}`),d=Ls(o,`depth`),f=Ls(o,`branch`),p=o[`single-branch`]!==!1,m=s?``:`Cloning into '${l}'...\n`,h=Ac(c,t);if(h)return jc(e,h,u,c,l,m,f,s);try{await Xt({fs:e.lfs,cache:e.cache,http:Oc,dir:u,url:c,corsProxy:e.corsProxy,depth:d?parseInt(d,10):1,ref:f,singleBranch:p,noCheckout:!1,onAuth:e.getOnAuth(),onAuthFailure:e.getOnAuthFailure(),onProgress:s?void 0:e=>{e.phase===`Receiving objects`&&(m+=`Receiving objects: ${e.loaded}/${e.total}\n`)}})}catch(e){return Nc(e,u,c)}if(await e.fs.flush(),!s)try{let t=await D({fs:e.lfs,cache:e.cache,dir:u});t.length>0&&(m+=`Checked out ${t.length} files.\n`)}catch{}return{stdout:s?``:`${m}done.\n`,stderr:``,exitCode:0}}function Ac(e,t){if(e.startsWith(`file://`))try{return b(decodeURIComponent(new URL(e).pathname))}catch{return null}return e.startsWith(`/`)?b(e):e.startsWith(`./`)||e.startsWith(`../`)?b(x(t,e)):null}async function jc(e,t,n,r,i,a,o,s=!1){if(n===t||n.startsWith(`${t}/`))return Nc(Error(`destination is inside the source repository`),n);try{await e.lfs.stat(`${t}/.git`);try{if((await e.lfs.readdir(n)).length>0)return Nc(Error(`destination path '${i}' already exists and is not an empty directory.`),n)}catch{await e.lfs.mkdir(n,{recursive:!0})}let c=o??await A({fs:e.lfs,dir:t});if(await Mc(e,`${t}/.git`,`${n}/.git`),c&&await rn({fs:e.lfs,cache:e.cache,dir:n,ref:c,force:!0}),await sn({fs:e.lfs,dir:n,remote:`origin`,url:r,force:!0}),await e.fs.flush(),!s){let t=await D({fs:e.lfs,cache:e.cache,dir:n});t.length>0&&(a+=`Checked out ${t.length} files.\n`)}return{stdout:s?``:`${a}done.\n`,stderr:``,exitCode:0}}catch(e){return Nc(e,n,r)}}async function Mc(e,t,n){let r=await e.lfs.lstat(t);if(r.isDirectory()){await e.lfs.mkdir(n,{recursive:!0});for(let r of await e.lfs.readdir(t))await Mc(e,`${t}/${r}`,`${n}/${r}`)}else r.isSymbolicLink()?await e.lfs.symlink(await e.lfs.readlink(t),n):await e.lfs.writeFile(n,await e.lfs.readFile(t))}function Nc(e,t,n){return{stdout:``,stderr:`fatal: ${zs(e,n).replace(/'\/__opfs__\/[^']*<path>'/g,`'${t}'`).replace(/\/__opfs__\/[^\s'"<]*<path>/g,t).replace(/<path>/g,t)}\n`,exitCode:128}}const Pc=[`MERGE_HEAD`,`MERGE_MSG`,`MERGE_MODE`,`AUTO_MERGE`];async function Fc(e,t){return`${await hn({fs:e.lfs,filepath:t})}/.git`}async function Ic(e,t){try{return(await e.fs.readTextFile(t)).trim()}catch{return}}async function Lc(e,t){try{await e.fs.rm(t)}catch{}}async function Rc(e,t){try{return await Ic(e,`${await Fc(e,t)}/MERGE_HEAD`)}catch{return}}async function zc(e,t){return await Rc(e,t)!==void 0}async function Bc(e,t){try{return await Ic(e,`${await Fc(e,t)}/MERGE_MSG`)}catch{return}}async function Vc(e,t,n){let r=await Fc(e,t);await e.fs.writeFile(`${r}/ORIG_HEAD`,`${n}\n`)}async function Hc(e,t,n,r){let i=await Fc(e,t);await e.fs.writeFile(`${i}/MERGE_HEAD`,`${n}\n`),await e.fs.writeFile(`${i}/MERGE_MSG`,r.endsWith(`
|
|
27
27
|
`)?r:`${r}\n`)}async function Uc(e,t){let n;try{n=await Fc(e,t)}catch{return}await Promise.all(Pc.map(t=>Lc(e,`${n}/${t}`)))}async function Wc(e,t){let n=await D({fs:e.lfs,cache:e.cache,dir:t}),r=[];for(let i of n)try{(await e.fs.readTextFile(`${t}/${i}`)).includes(`<<<<<<<`)&&r.push(i)}catch{}return r}const Gc=new Set([`message`,`author`,`date`,`file`,`cleanup`,`amend`,`all`,`allow-empty`,`m`,`a`,`F`]);async function Kc(e,t,n){let r=il(n),i=M(r,I.commit).flags,a=await Rc(e,t),o=await nl(e,t,i);if(typeof o!=`string`){if(a){let n=await Bc(e,t);if(n)return await qc(e,t,i,n,a)}return o}return await qc(e,t,i,o,a)}async function qc(e,t,n,r,i){let a=n.amend===!0,o=n.all===!0,s=n[`allow-empty`]===!0;if(o&&await rl(e,t),!s&&!a&&!i&&!(await O({fs:e.lfs,cache:e.cache,dir:t})).some(([,e,,t])=>t!==e))return{stdout:``,stderr:`nothing to commit, working tree clean
|
|
28
|
-
`,exitCode:1};let c=await Zt({fs:e.lfs,cache:e.cache,dir:t,message:r,author:await e.resolveAuthor(t),amend:a,noUpdateBranch:void 0,...i?{parent:[await E({fs:e.lfs,dir:t,ref:`HEAD`}),i]}:{}});i&&await Uc(e,t);let l=c.slice(0,7);return{stdout:`[${await A({fs:e.lfs,dir:t})??`HEAD`} ${l}] ${r}\n`,stderr:``,exitCode:0}}function Jc(e,t){let n=e[t];if(n!==void 0&&n!==!0&&n!==!1)return
|
|
28
|
+
`,exitCode:1};let c=await Zt({fs:e.lfs,cache:e.cache,dir:t,message:r,author:await e.resolveAuthor(t),amend:a,noUpdateBranch:void 0,...i?{parent:[await E({fs:e.lfs,dir:t,ref:`HEAD`}),i]}:{}});i&&await Uc(e,t);let l=c.slice(0,7);return{stdout:`[${await A({fs:e.lfs,dir:t})??`HEAD`} ${l}] ${r}\n`,stderr:``,exitCode:0}}function Jc(e,t){let n=e[t];if(n!==void 0&&n!==!0&&n!==!1)return Ls(e,t)}function Yc(e){return Object.keys(e).find(e=>!Gc.has(e))}function Xc(e){return{stdout:``,stderr:`error: unknown ${e.length===1?`switch`:`option`} \`${e}\`\n`,exitCode:129}}function Zc(e){return{stdout:``,stderr:`error: switch \`${e}\` requires a value\n`,exitCode:1}}function Qc(e){let t=Yc(e);return t?Xc(t):`message`in e||`m`in e?Zc(`m`):`file`in e||`F`in e?Zc(`F`):{stdout:``,stderr:"error: option `-m' or `-F' is required\n",exitCode:1}}function $c(){return{stdout:``,stderr:`Aborting commit due to empty commit message.
|
|
29
29
|
`,exitCode:1}}function el(e){return{stdout:``,stderr:`error: could not read log file '${e}': No such file or directory\n`,exitCode:128}}async function tl(e,t,n){if(n===`-`)return e.stdin;let r=n.startsWith(`/`)?n:`${t}/${n}`;try{return await e.fs.readTextFile(r)}catch{return el(n)}}async function nl(e,t,n){let r=Jc(n,`message`);if(r!==void 0)return r;let i=Jc(n,`file`);if(i!==void 0){let n=await tl(e,t,i);return typeof n==`string`&&n===``?$c():n}return Qc(n)}async function rl(e,t){let n=await O({fs:e.lfs,cache:e.cache,dir:t});for(let[r,i,a,o]of n)i!==0&&a!==o&&(a===0?await zt({fs:e.lfs,cache:e.cache,dir:t,filepath:r}):await qt({fs:e.lfs,cache:e.cache,dir:t,filepath:r}))}function il(e){let t=[];for(let n=0;n<e.length;n++){let r=e[n];if(r.startsWith(`-`)&&!r.startsWith(`--`)&&r.length>2&&!r.includes(`=`)){let e=r.slice(1);for(let n of e)t.push(`-${n}`)}else t.push(r)}return t}async function al(e,t,n){let r=n.includes(`--list`)||n.includes(`-l`),i=n.includes(`--unset`),a=n.includes(`--global`),o=n.find(e=>!e.startsWith(`-`)&&e.includes(`.`));if(r)return ll(e,t,a);if(i)return ol(e,t,o,a);if(!o)return{stdout:``,stderr:`usage: git config [--global] [--list] [--unset] <key> [<value>]
|
|
30
30
|
`,exitCode:1};let s=n.indexOf(o),c;for(let e=s+1;e<n.length;e++)if(!n[e].startsWith(`-`)){c=n[e];break}return c===void 0?cl(e,t,o,a):sl(e,t,o,c,a)}async function ol(e,t,n,r){if(!n)return{stdout:``,stderr:`error: key required for --unset
|
|
31
31
|
`,exitCode:1};if(n===`credential.token`||n===`github.token`)return await e.setGithubToken(``),{stdout:``,stderr:``,exitCode:0};if(r){let t=await e.getGlobalFs();try{let e=await t.readTextFile(Bn),r=Rn(e,n);await t.writeFile(Bn,r)}catch{}}else try{let r=`${t}/.git/config`,i=await e.fs.readTextFile(r),a=Rn(i,n);await e.fs.writeFile(r,a)}catch{}return{stdout:``,stderr:``,exitCode:0}}async function sl(e,t,n,r,i){return n===`credential.token`||n===`github.token`?(await e.setGithubToken(r),{stdout:``,stderr:``,exitCode:0}):(i?await Ln(await e.getGlobalFs(),n,r):await Ut({fs:e.lfs,dir:t,path:n,value:r}),n===`user.name`&&e.setDefaultAuthorName(r),n===`user.email`&&e.setDefaultAuthorEmail(r),{stdout:``,stderr:``,exitCode:0})}async function cl(e,t,n,r){if(n===`credential.token`||n===`github.token`){let t=e.getGithubToken();return{stdout:t?`${t}\n`:``,stderr:``,exitCode:+!t}}let i;return r?i=await zn(await e.getGlobalFs(),n):(i=await Bt({fs:e.lfs,dir:t,path:n}),i||=await zn(await e.getGlobalFs(),n)),{stdout:i?`${i}\n`:``,stderr:``,exitCode:+!i}}async function ll(e,t,n){let r=``;if(!n)try{let n=`${t}/.git/config`,i=await e.fs.readTextFile(n);r+=ul(i)}catch{}try{let t=await(await e.getGlobalFs()).readTextFile(Bn);r+=ul(t)}catch{}return{stdout:r,stderr:``,exitCode:0}}function ul(e){let t=``,n=``,r=``;for(let i of e.split(`
|
|
32
32
|
`)){let e=i.trim();if(!e||e.startsWith(`#`)||e.startsWith(`;`))continue;let a=e.match(/^\[(\w+)(?:\s+"([^"]*)")?\]$/);if(a){n=a[1].toLowerCase(),r=a[2]??``;continue}let o=e.match(/^(\w+)\s*=\s*(.*)$/);if(o&&n){let e=o[1],i=o[2].trim(),a=r?`${n}.${r}.${e}`:`${n}.${e}`;t+=`${a}=${i}\n`}}return t}const dl=`/dev/null`,fl={bytes:new Uint8Array,text:``,binary:!1};async function pl(e,t,n,r){if(n.length!==2)return{stdout:``,stderr:`usage: git diff --no-index [<options>] <path> <path>
|
|
33
33
|
`,exitCode:129};let[i,a]=await Promise.all([yl(e,t,n[0]),yl(e,t,n[1])]);[i,a]=await bl(e,t,i,a);let o=i.kind===`missing`?i:a.kind===`missing`?a:void 0;if(o)return{stdout:``,stderr:`error: Could not access '${o.given}'\n`,exitCode:1};let s=(i.kind===`dir`&&a.kind===`dir`?await wl(e,i,a):[await Sl(e,i,a)]).filter(e=>!ml(e.oldBlob.bytes,e.newBlob.bytes));return s.length===0?{stdout:``,stderr:``,exitCode:0}:{stdout:hl(s,r,e.useColor),stderr:``,exitCode:1}}function ml(e,t){if(e.byteLength!==t.byteLength)return!1;for(let n=0;n<e.byteLength;n++)if(e[n]!==t[n])return!1;return!0}function hl(e,t,n){if(t.nameOnly)return`${e.map(e=>e.absent===`new`?dl:e.newName).join(`
|
|
34
|
-
`)}\n`;if(t.stat)return De(e.map(_l),{color:n});let r=``;for(let i of e){if(i.oldBlob.binary||i.newBlob.binary){r+=`diff --git a/${i.oldName} b/${i.newName}\n`,r+=`Binary files ${gl(i,`old`)} and ${gl(i,`new`)} differ\n`;continue}r+=Oe({oldContent:i.oldBlob.text,newContent:i.newBlob.text,oldName:i.oldName,newName:i.newName,absent:i.absent,context:t.context,color:n})}return r}function gl(e,t){return e.absent===t?dl:t===`old`?`a/${e.oldName}`:`b/${e.newName}`}function _l(e){return{name:vl(e.absent===`old`?dl:e.oldName,e.absent===`new`?dl:e.newName),oldContent:e.oldBlob.text,newContent:e.newBlob.text,binary:e.oldBlob.binary||e.newBlob.binary?{oldSize:e.oldBlob.bytes.byteLength,newSize:e.newBlob.bytes.byteLength}:void 0}}function vl(e,t){if(e===t)return e;let n=0,r=Math.min(e.length,t.length);for(let i=0;i<r&&e[i]===t[i];i++)e[i]===`/`&&(n=i+1);let i=n>0?n-1:0,a=0;for(let n=e.length-1,r=t.length-1;n>=i&&r>=i&&e[n]===t[r];n--,r--)e[n]===`/`&&(a=e.length-n);if(n+a===0)return`${e} => ${t}`;let o=e.slice(n,Math.max(n,e.length-a)),s=t.slice(n,Math.max(n,t.length-a));return`${e.slice(0,n)}{${o} => ${s}}${e.slice(e.length-a)}`}async function yl(e,t,n){if(n===dl)return{kind:`null`,given:n};let r=b(n.startsWith(`/`)?n:`${t}/${n}`);try{return(await e.fs.stat(r)).type===`directory`?{kind:`dir`,abs:r,given:n}:{kind:`file`,abs:r,given:n}}catch{return{kind:`missing`,given:n}}}async function bl(e,t,n,r){return n.kind===`dir`&&(r.kind===`file`||r.kind===`null`)?[await yl(e,t,`${n.given}/${xl(r.given)}`),r]:r.kind===`dir`&&(n.kind===`file`||n.kind===`null`)?[n,await yl(e,t,`${r.given}/${xl(n.given)}`)]:[n,r]}function xl(e){let t=e.lastIndexOf(`/`);return t===-1?e:e.slice(t+1)}async function Sl(e,t,n){let[r,i]=await Promise.all([Cl(e,t),Cl(e,n)]),a=t.kind===`null`?`old`:n.kind===`null`?`new`:void 0,o=Dl(t.kind===`null`?n.given:t.given);return{oldName:a?o:Dl(t.given),newName:a?o:Dl(n.given),absent:a,oldBlob:r,newBlob:i}}function Cl(e,t){return t.kind===`file`?El(e,t.abs):Promise.resolve(fl)}async function wl(e,t,n){let[r,i]=await Promise.all([Tl(e,t.abs),Tl(e,n.abs)]),a=[...new Set([...r,...i])].sort(),o=[];for(let s of a){let a=Dl(`${t.given}/${s}`),c=Dl(`${n.given}/${s}`);i.has(s)?r.has(s)?o.push({oldName:a,newName:c,oldBlob:await El(e,`${t.abs}/${s}`),newBlob:await El(e,`${n.abs}/${s}`)}):o.push({oldName:c,newName:c,absent:`old`,oldBlob:fl,newBlob:await El(e,`${n.abs}/${s}`)}):o.push({oldName:a,newName:a,absent:`new`,oldBlob:await El(e,`${t.abs}/${s}`),newBlob:fl})}return o}async function Tl(e,t){let n=new Set,r=async i=>{let a=await e.fs.readDir(i?`${t}/${i}`:t);for(let e of a){let t=i?`${i}/${e.name}`:e.name;e.type===`directory`?await r(t):n.add(t)}};return await r(``),n}async function El(e,t){let n=await e.fs.readFile(t,{encoding:`binary`}),r=typeof n==`string`?new TextEncoder().encode(n):n,i=r.subarray(0,8e3).includes(0);return{bytes:r,text:i?``:new TextDecoder().decode(r),binary:i}}function Dl(e){return e.replace(/^\/+/,``)}function Ol(e){return(t,n)=>{let r=[];for(let i of n){let n=i.find(e=>typeof e==`string`),a=i.map(e=>typeof e==`string`);(n===void 0||e(n,a))&&r.push(t(i))}return Promise.all(r)}}async function kl(e,t,n){let r=Ul(n),i=
|
|
34
|
+
`)}\n`;if(t.stat)return De(e.map(_l),{color:n});let r=``;for(let i of e){if(i.oldBlob.binary||i.newBlob.binary){r+=`diff --git a/${i.oldName} b/${i.newName}\n`,r+=`Binary files ${gl(i,`old`)} and ${gl(i,`new`)} differ\n`;continue}r+=Oe({oldContent:i.oldBlob.text,newContent:i.newBlob.text,oldName:i.oldName,newName:i.newName,absent:i.absent,context:t.context,color:n})}return r}function gl(e,t){return e.absent===t?dl:t===`old`?`a/${e.oldName}`:`b/${e.newName}`}function _l(e){return{name:vl(e.absent===`old`?dl:e.oldName,e.absent===`new`?dl:e.newName),oldContent:e.oldBlob.text,newContent:e.newBlob.text,binary:e.oldBlob.binary||e.newBlob.binary?{oldSize:e.oldBlob.bytes.byteLength,newSize:e.newBlob.bytes.byteLength}:void 0}}function vl(e,t){if(e===t)return e;let n=0,r=Math.min(e.length,t.length);for(let i=0;i<r&&e[i]===t[i];i++)e[i]===`/`&&(n=i+1);let i=n>0?n-1:0,a=0;for(let n=e.length-1,r=t.length-1;n>=i&&r>=i&&e[n]===t[r];n--,r--)e[n]===`/`&&(a=e.length-n);if(n+a===0)return`${e} => ${t}`;let o=e.slice(n,Math.max(n,e.length-a)),s=t.slice(n,Math.max(n,t.length-a));return`${e.slice(0,n)}{${o} => ${s}}${e.slice(e.length-a)}`}async function yl(e,t,n){if(n===dl)return{kind:`null`,given:n};let r=b(n.startsWith(`/`)?n:`${t}/${n}`);try{return(await e.fs.stat(r)).type===`directory`?{kind:`dir`,abs:r,given:n}:{kind:`file`,abs:r,given:n}}catch{return{kind:`missing`,given:n}}}async function bl(e,t,n,r){return n.kind===`dir`&&(r.kind===`file`||r.kind===`null`)?[await yl(e,t,`${n.given}/${xl(r.given)}`),r]:r.kind===`dir`&&(n.kind===`file`||n.kind===`null`)?[n,await yl(e,t,`${r.given}/${xl(n.given)}`)]:[n,r]}function xl(e){let t=e.lastIndexOf(`/`);return t===-1?e:e.slice(t+1)}async function Sl(e,t,n){let[r,i]=await Promise.all([Cl(e,t),Cl(e,n)]),a=t.kind===`null`?`old`:n.kind===`null`?`new`:void 0,o=Dl(t.kind===`null`?n.given:t.given);return{oldName:a?o:Dl(t.given),newName:a?o:Dl(n.given),absent:a,oldBlob:r,newBlob:i}}function Cl(e,t){return t.kind===`file`?El(e,t.abs):Promise.resolve(fl)}async function wl(e,t,n){let[r,i]=await Promise.all([Tl(e,t.abs),Tl(e,n.abs)]),a=[...new Set([...r,...i])].sort(),o=[];for(let s of a){let a=Dl(`${t.given}/${s}`),c=Dl(`${n.given}/${s}`);i.has(s)?r.has(s)?o.push({oldName:a,newName:c,oldBlob:await El(e,`${t.abs}/${s}`),newBlob:await El(e,`${n.abs}/${s}`)}):o.push({oldName:c,newName:c,absent:`old`,oldBlob:fl,newBlob:await El(e,`${n.abs}/${s}`)}):o.push({oldName:a,newName:a,absent:`new`,oldBlob:await El(e,`${t.abs}/${s}`),newBlob:fl})}return o}async function Tl(e,t){let n=new Set,r=async i=>{let a=await e.fs.readDir(i?`${t}/${i}`:t);for(let e of a){let t=i?`${i}/${e.name}`:e.name;e.type===`directory`?await r(t):n.add(t)}};return await r(``),n}async function El(e,t){let n=await e.fs.readFile(t,{encoding:`binary`}),r=typeof n==`string`?new TextEncoder().encode(n):n,i=r.subarray(0,8e3).includes(0);return{bytes:r,text:i?``:new TextDecoder().decode(r),binary:i}}function Dl(e){return e.replace(/^\/+/,``)}function Ol(e){return(t,n)=>{let r=[];for(let i of n){let n=i.find(e=>typeof e==`string`),a=i.map(e=>typeof e==`string`);(n===void 0||e(n,a))&&r.push(t(i))}return Promise.all(r)}}async function kl(e,t,n){let r=Ul(n),i=Is(r,I.diff);if(i)return i;let{flags:a,positionals:o,doubleDashRest:s}=M(r,I.diff),c=a.staged===!0||a.cached===!0,l=o.length>=2?o.slice(2):[],u={nameOnly:a[`name-only`]===!0,nameStatus:a[`name-status`]===!0,stat:a.stat===!0,pathspecs:[...l,...s],context:Wl(a.unified)};if(a[`no-index`]===!0||a.index===!1)return pl(e,t,o,u);if(o.length>=2)return Fl(e,t,o[0],o[1],u);if(o.length===1){let n=Gl(o[0]);if(n)return Il(e,t,n[0],n[1],u);let r=Kl(o[0]);return r?Fl(e,t,r[0],r[1],u):c?jl(e,t,o[0],u):Rl(e,t,o[0],u)}return Hl(e,c?await Al(e,t,u.pathspecs):await Ml(e,t,u.pathspecs),u)}async function Al(e,t,n=[],r=`HEAD`){let i=[];return await jt({fs:e.lfs,cache:e.cache,dir:t,trees:[on({ref:r}),dn()],iterate:Ol(e=>_c(e,n)),map:async(r,[a,o])=>{if(r===`.`||r===`.git`||r.startsWith(`.git/`)||!gc(r,n))return;let s=a?await a.type():void 0,c=o?await o.type():void 0;if(s===`tree`||c===`tree`)return;let l=a?await a.oid():void 0,u=o?await o.oid():void 0;if(l===u)return;let d=await Pl(e,t,l),f=await Pl(e,t,u);i.push({filepath:r,oldContent:d,newContent:f,oldPresent:!!l,newPresent:!!u})}}),i}async function jl(e,t,n,r){let i;try{i=await cc(e,t,n)}catch{return Jl(n)}return Hl(e,await Al(e,t,r.pathspecs,i),r)}async function Ml(e,t,n=[]){let r=[];return await jt({fs:e.lfs,cache:e.cache,dir:t,trees:[dn(),ln(Hs)],iterate:Ol((e,[t])=>t===!0&&_c(e,n)),map:async(i,[a,o])=>{if(i===`.`)return;if(!a)return null;let s=await a.type();if(s===`tree`)return;if(s!==`blob`||!gc(i,n))return null;let c=await a.oid(),l=await Nl(o);if(l&&c&&(await Ot({object:l})).oid===c)return null;let u=await Pl(e,t,c),d=l?new TextDecoder().decode(l):``;return u!==d&&r.push({filepath:i,oldContent:u,newContent:d,oldPresent:!!c,newPresent:!!l}),null}}),r.sort((e,t)=>e.filepath<t.filepath?-1:+(e.filepath>t.filepath)),r}async function Nl(e){if(e)try{return await e.type()===`blob`?await e.content()??void 0:void 0}catch{return}}async function Pl(e,t,n){if(!n)return``;try{let{blob:r}=await At({fs:e.lfs,dir:t,oid:n,cache:e.cache});return new TextDecoder().decode(r)}catch{return``}}async function Fl(e,t,n,r,i){try{return await Ll(e,t,await cc(e,t,n),await cc(e,t,r),i)}catch{return Jl(await ql(e,t,[n,r])??n)}}async function Il(e,t,n,r,i){let a=n||`HEAD`,o=r||`HEAD`;try{let n=await cc(e,t,a),r=await cc(e,t,o),s=await Jt({fs:e.lfs,cache:e.cache,dir:t,oids:[n,r]});return s[0]?await Ll(e,t,s[0],r,i):{stdout:``,stderr:`fatal: '${a}...${o}' has no merge base\n`,exitCode:128}}catch{return Jl(await ql(e,t,[a,o])??a)}}async function Ll(e,t,n,r,i){let a=[];return await jt({fs:e.lfs,cache:e.cache,dir:t,trees:[on({ref:n}),on({ref:r})],iterate:Ol(e=>_c(e,i.pathspecs??[])),map:async(e,[t,n])=>{if(await Bl(t,n))return null;let r=await Vl(e,t,n,i.pathspecs??[]);r&&a.push(r)}}),Hl(e,a,i)}async function Rl(e,t,n,r){let i;try{i=await cc(e,t,n)}catch{return Jl(n)}let a=new Set(await D({fs:e.lfs,dir:t,cache:e.cache})),o=zl(a),s=[];return await jt({fs:e.lfs,cache:e.cache,dir:t,trees:[on({ref:i}),ln(Hs)],iterate:Ol((e,[t])=>(t===!0||a.has(e)||o.has(e))&&_c(e,r.pathspecs??[])),map:async(e,[t,n])=>{if(!t&&!a.has(e)&&!o.has(e))return null;let i=await Vl(e,t,n,r.pathspecs??[]);i&&s.push(i)}}),Hl(e,s,r)}function zl(e){let t=new Set;for(let n of e){let e=n.indexOf(`/`);for(;e>0;)t.add(n.slice(0,e)),e=n.indexOf(`/`,e+1)}return t}async function Bl(e,t){if(!e||!t||await e.type()!==`tree`||await t.type()!==`tree`)return!1;let n=await e.oid();return!!n&&n===await t.oid()}async function Vl(e,t,n,r){if(e===`.`||!gc(e,r))return null;let i=t?await t.type():void 0,a=n?await n.type():void 0;if(i===`tree`||a===`tree`)return null;let o=t?await t.oid():void 0,s=n?await n.oid():void 0;if(o===s)return null;let c=t?await t.content():void 0,l=n?await n.content():void 0;return{filepath:e,oldContent:c?new TextDecoder().decode(c):``,newContent:l?new TextDecoder().decode(l):``,oldPresent:!!o,newPresent:!!s}}function Hl(e,t,n){return t.length===0?{stdout:``,stderr:``,exitCode:0}:n.nameStatus?{stdout:`${t.map(e=>{let t=e.oldPresent??e.oldContent!==``,n=e.newPresent??e.newContent!==``;return`${t?n?`M`:`D`:`A`}\t${e.filepath}`}).join(`
|
|
35
35
|
`)}\n`,stderr:``,exitCode:0}:n.nameOnly?{stdout:`${t.map(e=>e.filepath).join(`
|
|
36
|
-
`)}\n`,stderr:``,exitCode:0}:n.stat?Yl(t,e.useColor):{stdout:t.map(t=>Oe({oldContent:t.oldContent,newContent:t.newContent,oldName:t.filepath,newName:t.filepath,context:n.context,color:e.useColor})).join(``),stderr:``,exitCode:0}}function Ul(e){let t=e.indexOf(`--`);return e.map((e,n)=>(t===-1||n<t)&&/^-U\d+$/.test(e)?`--unified=${e.slice(2)}`:e)}function Wl(e){let t=Array.isArray(e)?e[e.length-1]:e;if(t===void 0||typeof t==`boolean`||t===``)return;let n=Number.parseInt(String(t),10);return Number.isInteger(n)&&n>=0?n:void 0}function Gl(e){let t=e.indexOf(`...`);return t===-1?null:[e.slice(0,t),e.slice(t+3)]}function Kl(e){if(e.includes(`...`))return null;let t=/^(.+)\.\.([^.]*)$/.exec(e);return t?.[1]!==void 0&&t[2]!==void 0?[t[1],t[2]]:null}async function ql(e,t,n){for(let r of n)try{await cc(e,t,r)}catch{return r}return null}function Jl(e){return{stdout:``,stderr:`fatal: ambiguous argument '${e}'\n`,exitCode:128}}function Yl(e,t=!1){return{stdout:De(e.map(e=>({name:e.filepath,oldContent:e.oldContent,newContent:e.newContent})),{color:t}),stderr:``,exitCode:0}}async function Xl(e,t,n,r){let i=[];if(await jt({fs:e.lfs,cache:e.cache,dir:t,trees:[on({ref:n})],map:async(e,[t])=>{if(e===`.`||!t||await t.type()!==`blob`)return;let n=await t.content();n&&i.push({filepath:e,content:new TextDecoder().decode(n)})}}),i.length===0)return``;if(r)return Yl(i.map(e=>({filepath:e.filepath,oldContent:``,newContent:e.content})),e.useColor).stdout;let a=``;for(let t of i)a+=Oe({oldContent:``,newContent:t.content,oldName:t.filepath,newName:t.filepath,color:e.useColor});return a}async function Zl(e,t,n){let r=
|
|
36
|
+
`)}\n`,stderr:``,exitCode:0}:n.stat?Yl(t,e.useColor):{stdout:t.map(t=>Oe({oldContent:t.oldContent,newContent:t.newContent,oldName:t.filepath,newName:t.filepath,context:n.context,color:e.useColor})).join(``),stderr:``,exitCode:0}}function Ul(e){let t=e.indexOf(`--`);return e.map((e,n)=>(t===-1||n<t)&&/^-U\d+$/.test(e)?`--unified=${e.slice(2)}`:e)}function Wl(e){let t=Array.isArray(e)?e[e.length-1]:e;if(t===void 0||typeof t==`boolean`||t===``)return;let n=Number.parseInt(String(t),10);return Number.isInteger(n)&&n>=0?n:void 0}function Gl(e){let t=e.indexOf(`...`);return t===-1?null:[e.slice(0,t),e.slice(t+3)]}function Kl(e){if(e.includes(`...`))return null;let t=/^(.+)\.\.([^.]*)$/.exec(e);return t?.[1]!==void 0&&t[2]!==void 0?[t[1],t[2]]:null}async function ql(e,t,n){for(let r of n)try{await cc(e,t,r)}catch{return r}return null}function Jl(e){return{stdout:``,stderr:`fatal: ambiguous argument '${e}'\n`,exitCode:128}}function Yl(e,t=!1){return{stdout:De(e.map(e=>({name:e.filepath,oldContent:e.oldContent,newContent:e.newContent})),{color:t}),stderr:``,exitCode:0}}async function Xl(e,t,n,r){let i=[];if(await jt({fs:e.lfs,cache:e.cache,dir:t,trees:[on({ref:n})],map:async(e,[t])=>{if(e===`.`||!t||await t.type()!==`blob`)return;let n=await t.content();n&&i.push({filepath:e,content:new TextDecoder().decode(n)})}}),i.length===0)return``;if(r)return Yl(i.map(e=>({filepath:e.filepath,oldContent:``,newContent:e.content})),e.useColor).stdout;let a=``;for(let t of i)a+=Oe({oldContent:``,newContent:t.content,oldName:t.filepath,newName:t.filepath,color:e.useColor});return a}async function Zl(e,t,n){let r=Is(n,I.fetch);if(r)return r;let{flags:i,positionals:a}=M(n,I.fetch),o=i,s=a[0]??`origin`,c=a[1],l=o.prune===!0,u=o.quiet===!0,d=Ls(o,`depth`),f=u?``:`Fetching ${s}\n`,p=await gn({fs:e.lfs,cache:e.cache,http:Oc,dir:t,remote:s,ref:c,corsProxy:e.corsProxy,prune:l,depth:d?parseInt(d,10):void 0,onAuth:e.getOnAuth(),onAuthFailure:e.getOnAuthFailure(),onProgress:u?void 0:e=>{f+=`${e.phase}: ${e.loaded}/${e.total}\n`}});return p.fetchHead&&(await Ql(e,t,p.fetchHead,p.fetchHeadDescription),u||(f+=`From ${s}\n`,f+=` ${p.fetchHead.slice(0,7)}..${p.fetchHeadDescription??``}\n`)),{stdout:f,stderr:``,exitCode:0}}async function Ql(e,t,n,r){let i=await hn({fs:e.lfs,filepath:t}),a=r??``;await e.fs.writeFile(`${i}/.git/FETCH_HEAD`,`${n}\t\t${a}\n`)}async function $l(e,t,n){let r=M(n,I.init).flags,i=Ls(r,`initial-branch`)??e.getConfigOverrides()?.get(`init.defaultbranch`)??`main`;return await mn({fs:e.lfs,dir:t,defaultBranch:i}),{stdout:`Initialized empty Git repository in ${t}/.git/\n`,stderr:``,exitCode:0}}function eu(e,t){let n=e.entry.commit.committer.timestamp,r=t.entry.commit.committer.timestamp;return n===r?e.tipRank===t.tipRank?e.seq<t.seq:e.tipRank<t.tipRank:n>r}var tu=class{heap=[];pushed=0;push(e,t){this.heap.push({entry:e,tipRank:t,seq:this.pushed++});let n=this.heap.length-1;for(;n>0;){let e=n-1>>1;if(!eu(this.heap[n],this.heap[e]))break;this.swap(n,e),n=e}}pop(){let e=this.heap[0];if(e===void 0)return;let t=this.heap.pop();return t!==void 0&&this.heap.length>0&&(this.heap[0]=t,this.siftDown()),e}siftDown(){for(let e=0;;){let t=e*2+1,n=e;if(t<this.heap.length&&eu(this.heap[t],this.heap[n])&&(n=t),t+1<this.heap.length&&eu(this.heap[t+1],this.heap[n])&&(n=t+1),n===e)return;this.swap(e,n),e=n}}swap(e,t){let n=this.heap[e];this.heap[e]=this.heap[t],this.heap[t]=n}};async function nu(e,t,n){try{return await E({fs:e.lfs,dir:t,ref:n})}catch{return}}async function ru(e,t,n,r){try{return await k({fs:e.lfs,dir:t,oid:n,cache:r})}catch{return}}async function iu(e,t,n,r,i){let a=await kt({fs:e.lfs,dir:t});for(let[o,s]of a.entries()){let a=await nu(e,t,s);if(a===void 0||r.has(a))continue;r.add(a);let c=await ru(e,t,a,i);c&&n.push(c,o)}}async function*au(e,t,n){let r=new Set,i=new tu;for(await iu(e,t,i,r,n.cache);;){let a=i.pop();if(a===void 0)return;yield a.entry;for(let o of a.entry.commit.parent){if(r.has(o))continue;r.add(o);let s=await ru(e,t,o,n.cache);s&&i.push(s,a.tipRank)}}}async function ou(e,t,n){let r=[];if(n.limit<=0)return r;for await(let i of au(e,t,{cache:n.cache}))if(r.push(i),r.length>=n.limit)break;return r}async function su(e,t,n){let{flags:r,positionals:i,doubleDashRest:a}=M(n,I.log),o=r,s=Ls(o,`max-count`),c=o.oneline===!0,l=o.stat===!0,u=o.reverse===!0,d=o.all===!0,f=Ls(o,`format`),p=Ls(o,`author`),m=Ls(o,`grep`),h=Ls(o,`follow`),g=await cu(e,t,{all:d,maxCount:s?parseInt(s,10):void 0,revision:i[0],pathspecs:a,followFile:h});return p&&(g=g.filter(e=>e.commit.author.name.includes(p))),m&&(g=g.filter(e=>e.commit.message.includes(m))),u&&(g=g.slice().reverse()),{stdout:await _u(e,t,g,{format:f,oneline:c,showStat:l}),stderr:``,exitCode:0}}async function cu(e,t,n){let r=n.revision?xu(n.revision):null,i=r?.[1]??n.revision,a=Su(e.cache),o=n.maxCount??10;if(n.pathspecs.length>0&&!n.all&&!r&&!n.followFile)return await mu(e,t,{ref:i,pathspecs:n.pathspecs,limit:o,caches:a});if(n.all&&n.pathspecs.length>0)return await du(e,t,{pathspecs:n.pathspecs,limit:o,caches:a,exclude:r?await uu(e,t,r[0],a):void 0});let s=n.all?await ou(e,t,{limit:n.maxCount??lu,cache:a.git}):await tn({fs:e.lfs,dir:t,cache:a.git,...i?{ref:i}:{},...!r&&n.pathspecs.length===0?{depth:n.maxCount??10}:{},...n.followFile?{filepath:n.followFile,follow:!0}:{}});if(r){let n=await uu(e,t,r[0],a);s=s.filter(e=>!n.has(e.oid))}return n.pathspecs.length>0?await gu(e,t,s,n.pathspecs,o,a):r?s.slice(0,o):s}const lu=50;async function uu(e,t,n,r){let i=await tn({fs:e.lfs,dir:t,cache:r.git,ref:n});return new Set(i.map(e=>e.oid))}async function du(e,t,n){let r=[],i=[],a=async()=>{if(i.length>0){let a=n.limit-r.length;r.push(...await gu(e,t,i,n.pathspecs,a,n.caches)),i=[]}return r.length>=n.limit};for await(let o of au(e,t,{cache:n.caches.git}))if(!n.exclude?.has(o.oid)&&(i.push(o),i.length>=64&&await a()))return r;return await a(),r}function fu(e){let t=e.replace(/^\.\//,``).replace(/\/+$/,``);return t===`.`?``:t}function pu(e){let t=[...new Set(e.map(fu))];return t.some(e=>e===``)?null:t}async function mu(e,t,n){let r=n.ref?{ref:n.ref}:{},i=pu(n.pathspecs);return i===null?await tn({fs:e.lfs,dir:t,cache:n.caches.git,...r,depth:n.limit}):i.length===1?(await tn({fs:e.lfs,dir:t,cache:n.caches.git,...r,filepath:i[0],depth:n.limit,force:!0})).slice(0,n.limit):await hu(e,t,{refArg:r,specs:i,limit:n.limit,caches:n.caches})}async function hu(e,t,n){let r=[],i=0,a=Math.max(n.limit*4,32);for(;;){let o=await tn({fs:e.lfs,dir:t,cache:n.caches.git,...n.refArg,depth:a});for(let e of o)n.caches.commitTrees.set(e.oid,e.commit.tree);for(let a of o.slice(i))if(await Eu(e,t,a,n.specs,n.caches)&&(r.push(a),r.length>=n.limit))return r;if(o.length<a)return r;i=o.length,a*=2}}async function gu(e,t,n,r,i,a){let o=pu(r);if(o===null)return n.slice(0,i);for(let e of n)a.commitTrees.set(e.oid,e.commit.tree);let s=[];for(let r of n)if(await Eu(e,t,r,o,a)&&s.push(r),s.length>=i)break;return s}async function _u(e,t,n,r){let i=``;for(let a of n){let{commit:n,oid:o}=a;r.format?i+=`${vu(o,n,r.format)}\n`:r.oneline?i+=`${$s(e.useColor,`33`,o.slice(0,7))} ${n.message.split(`
|
|
37
37
|
`)[0]}\n`:(i+=`${$s(e.useColor,`33`,`commit ${o}`)}\n`,i+=`Author: ${n.author.name} <${n.author.email}>\n`,i+=`Date: ${new Date(n.author.timestamp*1e3).toLocaleString()}\n\n`,i+=` ${n.message.replace(/\n/g,`
|
|
38
38
|
`)}\n\n`),r.showStat&&(i+=await bu(e,t,a))}return i}function vu(e,t,n){let r=new Date(t.author.timestamp*1e3);return n.replace(/%H/g,e).replace(/%h/g,e.slice(0,7)).replace(/%s/g,t.message.split(`
|
|
39
39
|
`)[0]).replace(/%an/g,t.author.name).replace(/%ae/g,t.author.email).replace(/%ad/g,r.toLocaleString()).replace(/%ar/g,yu(r))}function yu(e){let t=Date.now()-e.getTime(),n=Math.floor(t/1e3),r=Math.floor(n/60),i=Math.floor(r/60),a=Math.floor(i/24),o=Math.floor(a/7),s=Math.floor(a/30),c=Math.floor(a/365);return n<60?`${n} seconds ago`:r<60?`${r} minute${r===1?``:`s`} ago`:i<24?`${i} hour${i===1?``:`s`} ago`:a<7?`${a} day${a===1?``:`s`} ago`:o<4?`${o} week${o===1?``:`s`} ago`:s<12?`${s} month${s===1?``:`s`} ago`:`${c} year${c===1?``:`s`} ago`}async function bu(e,t,n){let{commit:r,oid:i}=n,a=r.parent.length>0?r.parent[0]:void 0;return a?(await Fl(e,t,a,i,{nameOnly:!1,stat:!0})).stdout:await Xl(e,t,i,!0)}function xu(e){let t=/^(.+)\.\.([^.]*)$/.exec(e);return t?.[2]?[t[1],t[2]]:null}function Su(e){return{git:e,commitTrees:new Map,trees:new Map,entries:new Map}}async function Cu(e,t,n,r){let i=r.trees.get(n);if(i)return i;let{tree:a}=await Pt({fs:e.lfs,dir:t,oid:n,cache:r.git});return r.trees.set(n,a),a}async function wu(e,t,n,r){let i=r.commitTrees.get(n);if(i)return i;let{commit:a}=await k({fs:e.lfs,dir:t,oid:n,cache:r.git});return r.commitTrees.set(n,a.tree),a.tree}async function Tu(e,t,n,r,i){let a=`${n}\u0000${r}`;if(i.entries.has(a))return i.entries.get(a);let o=r.split(`/`),s=n,c;for(let n=0;n<o.length&&s!==void 0;n++){let r=(await Cu(e,t,s,i)).find(e=>e.path===o[n]);if(!r)break;if(n===o.length-1){c=r.oid;break}s=r.type===`tree`?r.oid:void 0}return i.entries.set(a,c),c}async function Eu(e,t,n,r,i){let a=n.commit.parent[0],o=a?await wu(e,t,a,i):void 0;for(let a of r)if(await Tu(e,t,n.commit.tree,a,i)!==(o===void 0?void 0:await Tu(e,t,o,a,i)))return!0;return!1}async function Du(e,t,n){let r=n.includes(`--modified`)||n.includes(`-m`),i=n.includes(`--others`)||n.includes(`-o`),a=n.includes(`--deleted`)||n.includes(`-d`),o=n.filter(e=>!e.startsWith(`-`)).map(e=>e.replace(/\/+$/,``)).filter(e=>e.length>0),s=await O({fs:e.lfs,cache:e.cache,dir:t,...Hs}),c=[],l=i?`others`:r?`modified`:a?`deleted`:`cached`;for(let[e,t,n,r]of s)ku(l,t,n,r)&&(o.length>0&&!Ou(e,o)||c.push(e));return c.sort(),{stdout:c.map(e=>`${e}\n`).join(``),stderr:``,exitCode:0}}function Ou(e,t){for(let n of t)if(e===n||e.startsWith(n+`/`))return!0;return!1}function ku(e,t,n,r){switch(e){case`others`:return t===0&&r===0&&n===2;case`modified`:return n!==0&&n!==r&&t!==0;case`deleted`:return n===0&&(t!==0||r!==0);case`cached`:if(r!==0||t!==0){if(n===0&&r===0&&t!==0)return!1;if(r!==0||t!==0&&n!==0)return!0}return!1}}async function Au(e,t,n){let r=n.includes(`--heads`)||n.includes(`-h`),i=n.includes(`--tags`)||n.includes(`-t`),a=n.includes(`--symref`),o=n.filter(e=>!e.startsWith(`-`)),s=o[0]??`origin`,c=o.slice(1),l=(await Lt({fs:e.lfs,dir:t}).catch(()=>[])).find(e=>e.remote===s)?.url??s;try{let t=r&&!i?`refs/heads/`:i&&!r?`refs/tags/`:void 0,o=(await nn({http:Oc,url:l,corsProxy:e.corsProxy,onAuth:e.getOnAuth(),onAuthFailure:e.getOnAuthFailure(),prefix:t,symrefs:a,peelTags:i})).filter(e=>ju(e.ref,c)).map(e=>`${a&&e.target?`ref: ${e.target}\t${e.ref}\n`:``}${e.oid}\t${e.ref}\n`).join(``);return{stdout:o,stderr:``,exitCode:n.includes(`--exit-code`)&&!o?2:0}}catch(e){return{stdout:``,stderr:`fatal: ${Vs(e instanceof Error?e.message:String(e),l)}\n`,exitCode:128}}}function ju(e,t){return t.length===0||t.some(t=>{let n=t.replace(/[.+^${}()|[\]\\]/g,`\\$&`).replace(/\*/g,`.*`);return RegExp(`^(?:refs/(?:heads|tags)/)?${n}$`).test(e)})}async function Mu(e,t,n){let{flags:r,positionals:i}=M(n,I[`ls-tree`]),a=r.r===!0,o=r.d===!0,s=r[`name-only`]===!0,c=i[0],l=Nu(i.slice(1));if(!c)return{stdout:``,stderr:`usage: git ls-tree [<options>] <tree-ish> [<path>...]
|
|
40
|
-
`,exitCode:129};let u=await uc(e,t,c);if(u===void 0)return{stdout:``,stderr:`fatal: Not a valid object name ${c}\n`,exitCode:128};let d;try{d=(await Pt({fs:e.lfs,cache:e.cache,dir:t,oid:u})).tree}catch{return{stdout:``,stderr:`fatal: Not a valid object name ${c}\n`,exitCode:128}}let f=[];return await Pu(e,t,d,``,l,a,o,s,f),{stdout:f.join(``),stderr:``,exitCode:0}}function Nu(e){let t=[];for(let n of e){let e=n;for(e.startsWith(`./`)&&(e=e.slice(2));e.length>1&&e.endsWith(`/`);)e=e.slice(0,-1);t.push(e)}return t}async function Pu(e,t,n,r,i,a,o,s,c){for(let l of n){let n=r?`${r}/${l.path}`:l.path,u=Fu(n,i);if(u!==`no`){if(l.type===`tree`){let r=u===`exact`&&(o||!a),d=u===`parent`||a;if(r&&c.push(Iu(l,n,s)),d){let{tree:r}=await Pt({fs:e.lfs,cache:e.cache,dir:t,oid:l.oid});await Pu(e,t,r,n,i,a,o,s,c)}}else u!==`parent`&&!o&&c.push(Iu(l,n,s))}}}function Fu(e,t){if(t.length===0)return`exact`;let n=!1;for(let r of t){if(r===``||e===r||e.startsWith(`${r}/`))return`exact`;r.startsWith(`${e}/`)&&(n=!0)}return n?`parent`:`no`}function Iu(e,t,n){return n?`${t}\n`:`${e.mode.padStart(6,`0`)} ${e.type} ${e.oid}\t${t}\n`}function Lu(e){return e===void 0?[]:(Array.isArray(e)?e:[e]).map(e=>String(e))}function Ru(e,t){let n,r=!1;for(let t of Lu(e.flags[`strategy-option`]))t===`ours`||t===`theirs`||t===`union`?n=t:t===`diff3`&&(r=!0);return{noFf:e.flags.ff===!1||t.includes(`--no-ff`),ffOnly:e.flags[`ff-only`]===!0||t.includes(`--ff-only`),favor:n,diff3:r}}async function zu(e,t,n){let r=
|
|
40
|
+
`,exitCode:129};let u=await uc(e,t,c);if(u===void 0)return{stdout:``,stderr:`fatal: Not a valid object name ${c}\n`,exitCode:128};let d;try{d=(await Pt({fs:e.lfs,cache:e.cache,dir:t,oid:u})).tree}catch{return{stdout:``,stderr:`fatal: Not a valid object name ${c}\n`,exitCode:128}}let f=[];return await Pu(e,t,d,``,l,a,o,s,f),{stdout:f.join(``),stderr:``,exitCode:0}}function Nu(e){let t=[];for(let n of e){let e=n;for(e.startsWith(`./`)&&(e=e.slice(2));e.length>1&&e.endsWith(`/`);)e=e.slice(0,-1);t.push(e)}return t}async function Pu(e,t,n,r,i,a,o,s,c){for(let l of n){let n=r?`${r}/${l.path}`:l.path,u=Fu(n,i);if(u!==`no`){if(l.type===`tree`){let r=u===`exact`&&(o||!a),d=u===`parent`||a;if(r&&c.push(Iu(l,n,s)),d){let{tree:r}=await Pt({fs:e.lfs,cache:e.cache,dir:t,oid:l.oid});await Pu(e,t,r,n,i,a,o,s,c)}}else u!==`parent`&&!o&&c.push(Iu(l,n,s))}}}function Fu(e,t){if(t.length===0)return`exact`;let n=!1;for(let r of t){if(r===``||e===r||e.startsWith(`${r}/`))return`exact`;r.startsWith(`${e}/`)&&(n=!0)}return n?`parent`:`no`}function Iu(e,t,n){return n?`${t}\n`:`${e.mode.padStart(6,`0`)} ${e.type} ${e.oid}\t${t}\n`}function Lu(e){return e===void 0?[]:(Array.isArray(e)?e:[e]).map(e=>String(e))}function Ru(e,t){let n,r=!1;for(let t of Lu(e.flags[`strategy-option`]))t===`ours`||t===`theirs`||t===`union`?n=t:t===`diff3`&&(r=!0);return{noFf:e.flags.ff===!1||t.includes(`--no-ff`),ffOnly:e.flags[`ff-only`]===!0||t.includes(`--ff-only`),favor:n,diff3:r}}async function zu(e,t,n){let r=Is(n,I.merge);if(r)return r;let i=M(n,I.merge);if(i.flags.abort===!0)return Bu(e,t);let a=i.positionals[0];if(!a)return{stdout:``,stderr:`fatal: No branch specified to merge.
|
|
41
41
|
`,exitCode:128};if(await zc(e,t))return{stdout:``,stderr:`fatal: You have not concluded your merge (MERGE_HEAD exists).
|
|
42
42
|
Please, commit your changes before you merge.
|
|
43
43
|
`,exitCode:128};let o=await uc(e,t,a);if(!o)return{stdout:``,stderr:`fatal: Could not find ${a}.\n`,exitCode:128};let{noFf:s,ffOnly:c,favor:l,diff3:u}=Ru(i,n);try{await Vc(e,t,await E({fs:e.lfs,dir:t,ref:`HEAD`}));let n=await Ft({fs:e.lfs,cache:e.cache,dir:t,ours:await A({fs:e.lfs,dir:t})??void 0,theirs:o,fastForward:!s,fastForwardOnly:c,author:await e.resolveAuthor(t),abortOnConflict:!1,mergeDriver:sc({favor:l,diff3:u})});return n.alreadyMerged?{stdout:`Already up to date.
|
|
@@ -52,7 +52,7 @@ Please, commit your changes before you merge.
|
|
|
52
52
|
`,exitCode:128}}}function Uu(e){return e===void 0?[]:(Array.isArray(e)?e:[e]).map(e=>String(e))}async function Wu(e,t,n){let r=M(n,I[`merge-file`]),i=r.positionals;if(i.length!==3)return{stdout:``,stderr:`usage: git merge-file [<options>] <current-file> <base-file> <other-file>
|
|
53
53
|
`,exitCode:255};let a=Uu(r.flags.L);if(a.length>3)return{stdout:``,stderr:`fatal: too many labels on the command line
|
|
54
54
|
`,exitCode:255};let o=[r.flags.ours?`ours`:void 0,r.flags.theirs?`theirs`:void 0,r.flags.union?`union`:void 0].filter(e=>e!==void 0);if(o.length>1)return{stdout:``,stderr:`fatal: --ours, --theirs, and --union are mutually exclusive
|
|
55
|
-
`,exitCode:255};let[s,c,l]=i,u=e=>e.startsWith(`/`)?e:`${t}/${e}`,d,f,p;try{d=await e.fs.readTextFile(u(s)),f=await e.fs.readTextFile(u(c)),p=await e.fs.readTextFile(u(l))}catch(e){return{stdout:``,stderr:`error: ${e instanceof Error?e.message:String(e)}\n`,exitCode:255}}let m=ke(d,f,p,{diff3:!!r.flags.diff3,favor:o[0],labels:{current:a[0]??s,base:a[1]??c,other:a[2]??l}}),h=o.length>0?0:m.conflicts,g=!r.flags.quiet&&h>0?`warning: merge conflict in ${s}\n`:``,_=Math.min(h,127);return r.flags.stdout?{stdout:m.content,stderr:g,exitCode:_}:(await e.fs.writeFile(u(s),m.content),{stdout:``,stderr:g,exitCode:_})}async function Gu(e,t,n){let r=
|
|
55
|
+
`,exitCode:255};let[s,c,l]=i,u=e=>e.startsWith(`/`)?e:`${t}/${e}`,d,f,p;try{d=await e.fs.readTextFile(u(s)),f=await e.fs.readTextFile(u(c)),p=await e.fs.readTextFile(u(l))}catch(e){return{stdout:``,stderr:`error: ${e instanceof Error?e.message:String(e)}\n`,exitCode:255}}let m=ke(d,f,p,{diff3:!!r.flags.diff3,favor:o[0],labels:{current:a[0]??s,base:a[1]??c,other:a[2]??l}}),h=o.length>0?0:m.conflicts,g=!r.flags.quiet&&h>0?`warning: merge conflict in ${s}\n`:``,_=Math.min(h,127);return r.flags.stdout?{stdout:m.content,stderr:g,exitCode:_}:(await e.fs.writeFile(u(s),m.content),{stdout:``,stderr:g,exitCode:_})}async function Gu(e,t,n){let r=Is(n,I.pull);if(r)return r;let{flags:i,positionals:a}=M(n,I.pull),o=a[0]??`origin`,s=a[1],c=i[`ff-only`]===!0||n.includes(`--ff-only`),l=i.ff===!1||n.includes(`--no-ff`),u=i.quiet===!0,d=u?``:`Pulling from ${o}...\n`;return await It({fs:e.lfs,cache:e.cache,http:Oc,dir:t,remote:o,ref:s,corsProxy:e.corsProxy,author:await e.resolveAuthor(t),fastForwardOnly:c,fastForward:!l,onAuth:e.getOnAuth(),onAuthFailure:e.getOnAuthFailure(),onProgress:u?void 0:e=>{d+=`${e.phase}: ${e.loaded}/${e.total}\n`}}),u||(d+=`Already up to date.
|
|
56
56
|
`),{stdout:d,stderr:``,exitCode:0}}async function Ku(e,t,n){let{flags:r,positionals:i}=M(n,I.push),a=r.force===!0,o=r[`set-upstream`]===!0,s=r[`dry-run`]===!0,c=i[0]??`origin`,l=i[1]??await A({fs:e.lfs,dir:t});if(s)return{stdout:`Would push to ${c}...\n ${l} -> ${l}\n`,stderr:``,exitCode:0};let u=`Pushing to ${c}...\n`,d=await Rt({fs:e.lfs,cache:e.cache,http:Oc,dir:t,remote:c,ref:l??void 0,corsProxy:e.corsProxy,force:a,onAuth:e.getOnAuth(),onAuthFailure:e.getOnAuthFailure(),onProgress:e=>{u+=`${e.phase}: ${e.loaded}/${e.total}\n`}});if(d.ok)u+=`To ${c}\n`,u+=` ${l} -> ${l}\n`,o&&l&&(await Ut({fs:e.lfs,dir:t,path:`branch.${l}.remote`,value:c}),await Ut({fs:e.lfs,dir:t,path:`branch.${l}.merge`,value:`refs/heads/${l}`}),u+=`Branch '${l}' set up to track remote branch '${l}' from '${c}'.\n`);else{let n=(await Lt({fs:e.lfs,dir:t}).catch(()=>[])).find(e=>e.remote===c)?.url;return{stdout:``,stderr:`error: failed to push to '${c}': ${Vs(String(d.error),n)}\n`,exitCode:1}}return{stdout:u,stderr:``,exitCode:0}}function qu(e){return e===void 0?[]:(Array.isArray(e)?e:[e]).map(e=>String(e))}const Ju=`.git/rebase-merge`;async function Yu(e,t,n){let{flags:r,positionals:i}=M(n,I.rebase);for(let e of[`interactive`,`onto`,`rebase-merges`,`autosquash`])if(r[e])return{stdout:``,stderr:`fatal: git rebase --${e} is not supported\n`,exitCode:128};try{return r.abort?await $u(e,t):r.continue?await Zu(e,t):r.skip?await Qu(e,t):await Xu(e,t,i[0],r)}catch(e){return{stdout:``,stderr:`fatal: ${zs(e)}\n`,exitCode:128}}}async function Xu(e,t,n,r){if(!n)return{stdout:``,stderr:`fatal: No upstream specified.
|
|
57
57
|
`,exitCode:128};if(await sd(e,t))return{stdout:``,stderr:`fatal: It seems that there is already a rebase-merge directory,
|
|
58
58
|
and I wonder if you are in the middle of another rebase.
|
|
@@ -79,7 +79,7 @@ error: Please commit or stash them.
|
|
|
79
79
|
`)[0],f=s.slice(0,7),p=await A({fs:e.lfs,dir:t})??`HEAD`;try{let n=await Sd(e,t,c,s,u,{current:p,base:f,other:`parent of ${f} (${d})`});if(n.length>0){let e=``;for(let t of n)e+=`CONFLICT (content): Merge conflict in ${t}\n`;return e+=`error: could not revert ${f}... ${d}\n`,e+=`hint: after resolving the conflicts, mark them with 'git add <paths>',
|
|
80
80
|
`,e+=`hint: then commit the result.
|
|
81
81
|
`,{stdout:``,stderr:e,exitCode:1}}if(a)return{stdout:``,stderr:``,exitCode:0};let r=await e.resolveAuthor(t),i=`Revert "${d}"\n\nThis reverts commit ${s}.\n`;return{stdout:`[${p} ${(await Zt({fs:e.lfs,cache:e.cache,dir:t,message:i,author:r,committer:r})).slice(0,7)}] Revert "${d}"\n`,stderr:``,exitCode:0}}catch(e){return{stdout:``,stderr:`fatal: ${zs(e)}\n`,exitCode:128}}}async function Sd(e,t,n,r,i,a){let[o,s,c]=await Promise.all([D({fs:e.lfs,cache:e.cache,dir:t,ref:n}),D({fs:e.lfs,cache:e.cache,dir:t,ref:r}),D({fs:e.lfs,cache:e.cache,dir:t,ref:i})]),l=new Set([...o,...s,...c]),u=new TextEncoder,d=[];for(let o of l){let s=await Cd(e,t,r,o),c=await Cd(e,t,i,o);if(s===c)continue;let l=await Cd(e,t,n,o)??``,f,p=!1;if(l===(s??``))f=c??``;else{let e=ke(l,s??``,c??``,{labels:a});f=e.content,p=e.conflicts>0}if(!p&&c===void 0&&f===``){await wd(e,t,o);continue}await e.fs.writeFile(`${t}/${o}`,u.encode(f)),p?d.push(o):await qt({fs:e.lfs,cache:e.cache,dir:t,filepath:o})}return d}async function Cd(e,t,n,r){try{let{blob:i}=await At({fs:e.lfs,cache:e.cache,dir:t,oid:n,filepath:r});return new TextDecoder().decode(i)}catch{return}}async function wd(e,t,n){try{await e.fs.rm(`${t}/${n}`)}catch{}try{await zt({fs:e.lfs,cache:e.cache,dir:t,filepath:n})}catch{}}async function Td(e,t,n){let r=n.includes(`--cached`),i=n.includes(`-r`)||n.includes(`-R`)||n.includes(`--recursive`),a=n.filter(e=>!e.startsWith(`-`));if(a.length===0)return{stdout:``,stderr:`fatal: No pathspec given. Which files should I remove?
|
|
82
|
-
`,exitCode:128};for(let n of a){let a=await Ed(e,t,n,r,i);if(a)return a}return{stdout:``,stderr:``,exitCode:0}}async function Ed(e,t,n,r,i){let a=n.startsWith(`/`)?n:`${t}/${n}`,o=!1;try{o=(await e.fs.stat(a)).type===`directory`}catch{}if(o){if(!i)return{stdout:``,stderr:`fatal: not removing '${n}' recursively without -r\n`,exitCode:128};let a=(await D({fs:e.lfs,cache:e.cache,dir:t})).filter(e=>e===n||e.startsWith(n+`/`));for(let n of a)if(await zt({fs:e.lfs,cache:e.cache,dir:t,filepath:n}),!r)try{await e.fs.rm(`${t}/${n}`)}catch{}}else if(await zt({fs:e.lfs,cache:e.cache,dir:t,filepath:n}),!r)try{await e.fs.rm(a)}catch{}return null}async function Dd(e,t,n){let{flags:r,positionals:i}=M(n,I.show),a=r,o=a.stat===!0,s=
|
|
82
|
+
`,exitCode:128};for(let n of a){let a=await Ed(e,t,n,r,i);if(a)return a}return{stdout:``,stderr:``,exitCode:0}}async function Ed(e,t,n,r,i){let a=n.startsWith(`/`)?n:`${t}/${n}`,o=!1;try{o=(await e.fs.stat(a)).type===`directory`}catch{}if(o){if(!i)return{stdout:``,stderr:`fatal: not removing '${n}' recursively without -r\n`,exitCode:128};let a=(await D({fs:e.lfs,cache:e.cache,dir:t})).filter(e=>e===n||e.startsWith(n+`/`));for(let n of a)if(await zt({fs:e.lfs,cache:e.cache,dir:t,filepath:n}),!r)try{await e.fs.rm(`${t}/${n}`)}catch{}}else if(await zt({fs:e.lfs,cache:e.cache,dir:t,filepath:n}),!r)try{await e.fs.rm(a)}catch{}return null}async function Dd(e,t,n){let{flags:r,positionals:i}=M(n,I.show),a=r,o=a.stat===!0,s=Ls(a,`format`),c=i[0];if(c?.includes(`:`))return await Od(e,t,c);let l=c??`HEAD`,u=await uc(e,t,l);if(u===void 0)return{stdout:``,stderr:`fatal: bad object ${l}\n`,exitCode:128};let{commit:d}=await k({fs:e.lfs,cache:e.cache,dir:t,oid:u}),f=kd(u,d,s,e.useColor),p=d.parent.length>0?d.parent[0]:void 0;if(p){let n=await Fl(e,t,p,u,{nameOnly:!1,stat:o});f+=n.stdout}else{let n=await Xl(e,t,u,o);f+=n}return{stdout:f,stderr:``,exitCode:0}}async function Od(e,t,n){let r=n.indexOf(`:`),i=n.slice(0,r)||`HEAD`,a=n.slice(r+1),o=await uc(e,t,i);if(o===void 0)return{stdout:``,stderr:`fatal: bad object ${i}\n`,exitCode:128};let s=await At({fs:e.lfs,cache:e.cache,dir:t,oid:o,filepath:a});return{stdout:new TextDecoder().decode(s.blob),stderr:``,exitCode:0}}function kd(e,t,n,r=!1){if(n)return n.replace(/%H/g,e).replace(/%h/g,e.slice(0,7)).replace(/%s/g,t.message.split(`
|
|
83
83
|
`)[0]).replace(/%an/g,t.author.name).replace(/%ae/g,t.author.email).replace(/%ad/g,new Date(t.author.timestamp*1e3).toLocaleString())+`
|
|
84
84
|
`;let i=`${$s(r,`33`,`commit ${e}`)}\n`;return i+=`Author: ${t.author.name} <${t.author.email}>\n`,i+=`Date: ${new Date(t.author.timestamp*1e3).toLocaleString()}\n\n`,i+=` ${t.message.replace(/\n/g,`
|
|
85
85
|
`)}\n\n`,i}async function Ad(e,t,n){let r=n.includes(`--heads`),i=n.includes(`--tags`),a=n.find(e=>!e.startsWith(`-`)),o=``;if(!i){let n=await kt({fs:e.lfs,dir:t});for(let r of n){let n=await E({fs:e.lfs,dir:t,ref:r}),i=`refs/heads/${r}`;a&&!i.includes(a)||(o+=`${n} ${i}\n`)}}if(!r){let n=await Dt({fs:e.lfs,dir:t});for(let r of n){let n=await E({fs:e.lfs,dir:t,ref:r}),i=`refs/tags/${r}`;a&&!i.includes(a)||(o+=`${n} ${i}\n`)}}return{stdout:o,stderr:``,exitCode:0}}const jd=new Uint8Array;async function Md(e,t){return await e.fs.readFile(t,{encoding:`binary`})}function Nd(e,t){if(e===t)return!0;if(e.byteLength!==t.byteLength)return!1;for(let n=0;n<e.byteLength;n++)if(e[n]!==t[n])return!1;return!0}function Pd(e){if(!e.includes(0))try{return new TextDecoder(`utf-8`,{fatal:!0}).decode(e)}catch{return}}async function Fd(e,t,n){let r=n[0];if(!r||r.startsWith(`-`))return Id(e,t,n);switch(r){case`push`:case`save`:return Id(e,t,n.slice(1));case`pop`:return Bd(e,t);case`apply`:return Vd(e,t);case`list`:return Kd(e,t);case`drop`:return qd(e,t,n.slice(1));case`show`:return Jd(e,t);default:return{stdout:``,stderr:`error: unknown subcommand: ${r}\n`,exitCode:1}}}async function Id(e,t,n){let r=await A({fs:e.lfs,dir:t})??`HEAD`,i;try{i=await E({fs:e.lfs,dir:t,ref:`HEAD`})}catch{return{stdout:``,stderr:`fatal: cannot stash without a HEAD commit
|
|
@@ -115,8 +115,8 @@ error: Please commit or stash them.
|
|
|
115
115
|
or: git symbolic-ref <name> <ref>
|
|
116
116
|
or: git symbolic-ref (-d | --delete) <name>`;function nf(e){let t=Array.isArray(e)?e[e.length-1]:e;return typeof t==`boolean`?t:void 0}function rf(e){let t={};typeof e.m==`string`&&(t.m=e.m);let n=nf(e.delete);n!==void 0&&(t.delete=n);let r=nf(e.d);r!==void 0&&(t.d=r);let i=nf(e.quiet);i!==void 0&&(t.quiet=i);let a=nf(e.q);a!==void 0&&(t.q=a);let o=nf(e.short);o!==void 0&&(t.short=o);let s=nf(e.recurse);return s!==void 0&&(t.recurse=s),t}function af(){return{stdout:``,stderr:`${tf}\n`,exitCode:129}}function of(e){return!e.startsWith(`refs/`)||e.length===5||e.includes(`..`)||e.includes(`@{`)||e.split(`/`).some(e=>!e||e.startsWith(`.`)||e.endsWith(`.`)||e.endsWith(`.lock`))?!1:![...e].some(e=>{let t=e.charCodeAt(0);return t<=32||t===127||`~^:?*[\\`.includes(e)})}async function sf(e,t,n){try{let r=await E({fs:e.lfs,dir:t,ref:n,depth:2});return r.startsWith(`refs/`)?{kind:`symbolic`,target:r}:{kind:`direct`}}catch{return{kind:`missing`}}}async function cf(e,t,n,r){let i=await sf(e,t,n);if(i.kind!==`symbolic`)return{stdout:``,stderr:`fatal: ref ${n} is not a symbolic ref\n`,exitCode:i.kind===`direct`?1:128};if(!r)return i.target;let a=new Set([n]),o=i.target;for(;;){if(a.has(o))return{stdout:``,stderr:`fatal: ref ${n} has a circular symbolic target\n`,exitCode:128};a.add(o);let r=await sf(e,t,o);if(r.kind!==`symbolic`)return o;o=r.target}}function lf(e){for(let t of[`refs/heads/`,`refs/tags/`,`refs/remotes/`])if(e.startsWith(t))return e.slice(t.length);return e.startsWith(`refs/`)?e.slice(5):e}function uf(e,t){let n=new Set([`m`,`delete`,`d`,`quiet`,`q`,`short`,`recurse`]),r=Object.keys(e).find(e=>!n.has(e));if(r)return{stdout:``,stderr:`error: unknown option '${r}'\n${tf}\n`,exitCode:129};if(e.m!==void 0)return{stdout:``,stderr:`fatal: option '-m' is not supported because reflogs are not persisted
|
|
117
117
|
`,exitCode:128};if(e.delete===!1||t&&(e.short!==void 0||e.recurse!==void 0))return af()}async function df(e,t,n,r){if(n===`HEAD`)return{stdout:``,stderr:`fatal: deleting 'HEAD' is not allowed
|
|
118
|
-
`,exitCode:128};let i=await sf(e,t,n);return i.kind===`symbolic`?(await $t({fs:e.lfs,dir:t,ref:n}),{stdout:``,stderr:``,exitCode:0}):{stdout:``,stderr:r?``:`fatal: Cannot delete ${n}, not a symbolic ref\n`,exitCode:i.kind===`direct`?1:128}}async function ff(e,t,n,r){return of(r)?(await Mt({fs:e.lfs,dir:t,ref:n,value:r,force:!0,symbolic:!0}),{stdout:``,stderr:``,exitCode:0}):{stdout:``,stderr:r.startsWith(`refs/`)?`fatal: Refusing to set '${n}' to invalid ref '${r}'\n`:`fatal: Refusing to point ${n} outside of refs/\n`,exitCode:128}}async function pf(e,t,n,r){let i=await cf(e,t,n,r.recurse!==!1);return typeof i==`string`?{stdout:`${r.short?lf(i):i}\n`,stderr:``,exitCode:0}:r.quiet&&i.exitCode===1?{...i,stderr:``}:i}async function mf(e,t,n){let{flags:r,positionals:i}=M(n,I[`symbolic-ref`]),a=r.delete===!0,o=uf(r,a);if(o)return o;let s=r.quiet!==void 0||r.short!==void 0||r.recurse!==void 0;return a?i.length===1?df(e,t,i[0],!!r.quiet):af():i.length===2?s?af():ff(e,t,i[0],i[1]):i.length===1?pf(e,t,i[0],rf(r)):af()}async function hf(e,t,n){let{flags:r,positionals:i}=M(n,I.tag),a=r,o=a.delete===!0,s=
|
|
119
|
-
`,exitCode:128}}if(s!==void 0||i.length===0){let n=await Dt({fs:e.lfs,dir:t}),r=n,i=s||void 0;if(i){let e=RegExp(`^`+i.replace(/\*/g,`.*`)+`$`);r=n.filter(t=>e.test(t))}return{stdout:r.map(e=>`${e}\n`).join(``),stderr:``,exitCode:0}}let d=i[0],f=i[1];if(c||l){let n=await e.resolveAuthor(t);await un({fs:e.lfs,cache:e.cache,dir:t,ref:d,message:l??d,object:f,tagger:{...n,timestamp:Math.floor(Date.now()/1e3),timezoneOffset:0},force:u})}else await Ht({fs:e.lfs,dir:t,ref:d,object:f,force:u});return{stdout:``,stderr:``,exitCode:0}}function gf(e,t){let n=e===`dir`?16877:e===`symlink`?40960:33188;if(t===void 0)return n;let r=t&4095;return n&61440|r}function _f(e,t){let n=t.mtimeMs??0;return{type:e,mode:gf(e,t.mode),size:t.size??0,ino:t.ino??0,mtimeMs:n,ctimeMs:t.ctimeMs??n,uid:t.uid??1,gid:t.gid??1,dev:1,isFile:()=>e===`file`,isDirectory:()=>e===`dir`,isSymbolicLink:()=>e===`symlink`}}function vf(e){return{size:e.size,mtimeMs:e.mtime,ctimeMs:e.ctime,...e.ino===void 0?{}:{ino:e.ino},...e.uid===void 0?{}:{uid:e.uid},...e.gid===void 0?{}:{gid:e.gid},...e.mode===void 0?{}:{mode:e.mode}}}function yf(e){if(typeof e==`string`)return/^utf-?8$/i.test(e);if(e&&typeof e==`object`){let t=e.encoding;if(typeof t==`string`)return/^utf-?8$/i.test(t)}return!1}function bf(e){if(!e||typeof e!=`object`)return null;let{start:t,end:n}=e;return typeof t!=`number`||typeof n!=`number`?null:{start:t,end:n}}const xf=`/objects/pack`,Sf=/^(.*\/objects)\/([0-9a-f]{2})\/[0-9a-f]{38,}$/,Cf=/\/objects\/[0-9a-f]{2}$/;function wf(e){return e.endsWith(xf)||Cf.test(e)}function Tf(e){let t=Ne(e);return e.type===`directory`?t?{type:`dir`,stats:t}:{type:`dir`}:t?{type:`file`,stats:t}:void 0}function Ef(e){let t=new Map;return{prime(n,r){if(r.length>e){t.clear();return}t.size+r.length>e&&t.clear();let i=b(n),a=i===`/`?`/`:`${i}/`;for(let e of r){let n=Tf(e);n?t.set(`${a}${e.name}`,n):t.delete(`${a}${e.name}`)}},get(e){let n=t.get(b(e));if(n)return _f(n.type,n.stats?vf(n.stats):{})},drop(e){t.delete(b(e))},clear(){t.clear()},size(){return t.size}}}function Df(e,t={}){let n=t.objectCache?{packDirs:new Map,fanouts:new Map}:void 0,r=Ef(Math.max(0,t.statCacheMax??1e5)),i=async t=>{let n=await e.readDir(t,wf(t)?void 0:{includeStats:!0});return r.prime(t,n),n.map(e=>e.name)},a=(e,t)=>{let n=e.fanouts.get(t);if(n)return n;let r=i(t).then(e=>new Set(e));return e.fanouts.set(t,r),r},o=async e=>{if(!n)return!1;let t=Sf.exec(e);if(!t)return!1;try{return!(await a(n,t[1])).has(t[2])}catch{return!1}},s=()=>{n?.packDirs.clear(),n?.fanouts.clear()},c=async(e,t)=>(r.drop(e),await l(t)),l=async e=>{s();try{return await e()}finally{s()}};return{promises:{async readFile(t,n){if(await o(t))throw new Pe(`ENOENT`,`no such file or directory`,t);let r=bf(n);return r?await e.readFileRange(t,r.start,r.end):await e.readFile(t,yf(n)?{encoding:`utf-8`}:{encoding:`binary`})},async writeFile(t,n,r){await c(t,()=>e.writeFile(t,n))},async unlink(t){await c(t,()=>e.rm(t))},async readdir(e){if(!n||!e.endsWith(xf))return await i(e);let t=n.packDirs.get(e);if(t)return[...await t];let r=i(e);return n.packDirs.set(e,r),[...await r]},async mkdir(t,n){let r=n??void 0;await c(t,()=>e.mkdir(t,r?.recursive===void 0?void 0:{recursive:r.recursive}))},async rmdir(t){r.clear(),await l(()=>e.rm(t))},async stat(t){let n=r.get(t);if(n)return n;let i=await e.stat(t);return _f(i.type===`directory`?`dir`:`file`,vf(i))},async lstat(t){let n=r.get(t);if(n)return n;let i=await e.lstat(t);return _f(i.type===`directory`?`dir`:i.type===`symlink`?`symlink`:`file`,vf(i))},async readlink(t){if(e.isPathUnderMount(t))throw new Pe(`EINVAL`,`symlinks not supported on mounted filesystems`,t);return e.readlink(t)},async symlink(t,n){if(e.isPathUnderMount(n))throw new Pe(`EINVAL`,`symlinks not supported on mounted filesystems`,n);await c(n,()=>e.symlink(t,n))}},clearStatCache(){r.clear()},statCacheSize(){return r.size()}}}const Of={maxEntries:5e4,maxFileBytes:1048576,maxTotalBytes:8388608},kf=new Set([`ENOENT`,`ENOTDIR`,`EISDIR`]);function Af(e){return e.endsWith(`.pack`)||e.endsWith(`.idx`)}function jf(e){let t=e.replace(/\/{2,}/g,`/`);return t.length>1&&t.endsWith(`/`)?t.slice(0,-1):t}function Mf(e){let t=e.lastIndexOf(`/`);return t<0?`.`:t===0?`/`:e.slice(0,t)}function Nf(e){let t=e?.code;return typeof t==`string`?t:void 0}function Pf(e){return typeof e==`string`?e.length*2:e.byteLength}function Ff(e,t){return`${t?`u`:`b`} ${e}`}var If=class{limits;stats=new Map;lstats=new Map;dirs=new Map;files=new Map;fileBytes=new Map;retainedBytes=0;constructor(e){this.limits=e}hasRoom(){return this.stats.size+this.lstats.size+this.dirs.size+this.files.size<this.limits.maxEntries}retainFile(e,t){let n=Pf(t);return n>this.limits.maxFileBytes||this.retainedBytes+n>this.limits.maxTotalBytes?!1:(this.fileBytes.set(e,n),this.retainedBytes+=n,!0)}dropFile(e){let t=this.fileBytes.get(e);t!==void 0&&(this.fileBytes.delete(e),this.retainedBytes-=t)}forgetSelf(e){this.stats.delete(e),this.lstats.delete(e),this.dirs.delete(e);for(let t of[Ff(e,!0),Ff(e,!1)])this.files.delete(t),this.dropFile(t)}invalidatePath(e){let t=jf(e);this.forgetSelf(t);let n=Mf(t);this.dirs.delete(n),this.stats.delete(n),this.lstats.delete(n)}invalidateSubtree(e){let t=jf(e),n=`${t}/`;for(let e of[this.stats,this.lstats,this.dirs])for(let t of e.keys())t.startsWith(n)&&e.delete(t);for(let e of this.files.keys())e.slice(2).startsWith(n)&&(this.files.delete(e),this.dropFile(e));this.invalidatePath(t)}};function Lf(e,t,n,r){let i=e.get(t);if(i)return i;let a=n();if(!r.admit())return a;e.set(t,a);let o=()=>{e.get(t)===a&&e.delete(t)};return a.then(e=>{r.keep&&!r.keep(e)&&o()},e=>{kf.has(Nf(e)??``)||o()}),a}function Rf(e,t={}){let n=new If({...Of,...t}),r=()=>n.hasRoom(),i=async t=>(await Lf(n.dirs,jf(t),()=>e.readdir(t),{admit:r})).slice(),a=async(t,i)=>{if(Af(t))return e.readFile(t,i);let a=Ff(jf(t),yf(i)),o=await Lf(n.files,a,()=>e.readFile(t,i),{admit:r,keep:e=>n.retainFile(a,e)});return typeof o==`string`?o:new Uint8Array(o)},o=(e,t)=>n=>Lf(e,jf(n),()=>t(n),{admit:r}),s=async(e,t,r=!1)=>{try{return await t()}finally{r?n.invalidateSubtree(e):n.invalidatePath(e)}};return{readFile:a,readdir:i,stat:o(n.stats,t=>e.stat(t)),lstat:o(n.lstats,t=>e.lstat(t)),readlink:t=>e.readlink(t),writeFile:(t,n,r)=>s(t,()=>e.writeFile(t,n,r)),unlink:t=>s(t,()=>e.unlink(t),!0),rmdir:t=>s(t,()=>e.rmdir(t),!0),mkdir:(t,n)=>s(t,()=>e.mkdir(t,n)),symlink:(t,n)=>s(n,()=>e.symlink(t,n))}}const zf=e(`git-cache`);function Bf(e){for(let t of Object.getOwnPropertySymbols(e)){if(t.description!==`PackfileCache`)continue;let n=e[t];if(n instanceof Map)return n}}function Vf(e){return`${e.replace(/\/+$/,``)}/.git`}var Hf=class{fs;cache={};signatures=new Map;inFlight=0;maxResidentPacks;constructor(e,t={}){this.fs=e,this.maxResidentPacks=Math.max(1,t.maxResidentPacks??4)}setDeepVerification(e){this.cache.skipDeepPackVerification=!e}async beforeCommand(e){this.inFlight++;let t=Vf(e),n=this.signatures.get(t);if(n===void 0)return;let r=await this.packSignature(t);n!==r&&this.invalidate(e),this.signatures.set(t,r)}async afterCommand(e,t={}){this.inFlight=Math.max(0,this.inFlight-1);let n=Vf(e);t.wrotePacks&&(this.invalidate(e),this.signatures.delete(n)),this.inFlight===0&&(await this.evictFailedPacks(),await this.trimResidentPacks()),!this.signatures.has(n)&&this.hasCachedPacks(n)&&this.signatures.set(n,await this.packSignature(n))}async evictFailedPacks(){let e=Bf(this.cache);if(e)for(let[t,n]of[...e]){let r;try{r=await n}catch{e.delete(t);continue}if(!r){e.delete(t);continue}if(r.pack)try{await r.pack||(r.pack=null)}catch{r.pack=null}}}hasCachedPacks(e){let t=Bf(this.cache);if(!t)return!1;let n=`${e}/objects/pack/`;for(let e of t.keys())if(e.startsWith(n))return!0;return!1}invalidate(e){let t=`${Vf(e)}/objects/pack/`,n=Bf(this.cache);if(n)for(let e of[...n.keys()])e.startsWith(t)&&n.delete(e)}async residentPackCount(){return(await this.residentPacks()).length}async packSignature(e){let t=[];try{t=(await this.fs.readdir(`${e}/objects/pack`)).filter(e=>e.endsWith(`.idx`)||e.endsWith(`.pack`)).sort()}catch{}let n=`-`;try{n=String((await this.fs.lstat(`${e}/packed-refs`)).mtimeMs)}catch{}return`${t.join(`,`)}|${n}`}async residentPacks(){let e=Bf(this.cache);if(!e)return[];let t=[];for(let[n,r]of e){let e;try{e=await r}catch{continue}e?.pack&&t.push({key:n,index:e,usedAt:e._lastUsedAt??0})}return t.sort((e,t)=>e.usedAt-t.usedAt),t.map(({key:e,index:t})=>({key:e,index:t}))}async trimResidentPacks(){let e=await this.residentPacks();if(e.length<=this.maxResidentPacks)return;let t=e.slice(0,e.length-this.maxResidentPacks);for(let{index:e}of t)e.pack=null;zf.debug(`unloaded packfile buffers past the resident bound`,{unloaded:t.length,resident:this.maxResidentPacks})}};const Uf=e(`git-commands`),Wf=new Set([`clone`,`fetch`,`pull`,`push`,`ls-remote`]),Gf=new Set([`clone`,`fetch`,`pull`]),Kf=new Set([`add`,`branch`,`commit`,`diff`,`init`,`log`,`ls-files`,`ls-tree`,`merge-base`,`rev-parse`,`show`,`show-ref`,`status`,`symbolic-ref`,`tag`]),qf={string:[`c`,`C`,`git-dir`,`work-tree`],boolean:[`help`,`version`,`no-pager`,`paginate`,`no-replace-objects`,`color`],alias:{h:`help`},stopEarly:!0};function Jf(e){return e===void 0?[]:(Array.isArray(e)?e:[e]).map(e=>String(e))}function Yf(e,t){if(e instanceof Map){let n=e.get(t);return n&&n.length>0?n:void 0}let n=e[t];return n&&n.length>0?n:void 0}var Xf=class e{options;static globalFsByDbName=new Map;lfs;corsProxy;authorName;authorEmail;globalDbName;githubToken;currentEnv;currentConfigOverrides;currentStdin=``;cacheManager;constructor(e){this.options=e,this.lfs=Df(e.fs,{statCacheMax:0}).promises,this.corsProxy=e.corsProxy,this.authorName=e.authorName??`User`,this.authorEmail=e.authorEmail??`user@example.com`,this.globalDbName=e.globalDbName??`slicc-fs-global`,this.cacheManager=new Hf(this.lfs,{...e.maxResidentPacks===void 0?{}:{maxResidentPacks:e.maxResidentPacks}})}contextFor(e,t){let n=Df(this.options.fs,{objectCache:!0}),r=Kf.has(e)?Rf(n.promises):n.promises,i=this.createOnAuthFailure();return{ctx:{lfs:r,fs:this.options.fs,cache:this.cacheManager.cache,corsProxy:this.corsProxy,getOnAuth:()=>this.getOnAuth(),getOnAuthFailure:()=>i,resolveAuthor:e=>this.resolveAuthor(e,r),getGlobalFs:()=>this.getGlobalFs(),setGithubToken:e=>this.setGithubToken(e),getGithubToken:()=>this.githubToken,setDefaultAuthorName:e=>{this.authorName=e},setDefaultAuthorEmail:e=>{this.authorEmail=e},getConfigOverrides:()=>this.currentConfigOverrides,stdin:this.currentStdin,useColor:t},client:n}}getOnAuth(){let e=this.resolveAuthToken();if(e)return()=>({username:`x-access-token`,password:e})}createOnAuthFailure(){if(!this.options.ensureFreshGithubToken)return;let e=!1;return async()=>{if(e)return;e=!0;try{await this.options.ensureFreshGithubToken?.({force:!0})}catch(e){Uf.warn(`GitHub token force-renew after 401 failed`,{error:e instanceof Error?e.message:String(e)});return}await this.loadGithubToken();let t=this.resolveAuthToken();if(t)return{username:`x-access-token`,password:t}}}resolveAuthToken(){if(this.githubToken)return this.githubToken;let e=this.currentEnv;if(!e)return;let t=Yf(e,`GH_TOKEN`);if(t)return t;let n=Yf(e,`GITHUB_TOKEN`);if(n)return n}getGlobalFs(){let t=e.globalFsByDbName.get(this.globalDbName);if(t)return t;let n=We.create({dbName:this.globalDbName});return e.globalFsByDbName.set(this.globalDbName,n),n}async loadGithubToken(){try{let e=(await(await this.getGlobalFs()).readTextFile(`/workspace/.git/github-token`)).trim();this.githubToken=e||void 0}catch{this.githubToken=void 0}}async ensureFreshGithubToken(e){try{await this.options.ensureFreshGithubToken?.(e)}catch(e){Uf.warn(`GitHub token freshness check failed; continuing with existing auth`,{error:e instanceof Error?e.message:String(e)})}}async setGithubToken(e){let t=e.trim(),n=await this.getGlobalFs();if(!t){try{await n.rm(`/workspace/.git/github-token`)}catch{}this.githubToken=void 0;return}await n.writeFile(`/workspace/.git/github-token`,t),this.githubToken=t}async resolveAuthor(e,t){let n=async n=>{try{return await Bt({fs:t,dir:e,path:n})}catch{return}},r=this.currentConfigOverrides,i=await this.getGlobalFs();return{name:r?.get(`user.name`)??await n(`user.name`)??await zn(i,`user.name`)??this.authorName,email:r?.get(`user.email`)??await n(`user.email`)??await zn(i,`user.email`)??this.authorEmail}}async execute(e,t,n,r,i){if(e.length===0)return this.help();let a=this.stripGlobalFlags(Ys(e),t);if(a.versionRequested&&a.remainingArgs.length===0)return this.version();if(a.helpRequested||a.remainingArgs.length===0)return this.help();let o=a.effectiveCwd,[s,...c]=a.remainingArgs,l=I[s]??{},u=M(c,l),d=Object.hasOwn(l.alias??{},`h`);if(u.flags.help||u.flags.h&&!d)return this.help();this.currentEnv=n,this.currentConfigOverrides=a.configOverrides,this.currentStdin=r??``;let f=this.invocationColor(e,n,a.configOverrides,i),{ctx:p,client:m}=this.contextFor(s,f);try{return this.cacheManager.setDeepVerification(this.shouldVerifyPackfiles()),await this.cacheManager.beforeCommand(o),Wf.has(s)&&await this.ensureFreshGithubToken(),await this.loadGithubToken(),await this.dispatch(s,p,o,c)}catch(e){return{stdout:``,stderr:`fatal: ${zs(e)}\n`,exitCode:128}}finally{await this.cacheManager.afterCommand(o,{wrotePacks:Gf.has(s)}),this.currentEnv=void 0,this.currentConfigOverrides=void 0,this.currentStdin=``,m.clearStatCache()}}async dispatch(e,t,n,r){switch(e){case`init`:return await $l(t,n,r);case`clone`:return await kc(t,n,r);case`add`:return await Ts(t,n,r);case`status`:return await Xd(t,n,r);case`commit`:return await Kc(t,n,r);case`log`:return await su(t,n,r);case`ls-remote`:return await Au(t,n,r);case`branch`:return await ec(t,n,r);case`checkout`:return await tc(t,n,r);case`clean`:return await bc(t,n,r);case`diff`:return await kl(t,n,r);case`show`:return await Dd(t,n,r);case`remote`:return await pd(t,n,r);case`fetch`:return await Zl(t,n,r);case`pull`:return await Gu(t,n,r);case`push`:return await Ku(t,n,r);case`merge`:return await zu(t,n,r);case`merge-base`:return await Hu(t,n,r);case`cherry-pick`:return await vc(t,n,r);case`rebase`:return await Yu(t,n,r);case`revert`:return await xd(t,n,r);case`merge-file`:return await Wu(t,n,r);case`reset`:return await md(t,n,r);case`config`:return await al(t,n,r);case`tag`:return await hf(t,n,r);case`ls-files`:return await Du(t,n,r);case`ls-tree`:return await Mu(t,n,r);case`show-ref`:return await Ad(t,n,r);case`symbolic-ref`:return await mf(t,n,r);case`stash`:return await Fd(t,n,r);case`rm`:return await Td(t,n,r);case`mv`:{let{mv:e}=await import(`./mv-ohCkaQgo.js`);return await e(t,n,r)}case`rev-parse`:return await bd(t,n,r);case`help`:return this.help();case`version`:return this.version();default:return{stdout:``,stderr:`git: '${e}' is not a git command. See 'git help'.\n`,exitCode:127}}}invocationColor(e,t,n,r){return Qs({cliWhen:Js(e),colorUi:n?.get(`color.ui`),noColorEnv:!!(t&&Yf(t,`NO_COLOR`)),stdoutIsTTY:r?.stdoutIsTTY===!0,term:t?Yf(t,`TERM`):void 0})}shouldVerifyPackfiles(){let e=this.currentEnv,t=e?Yf(e,`SLICC_GIT_VERIFY_PACKS`):void 0;return t===void 0?this.options.verifyPackfiles===!0:t!==`0`&&t.toLowerCase()!==`false`}stripGlobalFlags(e,t){let n=M(e,qf),r=t;for(let e of Jf(n.flags.C))e!==``&&(r=e.startsWith(`/`)?e:`${r}/${e}`);let i=new Map;for(let e of Jf(n.flags.c)){if(e===``)continue;let t=e.indexOf(`=`);if(t<0){i.set(e.toLowerCase(),``);continue}i.set(e.slice(0,t).toLowerCase(),e.slice(t+1))}return{effectiveCwd:r,remainingArgs:n.positionals,helpRequested:!!(n.flags.help||n.flags.h),versionRequested:!!n.flags.version,configOverrides:i}}version(){return{stdout:`git version 2.43.0 (isomorphic-git ${Wt()})\n`,stderr:``,exitCode:0}}help(){return{stdout:`usage: git <command> [<args>]
|
|
118
|
+
`,exitCode:128};let i=await sf(e,t,n);return i.kind===`symbolic`?(await $t({fs:e.lfs,dir:t,ref:n}),{stdout:``,stderr:``,exitCode:0}):{stdout:``,stderr:r?``:`fatal: Cannot delete ${n}, not a symbolic ref\n`,exitCode:i.kind===`direct`?1:128}}async function ff(e,t,n,r){return of(r)?(await Mt({fs:e.lfs,dir:t,ref:n,value:r,force:!0,symbolic:!0}),{stdout:``,stderr:``,exitCode:0}):{stdout:``,stderr:r.startsWith(`refs/`)?`fatal: Refusing to set '${n}' to invalid ref '${r}'\n`:`fatal: Refusing to point ${n} outside of refs/\n`,exitCode:128}}async function pf(e,t,n,r){let i=await cf(e,t,n,r.recurse!==!1);return typeof i==`string`?{stdout:`${r.short?lf(i):i}\n`,stderr:``,exitCode:0}:r.quiet&&i.exitCode===1?{...i,stderr:``}:i}async function mf(e,t,n){let{flags:r,positionals:i}=M(n,I[`symbolic-ref`]),a=r.delete===!0,o=uf(r,a);if(o)return o;let s=r.quiet!==void 0||r.short!==void 0||r.recurse!==void 0;return a?i.length===1?df(e,t,i[0],!!r.quiet):af():i.length===2?s?af():ff(e,t,i[0],i[1]):i.length===1?pf(e,t,i[0],rf(r)):af()}async function hf(e,t,n){let{flags:r,positionals:i}=M(n,I.tag),a=r,o=a.delete===!0,s=Ls(a,`list`),c=a.annotate===!0,l=Ls(a,`message`),u=a.force===!0;if(o){let n=i[0];return n?(await Kt({fs:e.lfs,dir:t,ref:n}),{stdout:`Deleted tag '${n}'\n`,stderr:``,exitCode:0}):{stdout:``,stderr:`fatal: tag name required
|
|
119
|
+
`,exitCode:128}}if(s!==void 0||i.length===0){let n=await Dt({fs:e.lfs,dir:t}),r=n,i=s||void 0;if(i){let e=RegExp(`^`+i.replace(/\*/g,`.*`)+`$`);r=n.filter(t=>e.test(t))}return{stdout:r.map(e=>`${e}\n`).join(``),stderr:``,exitCode:0}}let d=i[0],f=i[1];if(c||l){let n=await e.resolveAuthor(t);await un({fs:e.lfs,cache:e.cache,dir:t,ref:d,message:l??d,object:f,tagger:{...n,timestamp:Math.floor(Date.now()/1e3),timezoneOffset:0},force:u})}else await Ht({fs:e.lfs,dir:t,ref:d,object:f,force:u});return{stdout:``,stderr:``,exitCode:0}}function gf(e,t){let n=e===`dir`?16877:e===`symlink`?40960:33188;if(t===void 0)return n;let r=t&4095;return n&61440|r}function _f(e,t){let n=t.mtimeMs??0;return{type:e,mode:gf(e,t.mode),size:t.size??0,ino:t.ino??0,mtimeMs:n,ctimeMs:t.ctimeMs??n,uid:t.uid??1,gid:t.gid??1,dev:1,isFile:()=>e===`file`,isDirectory:()=>e===`dir`,isSymbolicLink:()=>e===`symlink`}}function vf(e){return{size:e.size,mtimeMs:e.mtime,ctimeMs:e.ctime,...e.ino===void 0?{}:{ino:e.ino},...e.uid===void 0?{}:{uid:e.uid},...e.gid===void 0?{}:{gid:e.gid},...e.mode===void 0?{}:{mode:e.mode}}}function yf(e){if(typeof e==`string`)return/^utf-?8$/i.test(e);if(e&&typeof e==`object`){let t=e.encoding;if(typeof t==`string`)return/^utf-?8$/i.test(t)}return!1}function bf(e){if(!e||typeof e!=`object`)return null;let{start:t,end:n}=e;return typeof t!=`number`||typeof n!=`number`?null:{start:t,end:n}}const xf=`/objects/pack`,Sf=/^(.*\/objects)\/([0-9a-f]{2})\/[0-9a-f]{38,}$/,Cf=/\/objects\/[0-9a-f]{2}$/;function wf(e){return e.endsWith(xf)||Cf.test(e)}function Tf(e){let t=Ne(e);return e.type===`directory`?t?{type:`dir`,stats:t}:{type:`dir`}:t?{type:`file`,stats:t}:void 0}function Ef(e){let t=new Map;return{prime(n,r){if(r.length>e){t.clear();return}t.size+r.length>e&&t.clear();let i=b(n),a=i===`/`?`/`:`${i}/`;for(let e of r){let n=Tf(e);n?t.set(`${a}${e.name}`,n):t.delete(`${a}${e.name}`)}},get(e){let n=t.get(b(e));if(n)return _f(n.type,n.stats?vf(n.stats):{})},drop(e){t.delete(b(e))},clear(){t.clear()},size(){return t.size}}}function Df(e,t={}){let n=t.objectCache?{packDirs:new Map,fanouts:new Map}:void 0,r=Ef(Math.max(0,t.statCacheMax??1e5)),i=async t=>{let n=await e.readDir(t,wf(t)?void 0:{includeStats:!0});return r.prime(t,n),n.map(e=>e.name)},a=(e,t)=>{let n=e.fanouts.get(t);if(n)return n;let r=i(t).then(e=>new Set(e));return e.fanouts.set(t,r),r},o=async e=>{if(!n)return!1;let t=Sf.exec(e);if(!t)return!1;try{return!(await a(n,t[1])).has(t[2])}catch{return!1}},s=()=>{n?.packDirs.clear(),n?.fanouts.clear()},c=async(e,t)=>(r.drop(e),await l(t)),l=async e=>{s();try{return await e()}finally{s()}};return{promises:{async readFile(t,n){if(await o(t))throw new Pe(`ENOENT`,`no such file or directory`,t);let r=bf(n);return r?await e.readFileRange(t,r.start,r.end):await e.readFile(t,yf(n)?{encoding:`utf-8`}:{encoding:`binary`})},async writeFile(t,n,r){await c(t,()=>e.writeFile(t,n))},async unlink(t){await c(t,()=>e.rm(t))},async readdir(e){if(!n||!e.endsWith(xf))return await i(e);let t=n.packDirs.get(e);if(t)return[...await t];let r=i(e);return n.packDirs.set(e,r),[...await r]},async mkdir(t,n){let r=n??void 0;await c(t,()=>e.mkdir(t,r?.recursive===void 0?void 0:{recursive:r.recursive}))},async rmdir(t){r.clear(),await l(()=>e.rm(t))},async stat(t){let n=r.get(t);if(n)return n;let i=await e.stat(t);return _f(i.type===`directory`?`dir`:`file`,vf(i))},async lstat(t){let n=r.get(t);if(n)return n;let i=await e.lstat(t);return _f(i.type===`directory`?`dir`:i.type===`symlink`?`symlink`:`file`,vf(i))},async readlink(t){if(e.isPathUnderMount(t))throw new Pe(`EINVAL`,`symlinks not supported on mounted filesystems`,t);return e.readlink(t)},async symlink(t,n){if(e.isPathUnderMount(n))throw new Pe(`EINVAL`,`symlinks not supported on mounted filesystems`,n);await c(n,()=>e.symlink(t,n))}},clearStatCache(){r.clear()},statCacheSize(){return r.size()}}}const Of={maxEntries:5e4,maxFileBytes:1048576,maxTotalBytes:8388608},kf=new Set([`ENOENT`,`ENOTDIR`,`EISDIR`]);function Af(e){return e.endsWith(`.pack`)||e.endsWith(`.idx`)}function jf(e){let t=e.replace(/\/{2,}/g,`/`);return t.length>1&&t.endsWith(`/`)?t.slice(0,-1):t}function Mf(e){let t=e.lastIndexOf(`/`);return t<0?`.`:t===0?`/`:e.slice(0,t)}function Nf(e){let t=e?.code;return typeof t==`string`?t:void 0}function Pf(e){return typeof e==`string`?e.length*2:e.byteLength}function Ff(e,t){return`${t?`u`:`b`} ${e}`}var If=class{limits;stats=new Map;lstats=new Map;dirs=new Map;files=new Map;fileBytes=new Map;retainedBytes=0;constructor(e){this.limits=e}hasRoom(){return this.stats.size+this.lstats.size+this.dirs.size+this.files.size<this.limits.maxEntries}retainFile(e,t){let n=Pf(t);return n>this.limits.maxFileBytes||this.retainedBytes+n>this.limits.maxTotalBytes?!1:(this.fileBytes.set(e,n),this.retainedBytes+=n,!0)}dropFile(e){let t=this.fileBytes.get(e);t!==void 0&&(this.fileBytes.delete(e),this.retainedBytes-=t)}forgetSelf(e){this.stats.delete(e),this.lstats.delete(e),this.dirs.delete(e);for(let t of[Ff(e,!0),Ff(e,!1)])this.files.delete(t),this.dropFile(t)}invalidatePath(e){let t=jf(e);this.forgetSelf(t);let n=Mf(t);this.dirs.delete(n),this.stats.delete(n),this.lstats.delete(n)}invalidateSubtree(e){let t=jf(e),n=`${t}/`;for(let e of[this.stats,this.lstats,this.dirs])for(let t of e.keys())t.startsWith(n)&&e.delete(t);for(let e of this.files.keys())e.slice(2).startsWith(n)&&(this.files.delete(e),this.dropFile(e));this.invalidatePath(t)}};function Lf(e,t,n,r){let i=e.get(t);if(i)return i;let a=n();if(!r.admit())return a;e.set(t,a);let o=()=>{e.get(t)===a&&e.delete(t)};return a.then(e=>{r.keep&&!r.keep(e)&&o()},e=>{kf.has(Nf(e)??``)||o()}),a}function Rf(e,t={}){let n=new If({...Of,...t}),r=()=>n.hasRoom(),i=async t=>(await Lf(n.dirs,jf(t),()=>e.readdir(t),{admit:r})).slice(),a=async(t,i)=>{if(Af(t))return e.readFile(t,i);let a=Ff(jf(t),yf(i)),o=await Lf(n.files,a,()=>e.readFile(t,i),{admit:r,keep:e=>n.retainFile(a,e)});return typeof o==`string`?o:new Uint8Array(o)},o=(e,t)=>n=>Lf(e,jf(n),()=>t(n),{admit:r}),s=async(e,t,r=!1)=>{try{return await t()}finally{r?n.invalidateSubtree(e):n.invalidatePath(e)}};return{readFile:a,readdir:i,stat:o(n.stats,t=>e.stat(t)),lstat:o(n.lstats,t=>e.lstat(t)),readlink:t=>e.readlink(t),writeFile:(t,n,r)=>s(t,()=>e.writeFile(t,n,r)),unlink:t=>s(t,()=>e.unlink(t),!0),rmdir:t=>s(t,()=>e.rmdir(t),!0),mkdir:(t,n)=>s(t,()=>e.mkdir(t,n)),symlink:(t,n)=>s(n,()=>e.symlink(t,n))}}const zf=e(`git-cache`);function Bf(e){for(let t of Object.getOwnPropertySymbols(e)){if(t.description!==`PackfileCache`)continue;let n=e[t];if(n instanceof Map)return n}}function Vf(e){return`${e.replace(/\/+$/,``)}/.git`}var Hf=class{fs;cache={};signatures=new Map;inFlight=0;maxResidentPacks;constructor(e,t={}){this.fs=e,this.maxResidentPacks=Math.max(1,t.maxResidentPacks??4)}setDeepVerification(e){this.cache.skipDeepPackVerification=!e}async beforeCommand(e){this.inFlight++;let t=Vf(e),n=this.signatures.get(t);if(n===void 0)return;let r=await this.packSignature(t);n!==r&&this.invalidate(e),this.signatures.set(t,r)}async afterCommand(e,t={}){this.inFlight=Math.max(0,this.inFlight-1);let n=Vf(e);t.wrotePacks&&(this.invalidate(e),this.signatures.delete(n)),this.inFlight===0&&(await this.evictFailedPacks(),await this.trimResidentPacks()),!this.signatures.has(n)&&this.hasCachedPacks(n)&&this.signatures.set(n,await this.packSignature(n))}async evictFailedPacks(){let e=Bf(this.cache);if(e)for(let[t,n]of[...e]){let r;try{r=await n}catch{e.delete(t);continue}if(!r){e.delete(t);continue}if(r.pack)try{await r.pack||(r.pack=null)}catch{r.pack=null}}}hasCachedPacks(e){let t=Bf(this.cache);if(!t)return!1;let n=`${e}/objects/pack/`;for(let e of t.keys())if(e.startsWith(n))return!0;return!1}invalidate(e){let t=`${Vf(e)}/objects/pack/`,n=Bf(this.cache);if(n)for(let e of[...n.keys()])e.startsWith(t)&&n.delete(e)}async residentPackCount(){return(await this.residentPacks()).length}async packSignature(e){let t=[];try{t=(await this.fs.readdir(`${e}/objects/pack`)).filter(e=>e.endsWith(`.idx`)||e.endsWith(`.pack`)).sort()}catch{}let n=`-`;try{n=String((await this.fs.lstat(`${e}/packed-refs`)).mtimeMs)}catch{}return`${t.join(`,`)}|${n}`}async residentPacks(){let e=Bf(this.cache);if(!e)return[];let t=[];for(let[n,r]of e){let e;try{e=await r}catch{continue}e?.pack&&t.push({key:n,index:e,usedAt:e._lastUsedAt??0})}return t.sort((e,t)=>e.usedAt-t.usedAt),t.map(({key:e,index:t})=>({key:e,index:t}))}async trimResidentPacks(){let e=await this.residentPacks();if(e.length<=this.maxResidentPacks)return;let t=e.slice(0,e.length-this.maxResidentPacks);for(let{index:e}of t)e.pack=null;zf.debug(`unloaded packfile buffers past the resident bound`,{unloaded:t.length,resident:this.maxResidentPacks})}};const Uf=e(`git-commands`),Wf=new Set([`clone`,`fetch`,`pull`,`push`,`ls-remote`]),Gf=new Set([`clone`,`fetch`,`pull`]),Kf=new Set([`add`,`branch`,`commit`,`diff`,`init`,`log`,`ls-files`,`ls-tree`,`merge-base`,`rev-parse`,`show`,`show-ref`,`status`,`symbolic-ref`,`tag`]),qf={string:[`c`,`C`,`git-dir`,`work-tree`],boolean:[`help`,`version`,`no-pager`,`paginate`,`no-replace-objects`,`color`],alias:{h:`help`},stopEarly:!0};function Jf(e){return e===void 0?[]:(Array.isArray(e)?e:[e]).map(e=>String(e))}function Yf(e,t){if(e instanceof Map){let n=e.get(t);return n&&n.length>0?n:void 0}let n=e[t];return n&&n.length>0?n:void 0}var Xf=class e{options;static globalFsByDbName=new Map;lfs;corsProxy;authorName;authorEmail;globalDbName;githubToken;currentEnv;currentConfigOverrides;currentStdin=``;cacheManager;constructor(e){this.options=e,this.lfs=Df(e.fs,{statCacheMax:0}).promises,this.corsProxy=e.corsProxy,this.authorName=e.authorName??`User`,this.authorEmail=e.authorEmail??`user@example.com`,this.globalDbName=e.globalDbName??`slicc-fs-global`,this.cacheManager=new Hf(this.lfs,{...e.maxResidentPacks===void 0?{}:{maxResidentPacks:e.maxResidentPacks}})}contextFor(e,t){let n=Df(this.options.fs,{objectCache:!0}),r=Kf.has(e)?Rf(n.promises):n.promises,i=this.createOnAuthFailure();return{ctx:{lfs:r,fs:this.options.fs,cache:this.cacheManager.cache,corsProxy:this.corsProxy,getOnAuth:()=>this.getOnAuth(),getOnAuthFailure:()=>i,resolveAuthor:e=>this.resolveAuthor(e,r),getGlobalFs:()=>this.getGlobalFs(),setGithubToken:e=>this.setGithubToken(e),getGithubToken:()=>this.githubToken,setDefaultAuthorName:e=>{this.authorName=e},setDefaultAuthorEmail:e=>{this.authorEmail=e},getConfigOverrides:()=>this.currentConfigOverrides,stdin:this.currentStdin,useColor:t},client:n}}getOnAuth(){let e=this.resolveAuthToken();if(e)return()=>({username:`x-access-token`,password:e})}createOnAuthFailure(){if(!this.options.ensureFreshGithubToken)return;let e=!1;return async()=>{if(e)return;e=!0;try{await this.options.ensureFreshGithubToken?.({force:!0})}catch(e){Uf.warn(`GitHub token force-renew after 401 failed`,{error:e instanceof Error?e.message:String(e)});return}await this.loadGithubToken();let t=this.resolveAuthToken();if(t)return{username:`x-access-token`,password:t}}}resolveAuthToken(){if(this.githubToken)return this.githubToken;let e=this.currentEnv;if(!e)return;let t=Yf(e,`GH_TOKEN`);if(t)return t;let n=Yf(e,`GITHUB_TOKEN`);if(n)return n}getGlobalFs(){let t=e.globalFsByDbName.get(this.globalDbName);if(t)return t;let n=We.create({dbName:this.globalDbName});return e.globalFsByDbName.set(this.globalDbName,n),n}async loadGithubToken(){try{let e=(await(await this.getGlobalFs()).readTextFile(`/workspace/.git/github-token`)).trim();this.githubToken=e||void 0}catch{this.githubToken=void 0}}async ensureFreshGithubToken(e){try{await this.options.ensureFreshGithubToken?.(e)}catch(e){Uf.warn(`GitHub token freshness check failed; continuing with existing auth`,{error:e instanceof Error?e.message:String(e)})}}async setGithubToken(e){let t=e.trim(),n=await this.getGlobalFs();if(!t){try{await n.rm(`/workspace/.git/github-token`)}catch{}this.githubToken=void 0;return}await n.writeFile(`/workspace/.git/github-token`,t),this.githubToken=t}async resolveAuthor(e,t){let n=async n=>{try{return await Bt({fs:t,dir:e,path:n})}catch{return}},r=this.currentConfigOverrides,i=await this.getGlobalFs();return{name:r?.get(`user.name`)??await n(`user.name`)??await zn(i,`user.name`)??this.authorName,email:r?.get(`user.email`)??await n(`user.email`)??await zn(i,`user.email`)??this.authorEmail}}async execute(e,t,n,r,i){if(e.length===0)return this.help();let a=this.stripGlobalFlags(Ys(e),t);if(a.versionRequested&&a.remainingArgs.length===0)return this.version();if(a.helpRequested||a.remainingArgs.length===0)return this.help();let o=a.effectiveCwd,[s,...c]=a.remainingArgs,l=I[s]??{},u=M(c,l),d=Object.hasOwn(l.alias??{},`h`);if(u.flags.help||u.flags.h&&!d)return this.help();this.currentEnv=n,this.currentConfigOverrides=a.configOverrides,this.currentStdin=r??``;let f=this.invocationColor(e,n,a.configOverrides,i),{ctx:p,client:m}=this.contextFor(s,f);try{return this.cacheManager.setDeepVerification(this.shouldVerifyPackfiles()),await this.cacheManager.beforeCommand(o),Wf.has(s)&&await this.ensureFreshGithubToken(),await this.loadGithubToken(),await this.dispatch(s,p,o,c)}catch(e){return{stdout:``,stderr:`fatal: ${zs(e)}\n`,exitCode:128}}finally{await this.cacheManager.afterCommand(o,{wrotePacks:Gf.has(s)}),this.currentEnv=void 0,this.currentConfigOverrides=void 0,this.currentStdin=``,m.clearStatCache()}}async dispatch(e,t,n,r){switch(e){case`init`:return await $l(t,n,r);case`clone`:return await kc(t,n,r);case`add`:return await ws(t,n,r);case`status`:return await Xd(t,n,r);case`commit`:return await Kc(t,n,r);case`log`:return await su(t,n,r);case`ls-remote`:return await Au(t,n,r);case`branch`:return await ec(t,n,r);case`checkout`:return await tc(t,n,r);case`clean`:return await bc(t,n,r);case`diff`:return await kl(t,n,r);case`show`:return await Dd(t,n,r);case`remote`:return await pd(t,n,r);case`fetch`:return await Zl(t,n,r);case`pull`:return await Gu(t,n,r);case`push`:return await Ku(t,n,r);case`merge`:return await zu(t,n,r);case`merge-base`:return await Hu(t,n,r);case`cherry-pick`:return await vc(t,n,r);case`rebase`:return await Yu(t,n,r);case`revert`:return await xd(t,n,r);case`merge-file`:return await Wu(t,n,r);case`reset`:return await md(t,n,r);case`config`:return await al(t,n,r);case`tag`:return await hf(t,n,r);case`ls-files`:return await Du(t,n,r);case`ls-tree`:return await Mu(t,n,r);case`show-ref`:return await Ad(t,n,r);case`symbolic-ref`:return await mf(t,n,r);case`stash`:return await Fd(t,n,r);case`rm`:return await Td(t,n,r);case`mv`:{let{mv:e}=await import(`./mv-ohCkaQgo.js`);return await e(t,n,r)}case`rev-parse`:return await bd(t,n,r);case`help`:return this.help();case`version`:return this.version();default:return{stdout:``,stderr:`git: '${e}' is not a git command. See 'git help'.\n`,exitCode:127}}}invocationColor(e,t,n,r){return Qs({cliWhen:Js(e),colorUi:n?.get(`color.ui`),noColorEnv:!!(t&&Yf(t,`NO_COLOR`)),stdoutIsTTY:r?.stdoutIsTTY===!0,term:t?Yf(t,`TERM`):void 0})}shouldVerifyPackfiles(){let e=this.currentEnv,t=e?Yf(e,`SLICC_GIT_VERIFY_PACKS`):void 0;return t===void 0?this.options.verifyPackfiles===!0:t!==`0`&&t.toLowerCase()!==`false`}stripGlobalFlags(e,t){let n=M(e,qf),r=t;for(let e of Jf(n.flags.C))e!==``&&(r=e.startsWith(`/`)?e:`${r}/${e}`);let i=new Map;for(let e of Jf(n.flags.c)){if(e===``)continue;let t=e.indexOf(`=`);if(t<0){i.set(e.toLowerCase(),``);continue}i.set(e.slice(0,t).toLowerCase(),e.slice(t+1))}return{effectiveCwd:r,remainingArgs:n.positionals,helpRequested:!!(n.flags.help||n.flags.h),versionRequested:!!n.flags.version,configOverrides:i}}version(){return{stdout:`git version 2.43.0 (isomorphic-git ${Wt()})\n`,stderr:``,exitCode:0}}help(){return{stdout:`usage: git <command> [<args>]
|
|
120
120
|
|
|
121
121
|
Available commands:
|
|
122
122
|
init Initialize a new repository
|
|
@@ -155,7 +155,7 @@ Available commands:
|
|
|
155
155
|
${t}
|
|
156
156
|
}
|
|
157
157
|
${ip}=$? ${rp}="\${PIPESTATUS[*]}"`:e}function sp(e){let t=0;for(let n=e.length-1;n>=0&&e[n]===`\\`;n--)t+=1;return t%2==0?e:`${e}\\`}function cp(e){if(!e)return[];let t=e.trim().split(/\s+/).filter(Boolean);if(t.length===0)return[];let n=[];for(let e of t){if(!ap.test(e))return[];let t=Number(e);if(t>255)return[];n.push(t)}return n}function lp(e,t){return t?op(e):e}function up(e,t){if(!t||!e.env)return e;let n=fp(e.env),r=n.exitCode===void 0?e:{...e,exitCode:n.exitCode};return n.pipeStatus.length===0?r:{...r,pipeStatus:n.pipeStatus}}function dp(e,t){return t===void 0?e:{...e,pipeStatus:t}}function fp(e){let t=e[rp],n=e[ip];delete e[rp],delete e[ip];let r;if(n!==void 0&&ap.test(n)){let e=Number(n);e<=255&&(r=e)}return{pipeStatus:cp(t),exitCode:r}}function pp(e){return e.length<2||e.every(e=>e===0)||!e.every(e=>Number.isInteger(e)&&e>=0&&e<=255)?null:`pipeline: ${e.join(` `)}`}function mp(e,t){let n=t?pp(t):null;return n?e?e.endsWith(`
|
|
158
|
-
`)?`${e}${n}`:`${e}\n${n}`:n:e}var hp=class{aggregator=null;now;explicitSink;scrubLabel;ids=new Map;seq=0;constructor(e={}){this.now=e.now??Date.now,this.explicitSink=e.sink,this.scrubLabel=e.scrubLabel}allocateId(e=`p`){return this.seq+=1,`${e}-${this.seq}`}hasSink(){return this.resolveSink()!==null}setAggregator(e){this.aggregator=e}emit(e){let t=this.aggregator;if(t&&e.id!==t.id)return t.onChild(e),!0;let n=this.resolveSink();if(!n)return e.phase===`end`&&this.ids.delete(e.id),!1;let r=this.ids.get(e.id);if(e.phase===`update`){if(!r)return!1;let t=this.now();return t-r.lastUpdateAt<250?!1:(r.lastUpdateAt=t,this.deliver(r,n,e),!0)}if(e.phase===`start`){let t={lastUpdateAt:-1/0,rawLabel:e.label,label:this.scrubbed(e.label),tail:Promise.resolve()};return this.ids.set(e.id,t),this.deliver(t,n,e),!0}return r?(this.ids.delete(e.id),this.deliver(r,n,e),!0):!1}resolveSink(){if(this.explicitSink)return this.explicitSink;let e=xe();if(!e)return null;let t=e.onUpdate;return e=>{t({content:[{type:
|
|
158
|
+
`)?`${e}${n}`:`${e}\n${n}`:n:e}var hp=class{aggregator=null;now;explicitSink;scrubLabel;ids=new Map;seq=0;constructor(e={}){this.now=e.now??Date.now,this.explicitSink=e.sink,this.scrubLabel=e.scrubLabel}allocateId(e=`p`){return this.seq+=1,`${e}-${this.seq}`}hasSink(){return this.resolveSink()!==null}setAggregator(e){this.aggregator=e}emit(e){let t=this.aggregator;if(t&&e.id!==t.id)return t.onChild(e),!0;let n=this.resolveSink();if(!n)return e.phase===`end`&&this.ids.delete(e.id),!1;let r=this.ids.get(e.id);if(e.phase===`update`){if(!r)return!1;let t=this.now();return t-r.lastUpdateAt<250?!1:(r.lastUpdateAt=t,this.deliver(r,n,e),!0)}if(e.phase===`start`){let t={lastUpdateAt:-1/0,rawLabel:e.label,label:this.scrubbed(e.label),tail:Promise.resolve()};return this.ids.set(e.id,t),this.deliver(t,n,e),!0}return r?(this.ids.delete(e.id),this.deliver(r,n,e),!0):!1}resolveSink(){if(this.explicitSink)return this.explicitSink;let e=xe();if(!e)return null;let t=e.onUpdate;return e=>{t({content:[{type:ps,progress:e}]})}}scrubbed(e){return this.scrubLabel?gp(this.scrubLabel,e):e}deliver(e,t,n){n.label!==e.rawLabel&&(e.rawLabel=n.label,e.label=this.scrubbed(n.label));let{label:r}=e;if(typeof r==`string`){let e=_p(r);t(e===n.label?n:{...n,label:e});return}e.tail=e.tail.then(async()=>{let i=await r;e.label=i,t({...n,label:_p(i)})})}};async function gp(e,t){if(!t)return t;try{return await e(t)}catch{return`[label withheld: secret scrub unavailable]`}}function _p(e,t=80){return e.length>t?`${e.slice(0,t-1)}…`:e}function vp(e,t){return t.length?`${e} ${t.join(` `)}`:e}function yp(e){try{let t=new URL(e);return`↓ ${t.host}${t.pathname===`/`?``:t.pathname}`}catch{return`↓ ${e}`}}function bp(e,t=Date.now){let n=new Map,r=e=>n.get(e)?.[0];return{start(r,i){if(!e.hasSink())return;let a={id:e.allocateId(`net`),label:yp(r),startedAt:t()},o=n.get(r);o?o.push(a):n.set(r,[a]),e.emit({id:a.id,label:a.label,fraction:i===void 0?void 0:0,done:0,total:i,unit:`bytes`,phase:`start`})},chunk(n,i,a){let o=r(n);if(!o)return;let s,c;if(a!==void 0&&a>0){s=Math.min(1,i/a);let e=t()-o.startedAt;i>0&&(c=Math.max(0,e/i*(a-i)))}e.emit({id:o.id,label:o.label,fraction:s,etaMs:c,done:i,total:a,unit:`bytes`,phase:`update`})},end(t){let r=n.get(t),i=r?.shift();r&&r.length===0&&n.delete(t),i&&e.emit({id:i.id,label:i.label,fraction:1,etaMs:0,unit:`bytes`,phase:`end`})}}}const xp={timeout:e=>{let t=0;for(;t<e.length&&e[t].startsWith(`-`)&&e[t]!==`--`;)[`-k`,`--kill-after`,`-s`,`--signal`].includes(e[t])&&(t+=1),t+=1;return e[t]===`--`&&(t+=1),t+1},env:e=>{let t=0;for(;t<e.length&&(e[t].startsWith(`-`)||e[t].includes(`=`));)t+=1;return t},nohup:()=>0,nice:e=>{let t=0;for(;t<e.length&&e[t].startsWith(`-`);)t+=1;return t}},Sp=new Set([`xargs`,`watch`,`parallel`,`bash`,`sh`,`eval`,`source`,`.`]);function Cp(e){let t=``;for(let n of e.parts)switch(n.type){case`Literal`:case`SingleQuoted`:case`Escaped`:t+=n.value;break;case`DoubleQuoted`:for(let e of n.parts){if(e.type!==`Literal`&&e.type!==`Escaped`)return null;t+=e.value}break;default:return null}return t}function wp(e,t){switch(e.type){case`CommandSubstitution`:return Fp(e.body,t);case`DoubleQuoted`:{let n=0;for(let r of e.parts){let e=wp(r,t);if(e===null)return null;n+=e}return n}case`ProcessSubstitution`:return null;default:return 0}}function Tp(e,t){let n=0;for(let r of e.parts){let e=wp(r,t);if(e===null)return null;n+=e}return n}function Ep(e,t){let n=0;for(let r of e.assignments){if(!r.value)continue;let e=Tp(r.value,t);if(e===null)return null;n+=e}for(let r of e.args){let e=Tp(r,t);if(e===null)return null;n+=e}if(!e.name)return n;let r=Cp(e.name);if(r===null||Sp.has(r))return null;if(!t.has(r))return n;n+=1;let i=xp[r];if(i){let r=e.args.map(Cp);if(r.some(e=>e===null))return null;let a=r[i(r)];if(a===void 0)return n;if(Sp.has(a))return null;t.has(a)&&(n+=1)}return n}function Dp(e){let t=typeof e.start==`number`?e.start:Number(e.start),n=typeof e.end==`number`?e.end:Number(e.end);if(!Number.isFinite(t)||!Number.isFinite(n)){let t=String(e.start),n=String(e.end);return t.length!==1||n.length!==1?null:Math.abs(n.charCodeAt(0)-t.charCodeAt(0))+1}let r=Math.abs(e.step??1)||1;return Math.floor(Math.abs(n-t)/r)+1}function Op(e){if(e.parts.length!==1||e.parts[0].type!==`CommandSubstitution`)return null;let t=e.parts[0].body;if(t.statements.length!==1)return null;let n=t.statements[0];if(n.pipelines.length!==1||n.pipelines[0].commands.length!==1)return null;let r=n.pipelines[0].commands[0];if(r.type!==`SimpleCommand`||!r.name||Cp(r.name)!==`seq`)return null;let i=r.args.map(e=>{let t=Cp(e);return t===null?NaN:Number(t)});if(i.some(e=>!Number.isFinite(e)))return null;let a=1,o=1,s;if(i.length===1)[s]=i;else if(i.length===2)[a,s]=i;else if(i.length===3)[a,o,s]=i;else return null;if(o===0)return null;let c=Math.floor((s-a)/o)+1;return c>0?c:0}function kp(e){let t=0;for(let n of e){let e=n.type===`Word`?Ap(n.word):Dp(n);if(e===null)return null;t+=e}return t}function Ap(e){let t=Op(e);if(t!==null)return t;let n=1;for(let t of e.parts)switch(t.type){case`Literal`:case`SingleQuoted`:case`Escaped`:break;case`DoubleQuoted`:if(t.parts.some(e=>e.type!==`Literal`&&e.type!==`Escaped`))return null;break;case`BraceExpansion`:{let e=kp(t.items);if(e===null)return null;n*=e;break}default:return null}return n}function jp(e){let t=0;for(let n of e){let e=Ap(n);if(e===null)return null;t+=e}return t}function Mp(e,t){let n=0;for(let r of e){let e=Pp(r,t);if(e===null)return null;n+=e}return n}function Np(e,t){switch(e.type){case`SimpleCommand`:return Ep(e,t);case`For`:{if(!e.words)return null;let n=jp(e.words),r=Mp(e.body,t);return n===null||r===null?null:e.words.filter(e=>Op(e)!==null&&t.has(`seq`)).length+n*r}case`Subshell`:case`Group`:return Mp(e.body,t);case`FunctionDef`:return 0;default:return null}}function Pp(e,t){let n=0;for(let r of e.pipelines)for(let e of r.commands){let r=Np(e,t);if(r===null)return null;n+=r}return n}function Fp(e,t){return Mp(e.statements,t)}function Ip(e,t){let n=Fp(e,t);return{totalSteps:n!==null&&n>0?n:null}}function Lp(e){return e.split(`
|
|
159
159
|
`).map(e=>e.trim()).find(e=>e.length>0&&!e.startsWith(`#`))||`bash`}var Rp=class{plan;emitter;label;now;id;steps=0;startedAt;finished=!1;children=new Map;constructor(e,t,n,r=Date.now){this.plan=e,this.emitter=t,this.label=n,this.now=r,this.id=t.allocateId(`script`),this.startedAt=r(),this.emitter.setAggregator(this),this.publish(`start`)}stepDone(){this.finished||(this.steps+=1,this.publish(`update`))}onChild(e){if(!this.finished){if(e.phase===`end`){this.children.delete(e.id);return}this.children.set(e.id,{fraction:e.fraction,label:e.label}),(e.fraction!==void 0||e.phase===`start`)&&this.publish(`update`)}}end(){this.finished||(this.finished=!0,this.emitter.setAggregator(null),this.emitter.emit({id:this.id,label:this.label,fraction:1,etaMs:0,done:this.steps,total:this.plan.totalSteps??void 0,unit:`iterations`,phase:`end`}))}fraction(){let e=[...this.children.values()].at(-1)?.fraction,t=this.plan.totalSteps;if(t===null)return e;let n=e??0;return Math.min(1,(this.steps+n)/t)}publish(e){let t=this.fraction(),n=this.now()-this.startedAt,r=t!==void 0&&t>0&&t<1?Math.max(0,n/t*(1-t)):t===1?0:void 0,i=[...this.children.values()].at(-1);this.emitter.emit({id:this.id,label:i?`${this.label} · ${i.label}`:this.label,fraction:t,etaMs:r,done:this.steps,total:this.plan.totalSteps??void 0,unit:`iterations`,phase:e})}};const zp=globalThis.setTimeout.bind(globalThis);function Bp(e){let t=e/1e3;return`sleep ${Number.isInteger(t)?t:t.toFixed(1)}`}function Vp(e,t={}){let n=t.now??Date.now,r=t.setTimeout??zp,i=t.isAborted??(()=>!1),a=t.label??Bp,o=e=>new Promise(t=>r(t,e));return async t=>{let r=Math.max(0,t),s=e.allocateId(`sleep`),c=a(r),l=n();e.emit({id:s,label:c,fraction:0,etaMs:r,done:0,total:r,unit:`ms`,phase:`start`});try{let t=0;for(;t<r;){if(i())return;if(await o(Math.min(250,r-t)),t=n()-l,t<r){let n=Math.min(1,t/r);e.emit({id:s,label:c,fraction:n,etaMs:Math.max(0,r-t),done:Math.min(t,r),total:r,unit:`ms`,phase:`update`})}}}finally{e.emit({id:s,label:c,fraction:1,etaMs:0,done:r,total:r,unit:`ms`,phase:`end`})}}}const Hp=globalThis.setTimeout.bind(globalThis);function Up(e){let t=/^(\d+(?:\.\d+)?|\.\d+)([smhd]?)$/.exec(e.trim());return t?Number(t[1])*({"":1e3,s:1e3,m:6e4,h:36e5,d:864e5}[t[2]]??1e3):null}function Wp(e){let t=0;for(;t<e.length;){let n=e[t];if(n===`--`)return t+1<e.length?t+1:-1;if(!n.startsWith(`-`))return t;[`-k`,`--kill-after`,`-s`,`--signal`].includes(n)&&(t+=1),t+=1}return-1}function Gp(e,t,n={}){let r=n.now??Date.now,i=n.setTimeout??Hp;return{...e,async execute(n,a){let o=Wp(n),s=o>=0?Up(n[o]):null;if(!t.hasSink()||s===null||s<=0)return e.execute(n,a);let c=t.allocateId(`timeout`),l=vp(e.name,n),u=r(),d=!0,f=()=>{if(!d)return;let e=r()-u,n=Math.min(1,e/s);t.emit({id:c,label:l,fraction:n,etaMs:Math.max(0,s-e),done:Math.min(e,s),total:s,unit:`ms`,phase:`update`}),e<s&&i(f,250)};t.emit({id:c,label:l,fraction:0,etaMs:s,done:0,total:s,unit:`ms`,phase:`start`}),i(f,250);try{return await e.execute(n,a)}finally{d=!1,t.emit({id:c,label:l,fraction:1,etaMs:0,done:s,total:s,unit:`ms`,phase:`end`})}}}}const Kp=new Set(`sleep,echo,printf,true,false,test,[,cd,pwd,export,unset,set,shift,local,return,break,continue,exit,:,read,let,declare,typeset,readonly,eval,exec,source,.,alias,unalias,type,command,builtin,wait,trap,basename,dirname,seq,expr`.split(`,`));function qp(e,t,n={}){if((n.skip??Kp).has(e.name))return e;let r=e.name;return{...e,async execute(n,i){if(!t.hasSink())return e.execute(n,i);let a=t.allocateId(`cmd`),o=vp(r,n);t.emit({id:a,label:o,phase:`start`});try{return await e.execute(n,i)}finally{t.emit({id:a,label:o,phase:`end`})}}}}const Jp=new Map([[`jsh`,`node`]]);function Yp(e,t){return`${Jp.get(e)??e} ${t.join(` `)}`.trim()}function Xp(e){return ct(`sudo`,e)}async function Zp(e,t){let n=e.trim();if(!n||rt(tt(t.policy,n),t.defaultDisposition??`allow`)!==`require-approval`)return{allowed:!0};let r=await t.broker.requestApproval({kind:`command`,detail:n,...t.reason?{reason:t.reason}:{}});if(r.decision===`deny`)return{allowed:!1,message:Xp(r)};if(r.decision===`always`){let e=r.pattern?.trim()||n;await t.persistGrant(e)}return{allowed:!0}}function Qp(e){let t=e.replace(/\s+/g,` `).trim();if(t.length<=300)return t;let n=Array.from(t);return n.length<=300?t:`${n.slice(0,299).join(``).trimEnd()}…`}const $p=`__SLICC_SUDO_REASON`,em=/^#!/;function tm(e){let t=[];for(let n of e.split(`
|
|
160
160
|
`)){let e=n.trim();if(e.length===0){if(t.length>0)break;continue}if(!e.startsWith(`#`))break;if(em.test(e))continue;let r=e.replace(/^#+/,``).trim();r&&t.push(r)}return Qp(t.join(` `))}const nm={directory:{title:`Mount local directory`,approve:`Select directory`},"usb-device":{title:`Connect USB device`,approve:`Select USB device`},"serial-port":{title:`Connect serial port`,approve:`Select serial port`},"hid-device":{title:`Connect HID device`,approve:`Select HID device`}};function rm(e,t=[],n){let r=nm[e],i=t.length?` data-action-data='${JSON.stringify({filters:t}).replace(/'/g,`'`)}'`:``,a=e===`directory`&&n?`<div class="sprinkle-action-card__meta">Target: ${vt(n)}</div>`:``;return`
|
|
161
161
|
<div class="sprinkle-action-card">
|
|
@@ -279,7 +279,7 @@ Examples:
|
|
|
279
279
|
skill list
|
|
280
280
|
skill info bluebubbles
|
|
281
281
|
skill read bluebubbles
|
|
282
|
-
`,stderr:``,exitCode:0};let r=t[0],i=await import(`./kernel-worker-
|
|
282
|
+
`,stderr:``,exitCode:0};let r=t[0],i=await import(`./kernel-worker-B_U-F-B8.js`).then(e=>e.n);try{switch(r){case`list`:return $m(t,e,i,n.env.get(`PATH`));case`info`:{let n=t[1];if(!n)return{stdout:``,stderr:`skill: info requires a skill name
|
|
283
283
|
`,exitCode:1};let r=await i.getSkillInfo(e,n);return r?{stdout:Zm(r),stderr:``,exitCode:0}:{stdout:``,stderr:`skill: "${n}" not found\n`,exitCode:1}}case`read`:{let n=t[1];if(!n)return{stdout:``,stderr:`skill: read requires a skill name
|
|
284
284
|
`,exitCode:1};let r=await i.readSkillInstructions(e,n);return r===null?{stdout:``,stderr:`skill: no SKILL.md found for "${n}"\n`,exitCode:1}:{stdout:r+`
|
|
285
285
|
`,stderr:``,exitCode:0}}default:return{stdout:``,stderr:`skill: unknown command "${r}"\n`,exitCode:1}}}catch(e){return{stdout:``,stderr:`skill: ${e instanceof Error?e.message:String(e)}\n`,exitCode:1}}})}const th=[{names:[`--branch`,`-b`],validate:e=>!e.startsWith(`-`)&&i(e),error:`upskill: --branch must be a git ref of [A-Za-z0-9._/-]+ with no "..", leading "-"/"/", trailing "/" or ".lock", or shell metacharacters`,apply:(e,t)=>{e.branch=t}},{names:[`--from`],validate:e=>Di(e)!==null,error:`upskill: --from requires a GitHub source (owner/repo, owner/repo@branch, or a github.com URL)`,apply:(e,t)=>{e.from=t}},{names:[`--path`,`-p`],validate:e=>o(e),error:`upskill: --path must be a repo-relative sub-path of [A-Za-z0-9._/-]+ with no "..", leading "-"/"/", or shell metacharacters`,apply:(e,t)=>{e.path=t}}];function nh(e){let t={skills:[],dryRun:!1,json:!1};for(let n=0;n<e.length;n++){let r=e[n],i=th.find(e=>e.names.includes(r));if(i){let r=e[++n];if(!r||!i.validate(r))return t.error=i.error,t;i.apply(t,r)}else if(r===`--dry-run`||r===`-n`)t.dryRun=!0;else if(r===`--json`)t.json=!0;else if(r.startsWith(`-`))return t.error=`upskill: unknown option "${r}" for update`,t;else t.skills.push(r)}return t}function rh(e,t){return!e||!t||e.byteLength!==t.byteLength?!1:e.every((e,n)=>e===t[n])}async function ih(e,t){try{let n=await e.readFile(t,{encoding:`binary`});return n instanceof Uint8Array?n:new TextEncoder().encode(String(n))}catch{return}}async function ah(e,t,n,r){let i=await ih(e,t);return pi(n)?i?{status:`kept-local`,write:!1}:{status:`added`,write:!0}:i?rh(i,r)?{status:`unchanged`,write:!1}:{status:`updated`,write:!0}:{status:`added`,write:!0}}async function oh(e,t,n,r){let i={changes:[],writes:[],removals:[]};for(let[r,a]of n){let n=`${t}/${r}`,{status:o,write:s}=await ah(e,n,r,a);i.changes.push({path:r,status:o}),s&&i.writes.push({path:n,content:a})}let a=new Set(r.files??[]);for(let r of await mi(e,t)){if(n.has(r))continue;let e=a.has(r);i.changes.push({path:r,status:e?`removed`:`kept-local`}),e&&i.removals.push(`${t}/${r}`)}return i.changes.sort((e,t)=>e.path.localeCompare(t.path)),i}async function sh(e,t,n,r,i,a){let o={skill:n,source:`${r.kind}:${r.source}`,ref:i??r.ref,from:r.sha,outcome:`current`,changes:[]},[s,c]=r.source.split(`/`);if(!s||!c)return{...o,outcome:`error`,error:`unusable source "${r.source}"`};let l=(r.path??``).replace(/^\/|\/$/g,``),u=await yi(t),d=await xi(s,c,o.ref,u,!0,l||void 0);if(d&&r.sha===d&&await ch(e,n,r))return{...o,to:d,outcome:`current`,changes:[]};let f=await lh(s,c,l,n,o.ref,t,u);if(`error`in f)return{...o,outcome:`error`,error:f.error};let p=f.files,m=f.path;if(p.size===0)return{...o,outcome:`error`,error:`no files at ${s}/${c}${m?`/${m}`:``} — the skill may have moved or been removed upstream`};let{changes:h,writes:g,removals:_}=await oh(e,`${oi}/${n}`,p,r),v=g.length>0||_.length>0;if(a)return{...o,outcome:v?`updated`:`current`,changes:h};let ee=d??r.sha;return v&&await mh(e,{changes:h,writes:g,removals:_}),await Si(e,n,{...r,ref:o.ref,path:m,sha:ee,files:[...p.keys()].sort()}),{...o,to:ee,outcome:v?`updated`:`current`,changes:h}}async function ch(e,t,n){if(!n.files?.length)return!1;for(let r of n.files)if(!await e.exists(`/workspace/skills/${t}/${r}`))return!1;return!0}async function lh(e,t,n,r,i,a,o){let s=await gi(e,t,a,i??`main`);if(s.status===`ok`){let i=di(s.files),a=n||uh(i,r);return a===null?{error:`could not find "${r}/SKILL.md" in ${e}/${t} — pass --path <dir> to say where the skill lives`}:{files:ph(i,a),path:a}}try{return{files:fh(dh(await hi(e,t,n,i,o))),path:n}}catch(e){let t=e instanceof Error?e.message:String(e);return{error:`${s.message}; Contents API fallback failed: ${t}`}}}function uh(e,t){let n=[];for(let r of Object.keys(e))r===`SKILL.md`?n.push(``):(r.endsWith(`/${t}/SKILL.md`)||r===`${t}/SKILL.md`)&&n.push(r.slice(0,-9));return n.length===0?null:(n.sort((e,t)=>e.split(`/`).length-t.split(`/`).length||e.localeCompare(t)),n[0])}function dh(e){return new Map([...e].filter(([e])=>fi(e)))}function fh(e){return new Map([...e].sort(([e],[t])=>e.localeCompare(t)))}function ph(e,t){let n=t?`${t}/`:``,r=new Map;for(let[t,i]of Object.entries(e)){if(!t.startsWith(n)||t.endsWith(`/`))continue;let e=t.slice(n.length);fi(e)&&r.set(e,i)}return fh(r)}async function mh(e,t){for(let n of t.writes){let t=n.path.slice(0,n.path.lastIndexOf(`/`));await e.mkdir(t,{recursive:!0}),await e.writeFile(n.path,n.content)}for(let n of t.removals)await e.rm(n).catch(()=>{})}async function hh(e,t,n,r,i){let a={skill:n,source:`${r.kind}:${r.source}`,outcome:`current`,changes:[]},[o,s]=r.source.split(`/`);if(!o||!s)return{...a,outcome:`error`,error:`unusable source "${r.source}"`};let c=await Km(o,s,t);if(!c.ok)return{...a,outcome:`error`,error:c.error};let l=`${oi}/${n}/SKILL.md`,u=await ih(e,l),d=new TextEncoder().encode(c.content),f=u!==void 0&&Wm(new TextDecoder().decode(u))===Wm(c.content);if(rh(u,d)||f)return{...a,changes:[{path:`SKILL.md`,status:`unchanged`}]};let p=u?`updated`:`added`;return i||(await e.mkdir(`${oi}/${n}`,{recursive:!0}),await e.writeFile(l,d),await Si(e,n,{...r,files:[`SKILL.md`]})),{...a,outcome:`updated`,changes:[{path:`SKILL.md`,status:p}]}}function gh(e,t){if(e.outcome===`error`)return` ${e.skill}: failed — ${e.error}\n`;let n=new Map;for(let t of e.changes)n.set(t.status,(n.get(t.status)??0)+1);let r=e.to&&e.to!==e.from?` → ${e.to.slice(0,7)}`:``;if(e.outcome===`current`)return` ${e.skill}: already current (${e.source}${r})\n`;let i=t?`would update`:`updated`,a=` ${e.skill}: ${i} from ${e.source}${r}\n`;for(let t of e.changes)t.status!==`unchanged`&&(a+=` ${t.status.padEnd(10)} ${t.path}\n`);let o=n.get(`kept-local`)??0;return o>0&&(a+=` (${o} kept-local — dotfiles and local additions are never touched)\n`),a}function _h(e,t,n,r){let i=Di(t);return i?{version:1,kind:`github`,source:`${i.owner}/${i.repo}`,skill:e,ref:r??i.branch,path:n??i.path,installed:new Date().toISOString()}:null}async function vh(e,t,n){if(t.length===0){let t=await bi(e);return{targets:t.provenanced,missing:[],skipped:t.unattributed}}let r=[],i=[];for(let a of t){let t=await Ci(e,a);if(t){r.push({name:a,provenance:t});continue}if(!await e.exists(`/workspace/skills/${a}`)){i.push({name:a,reason:`not-installed`});continue}let o=n.from?_h(a,n.from,n.path,n.branch):null;o?r.push({name:a,provenance:o}):i.push({name:a,reason:`no-provenance`})}return{targets:r,missing:i,skipped:[]}}function yh(e){return e.reason===`not-installed`?`upskill: no skill named "${e.name}" is installed — check \`upskill list\`
|
|
@@ -290,7 +290,7 @@ Examples:
|
|
|
290
290
|
`}function Sh(e,t,n,r,i){let a=t?`Skill update (dry run — nothing written):
|
|
291
291
|
`:`Skill update:
|
|
292
292
|
`;for(let n of e)a+=gh(n,t);if(i.length>0&&(a+=xh(i)),!n&&r&&e.length>0){let n=i.length>0?`all ${bh(e.length,`skill`)} with provenance ${e.length===1?`is`:`are`}`:`all skills are`;a+=t?`\n${n.charAt(0).toUpperCase()}${n.slice(1)} current.\n`:`\nNothing to update — ${n} current.\n`}return a}async function Ch(e,t,n){let{targets:r,missing:i,skipped:a}=await vh(e,n.skills,{skills:n.skills,dryRun:n.dryRun,json:!1,branch:n.branch,from:n.from,path:n.path}),o=[];for(let i of r)o.push(i.provenance.kind===`browse.sh`?await hh(e,t,i.name,i.provenance,n.dryRun):await sh(e,t,i.name,i.provenance,n.branch,n.dryRun));return{results:o,skipped:a,missing:i}}async function wh(e,t,n){let r=nh(e);if(r.error)return{stdout:``,stderr:`${r.error}\n`,exitCode:1};let{results:i,missing:a,skipped:o}=await Ch(t,n,r);if(i.length===0)return a.length===0&&o.length>0?{stdout:r.json?`${JSON.stringify({ok:!0,dryRun:r.dryRun,results:[],skipped:o})}\n`:Sh([],r.dryRun,!1,!0,o),stderr:``,exitCode:0}:{stdout:``,stderr:a.length?a.map(yh).join(``):"upskill: no skill has install provenance yet — reinstall a skill, or run `upskill update <skill> --from <owner>/<repo>`, to record its source\n",exitCode:1};let s=i.filter(e=>e.outcome===`error`),c=i.some(e=>e.outcome===`updated`);c&&!r.dryRun&&await Ei();let l=a.map(yh).join(``)+s.map(e=>`upskill: ${e.skill}: ${e.error}\n`).join(``),u=s.length===0&&a.length===0;return r.json?{stdout:`${JSON.stringify({ok:u,dryRun:r.dryRun,results:i,skipped:o})}\n`,stderr:l,exitCode:+!u}:{stdout:Sh(i,r.dryRun,c,u,o),stderr:l,exitCode:+!u}}function Th(e){let t={outdated:!1,json:!1};for(let n of e)if(n===`--outdated`)t.outdated=!0;else if(n===`--json`)t.json=!0;else if(n.startsWith(`-`))return t.error=`upskill: unknown option "${n}" for list`,t;else return t.error=`upskill: unexpected argument "${n}" for list`,t;return t}function Eh(e){return e.to&&e.from&&e.to!==e.from?` ${e.from.slice(0,7)} → ${e.to.slice(0,7)}`:e.to?` ${e.to.slice(0,7)}`:``}function Dh(e,t){let n=e.filter(e=>e.outcome===`updated`),r=[];if(n.length===0)r.push(`No outdated skills.`);else{r.push(`Outdated skills:`,``);for(let e of n)r.push(` ${e.skill} ${e.source}${Eh(e)}`)}if(t.length>0){let e=t.length===1?`skill`:`skills`;r.push(``,`Skipped ${t.length} ${e} with no install provenance — not checked.`)}let i=e.filter(e=>e.outcome===`error`);if(i.length>0){let e=i.length===1?`skill`:`skills`;r.push(``,`Could not check ${i.length} ${e}:`);for(let e of i)r.push(` ${e.skill}: failed — ${e.error}`)}return`${r.join(`
|
|
293
|
-
`)}\n`}async function Oh(e,t,n){let r=await(await import(`./kernel-worker-
|
|
293
|
+
`)}\n`}async function Oh(e,t,n){let r=await(await import(`./kernel-worker-B_U-F-B8.js`).then(e=>e.n)).discoverSkills(e),{collisions:i}=await Wn(e,Vn(n));return t?{stdout:`${JSON.stringify({ok:!0,skills:r,commandCollisions:i})}\n`,stderr:``,exitCode:0}:r.length===0?{stdout:`No discoverable local skills found.\n\n${Jm()}`,stderr:``,exitCode:0}:{...Gn(`upskill`,Xm(r,`Discoverable local skills`),i,{builtinNames:new Set(Xe())}),exitCode:0}}async function kh(e,t,n){let{results:r,skipped:i}=await Ch(e,t,{skills:[],dryRun:!0}),a=r.filter(e=>e.outcome===`updated`),o=r.filter(e=>e.outcome===`error`),s=o.length===0,c=o.map(e=>`upskill: ${e.skill}: ${e.error}\n`).join(``);return n?{stdout:`${JSON.stringify({ok:s,results:[...a,...o],skipped:i})}\n`,stderr:c,exitCode:+!s}:{stdout:Dh(r,i),stderr:c,exitCode:+!s}}async function Ah(e,t,n,r){let i=Th(e);return i.error?{stdout:``,stderr:`${i.error}\n`,exitCode:1}:i.outdated?kh(t,n,i.json):Oh(t,i.json,r)}async function jh(e,t){let n=`${si}/experimental/search?q=${encodeURIComponent(e)}&contentType=skills&page%5Bsize%5D=20`,r;try{r=await t(n,{headers:{Accept:`application/json`}})}catch(e){throw Error(vi(e,n))}if(r.status!==200)throw Error(`Tessl returned HTTP ${r.status}`);let i=ue(r.body);if(!i.data)return[];let a=new Map;for(let e of i.data){if(e.type!==`skill`)continue;let t=e.attributes,n=Ti(t.sourceUrl),r=n?`${n.owner}/${n.repo}`:void 0,i=t.scores.aggregate==null?null:Math.round(t.scores.aggregate*100),o=t.sourceUrl||e.id,s=a.get(o);if(s&&s.qualityScore!=null&&i!=null&&s.qualityScore>=i)continue;let c=t.path.replace(/\/SKILL\.md$/i,``),l=c.split(`/`).pop()||t.name,u=n?`upskill ${n.owner}/${n.repo} --path ${c.split(`/`).slice(0,-1).join(`/`)||`.`} --skill ${l}`:`upskill tessl:${t.name}`;a.set(o,{name:t.name,displayName:t.name,summary:t.description||``,source:`tessl`,qualityScore:i,installHint:u,featured:t.featured,sourceRepo:r})}return Array.from(a.values())}async function Mh(e,t){let n=`${si}/experimental/search?q=${encodeURIComponent(e)}&contentType=skills&page%5Bsize%5D=5`,r;try{r=await t(n,{headers:{Accept:`application/json`}})}catch(e){return{error:`Tessl search failed: ${vi(e,n)}`}}if(r.status!==200)return{error:`Tessl search failed (HTTP ${r.status})`};let i=ue(r.body).data?.find(t=>t.type===`skill`&&t.attributes.name===e);if(!i)return{error:`skill "${e}" not found on Tessl registry`};let a=Ti(i.attributes.sourceUrl);if(!a)return{error:`skill "${e}" has no GitHub source URL`};let o=i.attributes.path.replace(/\/SKILL\.md$/i,``);return{owner:a.owner,repo:a.repo,skillPath:o,skillName:e}}const Nh=[{label:`Tessl`,host:new URL(si).host,fetch:jh},{label:`browse.sh`,host:new URL(ui).host,fetch:Rm}];function Ph(e){let t=[],n=e.reduce((e,t)=>Math.max(e,t.length),0);for(let r=0;r<n;r++)for(let n of e)r<n.length&&t.push(n[r]);return t}async function Fh(e,t,n=1){let r=await Promise.allSettled(Nh.map(n=>n.fetch(e,t))),i=r.map(e=>e.status===`fulfilled`?e.value:[]),a=r.every(e=>e.status===`rejected`),o=Ph(i),s=``;for(let e=0;e<r.length;e++){let t=r[e];if(t.status===`rejected`){let n=Nh[e],r=t.reason instanceof Error?t.reason.message:String(t.reason);s+=`warning: ${n.label} registry unavailable (${n.host}): ${r}\n`}}if(o.length===0){let t=a?`${s}upskill: registries failed to respond\n`:s;return{stdout:`No skills found for "${e}"\n\nTry a different search term or browse the registries at https://tessl.io/registry or https://browse.sh\n`,stderr:t,exitCode:+!!a}}let c=o.length,l=Math.ceil(c/10),u=Math.max(1,Math.min(n,l)),d=(u-1)*10,f=o.slice(d,d+10),p=`Search results for "${e}" (page ${u}/${l}, ${c} total):\n\n`;for(let e of f){let t=e.qualityScore==null?` `:String(e.qualityScore).padStart(3),n=`[${e.source}]`,r=e.sourceRepo?` ${e.sourceRepo}`:``;p+=` ${e.name.padEnd(30)} ${t} ${n.padEnd(10)}${r}\n`,e.summary&&(p+=` ${e.summary}\n`),p+=`
|
|
294
294
|
`}return u<l&&(p+=`Showing ${d+1}-${d+f.length} of ${c}. `,p+=`Next page: upskill search ${e} --page ${u+1}\n\n`),p+=`To install:
|
|
295
295
|
`,p+=` From Tessl: upskill <owner/repo> --skill <name>
|
|
296
296
|
`,p+=` From browse.sh: upskill browse:<hostname>/<task>
|
|
@@ -313,7 +313,7 @@ Examples:
|
|
|
313
313
|
`,{stdout:s,stderr:``,exitCode:0}}function Hh(e){return!e||e.startsWith(`-`)?{stdout:``,stderr:`upskill: --branch requires a value
|
|
314
314
|
`,exitCode:1}:i(e)?null:{stdout:``,stderr:`upskill: --branch must be a git ref of [A-Za-z0-9._/-]+ with no "..", leading "-"/"/", trailing "/" or ".lock", or shell metacharacters
|
|
315
315
|
`,exitCode:1}}function Uh(e){let t={selectedSkills:[],listOnly:!1,installAll:!1,force:!1,sourceRef:``},n=0;for(;n<e.length;){let r=e[n];if(r===`--skill`)t.selectedSkills.push(e[++n]);else if(r===`--path`||r===`-p`){let r=e[++n];if(typeof r!=`string`||!o(r))return t.earlyReturn={stdout:``,stderr:`upskill: --path must be a repo-relative sub-path of [A-Za-z0-9._/-]+ with no "..", leading "-"/"/", or shell metacharacters
|
|
316
|
-
`,exitCode:1},t;t.subPath=r}else if(r===`--list`)t.listOnly=!0;else if(r===`--all`)t.installAll=!0;else if(r===`--force`)t.force=!0;else if(r===`--branch`||r===`-b`){let r=Hh(e[n+1]);if(r)return t.earlyReturn=r,t;t.branch=e[++n]}else r.startsWith(`-`)||(t.sourceRef=r);n++}return t}async function Wh(e,t,n){if(!t)return{stdout:``,stderr:`upskill: ${e} requires a skill name\n`,exitCode:1};let r=await import(`./kernel-worker-
|
|
316
|
+
`,exitCode:1},t;t.subPath=r}else if(r===`--list`)t.listOnly=!0;else if(r===`--all`)t.installAll=!0;else if(r===`--force`)t.force=!0;else if(r===`--branch`||r===`-b`){let r=Hh(e[n+1]);if(r)return t.earlyReturn=r,t;t.branch=e[++n]}else r.startsWith(`-`)||(t.sourceRef=r);n++}return t}async function Wh(e,t,n){if(!t)return{stdout:``,stderr:`upskill: ${e} requires a skill name\n`,exitCode:1};let r=await import(`./kernel-worker-B_U-F-B8.js`).then(e=>e.n);if(e===`info`){let e=await r.getSkillInfo(n,t);if(!e)return{stdout:``,stderr:`upskill: skill "${t}" not found\n`,exitCode:1};let i=await Ci(n,t),a=i?wi(i):"Installed from: (no provenance recorded — reinstall to enable `upskill update`)\n";return{stdout:Zm(e)+a,stderr:``,exitCode:0}}let i=await r.readSkillInstructions(n,t);return i===null?{stdout:``,stderr:`upskill: no SKILL.md found for "${t}"\n`,exitCode:1}:{stdout:i+`
|
|
317
317
|
`,stderr:``,exitCode:0}}async function Gh(e,t,n,r,i,a,o,s){let c=``,l=``,u=0,d=e.length;for(let f=0;f<e.length;f++){let p=e[f],m=await ki(p.path,p.name,r,i,a,s?{...s,path:p.path}:void 0),h=f+1,g=((Date.now()-o)/1e3).toFixed(1),_=(Date.now()-o)/h,v=h<d?` (~${Math.round((d-h)*_/1e3)}s remaining)`:``;m.ok?(c+=`[${h}/${d}] Installed "${p.name}" from ${t}/${n} (${g}s)${v}\n`,u++):(c+=`[${h}/${d}] Failed "${p.name}": ${m.error}${v}\n`,l+=`upskill: ${m.error}\n`)}return{output:c,errors:l,successCount:u}}async function Kh(e,t,n,r,i,a,o,s){let c=``,l=``,u=0,d=e.length;for(let f=0;f<e.length;f++){let p=e[f],m=await Oi(t,n,p.path,p.name,i,r,a,void 0,o),h=f+1,g=((Date.now()-s)/1e3).toFixed(1),_=(Date.now()-s)/h,v=h<d?` (~${Math.round((d-h)*_/1e3)}s remaining)`:``;m.exitCode===0?(c+=`[${h}/${d}] Installed "${p.name}" from ${t}/${n} (${g}s)${v}\n`,u++):(c+=`[${h}/${d}] Failed "${p.name}": ${m.stderr.trim()}${v}\n`,l+=m.stderr)}return{output:c,errors:l,successCount:u}}async function qh(e,t,n,r,i,a,o,s){let c=``,l=``,u=0;for(let d of e){let e=await Oi(t,n,d.path,d.name,i,r,a,o,s);e.exitCode===0?(c+=e.stdout,u++):l+=e.stderr}return{output:c,errors:l,successCount:u}}function Jh(e,t,n){let r=`Available skills in ${t}/${n}:\n\n`;for(let t of e)r+=` ${t.name.padEnd(30)} ${t.path}\n`;return r+=`\nFound ${e.length} skill(s)\n`,r}async function Yh(e,t,n,r){let{owner:i,repo:a}=e,o=t.branch??e.branch,s=t.subPath??e.path,c=await yi(r),l=await Ai(i,a,c,s,r,o);if(l.error)return{stdout:``,stderr:`upskill: failed to list skills: ${l.error}\n`,exitCode:1};if(l.skills.length===0)return{stdout:`No skills found in ${i}/${a}${s?`/`+s:``}\n`,stderr:``,exitCode:0};if(t.listOnly)return{stdout:Jh(l.skills,i,a)+`\nTo install: upskill ${t.sourceRef} --skill <name>\nTo install all: upskill ${t.sourceRef} --all\n`,stderr:``,exitCode:0};let u=l.skills;if(t.selectedSkills.length>0){u=l.skills.filter(e=>t.selectedSkills.includes(e.name));for(let e of t.selectedSkills)if(!l.skills.find(t=>t.name===e))return{stdout:``,stderr:`upskill: skill "${e}" not found in ${i}/${a}\n`,exitCode:1}}else if(!t.installAll)return{stdout:Jh(l.skills,i,a)+`\nTo install specific skills: upskill ${t.sourceRef} --skill <name>\nTo install all: upskill ${t.sourceRef} --all\n`,stderr:``,exitCode:0};let d=u.length,f=Date.now(),p=``,m=``,h=0;if(d>1){let e=await gi(i,a,r,o);if(e.status===`ok`){let r=await xi(i,a,o,c,!0,s),l=await Gh(u,i,a,di(e.files),n,t.force,f,{kind:`github`,source:`${i}/${a}`,ref:o,sha:r});({output:p,errors:m,successCount:h}=l)}else{let e=await Kh(u,i,a,c,n,t.force,o,f);({output:p,errors:m,successCount:h}=e)}}else({output:p,errors:m,successCount:h}=await qh(u,i,a,c,n,t.force,r,o));let g=((Date.now()-f)/1e3).toFixed(1);return h>0&&(p+=`\nInstalled ${h} skill(s)${d>1?` in ${g}s`:``}\n`,await Ei()),{stdout:p,stderr:m,exitCode:+!!m}}async function Xh(e,t,n,r,i){switch(e[0]){case`tabs`:return Bh(t,n,r,e.includes(`--json`));case`recommendations`:return Vh(t,n,e.includes(`--install`));case`update`:case`upgrade`:return wh(e.slice(1),t,n);case`list`:return Ah(e.slice(1),t,n,i);case`info`:case`read`:return Wh(e[0],e[1],t);case`search`:return Qh(e,n);default:return null}}function Zh(e,t,n){return S(`upskill`,async(r,i)=>{if(r.length===0||r.includes(`--help`)||r.includes(`-h`))return Qm();let a=await Xh(r,e,t,n,i.env.get(`PATH`));if(a)return a;let o=Uh(r);if(o.earlyReturn)return o.earlyReturn;if(!o.sourceRef)return Qm();if(o.sourceRef.startsWith(`tessl:`))return $h(o.sourceRef,o.force,e,t);let s=Vm(o.sourceRef);if(s)return qm(s.hostname,s.task,e,t,o.force);let c=Di(o.sourceRef);return c?Yh(c,o,e,t):{stdout:``,stderr:`upskill: unrecognized source "${o.sourceRef}"\n\nExpected: owner/repo, tessl:<name>, or browse:<hostname>/<task>\n`,exitCode:1}})}async function Qh(e,t){let n=[...e.slice(1)],r=n.indexOf(`--page`),i=1;r>=0&&(i=parseInt(n[r+1],10)||1,n.splice(r,2));let a=n.join(` `);return a?Fh(a,t,i):Qm()}async function $h(e,t,n,r){let i=e.slice(6);if(!i)return{stdout:``,stderr:`upskill: tessl: requires a skill name
|
|
318
318
|
`,exitCode:1};let a=await Mh(i,r);if(`error`in a)return{stdout:``,stderr:`upskill: ${a.error}\n`,exitCode:1};let o=await yi(r);return Oi(a.owner,a.repo,a.skillPath,a.skillName,n,o,t,r)}function eg(){return{stdout:`usage: afplay [-v volume] [-r rate] <file>
|
|
319
319
|
|
|
@@ -627,7 +627,7 @@ Usage: cherry-emit <name> [--detail <json>] [--runtime <id>]
|
|
|
627
627
|
-o Force paste mode (write to stdout)
|
|
628
628
|
(default) Auto-detect: stdin present = copy, no stdin = paste
|
|
629
629
|
Example: echo hello | ${e}\n Example: ${e} -o > file.txt\n`,stderr:``,exitCode:0}}async function rv(e,t){let n=!!globalThis.navigator?.clipboard,r=n?null:y();if(!n&&!r)return{stdout:``,stderr:`${t}: clipboard API is unavailable\n`,exitCode:1};try{return n?await navigator.clipboard.writeText(e):await r.call(`clipboard-write-text`,{text:e}),{stdout:``,stderr:``,exitCode:0}}catch(e){return{stdout:``,stderr:`${t}: failed to write to clipboard: ${$_(e)}\n`,exitCode:1}}}async function iv(e){let t=!!globalThis.navigator?.clipboard,n=t?null:y();if(!t&&!n)return{stdout:``,stderr:`${e}: clipboard API is unavailable\n`,exitCode:1};try{return{stdout:t?await navigator.clipboard.readText():(await n.call(`clipboard-read-text`,void 0)).text,stderr:``,exitCode:0}}catch(t){return{stdout:``,stderr:`${e}: failed to read from clipboard: ${$_(t)}\n`,exitCode:1}}}function av(){return S(`pbcopy`,async(e,t)=>e.includes(`--help`)||e.includes(`-h`)?ev():rv(P(t.stdin),`pbcopy`))}function ov(){return S(`pbpaste`,async e=>e.includes(`--help`)||e.includes(`-h`)?tv():iv(`pbpaste`))}function sv(e){return S(e,async(t,n)=>{if(t.includes(`--help`)||t.includes(`-h`))return nv(e);let r=t.includes(`-i`),i=t.includes(`-o`);if(r&&i)return{stdout:``,stderr:`${e}: cannot use both -i and -o\n`,exitCode:1};if(i)return iv(e);let a=P(n.stdin);return r||a.length>0?rv(a,e):iv(e)})}function cv(){return S(`cmp`,async(e,t)=>{let n=e.some(e=>e===`-s`||e===`--quiet`||e===`--silent`),r=e.filter(e=>![`-s`,`--quiet`,`--silent`].includes(e));if(r.length!==2||r.some(e=>e.startsWith(`-`)&&e!==`-`))return{stdout:``,stderr:`cmp: usage: cmp [-s|--quiet|--silent] FILE1 FILE2
|
|
630
|
-
`,exitCode:2};let i=await lv(t,r[0]);if(`error`in i)return n?{...i.error,stderr:``}:i.error;let a=await lv(t,r[1]);if(`error`in a)return n?{...a.error,stderr:``}:a.error;let o=uv(i.bytes,a.bytes);return o?n?{stdout:``,stderr:``,exitCode:1}:o.eof?{stdout:``,stderr:`cmp: EOF on ${i.bytes.length<a.bytes.length?r[0]:r[1]} after byte ${o.byte-1}, line ${o.line}\n`,exitCode:1}:{stdout:`${r[0]} ${r[1]} differ: byte ${o.byte}, line ${o.line}\n`,stderr:``,exitCode:1}:{stdout:``,stderr:``,exitCode:0}})}async function lv(e,t){if(t===`-`){let t=ei(e.stdin);return{bytes:Uint8Array.from(t,e=>e.charCodeAt(0)&255)}}try{return{bytes:await e.fs.readFileBuffer(e.fs.resolvePath(e.cwd,t))}}catch{return{error:{stdout:``,stderr:`cmp: ${t}: No such file or directory\n`,exitCode:2}}}}function uv(e,t){let n=Math.min(e.length,t.length),r=1;for(let i=0;i<n;i++){if(e[i]!==t[i])return{byte:i+1,line:r,eof:!1};e[i]===10&&r++}return e.length===t.length?null:{byte:n+1,line:r,eof:!0}}function dv(e={}){return S(`computer`,async(t,n)=>{let{runComputer:r}=await import(`./run-
|
|
630
|
+
`,exitCode:2};let i=await lv(t,r[0]);if(`error`in i)return n?{...i.error,stderr:``}:i.error;let a=await lv(t,r[1]);if(`error`in a)return n?{...a.error,stderr:``}:a.error;let o=uv(i.bytes,a.bytes);return o?n?{stdout:``,stderr:``,exitCode:1}:o.eof?{stdout:``,stderr:`cmp: EOF on ${i.bytes.length<a.bytes.length?r[0]:r[1]} after byte ${o.byte-1}, line ${o.line}\n`,exitCode:1}:{stdout:`${r[0]} ${r[1]} differ: byte ${o.byte}, line ${o.line}\n`,stderr:``,exitCode:1}:{stdout:``,stderr:``,exitCode:0}})}async function lv(e,t){if(t===`-`){let t=ei(e.stdin);return{bytes:Uint8Array.from(t,e=>e.charCodeAt(0)&255)}}try{return{bytes:await e.fs.readFileBuffer(e.fs.resolvePath(e.cwd,t))}}catch{return{error:{stdout:``,stderr:`cmp: ${t}: No such file or directory\n`,exitCode:2}}}}function uv(e,t){let n=Math.min(e.length,t.length),r=1;for(let i=0;i<n;i++){if(e[i]!==t[i])return{byte:i+1,line:r,eof:!1};e[i]===10&&r++}return e.length===t.length?null:{byte:n+1,line:r,eof:!0}}function dv(e={}){return S(`computer`,async(t,n)=>{let{runComputer:r}=await import(`./run-BVlVC7jS.js`).then(e=>e.t);return r(t,n,e)})}var fv=`/assets/AdobeClean-Regular-CVsq5gF7.otf`;function pv(e){return{reader:{exists:t=>e.fs.exists(t),isDirectory:async t=>{try{return(await e.fs.stat(t)).isDirectory}catch{return!1}},readFile:t=>e.fs.readFile(t)},readBytes:t=>e.fs.readFileBuffer(t),fromDir:e.cwd}}function mv(e){let t=e.toLowerCase();return t.endsWith(`.jpg`)||t.endsWith(`.jpeg`)?`JPEG`:t.endsWith(`.png`)?`PNG`:t.endsWith(`.gif`)?`GIF`:t.endsWith(`.webp`)?`WEBP`:t.endsWith(`.bmp`)?`BMP`:t.endsWith(`.tiff`)||t.endsWith(`.tif`)?`TIFF`:t.endsWith(`.avif`)?`AVIF`:`PNG`}const hv=`AdobeClean-Regular.otf`,gv=new WeakSet;let _v=null;function vv(){return{stdout:`usage: convert [input ...] [operations...] [output]
|
|
631
631
|
|
|
632
632
|
Operations:
|
|
633
633
|
-resize GEOMETRY resize; supports %, !, ^, >, and < modifiers
|
|
@@ -707,7 +707,7 @@ Examples:
|
|
|
707
707
|
`;for(let n of e)t+=` ${n.id} ${n.name.padEnd(20)} ${n.cron.padEnd(15)}`,n.scoop&&(t+=` -> ${n.scoop}`),n.filter&&(t+=` [filtered]`),t+=` (${n.status})`,n.nextRun&&(t+=` next: ${new Date(n.nextRun).toLocaleString()}`),t+=`
|
|
708
708
|
`;return t}async function uy(e,t){let n=C(e.slice(1),{});if(`error`in n)return sy(n.error);if(!t()){let e=await ey();if(!e)return ry(`list`);let t=await e.listCronTasks();return t.length===0?{stdout:`No active cron tasks
|
|
709
709
|
`,stderr:``,exitCode:0}:{stdout:ly(t),stderr:``,exitCode:0}}let{ok:r,data:i}=await ay(`GET`,``);if(!r)return{stdout:``,stderr:`crontask: failed to list: ${i.error??`unknown error`}\n`,exitCode:1};let a=i;return a.length===0?{stdout:`No active cron tasks
|
|
710
|
-
`,stderr:``,exitCode:0}:{stdout:ly(a),stderr:``,exitCode:0}}async function dy(e,t){let n=e[0],r=C(e.slice(1),{});if(`error`in r)return sy(r.error);let i=r.positionals[0];if(!i)return{stdout:``,stderr:`crontask: ${n} requires an ID\n`,exitCode:1};if(!t()){let e=await ey();return e?await e.deleteCronTask(i)?{stdout:`Deleted cron task "${i}"\n`,stderr:``,exitCode:0}:{stdout:``,stderr:`crontask: task "${i}" not found\n`,exitCode:1}:ry(`delete`)}let{ok:a,status:o,data:s}=await ay(`DELETE`,`/${i}`);return a?{stdout:`Deleted cron task "${i}"\n`,stderr:``,exitCode:0}:o===404?{stdout:``,stderr:`crontask: task "${i}" not found\n`,exitCode:1}:{stdout:``,stderr:`crontask: failed to delete: ${s.error??`unknown error`}\n`,exitCode:1}}function fy(e={}){let t=e.hasLocalNodeServer??(()=>!1);return S(`crontask`,async(e,n)=>{let r=e[0];if(!r||w(e,{valueFlags:oy}))return iy();try{switch(r){case`create`:return await cy(e,n.env,t);case`list`:return await uy(e,t);case`delete`:case`kill`:return await dy(e,t);default:return{stdout:``,stderr:`crontask: unknown command "${r}"\n`,exitCode:1}}}catch(e){return{stdout:``,stderr:`crontask: ${e instanceof Error?e.message:String(e)}\n`,exitCode:1}}})}function py(e){return S(`curlwright`,async(t,n)=>{let{runCurlwright:r}=await import(`./run-
|
|
710
|
+
`,stderr:``,exitCode:0}:{stdout:ly(a),stderr:``,exitCode:0}}async function dy(e,t){let n=e[0],r=C(e.slice(1),{});if(`error`in r)return sy(r.error);let i=r.positionals[0];if(!i)return{stdout:``,stderr:`crontask: ${n} requires an ID\n`,exitCode:1};if(!t()){let e=await ey();return e?await e.deleteCronTask(i)?{stdout:`Deleted cron task "${i}"\n`,stderr:``,exitCode:0}:{stdout:``,stderr:`crontask: task "${i}" not found\n`,exitCode:1}:ry(`delete`)}let{ok:a,status:o,data:s}=await ay(`DELETE`,`/${i}`);return a?{stdout:`Deleted cron task "${i}"\n`,stderr:``,exitCode:0}:o===404?{stdout:``,stderr:`crontask: task "${i}" not found\n`,exitCode:1}:{stdout:``,stderr:`crontask: failed to delete: ${s.error??`unknown error`}\n`,exitCode:1}}function fy(e={}){let t=e.hasLocalNodeServer??(()=>!1);return S(`crontask`,async(e,n)=>{let r=e[0];if(!r||w(e,{valueFlags:oy}))return iy();try{switch(r){case`create`:return await cy(e,n.env,t);case`list`:return await uy(e,t);case`delete`:case`kill`:return await dy(e,t);default:return{stdout:``,stderr:`crontask: unknown command "${r}"\n`,exitCode:1}}}catch(e){return{stdout:``,stderr:`crontask: ${e instanceof Error?e.message:String(e)}\n`,exitCode:1}}})}function py(e){return S(`curlwright`,async(t,n)=>{let{runCurlwright:r}=await import(`./run-DOQXsmJ-.js`);return r(e,t,n)})}const my=`slicc-fs`;async function hy(){try{let e=globalThis.indexedDB;if(!e)return!1;let t=e.databases;return typeof t!=`function`||(await t.call(e)).some(e=>e.name===my)}catch{return!0}}async function gy(){let e=globalThis.indexedDB;return e?new Promise(t=>{let n;try{n=e.deleteDatabase(my)}catch{t(`error`);return}n.onsuccess=()=>t(`deleted`),n.onerror=()=>t(`error`),n.onblocked=()=>t(`blocked`)}):`error`}async function _y(){if(!await hy())return{kind:`absent`,message:`legacy slicc-fs IDB not present — nothing to clean`};let e=await gy();return e===`deleted`?{kind:`deleted`,message:`legacy slicc-fs IDB deleted`}:e===`blocked`?{kind:`blocked`,message:`legacy slicc-fs IDB delete blocked by another connection — close other tabs and retry`}:{kind:`error`,message:`legacy slicc-fs IDB delete failed`}}function vy(){return`slicc-fs-cleanup — delete the legacy slicc-fs IndexedDB
|
|
711
711
|
|
|
712
712
|
Usage:
|
|
713
713
|
slicc-fs-cleanup Delete the legacy slicc-fs IDB.
|
|
@@ -753,7 +753,7 @@ Anything else is not implemented in SLICC's ${e} subset; use real uv locally.
|
|
|
753
753
|
`}};let i=ab(r);return i?n.name?{error:ob(r)}:(n.name=i,n.type=`PTR`,{nextIndex:t+1}):{error:{kind:`error`,message:`dig: '${r}' is not a valid IP address for -x\n`}}}function cb(e,t,n){return n.server?{error:{kind:`error`,message:`dig: multiple @server arguments
|
|
754
754
|
`}}:(n.server=e.slice(1).trim(),n.server?{nextIndex:t}:{error:{kind:`error`,message:`dig: empty @server argument
|
|
755
755
|
`}})}function lb(e,t,n){let r=e.trim(),i=r.toUpperCase(),a=n.name?.toUpperCase();if(tb.includes(i)&&!n.type&&n.name)n.type=i;else if(!n.name)n.name=r;else if(a&&tb.includes(a)&&!n.type)n.name=r,n.type=a;else return{error:ob(r)};return{nextIndex:t}}function ub(e,t,n){let r=e[t];return r.startsWith(`+`)?(r===`+short`&&(n.short=!0),{nextIndex:t}):r===`--json`?(n.json=!0,{nextIndex:t}):r===`-x`?sb(e,t,n):r.startsWith(`@`)?cb(r,t,n):r.startsWith(`-`)?{error:{kind:`error`,message:`dig: unknown option: ${r}\n`}}:lb(r,t,n)}function db(e){if(e.short&&e.json)return{kind:`error`,message:`dig: +short and --json are mutually exclusive
|
|
756
|
-
`};if(!e.name)return{kind:`error`,message:`dig: missing domain name\n${eb}\n`};let t=e.server?.toLowerCase(),n=t?nb[t]:void 0,r=e.server&&!n?`dig: note: @${e.server} not supported over DoH; using cloudflare-dns.com\n`:``;return{kind:`query`,name:e.name,type:e.type??`A`,short:e.short,json:e.json,resolverUrl:n??`https://cloudflare-dns.com/dns-query`,fallbackNote:r}}function fb(e){if(e.includes(`-v`)||e.includes(`--version`))return{kind:`version`};let t={short:!1,json:!1};for(let n=0;n<e.length;n+=1){let r=ub(e,n,t);if(`error`in r)return r.error;n=r.nextIndex}return db(t)}const pb={A:1,NS:2,CNAME:5,SOA:6,PTR:12,MX:15,TXT:16,AAAA:28,SRV:33,CAA:257},mb=new Set(`#/:<>?@[\\]^|`);function hb(e){return Array.from(e).some(e=>{let t=e.codePointAt(0)??0;return t<=127&&(t<33||t===127||mb.has(e))})}function gb(e){if(hb(e))throw Error(`invalid hostname`);if(/^[\x21-\x7e]+$/.test(e))return e;let t=`.invalid`,n=new URL(`https://${e}${t}`);if(n.username||n.password||n.port||n.pathname!==`/`||n.search||n.hash||!n.hostname.endsWith(t)||n.hostname.includes(`:`))throw Error(`invalid hostname`);let r=n.hostname.slice(0,-8);if(!r||r.includes(`.`)||!/^[\x21-\x7e]+$/.test(r))throw Error(`invalid hostname`);return r}function _b(e){if(e===`.`)return``;let t=e.endsWith(`.`)?e.slice(0,-1):e,n=t.split(`.`);if(!t||n.some(e=>e.length===0))throw Error(`invalid DNS name: ${e}`);try{return n.map(gb).join(`.`)}catch{throw Error(`invalid DNS name: ${e}`)}}function vb(e,t){let n=_b(e).split(`.`).filter(e=>e.length>0).map(e=>new TextEncoder().encode(e));if(n.some(e=>e.length>63))throw Error(`invalid DNS name: ${e}`);let r=n.reduce((e,t)=>e+t.length+1,1);if(r>255)throw Error(`invalid DNS name: ${e}`);let i=pb[t];if(!i)throw Error(`unsupported record type: ${t}`);let a=new Uint8Array(12+r+4),o=new DataView(a.buffer);o.setUint16(2,256),o.setUint16(4,1);let s=12;for(let e of n)a[s]=e.length,a.set(e,s+1),s+=e.length+1;return s+=1,o.setUint16(s,i),o.setUint16(s+2,1),a}function yb(e,n,r){return`${e}?dns=${t(vb(n,r)).replaceAll(`+`,`-`).replaceAll(`/`,`_`).replace(/=+$/,``)}`}function bb(e,t,n){if(t<0||n<0||t+n>e.length)throw Error(`truncated DNS message`)}function xb(e,t){let n=[],r=new Set,i=t,a=t,o=!1,s=1;for(let t=0;t<=e.length;t+=1){bb(e,i,1);let t=e[i];if(t===0)return o||(a=i+1),{name:n.length>0?`${n.join(`.`)}.`:`.`,labels:n,nextOffset:a};if((t&192)==192){bb(e,i,2);let n=(t&63)<<8|e[i+1];if(n>=i)throw Error(`invalid DNS compression pointer`);if(r.has(n))throw Error(`DNS compression pointer loop`);r.add(n),o||(a=i+2),o=!0,i=n;continue}if(t&192||t>63)throw Error(`invalid DNS label`);if(bb(e,i+1,t),s+=t+1,s>255)throw Error(`DNS name too long`);n.push(new TextDecoder().decode(e.subarray(i+1,i+1+t))),i+=t+1}throw Error(`invalid DNS name`)}function
|
|
756
|
+
`};if(!e.name)return{kind:`error`,message:`dig: missing domain name\n${eb}\n`};let t=e.server?.toLowerCase(),n=t?nb[t]:void 0,r=e.server&&!n?`dig: note: @${e.server} not supported over DoH; using cloudflare-dns.com\n`:``;return{kind:`query`,name:e.name,type:e.type??`A`,short:e.short,json:e.json,resolverUrl:n??`https://cloudflare-dns.com/dns-query`,fallbackNote:r}}function fb(e){if(e.includes(`-v`)||e.includes(`--version`))return{kind:`version`};let t={short:!1,json:!1};for(let n=0;n<e.length;n+=1){let r=ub(e,n,t);if(`error`in r)return r.error;n=r.nextIndex}return db(t)}const pb={A:1,NS:2,CNAME:5,SOA:6,PTR:12,MX:15,TXT:16,AAAA:28,SRV:33,CAA:257},mb=new Set(`#/:<>?@[\\]^|`);function hb(e){return Array.from(e).some(e=>{let t=e.codePointAt(0)??0;return t<=127&&(t<33||t===127||mb.has(e))})}function gb(e){if(hb(e))throw Error(`invalid hostname`);if(/^[\x21-\x7e]+$/.test(e))return e;let t=`.invalid`,n=new URL(`https://${e}${t}`);if(n.username||n.password||n.port||n.pathname!==`/`||n.search||n.hash||!n.hostname.endsWith(t)||n.hostname.includes(`:`))throw Error(`invalid hostname`);let r=n.hostname.slice(0,-8);if(!r||r.includes(`.`)||!/^[\x21-\x7e]+$/.test(r))throw Error(`invalid hostname`);return r}function _b(e){if(e===`.`)return``;let t=e.endsWith(`.`)?e.slice(0,-1):e,n=t.split(`.`);if(!t||n.some(e=>e.length===0))throw Error(`invalid DNS name: ${e}`);try{return n.map(gb).join(`.`)}catch{throw Error(`invalid DNS name: ${e}`)}}function vb(e,t){let n=_b(e).split(`.`).filter(e=>e.length>0).map(e=>new TextEncoder().encode(e));if(n.some(e=>e.length>63))throw Error(`invalid DNS name: ${e}`);let r=n.reduce((e,t)=>e+t.length+1,1);if(r>255)throw Error(`invalid DNS name: ${e}`);let i=pb[t];if(!i)throw Error(`unsupported record type: ${t}`);let a=new Uint8Array(12+r+4),o=new DataView(a.buffer);o.setUint16(2,256),o.setUint16(4,1);let s=12;for(let e of n)a[s]=e.length,a.set(e,s+1),s+=e.length+1;return s+=1,o.setUint16(s,i),o.setUint16(s+2,1),a}function yb(e,n,r){return`${e}?dns=${t(vb(n,r)).replaceAll(`+`,`-`).replaceAll(`/`,`_`).replace(/=+$/,``)}`}function bb(e,t,n){if(t<0||n<0||t+n>e.length)throw Error(`truncated DNS message`)}function xb(e,t){let n=[],r=new Set,i=t,a=t,o=!1,s=1;for(let t=0;t<=e.length;t+=1){bb(e,i,1);let t=e[i];if(t===0)return o||(a=i+1),{name:n.length>0?`${n.join(`.`)}.`:`.`,labels:n,nextOffset:a};if((t&192)==192){bb(e,i,2);let n=(t&63)<<8|e[i+1];if(n>=i)throw Error(`invalid DNS compression pointer`);if(r.has(n))throw Error(`DNS compression pointer loop`);r.add(n),o||(a=i+2),o=!0,i=n;continue}if(t&192||t>63)throw Error(`invalid DNS label`);if(bb(e,i+1,t),s+=t+1,s>255)throw Error(`DNS name too long`);n.push(new TextDecoder().decode(e.subarray(i+1,i+1+t))),i+=t+1}throw Error(`invalid DNS name`)}function L(e,t){return bb(e,t,2),new DataView(e.buffer,e.byteOffset,e.byteLength).getUint16(t)}function Sb(e,t){return bb(e,t,4),new DataView(e.buffer,e.byteOffset,e.byteLength).getUint32(t)}function Cb(e,t){let n=Array.from({length:8},(n,r)=>L(e,t+r*2)),r=-1,i=0;for(let e=0;e<n.length;){if(n[e]!==0){e+=1;continue}let t=e;for(;t<n.length&&n[t]===0;)t+=1;t-e>i&&([r,i]=[e,t-e]),e=t}let a=n.map(e=>e.toString(16));return i<2?a.join(`:`):`${a.slice(0,r).join(`:`)}::${a.slice(r+i).join(`:`)}`}function wb(e,t,n){return`"${Array.from(e.subarray(t,n),e=>e===34?`\\"`:e===92?`\\\\`:e>=32&&e<=126?String.fromCharCode(e):`\\${String(e).padStart(3,`0`)}`).join(``)}"`}function Tb(e,t,n){let r=t,i=[];for(;r<n;){let t=e[r];if(bb(e,r+1,t),r+t+1>n)throw Error(`invalid TXT record`);i.push(wb(e,r+1,r+1+t)),r+=t+1}return i.join(` `)}function Eb(e,t,n){if(n-t<2)throw Error(`invalid CAA record`);let r=e[t+1];if(t+2+r>n)throw Error(`invalid CAA record`);let i=new TextDecoder,a=i.decode(e.subarray(t+2,t+2+r)),o=i.decode(e.subarray(t+2+r,n));return`${e[t]} ${a} ${JSON.stringify(o)}`}function Db(e,t,n,r){if(t===1){if(r-n!==4)throw Error(`invalid A record`);return Array.from(e.subarray(n,r)).join(`.`)}if(t===28){if(r-n!==16)throw Error(`invalid AAAA record`);return Cb(e,n)}if([2,5,12].includes(t)){let t=xb(e,n);if(t.nextOffset!==r)throw Error(`invalid DNS name record`);return t.name}if(t===15){if(r-n<3)throw Error(`invalid MX record`);let t=xb(e,n+2);if(t.nextOffset!==r)throw Error(`invalid MX record`);return`${L(e,n)} ${t.name}`}if(t===16)return Tb(e,n,r);if(t===6){let t=xb(e,n),i=xb(e,t.nextOffset);if(i.nextOffset+20!==r)throw Error(`invalid SOA record`);let a=Array.from({length:5},(t,n)=>Sb(e,i.nextOffset+n*4));return`${t.name} ${i.name} ${a.join(` `)}`}if(t===33){if(r-n<7)throw Error(`invalid SRV record`);let t=xb(e,n+6);if(t.nextOffset!==r)throw Error(`invalid SRV record`);return`${L(e,n)} ${L(e,n+2)} ${L(e,n+4)} ${t.name}`}if(t===257)return Eb(e,n,r);let i=Array.from(e.subarray(n,r),e=>e.toString(16).padStart(2,`0`));return`\\# ${r-n} ${i.join(``)}`}function Ob(e,t,n,r){let i=[],a=t;for(let t=0;t<n;t+=1){let t=xb(e,a);a=t.nextOffset,bb(e,a,10);let n=L(e,a),o=L(e,a+2),s=Sb(e,a+4),c=L(e,a+8),l=a+10,u=l+c;bb(e,l,c);let d=Db(e,n,l,u);r&&o===1&&i.push({name:t.name,type:n,TTL:s,data:d}),a=u}return{answers:i,nextOffset:a}}function kb(e){return e.replace(/[A-Z]/g,e=>e.toLowerCase())}function Ab(e,t,n,r,i){let a=_b(r).split(`.`).filter(Boolean);if(!(e.labels.length===a.length&&e.labels.every((e,t)=>kb(e)===kb(a[t])))||t!==pb[i]||n!==1)throw Error(`unexpected DNS response question`)}function jb(e,t,n){bb(e,0,12);let r=L(e,2);if(L(e,0)!==0||!(r&32768))throw Error(`invalid DNS response`);if(r&512)throw Error(`truncated DNS response`);let i=L(e,4),a=L(e,6),o=L(e,8),s=L(e,10);if(i!==1)throw Error(`invalid DNS question count`);let c=12,l=xb(e,c);c=l.nextOffset,bb(e,c,4),Ab(l,L(e,c),L(e,c+2),t,n),c+=4;let u=Ob(e,c,a,!0);if(Ob(e,Ob(e,u.nextOffset,o,!1).nextOffset,s,!1).nextOffset!==e.length)throw Error(`trailing DNS message data`);return{Status:r&15,Answer:u.answers}}const Mb={1:`A`,2:`NS`,5:`CNAME`,6:`SOA`,12:`PTR`,15:`MX`,16:`TXT`,28:`AAAA`,33:`SRV`,257:`CAA`},Nb={0:`NOERROR`,1:`FORMERR`,2:`SERVFAIL`,3:`NXDOMAIN`,4:`NOTIMP`,5:`REFUSED`};function Pb(){return{stdout:`usage: dig <name> [type] [@server] [+opts] [--json]
|
|
757
757
|
dig -x <address> [@server] [+opts] [--json]
|
|
758
758
|
dig -v | --version
|
|
759
759
|
|
|
@@ -832,7 +832,7 @@ Install:
|
|
|
832
832
|
`,Yb=new Set([`iife`,`cjs`,`esm`]),Xb=new Set([`browser`,`node`,`neutral`]),Zb=new Set([`linked`,`inline`,`external`,`both`]),Qb={"-h":`showHelp`,"--help":`showHelp`,"-v":`showVersion`,"--version":`showVersion`,"--bundle":`bundle`,"--transform":`transform`,"--minify":`minify`};function $b(e){if(e.startsWith(`--`)){let t=e.indexOf(`=`);if(t>0)return{key:e.slice(0,t),inlineValue:e.slice(t+1)}}return{key:e,inlineValue:null}}function ex(e,t,n){if(e.inlineValue!==null)return{value:e.inlineValue,advance:0};let r=t[n+1];if(typeof r!=`string`||r.startsWith(`-`))throw Error(`esbuild: ${e.key} requires a value`);return{value:r,advance:1}}function tx(e,t,n,r){if(t.inlineValue!==null){if(!Zb.has(t.inlineValue))throw Error(`esbuild: --sourcemap value must be one of linked|inline|external|both (got "${t.inlineValue}")`);return e.sourcemap=t.inlineValue,0}let i=n[r+1];return typeof i==`string`&&Zb.has(i)?(e.sourcemap=i,1):(e.sourcemap=!0,0)}function nx(e,t,n,r){if(t.key===`--outfile`){let{value:i,advance:a}=ex(t,n,r);return e.outfile=i,a}if(t.key===`--format`){let{value:i,advance:a}=ex(t,n,r);if(!Yb.has(i))throw Error(`esbuild: --format must be one of iife|cjs|esm (got "${i}")`);return e.format=i,a}if(t.key===`--platform`){let{value:i,advance:a}=ex(t,n,r);if(!Xb.has(i))throw Error(`esbuild: --platform must be one of browser|node|neutral (got "${i}")`);return e.platform=i,a}if(t.key===`--target`){let{value:i,advance:a}=ex(t,n,r);return e.target=i.split(`,`).map(e=>e.trim()).filter(Boolean),a}if(t.key===`--loader`){let{value:i,advance:a}=ex(t,n,r);return e.loader=i,a}return-1}function rx(e,t,n){if(!e.startsWith(t))return!1;let r=e.slice(t.length),i=r.indexOf(`=`);if(i<1)throw Error(`esbuild: ${t.slice(0,-1)} requires <key>=<value>`);return n[r.slice(0,i)]=r.slice(i+1),!0}function ix(e){let t={entries:[],bundle:!1,transform:!1,outfile:null,format:null,minify:!1,sourcemap:null,target:null,loader:null,external:[],platform:null,define:{},banner:{},footer:{},treeShaking:null,showHelp:!1,showVersion:!1};for(let n=0;n<e.length;n++){let r=e[n],i=Qb[r];if(i){t[i]=!0;continue}if(r.startsWith(`--external:`)){t.external.push(r.slice(11));continue}if(rx(r,`--define:`,t.define)||rx(r,`--banner:`,t.banner)||rx(r,`--footer:`,t.footer))continue;let a=$b(r);if(a.key===`--tree-shaking`){if(a.inlineValue===null)t.treeShaking=!0;else if(a.inlineValue===`true`||a.inlineValue===`false`)t.treeShaking=a.inlineValue===`true`;else throw Error(`esbuild: --tree-shaking must be true or false (got "${a.inlineValue}")`);continue}if(a.key===`--sourcemap`){n+=tx(t,a,e,n);continue}let o=nx(t,a,e,n);if(o>=0){n+=o;continue}if(r.startsWith(`-`))throw Error(`esbuild: unknown option: ${r}`);t.entries.push(r)}return t}function ax(e,t,n,r,i){return{name:`slicc-vfs`,setup(a){a.onResolve({filter:/.*/},async a=>{if(a.kind!==`entry-point`&&ox(a.path,r)||/^[a-z]+:/.test(a.path)&&!a.path.startsWith(`file:`))return{path:a.path,external:!0};if(cx(a.path)){let n=a.importer?.startsWith(`/`)?ar(a.importer):t;return{path:await dx(e,e.resolvePath(n,a.path))}}return lx(a.path,a.importer,n,sx(i,a.kind))}),a.onLoad({filter:/.*/},async t=>t.namespace&&t.namespace!==`file`?null:{contents:await e.readFile(t.path),loader:ux(t.path),resolveDir:ar(t.path)})}}}function ox(e,t){return t.some(t=>{if(e===t)return!0;if(!t.includes(`*`))return!cx(t)&&e.startsWith(`${t}/`);let n=t.replace(/[.+?^${}()|[\]\\]/g,`\\$&`).replace(`*`,`.*`);return RegExp(`^${n}$`).test(e)})}function sx(e,t){let n=t===`require-call`||t===`require-resolve`?`require`:`import`;switch(e??`browser`){case`browser`:return[`browser`,n,`default`];case`node`:return[`node`,n,`default`];case`neutral`:return[n,`default`]}}function cx(e){return e.startsWith(`./`)||e.startsWith(`../`)||e.startsWith(`/`)}async function lx(e,t,n,r){let i=t?.startsWith(`/`)?ar(t):n.fromDir;try{let t=await qn(e,i,n.reader,{conditions:r});return t.type===`file`?{path:t.path}:{path:e,external:!0}}catch(e){return{errors:[{text:e instanceof Error?e.message:String(e)}]}}}function ux(e){let t=er(e).toLowerCase(),n=t.lastIndexOf(`.`);if(n<0)return`js`;switch(t.slice(n+1)){case`ts`:return`ts`;case`tsx`:return`tsx`;case`jsx`:return`jsx`;case`mjs`:case`cjs`:case`js`:return`js`;case`json`:return`json`;case`css`:return`css`;case`txt`:return`text`;default:return`js`}}async function dx(e,t){if(await e.exists(t))try{if(!(await e.stat(t)).isDirectory)return t}catch{return t}let n=[`.ts`,`.tsx`,`.jsx`,`.mjs`,`.cjs`,`.js`,`.json`];for(let r of n){let n=`${t}${r}`;if(await e.exists(n))return n}for(let r of n){let n=$n(t,`index${r}`);if(await e.exists(n))return n}return t}async function fx(e,t,n){let r=[];if(n.length>0){let t=await e(n,{kind:`warning`,color:!1});r.push(t.join(``))}if(t.length>0){let n=await e(t,{kind:`error`,color:!1});r.push(n.join(``))}return r.join(``)}function px(){return S(`esbuild`,async(e,t)=>{let n;try{n=ix(e)}catch(e){return{stdout:``,stderr:`${e instanceof Error?e.message:String(e)}\n`,exitCode:2}}if(n.showHelp||e.length===0&&!t.stdin)return{stdout:Jb,stderr:``,exitCode:0};if(!n.transform&&!n.bundle&&n.entries.length>1)return{stdout:``,stderr:`esbuild: multiple entry points require --bundle (transform mode accepts at most one entry)
|
|
833
833
|
`,exitCode:2};let r;try{r=await qr({ipk:qb(t)})}catch(e){return{stdout:``,stderr:`esbuild: ${e instanceof Error?e.message:String(e)}\n`,exitCode:1}}return n.showVersion?{stdout:`${r.version}\n`,stderr:``,exitCode:0}:n.transform||!n.bundle&&n.entries.length<=1?mx(n,t,r):hx(n,t,r)})}async function mx(e,t,n){let r,i=`<stdin>`;if(e.entries.length===1){let n=t.fs.resolvePath(t.cwd,e.entries[0]);if(!await t.fs.exists(n))return{stdout:``,stderr:`esbuild: ${e.entries[0]}: no such file\n`,exitCode:1};r=await t.fs.readFile(n),i=n}else if(r=P(t.stdin),!r)return{stdout:Jb,stderr:``,exitCode:0};let a={loader:e.loader??ux(i),sourcefile:i,...e.format?{format:e.format}:{},...e.minify?{minify:!0}:{},...e.sourcemap?{sourcemap:e.sourcemap}:{},...e.target?{target:e.target}:{},...e.platform?{platform:e.platform}:{},...Object.keys(e.define).length>0?{define:e.define}:{},...e.treeShaking===null?{}:{treeShaking:e.treeShaking}};try{let i=await n.transform(r,a),o=await fx(n.formatMessages,[],i.warnings);if(e.outfile){let n=t.fs.resolvePath(t.cwd,e.outfile);return await t.fs.writeFile(n,i.code),i.map&&e.sourcemap&&e.sourcemap!==`inline`&&await t.fs.writeFile(`${n}.map`,i.map),{stdout:``,stderr:o,exitCode:0}}return{stdout:i.code,stderr:o,exitCode:0}}catch(e){let t=e;return Array.isArray(t.errors)?{stdout:``,stderr:await fx(n.formatMessages,t.errors,t.warnings??[]),exitCode:1}:{stdout:``,stderr:`esbuild: ${e instanceof Error?e.message:String(e)}\n`,exitCode:1}}}async function hx(e,t,n){if(e.entries.length===0)return{stdout:``,stderr:`esbuild: --bundle requires at least one entry point
|
|
834
834
|
`,exitCode:2};let r=e.entries.map(e=>t.fs.resolvePath(t.cwd,e));for(let e of r)if(!await t.fs.exists(e))return{stdout:``,stderr:`esbuild: ${e}: no such file\n`,exitCode:1};let i={entryPoints:r,bundle:!0,write:!1,plugins:[ax(t.fs,t.cwd,qb(t),e.external,e.platform)],format:e.format??`esm`,...gx(e)};try{let r=await n.build(i),a=await fx(n.formatMessages,r.errors,r.warnings),o=r.outputFiles??[];if(e.outfile){if(o.length===0)return{stdout:``,stderr:`esbuild: build produced no output
|
|
835
|
-
`,exitCode:1};let n=t.fs.resolvePath(t.cwd,e.outfile);await t.fs.writeFile(n,o[0].text);let r=ar(n);for(let e=1;e<o.length;e++){let n=o[e],i=$n(r,er(n.path));await t.fs.writeFile(i,n.text)}return{stdout:``,stderr:a,exitCode:0}}return{stdout:o.map(e=>e.text).join(``),stderr:a,exitCode:0}}catch(e){let t=e;return Array.isArray(t.errors)?{stdout:``,stderr:await fx(n.formatMessages,t.errors,t.warnings??[]),exitCode:1}:{stdout:``,stderr:`esbuild: ${e instanceof Error?e.message:String(e)}\n`,exitCode:1}}}function gx(e){return{...e.minify?{minify:!0}:{},...e.sourcemap?{sourcemap:e.sourcemap}:{},...e.target?{target:e.target}:{},...e.external.length>0?{external:e.external}:{},...e.platform?{platform:e.platform}:{},...Object.keys(e.define).length>0?{define:e.define}:{},...Object.keys(e.banner).length>0?{banner:e.banner}:{},...Object.keys(e.footer).length>0?{footer:e.footer}:{},...e.treeShaking===null?{}:{treeShaking:e.treeShaking}}}function _x(e){let t=new ArrayBuffer(e.byteLength);return new Uint8Array(t).set(e),t}var vx=class{ops(){return import(`./esptool-operations-h8-8jVn_.js`)}registry(){if(!Pr())throw Error(`Web Serial is unavailable in this browser`);return Br()}async chipInfo(e,t,n){return(await this.ops()).esptoolChipInfo(this.registry(),e,t,n)}async readMac(e,t,n){return(await this.ops()).esptoolReadMac(this.registry(),e,t,n)}async eraseFlash(e,t,n){await(await this.ops()).esptoolEraseFlash(this.registry(),e,t,n)}async flash(e,t,n,r,i){await(await this.ops()).esptoolFlash(this.registry(),e,t,n,r,i)}async readFlash(e,t,n,r,i){return(await this.ops()).esptoolReadFlash(this.registry(),e,t,n,r,i)}async readReg(e,t,n,r){return(await this.ops()).esptoolReadReg(this.registry(),e,t,n,r)}async flashId(e,t,n){return(await this.ops()).esptoolFlashId(this.registry(),e,t,n)}async eraseRegion(e,t,n,r,i){await(await this.ops()).esptoolEraseRegion(this.registry(),e,t,n,r,i)}async run(e,t,n){await(await this.ops()).esptoolRun(this.registry(),e,t,n)}},yx=class e{rpc;constructor(e){this.rpc=e}static INFO_TIMEOUT_MS=12e4;static ERASE_TIMEOUT_MS=3e5;static FLASH_TIMEOUT_MS=6e5;async withProgress(e,t,n){let r=this.rpc.onEvent(`esptool-progress`,n=>{let r=n;!r||r.handle!==e||t(r.line)});try{return await n()}finally{r()}}async chipInfo(t,n,r){return this.withProgress(t,r,()=>this.rpc.call(`esptool-chip-info`,{handle:t,baudRate:n},{timeoutMs:e.INFO_TIMEOUT_MS}))}async readMac(t,n,r){return this.withProgress(t,r,()=>this.rpc.call(`esptool-read-mac`,{handle:t,baudRate:n},{timeoutMs:e.INFO_TIMEOUT_MS}))}async eraseFlash(t,n,r){await this.withProgress(t,r,()=>this.rpc.call(`esptool-erase-flash`,{handle:t,baudRate:n},{timeoutMs:e.ERASE_TIMEOUT_MS}))}async flash(t,n,r,i,a){await this.withProgress(t,a,()=>this.rpc.call(`esptool-flash`,{handle:t,baudRate:n,eraseAll:r,segments:i.map(e=>({address:e.address,bytes:_x(e.data)}))},{timeoutMs:e.FLASH_TIMEOUT_MS}))}async readFlash(t,n,r,i,a){let{bytes:o}=await this.withProgress(t,a,()=>this.rpc.call(`esptool-read-flash`,{handle:t,baudRate:n,address:r,size:i},{timeoutMs:e.FLASH_TIMEOUT_MS}));return new Uint8Array(o)}async readReg(t,n,r,i){return this.withProgress(t,i,()=>this.rpc.call(`esptool-read-reg`,{handle:t,baudRate:n,address:r},{timeoutMs:e.INFO_TIMEOUT_MS}))}async flashId(t,n,r){return this.withProgress(t,r,()=>this.rpc.call(`esptool-flash-id`,{handle:t,baudRate:n},{timeoutMs:e.INFO_TIMEOUT_MS}))}async eraseRegion(t,n,r,i,a){await this.withProgress(t,a,()=>this.rpc.call(`esptool-erase-region`,{handle:t,baudRate:n,address:r,size:i},{timeoutMs:e.ERASE_TIMEOUT_MS}))}async run(t,n,r){await this.withProgress(t,r,()=>this.rpc.call(`esptool-run`,{handle:t,baudRate:n},{timeoutMs:e.INFO_TIMEOUT_MS}))}};function bx(e,t){return e&&Pr()?new vx:t?new yx(t):null}const xx=Symbol(`picker-approval-timeout`);async function Sx(e,t,n){let r=Se.generateId(),i=!1,a=Ce({id:r,html:rm(e,t),onAction:async(e,t)=>{if(e!==`approve`)return{denied:!0};let n=t;return n?.cancelled?{cancelled:!0}:n?.error?{error:String(n.error)}:n?.granted&&typeof n.handle==`string`?{approved:!0,handle:n.handle,info:n.info??null}:n?.granted&&n?.info?{approved:!0,info:n.info}:{error:`picker returned an unexpected response`}}},n.onUpdate).catch(e=>{if(i)return xx;throw e}),o,s=new Promise(t=>{o=setTimeout(()=>{i=!0,Se.cancel(r,`${e}: timed out`),t(xx)},12e4)}),c=await Promise.race([a,s]);if(o&&clearTimeout(o),c===xx)throw Error(`${e}: timed out after 120s waiting for user approval`);let l=c;if(l.denied)throw Error(`${e}: denied by user`);if(l.cancelled)throw Error(`${e}: cancelled`);if(l.error)throw Error(`${e}: ${l.error}`);if(!l.approved||!l.info)throw Error(`${e}: no device selected`);return{handle:l.handle??``,info:l.info}}const Cx=new Set([`--vid`,`--pid`,`--baud`,`--data-bits`,`--stop-bits`,`--parity`,`--flow-control`,`--buffer-size`,`--bytes`,`--until`,`--timeout-ms`,`--dtr`,`--rts`,`--break`,`--__resolved`]);function wx(e){return vn(e,Cx)}function
|
|
835
|
+
`,exitCode:1};let n=t.fs.resolvePath(t.cwd,e.outfile);await t.fs.writeFile(n,o[0].text);let r=ar(n);for(let e=1;e<o.length;e++){let n=o[e],i=$n(r,er(n.path));await t.fs.writeFile(i,n.text)}return{stdout:``,stderr:a,exitCode:0}}return{stdout:o.map(e=>e.text).join(``),stderr:a,exitCode:0}}catch(e){let t=e;return Array.isArray(t.errors)?{stdout:``,stderr:await fx(n.formatMessages,t.errors,t.warnings??[]),exitCode:1}:{stdout:``,stderr:`esbuild: ${e instanceof Error?e.message:String(e)}\n`,exitCode:1}}}function gx(e){return{...e.minify?{minify:!0}:{},...e.sourcemap?{sourcemap:e.sourcemap}:{},...e.target?{target:e.target}:{},...e.external.length>0?{external:e.external}:{},...e.platform?{platform:e.platform}:{},...Object.keys(e.define).length>0?{define:e.define}:{},...Object.keys(e.banner).length>0?{banner:e.banner}:{},...Object.keys(e.footer).length>0?{footer:e.footer}:{},...e.treeShaking===null?{}:{treeShaking:e.treeShaking}}}function _x(e){let t=new ArrayBuffer(e.byteLength);return new Uint8Array(t).set(e),t}var vx=class{ops(){return import(`./esptool-operations-h8-8jVn_.js`)}registry(){if(!Pr())throw Error(`Web Serial is unavailable in this browser`);return Br()}async chipInfo(e,t,n){return(await this.ops()).esptoolChipInfo(this.registry(),e,t,n)}async readMac(e,t,n){return(await this.ops()).esptoolReadMac(this.registry(),e,t,n)}async eraseFlash(e,t,n){await(await this.ops()).esptoolEraseFlash(this.registry(),e,t,n)}async flash(e,t,n,r,i){await(await this.ops()).esptoolFlash(this.registry(),e,t,n,r,i)}async readFlash(e,t,n,r,i){return(await this.ops()).esptoolReadFlash(this.registry(),e,t,n,r,i)}async readReg(e,t,n,r){return(await this.ops()).esptoolReadReg(this.registry(),e,t,n,r)}async flashId(e,t,n){return(await this.ops()).esptoolFlashId(this.registry(),e,t,n)}async eraseRegion(e,t,n,r,i){await(await this.ops()).esptoolEraseRegion(this.registry(),e,t,n,r,i)}async run(e,t,n){await(await this.ops()).esptoolRun(this.registry(),e,t,n)}},yx=class e{rpc;constructor(e){this.rpc=e}static INFO_TIMEOUT_MS=12e4;static ERASE_TIMEOUT_MS=3e5;static FLASH_TIMEOUT_MS=6e5;async withProgress(e,t,n){let r=this.rpc.onEvent(`esptool-progress`,n=>{let r=n;!r||r.handle!==e||t(r.line)});try{return await n()}finally{r()}}async chipInfo(t,n,r){return this.withProgress(t,r,()=>this.rpc.call(`esptool-chip-info`,{handle:t,baudRate:n},{timeoutMs:e.INFO_TIMEOUT_MS}))}async readMac(t,n,r){return this.withProgress(t,r,()=>this.rpc.call(`esptool-read-mac`,{handle:t,baudRate:n},{timeoutMs:e.INFO_TIMEOUT_MS}))}async eraseFlash(t,n,r){await this.withProgress(t,r,()=>this.rpc.call(`esptool-erase-flash`,{handle:t,baudRate:n},{timeoutMs:e.ERASE_TIMEOUT_MS}))}async flash(t,n,r,i,a){await this.withProgress(t,a,()=>this.rpc.call(`esptool-flash`,{handle:t,baudRate:n,eraseAll:r,segments:i.map(e=>({address:e.address,bytes:_x(e.data)}))},{timeoutMs:e.FLASH_TIMEOUT_MS}))}async readFlash(t,n,r,i,a){let{bytes:o}=await this.withProgress(t,a,()=>this.rpc.call(`esptool-read-flash`,{handle:t,baudRate:n,address:r,size:i},{timeoutMs:e.FLASH_TIMEOUT_MS}));return new Uint8Array(o)}async readReg(t,n,r,i){return this.withProgress(t,i,()=>this.rpc.call(`esptool-read-reg`,{handle:t,baudRate:n,address:r},{timeoutMs:e.INFO_TIMEOUT_MS}))}async flashId(t,n,r){return this.withProgress(t,r,()=>this.rpc.call(`esptool-flash-id`,{handle:t,baudRate:n},{timeoutMs:e.INFO_TIMEOUT_MS}))}async eraseRegion(t,n,r,i,a){await this.withProgress(t,a,()=>this.rpc.call(`esptool-erase-region`,{handle:t,baudRate:n,address:r,size:i},{timeoutMs:e.ERASE_TIMEOUT_MS}))}async run(t,n,r){await this.withProgress(t,r,()=>this.rpc.call(`esptool-run`,{handle:t,baudRate:n},{timeoutMs:e.INFO_TIMEOUT_MS}))}};function bx(e,t){return e&&Pr()?new vx:t?new yx(t):null}const xx=Symbol(`picker-approval-timeout`);async function Sx(e,t,n){let r=Se.generateId(),i=!1,a=Ce({id:r,html:rm(e,t),onAction:async(e,t)=>{if(e!==`approve`)return{denied:!0};let n=t;return n?.cancelled?{cancelled:!0}:n?.error?{error:String(n.error)}:n?.granted&&typeof n.handle==`string`?{approved:!0,handle:n.handle,info:n.info??null}:n?.granted&&n?.info?{approved:!0,info:n.info}:{error:`picker returned an unexpected response`}}},n.onUpdate).catch(e=>{if(i)return xx;throw e}),o,s=new Promise(t=>{o=setTimeout(()=>{i=!0,Se.cancel(r,`${e}: timed out`),t(xx)},12e4)}),c=await Promise.race([a,s]);if(o&&clearTimeout(o),c===xx)throw Error(`${e}: timed out after 120s waiting for user approval`);let l=c;if(l.denied)throw Error(`${e}: denied by user`);if(l.cancelled)throw Error(`${e}: cancelled`);if(l.error)throw Error(`${e}: ${l.error}`);if(!l.approved||!l.info)throw Error(`${e}: no device selected`);return{handle:l.handle??``,info:l.info}}const Cx=new Set([`--vid`,`--pid`,`--baud`,`--data-bits`,`--stop-bits`,`--parity`,`--flow-control`,`--buffer-size`,`--bytes`,`--until`,`--timeout-ms`,`--dtr`,`--rts`,`--break`,`--__resolved`]);function wx(e){return vn(e,Cx)}function R(e,t){let n=/^0x/i.test(e)?parseInt(e,16):parseInt(e,10);if(!Number.isFinite(n)||Number.isNaN(n))throw Error(`invalid ${t}: '${e}'`);return n}function Tx(e){let t=e.replace(/0x/gi,``).replace(/[\s:,]/g,``);if(t.length===0)return new Uint8Array;if(t.length%2!=0||/[^0-9a-f]/i.test(t))throw Error(`invalid hex string: '${e}'`);let n=new Uint8Array(t.length/2);for(let e=0;e<n.length;e++)n[e]=parseInt(t.slice(e*2,e*2+2),16);return n}function Ex(e){let t={};return e.has(`--vid`)&&(t.usbVendorId=R(e.get(`--vid`),`vid`)),e.has(`--pid`)&&(t.usbProductId=R(e.get(`--pid`),`pid`)),Object.keys(t).length>0?[t]:[]}const Dx=new Set([`none`,`even`,`odd`]),Ox=new Set([`none`,`hardware`]);function kx(e){let t={baudRate:e.has(`--baud`)?R(e.get(`--baud`),`baud`):9600};if(e.has(`--data-bits`)&&(t.dataBits=R(e.get(`--data-bits`),`data-bits`)),e.has(`--stop-bits`)&&(t.stopBits=R(e.get(`--stop-bits`),`stop-bits`)),e.has(`--parity`)){let n=e.get(`--parity`);if(!Dx.has(n))throw Error(`invalid --parity: '${n}'`);t.parity=n}if(e.has(`--flow-control`)){let n=e.get(`--flow-control`);if(!Ox.has(n))throw Error(`invalid --flow-control: '${n}'`);t.flowControl=n}return e.has(`--buffer-size`)&&(t.bufferSize=R(e.get(`--buffer-size`),`buffer-size`)),t}function Ax(e){let t={};return e.has(`--bytes`)&&(t.maxBytes=R(e.get(`--bytes`),`bytes`)),e.has(`--until`)&&(t.until=Tx(e.get(`--until`))),e.has(`--timeout-ms`)&&(t.timeoutMs=R(e.get(`--timeout-ms`),`timeout-ms`)),t}function jx(e,t){let n=e.toLowerCase();if(n===`on`||n===`true`||n===`1`)return!0;if(n===`off`||n===`false`||n===`0`)return!1;throw Error(`invalid ${t}: '${e}' (use on/off)`)}function Mx(e){let t={};return e.has(`--dtr`)&&(t.dataTerminalReady=jx(e.get(`--dtr`),`dtr`)),e.has(`--rts`)&&(t.requestToSend=jx(e.get(`--rts`),`rts`)),e.has(`--break`)&&(t.break=jx(e.get(`--break`),`break`)),t}function Nx(e){let t=ei(e.stdin),n=new Uint8Array(t.length);for(let e=0;e<t.length;e++)n[e]=t.charCodeAt(e)&255;return n}function Px(e){return Array.from(e,e=>e.toString(16).padStart(2,`0`)).join(` `)}function Fx(e){return`0x${e.toString(16).padStart(4,`0`)}`}function Ix(e){let t=e.usbVendorId!==void 0||e.usbProductId!==void 0?`${Fx(e.usbVendorId??0)}:${Fx(e.usbProductId??0)}`:`(native serial)`,n=e.opened?` [open]`:``;return`${e.handle}\t${t}${n}`}function Lx(e){return`cts=${+!!e.clearToSend} dcd=${+!!e.dataCarrierDetect} dsr=${+!!e.dataSetReady} ri=${+!!e.ringIndicator}\n`}function z(e){return{stdout:e,stderr:``,exitCode:0}}function B(e){return{stdout:``,stderr:`serial: ${e}\n`,exitCode:1}}const Rx=`serial - access serial ports via Web Serial
|
|
836
836
|
|
|
837
837
|
Usage: serial <subcommand> [options]
|
|
838
838
|
|
|
@@ -863,9 +863,9 @@ Options:
|
|
|
863
863
|
-h, --help
|
|
864
864
|
|
|
865
865
|
Reads/writes are capped at ${Ur} bytes (4 MiB).
|
|
866
|
-
`;function zx(e,t){if(t)return
|
|
867
|
-
`):
|
|
868
|
-
`)}\n`)}async function Vx(e,t){let n=e.get(`--__resolved`);if(n)return
|
|
866
|
+
`;function zx(e,t){if(t)return z(e.length?`${Px(e)}\n`:``);let n=``;for(let t=0;t<e.length;t++)n+=String.fromCharCode(e[t]);return z(n)}async function Bx(e){let t=await e.list();return t.length===0?z(`no granted serial ports
|
|
867
|
+
`):z(`${t.map(Ix).join(`
|
|
868
|
+
`)}\n`)}async function Vx(e,t){let n=e.get(`--__resolved`);if(n)return z(`${Ix(await t.info(n))}\n`);let r=Ex(e),i=xe();if(i){let e=await Sx(`serial-port`,r,i);if(e.handle)return z(`${Ix(await t.info(e.handle))}\n`);let n=e.info,a=Pr();if(!a)return B(`request: Web Serial unavailable for port re-acquire`);let o=(await a.getPorts()).find(e=>{let t=typeof e.getInfo==`function`?e.getInfo():{};return(n.usbVendorId===void 0||t.usbVendorId===n.usbVendorId)&&(n.usbProductId===void 0||t.usbProductId===n.usbProductId)});if(!o)return B(`request: granted port could not be re-acquired`);let s=Br(),c=s.register(o),l=s.get(c);return l?z(`${Ix(Nr(c,l))}\n`):B(`request: failed to register granted port`)}return z(`${Ix(await t.request(r))}\n`)}async function Hx(e,t,n){let r=e[1];return r?(await n.open(r,kx(t)),z(``)):B(`open: handle required`)}async function Ux(e,t){let n=e[1];return n?(await t.close(n),z(``)):B(`close: handle required`)}async function Wx(e,t,n,r){let i=e[1];if(!i)return B(`read: handle required`);let a=Ax(t);return a.maxBytes!==void 0&&a.maxBytes>4194304?B(`read --bytes exceeds 4 MiB limit`):zx(await r.read(i,a),n.has(`--hex`))}async function Gx(e,t,n){let r=e[1];if(!r)return B(`write: handle required`);let i=Nx(t);return i.length>4194304?B(`write payload exceeds 4 MiB limit`):z(`${await n.write(r,i)} bytes written\n`)}async function Kx(e,t,n){let[,r,i]=e;return!r||!i?B(`signals: handle and get|set required`):i===`get`?z(Lx(await n.getSignals(r))):i===`set`?(await n.setSignals(r,Mx(t)),z(``)):B(`signals: unknown action '${i}' (use get|set)`)}async function qx(e,t,n){let{positionals:r,flags:i,bools:a}=wx(e),o=r[0];switch(o){case`list`:return Bx(n);case`request`:return Vx(i,n);case`open`:return Hx(r,i,n);case`close`:return Ux(r,n);case`read`:return Wx(r,i,a,n);case`write`:return Gx(r,t,n);case`signals`:return Kx(r,i,n);default:return B(`unknown subcommand '${o??``}'. Try 'serial --help'.`)}}function Jx(){return S(`serial`,async(e,t)=>{if(e.length===0||e.includes(`--help`)||e.includes(`-h`))return z(Rx);let n=Lr(se(),y());if(!n)return B(`Web Serial is unavailable in this environment`);try{return await qx(e,t,n)}catch(e){let t=e instanceof Error?e.message:String(e);return/cancelled|NotFoundError|No port selected/i.test(t)?B(`user cancelled or no port selected`):B(t)}})}const Yx=new Set([`--port`,`--baud`,`--vid`,`--pid`]),Xx=115200;function Zx(e){return vn(e,Yx)}function Qx(e){let t=e.replace(/-/g,`_`);return t===`chip_info`||t===`id`?`chip_id`:t}function $x(e){return{stdout:e,stderr:``,exitCode:0}}function eS(e){return{stdout:``,stderr:`esptool: ${e}\n`,exitCode:1}}const tS=`esptool - flash ESP32 / ESP8266 chips via esptool-js
|
|
869
869
|
|
|
870
870
|
Usage: esptool [--port H] [--baud N] <subcommand> [args]
|
|
871
871
|
|
|
@@ -889,16 +889,16 @@ Options:
|
|
|
889
889
|
-h, --help
|
|
890
890
|
|
|
891
891
|
Without --port, the Web Serial picker opens (needs a user gesture).
|
|
892
|
-
`;async function nS(e,t){return e.get(`--port`)||(await t.request(Ex(e))).handle}async function rS(e,t){let n=e.slice(1);if(n.length===0||n.length%2!=0)throw Error(`write_flash expects <addr> <file> pairs`);let r=[];for(let e=0;e<n.length;e+=2){let i=
|
|
892
|
+
`;async function nS(e,t){return e.get(`--port`)||(await t.request(Ex(e))).handle}async function rS(e,t){let n=e.slice(1);if(n.length===0||n.length%2!=0)throw Error(`write_flash expects <addr> <file> pairs`);let r=[];for(let e=0;e<n.length;e+=2){let i=R(n[e],`address`),a=t.fs.resolvePath(t.cwd,n[e+1]),o=await t.fs.readFileBuffer(a);r.push({address:i,data:o})}return r}async function iS(e,t,n,r){let{positionals:i,flags:a,bools:o}=Zx(e),s=Qx(i[0]??``),c=a.has(`--baud`)?R(a.get(`--baud`),`baud`):Xx,l=[],u=e=>l.push(e);switch(s){case`chip_id`:{let e=await nS(a,r),t=await n.chipInfo(e,c,u);return l.push(`Chip type: ${t.chip}`),l.push(`Chip description: ${t.description}`),l.push(`Features: ${t.features.join(`, `)}`),l.push(`Crystal: ${t.crystalMHz}MHz`),l.push(`MAC: ${t.mac}`),$x(`${l.join(`
|
|
893
893
|
`)}\n`)}case`read_mac`:{let e=await nS(a,r),{mac:t}=await n.readMac(e,c,u);return l.push(`MAC: ${t}`),$x(`${l.join(`
|
|
894
894
|
`)}\n`)}case`erase_flash`:{let e=await nS(a,r);return await n.eraseFlash(e,c,u),$x(l.length?`${l.join(`
|
|
895
895
|
`)}\n`:`flash erased
|
|
896
896
|
`)}case`write_flash`:{let e=await rS(i,t),s=await nS(a,r);return await n.flash(s,c,o.has(`--erase`),e,u),$x(l.length?`${l.join(`
|
|
897
897
|
`)}\n`:`flash written
|
|
898
|
-
`)}case`read_flash`:{if(i.length<4)return eS(`read_flash expects <addr> <size> <outfile>`);let e=
|
|
899
|
-
`)}\n`)}case`read_reg`:{if(i.length<2)return eS(`read_reg expects <addr>`);let e=
|
|
898
|
+
`)}case`read_flash`:{if(i.length<4)return eS(`read_flash expects <addr> <size> <outfile>`);let e=R(i[1],`address`),o=R(i[2],`size`),s=t.fs.resolvePath(t.cwd,i[3]),d=await nS(a,r),f=await n.readFlash(d,c,e,o,u);return await t.fs.writeFile(s,f),l.push(`Wrote ${f.byteLength} bytes to ${s}`),$x(`${l.join(`
|
|
899
|
+
`)}\n`)}case`read_reg`:{if(i.length<2)return eS(`read_reg expects <addr>`);let e=R(i[1],`address`),t=await nS(a,r),{value:o}=await n.readReg(t,c,e,u);return l.push(`0x${e.toString(16)} = 0x${(o>>>0).toString(16).padStart(8,`0`)}`),$x(`${l.join(`
|
|
900
900
|
`)}\n`)}case`flash_id`:{let e=await nS(a,r),t=await n.flashId(e,c,u);return l.push(`Manufacturer: 0x${t.manufacturer.toString(16).padStart(2,`0`)}`),l.push(`Device: 0x${t.device.toString(16).padStart(4,`0`)}`),l.push(`Detected flash size: ${t.flashSize??`unknown`}`),$x(`${l.join(`
|
|
901
|
-
`)}\n`)}case`erase_region`:{if(i.length<3)return eS(`erase_region expects <addr> <size>`);let e=
|
|
901
|
+
`)}\n`)}case`erase_region`:{if(i.length<3)return eS(`erase_region expects <addr> <size>`);let e=R(i[1],`address`),t=R(i[2],`size`),o=await nS(a,r);return await n.eraseRegion(o,c,e,t,u),$x(l.length?`${l.join(`
|
|
902
902
|
`)}\n`:`region erased
|
|
903
903
|
`)}case`run`:{let e=await nS(a,r);return await n.run(e,c,u),$x(l.length?`${l.join(`
|
|
904
904
|
`)}\n`:`running app
|
|
@@ -915,7 +915,7 @@ Options:
|
|
|
915
915
|
--pattern <glob> File pattern to match, e.g. "*.md", "*.bsh" (required)
|
|
916
916
|
--scoop <target> Scoop name, cone name, or folder. Omit for your own cone.
|
|
917
917
|
--name <name> Human-readable name for the watcher
|
|
918
|
-
`);switch(n){case`list`:return pS(e);case`delete`:return mS(e);case`create`:return await _S(e,t.env);default:return dS(`unknown command: ${n}`)}})}function yS(e){return S(`gelatiere`,async(t,n)=>{let{runGelatiere:r}=await import(`./run-
|
|
918
|
+
`);switch(n){case`list`:return pS(e);case`delete`:return mS(e);case`create`:return await _S(e,t.env);default:return dS(`unknown command: ${n}`)}})}function yS(e){return S(`gelatiere`,async(t,n)=>{let{runGelatiere:r}=await import(`./run-BRuN-148.js`);return r(t,n,e)})}function bS(e){return typeof e.stdoutIsTTY!=`boolean`||e.stdoutIsTTY}function xS(e,t){return typeof e.stdinIsTTY==`boolean`?e.stdinIsTTY:t===void 0?ei(e.stdin).length===0:t===0}function SS(){return{stdout:`usage: hear [-i file] [-l lang] [-T seconds] [-d deviceId] [--engine name]
|
|
919
919
|
hear --devices | --status | --warmup
|
|
920
920
|
|
|
921
921
|
Speech recognition: listens on the microphone until you pause, then
|
|
@@ -1169,7 +1169,7 @@ Options:
|
|
|
1169
1169
|
url: window.location.href,
|
|
1170
1170
|
title: document.title || '',
|
|
1171
1171
|
bodySnippet: document.body?.innerText?.replace(/\\s+/g, ' ').trim().slice(0, 500) || '(empty)',
|
|
1172
|
-
}))()`);if(typeof t!=`string`||t.length===0)return{url:``,title:``,bodySnippet:`(unavailable)`};try{let e=JSON.parse(t);return{url:typeof e.url==`string`?e.url:``,title:typeof e.title==`string`?e.title:``,bodySnippet:typeof e.bodySnippet==`string`&&e.bodySnippet.length>0?e.bodySnippet:`(empty)`}}catch{return{url:``,title:``,bodySnippet:`(unparseable)`}}}function tw(e){return/callback|authorize\/resume|error/i.test(e)}async function nw(e,t,n){try{let r=await ew(e),i=`${n}:${r.url}:${r.title}`;if(t.lastFollowerDiagnosticKey===i)return;t.lastFollowerDiagnosticKey=i,VC.debug(`Teleport follower diagnostics`,{reason:n,url:r.url,title:r.title,bodySnippet:r.bodySnippet})}catch(e){VC.warn(`Could not capture teleport follower diagnostics`,{reason:n,error:String(e)})}}async function rw(e,t,n){let r=t.followerStorageScript;if(r){t.followerStorageScript=null;try{await e.withTab(r.targetId,e=>$C(e,r,`follower`)),VC.info(`Removed follower teleport storage init script`,{reason:n})}catch(e){VC.warn(`Failed to remove follower teleport storage init script`,{reason:n,error:String(e)})}}}function iw(e){return Array.isArray(e)?e:[]}const H=e(`playwright-teleport`);let aw=null,ow=null;function sw(e){aw=e}function cw(e){ow=e}function lw(){return ow?.()??null}async function uw(e,t){if(H.warn(`Teleport timed out`,{timeoutMs:t.timeoutMs,phase:t.phase}),H.debug(`Teleport timeout details`,{timeoutMs:t.timeoutMs,phase:t.phase,followerTargetId:t.followerTargetId}),t.phase=`timedOut`,t.followerTargetId){try{await e.withTab(t.followerTargetId,e=>nw(e,t,`timeout`))}catch(e){H.warn(`Could not attach to follower for timeout diagnostics`,{error:String(e)})}await rw(e,t,`timeout`)}if(dw(t),t.followerTargetId)try{await e.closePage(t.followerTargetId)}catch(e){H.warn(`Failed to close follower tab after timeout`,{error:String(e)})}t.rejectBlock?.(Error(`Teleport timed out after ${Math.round(t.timeoutMs/1e3)}s — human did not complete auth`))}function dw(e){H.info(`Cleaning up teleport watcher`,{phase:e.phase,hadPoll:!!e.pollInterval,hadTimeout:!!e.timeoutTimer,hadListener:!!e.cleanupListener}),e.pollInterval&&=(clearInterval(e.pollInterval),void 0),e.timeoutTimer&&=(clearTimeout(e.timeoutTimer),void 0),e.cleanupListener&&=(e.cleanupListener(),void 0)}function fw(e,t,n,r,i,a,o,s){if(a===`preview`)throw Error(`cannot teleport to a preview target (no Network.*)`);H.info(`Arming teleport watcher`,{timeoutMs:i,runtimeSelection:a?`explicit`:`auto`}),H.debug(`Arming teleport watcher details`,{startPattern:n.source,returnPattern:r.source,timeoutMs:i,runtimeId:a??`auto`,originalUrl:o});let c={startPattern:n,returnPattern:r,timeoutMs:i,runtimeId:a,phase:`armed`,leaderTargetId:s,originalLeaderUrl:o};return c.completionPromise=new Promise((e,t)=>{c.resolveBlock=e,c.rejectBlock=t}),c.completionPromise.catch(()=>{}),c.pollInterval=setInterval(()=>{(async()=>{if(c.phase!==`armed`)return;let r=c.leaderTargetId;if(r)try{let i=await e.withTab(r,e=>e.evaluate(`window.location.href`)),a=typeof i==`string`?i:String(i);H.debug(`Polling leader tab URL`,{targetId:r,href:a,startPattern:n.source}),n.test(a)&&(H.info(`Teleport start pattern matched on leader`),H.debug(`Teleport start pattern matched on leader details`,{targetId:r,href:a,startPattern:n.source}),mw(e,t,c,a).catch(e=>{H.error(`Unhandled teleport trigger error`,{error:String(e)})}))}catch(e){H.warn(`Error polling leader tab URL`,{targetId:r,error:String(e)})}})().catch(e=>{H.warn(`Leader teleport poll failed`,{error:String(e)})})},1e3),s&&t.teleportWatchers.set(s,c),c}async function pw(e,t,n,r,i){if(n.phase===`waitingForAuth`||n.phase===`waitingForReturn`)try{let a=await e.withTab(r,e=>e.evaluate(`window.location.href`)),o=typeof a==`string`?a:String(a);if(!o)return;if(n.lastFollowerUrl!==o&&(n.lastFollowerUrl=o,H.debug(`Follower teleport navigation`,{href:o,phase:n.phase})),n.phase===`waitingForAuth`){n.startPattern.test(o)?(n.phase=`waitingForReturn`,H.info(`Follower reached auth provider; waiting for return pattern`),H.debug(`Follower reached auth provider details`,{href:o,startPattern:n.startPattern.source})):H.debug(`Waiting for auth redirect on follower`,{href:o,startPattern:n.startPattern.source});return}H.debug(`Polling follower tab URL for return`,{href:o,returnPattern:n.returnPattern.source}),tw(o)&&await e.withTab(r,e=>nw(e,n,`waiting-for-return`)),n.returnPattern.test(o)&&(H.info(`Follower return pattern matched after auth`),H.debug(`Follower return pattern matched after auth details`,{href:o,returnPattern:n.returnPattern.source}),yw(e,t,n,i).catch(e=>{H.error(`Unhandled teleport capture error`,{error:String(e)})}))}catch(e){H.warn(`Error polling follower tab URL`,{error:String(e)})}}async function mw(e,t,n,r){if(n.phase===`armed`){n.phase=`teleporting`,H.info(`Teleport triggered`),H.debug(`Teleport trigger details`,{triggerUrl:r}),n.pollInterval&&=(clearInterval(n.pollInterval),void 0);try{let i=n.leaderTargetId;if(!i)throw Error(`teleport has no leader tab to capture from`);let a=[],o=HC;try{a=iw((await e.withTab(i,e=>e.send(`Network.getCookies`,{}))).cookies),H.info(`Captured leader cookies for follower`,{count:a.length})}catch(e){H.warn(`Could not capture leader cookies`,{error:String(e)})}try{o=await e.withTab(i,e=>JC(e,`leader`)),H.info(`Captured leader storage for follower`,{totalEntries:WC(o),localStorageCount:Object.keys(o.localStorage).length,sessionStorageCount:Object.keys(o.sessionStorage).length}),H.debug(`Captured leader storage for follower details`,{origin:o.origin||`(unknown)`,localStorageCount:Object.keys(o.localStorage).length,sessionStorageCount:Object.keys(o.sessionStorage).length})}catch(e){H.warn(`Could not capture leader storage`,{error:String(e)})}let s=n.runtimeId;if(!s){let e=aw?.();if(!e)throw Error(`No follower selection available — not connected to a tray`);let t=e();if(!t)throw Error(`No followers connected to teleport to`);s=t.runtimeId}H.info(`Selected follower for teleport`),H.debug(`Selected follower for teleport details`,{runtimeId:s});let c=await e.createRemotePage(s,`about:blank`),l=c.includes(`:`)?c:`${s}:${c}`;n.followerTargetId=l,H.info(`Opened follower tab for teleport`),H.debug(`Opened follower tab for teleport details`,{followerTargetId:l});let u=r;await e.withTab(l,async e=>{if(await e.send(`Page.enable`),a.length>0)try{await e.send(`Network.setCookies`,{cookies:a}),H.info(`Injected leader cookies into follower`,{count:a.length})}catch(e){H.warn(`Could not inject leader cookies into follower`,{error:String(e)})}n.followerStorageScript=await QC(e,o,`follower`),H.info(`Navigating follower to intercepted auth URL`),H.debug(`Navigating follower to intercepted auth URL details`,{url:u,originalLeaderUrl:n.originalLeaderUrl,triggerUrl:r,storageOrigin:o.origin||`(unknown)`}),await e.send(`Page.navigate`,{url:u})}),H.info(`Starting teleport timeout timer`,{timeoutMs:n.timeoutMs}),n.timeoutTimer=setTimeout(()=>{(n.phase===`teleporting`||n.phase===`waitingForAuth`||n.phase===`waitingForReturn`)&&uw(e,n).catch(e=>{H.error(`Teleport timeout handler failed`,{error:String(e)})})},n.timeoutMs),n.phase=`waitingForAuth`,H.info(`Teleport waiting for follower auth redirect`),H.debug(`Teleport waiting for follower auth redirect details`,{startPattern:n.startPattern.source}),n.pollInterval=setInterval(()=>{pw(e,t,n,l,s).catch(e=>{H.warn(`Follower teleport poll failed`,{error:String(e)})})},1e3)}catch(t){H.error(`Teleport trigger failed`,{error:String(t)}),await rw(e,n,`trigger-error`),n.phase=`done`,dw(n),n.rejectBlock?.(t instanceof Error?t:Error(String(t)))}}}async function hw(e,t){H.info(`Waiting for redirect chain to settle (2s)`),await new Promise(e=>setTimeout(e,2e3));let n=t.followerTargetId,r=t.followerStorageScript??null;t.followerStorageScript=null;let{cookies:i,followerStorage:a,finalUrl:o}=await e.withTab(n,async e=>{let n;try{let t=await e.evaluate(`window.location.href`);n=typeof t==`string`?t:String(t),H.debug(`Captured final URL from follower`,{finalUrl:n})}catch(e){H.warn(`Could not read follower URL (may be mid-navigation)`,{error:String(e)})}try{let t=await e.evaluate(`document.body?.innerText?.substring(0, 500) || "(empty)"`);H.debug(`Follower page content at capture time`,{bodyText:t})}catch(e){H.warn(`Could not read follower page content`,{error:String(e)})}let i=iw((await e.send(`Network.getCookies`)).cookies),a=i.length>0?UC(i):`none`;H.info(`Captured cookies from follower`,{count:i.length}),H.debug(`Captured cookies from follower details`,{count:i.length,domains:a});let o=HC;try{o=await JC(e,`follower`),H.info(`Captured follower storage for leader`,{totalEntries:WC(o),localStorageCount:Object.keys(o.localStorage).length,sessionStorageCount:Object.keys(o.sessionStorage).length}),H.debug(`Captured follower storage for leader details`,{origin:o.origin||`(unknown)`,localStorageCount:Object.keys(o.localStorage).length,sessionStorageCount:Object.keys(o.sessionStorage).length})}catch(e){H.warn(`Could not capture follower storage`,{error:String(e)})}return await nw(e,t,`capture`),await $C(e,r,`follower`),{cookies:i,followerStorage:o,finalUrl:n}});try{await e.closePage(t.followerTargetId),H.info(`Closed follower tab after teleport`),H.debug(`Closed follower tab after teleport details`,{followerTargetId:t.followerTargetId})}catch(e){H.warn(`Failed to close follower tab`,{error:String(e)})}return{cookies:i,followerStorage:a,finalUrl:o}}async function gw(e,t,n,r){try{await e.navigate(n),await ZC(e,t,`leader`),r&&r!==n&&await e.navigate(r)}catch(i){H.warn(`Direct leader origin hydration failed, falling back to init-script replay`,{error:String(i)}),H.debug(`Direct leader origin hydration fallback details`,{hydrationUrl:n,landingUrl:r,error:String(i)});let a=await QC(e,t,`leader`);try{r&&await e.navigate(r)}finally{await $C(e,a,`leader`)}}}async function _w(e,t,n,r,i){let a=e.targetId,o=await QC(e,n,`leader`);try{r&&(H.info(`Navigating leader after auth-state injection`,{hasLandingUrl:!0,storageEntries:WC(n)}),H.debug(`Navigating leader after auth-state injection details`,{landingUrl:r,originalLeaderUrl:t.originalLeaderUrl,finalUrl:i,leaderTargetId:a,storageOrigin:n.origin||`(unknown)`,storageEntries:WC(n)}),await e.navigate(r))}finally{await $C(e,o,`leader`)}}async function vw(e,t,n,r,i){let a=t.leaderTargetId,o=r.origin||``,s=qC(o,t.originalLeaderUrl,i),c=GC(t.originalLeaderUrl),l=!!o&&c!==o,u=l?KC(o):null;return a?(await e.withTab(a,async e=>{n.length>0&&(await e.send(`Network.setCookies`,{cookies:n}),H.info(`Injected cookies into leader tab`,{count:n.length}),H.debug(`Injected cookies into leader tab details`,{count:n.length,leaderTargetId:a})),l&&u?(H.info(`Hydrating leader storage origin before landing`,{storageEntries:WC(r)}),H.debug(`Hydrating leader storage origin before landing details`,{hydrationUrl:u,landingUrl:s,originalLeaderUrl:t.originalLeaderUrl,finalUrl:i,leaderTargetId:a,storageOrigin:o,storageEntries:WC(r)}),await gw(e,r,u,s)):await _w(e,t,r,s,i)}),s):(H.warn(`No leader tab available for auth-state injection`),s)}async function yw(e,t,n,r){if(n.phase===`teleporting`||n.phase===`waitingForReturn`){n.phase=`capturing`,H.info(`Capturing auth state from follower`),H.debug(`Capturing auth state from follower details`,{followerTargetId:n.followerTargetId,runtimeId:r}),n.pollInterval&&=(clearInterval(n.pollInterval),void 0),n.timeoutTimer&&=(clearTimeout(n.timeoutTimer),void 0);try{let{cookies:t,followerStorage:i,finalUrl:a}=await hw(e,n),o=WC(i),s=await vw(e,n,t,i,a);n.phase=`done`,dw(n);let c=t.length>0?` (${UC(t)})`:``,l=o>0?` + ${o} storage entr${o===1?`y`:`ies`}`:``,u=s?` (navigated to ${s})`:``,d=`Teleported ${t.length} cookie(s)${c}${l} from ${r}${u}`;H.info(`Teleport completed successfully`,{cookieCount:t.length,storageEntries:o,landed:!!s}),H.debug(`Teleport completed successfully details`,{result:d}),n.resolveBlock?.(d)}catch(t){H.error(`Teleport auth-state capture failed`,{error:String(t)}),await rw(e,n,`capture-error`),n.phase=`done`,dw(n),n.rejectBlock?.(t instanceof Error?t:Error(String(t)))}}}const bw=e(`playwright`),xw=async({browser:e,fs:t,state:n,positional:r,flags:i,onTab:a})=>{if(r.length===0)return{stdout:``,stderr:`goto requires a URL
|
|
1172
|
+
}))()`);if(typeof t!=`string`||t.length===0)return{url:``,title:``,bodySnippet:`(unavailable)`};try{let e=JSON.parse(t);return{url:typeof e.url==`string`?e.url:``,title:typeof e.title==`string`?e.title:``,bodySnippet:typeof e.bodySnippet==`string`&&e.bodySnippet.length>0?e.bodySnippet:`(empty)`}}catch{return{url:``,title:``,bodySnippet:`(unparseable)`}}}function tw(e){return/callback|authorize\/resume|error/i.test(e)}async function nw(e,t,n){try{let r=await ew(e),i=`${n}:${r.url}:${r.title}`;if(t.lastFollowerDiagnosticKey===i)return;t.lastFollowerDiagnosticKey=i,VC.debug(`Teleport follower diagnostics`,{reason:n,url:r.url,title:r.title,bodySnippet:r.bodySnippet})}catch(e){VC.warn(`Could not capture teleport follower diagnostics`,{reason:n,error:String(e)})}}async function rw(e,t,n){let r=t.followerStorageScript;if(r){t.followerStorageScript=null;try{await e.withTab(r.targetId,e=>$C(e,r,`follower`)),VC.info(`Removed follower teleport storage init script`,{reason:n})}catch(e){VC.warn(`Failed to remove follower teleport storage init script`,{reason:n,error:String(e)})}}}function iw(e){return Array.isArray(e)?e:[]}const V=e(`playwright-teleport`);let aw=null,ow=null;function sw(e){aw=e}function cw(e){ow=e}function lw(){return ow?.()??null}async function uw(e,t){if(V.warn(`Teleport timed out`,{timeoutMs:t.timeoutMs,phase:t.phase}),V.debug(`Teleport timeout details`,{timeoutMs:t.timeoutMs,phase:t.phase,followerTargetId:t.followerTargetId}),t.phase=`timedOut`,t.followerTargetId){try{await e.withTab(t.followerTargetId,e=>nw(e,t,`timeout`))}catch(e){V.warn(`Could not attach to follower for timeout diagnostics`,{error:String(e)})}await rw(e,t,`timeout`)}if(dw(t),t.followerTargetId)try{await e.closePage(t.followerTargetId)}catch(e){V.warn(`Failed to close follower tab after timeout`,{error:String(e)})}t.rejectBlock?.(Error(`Teleport timed out after ${Math.round(t.timeoutMs/1e3)}s — human did not complete auth`))}function dw(e){V.info(`Cleaning up teleport watcher`,{phase:e.phase,hadPoll:!!e.pollInterval,hadTimeout:!!e.timeoutTimer,hadListener:!!e.cleanupListener}),e.pollInterval&&=(clearInterval(e.pollInterval),void 0),e.timeoutTimer&&=(clearTimeout(e.timeoutTimer),void 0),e.cleanupListener&&=(e.cleanupListener(),void 0)}function fw(e,t,n,r,i,a,o,s){if(a===`preview`)throw Error(`cannot teleport to a preview target (no Network.*)`);V.info(`Arming teleport watcher`,{timeoutMs:i,runtimeSelection:a?`explicit`:`auto`}),V.debug(`Arming teleport watcher details`,{startPattern:n.source,returnPattern:r.source,timeoutMs:i,runtimeId:a??`auto`,originalUrl:o});let c={startPattern:n,returnPattern:r,timeoutMs:i,runtimeId:a,phase:`armed`,leaderTargetId:s,originalLeaderUrl:o};return c.completionPromise=new Promise((e,t)=>{c.resolveBlock=e,c.rejectBlock=t}),c.completionPromise.catch(()=>{}),c.pollInterval=setInterval(()=>{(async()=>{if(c.phase!==`armed`)return;let r=c.leaderTargetId;if(r)try{let i=await e.withTab(r,e=>e.evaluate(`window.location.href`)),a=typeof i==`string`?i:String(i);V.debug(`Polling leader tab URL`,{targetId:r,href:a,startPattern:n.source}),n.test(a)&&(V.info(`Teleport start pattern matched on leader`),V.debug(`Teleport start pattern matched on leader details`,{targetId:r,href:a,startPattern:n.source}),mw(e,t,c,a).catch(e=>{V.error(`Unhandled teleport trigger error`,{error:String(e)})}))}catch(e){V.warn(`Error polling leader tab URL`,{targetId:r,error:String(e)})}})().catch(e=>{V.warn(`Leader teleport poll failed`,{error:String(e)})})},1e3),s&&t.teleportWatchers.set(s,c),c}async function pw(e,t,n,r,i){if(n.phase===`waitingForAuth`||n.phase===`waitingForReturn`)try{let a=await e.withTab(r,e=>e.evaluate(`window.location.href`)),o=typeof a==`string`?a:String(a);if(!o)return;if(n.lastFollowerUrl!==o&&(n.lastFollowerUrl=o,V.debug(`Follower teleport navigation`,{href:o,phase:n.phase})),n.phase===`waitingForAuth`){n.startPattern.test(o)?(n.phase=`waitingForReturn`,V.info(`Follower reached auth provider; waiting for return pattern`),V.debug(`Follower reached auth provider details`,{href:o,startPattern:n.startPattern.source})):V.debug(`Waiting for auth redirect on follower`,{href:o,startPattern:n.startPattern.source});return}V.debug(`Polling follower tab URL for return`,{href:o,returnPattern:n.returnPattern.source}),tw(o)&&await e.withTab(r,e=>nw(e,n,`waiting-for-return`)),n.returnPattern.test(o)&&(V.info(`Follower return pattern matched after auth`),V.debug(`Follower return pattern matched after auth details`,{href:o,returnPattern:n.returnPattern.source}),yw(e,t,n,i).catch(e=>{V.error(`Unhandled teleport capture error`,{error:String(e)})}))}catch(e){V.warn(`Error polling follower tab URL`,{error:String(e)})}}async function mw(e,t,n,r){if(n.phase===`armed`){n.phase=`teleporting`,V.info(`Teleport triggered`),V.debug(`Teleport trigger details`,{triggerUrl:r}),n.pollInterval&&=(clearInterval(n.pollInterval),void 0);try{let i=n.leaderTargetId;if(!i)throw Error(`teleport has no leader tab to capture from`);let a=[],o=HC;try{a=iw((await e.withTab(i,e=>e.send(`Network.getCookies`,{}))).cookies),V.info(`Captured leader cookies for follower`,{count:a.length})}catch(e){V.warn(`Could not capture leader cookies`,{error:String(e)})}try{o=await e.withTab(i,e=>JC(e,`leader`)),V.info(`Captured leader storage for follower`,{totalEntries:WC(o),localStorageCount:Object.keys(o.localStorage).length,sessionStorageCount:Object.keys(o.sessionStorage).length}),V.debug(`Captured leader storage for follower details`,{origin:o.origin||`(unknown)`,localStorageCount:Object.keys(o.localStorage).length,sessionStorageCount:Object.keys(o.sessionStorage).length})}catch(e){V.warn(`Could not capture leader storage`,{error:String(e)})}let s=n.runtimeId;if(!s){let e=aw?.();if(!e)throw Error(`No follower selection available — not connected to a tray`);let t=e();if(!t)throw Error(`No followers connected to teleport to`);s=t.runtimeId}V.info(`Selected follower for teleport`),V.debug(`Selected follower for teleport details`,{runtimeId:s});let c=await e.createRemotePage(s,`about:blank`),l=c.includes(`:`)?c:`${s}:${c}`;n.followerTargetId=l,V.info(`Opened follower tab for teleport`),V.debug(`Opened follower tab for teleport details`,{followerTargetId:l});let u=r;await e.withTab(l,async e=>{if(await e.send(`Page.enable`),a.length>0)try{await e.send(`Network.setCookies`,{cookies:a}),V.info(`Injected leader cookies into follower`,{count:a.length})}catch(e){V.warn(`Could not inject leader cookies into follower`,{error:String(e)})}n.followerStorageScript=await QC(e,o,`follower`),V.info(`Navigating follower to intercepted auth URL`),V.debug(`Navigating follower to intercepted auth URL details`,{url:u,originalLeaderUrl:n.originalLeaderUrl,triggerUrl:r,storageOrigin:o.origin||`(unknown)`}),await e.send(`Page.navigate`,{url:u})}),V.info(`Starting teleport timeout timer`,{timeoutMs:n.timeoutMs}),n.timeoutTimer=setTimeout(()=>{(n.phase===`teleporting`||n.phase===`waitingForAuth`||n.phase===`waitingForReturn`)&&uw(e,n).catch(e=>{V.error(`Teleport timeout handler failed`,{error:String(e)})})},n.timeoutMs),n.phase=`waitingForAuth`,V.info(`Teleport waiting for follower auth redirect`),V.debug(`Teleport waiting for follower auth redirect details`,{startPattern:n.startPattern.source}),n.pollInterval=setInterval(()=>{pw(e,t,n,l,s).catch(e=>{V.warn(`Follower teleport poll failed`,{error:String(e)})})},1e3)}catch(t){V.error(`Teleport trigger failed`,{error:String(t)}),await rw(e,n,`trigger-error`),n.phase=`done`,dw(n),n.rejectBlock?.(t instanceof Error?t:Error(String(t)))}}}async function hw(e,t){V.info(`Waiting for redirect chain to settle (2s)`),await new Promise(e=>setTimeout(e,2e3));let n=t.followerTargetId,r=t.followerStorageScript??null;t.followerStorageScript=null;let{cookies:i,followerStorage:a,finalUrl:o}=await e.withTab(n,async e=>{let n;try{let t=await e.evaluate(`window.location.href`);n=typeof t==`string`?t:String(t),V.debug(`Captured final URL from follower`,{finalUrl:n})}catch(e){V.warn(`Could not read follower URL (may be mid-navigation)`,{error:String(e)})}try{let t=await e.evaluate(`document.body?.innerText?.substring(0, 500) || "(empty)"`);V.debug(`Follower page content at capture time`,{bodyText:t})}catch(e){V.warn(`Could not read follower page content`,{error:String(e)})}let i=iw((await e.send(`Network.getCookies`)).cookies),a=i.length>0?UC(i):`none`;V.info(`Captured cookies from follower`,{count:i.length}),V.debug(`Captured cookies from follower details`,{count:i.length,domains:a});let o=HC;try{o=await JC(e,`follower`),V.info(`Captured follower storage for leader`,{totalEntries:WC(o),localStorageCount:Object.keys(o.localStorage).length,sessionStorageCount:Object.keys(o.sessionStorage).length}),V.debug(`Captured follower storage for leader details`,{origin:o.origin||`(unknown)`,localStorageCount:Object.keys(o.localStorage).length,sessionStorageCount:Object.keys(o.sessionStorage).length})}catch(e){V.warn(`Could not capture follower storage`,{error:String(e)})}return await nw(e,t,`capture`),await $C(e,r,`follower`),{cookies:i,followerStorage:o,finalUrl:n}});try{await e.closePage(t.followerTargetId),V.info(`Closed follower tab after teleport`),V.debug(`Closed follower tab after teleport details`,{followerTargetId:t.followerTargetId})}catch(e){V.warn(`Failed to close follower tab`,{error:String(e)})}return{cookies:i,followerStorage:a,finalUrl:o}}async function gw(e,t,n,r){try{await e.navigate(n),await ZC(e,t,`leader`),r&&r!==n&&await e.navigate(r)}catch(i){V.warn(`Direct leader origin hydration failed, falling back to init-script replay`,{error:String(i)}),V.debug(`Direct leader origin hydration fallback details`,{hydrationUrl:n,landingUrl:r,error:String(i)});let a=await QC(e,t,`leader`);try{r&&await e.navigate(r)}finally{await $C(e,a,`leader`)}}}async function _w(e,t,n,r,i){let a=e.targetId,o=await QC(e,n,`leader`);try{r&&(V.info(`Navigating leader after auth-state injection`,{hasLandingUrl:!0,storageEntries:WC(n)}),V.debug(`Navigating leader after auth-state injection details`,{landingUrl:r,originalLeaderUrl:t.originalLeaderUrl,finalUrl:i,leaderTargetId:a,storageOrigin:n.origin||`(unknown)`,storageEntries:WC(n)}),await e.navigate(r))}finally{await $C(e,o,`leader`)}}async function vw(e,t,n,r,i){let a=t.leaderTargetId,o=r.origin||``,s=qC(o,t.originalLeaderUrl,i),c=GC(t.originalLeaderUrl),l=!!o&&c!==o,u=l?KC(o):null;return a?(await e.withTab(a,async e=>{n.length>0&&(await e.send(`Network.setCookies`,{cookies:n}),V.info(`Injected cookies into leader tab`,{count:n.length}),V.debug(`Injected cookies into leader tab details`,{count:n.length,leaderTargetId:a})),l&&u?(V.info(`Hydrating leader storage origin before landing`,{storageEntries:WC(r)}),V.debug(`Hydrating leader storage origin before landing details`,{hydrationUrl:u,landingUrl:s,originalLeaderUrl:t.originalLeaderUrl,finalUrl:i,leaderTargetId:a,storageOrigin:o,storageEntries:WC(r)}),await gw(e,r,u,s)):await _w(e,t,r,s,i)}),s):(V.warn(`No leader tab available for auth-state injection`),s)}async function yw(e,t,n,r){if(n.phase===`teleporting`||n.phase===`waitingForReturn`){n.phase=`capturing`,V.info(`Capturing auth state from follower`),V.debug(`Capturing auth state from follower details`,{followerTargetId:n.followerTargetId,runtimeId:r}),n.pollInterval&&=(clearInterval(n.pollInterval),void 0),n.timeoutTimer&&=(clearTimeout(n.timeoutTimer),void 0);try{let{cookies:t,followerStorage:i,finalUrl:a}=await hw(e,n),o=WC(i),s=await vw(e,n,t,i,a);n.phase=`done`,dw(n);let c=t.length>0?` (${UC(t)})`:``,l=o>0?` + ${o} storage entr${o===1?`y`:`ies`}`:``,u=s?` (navigated to ${s})`:``,d=`Teleported ${t.length} cookie(s)${c}${l} from ${r}${u}`;V.info(`Teleport completed successfully`,{cookieCount:t.length,storageEntries:o,landed:!!s}),V.debug(`Teleport completed successfully details`,{result:d}),n.resolveBlock?.(d)}catch(t){V.error(`Teleport auth-state capture failed`,{error:String(t)}),await rw(e,n,`capture-error`),n.phase=`done`,dw(n),n.rejectBlock?.(t instanceof Error?t:Error(String(t)))}}}const bw=e(`playwright`),xw=async({browser:e,fs:t,state:n,positional:r,flags:i,onTab:a})=>{if(r.length===0)return{stdout:``,stderr:`goto requires a URL
|
|
1173
1173
|
`,exitCode:1};let o=j(i);if(`error`in o)return{stdout:``,stderr:o.error,exitCode:1};await a(o.targetId,e=>e.navigate(r[0])),n.snapshots.delete(o.targetId);let s=i[`teleport-start`],c=i[`teleport-return`];if(s&&c){bw.info(`Arming teleport via goto/navigate flags`),bw.debug(`Arming teleport via goto/navigate flags details`,{targetId:o.targetId,startPattern:s,returnPattern:c});let t,a;try{t=new RegExp(s)}catch{return{stdout:``,stderr:`Invalid regex for --teleport-start: ${s}\n`,exitCode:1}}try{a=new RegExp(c)}catch{return{stdout:``,stderr:`Invalid regex for --teleport-return: ${c}\n`,exitCode:1}}let l=i.timeout?parseInt(i.timeout,10):300,u=n.teleportWatchers.get(o.targetId);u&&(dw(u),n.teleportWatchers.delete(o.targetId)),fw(e,n,t,a,l*1e3,i[`teleport-runtime`],r[0],o.targetId)}if(i.discover===`true`){let{browseShWarning:e,...n}=await pC(r[0],{discover:!0,fs:t}),i={action:`navigate`,targetId:o.targetId,source:`auxiliary-fetch`,...n};return{stdout:JSON.stringify(i,null,2)+`
|
|
1174
1174
|
`,stderr:e?`${e}\n`:``,exitCode:0}}return{stdout:`Navigated to ${r[0]}\n`,stderr:``,exitCode:0}},Sw=async({browser:e,state:t,flags:n,onTab:r})=>{let i=j(n);return`error`in i?{stdout:``,stderr:i.error,exitCode:1}:(await r(i.targetId,async e=>{await e.evaluate(`history.back()`)}),t.snapshots.delete(i.targetId),{stdout:`Navigated back
|
|
1175
1175
|
`,stderr:``,exitCode:0})},Cw=async({browser:e,state:t,flags:n,onTab:r})=>{let i=j(n);return`error`in i?{stdout:``,stderr:i.error,exitCode:1}:(await r(i.targetId,async e=>{await e.evaluate(`history.forward()`)}),t.snapshots.delete(i.targetId),{stdout:`Navigated forward
|
|
@@ -1197,56 +1197,56 @@ Options:
|
|
|
1197
1197
|
`,stderr:``,exitCode:0}:{stdout:r.map((e,t)=>`${t+1}. ${e.pattern} → ${e.status} ${e.contentType}`).join(`
|
|
1198
1198
|
`)+`
|
|
1199
1199
|
`,stderr:``,exitCode:0}},qw=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
|
|
1200
|
-
`,stderr:``,exitCode:0}}let a=e.routes.get(r.targetId)??[],o=a.length,s=a.filter(e=>e.pattern!==i);if(e.routes.set(r.targetId,s),s.length===0){let t=e.routeCleanup.get(r.targetId);t&&(t(),e.routeCleanup.delete(r.targetId))}return{stdout:`Removed ${o-s.length} route(s) matching "${i}"\n`,stderr:``,exitCode:0}}
|
|
1201
|
-
`),
|
|
1200
|
+
`,stderr:``,exitCode:0}}let a=e.routes.get(r.targetId)??[],o=a.length,s=a.filter(e=>e.pattern!==i);if(e.routes.set(r.targetId,s),s.length===0){let t=e.routeCleanup.get(r.targetId);t&&(t(),e.routeCleanup.delete(r.targetId))}return{stdout:`Removed ${o-s.length} route(s) matching "${i}"\n`,stderr:``,exitCode:0}},Jw=`/.playwright`;function Yw(e,t){return e?`${t.replace(/\/+$/,``)}${Jw}`:Jw}async function Xw(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(!wn(e))throw e}t.sessionDirsCreated.add(n)}}async function Zw(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 oe(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(`
|
|
1201
|
+
`),p=`${i}/snapshots/page-${Sn(new Date)}.yml`;return await t.writeFile(p,f),p})}catch{return null}}async function Qw(e,t,n,r){await Xw(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(`
|
|
1202
1202
|
`)+`
|
|
1203
|
-
`,
|
|
1204
|
-
`);return t.snapshots.set(n,{url:r.url,title:r.name,refToSelector:a,refToBackendNodeId:o,refToFrameId:s,content:l,timestamp:Date.now()}),l}async function
|
|
1203
|
+
`,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 $w(){return import(`./snapshot-features-Dzfoquou.js`)}async function eT(e,t,n,r){let i=await e.getAccessibilityTreeForFrame(r.frameId),a=new Map,o=new Map,s=new Map,c=ae(i,a,o,{value:0},``,`f1`);for(let e of a.keys())s.set(e,r.frameId);let l=c.join(`
|
|
1204
|
+
`);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 tT(e,t){await e.send(`DOM.enable`),await e.send(`Runtime.enable`);let n=(await e.send(`DOM.resolveNode`,{backendNodeId:t})).object;if(n?.objectId)return(await e.send(`Runtime.callFunctionOn`,{objectId:n.objectId,functionDeclaration:`function() {
|
|
1205
1205
|
this.scrollIntoView({ block: 'center' });
|
|
1206
1206
|
const r = this.getBoundingClientRect();
|
|
1207
1207
|
return { x: r.x + window.scrollX, y: r.y + window.scrollY, width: r.width, height: r.height };
|
|
1208
|
-
}`,returnByValue:!0})).result?.value}async function
|
|
1208
|
+
}`,returnByValue:!0})).result?.value}async function nT(e,t){let n=await e.evaluate(`(function() {
|
|
1209
1209
|
const el = document.querySelector(${JSON.stringify(t.split(`,`)[0].trim())});
|
|
1210
1210
|
if (!el) return null;
|
|
1211
1211
|
el.scrollIntoView({ block: 'center' });
|
|
1212
1212
|
const r = el.getBoundingClientRect();
|
|
1213
1213
|
return JSON.stringify({ x: r.x + window.scrollX, y: r.y + window.scrollY, width: r.width, height: r.height });
|
|
1214
|
-
})()`);return n?Tn(n,`element clip rect`):void 0}async function
|
|
1215
|
-
`,exitCode:1};let u=await i(a.targetId,async e=>{let t=await In(e,r);if(t)return
|
|
1216
|
-
`,stderr:``,exitCode:0}},
|
|
1214
|
+
})()`);return n?Tn(n,`element clip rect`):void 0}async function rT(e,t,n){let r=t.refToBackendNodeId.get(n);if(r)return tT(e,r);let i=t.refToSelector.get(n);if(!i)throw Error(`Unknown ref "${n}"`);return nT(e,i)}const iT=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)
|
|
1215
|
+
`,exitCode:1};let u=await i(a.targetId,async e=>{let t=await In(e,r);if(t)return eT(e,n,a.targetId,t);let{snapshot:i,output:s}=await ne(e,n,a.targetId,{noIframes:o});if(!l)return s;let{annotateBoxes:c}=await $w();return c(e,i.refToBackendNodeId,s)});if(c!==void 0){let{limitSnapshotDepth:e}=await $w();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+`
|
|
1216
|
+
`,stderr:``,exitCode:0}},aT=async e=>{let{findHandlerImpl:t}=await $w();return t(e)},oT=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(`
|
|
1217
1217
|
`)}`)+`
|
|
1218
|
-
`,stderr:``,exitCode:0}},
|
|
1219
|
-
`,exitCode:1}:{stdout:``,stderr:`pdf: ${t}\n`,exitCode:1}}return{stdout:`Saved PDF to ${o}\n`,stderr:``,exitCode:0}};async function
|
|
1220
|
-
`,exitCode:1};let
|
|
1221
|
-
`,stderr:``,exitCode:0}},
|
|
1218
|
+
`,stderr:``,exitCode:0}},sT=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-${Sn(new Date)}.pdf`;try{await i(a.targetId,async({sessionId:e,transport:n})=>{let r=(await n.send(`Page.printToPDF`,{},e)).data,i=Nn(r);await t.writeFile(o,i)})}catch(e){let t=e instanceof Error?e.message:String(e);return _()?{stdout:``,stderr:`pdf: not available in extension mode — use screenshot --full-page
|
|
1219
|
+
`,exitCode:1}:{stdout:``,stderr:`pdf: ${t}\n`,exitCode:1}}return{stdout:`Saved PDF to ${o}\n`,stderr:``,exitCode:0}};async function cT(e,t,n,r){let i=t.snapshots.get(n);if(!i)throw Error(`No snapshot available. Run "snapshot" first.`);let a=await rT(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 lT=new Set([`png`,`jpeg`,`webp`]);function uT(e){let t=e.type;if(t&&lT.has(t))return t;let n=e.filename??``;return/\.jpe?g$/i.test(n)?`jpeg`:/\.webp$/i.test(n)?`webp`:`png`}const dT=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&&!lT.has(i.type))return{stdout:``,stderr:`screenshot: --type must be png, jpeg, or webp, got "${i.type}"\n`,exitCode:1};if(i[`max-width`]&&uT(i)!==`png`)return{stdout:``,stderr:`screenshot: --max-width requires png output (the downscale pass measures PNG headers); drop --type/--filename extension or --max-width
|
|
1220
|
+
`,exitCode:1};let l=await s(c.targetId,async e=>{let s;if(r[0]?.startsWith(`e`)){let t=await cT(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 $w();s=await t(e,s,l)}let u=i[`max-width`]?parseInt(i[`max-width`],10):void 0,d=uT(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=Nn(f);await t.writeFile(m,h);try{await Xw(t,n,o);let e=`${o}/screenshots/screenshot-${Sn(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+`
|
|
1221
|
+
`,stderr:``,exitCode:0}},fT=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}},pT=async({browser:e,fs:t,positional:n,flags:r,onTab:i})=>{if(n.length===0)return{stdout:``,stderr:`state-load requires a filename
|
|
1222
1222
|
`,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() {
|
|
1223
1223
|
var items = ${JSON.stringify(e)};
|
|
1224
1224
|
for (var i = 0; i < items.length; i++) {
|
|
1225
1225
|
localStorage.setItem(items[i].name, items[i].value);
|
|
1226
1226
|
}
|
|
1227
|
-
})()`;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
|
|
1227
|
+
})()`;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 mT(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(`
|
|
1228
1228
|
`)})+`
|
|
1229
1229
|
`,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})+`
|
|
1230
|
-
`,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
|
|
1231
|
-
`,stderr:e?`${e}\n`:``,exitCode:0}}return{stdout:`Opened ${o} in new tab [targetId: ${u}]\n`,stderr:``,exitCode:0}},
|
|
1230
|
+
`,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 hT=mT(`localstorage`,`localStorage`),gT=mT(`sessionstorage`,`sessionStorage`),_T=e(`playwright`),vT={width:412,height:915,deviceScaleFactor:2.625};function yT(e,t,n,r,i){let a=n[`teleport-start`],o=n[`teleport-return`];if(!a||!o)return null;_T.info(`Arming teleport via open/tab-new flags`),_T.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&&(dw(u),t.teleportWatchers.delete(i)),fw(e,t,s,c,l*1e3,n[`teleport-runtime`],r,i),null}const bT=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 re(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(vT.width,vT.height,{deviceScaleFactor:vT.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){_T.debug(`open/tab-new --foreground bringToFront failed`,{targetId:u,error:e instanceof Error?e.message:String(e)})}let d=yT(e,n,i,o,u);if(d)return d;if(i.discover===`true`){let{browseShWarning:e,...n}=await pC(o,{discover:!0,fs:t}),r={action:`open`,targetId:u,source:`auxiliary-fetch`,...n};return{stdout:JSON.stringify(r,null,2)+`
|
|
1231
|
+
`,stderr:e?`${e}\n`:``,exitCode:0}}return{stdout:`Opened ${o} in new tab [targetId: ${u}]\n`,stderr:``,exitCode:0}},xT=async({browser:e,state:t})=>{let n=await ie(e,t);return n.length===0?{stdout:`No tabs open
|
|
1232
1232
|
`,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(`
|
|
1233
1233
|
`)+`
|
|
1234
|
-
`,stderr:``,exitCode:0}},
|
|
1234
|
+
`,stderr:``,exitCode:0}},ST=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}},CT=async({browser:e,state:t,positional:n,onTab:r})=>{if(n.length===0)return{stdout:``,stderr:`tab-select requires a tab index
|
|
1235
1235
|
`,exitCode:1};let i=n[0];if(!/^[0-9]+$/.test(i))return{stdout:``,stderr:`tab-select index must be a positive integer
|
|
1236
1236
|
`,exitCode:1};let a=parseInt(i,10);if(a<1)return{stdout:``,stderr:`tab-select index must be a positive integer
|
|
1237
|
-
`,exitCode:1};let o=await ie(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}},
|
|
1237
|
+
`,exitCode:1};let o=await ie(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}},wT=async({browser:e,state:t,positional:n,flags:r,onTab:i})=>{if(n.length<2)return{stdout:``,stderr:`resize requires <width> <height>
|
|
1238
1238
|
`,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
|
|
1239
|
-
`,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})},
|
|
1239
|
+
`,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})},TT=e(`playwright-teleport`);function ET(){TT.info(`Listing available follower runtimes`);let e=lw();if(!e)return{stdout:``,stderr:`teleport: not connected to a tray
|
|
1240
1240
|
`,exitCode:1};let t=e();if(t.length===0)return{stdout:`No followers connected to the tray.
|
|
1241
1241
|
`,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(`
|
|
1242
1242
|
`)+`
|
|
1243
|
-
`,stderr:``,exitCode:0}}function
|
|
1244
|
-
`,stderr:``,exitCode:0}}function
|
|
1245
|
-
`,exitCode:1};let c=
|
|
1246
|
-
`,exitCode:1};let u=n.runtime;if(u){let e=
|
|
1243
|
+
`,stderr:``,exitCode:0}}function DT({state:e,flags:t}){let n=j(t);if(`error`in n)return{stdout:``,stderr:n.error,exitCode:1};TT.info(`Disarming teleport watcher via --off`,{targetId:n.targetId});let r=e.teleportWatchers.get(n.targetId);return r&&(dw(r),e.teleportWatchers.delete(n.targetId)),{stdout:`Teleport watcher disarmed
|
|
1244
|
+
`,stderr:``,exitCode:0}}function OT(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 kT(e){return(lw()?.()??[]).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 AT({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>
|
|
1245
|
+
`,exitCode:1};let c=OT(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
|
|
1246
|
+
`,exitCode:1};let u=n.runtime;if(u){let e=kT(u);if(e)return{stdout:``,stderr:e,exitCode:1}}let d=t.teleportWatchers.get(a.targetId);d&&(TT.info(`Disarming existing teleport watcher before re-arming`,{targetId:a.targetId}),dw(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 TT.info(`Arming teleport via explicit subcommand`,{targetId:a.targetId,timeoutSec:l,runtimeSelection:u?`explicit`:`auto`}),TT.debug(`Arming teleport via explicit subcommand details`,{targetId:a.targetId,startPattern:o,returnPattern:s,timeoutSec:l,runtimeId:u??`auto`,leaderUrl:f}),xn(i,`about to arm a teleport watcher on tab ${a.targetId}`),fw(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 jT=async e=>e.flags.list===`true`?ET():e.flags.off===`true`?DT(e):AT(e),MT={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 NT(e){let t=e.split(`.`).pop()?.toLowerCase()??``;return MT[t]??`application/octet-stream`}function PT(e,t){if(e.length===0)return{error:`upload requires at least one file path
|
|
1247
1247
|
`};if(!jn(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
|
|
1248
1248
|
`}:{targetRef:n,filePaths:r}:{error:`Unknown ref "${n}"\n`}:{error:`No snapshot available. Run "snapshot" first.
|
|
1249
|
-
`}}const
|
|
1249
|
+
`}}const FT=new Map([[`teleport`,jT],[`open`,bT],[`tab-new`,bT],[`fetch`,mC],[`goto`,xw],[`navigate`,xw],[`snapshot`,iT],[`find`,aT],[`frames`,oT],[`screenshot`,dT],[`click`,bC],[`type`,xC],[`fill`,SC],[`eval`,cC],[`eval-file`,lC],[`press`,CC],[`keydown`,wC],[`keyup`,TC],[`go-back`,Sw],[`go-forward`,Cw],[`reload`,ww],[`tab-list`,xT],[`tab-close`,ST],[`close`,ST],[`dblclick`,EC],[`hover`,DC],[`select`,OC],[`check`,kC],[`uncheck`,AC],[`drag`,jC],[`resize`,wT],[`dialog-accept`,nC],[`dialog-dismiss`,rC],[`cookie-list`,YS],[`cookie-get`,XS],[`cookie-set`,ZS],[`cookie-delete`,QS],[`cookie-clear`,$S],[`localstorage-list`,hT.list],[`localstorage-get`,hT.get],[`localstorage-set`,hT.set],[`localstorage-delete`,hT.del],[`localstorage-clear`,hT.clear],[`sessionstorage-list`,gT.list],[`sessionstorage-get`,gT.get],[`sessionstorage-set`,gT.set],[`sessionstorage-delete`,gT.del],[`sessionstorage-clear`,gT.clear],[`record`,Rw],[`stop-recording`,zw],[`tab-select`,CT],[`pdf`,sT],[`network-state-set`,Tw],[`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=PT(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 MC(n,e),i=e.split(`/`).pop()??e;f.push({name:i,type:NT(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) {
|
|
1250
1250
|
const el = this;
|
|
1251
1251
|
if (el.tagName !== 'INPUT' || el.type !== 'file') {
|
|
1252
1252
|
throw new Error('Element ' + el.tagName + ' is not a file input');
|
|
@@ -1277,12 +1277,12 @@ Options:
|
|
|
1277
1277
|
el.dispatchEvent(new Event('change', { bubbles: true }));
|
|
1278
1278
|
el.dispatchEvent(new Event('input', { bubbles: true }));
|
|
1279
1279
|
return el.files.length;
|
|
1280
|
-
})()`,r=await t.send(`Runtime.evaluate`,{expression:n,returnByValue:!0,awaitPromise:!1},e);if(r.exceptionDetails){let e=r.exceptionDetails.exception?.description??r.exceptionDetails.text??`File upload failed`;throw Error(e)}});let p=d.map(e=>e.split(`/`).pop()??e).join(`, `);return{stdout:`Uploaded ${d.length} file(s): ${p}\n`,stderr:``,exitCode:0}}],[`state-save`,
|
|
1281
|
-
`;return{...r,stderr:r.stderr+c}}async function
|
|
1282
|
-
`,stderr:``,exitCode:0}}let
|
|
1283
|
-
`);let a=[];for(let[e,t]of
|
|
1280
|
+
})()`,r=await t.send(`Runtime.evaluate`,{expression:n,returnByValue:!0,awaitPromise:!1},e);if(r.exceptionDetails){let e=r.exceptionDetails.exception?.description??r.exceptionDetails.text??`File upload failed`;throw Error(e)}});let p=d.map(e=>e.split(`/`).pop()??e).join(`, `);return{stdout:`Uploaded ${d.length} file(s): ${p}\n`,stderr:``,exitCode:0}}],[`state-save`,fT],[`state-load`,pT],[`console`,WS],[`requests`,Mw],[`request`,Nw],[`request-headers`,Pw],[`request-body`,Fw],[`response-headers`,Iw],[`response-body`,Lw],[`mousemove`,IC],[`mousedown`,LC],[`mouseup`,RC],[`mousewheel`,zC],[`drop`,BC],[`route`,Gw],[`route-list`,Kw],[`unroute`,qw],[`generate-locator`,eC],[`highlight`,tC]]);function IT(){let e=(Dn.string??[]).map(e=>`--${e}`),t=new Set(Dn.boolean??[]);for(let[e,n]of Object.entries(Dn.alias??{})){let r=[e,...Array.isArray(n)?n:[n]];if(r.some(e=>t.has(e)))for(let e of r)t.add(e)}return{value:e,bool:[...[...t].map(e=>`--${e}`),`--help`,`-h`,`--no-iframes`]}}function LT(e){return e.map(e=>e===`--no-iframes`||e.startsWith(`--no-iframes=`)?e.replace(`--no-iframes`,`--_noiframes`):e)}function RT(e){return{...e,bool:[...e.bool??[],`--_noiframes`],value:[...e.value??[],`--_noiframes`]}}const zT=2e3;function BT(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 VT(e,t,n,r){if(!t||typeof e.getTabLockStats!=`function`)return r;let i=e.getTabLockStats(),a=i.totalWaitMs-t.totalWaitMs;if(a<zT)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>=zT?`${(s/1e3).toFixed(1)}s of it waiting on this tab (--tab=${n})`:`all of it waiting on the bridge, not on this tab`} (queue depth ${i.queueDepth}). Commands on the same tab serialize; commands on different tabs run in parallel — stagger callers on THIS tab, or give each caller its own tab.
|
|
1281
|
+
`;return{...r,stderr:r.stderr+c}}async function HT(e,t,n){let r=n instanceof Error?n.message:String(n);return{stdout:``,stderr:`Error: ${(t.tab?await On(e,t.tab,n):null)??r}\n`,exitCode:1}}function UT(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 WT(e,t,n){let r=FT.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?UT(e,t,void 0):a}catch(r){return i?.aborted?UT(e,t,r):await HT(n.browser,n.flags,r)}}async function GT(e,t,n,r){let i=C(LT(n),RT(r));if(`error`in i)return{answer:{stdout:``,stderr:`${e} ${t}: ${i.error}\n`,exitCode:1}};let a;try{({flags:a}=En(n))}catch(n){return{answer:{stdout:``,stderr:`${e} ${t}: ${n instanceof Error?n.message:String(n)}\n`,exitCode:1}}}if(a.help===`true`||a.h===`true`){let{formatSubcommandHelp:n}=await import(`./help-BFAT_5tA.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 KT(e,t,n,r={}){let i=t?Cn(t,n):null,a=IT();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-BFAT_5tA.js`);return{stdout:t(e)+`
|
|
1282
|
+
`,stderr:``,exitCode:0}}let c=o[0],l=o.slice(1),u=await GT(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=BT(t,p),h=zi(s.env),g=Yw(r.isScoop?.()??!1,h),_=await WT(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;Pn.has(c)&&_.exitCode===0&&v&&(ee=await Zw(t,n,v,i,g));try{await Qw(n,i,g,{command:c,args:l,result:_,snapshotPath:ee,targetId:v})}catch{}return VT(t,m,p,_)})}const qT=new Map([[`File operations`,[`ls`,`cat`,`head`,`tail`,`wc`,`touch`,`mkdir`,`rm`,`cp`,`mv`,`ln`,`chmod`,`stat`,`readlink`,`file`,`rmdir`,`rsync`]],[`Text processing`,[`grep`,`sed`,`awk`,`sort`,`uniq`,`cut`,`tr`,`tee`,`diff`,`patch`,`column`,`comm`,`egrep`,`fgrep`,`expand`,`unexpand`,`fold`,`join`,`nl`,`od`,`paste`,`rev`,`split`,`strings`,`tac`]],[`Search`,[`find`,`rg`]],[`Navigation & paths`,[`pwd`,`basename`,`dirname`,`tree`,`du`,`cd`]],[`Archives`,[`zip`,`unzip`,`pdftk`,`pdf`,`gunzip`,`gzip`,`zcat`]],[`Media`,[`convert`,`magick`,`pdftoppm`,`pdftocairo`,`pdftotext`,`ffmpeg`,`ffprobe`,`screencapture`]],[`Audio`,[`say`,`hear`,`afplay`,`chime`]],[`Environment & shell`,`echo.printf.env.printenv.export.alias.unalias.history.clear.true.false.bash.sh.commands.which.uname.man.host.oauth-token.secret.nuke.models.local-llm.cost.hostname.whoami.id.help.sleep.time.timeout.oauth-domain`.split(`.`)],[`Data processing`,[`xargs`,`jq`,`base64`,`date`,`expr`,`seq`]],[`Hashes`,[`md5sum`,`sha1sum`,`sha256sum`]],[`Network`,[`curl`,`curlwright`,`wget`,`dig`,`websocat`,`html-to-markdown`]],[`Version control`,[`git`]],[`Languages`,[`node`,`jsh`,`python`,`python3`,`sqlite3`]],[`Virtualization`,[`v86`,`computer`]],[`Build tools`,[`tsc`,`tst`,`esbuild`,`biome`]],[`Packages`,[`ipk`,`hf`,`npm`,`i`,`ipx`,`npx`]],[`Skills`,[`skill`,`upskill`]],[`Browser & UI`,[`serve`,`open`,`imgcat`,...Mn,`sprinkle`]],[`Clipboard`,[`pbcopy`,`pbpaste`,`xclip`,`xsel`]],[`Filesystem`,[`mount`,`umount`,`fswatch`]],[`Scoops & agents`,[`agent`,`gelatiere`,`mcp`,`webhook`,`crontask`]],[`Process`,[`ps`,`kill`,`jshd`,`meminfo`,`uptime`]],[`Shell builtins (limited)`,[...zg]]]);function JT(e,t=[],n=[]){let r=[],i=new Set(e);for(let e of t)i.delete(e);for(let e of n)i.delete(e);r.push(`Available commands:
|
|
1283
|
+
`);let a=[];for(let[e,t]of qT){let n=t.filter(e=>i.has(e));if(n.length>0){r.push(` ${e}:`),r.push(` ${n.join(`, `)}\n`);for(let e of n)i.delete(e)}}for(let e of i)a.push(e);return a.length>0&&(r.push(` Other:`),r.push(` ${a.sort().join(`, `)}\n`)),t.length>0&&(r.push(` User scripts (.jsh):`),r.push(` ${t.sort().join(`, `)}\n`)),n.length>0&&(r.push(` Workflows:`),r.push(` ${n.sort().join(`, `)}\n`)),r.push(`Use '<command> --help' for details on a specific command.`),r.join(`
|
|
1284
1284
|
`)+`
|
|
1285
|
-
`}function
|
|
1285
|
+
`}function YT(e={}){return S(`commands`,async(t,n)=>{if(t.includes(`--help`)||t.includes(`-h`))return{stdout:`commands - display available commands
|
|
1286
1286
|
|
|
1287
1287
|
Usage: commands [command]
|
|
1288
1288
|
|
|
@@ -1293,30 +1293,38 @@ If a command name is provided, shows help for that command.
|
|
|
1293
1293
|
Otherwise, lists all available commands.
|
|
1294
1294
|
|
|
1295
1295
|
Note: This is an enhanced version of 'help' that shows all custom commands.
|
|
1296
|
-
`,stderr:``,exitCode:0};if(t.length>0&&n.exec){let e=t[0];return n.exec(`${e} --help`,{cwd:n.cwd})}return{stdout:
|
|
1296
|
+
`,stderr:``,exitCode:0};if(t.length>0&&n.exec){let e=t[0];return n.exec(`${e} --help`,{cwd:n.cwd})}return{stdout:JT(n.getRegisteredCommands?.()??[],await e.getJshCommands?.()??[],await e.getWorkflowCommands?.()??[]),stderr:``,exitCode:0}})}function XT(e){return{stdout:`hf - download model repos from the Hugging Face Hub into the VFS
|
|
1297
1297
|
|
|
1298
1298
|
Usage:
|
|
1299
1299
|
hf download <repo> [files...] [--to <dir>] [--revision <rev>] [--force]
|
|
1300
|
+
[--concurrency <n>] [--max-in-flight-mb <n>]
|
|
1300
1301
|
|
|
1301
1302
|
Examples:
|
|
1302
1303
|
hf download onnx-community/whisper-tiny
|
|
1303
1304
|
hf download onnx-community/whisper-tiny --to /workspace/models/onnx-community/whisper-tiny
|
|
1304
1305
|
hf download onnx-community/Kokoro-82M-v1.0-ONNX
|
|
1305
1306
|
hf download Xenova/all-MiniLM-L6-v2 config.json tokenizer.json
|
|
1307
|
+
hf download owner/sharded-model --concurrency 8 --max-in-flight-mb 256
|
|
1306
1308
|
|
|
1307
1309
|
Defaults:
|
|
1308
|
-
--to
|
|
1309
|
-
--revision
|
|
1310
|
+
--to /workspace/models/<repo>/
|
|
1311
|
+
--revision main
|
|
1312
|
+
--concurrency, -j 4 files at once
|
|
1313
|
+
--max-in-flight-mb ${Vi/1048576} MB of downloads in flight at once
|
|
1310
1314
|
|
|
1311
1315
|
Notes:
|
|
1312
1316
|
- <repo> is the standard <owner>/<name> form.
|
|
1313
1317
|
- With no [files...], every file in the repo tree is downloaded.
|
|
1314
1318
|
- Existing files at the destination with a matching byte length are skipped
|
|
1315
1319
|
unless --force is passed.
|
|
1320
|
+
- Downloads are held in memory until written: a file starts only while the
|
|
1321
|
+
ones in flight fit --max-in-flight-mb (larger or unsized files run alone).
|
|
1322
|
+
- The first failed file stops the rest.
|
|
1323
|
+
- Background-job logs get a progress line every few seconds.
|
|
1316
1324
|
- Weights are read by the speech engines via the preview SW from the
|
|
1317
1325
|
target directory; transformers expects <localModelPath>/<repo>/.
|
|
1318
|
-
`,stderr:``,exitCode:e}}function
|
|
1319
|
-
`)}\n`}function
|
|
1326
|
+
`,stderr:``,exitCode:e}}function ZT(e){return{stdout:``,stderr:`hf: ${e}\n`,exitCode:1}}const QT=/^[A-Za-z0-9_.-]+\/[A-Za-z0-9_.-]+$/;function $T(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 eE(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=$T(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 QT.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 tE(e){return e<1024?`${e} B`:e<1048576?`${(e/1024).toFixed(1)} KB`:e<1073741824?`${(e/1048576).toFixed(1)} MB`:`${(e/1073741824).toFixed(2)} GB`}function nE(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 rE=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=tE(this.bytesDone),r=``;if(this.bytesTotal!==void 0){n+=` of ${tE(this.bytesTotal)}`;let e=this.bytesTotal-this.bytesDone;t>0&&e>0&&(r=`, ~${nE(e/t*1e3)} left`)}return`hf: ${this.filesDone}/${this.filesTotal} files, ${n}, ${tE(t)}/s${r}\n`}};function iE(e){let t=e;return typeof t.writeStdout==`function`?t.writeStdout.bind(t):void 0}async function aE(e,t,n,r){let i=eE(e);if(`error`in i)return ZT(i.error);let a=Bi(i.repo,i.to,t.cwd),{downloadHfRepo:o,HfFileDownloadError:s}=await import(`./hf-download-TLCxnVIL.js`),c=iE(t),l=new rE(i.files.length,void 0,r),u=``;try{let e=await o({fetch:n,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} (${tE(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 ${nE(l.elapsedMs())} (${tE(l.rate())}/s)`:``,s=`hf: ${e.downloaded} downloaded, ${e.skipped} skipped, ${tE(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}):ZT(e instanceof Error?e.message:String(e))}}const oE=[`--to`,`--revision`,`--rev`,`--concurrency`,`-j`,`--max-in-flight-mb`];function sE(e){let t=e.now??Date.now;return{name:`hf`,async execute(n,r){if(n.length===0||w(n,{valueFlags:oE}))return XT(+(n.length===0));let i=n[0];return i===`download`?aE(n.slice(1),r,e.fetch,t):ZT(`unknown subcommand: ${i}`)}}}const cE=new Set([`--vid`,`--pid`,`--usage-page`,`--usage`,`--__resolved`,`--timeout`]);function lE(e){return vn(e,cE)}function uE(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 dE(e){let t={};return e.has(`--vid`)&&(t.vendorId=uE(e.get(`--vid`),`vid`)),e.has(`--pid`)&&(t.productId=uE(e.get(`--pid`),`pid`)),e.has(`--usage-page`)&&(t.usagePage=uE(e.get(`--usage-page`),`usage-page`)),e.has(`--usage`)&&(t.usage=uE(e.get(`--usage`),`usage`)),Object.keys(t).length>0?[t]:[]}function fE(e){let t=ei(e.stdin),n=new Uint8Array(t.length);for(let e=0;e<t.length;e++)n[e]=t.charCodeAt(e)&255;return n}function pE(e){return Array.from(e,e=>e.toString(16).padStart(2,`0`)).join(` `)}function mE(e){return e.toString(16).padStart(2,`0`)}function hE(e){return`0x${e.toString(16).padStart(4,`0`)}`}function gE(e){let t=e.productName||`(unknown)`,n=e.opened?` [open]`:``,r=e.usagePage===void 0?``:`\t${hE(e.usagePage)}:${hE(e.usage??0)}`;return`${e.handle}\t${hE(e.vendorId)}:${hE(e.productId)}${r}\t${t}${n}`}function _E(e,t){let n=t?.usagePage,r=t?.usage;if(n===void 0&&r===void 0)return e;let i=e.findIndex(e=>(n===void 0||e.usagePage===n)&&(r===void 0||e.usage===r));if(i<=0)return e;let a=e.slice(),[o]=a.splice(i,1);return a.unshift(o),a}function vE(e){return`${e.map(gE).join(`
|
|
1327
|
+
`)}\n`}function yE(e){return`${mE(e.reportId)} ${pE(e.bytes)}`.trimEnd()}function bE(e){return{stdout:e,stderr:``,exitCode:0}}function H(e){return{stdout:``,stderr:`hid: ${e}\n`,exitCode:1}}const xE=`hid - access HID devices via WebHID
|
|
1320
1328
|
|
|
1321
1329
|
Usage: hid <subcommand> [options]
|
|
1322
1330
|
|
|
@@ -1340,10 +1348,10 @@ Options:
|
|
|
1340
1348
|
-h, --help
|
|
1341
1349
|
|
|
1342
1350
|
Report payloads are capped at ${Ir} bytes (4 MiB).
|
|
1343
|
-
`;function
|
|
1344
|
-
`):
|
|
1345
|
-
`)}\n`)}async function
|
|
1346
|
-
`)}\n`:``)}async function
|
|
1351
|
+
`;function SE(e,t){if(t){let t=``;for(let n=0;n<e.length;n++)t+=String.fromCharCode(e[n]);return bE(t)}return bE(e.length?`${pE(e)}\n`:``)}function CE(e){return!e||e.aborted?Promise.resolve():new Promise(t=>{e.addEventListener(`abort`,()=>t(),{once:!0})})}async function wE(e){let t=await e.list();return t.length===0?bE(`no granted HID devices
|
|
1352
|
+
`):bE(`${t.map(gE).join(`
|
|
1353
|
+
`)}\n`)}async function TE(e,t){let n=e.get(`--__resolved`),r=dE(e),i=r[0];if(n){let e=n.split(`,`).filter(e=>e.length>0);return e.length===0?H(`request: missing resolved handle`):bE(vE(_E(await Promise.all(e.map(e=>t.info(e))),i)))}let a=xe();return a?EE(r,i,a,t):bE(vE(_E(await t.request(r),i)))}async function EE(e,t,n,r){let i=await Sx(`hid-device`,e,n),a,o;if(i.handle){let e=await r.info(i.handle);a=e.vendorId,o=e.productId}else{let e=i.info,t=Fr();if(!t)return H(`request: WebHID unavailable for device re-acquire`);let n=await t.getDevices(),r=kr(),s=n.filter(t=>t.vendorId===e.vendorId&&t.productId===e.productId);if(s.length===0)return H(`request: granted device could not be re-acquired`);for(let e of s)r.register(e);a=e.vendorId,o=e.productId}let s=(await r.list()).filter(e=>e.vendorId===a&&e.productId===o),c=_E(s.length>0?s:[],t);return c.length===0?H(`request: granted device could not be re-acquired`):bE(vE(c))}async function DE(e,t,n){let r=t[1];return r?(e===`open`?await n.open(r):await n.close(r),bE(``)):H(`${e}: handle required`)}async function OE(e,t,n,r){let[,i,a]=t;if(!i||a===void 0)return H(`${e}: handle and report-id required`);let o=uE(a,`report-id`),s=fE(n);return s.length>4194304?H(`${e} payload exceeds 4 MiB limit`):(e===`send`?await r.sendReport(i,o,s):await r.sendFeatureReport(i,o,s),bE(``))}async function kE(e,t,n){let[,r,i]=e;return!r||i===void 0?H(`feature-get: handle and report-id required`):SE((await t.receiveFeatureReport(r,uE(i,`report-id`))).bytes,n)}async function AE(e,t,n){let r=e[1];if(!r)return H(`watch: handle required`);let i=[],a=await n.subscribeInputReports(r,e=>{i.push(yE(e))});try{await CE(t.signal)}finally{await a()}return bE(i.length?`${i.join(`
|
|
1354
|
+
`)}\n`:``)}async function jE(e,t,n,r,i){let[,a,o]=e;if(!a||o===void 0)return H(`query: handle and report-id required`);let s=uE(o,`report-id`),c=fE(t);if(c.length>4194304)return H(`query payload exceeds 4 MiB limit`);let l=n.has(`--timeout`)?uE(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`?H(`query: no input report within ${l}ms`):i?SE(t.bytes,!0):bE(`${yE(t)}\n`)}finally{p!==void 0&&clearTimeout(p),await f()}}async function ME(e,t,n){let{positionals:r,flags:i,bools:a}=lE(e),o=r[0],s=a.has(`--raw`);switch(o){case`list`:return wE(n);case`request`:return TE(i,n);case`open`:case`close`:return DE(o,r,n);case`send`:case`feature-send`:return OE(o,r,t,n);case`feature-get`:return kE(r,n,s);case`watch`:return AE(r,t,n);case`query`:return jE(r,t,i,n,s);default:return H(`unknown subcommand '${o??``}'. Try 'hid --help'.`)}}function NE(){return S(`hid`,async(e,t)=>{if(e.length===0||e.includes(`--help`)||e.includes(`-h`))return bE(xE);let n=Rr(se(),y());if(!n)return H(`WebHID is unavailable in this environment`);try{return await ME(e,t,n)}catch(e){let t=e instanceof Error?e.message:String(e);return/cancelled|NotFoundError|No device selected/i.test(t)?H(`user cancelled or no device selected`):H(t)}})}const PE=1e3,FE=`usage: id [-u|-g|-G] [-n] [-r] [USER]`,IE=`${FE}
|
|
1347
1355
|
|
|
1348
1356
|
Print the user and group identity of this SLICC runtime.
|
|
1349
1357
|
|
|
@@ -1358,23 +1366,23 @@ Options:
|
|
|
1358
1366
|
--version Print the SLICC build.
|
|
1359
1367
|
|
|
1360
1368
|
Identity comes from the home directory, which is where the rest of the shell
|
|
1361
|
-
gets it too. A cone is the human user (uid ${
|
|
1369
|
+
gets it too. A cone is the human user (uid ${PE}, one per runtime, since every
|
|
1362
1370
|
cone shares one home); a scoop is a service identity whose uid is derived from
|
|
1363
1371
|
its folder name, so it is stable across reloads and distinct per scoop.
|
|
1364
1372
|
Every user is in a user-private group of the same name, plus the role group
|
|
1365
1373
|
\`cone\` (10) or \`scoop\` (20).
|
|
1366
|
-
`,
|
|
1374
|
+
`,LE=`/scoops/`;function RE(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 zE(e,t){return{name:e,uid:t===`cone`?PE:RE(e),role:t}}function BE(e){return[{gid:e.uid,name:e.name},e.role===`cone`?{gid:10,name:`cone`}:{gid:20,name:`scoop`}]}function VE(e,t){return`${e}(${t})`}function HE(e){let t=BE(e),n=t[0];return`uid=${VE(e.uid,e.name)} gid=${VE(n.gid,n.name)} groups=${t.map(e=>VE(e.gid,e.name)).join(`,`)}\n`}async function UE(e){let t=e.env.get(`HOME`)??``,n=t.startsWith(LE)?`scoop`:`cone`,r=e.env.get(`USER`)||WE(t,n);return r?zE(r,n):zE(tp(await ep(GE(e.fs))),`cone`)}function WE(e,t){return e===``?``:t===`cone`?tp(e):e.slice(8).split(`/`)[0]??``}function GE(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 KE(e,t){return await e.fs.exists(`/home/${t}`).catch(()=>!1)?zE(t,`cone`):await e.fs.exists(`${LE}${t}`).catch(()=>!1)?zE(t,`scoop`):null}function qE(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=YE[r];if(e){e(t);continue}if(r.length>1&&r.startsWith(`-`)){for(let e of r.slice(1)){let n=JE[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 JE={u:e=>{e.select=`user`},g:e=>{e.select=`group`},G:e=>{e.select=`groups`},n:e=>{e.names=!0},r:()=>void 0},YE={"--user":JE.u,"--group":JE.g,"--groups":JE.G,"--name":JE.n,"--real":JE.r};function XE(e,t){let n=BE(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 HE(e)}}function ZE(){return S(`id`,async(e,t)=>{let n=qE(e);if(`error`in n)return{stdout:``,stderr:`id: ${n.error}\n${FE}\n`,exitCode:1};if(n.mode===`help`)return $E(IE);if(n.mode===`version`)return $E(`id (SLICC) ${Ke().version}\n`);let r=n.operand===void 0?await UE(t):await KE(t,n.operand);return r?$E(XE(r,n)):{stdout:``,stderr:`id: '${n.operand}': no such user\n`,exitCode:1}})}function QE(){return S(`whoami`,async(e,t)=>$E(`${(await UE(t)).name}\n`))}function $E(e){return{stdout:e,stderr:``,exitCode:0}}function eD(){return{stdout:`imgcat - preview image and video files in the preview tab
|
|
1367
1375
|
|
|
1368
1376
|
Usage: imgcat <path> [path...]
|
|
1369
1377
|
|
|
1370
1378
|
Options:
|
|
1371
1379
|
-h, --help Show this help message
|
|
1372
|
-
`,stderr:``,exitCode:0}}function
|
|
1380
|
+
`,stderr:``,exitCode:0}}function tD(e={}){return S(`imgcat`,async(t,n)=>{if(t.length===0||w(t))return eD();let r=C(t);if(`error`in r)return{stdout:``,stderr:`imgcat: ${r.error}\n`,exitCode:1};if(r.positionals.length===0)return eD();if(typeof window>`u`||typeof document>`u`)return{stdout:``,stderr:`imgcat: browser APIs are unavailable in this environment
|
|
1373
1381
|
`,exitCode:1};if(!e.onMediaPreview)return{stdout:``,stderr:`imgcat: terminal preview is unavailable
|
|
1374
|
-
`,exitCode:1};let i=[];for(let e of r.positionals){let t=n.fs.resolvePath(n.cwd,e);if(!(await n.fs.stat(t)).isFile)return{stdout:``,stderr:`imgcat: not a file: ${e}\n`,exitCode:1};let r=ye(t);if(!ve(r))return{stdout:``,stderr:`imgcat: unsupported media type: ${e}\n`,exitCode:1};let a=await n.fs.readFileBuffer(t),o=new Uint8Array(a.byteLength);o.set(a),i.push({path:t,mimeType:r,bytes:o})}try{return await e.onMediaPreview(i),{stdout:``,stderr:``,exitCode:0}}catch(e){return{stdout:``,stderr:`imgcat: ${e instanceof Error?e.message:String(e)}\n`,exitCode:1}}})}const
|
|
1375
|
-
`,`;`,`|`,`&`,`(`,`)`,`{`,`}`,`<`,`>`]),
|
|
1376
|
-
`])
|
|
1377
|
-
`)}\n`}function
|
|
1382
|
+
`,exitCode:1};let i=[];for(let e of r.positionals){let t=n.fs.resolvePath(n.cwd,e);if(!(await n.fs.stat(t)).isFile)return{stdout:``,stderr:`imgcat: not a file: ${e}\n`,exitCode:1};let r=ye(t);if(!ve(r))return{stdout:``,stderr:`imgcat: unsupported media type: ${e}\n`,exitCode:1};let a=await n.fs.readFileBuffer(t),o=new Uint8Array(a.byteLength);o.set(a),i.push({path:t,mimeType:r,bytes:o})}try{return await e.onMediaPreview(i),{stdout:``,stderr:``,exitCode:0}}catch(e){return{stdout:``,stderr:`imgcat: ${e instanceof Error?e.message:String(e)}\n`,exitCode:1}}})}const nD=new Set([`run`,`run-script`]),rD=new Set([`test`,`start`,`stop`,`restart`]),iD=new Set([` `,` `,`
|
|
1383
|
+
`,`;`,`|`,`&`,`(`,`)`,`{`,`}`,`<`,`>`]),aD=new Set([`;`,`|`,`&`,`(`,`)`,`{`,`
|
|
1384
|
+
`]),oD=/^[A-Za-z_][A-Za-z0-9_]*=/,sD=/^[@A-Za-z0-9._-]+$/,cD=new Set([`if`,`then`,`else`,`elif`,`fi`,`for`,`while`,`until`,`do`,`done`,`case`,`in`,`esac`,`function`,`time`,`!`]),lD=new Set([`if`,`then`,`else`,`elif`,`while`,`until`,`do`,`time`,`!`]),uD=new Set([`ipx`,`npx`]);function dD(e){return`'${e.replace(/'/g,`'\\''`)}'`}async function fD(e,t){let n=await e.readFile(t);return typeof n==`string`?n:new TextDecoder().decode(n)}function*pD(e){let t=b(e);for(;yield t,t!==`/`;)t=Te(t).dir}function mD(e){if(typeof e!=`object`||!e)return{};let t={};for(let[n,r]of Object.entries(e))typeof r==`string`&&(t[n]=r);return t}function hD(e){return typeof e==`string`?e:void 0}async function gD(e,t){for(let n of pD(t)){let t=x(n,`package.json`);if(!await e.exists(t))continue;let r;try{r=JSON.parse(await fD(e,t))}catch(e){throw Error(`${t} is not valid JSON: ${e instanceof Error?e.message:String(e)}`)}return{dir:n,name:hD(r.name),version:hD(r.version),scripts:mD(r.scripts)}}return null}function _D(e,t){let n=t,r=``;for(;n<e.length;){let t=e[n];if(r!==``){t===`\\`&&r===`"`?n++:t===r&&(r=``),n++;continue}if(t===`'`||t===`"`){r=t,n++;continue}if(t===`\\`){n+=2;continue}if(iD.has(t))break;n++}return{start:t,end:n,text:e.slice(t,n)}}function vD(e){let t=[],n=0,r=!0;for(;n<e.length;){let i=e[n];if(i===` `||i===` `){n++;continue}if(aD.has(i)){r=!0,n++;continue}let a=_D(e,n);if(a.end===a.start){n++;continue}if(r&&!oD.test(a.text)){if(lD.has(a.text)){n=a.end;continue}t.push(a),r=!1}n=a.end}return t}function yD(e,t){return!sD.test(e)||cD.has(e)||uD.has(e)?!1:!t.isRegistered(e)}async function bD(e,t){let n=vD(e).filter(e=>yD(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 xD(e){let t=[];for(let n of pD(e))t.push(x(n,`node_modules`,`.bin`));return t}function SD(e,t,n,r){let i=r.env.get(`PATH`)??``,a={PATH:[...xD(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 CD(e){return e.name===void 0?e.dir:e.version===void 0?e.name:`${e.name}@${e.version}`}function wD(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 ${CD(t)} via \`${e} run\`:`];for(let[e,t]of n)r.push(` ${e}`),r.push(` ${t}`);return`${r.join(`
|
|
1385
|
+
`)}\n`}function TD(e,t){return t===`--silent`||t===`-s`?(e.silent=!0,!0):t===`--if-present`&&(e.ifPresent=!0,!0)}function ED(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}TD(t,a)||(r===void 0?r=a:n.push(a))}return{flags:t,script:r,extraArgs:n}}function DD(e,t){return{stdout:``,stderr:`${e}: ${t}\n`,exitCode:1}}function OD(e,t,n,r){let i=r.length>0?` ${r.map(dD).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 kD(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 AD(e,t,n){let r=new Set(n.getRegisteredCommands?.()??[]);return{isRegistered:e=>r.has(e),hasLocalBin:async n=>{for(let r of xD(t.dir))if(await e.exists(x(r,n)))return!0;return!1}}}async function jD(e,t,n,r,i,a){let o=i.exec;if(!o)return DD(e,`run requires shell exec support, which this context does not provide`);let s=AD(a.fs,t,i),c=CD(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 bD(a.body,s),{cwd:t.dir,env:SD(t,a.event,a.body,i),stdin:ei(i.stdin),stdinKind:`bytes`});if(l+=n.stdout,u+=n.stderr,n.exitCode!==0)return u+=`${e}: script '${a.event}' exited with code ${n.exitCode}\n`,{stdout:l,stderr:u,exitCode:n.exitCode}}return{stdout:l,stderr:u,exitCode:0}}async function MD(e,t,n,r){let i;try{i=await gD(r.fs,n.cwd)}catch(t){return DD(e,t instanceof Error?t.message:String(t))}if(!i)return DD(e,`no package.json found in ${n.cwd} or any parent directory — nothing to run`);let{flags:a,script:o,extraArgs:s}=ED(t);if(o===void 0)return{stdout:wD(e,i),stderr:``,exitCode:0};let c=i.scripts[o]??await kD(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 DD(e,`missing script: ${o}${t.length>0?` (available: ${t.join(`, `)})`:` (${x(i.dir,`package.json`)} defines no scripts)`}`)}return jD(e,i,OD(i,o,c,s),a,n,r)}const ND=new Set([`install`,`i`,`add`]),PD=new Set([`uninstall`,`remove`,`rm`,`un`]),FD=new Set([`list`,`ls`]),ID=new Set([`-g`,`--global`,`--location=global`]),LD=[`-g`,`--global`,`-D`,`--save-dev`];function RD(e){return`${e} - install packages from the npm registry into node_modules
|
|
1378
1386
|
and run package.json scripts
|
|
1379
1387
|
|
|
1380
1388
|
Usage:
|
|
@@ -1441,15 +1449,15 @@ manifest without rewriting it. With -g, packages go to /shared/lib/node_modules
|
|
|
1441
1449
|
and deps are recorded in /shared/lib/package.json. Existing fields are
|
|
1442
1450
|
preserved. Idempotent: re-installing an already-satisfied package is a clean
|
|
1443
1451
|
no-op.
|
|
1444
|
-
`}function
|
|
1452
|
+
`}function zD(e){let t=C(e,{bool:LD,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 BD(e){let t=!1,n=[];for(let r of e){if(ID.has(r)){t=!0;continue}r.startsWith(`-`)||n.push(r)}return{global:t,specs:n}}function VD(e){let t=e.indexOf(`--`),n=t===-1?e:e.slice(0,t);return n.includes(`--help`)||n.includes(`-h`)}function HD(e){return e instanceof Error?e.message:String(e)}async function UD(e){e.scriptCatalog?.invalidateJsh(),await e.syncScriptCommands?.()}async function WD(e,t,n){let r;try{r=await Ki({fs:n.fs,fetch:n.fetch,cwd:t.cwd})}catch(t){return t instanceof Xi?{stdout:``,stderr:`${e}: ${t.message}\n`,exitCode:1}:{stdout:``,stderr:`${e}: install failed: ${HD(t)}\n`,exitCode:1}}if(r.empty&&r.errors.length===0)return{stdout:`${e}: nothing to install (package.json declares no dependencies)\n`,stderr:``,exitCode:0};let i=r.results.map(t=>`${e}: installed ${t.name}@${t.version} -> ${t.installPath}`),a=r.errors.map(t=>`${e}: failed to install ${t.spec}: ${HD(t.error)}`);return{stdout:i.length>0?`${i.join(`
|
|
1445
1453
|
`)}\n`:``,stderr:a.length>0?`${a.join(`
|
|
1446
|
-
`)}\n`:``,exitCode:r.errors.length===0?0:1}}async function
|
|
1454
|
+
`)}\n`:``,exitCode:r.errors.length===0?0:1}}async function GD(e,t,n,r){let i=zD(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 WD(e,n,r);let c;try{c=await Ji(s,{fs:r.fs,fetch:r.fetch,cwd:n.cwd,global:a,saveDev:o})}catch(t){return{stdout:``,stderr:`${e}: install failed: ${HD(t)}\n`,exitCode:1}}let l=c.results.map(t=>`${e}: installed ${t.name}@${t.version} -> ${t.installPath}`),u=c.errors.map(t=>`${e}: failed to install ${t.spec}: ${HD(t.error)}`);return a&&c.results.length>0&&await UD(r),{stdout:l.length>0?`${l.join(`
|
|
1447
1455
|
`)}\n`:``,stderr:u.length>0?`${u.join(`
|
|
1448
|
-
`)}\n`:``,exitCode:c.errors.length===0?0:1}}function
|
|
1449
|
-
`)}\n`}async function
|
|
1456
|
+
`)}\n`:``,exitCode:c.errors.length===0?0:1}}function KD(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(`
|
|
1457
|
+
`)}\n`}async function qD(e,t,n,r){let{global:i,specs:a}=BD(t);if(a.length===0)return{stdout:``,stderr:`${e}: uninstall requires at least one package name\n`,exitCode:1};let o;try{o=await qi(a,{fs:r.fs,fetch:r.fetch,cwd:n.cwd,global:i})}catch(t){return{stdout:``,stderr:`${e}: uninstall failed: ${HD(t)}\n`,exitCode:1}}let s=o.results.filter(e=>e.removed).map(t=>`${e}: removed ${t.name}`),c=o.results.filter(e=>!e.removed).map(e=>e.name),l=o.errors.map(t=>`${e}: failed to uninstall ${t.spec}: ${HD(t.error)}`);c.length>0&&l.push(`${e}: ${c.join(`, `)} not installed${i?` globally`:``}`);let u=o.errors.length>0;return i&&await UD(r),{stdout:s.length>0?`${s.join(`
|
|
1450
1458
|
`)}\n`:``,stderr:l.length>0?`${l.join(`
|
|
1451
|
-
`)}\n`:``,exitCode:+!!u}}async function
|
|
1452
|
-
`)}\n`}const
|
|
1459
|
+
`)}\n`:``,exitCode:+!!u}}async function JD(e,t,n,r){let{global:i}=BD(t);try{let e=i?await Wi(r.fs):await Hi(r.fs,n.cwd);return{stdout:KD(i?tr:n.cwd,e),stderr:``,exitCode:0}}catch(t){return{stdout:``,stderr:`${e}: list failed: ${HD(t)}\n`,exitCode:1}}}async function YD(e,t,n,r){let{global:i}=BD(t);return{stdout:`${i?Kn:`${n.cwd.replace(/\/$/,``)}/node_modules`}\n`,stderr:``,exitCode:0}}function XD(e,t){let n=e===`i`;return S(e,async(r,i)=>{if(VD(r))return{stdout:RD(e),stderr:``,exitCode:0};if(n)return GD(e,r,i,t);if(r.length===0)return{stdout:RD(e),stderr:`${e}: missing subcommand\n`,exitCode:1};let a=r[0],o=r.slice(1);return ND.has(a)?GD(e,o,i,t):PD.has(a)?qD(e,o,i,t):FD.has(a)?JD(e,o,i,t):a===`root`?YD(e,o,i,t):nD.has(a)?MD(e,o,i,{fs:t.fs}):rD.has(a)?MD(e,r,i,{fs:t.fs}):{stdout:``,stderr:`${e}: unknown subcommand '${a}' (supported: install, uninstall, list, root, run)\n`,exitCode:1}})}const ZD=`0.5.461`,QD=`v86 is not installed in node_modules: run \`${N} v86@${ZD}\` (no network fallback)`;let $D=null;async function eO(e={}){return $D||=iO(e.ipk).catch(e=>{throw $D=null,e}),$D}const tO=[{js:`build/libv86.mjs`,wasm:`build/v86.wasm`}];async function nO(e,t){for(let{js:n,wasm:r}of tO){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 rO(e){let t;try{t=await qn(`v86/package.json`,e.fromDir,e.reader)}catch{return null}if(t.type!==`file`)return null;let n=await nO(Te(t.path).dir,e.reader);if(!n)return null;try{let r=await e.reader.readFile(t.path),i=String(JSON.parse(r).version??`0.5.461`);return{jsSource:await e.reader.readFile(n.jsPath),wasmBytes:await e.readBytes(n.wasmPath),version:i}}catch{return null}}async function iO(e){if(or())throw Error(`v86 is not available in Node runtime`);if(!e)throw Error(QD);let t=await rO(e);if(!t)throw Error(QD);let n=URL.createObjectURL(new Blob([t.jsSource],{type:`text/javascript`})),r;try{r=await import(n)}finally{URL.revokeObjectURL(n)}let i=r.V86??r.default;if(typeof i!=`function`)throw Error(`v86: installed package did not export a V86 constructor`);return{V86:i,wasmModule:await Yr(t.wasmBytes),version:t.version}}function aO(e){return async t=>(await WebAssembly.instantiate(e,t)).exports}const oO={command:`biome`,example:`biome check foo.js`,bootstrap:`${N} ${__}`},sO={command:`playwright-cli`,example:`playwright-cli open https://example.com`},cO={command:`puppeteer`,example:`puppeteer open https://example.com`},lO={command:`convert`,example:`convert input.png output.jpg`,bootstrap:`${N} @imagemagick/magick-wasm@${Ni}`},uO={...lO,command:`magick`,example:`magick input.png output.jpg`},dO={command:`pdftoppm`,example:`pdftoppm -png -r 150 doc.pdf page`},fO={"@biomejs/biome":oO,biome:oO,esbuild:{command:`esbuild`,example:`esbuild --bundle src/index.js --outfile=dist/bundle.js`,bootstrap:`${N} esbuild-wasm@${Jr}`},playwright:sO,"@playwright/test":sO,"playwright-core":sO,puppeteer:cO,"puppeteer-core":cO,typescript:{command:`tsc`,example:`tsc --noEmit`,bootstrap:sr},"pdf-poppler":dO,"pdf-to-img":dO,pdf2pic:dO,"pdf-img-convert":dO,poppler:dO,"poppler-utils":dO,imagemagick:lO,"imagemagick-cli":lO,"imagemagick-convert":lO,"magick-cli":uO,"@imagemagick/magick-wasm":uO,ffmpeg:{command:`ffmpeg`,example:`ffmpeg -i input.mp4 output.webm`,bootstrap:`${N} @ffmpeg/core@${Qi}`},"@ffmpeg/ffmpeg":{command:`ffmpeg`,example:`ffmpeg -i input.mp4 output.webm`,bootstrap:`${N} @ffmpeg/core@${Qi}`},ffprobe:{command:`ffprobe`,example:`ffprobe -v error -show_format -of json input.mp4`,bootstrap:`${N} @ffmpeg/core@${Qi}`},"@ffprobe-installer/ffprobe":{command:`ffprobe`,example:`ffprobe -v error -show_format -of json input.mp4`,bootstrap:`${N} @ffmpeg/core@${Qi}`},sqlite3:{command:`sqlite3`,example:`sqlite3 database.db "SELECT 1"`},v86:{command:`v86`,example:`v86 start -cdrom alpine.iso`,bootstrap:`${N} v86@${ZD}`}};function pO(e){return Object.hasOwn(fO,e)?fO[e]:void 0}function mO(e){return/^[A-Za-z0-9_./:=@%+-]+$/.test(e)?e:`'${e.replace(/'/g,`'\\''`)}'`}function hO(e,t,n,r){let i=n.length?[r.command,...n].map(mO).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(mO).join(` `)}`),`${a.join(`
|
|
1460
|
+
`)}\n`}const gO=/require\(\s*["']([^"']+)["']\s*\)/;function _O(e){return`${e} - run an installed package's executable bin
|
|
1453
1461
|
|
|
1454
1462
|
Usage:
|
|
1455
1463
|
${e} [--force] [--global] <pkg-or-bin> [args...]
|
|
@@ -1462,12 +1470,12 @@ Options:
|
|
|
1462
1470
|
--force Install a package even when a SLICC built-in shadows it
|
|
1463
1471
|
--global Resolve only from the shared global prefix (/shared/lib/node_modules)
|
|
1464
1472
|
-h, --help Show this help message
|
|
1465
|
-
`}async function
|
|
1466
|
-
`)}\n`:``}}catch(n){return{error:
|
|
1467
|
-
`,exitCode:1};let r=
|
|
1468
|
-
`)}\n`:``,exitCode:+!i}})}function
|
|
1469
|
-
`,exitCode:2};let i=
|
|
1470
|
-
`,exitCode:2}:
|
|
1473
|
+
`}async function vO(e,t){let n=await e.readFile(t);return typeof n==`string`?n:new TextDecoder().decode(n)}async function yO(e,t){try{return(await e.stat(t)).type===`file`}catch{return!1}}async function bO(e,t){try{return(await e.stat(t)).type===`directory`}catch{return!1}}function*xO(e,t=!1){if(t){yield Kn;return}let n=b(e);for(;yield x(n,`node_modules`),n!==`/`;)n=Te(n).dir;yield Kn}async function SO(e,t,n,r=!1){for(let i of xO(t,r)){let t=x(i,`.bin`,n);if(!await yO(e,t))continue;let r=await vO(e,t),a=gO.exec(r),o=Te(t).dir;return{binFilePath:a?x(o,a[1]):t,argvName:t}}return null}function CO(e){if(e.startsWith(`@`)){let t=e.indexOf(`/`);if(t!==-1)return e.slice(t+1)}return e}function wO(e,t){if(typeof e==`string`)return{binName:CO(t),binPath:e};if(typeof e!=`object`||!e)return null;let n=[t,CO(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 TO(e,t,n,r=!1){for(let i of xO(t,r)){let t=x(i,n),r=x(t,`package.json`);if(!await yO(e,r))continue;let a;try{a=JSON.parse(await vO(e,r))}catch{return null}let o=wO(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 EO(e,t,n,r=!1){return await SO(e,t,n,r)??await TO(e,t,n,r)}async function DO(e,t,n){for(let r of xO(t))if(await yO(e,x(r,n,`package.json`)))return!0;return!1}function OO(e){return e instanceof Error?e.message:String(e)}function kO(e,t){return{stdout:``,stderr:`${e}: ${t}\n`,exitCode:1}}async function AO(e,t,n,r){try{let i=await Ji([t],{fs:r.fs,fetch:r.fetch,cwd:n.cwd});if(i.errors.length>0)return{error:kO(e,`failed to install '${t}': ${OO(i.errors[0].error)}`)};let a=i.results.map(t=>`${e}: installed ${t.name}@${t.version}`);return{progress:a.length>0?`${a.join(`
|
|
1474
|
+
`)}\n`:``}}catch(n){return{error:kO(e,`failed to install '${t}': ${OO(n)}`)}}}async function jO(e,t,n,r){return await yO(r,n)?null:await bO(r,n)?kO(e,`bin target '${n}' is a directory, not a file`):kO(e,`bin file '${n}' for '${t}' does not exist`)}async function MO(e,t,n,r,i,a){if(await DO(a.fs,i.cwd,t))return{error:kO(e,`package '${t}' does not expose an executable bin`)};let o=r?void 0:pO(t);if(o)return{error:{stdout:``,stderr:hO(e,t,n,o),exitCode:1}};let s=await AO(e,t,i,a);if(`error`in s)return s;let c=await EO(a.fs,i.cwd,t);return c?{resolved:c,installProgress:s.progress}:{error:kO(e,`package '${t}' was installed but does not expose an executable bin`)}}function NO(e,t){return{name:e,trusted:!0,async execute(n,r){if(n.length===0||n[0]===`--help`||n[0]===`-h`)return{stdout:_O(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:_O(e),stderr:``,exitCode:1};let c=s[0],l=s.slice(1),u;try{u=await EO(t.fs,r.cwd,c,o)}catch(t){return kO(e,OO(t))}let d=``;if(!u){if(o)return kO(e,`no global bin '${c}' found in ${Kn}`);let n=await MO(e,c,l,i,r,t);if(`error`in n)return n.error;u=n.resolved,d=n.installProgress}let f=await jO(e,c,u.binFilePath,t.fs);if(f)return f;let p=Wr(await vO(t.fs,u.binFilePath)),m=[`node`,u.argvName,...l],h=await Hr(p,m,r,void 0,{filename:u.binFilePath});return{stdout:h.stdout,stderr:d+h.stderr,exitCode:h.exitCode}}}}function PO(e={}){return S(`jshd`,async(t,n)=>{let{runJshd:r}=await import(`./run-ywyYbXgZ.js`);return r(t,n,e)})}const FO=new Set([`SIGINT`,`SIGTERM`,`SIGKILL`,`SIGSTOP`,`SIGCONT`]);function IO(e={}){return S(`kill`,async t=>{if(t.length===0||t.includes(`--help`)||t.includes(`-h`))return HO();let n=e.processManager??LO();if(!n)return{stdout:``,stderr:`kill: no process manager available in this runtime
|
|
1475
|
+
`,exitCode:1};let r=RO(t);if(!r.ok)return{stdout:``,stderr:r.stderr,exitCode:r.exitCode};let{allDelivered:i,errors:a}=zO(n,r.pids,r.signal);return{stdout:``,stderr:a.length?`${a.join(`
|
|
1476
|
+
`)}\n`:``,exitCode:+!i}})}function LO(){let e=globalThis.__slicc_pm;return e instanceof Object&&typeof e.signal==`function`?e:null}function RO(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
|
|
1477
|
+
`,exitCode:2};let i=BO(n);if(i instanceof Error)return{ok:!1,stderr:`kill: ${i.message}\n`,exitCode:2};t=i;continue}if(i.startsWith(`-`)){let e=VO(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
|
|
1478
|
+
`,exitCode:2}:FO.has(t)?{ok:!0,signal:t,pids:n}:{ok:!1,stderr:`kill: signal ${t} not supported\n`,exitCode:2}}function zO(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 BO(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 VO(e){return e===`-9`?`SIGKILL`:BO(e.slice(1))}function HO(){return{stdout:`Usage: kill [-s SIGNAL | -INT | -TERM | -KILL | -STOP | -CONT | -9] PID [PID …]
|
|
1471
1479
|
|
|
1472
1480
|
Send a signal to one or more processes tracked by the kernel.
|
|
1473
1481
|
|
|
@@ -1489,7 +1497,7 @@ Examples:
|
|
|
1489
1497
|
kill -INT 1024 1025 SIGINT both
|
|
1490
1498
|
kill -STOP 1024 pause; \`kill -CONT 1024\` resumes
|
|
1491
1499
|
kill -s SIGKILL 1024 explicit signal name
|
|
1492
|
-
`,stderr:``,exitCode:0}}const
|
|
1500
|
+
`,stderr:``,exitCode:0}}const UO=[`top`,`left`,`middle`,`right`,`bottom`],WO=`usage: layout <verb> [args]
|
|
1493
1501
|
|
|
1494
1502
|
list List the built-in presets
|
|
1495
1503
|
set <preset> Switch to a built-in preset
|
|
@@ -1505,13 +1513,13 @@ Examples:
|
|
|
1505
1513
|
load <name> Restore a saved arrangement
|
|
1506
1514
|
delete <name> Delete a saved arrangement
|
|
1507
1515
|
reset Restore the default arrangement
|
|
1508
|
-
edit Alias for \`layout set ${
|
|
1516
|
+
edit Alias for \`layout set ${cs}\` (there is no edit mode)
|
|
1509
1517
|
docs Describe the layout surfaces
|
|
1510
1518
|
panels List the registered panel ids
|
|
1511
1519
|
|
|
1512
|
-
Zones: ${
|
|
1513
|
-
`,
|
|
1514
|
-
`,exitCode:1};try{let e=await n.call(`layout-apply`,t);if(e&&e.applied===!1)return{stdout:``,stderr:`layout: ${e.error??`could not apply layout`}\n`,exitCode:1};let r=e?.output;return{stdout:r?`${r.replace(/\n*$/,``)}\n`:``,stderr:``,exitCode:0}}catch(e){return{stdout:``,stderr:`layout: ${e.message}\n`,exitCode:1}}})}const
|
|
1520
|
+
Zones: ${UO.join(`, `)}
|
|
1521
|
+
`,GO=new Set([`files`,`term`,`memory`,`monitor`]),KO=`sprinkle:`;function qO(e){return e===`chat`||GO.has(e)||e.startsWith(KO)?e:`${KO}${e}`}function JO(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 YO=`usage: layout size <surfaceId> [--width <px|percent>] [--height <px|percent>]`;function XO(e){let t=e[0],n=t?fs(t):null;return n?{kind:`set`,tree:n.tree}:{error:`unknown layout: ${t??`(none)`}`}}function ZO(e){let t=e[0];return UO.includes(t)?{kind:`chat`,zone:t}:{error:`usage: layout chat <${UO.join(`|`)}>`}}function QO(e){let[t,n]=e;return!t||!UO.includes(n)?{error:`usage: layout open <surfaceId> <${UO.join(`|`)}>`}:{kind:`open`,surfaceId:qO(t),zone:n}}function $O(e){let t=e[0];return t?{kind:`close`,surfaceId:qO(t)}:{error:`usage: layout close <surfaceId>`}}function ek(e){let[t,n]=e;return!t||!UO.includes(n)?{error:`usage: layout move <surfaceId> <${UO.join(`|`)}>`}:{kind:`move`,surfaceId:qO(t),zone:n}}function tk(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=JO(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 nk(e){let t=e[0];if(!t)return{error:YO};let n={};for(let t=1;t<e.length;t+=2){let r=tk(n,e[t],e[t+1]);if(r)return r}return n.widthPx==null&&n.widthPercent==null&&n.heightPx==null&&n.heightPercent==null?{error:YO}:{kind:`size`,surfaceId:qO(t),size:n}}function rk(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 ik(e,t){let n=t[0];return n?e===`load`?{kind:`load`,name:n}:{kind:`delete`,name:n}:{error:`usage: layout ${e} <name>`}}function ak(e,t){let n=t[0];return n?e===`show`?{kind:`show`,panelId:qO(n)}:{kind:`hide`,panelId:qO(n)}:{error:`usage: layout ${e} <panelId>`}}function ok(){let e=fs(cs);return e?{kind:`set`,tree:e.tree}:{error:`default layout unavailable`}}function sk(e){let[t,...n]=e;switch(t){case`set`:return XO(n);case`chat`:return ZO(n);case`open`:return QO(n);case`close`:return $O(n);case`move`:return ek(n);case`size`:return nk(n);case`reset`:return{kind:`reset`};case`edit`:return ok();case`load`:return ik(`load`,n);case`save`:return rk(n);case`delete`:return ik(`delete`,n);case`docs`:return{kind:`docs`};case`panels`:return{kind:`panels`};case`show`:return ak(`show`,n);case`hide`:return ak(`hide`,n);default:return{error:`usage: layout <set|edit|chat|open|close|move|size|show|hide|load|save|delete|docs|panels|list|reset>`}}}function ck(){return S(`layout`,async e=>{if(w(e))return{stdout:e[0]?.startsWith(`-`)?WO:$e(`layout`,e[0],WO),stderr:``,exitCode:0};if(e[0]===`list`||e.length===0)return{stdout:`layouts: ${Object.keys(ds).join(`, `)}\ndefault: ${cs}\n`,stderr:``,exitCode:0};let t=sk(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
|
|
1522
|
+
`,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 lk=$i.id;function uk(){return`local-llm — inspect and configure the Local LLM provider
|
|
1515
1523
|
|
|
1516
1524
|
Usage:
|
|
1517
1525
|
local-llm Show current config + verify connection
|
|
@@ -1530,20 +1538,20 @@ Common base URLs:
|
|
|
1530
1538
|
llama.cpp http://localhost:8080/v1
|
|
1531
1539
|
vLLM http://localhost:8000/v1
|
|
1532
1540
|
Jan http://localhost:1337/v1
|
|
1533
|
-
`}function
|
|
1541
|
+
`}function dk(e,t){return e.version?t?`${e.kind} (${e.version})`:`${e.kind} ${e.version}`:e.kind}function fk(e){return e.map(e=>` • ${e}`)}function pk(e,t){let n=[`✗ Could not reach ${e}`,` runtime: ${dk(t.runtime,!0)}`,` error: ${t.error?.message??`unknown`}`];return t.error?.hint&&n.push(` hint: ${t.error.hint}`),{stdout:``,stderr:n.join(`
|
|
1534
1542
|
`)+`
|
|
1535
|
-
`,exitCode:1}}function
|
|
1543
|
+
`,exitCode:1}}function mk(e,t){return{stdout:[`✓ ${e}`,` runtime: ${dk(t.runtime,!0)}`,` models: ${t.models.length}`,...fk(t.models)].join(`
|
|
1536
1544
|
`)+`
|
|
1537
|
-
`,stderr:``,exitCode:0}}function
|
|
1545
|
+
`,stderr:``,exitCode:0}}function hk(e,t){let n=t.models.length;return{stdout:[`✓ ${e} (${dk(t.runtime,!1)})`,` Saved ${n} model${n===1?``:`s`} to Settings:`,...fk(t.models)].join(`
|
|
1538
1546
|
`)+`
|
|
1539
|
-
`,stderr:``,exitCode:0}}function
|
|
1540
|
-
`,exitCode:1};let c=await a(s,t(
|
|
1547
|
+
`,stderr:``,exitCode:0}}function gk(){return S(lk,async e=>{if(e.includes(`--help`)||e.includes(`-h`))return{stdout:uk(),stderr:``,exitCode:0};let{getApiKeyForProvider:t,getRawApiKeyForProvider:n,getBaseUrlForProvider:r,addAccount:i}=await import(`./account-store-D48vh7jd.js`).then(e=>e.t),{verifyConnection:a}=await import(`./local-llm-DXIS7Y11.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(lk);if(!s)return{stdout:``,stderr:`Local LLM is not configured. Open Settings → Providers → Local LLM and set a base URL.
|
|
1548
|
+
`,exitCode:1};let c=await a(s,t(lk)??void 0);if(!c.ok)return pk(s,c);if(o===`discover`){let e=n(lk)??``;return i(lk,e,s,c.models.join(`, `)),hk(s,c)}return mk(s,c)})}function _k(){return{stdout:`usage: man <topic>
|
|
1541
1549
|
|
|
1542
1550
|
Fetches documentation for a given topic from sliccy.com.
|
|
1543
|
-
`,stderr:``,exitCode:0}}function
|
|
1551
|
+
`,stderr:``,exitCode:0}}function vk(e){return e.replace(/<[^>]*>/g,``).replace(/</g,`<`).replace(/>/g,`>`).replace(/"/g,`"`).replace(/'/g,`'`).replace(/ /g,` `).replace(/&/g,`&`).trimEnd()}function yk(){let e=h();return S(`man`,async t=>{if(t.includes(`--help`)||t.includes(`-h`))return _k();if(t.length===0)return{stdout:``,stderr:`What manual page do you want?
|
|
1544
1552
|
For example, try 'man commands'.
|
|
1545
|
-
`,exitCode:1};let n=t.join(`-`),r=`https://www.sliccy.com/man/${n}.plain.html`;try{let t=await e(r,{method:`GET`});return t.status===404?{stdout:``,stderr:`No manual entry for ${n}\n`,exitCode:1}:t.status<200||t.status>=300?{stdout:``,stderr:`man: failed to fetch manual page for ${n}: ${t.status} ${t.statusText}\n`,exitCode:1}:{stdout:
|
|
1546
|
-
`,stderr:``,exitCode:0}}catch(e){return{stdout:``,stderr:`man: ${e instanceof Error?e.message:String(e)}\n`,exitCode:1}}})}const
|
|
1553
|
+
`,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:vk(new TextDecoder(`utf-8`).decode(t.body))+`
|
|
1554
|
+
`,stderr:``,exitCode:0}}catch(e){return{stdout:``,stderr:`man: ${e instanceof Error?e.message:String(e)}\n`,exitCode:1}}})}const bk=[`--silent`,`-s`,`--interactive`,`-i`],xk=e(`mcp-command`),Sk=`/workspace/.mcp/aliases`;function U(e){return{stdout:e,stderr:``,exitCode:0}}function W(e,t=1){return{stdout:``,stderr:`${e}\n`,exitCode:t}}function Ck(e){return W(`mcp: ${e}`)}function wk(){return`usage: mcp <command> [args]
|
|
1547
1555
|
|
|
1548
1556
|
Commands:
|
|
1549
1557
|
add <url> <name> Register an MCP server. Runs OAuth if required.
|
|
@@ -1565,7 +1573,7 @@ Examples:
|
|
|
1565
1573
|
mcp search forecast
|
|
1566
1574
|
mcp auth weather
|
|
1567
1575
|
mcp delete weather
|
|
1568
|
-
`}function
|
|
1576
|
+
`}function Tk(e={}){return S(`mcp`,async t=>{if(t.length===0||t[0]===`--help`||t[0]===`-h`)return U(wk());let n=t[0],r=t.slice(1);try{switch(n){case`add`:return await Ek(r,e);case`list`:case`ls`:return await Ok(r,e);case`delete`:case`rm`:return await Mk(r,e);case`invoke`:return await Nk(r,e);case`search`:return await Ak(r,e);case`refresh`:return await $k(r,e);case`auth`:return await eA(r,e);default:return W(`mcp: unknown subcommand "${n}" (try \`mcp --help\`)`)}}catch(e){let t=e instanceof Error?e.message:String(e);return xk.error(`mcp subcommand failed`,{sub:n,error:t}),e instanceof ea?W(`mcp ${n}: ${t}`,124):W(`mcp ${n}: ${t}`)}})}async function Ek(e,t){if(w(e))return U(`usage: mcp add <url> <name>
|
|
1569
1577
|
|
|
1570
1578
|
Probes <url> with an unauthenticated MCP \`initialize\`. If the server
|
|
1571
1579
|
returns 401, runs OAuth discovery → dynamic client registration → PKCE
|
|
@@ -1574,20 +1582,20 @@ authorization-code flow, stores the access token, and retries.
|
|
|
1574
1582
|
On success, the server is persisted to /workspace/.mcp/servers.json and
|
|
1575
1583
|
an alias shim is written to /workspace/.mcp/aliases/<name>.jsh so the
|
|
1576
1584
|
short name resolves on the PATH.
|
|
1577
|
-
`);let n=C(e,{});if(`error`in n)return
|
|
1585
|
+
`);let n=C(e,{});if(`error`in n)return Ck(n.error);if(n.positionals.length<2)return W(`mcp add: expected <url> <name>`);let[r,i]=n.positionals;if(!/^https?:\/\//i.test(r))return W(`mcp add: invalid URL "${r}" (must start with http:// or https://)`);if(!/^[A-Za-z][A-Za-z0-9_-]*$/.test(i))return W(`mcp add: invalid name "${i}" (letters, digits, _ and - only; must start with a letter)`);let{getServer:a,setServer:o}=await import(`./store-BuIUG1zU.js`).then(e=>e.r);if(await a(i,t.fs))return W(`mcp add: a server named "${i}" already exists`);let{McpClient:s,McpAuthRequiredError:c}=await import(`./client-CmfvXtLV.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 Dk(r,i,e.resourceMetadataUrl,t),l=new s({url:r,fetchImpl:t.fetchImpl,getAuthHeader:()=>nA(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 sA(i,t);let m=await uA(i,f,t);if(u){let{registerMcpProvider:e}=await import(`./provider-www4_y-t.js`);e({name:i,serverUrl:r,auth:u})}return U([`Added MCP server "${i}" → ${r}`,` tools: ${d.length}, apps: ${f.length} (${m} sprinkle${m===1?``:`s`})`,` alias: ${Sk}/${i}.jsh`,u?` auth: oauth (provider mcp:${i})`:` auth: none`].join(`
|
|
1578
1586
|
`)+`
|
|
1579
|
-
`)}async function
|
|
1580
|
-
`);let n=C(e,{});if(`error`in n)return
|
|
1587
|
+
`)}async function Dk(e,t,n,r){let{discoverAuth:i,dynamicRegister:a,runAuthFlow:o}=await import(`./oauth-D20BEoY6.js`),{saveOAuthAccount:s}=await import(`./account-store-D48vh7jd.js`).then(e=>e.t),c=await iA(r.oauthFetchImpl),l=r.oauthLauncher??await rA(),u=await i(e,n,c);xk.debug(`MCP OAuth discovery succeeded`,{name:t,serverUrl:e,discoveryPath:u.discoveryPath,issuer:u.issuer});let d=await ta(ge()),f=await a(u,d,c),p=u.supportedScopes&&u.supportedScopes.length>0?u.supportedScopes.join(` `):void 0,m=await o({asMetadata:u,clientId:f.clientId,scope:p,redirectUri:d,launcher:l,fetchImpl:c}),h=`mcp:${t}`;return await s({providerId:h,accessToken:m.accessToken,refreshToken:m.refreshToken,tokenExpiresAt:m.expiresAt,scopes:m.scope}),{providerId:h,authorizationServer:u.issuer,clientId:f.clientId,redirectUri:d,scope:m.scope??p,registrationClientUri:f.registrationClientUri}}async function Ok(e,t){if(w(e))return U(`usage: mcp list
|
|
1588
|
+
`);let n=C(e,{});if(`error`in n)return Ck(n.error);let{ensureAllMcpProvidersRegistered:r}=await import(`./provider-www4_y-t.js`);await r();let{listServers:i}=await import(`./store-BuIUG1zU.js`).then(e=>e.r),a=await i(t.fs),o=Object.keys(a).sort();if(o.length===0)return U("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 U(kk(s))}function kk(e){let t=e[0].map((t,n)=>e.reduce((e,t)=>Math.max(e,(t[n]??``).length),0));return e.map(e=>e.map((e,n)=>e.padEnd(t[n])).join(` `).trimEnd()).join(`
|
|
1581
1589
|
`)+`
|
|
1582
|
-
`}async function
|
|
1590
|
+
`}async function Ak(e,t){if(w(e))return U(`usage: mcp search <query>
|
|
1583
1591
|
|
|
1584
1592
|
Case-insensitive substring search across the cached tools of every
|
|
1585
1593
|
registered MCP server. Matches tool name OR description and prints a
|
|
1586
1594
|
table of (server, tool, description, match-field) rows.
|
|
1587
|
-
`);let n=C(e,{});if(`error`in n)return
|
|
1588
|
-
`);let n=C(e,{});if(`error`in n)return
|
|
1595
|
+
`);let n=C(e,{});if(`error`in n)return Ck(n.error);if(n.positionals.length===0)return W(`mcp search: expected <query>`);let r=n.positionals[0],i=r.toLowerCase(),{ensureAllMcpProvidersRegistered:a}=await import(`./provider-www4_y-t.js`);await a();let{listServers:o}=await import(`./store-BuIUG1zU.js`).then(e=>e.r),s=await o(t.fs),c=Object.keys(s).sort();if(c.length===0)return U("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 U(`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,jk(e.description),e.match]);return U(kk(u))}function jk(e){if(!e)return``;let t=e.replace(/\s+/g,` `).trim();return t.length<=60?t:t.slice(0,59)+`…`}async function Mk(e,t){if(e.length===0||w(e))return e.length===0?W(`mcp delete: expected <name>`):U(`usage: mcp delete <name>
|
|
1596
|
+
`);let n=C(e,{});if(`error`in n)return Ck(n.error);let r=n.positionals[0];if(!r)return W(`mcp delete: expected <name>`);let{ensureMcpProviderRegistered:i,removeMcpProvider:a}=await import(`./provider-www4_y-t.js`);await i(r);let{deleteServer:o}=await import(`./store-BuIUG1zU.js`).then(e=>e.r),s=await o(r,t.fs);await cA(r,t),await lA(r,t);let c=`mcp:${r}`,l=!1;try{let{removeAccount:e,getAccounts:t}=await import(`./account-store-D48vh7jd.js`).then(e=>e.t);t().some(e=>e.providerId===c)&&(await e(c),l=!0)}catch(e){xk.warn(`mcp delete: OAuth removal failed`,{providerId:c,error:e instanceof Error?e.message:String(e)})}let u=a(r);return!s&&!l&&!u?W(`mcp delete: no server, alias, or account found for "${r}"`):U([`Removed MCP server "${r}"`,` servers.json: ${s?`removed`:`not present`}`,` alias: cleaned`,` sprinkles: cleaned`,` oauth: ${l?`removed`:`not present`}`,` provider: ${u?`unregistered`:`not registered`}`].join(`
|
|
1589
1597
|
`)+`
|
|
1590
|
-
`)}async function
|
|
1598
|
+
`)}async function Nk(e,t){if(e.length===0)return W(`mcp invoke: expected <name>`);if(w(e.slice(0,1)))return U(Ik());let n=C([e[0]],{});if(`error`in n)return Ck(n.error);let r=n.positionals[0];if(!r)return W(`mcp invoke: expected <name>`);let i=e.slice(1),{ensureMcpProviderRegistered:a}=await import(`./provider-www4_y-t.js`);await a(r);let{getServer:o}=await import(`./store-BuIUG1zU.js`).then(e=>e.r),s=await o(r,t.fs);if(!s)return W(`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 U(Lk(r,s,c));let l=C([i[0]],{});if(`error`in l)return Ck(l.error);let u=l.positionals[0];if(!u)return W(`mcp invoke: expected <tool>`);let d=c.find(e=>e.name===u);if(!d)return W(`mcp invoke: unknown tool "${u}" on "${r}" (run \`${r}\` to list tools)`);let{timeoutMs:f,remaining:p,warnings:m}=Pk(i.slice(1));if(w(p))return U(zk(r,d));let h=Bk(p,d.inputSchema);if(!h.ok)return W(`mcp invoke: ${h.error}`);let{McpClient:g}=await import(`./client-CmfvXtLV.js`).then(e=>e.n),_=new g({url:s.url,fetchImpl:t.fetchImpl,headers:s.headers,getAuthHeader:s.auth?()=>nA(r):void 0,...f===void 0?{}:{timeoutMs:f}});await _.initialize();let v=Qk(await _.toolsCall(u,h.value));return m.length>0&&(v.stderr=m.map(e=>`${e}\n`).join(``)+v.stderr),v}function Pk(e){let t=[],n=[],r,i=0;for(;i<e.length;){let a=e[i];if(a.startsWith(`--timeout=`)){let e=Fk(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=Fk(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 Fk(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 Ik(){return`usage: mcp invoke <name> [tool] [--timeout <seconds>] [--flag value …]
|
|
1591
1599
|
|
|
1592
1600
|
mcp invoke <name> List tools on <name>.
|
|
1593
1601
|
mcp invoke <name> <tool> --help Show flags for <tool>.
|
|
@@ -1607,20 +1615,20 @@ Arguments are coerced according to the tool's JSON Schema:
|
|
|
1607
1615
|
array of objects) is parsed as JSON, e.g. \`--params '{"url":"…"}'\`.
|
|
1608
1616
|
Nested fields can be set with dotted flags (\`--params.url …\`).
|
|
1609
1617
|
Unknown \`--flags\` exit non-zero instead of being dropped.
|
|
1610
|
-
`}function
|
|
1618
|
+
`}function Lk(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(`
|
|
1611
1619
|
`)+`
|
|
1612
|
-
`}function
|
|
1620
|
+
`}function Rk(e){return e??{}}function zk(e,t){let n=Rk(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(`
|
|
1613
1621
|
`)+`
|
|
1614
1622
|
`;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(`
|
|
1615
1623
|
`)+`
|
|
1616
|
-
`}function
|
|
1624
|
+
`}function Bk(e,t){let n=Rk(t),r=n.properties??{},i=new Set(Array.isArray(n.required)?n.required:[]),a=Kk(),o=0;for(;o<e.length;){let t=Vk(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 Vk(e,t,n,r){let i=e[t];if(!i.startsWith(`--`))return{ok:!1,error:`unexpected positional argument "${i}"`};let{key:a,inlineValue:o}=Yk(i),s=Hk(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=Uk(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,_=Xk(h.raw,g);if(!_.ok)return{ok:!1,error:`--${a}: ${_.error}`};let v=Wk(r,c,l,_.value,p);return v.ok?{ok:!0,nextIndex:h.nextIndex}:v}function Hk(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 qk(r)||a.some(e=>e.length===0||qk(e))?{ok:!1,error:`unknown flag: --${e}`}:{ok:!0,rootKey:r,dottedPath:a,meta:t[r]??{}}}function Uk(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 Wk(e,t,n,r,i){if(n)return Gk(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 Jk(a)&&Jk(r)?(Object.assign(a,r),{ok:!0}):(e[t]=r,{ok:!0})}function Gk(e,t,n,r){if(qk(t)||n.some(e=>e.length===0||qk(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]=Kk();else if(!Jk(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]=Kk();else if(!Jk(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 Kk(){return Object.create(null)}function qk(e){return e===`__proto__`||e===`prototype`||e===`constructor`}function Jk(e){return typeof e==`object`&&!!e&&!Array.isArray(e)&&e!==Object.prototype}function Yk(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 Xk(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 Zk(e);default:return{ok:!0,value:e}}}function Zk(e){let t;try{t=JSON.parse(e)}catch{return{ok:!1,error:`expected object JSON, got "${e}"`}}return Jk(t)?{ok:!0,value:t}:{ok:!1,error:`expected object JSON, got "${e}"`}}function Qk(e){let t=e??{},n=Array.isArray(t.content)?t.content:[],r=[];for(let e of n)if(!(!e||typeof e!=`object`))switch(e.type){case`text`:typeof e.text==`string`&&r.push(e.text);break;case`image`:r.push(`[image: ${e.mimeType??`unknown mime`}]`);break;case`resource`:{let t=e.resource?.uri??e.uri??`unknown uri`;r.push(`[resource: ${t}]`);break}default:r.push(`[${e.type??`unknown`}]`)}let i=r.join(`
|
|
1617
1625
|
`),a=i.endsWith(`
|
|
1618
1626
|
`)?``:`
|
|
1619
|
-
`;return t.isError?{stdout:``,stderr:(i||`(tool reported error)`)+a,exitCode:1}:{stdout:i+(i?a:``),stderr:``,exitCode:0}}async function
|
|
1627
|
+
`;return t.isError?{stdout:``,stderr:(i||`(tool reported error)`)+a,exitCode:1}:{stdout:i+(i?a:``),stderr:``,exitCode:0}}async function $k(e,t){if(e.length===0||w(e))return e.length===0?W(`mcp refresh: expected <name>`):U(`usage: mcp refresh <name>
|
|
1620
1628
|
|
|
1621
1629
|
Re-fetches the tool catalog and \`apps/list\` for <name>. Does NOT refresh
|
|
1622
1630
|
OAuth tokens — for OAuth token refresh use \`mcp auth <name>\`.
|
|
1623
|
-
`);let n=C(e,{});if(`error`in n)return
|
|
1631
|
+
`);let n=C(e,{});if(`error`in n)return Ck(n.error);let r=n.positionals[0];if(!r)return W(`mcp refresh: expected <name>`);let{ensureMcpProviderRegistered:i}=await import(`./provider-www4_y-t.js`);await i(r);let{getServer:a,setServer:o}=await import(`./store-BuIUG1zU.js`).then(e=>e.r),s=await a(r,t.fs);if(!s)return W(`mcp refresh: unknown server "${r}"`);let{McpClient:c,McpAuthRequiredError:l}=await import(`./client-CmfvXtLV.js`).then(e=>e.n),u=new c({url:s.url,fetchImpl:t.fetchImpl,headers:s.headers,getAuthHeader:s.auth?()=>nA(r):void 0});try{await u.initialize()}catch(e){if(e instanceof l)return W(`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 uA(r,f,t);return U(`Refreshed "${r}" — tools: ${d.length}, apps: ${f.length} (${p} sprinkle${p===1?``:`s`})\n`)}async function eA(e,t){if(w(e))return U(`usage: mcp auth <name> [--silent | --interactive]
|
|
1624
1632
|
|
|
1625
1633
|
Re-authenticate an existing MCP server. By default, attempts a silent
|
|
1626
1634
|
token renewal using the persisted refresh_token; if that returns no
|
|
@@ -1632,7 +1640,7 @@ Options:
|
|
|
1632
1640
|
-i, --interactive Skip silent renewal and open the OAuth popup
|
|
1633
1641
|
directly. Use after revoking a refresh token or
|
|
1634
1642
|
when the AS no longer accepts the cached one.
|
|
1635
|
-
`);let n=C(e,{bool:
|
|
1643
|
+
`);let n=C(e,{bool:bk});if(`error`in n)return Ck(n.error);let r=n.positionals[0];if(!r)return W(`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 W(`mcp auth: --silent and --interactive are mutually exclusive`);let{ensureMcpProviderRegistered:o}=await import(`./provider-www4_y-t.js`),s=await o(r,{fetchImpl:t.oauthFetchImpl,launcher:t.oauthLauncher}),{getServer:c}=await import(`./store-BuIUG1zU.js`).then(e=>e.r),l=await c(r,t.fs);if(!l)return W(`mcp auth: unknown server "${r}" (run \`mcp list\` to see configured servers)`);if(!l.auth)return W(`mcp auth: server "${r}" does not use OAuth`);if(!s)return W(`mcp auth: failed to register provider for "${r}"`);let u=`mcp:${r}`,{getRegisteredProviderConfig:d}=await import(`./providers-CMHhoML-.js`).then(e=>e.r),f=d(u);if(!f)return W(`mcp auth: provider "${u}" is not registered`);if(a)return await tA(r,f,t);if(!f.onSilentRenew)return i?W(`mcp auth: provider "${u}" does not support silent renewal; retry without --silent`):await tA(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 W(`mcp auth: silent renewal for "${r}" failed (${t}); retry without --silent to run the interactive flow`);xk.debug(`mcp auth: silent renewal threw, falling back to interactive`,{name:r,error:t})}return p?U(`Re-authenticated "${r}" via silent renewal (provider ${u})\n`):i?W(`mcp auth: silent renewal for "${r}" returned no token; retry without --silent to run the interactive flow`):await tA(r,f,t)}async function tA(e,t,n){if(!t.onOAuthLogin)return W(`mcp auth: provider "${t.id}" does not support interactive OAuth login`);let r=n.oauthLauncher??await rA(),i=!1;return await t.onOAuthLogin(r,()=>{i=!0}),i?U(`Re-authenticated "${e}" via interactive login (provider ${t.id})\n`):W(`mcp auth: interactive login for "${e}" did not complete`)}async function nA(e){let t=`mcp:${e}`,{getOAuthAccountInfo:n}=await import(`./account-store-D48vh7jd.js`).then(e=>e.t),r=n(t);if(!r)return null;if(r.expired){try{let{getRegisteredProviderConfig:e}=await import(`./providers-CMHhoML-.js`).then(e=>e.r),n=await e(t)?.onSilentRenew?.();if(n)return`Bearer ${n}`}catch(e){xk.debug(`silent renewal threw`,{providerId:t,error:e instanceof Error?e.message:String(e)})}return null}return`Bearer ${r.token}`}async function rA(){let{createOAuthLauncher:e}=await import(`./oauth-service-Dn_Xz1FZ.js`);return e()}async function iA(e){if(e)return e;let{createProxiedFetch:t}=await import(`./proxied-fetch-J19bK2dG.js`).then(e=>e.i),n=t();return async(e,t)=>{let r=await n(e,{method:t?.method,headers:t?.headers,body:t?.body}),i=new TextDecoder().decode(r.body);return{ok:r.status>=200&&r.status<300,status:r.status,statusText:r.statusText,text:async()=>i,json:async()=>JSON.parse(i),headers:{get:e=>r.headers[e.toLowerCase()]??null}}}}async function aA(e){if(e)return e;let{VirtualFS:t}=await import(`./fs-Gd3zHsod.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 oA(e){return`// MCP alias for "${e}" — forwards args to \`mcp invoke ${e}\`.
|
|
1636
1644
|
// Auto-generated by \`mcp add ${e}\`; do not edit by hand.
|
|
1637
1645
|
const { promisify } = require('util');
|
|
1638
1646
|
const { exec } = require('child_process');
|
|
@@ -1661,8 +1669,8 @@ try {
|
|
|
1661
1669
|
if (stdout) process.stdout.write(stdout);
|
|
1662
1670
|
if (stderr) process.stderr.write(stderr);
|
|
1663
1671
|
process.exit(exitCode);
|
|
1664
|
-
`}async function
|
|
1665
|
-
`)}\n`}function
|
|
1672
|
+
`}async function sA(e,t){let n=await aA(t.fs);await n.mkdir(Sk,{recursive:!0}),await n.writeFile(`${Sk}/${e}.jsh`,oA(e)),t.scriptCatalog?.invalidateJsh()}async function cA(e,t){let n=await aA(t.fs),r=`${Sk}/${e}.jsh`;try{await n.exists(r)&&await n.rm(r)}catch(e){xk.debug(`alias removal failed`,{path:r,error:e instanceof Error?e.message:String(e)})}t.scriptCatalog?.invalidateJsh()}async function lA(e,t){let{removeAppSprinkles:n}=await import(`./apps-DEhr6ase.js`);await n(e,t.fs)}async function uA(e,t,n){try{let{materializeAppSprinkles:r}=await import(`./apps-DEhr6ase.js`);return(await r(e,t,n.fs)).length}catch(t){return xk.warn(`mcp: failed to materialize app sprinkles`,{name:e,error:t instanceof Error?t.message:String(t)}),0}}function dA(e){return{stdout:``,stderr:`meminfo: ${e}\n`,exitCode:1}}function fA(e){if(e<1024)return`${e} B`;let t=[`KB`,`MB`,`GB`],n=e,r=`B`;for(let e of t){if(n<1024)break;n/=1024,r=e}return`${n.toFixed(1)} ${r}`}function pA(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 mA(){let e=globalThis.performance,t=e?.measureUserAgentSpecificMemory;return t?t.bind(e):null}function hA(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 gA(e){let t=[`total: ${fA(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(`${fA(e.bytes).padEnd(10)} ${e.types.join(`,`).padEnd(20)} ${pA(e)}`)}return`${t.join(`
|
|
1673
|
+
`)}\n`}function _A(e={}){return S(`meminfo`,async t=>{let n=hA(t);if(`error`in n)return dA(n.error);if(n.help)return{stdout:`meminfo - agent-cluster memory diagnostics
|
|
1666
1674
|
|
|
1667
1675
|
Usage:
|
|
1668
1676
|
meminfo Human-readable breakdown (bytes, scope, types, url)
|
|
@@ -1673,8 +1681,8 @@ Notes:
|
|
|
1673
1681
|
Document-Isolation-Policy). Embedded floats cannot be isolated and
|
|
1674
1682
|
report why instead.
|
|
1675
1683
|
- The browser randomizes measurement timing — expect a short delay.
|
|
1676
|
-
`,stderr:``,exitCode:0};let r=e.isIsolated?e.isIsolated():globalThis.crossOriginIsolated===!0,i=e.measure??
|
|
1677
|
-
`)?e:`${e}\n`,exitCode:1}}async function
|
|
1684
|
+
`,stderr:``,exitCode:0};let r=e.isIsolated?e.isIsolated():globalThis.crossOriginIsolated===!0,i=e.measure??mA();if(!r&&!e.measure)return dA(`memory measurement requires a cross-origin-isolated runtime (Document-Isolation-Policy) — this runtime is not isolated`);if(!i)return dA(`performance.measureUserAgentSpecificMemory is not available in this browser`);let a;try{a=await i()}catch(e){return dA(e instanceof Error?e.message:String(e))}return n.json?{stdout:`${JSON.stringify(a,null,2)}\n`,stderr:``,exitCode:0}:{stdout:gA(a),stderr:``,exitCode:0}})}function vA(e){return S(`memory`,async t=>{let{runMemory:n}=await import(`./run-BulfRDHQ.js`);return n(t,e)})}function yA(){return S(`mktemp`,async(e,t)=>{let{runMktemp:n}=await import(`./run-dAJe7sKp.js`);return n(e,t)})}const bA=`/.cache/artificial-analysis.json`,xA=[`--all`,`--all-versions`,`--json`,`--refresh`,`--no-benchmarks`,`--help`,`-h`],SA=[`--provider`];function CA(e){return{stdout:``,stderr:e.endsWith(`
|
|
1685
|
+
`)?e:`${e}\n`,exitCode:1}}async function wA(e){try{let t=await e.readFile(bA),n=JSON.parse(t);if(Date.now()-n.fetchedAt<864e5)return n.models}catch{}return null}function TA(){try{return localStorage.getItem(`aa_api_key`)}catch{return null}}function EA(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 DA(e,t){let n={fetchedAt:Date.now(),models:t};try{await e.mkdir(`/.cache`,{recursive:!0}),await e.writeFile(bA,JSON.stringify(n))}catch{}}async function OA(e,t=!1){if(e&&!t){let t=await wA(e);if(t)return t}let n={Accept:`application/json`},r=TA();r&&(n[`x-api-key`]=r);let i=h(),a;try{a=await i(`https://artificialanalysis.ai/api/v2/data/llms/models`,{method:`GET`,headers:n})}catch{return[]}if(a.status===401||a.status<200||a.status>=300)return[];let o;try{o=JSON.parse(new TextDecoder().decode(a.body))}catch{return[]}if(typeof o!=`object`||!o)return[];let s=o,c=EA(Array.isArray(s)?s:s.data??s.models??[]);return e&&c.length>0&&await DA(e,c),c}function kA(e){return e.toLowerCase().replace(/\./g,`-`).replace(/-\d{8}$/,``).replace(/-\d{4}$/,``)}function AA(e,t){let n=e.toLowerCase(),r=t.find(e=>e.slug===n);if(r)return r;let i=kA(e),a=t.find(e=>kA(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 jA(){return`models - list available LLM models
|
|
1678
1686
|
|
|
1679
1687
|
Usage: models [options]
|
|
1680
1688
|
|
|
@@ -1686,14 +1694,14 @@ Options:
|
|
|
1686
1694
|
--refresh Force re-fetch benchmark data from Artificial Analysis
|
|
1687
1695
|
--no-benchmarks Skip benchmark data enrichment (faster, works offline)
|
|
1688
1696
|
-h, --help Show this help message
|
|
1689
|
-
`}function
|
|
1697
|
+
`}function MA(e){return e>=1e6?`${(e/1e6).toFixed(1)}M`.replace(`.0M`,`M`):e>=1e3?`${(e/1e3).toFixed(0)}K`:`${e}`}function NA(e){return`$${e.toFixed(2)}`}const PA=/\b(embedding|embed|tts|whisper|dall-e|image-gen|audio|vision-preview)\b/i;function FA(e){let t=`${e.id} ${e.name??``}`;return!PA.test(t)}function IA(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 LA(e){let t=e.toLowerCase();return t=t.replace(/-\d{8}$/,``),t=t.replace(/-\d{4}$/,``),t=t.replace(/-(preview|latest)$/,``),IA(t)??t.replace(/-[\d.]+$/,``)}function RA(e){let t=new Map;for(let n of e){let e=LA(n.id);(!t.has(e)||n.selected)&&t.set(e,n)}return[...t.values()]}function zA(e,t,n,r,i){let a=i?AA(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 BA(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=`${NA(e.cost.input)} / ${NA(e.cost.output)}`,a=`${MA(e.contextWindow)} ctx`,o=e.intelligence==null?``:`IQ:${e.intelligence}`,s=e.speed==null?``:`${Math.round(e.speed)} t/s`,c=e.reasoning?`reasoning`:``,l=o||s?`${o.padEnd(6)} ${s.padEnd(8)}`:``;i.push(`${t}${n} ${r.padEnd(16)} ${a.padEnd(10)} ${l} ${c}`)}return i.push(`\n ${n.length} model${n.length===1?``:`s`} available.`),r&&i.push(` Intelligence data: artificialanalysis.ai`),i.join(`
|
|
1690
1698
|
`)+`
|
|
1691
|
-
`}function
|
|
1692
|
-
`);let i=r.resolveCurrentModel(),a=i.id,o=i.provider,s=r.getSelectedProvider(),c=r.getSelectedModelId(),l;if(!n.noBenchmarks){let e=await
|
|
1699
|
+
`}function VA(e){let t=C(e,{bool:xA,value:SA});return`error`in t?t:{jsonMode:t.bools.has(`--json`),allMode:t.bools.has(`--all`),allVersions:t.bools.has(`--all-versions`),forceRefresh:t.bools.has(`--refresh`),noBenchmarks:t.bools.has(`--no-benchmarks`),explicitProvider:t.values.get(`--provider`)}}function HA(e,t,n){if(t.explicitProvider){let n=e.getAvailableProviders();return n.includes(t.explicitProvider)?[t.explicitProvider]:{error:`Unknown provider: ${t.explicitProvider}. Available: ${n.join(`, `)}\n`}}return t.allMode?[...new Set(e.getAccounts().map(e=>e.providerId))]:[n]}function UA(e,t,n,r,i,a){let o=e.getProviderModels(t).filter(FA);if(o.length===0)return[];let s=o.map(e=>zA(e,t,n,r,i)).sort((e,t)=>t.cost.input-e.cost.input);return a||(s=RA(s)),s}function WA(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 GA(e,t){if(w(e,{valueFlags:SA}))return{stdout:jA(),stderr:``,exitCode:0};let n=VA(e);if(`error`in n)return CA(`models: ${n.error}`);let r=await import(`./account-store-D48vh7jd.js`).then(e=>e.t);if(r.getAccounts().length===0)return CA(`No provider accounts configured. Run the provider settings to add one.
|
|
1700
|
+
`);let i=r.resolveCurrentModel(),a=i.id,o=i.provider,s=r.getSelectedProvider(),c=r.getSelectedModelId(),l;if(!n.noBenchmarks){let e=await OA(t,n.forceRefresh);e.length>0&&(l=e)}let u=HA(r,n,s);if(`error`in u)return CA(u.error);let d=[],f=[];for(let e of u){let t=UA(r,e,a,o,l,n.allVersions);if(t.length===0){if(!n.allMode)return CA(`No models available for provider ${e}.\n`);continue}if(d.push(...t),!n.jsonMode){let n=r.getProviderConfig(e);f.push(BA(n.name,e,t,!!l))}}return n.jsonMode?{stdout:JSON.stringify(d,null,2)+`
|
|
1693
1701
|
`,stderr:``,exitCode:0}:(n.allVersions||f.push(`Showing latest versions only. Use --all-versions to see all.
|
|
1694
|
-
`),f.push(
|
|
1695
|
-
`),stderr:``,exitCode:0})}function
|
|
1696
|
-
`,exitCode:9}}:i!==`module`&&i!==`commonjs`?{nextIndex:a,error:
|
|
1702
|
+
`),f.push(WA(o,a,s,c)),{stdout:f.join(`
|
|
1703
|
+
`),stderr:``,exitCode:0})}function KA(e){return S(`models`,async t=>GA(t,e))}const qA=new Set([`-`,`/dev/stdin`,`/dev/fd/0`,`/proc/self/fd/0`]);function JA(e){return e===`-e`||e===`--eval`||qA.has(e)||!e.startsWith(`-`)}function YA(e){return{stdout:``,stderr:`node: ${e} is not a valid value for --input-type. Valid values are: 'commonjs' or 'module'.\n`,exitCode:9}}function XA(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
|
|
1704
|
+
`,exitCode:9}}:i!==`module`&&i!==`commonjs`?{nextIndex:a,error:YA(i)}:{inputType:i,nextIndex:a}}function ZA(e){let t=!1,n=!1,r=!1,i,a=0;for(;a<e.length;){let o=e[a];if(JA(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=XA(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 QA(){return{stdout:`usage: node [options] [script.js] [args...]
|
|
1697
1705
|
node [options] -e <code> [args...]
|
|
1698
1706
|
|
|
1699
1707
|
Options:
|
|
@@ -1702,20 +1710,20 @@ Options:
|
|
|
1702
1710
|
--input-type=TYPE module or commonjs (stdin / -e / .js)
|
|
1703
1711
|
-h, --help print this help
|
|
1704
1712
|
-v, --version print Node shim version
|
|
1705
|
-
`,stderr:``,exitCode:0}}function
|
|
1713
|
+
`,stderr:``,exitCode:0}}function $A(){return{stdout:`${ir}\n`,stderr:``,exitCode:0}}function ej(e,t){if(t){if(e.endsWith(`.mjs`)&&t===`commonjs`)return{stdout:``,stderr:`node: cannot set --input-type=commonjs for a .mjs file
|
|
1706
1714
|
`,exitCode:9};if(e.endsWith(`.cjs`)&&t===`module`)return{stdout:``,stderr:`node: cannot set --input-type=module for a .cjs file
|
|
1707
|
-
`,exitCode:9}}}function
|
|
1708
|
-
`,exitCode:9}};if(e.length>0&&
|
|
1709
|
-
`,exitCode:9}}}function
|
|
1710
|
-
`,exitCode:9}:i.result;let{code:a,filename:o,argv:s,innerCtx:c}=i,l=
|
|
1715
|
+
`,exitCode:9}}}function tj(e,t){if(!e.startsWith(`/`))return t;let n=e.lastIndexOf(`/`);return n<=0?`/`:e.slice(0,n)}function nj(e){return e instanceof Error?e.stack??e.message:String(e)}async function rj(e,t,n){if(!(Yn(e)||dr(e)||t.endsWith(`.mjs`)))return e;try{return(await(await qr()).transform(e,{loader:`js`,format:`cjs`,sourcefile:`${t.replace(/\.[^./]+$/,``)}.js`,supported:{"dynamic-import":!1}})).code}catch(r){if(!/top-level await/i.test(nj(r)))throw r;return Kr()({source:e,filename:t,fromDir:tj(t,n)})}}async function ij(e,t,n){let r=e;try{r=await rj(e,t,n)}catch(e){return{stdout:``,stderr:`${nj(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:`${nj(e)}\n`,exitCode:1}}}async function aj(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
|
|
1716
|
+
`,exitCode:9}};if(e.length>0&&qA.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"
|
|
1717
|
+
`,exitCode:9}}}function oj(e={},t=`node`){return{name:t,trusted:!0,async execute(t,n){let r=ZA(t);if(r.error)return r.error;if(r.help)return QA();if(r.version)return $A();let i=await aj(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
|
|
1718
|
+
`,exitCode:9}:i.result;let{code:a,filename:o,argv:s,innerCtx:c}=i,l=ej(o,r.inputType);if(l)return l;let u=Wr(a);return r.check?ij(u,o,n.cwd):Hr(u,s,c,e.buildProcessConfig?.(n.env),{filename:o})}}}const sj=[`slicc:welcome-flow-fired`,`slicc.trayJoinUrl`,`slicc.trayWorkerBaseUrl`];async function cj(){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 lj=[],uj=[`--yes`];function dj(){return S(`nuke`,async e=>{if(w(e,{valueFlags:lj}))return{stdout:`Usage: nuke <launch-code>
|
|
1711
1719
|
|
|
1712
1720
|
Completely reset the environment by deleting all local data and reloading.
|
|
1713
1721
|
Destroys the file system, chat history, and scoops database.
|
|
1714
1722
|
Requires the secret launch code to proceed.
|
|
1715
|
-
`,stderr:``,exitCode:0};let t=C(e,{value:
|
|
1723
|
+
`,stderr:``,exitCode:0};let t=C(e,{value:lj,bool:uj});return`error`in t?{stdout:``,stderr:`nuke: ${t.error}\n`,exitCode:1}:t.positionals.join(``).includes(`1234`)?((async()=>{await cj(),fj(sj)})(),{stdout:`Nuking everything…
|
|
1716
1724
|
`,stderr:``,exitCode:0}):{stdout:``,stderr:`⚠️ WARNING: this will reset the entire environment, file system, chats, and scoops.
|
|
1717
1725
|
Run nuke again with the secret launch code to proceed.
|
|
1718
|
-
`,exitCode:1}})}function
|
|
1726
|
+
`,exitCode:1}})}function fj(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 pj(){return`oauth-domain — manage extra allowed domains for OAuth-issued tokens
|
|
1719
1727
|
|
|
1720
1728
|
Usage:
|
|
1721
1729
|
oauth-domain list List extra domains for every provider
|
|
@@ -1740,13 +1748,13 @@ Examples:
|
|
|
1740
1748
|
oauth-domain add adobe '*.da.live'
|
|
1741
1749
|
oauth-domain list adobe
|
|
1742
1750
|
oauth-domain remove adobe admin.da.live
|
|
1743
|
-
`}function
|
|
1751
|
+
`}function mj(e){return{stdout:``,stderr:`oauth-domain: ${e}\n`,exitCode:1}}function hj(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(`
|
|
1744
1752
|
`)}\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)
|
|
1745
1753
|
`,stderr:``,exitCode:0}:{stdout:`${n.map(([e,t])=>`${e}: ${t.join(`, `)}`).join(`
|
|
1746
|
-
`)}\n`,stderr:``,exitCode:0}}async function
|
|
1747
|
-
`,exitCode:1};let r=e.getExtraOAuthDomains(t),i=n.toLowerCase();return r.some(e=>e.toLowerCase()===i)?{stdout:`(${n} already in ${t} extras)\n`,stderr:``,exitCode:0}:(await e.setExtraOAuthDomainsAsync(t,[...r,n]),{stdout:`Added ${n} to ${t}. Reload the page to apply.\n`,stderr:``,exitCode:0})}async function
|
|
1748
|
-
`,exitCode:1};let r=e.getExtraOAuthDomains(t),i=n.toLowerCase(),a=r.filter(e=>e.toLowerCase()!==i);return a.length===r.length?{stdout:`(${n} not found in ${t} extras)\n`,stderr:``,exitCode:0}:(await e.setExtraOAuthDomainsAsync(t,a),{stdout:`Removed ${n} from ${t}. Reload the page to apply.\n`,stderr:``,exitCode:0})}async function
|
|
1749
|
-
`,exitCode:1}}async function
|
|
1754
|
+
`)}\n`,stderr:``,exitCode:0}}async function gj(e,t,n){if(!t||!n)return{stdout:``,stderr:`oauth-domain add: requires <providerId> and <domain>
|
|
1755
|
+
`,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 _j(e,t,n){if(!t||!n)return{stdout:``,stderr:`oauth-domain remove: requires <providerId> and <domain>
|
|
1756
|
+
`,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 vj(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>
|
|
1757
|
+
`,exitCode:1}}async function yj(e,t,n,r){switch(t){case`list`:return hj(e,n);case`add`:return gj(e,n,r);case`remove`:return _j(e,n,r);case`clear`:return vj(e,n);default:return{stdout:``,stderr:`oauth-domain: unknown subcommand "${t}"\n${pj()}`,exitCode:1}}}function bj(){return S(`oauth-domain`,async e=>{if(e.length===0||w(e))return{stdout:pj(),stderr:``,exitCode:0};let t=C(e);if(`error`in t)return mj(t.error);let[n,r,i]=t.positionals,a=await import(`./account-store-D48vh7jd.js`).then(e=>e.t);try{return await yj(a,n,r,i)}catch(e){return mj(e instanceof Error?e.message:String(e))}})}function xj(){return S(`oauth-token`,async(e,t)=>{let{runOAuthToken:n}=await import(`./run-tjPSuwX3.js`);return n(e,t)})}const Sj=[`--download`,`-d`,`--view`,`-v`],Cj=[`--size`],wj={low:256,medium:768,high:1536};function Tj(){return{stdout:`usage: open [--download|-d] [--view|-v [--size <spec>]] <url|path> [url|path...]
|
|
1750
1758
|
|
|
1751
1759
|
VFS paths are served in a new browser tab via the preview service worker.
|
|
1752
1760
|
URLs (http/https/etc.) are opened directly in a new tab.
|
|
@@ -1760,19 +1768,19 @@ Examples:
|
|
|
1760
1768
|
medium (768x768), high (1536x1536), or a custom WxH
|
|
1761
1769
|
box like 512x512. The image is fit inside the box
|
|
1762
1770
|
with aspect ratio preserved and is never upscaled.
|
|
1763
|
-
`,stderr:``,exitCode:0}}function
|
|
1771
|
+
`,stderr:``,exitCode:0}}function Ej(e){if(e in wj){let t=wj[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 Dj(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 Oj(){return`open --view requires --size to bound the inlined image. Use one of:
|
|
1764
1772
|
--size low (256x256)
|
|
1765
1773
|
--size medium (768x768)
|
|
1766
1774
|
--size high (1536x1536)
|
|
1767
1775
|
--size WxH (custom box, e.g. 512x512)
|
|
1768
|
-
`}const
|
|
1769
|
-
`)}async function
|
|
1770
|
-
`);let r;try{r=await n(e)}catch(e){return
|
|
1771
|
-
`);let i;try{i=await n.fs.stat(t)}catch{return
|
|
1772
|
-
`);let i=!1;try{i=(await t.fs.stat(e)).isDirectory}catch{}let a=await Xn(t.fs,i?e:ar(e)),o=Dr(e,a),s;try{s=await r(o)}catch(e){return
|
|
1773
|
-
`);if(Qn(e))return
|
|
1776
|
+
`}const kj=new Set([`image/png`,`image/webp`]);function Aj(e){let t=new ArrayBuffer(e.byteLength),n=new Uint8Array(t);return n.set(e),n}async function jj(e,t){let n=Aj(e),r=new Blob([n],{type:t}),i=await createImageBitmap(r);try{return{width:i.width,height:i.height}}finally{i.close?.()}}async function Mj(e,t,n,r){let i=Aj(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=Dj(e,t)?kj.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 Nj(e){let t=C(e,{bool:Sj,value:Cj});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 Pj(e){return{ok:!0,message:e}}function G(e){return{ok:!1,result:{stdout:``,stderr:e,exitCode:1}}}function Fj(e){return e?` (targetId: ${e})`:``}function Ij(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 Lj(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),Pj(`opened sprinkle ${e} from ${a}`)}catch(e){return G(`open: ${e instanceof Error?e.message:String(e)}\n`)}}if(r){let e=await Xn(t.fs,ar(a)),n=Dr(a,e),r;try{r=await i(n)}catch(e){return G(`${e instanceof Error?e.message:String(e)}\n`)}return Pj(`opened ${a} → ${n}${Fj(r)}`)}return G(`open: sprinkle manager not initialized
|
|
1777
|
+
`)}async function Rj(e,t,n){if(!t)return G(`open: browser APIs are unavailable in this environment
|
|
1778
|
+
`);let r;try{r=await n(e)}catch(e){return G(`${e instanceof Error?e.message:String(e)}\n`)}return Pj(`opened ${e}${Fj(r)}`)}async function zj(e,n,r,i){let a;try{a=await r.fs.stat(n)}catch{return G(`open: no such file: ${e}\n`)}if(!a.isFile)return G(`open: not a file: ${e}\n`);let o;try{o=await r.fs.readFileBuffer(n)}catch{return G(`open: failed to read: ${e}\n`)}let s=Jn(n),c=new Uint8Array(o),l=null;if(i!==void 0&&(l=Ej(i),!l))return G(`open: invalid --size spec '${i}' (expected low|medium|high or WxH such as 512x512)\n`);if(!l){let t;try{t=await jj(c,s)}catch(t){return G(`open: not an image or failed to decode: ${e} (${t instanceof Error?t.message:String(t)})\n`)}let r=Math.round(c.byteLength/1024);return G(`open --view: ${n} is ${t.width}x${t.height} (${r} KB, ${s})\n`+Oj())}let u;try{u=await Mj(c,s,l.maxW,l.maxH)}catch(t){return G(`open: not an image or failed to decode: ${e} (${t instanceof Error?t.message:String(t)})\n`)}let d=t(u.bytes),f=Math.round(u.bytes.byteLength/1024);return Pj(`${n} (${u.nativeWidth}x${u.nativeHeight} → ${u.width}x${u.height}, ${f} KB, ${u.mime})\n<img:data:${u.mime};base64,${d}>`)}async function Bj(e,t,n,r){if(!r)return G(`open: --download requires the in-panel terminal (DOM-only)
|
|
1779
|
+
`);let i;try{i=await n.fs.stat(t)}catch{return G(`open: no such file: ${e}\n`)}if(!i.isFile)return G(`open: not a file: ${e}\n`);let a;try{a=await n.fs.readFileBuffer(t)}catch{return G(`open: failed to read: ${e}\n`)}let o=new Uint8Array(a.byteLength);o.set(a);let s=new Blob([o.buffer],{type:Jn(t)}),c=URL.createObjectURL(s),l=document.createElement(`a`);return l.href=c,l.download=er(t)||`download`,l.style.display=`none`,document.body.appendChild(l),l.click(),document.body.removeChild(l),setTimeout(()=>URL.revokeObjectURL(c),0),Pj(`downloaded ${t}`)}async function Vj(e,t,n,r){if(!n)return G(`open: browser APIs are unavailable in this environment
|
|
1780
|
+
`);let i=!1;try{i=(await t.fs.stat(e)).isDirectory}catch{}let a=await Xn(t.fs,i?e:ar(e)),o=Dr(e,a),s;try{s=await r(o)}catch(e){return G(`${e instanceof Error?e.message:String(e)}\n`)}return Pj(`opened ${e} → ${o}${Fj(s)}`)}async function Hj(e,t,n,r){if(!Qn(e)&&e.endsWith(`.shtml`)&&t.fs)return Lj(e,t,r.sprinkleManager,r.canOpenWindow,r.openExternal);if(!n.view&&!r.canOpenWindow)return G(`open: browser APIs are unavailable in this environment
|
|
1781
|
+
`);if(Qn(e))return Rj(e,r.canOpenWindow,r.openExternal);let i=t.fs.resolvePath(t.cwd,e);return n.view?zj(e,i,t,n.sizeSpec):n.download?Bj(e,i,t,r.hasDom):Vj(i,t,r.canOpenWindow,r.openExternal)}function Uj(e){return S(`open`,async(t,n)=>{if(t.length===0||w(t,{valueFlags:Cj}))return Tj();let r=Nj(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 Tj();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:Ij(e,l,u)},f=[];for(let e of s){let t=await Hj(e,n,{view:a,download:i,sizeSpec:o},d);if(!t.ok)return t.result;f.push(t.message)}return{stdout:f.join(`
|
|
1774
1782
|
`)+`
|
|
1775
|
-
`,stderr:``,exitCode:0}})}function
|
|
1783
|
+
`,stderr:``,exitCode:0}})}function Wj(){return S(`patch`,async(e,t)=>{let{runPatch:n}=await import(`./run-DJZs27IU.js`);return n(e,t)})}function Gj(e=`pdftk`){return S(e,async(t,n)=>{let{runPdftk:r}=await import(`./run-BEs473Sp.js`);return r(e,t,n)})}function Kj(){return{stdout:`usage: pdftoppm [options] <input.pdf> [output-prefix]
|
|
1776
1784
|
|
|
1777
1785
|
Rasterize PDF pages to images. Writes <prefix>-<n>.<ext> per page, where <n>
|
|
1778
1786
|
is zero-padded to the digit width of the last page (out-1.png for a 9-page
|
|
@@ -1799,8 +1807,8 @@ Examples:
|
|
|
1799
1807
|
pdftoppm -png -r 150 doc.pdf page
|
|
1800
1808
|
pdftoppm -jpeg -jpegopt quality=80 -f 1 -l 3 doc.pdf out
|
|
1801
1809
|
pdftoppm -png -singlefile -scale-to 1024 doc.pdf cover
|
|
1802
|
-
`,stderr:``,exitCode:0}}function
|
|
1803
|
-
`)}\n`,stderr:``,exitCode:0}}catch(t){return{stdout:``,stderr:`${e}: ${t instanceof Error?t.message:String(t)}\n`,exitCode:1}}})}function
|
|
1810
|
+
`,stderr:``,exitCode:0}}function qj(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 Jj(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 Yj(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=Jj(e[++d]),t=`jpeg`;break;case`-r`:n=qj(e[++d],`-r`);break;case`-f`:r=qj(e[++d],`-f`);break;case`-l`:i=qj(e[++d],`-l`);break;case`-scale-to`:a=qj(e[++d],`-scale-to`);break;case`-scale-to-x`:o=qj(e[++d],`-scale-to-x`);break;case`-scale-to-y`:s=qj(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 Xj(e){let t=e.lastIndexOf(`.`);return t>0?e.slice(0,t):e}function Zj(e,t,n,r){let i=String(n).length;return`${e}-${String(t).padStart(i,`0`)}.${r}`}function Qj(e){return e===`jpeg`?`jpg`:`png`}function $j(e){return e.scaleToX===void 0?e.scaleToY===void 0?e.scaleTo===void 0?{scale:Li(e.dpi)}:{longEdge:e.scaleTo}:{height:e.scaleToY}:{width:e.scaleToX}}async function eM(e,t){let n=e.fs.resolvePath(e.cwd,t),r=await e.fs.readFileBuffer(n);if(!Fi(r))throw Error(`${t}: not a PDF file`);return r}function tM(e=`pdftoppm`){return S(e,async(t,n)=>{if(t.length===0||t.includes(`--help`)||t.includes(`-h`))return Kj();let r;try{r=Yj(t)}catch(t){return{stdout:``,stderr:`${e}: ${t instanceof Error?t.message:String(t)}\n`,exitCode:1}}try{let t=await eM(n,r.inputPath),i=Qj(r.format),a=r.outputRoot??Xj(er(r.inputPath)),o=[];return await Pi(t,{firstPage:r.firstPage,lastPage:r.singleFile?r.firstPage??1:r.lastPage,format:r.format,quality:r.quality,...$j(r)},async(e,t)=>{let s=r.singleFile?`${a}.${i}`:Zj(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(`
|
|
1811
|
+
`)}\n`,stderr:``,exitCode:0}}catch(t){return{stdout:``,stderr:`${e}: ${t instanceof Error?t.message:String(t)}\n`,exitCode:1}}})}function nM(e=`pdftotext`){return S(e,async(t,n)=>{let{runPdftotext:r}=await import(`./run-BVzzZSqz.js`);return r(e,t,n)})}function rM(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 iM(){cw(()=>()=>ee()),sw(()=>()=>rM(ee()))}const aM=`/workspace/.plugins/sources`;function oM(e){return{stdout:e,stderr:``,exitCode:0}}function K(e,t=1){return{stdout:``,stderr:`${e}\n`,exitCode:t}}function sM(e,t){let n=C(t,{});return`error`in n?K(`plugin ${e}: ${n.error}`):{ok:!0,positionals:n.positionals}}function cM(){return`usage: plugin <command> [args]
|
|
1804
1812
|
|
|
1805
1813
|
Load Agent Plugins packages (agent-plugins.org spec v1.0.0): portable
|
|
1806
1814
|
directories bundling Agent Skills (skills/*/SKILL.md) and MCP servers
|
|
@@ -1810,7 +1818,7 @@ Commands:
|
|
|
1810
1818
|
install <path|repo> Validate the plugin and register it. <repo> is a
|
|
1811
1819
|
GitHub reference (owner/repo, owner/repo@branch, or
|
|
1812
1820
|
https://github.com/owner/repo[/tree/branch[/dir]]),
|
|
1813
|
-
downloaded into ${
|
|
1821
|
+
downloaded into ${aM}/.
|
|
1814
1822
|
Skills surface through the standard skills discovery;
|
|
1815
1823
|
streamable-http MCP servers are added to the MCP
|
|
1816
1824
|
store as "<plugin>:<server>".
|
|
@@ -1832,36 +1840,36 @@ Examples:
|
|
|
1832
1840
|
plugin list
|
|
1833
1841
|
plugin info my-plugin
|
|
1834
1842
|
plugin remove my-plugin
|
|
1835
|
-
`}function
|
|
1843
|
+
`}function lM(e={}){return S(`plugin`,async(t,n)=>{if(t.length===0||t[0]===`--help`||t[0]===`-h`)return oM(cM());let r=t[0],i=t.slice(1),a=n?.cwd??`/`;try{switch(r){case`install`:case`add`:return await gM(i,a,e);case`list`:case`ls`:return await bM(i,e);case`info`:return await xM(i,e);case`validate`:return await SM(i,a,e,zi(n?.env));case`remove`:case`rm`:case`delete`:return await CM(i,e);default:return K(`plugin: unknown subcommand "${r}" (try \`plugin --help\`)`)}}catch(e){return K(`plugin ${r}: ${e instanceof Error?e.message:String(e)}`)}})}async function uM(e){if(e.fs)return e.fs;let{VirtualFS:t}=await import(`./fs-Gd3zHsod.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 dM(e,t,n){let r=wM(t,e);if(await n.exists(r))return{kind:`local`,root:r};let{parseGitHubRef:i}=await import(`./github-install-COa6G7Bf.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 fM(e){let t=e.replace(/[^A-Za-z0-9._-]+/g,`-`);return/^\.+$/.test(t)?t.replace(/\./g,`_`):t}function pM(e){let t=[e.owner,e.repo,...e.path?[e.path]:[]];return`${aM}/${t.map(fM).join(`--`)}`}async function mM(e,t,n,r){let{fetchRepoZip:i,stripZipPrefix:a,writeZipFilesToDir:o}=await import(`./github-zip-Cr9Lysol.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 hM(e,t){try{await e.rm(t,{recursive:!0})}catch{}}async function gM(e,t,n){if(w(e))return oM(`usage: plugin install <path|repo>
|
|
1836
1844
|
|
|
1837
1845
|
Loads the Agent Plugins package at <path>, or downloads it from a GitHub
|
|
1838
1846
|
reference (owner/repo, owner/repo@branch, or
|
|
1839
1847
|
https://github.com/owner/repo[/tree/branch[/dir]]) into
|
|
1840
|
-
${
|
|
1848
|
+
${aM}/ first. Validates plugin.json (closed
|
|
1841
1849
|
schema, name constraints), discovers skills/*/SKILL.md, and validates
|
|
1842
1850
|
mcp.json. On success the plugin is recorded in
|
|
1843
1851
|
/workspace/.plugins/plugins.json — its skills then surface through the
|
|
1844
1852
|
standard skills discovery, and each supported streamable-http MCP server
|
|
1845
1853
|
is registered in the MCP store as "<plugin>:<server>".
|
|
1846
|
-
`);let r=
|
|
1854
|
+
`);let r=sM(`install`,e);if(!(`ok`in r))return r;if(r.positionals.length<1)return K(`plugin install: expected <path|repo>`);let i=await uM(n),a=await dM(r.positionals[0],t,i);if(a.kind===`error`)return K(`plugin install: ${a.message}`);let o,s;if(a.kind===`github`){if(!n.fetch)return K(`plugin install: GitHub installs are unavailable (no network fetch configured)`);o=pM(a.ref),s=a.ref.display;let e=await mM(a.ref,o,i,n.fetch);if(e)return K(`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 hM(i,o),K(`plugin install: plugin at ${s??o} was rejected:\n${TM(l.diagnostics)}`);let{plugin:u}=l,d=u.manifest.name,{getInstalledPlugin:f,setInstalledPlugin:p}=await import(`./store-Cy7u1gHP.js`),m=await f(d,n.fs);if(m&&m.root!==o)return a.kind===`github`&&await hM(i,o),K(`plugin install: a plugin named "${d}" is already installed from ${m.root} (remove it first)`);let h=await yM(u,n),g=await vM(d,m?.mcpServerNames,h.registered,n);return await p(d,{root:o,version:u.manifest.version,description:u.manifest.description,installedAt:new Date().toISOString(),mcpServerNames:h.registered,...s?{source:s}:{}},n.fs),oM(_M(u,h,g,s??o,l.diagnostics))}function _M(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:`,TM(i)),c.join(`
|
|
1847
1855
|
`)+`
|
|
1848
|
-
`}async function
|
|
1849
|
-
`);let n=
|
|
1856
|
+
`}async function vM(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-BuIUG1zU.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 yM(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-BuIUG1zU.js`).then(e=>e.r),{McpClient:a}=await import(`./client-CmfvXtLV.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 bM(e,t){if(w(e))return oM(`usage: plugin list
|
|
1857
|
+
`);let n=sM(`list`,e);if(!(`ok`in n))return n;let{listInstalledPlugins:r}=await import(`./store-Cy7u1gHP.js`),i=await r(t.fs),a=Object.keys(i).sort();if(a.length===0)return oM("No agent plugins installed. Use `plugin install <path>`.\n");let o=[[`NAME`,`VERSION`,`ROOT`,`MCP`]];for(let e of a){let t=i[e];o.push([e,t.version??`-`,t.root,String(t.mcpServerNames?.length??0)])}let s=o[0].map((e,t)=>Math.max(...o.map(e=>e[t].length)));return oM(o.map(e=>e.map((e,t)=>e.padEnd(s[t])).join(` `)).join(`
|
|
1850
1858
|
`)+`
|
|
1851
|
-
`)}async function
|
|
1852
|
-
`);let n=
|
|
1859
|
+
`)}async function xM(e,t){if(w(e))return oM(`usage: plugin info <name>
|
|
1860
|
+
`);let n=sM(`info`,e);if(!(`ok`in n))return n;if(n.positionals.length<1)return K(`plugin info: expected <name>`);let r=n.positionals[0],{getInstalledPlugin:i}=await import(`./store-Cy7u1gHP.js`),a=await i(r,t.fs);if(!a)return K(`plugin info: no installed plugin named "${r}"`);let o=await uM(t),{loadPluginFromDirectory:s}=await import(`./loader-Dw-TPPKt.js`),c=await s(o,a.root);if(!c.ok)return K(`plugin info: plugin at ${a.root} no longer loads:\n${TM(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:`,TM(c.diagnostics)),oM(d.join(`
|
|
1853
1861
|
`)+`
|
|
1854
|
-
`)}async function
|
|
1855
|
-
`);let i=
|
|
1862
|
+
`)}async function SM(e,t,n,r){if(w(e))return oM(`usage: plugin validate <path|repo>
|
|
1863
|
+
`);let i=sM(`validate`,e);if(!(`ok`in i))return i;if(i.positionals.length<1)return K(`plugin validate: expected <path|repo>`);let a=await uM(n),o=await dM(i.positionals[0],t,a);if(o.kind===`error`)return K(`plugin validate: ${o.message}`);let s,c=null;if(o.kind===`github`){if(!n.fetch)return K(`plugin validate: GitHub sources are unavailable (no network fetch configured)`);c=`${r}/.plugin-validate/${pM(o.ref).split(`/`).pop()}`;let e=await mM(o.ref,c,a,n.fetch);if(e)return K(`plugin validate: ${e}`);s=c}else s=o.root;let{loadPluginFromDirectory:l}=await import(`./loader-Dw-TPPKt.js`),u;try{u=await l(a,s)}finally{c&&await hM(a,c)}if(!u.ok)return{stdout:``,stderr:`plugin validate: REJECTED\n${TM(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:`,TM(u.diagnostics)),oM(p.join(`
|
|
1856
1864
|
`)+`
|
|
1857
|
-
`)}async function
|
|
1858
|
-
`);let n=
|
|
1865
|
+
`)}async function CM(e,t){if(w(e))return oM(`usage: plugin remove <name>
|
|
1866
|
+
`);let n=sM(`remove`,e);if(!(`ok`in n))return n;if(n.positionals.length<1)return K(`plugin remove: expected <name>`);let r=n.positionals[0],{getInstalledPlugin:i,deleteInstalledPlugin:a}=await import(`./store-Cy7u1gHP.js`),o=await i(r,t.fs);if(!o)return K(`plugin remove: no installed plugin named "${r}"`);let s=0;if(o.mcpServerNames&&o.mcpServerNames.length>0){let{deleteServer:e,getServer:n}=await import(`./store-BuIUG1zU.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(`${aM}/`);return c&&await hM(await uM(t),o.root),oM([`Removed agent plugin "${r}"`,` registry: removed`,` mcp servers: ${s} removed`,c?` files: removed (${o.root})`:` files: left in place (${o.root})`].join(`
|
|
1859
1867
|
`)+`
|
|
1860
|
-
`)}function
|
|
1861
|
-
`)}const
|
|
1862
|
-
`,exitCode:1};let r=C(t,{bool:
|
|
1868
|
+
`)}function wM(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 TM(e){return e.map(e=>` ${e.level===`error`?`error`:`warn `} [${e.component}] ${e.message}`).join(`
|
|
1869
|
+
`)}const EM=[`pid`,`ppid`,`kind`,`stat`,`start`,`scoop`,`command`],DM=[`pid`,`ppid`,`stat`,`start`,`scoop`,`command`],OM={running:`R`,pending:`S`,exited:`Z`,killed:`K`},kM=[`-a`,`-A`,`-e`,`--all`,`-T`,`--tree`],AM=[`-o`,`--columns`];function jM(e={}){return S(`ps`,async t=>{if(w(t,{valueFlags:AM}))return GM();let n=e.processManager??MM();if(!n)return{stdout:``,stderr:`ps: no process manager available in this runtime
|
|
1870
|
+
`,exitCode:1};let r=C(t,{bool:kM,value:AM});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=DM,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=NM(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?WM(l):l.map(e=>({proc:e,depth:0})),d=PM(i,u.map(({proc:e})=>e),s!==void 0),f=u.map(({proc:e,depth:t})=>LM(e,i,t,a,d));return{stdout:[FM(i,d),...f].join(`
|
|
1863
1871
|
`)+`
|
|
1864
|
-
`,stderr:``,exitCode:0}})}function
|
|
1872
|
+
`,stderr:``,exitCode:0}})}function MM(){let e=globalThis.__slicc_pm;return e instanceof Object&&typeof e.list==`function`?e:null}function NM(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(!EM.includes(e))return Error(`unknown column '${e}'; supported: ${EM.join(`, `)}`);n.push(e)}return n}function PM(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,BM(e).length);return{full:!0,width:r}}function FM(e,t){return e.map(e=>IM(e,t)).join(` `)}function IM(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 LM(e,t,n,r,i){return t.map(t=>RM(e,t,n,r,i)).join(` `)}function RM(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 OM[e.status];case`start`:return zM(e.startedAt);case`scoop`:return VM(e,i);case`command`:return HM(e,n,r)}}function zM(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 BM(e){return e.owner.kind===`cone`?`cone`:e.owner.kind===`system`?`system`:e.owner.kind===`jshd`?`jshd`:e.owner.scoopJid??`scoop`}function VM(e,t){let n=BM(e);return(t.full?n:n.slice(0,t.width)).padEnd(t.width)}function HM(e,t,n){let r=n&&t>0?` `.repeat(t-1)+`└─ `:``,i=e.argv.length===0?`[${e.kind}]`:e.argv.map(UM).join(` `);return r+(i.length>80?i.slice(0,79)+`…`:i)}function UM(e){return e===``?`''`:/^[A-Za-z0-9_./:=@%+-]+$/.test(e)?e:e.includes(`"`)&&!e.includes(`'`)?`'${e}'`:`"${e.replace(/\\/g,`\\\\`).replace(/"/g,`\\"`)}"`}function WM(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 GM(){return{stdout:`Usage: ps [-a] [-T] [-o col[,col…]]
|
|
1865
1873
|
|
|
1866
1874
|
List processes tracked by the kernel.
|
|
1867
1875
|
|
|
@@ -1894,9 +1902,9 @@ Examples:
|
|
|
1894
1902
|
ps -a -T full tree
|
|
1895
1903
|
ps -o pid,kind,stat just three columns
|
|
1896
1904
|
ps -o scoop,stat,pid full scoop jid, with STAT and PID
|
|
1897
|
-
`,stderr:``,exitCode:0}}const
|
|
1898
|
-
`,stderr:``,exitCode:0}}function
|
|
1899
|
-
`,stderr:``,exitCode:0}}async function
|
|
1905
|
+
`,stderr:``,exitCode:0}}const KM=new Set([`dev`,`proc`,`lib`,`bin`,`usr`,`etc`,`home`,`tmp`]);async function qM(e,t=KM){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 JM(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 YM(){try{if(typeof globalThis.navigator?.storage?.getDirectory==`function`)return`slicc-fs`}catch{}}function XM(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 ZM(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 QM(e,t){return`installed pyodide ${e} is not the supported version ${t}: run \`ipk uninstall pyodide\` then \`ipk add pyodide@${t}\``}function $M(){return{stdout:`usage: python3 [-c code | script.py] [args...]
|
|
1906
|
+
`,stderr:``,exitCode:0}}function eN(){return{stdout:`Python 3.14 (Pyodide)
|
|
1907
|
+
`,stderr:``,exitCode:0}}async function tN(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 nN(e){let t=XM(e),n=await wr(t);if(!n)return{kind:`result`,result:{stdout:``,stderr:`${Cr}\n`,exitCode:1}};let r=await ZM(t.reader,n);return r?r===pr?{kind:`ok`,assetRoot:n}:{kind:`result`,result:{stdout:``,stderr:`${QM(r,pr)}\n`,exitCode:1}}:{kind:`result`,result:{stdout:``,stderr:`${Cr}\n`,exitCode:1}}}function rN(e,t={}){return S(e,async(n,r)=>{let i=n[0];if(i===`--help`||i===`-h`)return $M();if(i===`--version`||i===`-V`)return eN();let a=await tN(e,n,r);if(a.kind===`result`)return a.result;let{code:o,filename:s,sysArgv:c,procArgv:l}=a,u=await qM(r.fs),d=JM(r.fs,u),f=t.buildProcessConfig?.(r.env),p=f?.processManager??iN(),m=f?.owner??{kind:`system`},h=f?.getParentPid?.(),g=t.realmFactory??jr(),_=t.pyodideIndexURL??Gr(),v=t.pyodideAssetRoot;if(!v&&_===void 0){let e=await nN(r);if(e.kind===`result`)return e.result;v=e.assetRoot}let ee=s===`<stdin>`?``:P(r.stdin),te=YM();return p?Vr({pm:p,realmFactory:g,owner:m,kind:`py`,code:o,argv:l,realmArgv:c,env:Object.fromEntries(r.env.entries()),cwd:r.cwd,filename:s,ctx:r,stdin:ee,pyodideIndexURL:_,pyodideAssetRoot:v,pyodideMountDirs:u,opfsMountDbName:te,mountPoints:d,procKind:`py`,ppid:h,syncFsBridgeEnabled:Ar()}):oN({realmFactory:g,owner:m,code:o,argv:l,realmArgv:c,env:Object.fromEntries(r.env.entries()),cwd:r.cwd,filename:s,ctx:r,stdin:ee,pyodideIndexURL:_,pyodideAssetRoot:v,pyodideMountDirs:u,opfsMountDbName:te,mountPoints:d})})}function iN(){let e=globalThis.__slicc_pm;return e&&typeof e==`object`&&typeof e.spawn==`function`&&typeof e.onSignal==`function`?e:null}let aN=null;async function oN(e){if(!aN){let{ProcessManager:e}=await import(`./process-manager-BkhAohXT.js`).then(e=>e.n);aN=new e}return Vr({pm:aN,realmFactory:e.realmFactory,owner:e.owner,kind:`py`,code:e.code,argv:e.argv,realmArgv:e.realmArgv,env:e.env,cwd:e.cwd,filename:e.filename,ctx:e.ctx,stdin:e.stdin,pyodideIndexURL:e.pyodideIndexURL,pyodideAssetRoot:e.pyodideAssetRoot,pyodideMountDirs:e.pyodideMountDirs,mountPoints:e.mountPoints,opfsMountDbName:e.opfsMountDbName,procKind:`py`,syncFsBridgeEnabled:Ar()})}function sN(){return S(`rg`,async(e,t)=>{let{runRg:n}=await import(`./run-DniTiLYn.js`);return n(e,t)})}function cN(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 lN(){return null}function uN(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=dN(r),o=dN(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 dN(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 fN(){return{stdout:`rsync — sync files between local VFS and a remote tray runtime
|
|
1900
1908
|
|
|
1901
1909
|
Usage:
|
|
1902
1910
|
rsync [flags] <local-path> <runtime-id>:<remote-path> # push
|
|
@@ -1912,21 +1920,21 @@ Examples:
|
|
|
1912
1920
|
rsync /workspace follower-abc123:/workspace
|
|
1913
1921
|
rsync --delete /shared leader:/shared
|
|
1914
1922
|
rsync follower-abc123:/workspace/project /workspace/project
|
|
1915
|
-
`,stderr:``,exitCode:0}}async function
|
|
1923
|
+
`,stderr:``,exitCode:0}}async function pN(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 mN(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 hN(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 gN(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 _N(e){let t=e.lastIndexOf(`/`);return t<=0?`/`:e.slice(0,t)}async function vN(e,n,r){let i=[],{localPath:a,remotePath:o,runtimeId:s,verbose:c,dryRun:l}=r,u=cN(await pN(e,a),await mN(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(`
|
|
1916
1924
|
`)+`
|
|
1917
|
-
`,stderr:``,exitCode:0};for(let r of[...u.toAdd,...u.toUpdate]){let c=a+`/`+r,l=o+`/`+r;await
|
|
1925
|
+
`,stderr:``,exitCode:0};for(let r of[...u.toAdd,...u.toUpdate]){let c=a+`/`+r,l=o+`/`+r;await gN(n,s,_N(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(`
|
|
1918
1926
|
`)+`
|
|
1919
1927
|
`,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(`
|
|
1920
1928
|
`)+`
|
|
1921
1929
|
`,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(`
|
|
1922
1930
|
`)+`
|
|
1923
|
-
`,stderr:``,exitCode:0}}async function
|
|
1931
|
+
`,stderr:``,exitCode:0}}async function yN(e,t,r){let i=[],{localPath:a,remotePath:o,runtimeId:s,verbose:c,dryRun:l}=r,u=cN(await mN(t,s,o),await pN(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(`
|
|
1924
1932
|
`)+`
|
|
1925
|
-
`,stderr:``,exitCode:0};for(let r of[...u.toAdd,...u.toUpdate]){let i=o+`/`+r,c=a+`/`+r,l=
|
|
1933
|
+
`,stderr:``,exitCode:0};for(let r of[...u.toAdd,...u.toUpdate]){let i=o+`/`+r,c=a+`/`+r,l=_N(c);await e.exists(l)||await e.mkdir(l,{recursive:!0});let u=await hN(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(`
|
|
1926
1934
|
`)+`
|
|
1927
|
-
`,stderr:``,exitCode:0}}function
|
|
1935
|
+
`,stderr:``,exitCode:0}}function bN(e={}){let t=e.fs,n=e.getSendFsRequest??lN;return S(`rsync`,async e=>{if(e.includes(`--help`)||e.includes(`-h`)||e.length===0)return fN();if(!t)return{stdout:``,stderr:`rsync: no filesystem available
|
|
1928
1936
|
`,exitCode:1};let r=n();if(!r)return{stdout:``,stderr:`rsync: not connected to a tray — rsync requires a tray connection
|
|
1929
|
-
`,exitCode:1};let i=
|
|
1937
|
+
`,exitCode:1};let i=uN(e);if(`error`in i)return i.error===`__help__`?fN():{stdout:``,stderr:`rsync: ${i.error}\n`,exitCode:1};try{return i.direction===`push`?await vN(t,r,i):await yN(t,r,i)}catch(e){return{stdout:``,stderr:`rsync: ${e instanceof Error?e.message:String(e)}\n`,exitCode:1}}})}function xN(){return{stdout:`usage: say [-v voice] [-r rate] [-l lang] [-o file] [--list] <text>
|
|
1930
1938
|
say --status | --warmup
|
|
1931
1939
|
|
|
1932
1940
|
Speaks the given text. Uses on-device Kokoro voices when the model
|
|
@@ -1945,14 +1953,14 @@ Examples:
|
|
|
1945
1953
|
[web speech] otherwise); kokoro voices lead when ready
|
|
1946
1954
|
--status Show the on-device voice state (downloading/ready + ETA)
|
|
1947
1955
|
--warmup Stage + start the on-device voice download in the background
|
|
1948
|
-
`,stderr:``,exitCode:0}}function
|
|
1956
|
+
`,stderr:``,exitCode:0}}function SN(e){switch(e.state){case`ready`:return`voice engine: ready
|
|
1949
1957
|
`;case`failed`:return`voice engine: failed (re-run say --warmup to retry)
|
|
1950
1958
|
`;case`idle`:return`voice engine: not downloaded (run say --warmup)
|
|
1951
|
-
`;case`loading`:{let t=e=>(e/1024/1024).toFixed(1);return`voice engine: downloading${e.loaded!=null&&e.total?` ${t(e.loaded)}/${t(e.total)} MB`:``}${e.etaSeconds!=null&&Number.isFinite(e.etaSeconds)?` · ready in ~${Math.max(1,Math.round(e.etaSeconds))}s`:``}\n`}}}function
|
|
1959
|
+
`;case`loading`:{let t=e=>(e/1024/1024).toFixed(1);return`voice engine: downloading${e.loaded!=null&&e.total?` ${t(e.loaded)}/${t(e.total)} MB`:``}${e.etaSeconds!=null&&Number.isFinite(e.etaSeconds)?` · ready in ~${Math.max(1,Math.round(e.etaSeconds))}s`:``}\n`}}}function q(e){return{stdout:``,stderr:`say: ${e}\n`,exitCode:1}}function CN(e){return e instanceof Error?e.message:String(e)}let wN=!1,TN=null;function EN(){return wN?Promise.resolve(speechSynthesis.getVoices()):(TN||=new Promise(e=>{let t=speechSynthesis.getVoices();if(t.length>0){wN=!0,e(t);return}let n=()=>{wN=!0,speechSynthesis.removeEventListener(`voiceschanged`,n),e(speechSynthesis.getVoices())};speechSynthesis.addEventListener(`voiceschanged`,n),setTimeout(()=>{speechSynthesis.removeEventListener(`voiceschanged`,n),wN=!0,e(speechSynthesis.getVoices())},1e3)}),TN)}const DN={"-v":`a voice name`,"-r":`a rate value`,"-l":`a language tag`,"-o":`an output file path`,"--out":`an output file path`};function ON(e){return e!=null&&(!e.startsWith(`-`)||e===`-`)}function kN(e,t,n){switch(t){case`-v`:return e.voiceName=n,null;case`-l`:return e.lang=n,null;case`-o`:case`--out`:return e.outFile=n,null;case`-r`:{let t=parseFloat(n);return Number.isNaN(t)||t<.1||t>10?`rate must be between 0.1 and 10`:(e.rate=t,null)}default:return`unknown option: ${t}`}}function AN(e){let t={voiceName:null,rate:1,lang:null,outFile:null,text:``},n=[];for(let r=0;r<e.length;r++){let i=e[r];if(i in DN){let n=ON(r+1<e.length?e[r+1]:void 0)?e[++r]:null;if(n==null)return q(`${i} requires ${DN[i]}`);let a=kN(t,i,n);if(a)return q(a)}else if(i.startsWith(`-`)&&i!==`--list`)return q(`unknown option: ${i}`);else i.startsWith(`-`)||n.push(i)}return t.text=n.join(` `),t}function jN(e){let t=e.onDevice?`[kokoro]`:`[web speech]`;return`${e.name} (${e.lang}) ${t}${e.default?` [default]`:``}`}async function MN(e){if(e.local){let{kokoroVoicesIfReady:e}=await import(`./speech-page-realm-stub-C7EPKrHd.js`),t=e().map(e=>jN({name:e.id,lang:e.lang,onDevice:e.onDevice})),n=(await EN()).map(e=>jN({name:e.name,lang:e.lang,onDevice:!1,default:e.default}));return{stdout:[...t,...n].join(`
|
|
1952
1960
|
`)+`
|
|
1953
|
-
`,stderr:``,exitCode:0}}try{return{stdout:(await e.panelRpc.call(`list-voices`,void 0)).voices.map(e=>
|
|
1961
|
+
`,stderr:``,exitCode:0}}try{return{stdout:(await e.panelRpc.call(`list-voices`,void 0)).voices.map(e=>jN(e)).join(`
|
|
1954
1962
|
`)+`
|
|
1955
|
-
`,stderr:``,exitCode:0}}catch(e){return
|
|
1963
|
+
`,stderr:``,exitCode:0}}catch(e){return q(CN(e))}}async function NN(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 EN()).map(e=>({name:e.name}));return[...n,...r]}async function PN(e,t){let n=(await NN(e)).find(e=>e.name.toLowerCase().includes(t.toLowerCase()));return n?{resolved:n.name}:{error:q(`voice "${t}" not found. Use --list to see available voices.`)}}async function FN(e,t){try{if(e.local){let{kokoroStatus:e,kokoroWarmup:n}=await import(`./speech-page-realm-stub-C7EPKrHd.js`);return{stdout:SN(t?n():e()),stderr:``,exitCode:0}}return{stdout:SN(t?await e.panelRpc.call(`speak-warmup`,void 0):await e.panelRpc.call(`speak-status`,void 0)),stderr:``,exitCode:0}}catch(e){return q(CN(e))}}async function IN(e,t){return t.includes(`--list`)?MN(e):t.includes(`--status`)?FN(e,!1):t.includes(`--warmup`)?FN(e,!0):null}async function LN(e){try{let{speak:t}=await import(`./speech-page-realm-stub-C7EPKrHd.js`);return await t(e),{stdout:``,stderr:``,exitCode:0}}catch(e){return q(`speech synthesis error: ${CN(e)}`)}}async function RN(e,t){try{return await e.panelRpc.call(`speak-text`,t,{timeoutMs:3e5}),{stdout:``,stderr:``,exitCode:0}}catch(e){return q(CN(e))}}async function zN(e){let{synthesizeToWav:t}=await import(`./speech-page-realm-stub-C7EPKrHd.js`);try{return{bytes:await t(e)}}catch(e){return q(CN(e))}}async function BN(e,t){try{let n=await e.panelRpc.call(`synthesize-to-wav`,{text:t.text,lang:t.lang,...t.voice?{voice:t.voice}:{},rate:t.rate},{timeoutMs:3e5});return{bytes:new Uint8Array(n.bytes)}}catch(e){return q(CN(e))}}async function VN(e,t){return e.local?zN(t):BN(e,t)}async function HN(e,t){let n=await VN(e,t);return`exitCode`in n?n:{...ni(n.bytes),stderr:``,exitCode:0}}async function UN(e,t,n,r){let i=await VN(e,r);if(`exitCode`in i)return i;let a=t.fs.resolvePath(t.cwd,n);try{await t.fs.writeFile(a,i.bytes)}catch(e){return q(`failed to write ${n}: ${CN(e)}`)}return{stdout:`wrote ${Math.max(1,Math.round(i.bytes.byteLength/1024))} KB to ${a}\n`,stderr:``,exitCode:0}}async function WN(e,t,n){let r;if(n.voiceName){let{resolved:t,error:i}=await PN(e,n.voiceName);if(i)return i;r=t}let i={text:n.text,lang:n.lang,voice:r,rate:n.rate};return n.outFile===`-`||!n.outFile&&!bS(t)?HN(e,i):n.outFile?UN(e,t,n.outFile,i):e.local?LN(i):RN(e,i)}function GN(){return S(`say`,async(e,t)=>{if(e.includes(`--help`)||e.includes(`-h`))return xN();let n={local:typeof window<`u`&&typeof speechSynthesis<`u`,panelRpc:y()};if(!n.local&&!n.panelRpc)return q(`Web Speech API unavailable in this environment`);let r=await IN(n,e);if(r)return r;let i=AN(e);return`exitCode`in i?i:i.text?i.lang?WN(n,t,{...i,lang:i.lang}):q(`-l language tag is required`):xN()})}function KN(){return S(`screencapture`,async(e,t)=>{let{runScreencapture:n}=await import(`./screencapture-run-Dt7lEfIp.js`);return n(e,t)})}function qN(e){return new Promise((t,n)=>{chrome.runtime.sendMessage(e,e=>{let r=chrome.runtime.lastError;if(r){n(Error(r.message??`chrome.runtime.lastError`));return}t(e)})})}const JN=1e4;async function YN(e,t,n){let r={method:e,headers:me({"Content-Type":`application/json`}),signal:AbortSignal.timeout(JN)};n&&(r.body=JSON.stringify(n));try{let e=await fetch(pe(`/api/secrets${t}`),r),n=await e.json().catch(()=>({}));return{ok:e.ok,status:e.status,data:n}}catch(e){return{ok:!1,status:0,data:{error:XN(e)}}}}function XN(e){let t=e instanceof Error?e.name:``;return t===`TimeoutError`||t===`AbortError`?`no response from the secret store within ${JN/1e3}s`:`secret store unreachable: ${e instanceof Error?e.message:String(e)}`}function ZN(e,t){return`could not read ${e} secrets — ${t??`the bridge gave no reason`}`}function QN(e,t){let n=e.entries.find(e=>e.name===t)??null;if(n)return n;if(e.warnings.length>0)throw Error(e.warnings.join(`; `));return null}function $N(){return{async list(){let[e,t]=await Promise.all([YN(`GET`,``),YN(`GET`,`/session`)]),n=[],r=[];if(e.ok)for(let t of e.data)n.push({name:t.name,domains:t.domains,persisted:!0});else r.push(ZN(`saved`,rP(e.data)));if(t.ok)for(let e of t.data)n.push({name:e.name,domains:e.domains,persisted:!1});else r.push(ZN(`session`,rP(t.data)));return{entries:n,warnings:r}},async getInfo(e){return QN(await this.list(),e)},async getMasked(e){let{ok:t,data:n}=await YN(`GET`,`/masked`);return t?n.find(t=>t.name===e)??null:null},async peek(e){let{ok:t,data:n}=await YN(`GET`,`/peek?name=${encodeURIComponent(e)}`);return t?n:null},async setSession(e,t,n){let{ok:r,data:i}=await YN(`POST`,`/session`,{name:e,value:t,domains:n});if(!r)throw Error(rP(i)??`failed to set session secret`)},async setPersisted(e,t,n){let{ok:r,data:i}=await YN(`POST`,``,{name:e,value:t,domains:n});if(!r)throw Error(rP(i)??`failed to persist secret`)},async setScope(e,t){let{ok:n,data:r}=await YN(`POST`,`/scope`,{name:e,domains:t});if(!n)throw Error(rP(r)??`failed to update scope`)},async delete(e){let{ok:t,status:n,data:r}=await YN(`DELETE`,`/${encodeURIComponent(e)}`);if(n===404)return{removed:!1};if(!t)throw Error(rP(r)??`failed to delete secret`);return{removed:!0,fromSession:r&&typeof r==`object`&&`fromSession`in r?!!r.fromSession:void 0}}}}function eP(e){let t=t=>e(t);return{async list(){let[e,n]=await Promise.all([t({type:`secrets.list`}),t({type:`secrets.session.list`})]),r=[],i=[];for(let t of e?.entries??[])r.push({name:t.name,domains:t.domains,persisted:!0});for(let e of n?.entries??[])r.push({name:e.name,domains:e.domains,persisted:!1});return e?.entries||i.push(ZN(`saved`,e?.error)),n?.entries||i.push(ZN(`session`,n?.error)),{entries:r,warnings:i}},async getInfo(e){return QN(await this.list(),e)},async getMasked(e){return((await t({type:`secrets.list-masked-entries`}))?.entries??[]).find(t=>t.name===e)??null},async peek(e){let n=await t({type:`secrets.peek`,name:e});if(n?.error)throw Error(n.error);return n?.record??null},async setSession(e,n,r){let i=await t({type:`secrets.session.set`,name:e,value:n,domains:r});if(!i?.ok)throw Error(i?.error??`secrets.session.set failed`)},async setPersisted(e,n,r){let i=await t({type:`secrets.set`,name:e,value:n,domains:r});if(!i?.ok)throw Error(i?.error??`secrets.set failed`)},async setScope(e,n){let r=await t({type:`secrets.set-domains`,name:e,domains:n});if(!r?.ok)throw Error(r?.error??`secrets.set-domains failed`)},async delete(e){let n=await t({type:`secrets.delete`,name:e});if(!n?.ok)throw Error(n?.error??`secrets.delete failed`);return{removed:n.removed??!0,fromSession:n.fromSession}}}}function tP(){return eP(e=>qN(e))}function nP(){return eP(e=>{let{type:t,...n}=e;return be(t,n)})}function rP(e){if(e&&typeof e==`object`&&`error`in e){let t=e.error;if(typeof t==`string`)return t}}function iP(e){switch(e){case`extension-direct`:return tP();case`extension-delegate`:return nP();default:return $N()}}const aP=[`--domain`],oP=[`--persist`];function sP(){return`secret — manage secrets for the fetch proxy and mount backends
|
|
1956
1964
|
|
|
1957
1965
|
No approval (session-only, in-memory, never persisted):
|
|
1958
1966
|
secret set <name> <value> --domain <pat> Set a session secret. Free for a
|
|
@@ -1989,23 +1997,23 @@ Examples:
|
|
|
1989
1997
|
secret peek OPENAI_KEY
|
|
1990
1998
|
secret set GITHUB_TOKEN ghp_… --domain "api.github.com" --persist # prompts
|
|
1991
1999
|
secret scope GITHUB_TOKEN --domain "api.github.com,*.github.com" # prompts
|
|
1992
|
-
`}function
|
|
2000
|
+
`}function cP(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 lP(e){return{stdout:``,stderr:`secret: ${e}\n`,exitCode:1}}const uP={persist:`persist secret`,scope:`edit secret scope`,value:`change secret value`},dP=new Set;function fP(e,t){if(e===t)return!0;try{return at(e).test(t)}catch{return!1}}function pP(e,t){for(let n of e)if(fP(n,t))return!0;return!1}function mP(e){return{stdout:``,stderr:`${ct(`secret`,e)}\n`,exitCode:1}}function hP(e){let t=ge(),n=e.isExtension??(t===`extension-direct`||t===`extension-delegate`),r=e.backend??iP(t),i=e.grants??dP,a=e.broker,o=()=>(a??=rs(null),a);return{backend:r,inExtension:n,gate:async(e,t)=>{let n=`secret:${e}:${t}`;if(pP(i,n))return`ok`;let r=await o().requestApproval({kind:`secret`,detail:`${uP[e]}: ${t}`,suggestedPattern:n});if(r.decision===`deny`)return r;if(r.decision===`always`){let e=r.pattern?.trim();i.add(e&&fP(e,n)?e:n)}return`ok`},injectMaskedEnv:async t=>{if(e.setEnv&&ms(t))try{let n=await r.getMasked(t);n&&e.setEnv(t,n.maskedValue)}catch{}},clearMaskedEnv:t=>{e.unsetEnv&&ms(t)&&e.unsetEnv(t)}}}function gP(e){let t=P(e);if(t.length!==0)return t.endsWith(`\r
|
|
1993
2001
|
`)?t.slice(0,-2):t.endsWith(`
|
|
1994
|
-
`)?t.slice(0,-1):t}async function
|
|
1995
|
-
`,exitCode:1};let a=r.positionals[1],o=
|
|
2002
|
+
`)?t.slice(0,-1):t}async function _P(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}):mP(i)}async function vP(e,t,n,r){if(await r.backend.getInfo(e)){let t=await r.gate(`value`,e);if(t!==`ok`)return mP(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 yP(e,t,n){let r=C(e.slice(1),{value:aP,bool:oP});if(`error`in r)return lP(r.error);let i=r.positionals[0];if(!i||i.startsWith(`-`))return{stdout:``,stderr:`secret: set requires a <name>
|
|
2003
|
+
`,exitCode:1};let a=r.positionals[1],o=gP(t.stdin);if(a!==void 0&&o!==void 0)return{stdout:``,stderr:`secret: provide <value> as an argument OR via stdin, not both
|
|
1996
2004
|
`,exitCode:1};let s=a??o;if(s===void 0)return{stdout:``,stderr:`secret: set requires a <value>: secret set <name> <value> --domain <patterns> [--persist]
|
|
1997
2005
|
or pipe the value on stdin: echo "$TOKEN" | secret set <name> --domain <patterns>
|
|
1998
|
-
`,exitCode:1};let c=
|
|
1999
|
-
`,exitCode:1}}async function
|
|
2000
|
-
`,exitCode:1};let i=await t.backend.getMasked(r);return i?{stdout:`${i.name}=${i.maskedValue}\n domains: ${i.domains.join(`, `)||`(none)`}\n`,stderr:``,exitCode:0}:{stdout:``,stderr:`secret: no secret named "${r}"\n`,exitCode:1}}async function
|
|
2001
|
-
`,exitCode:1};let i=await t.backend.peek(r);return i?{stdout:`${i.name}: ${i.preview}\n domains: ${i.domains.join(`, `)||`(none)`}\n`,stderr:``,exitCode:0}:{stdout:``,stderr:`secret: no secret named "${r}"\n`,exitCode:1}}async function
|
|
2002
|
-
`,exitCode:1};let i=
|
|
2003
|
-
`,exitCode:1};let a=await t.gate(`scope`,r);return a===`ok`?(await t.backend.setScope(r,i),{stdout:`Updated scope for "${r}" (domains: ${i.join(`, `)})\n`,stderr:``,exitCode:0}):
|
|
2004
|
-
`,stderr:a,exitCode:o};let s=Math.max(4,...r.map(e=>e.name.length)),c=`${`NAME`.padEnd(s)} TYPE DOMAINS\n`;for(let e of r){let t=e.persisted?`SAVED`:`SESSION`;c+=`${e.name.padEnd(s)} ${t.padEnd(7)} ${e.domains.join(`, `)}\n`}return{stdout:c,stderr:a,exitCode:o}}async function
|
|
2005
|
-
`,exitCode:1};let a;try{a=new URL(i).hostname}catch{return{stdout:``,stderr:`secret: invalid URL "${i}"\n`,exitCode:1}}let{entries:o,warnings:s}=await t.backend.list(),c=o.find(e=>e.name===r);return c?
|
|
2006
|
+
`,exitCode:1};let c=cP(r.values.get(`--domain`));return c?r.bools.has(`--persist`)?_P(i,s,c,n):vP(i,s,c,n):{stdout:``,stderr:`secret: set requires --domain <patterns>
|
|
2007
|
+
`,exitCode:1}}async function bP(e,t){let n=C(e.slice(1),{});if(`error`in n)return lP(n.error);let r=n.positionals[0];if(!r)return{stdout:``,stderr:`secret: get requires a <name>
|
|
2008
|
+
`,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 xP(e,t){let n=C(e.slice(1),{});if(`error`in n)return lP(n.error);let r=n.positionals[0];if(!r)return{stdout:``,stderr:`secret: peek requires a <name>
|
|
2009
|
+
`,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 SP(e,t){let n=C(e.slice(1),{value:aP});if(`error`in n)return lP(n.error);let r=n.positionals[0];if(!r||r.startsWith(`-`))return{stdout:``,stderr:`secret: scope requires a <name>
|
|
2010
|
+
`,exitCode:1};let i=cP(n.values.get(`--domain`));if(!i)return{stdout:``,stderr:`secret: scope requires --domain <patterns>
|
|
2011
|
+
`,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}):mP(a)}async function CP(e,t){let n=C(e.slice(1),{});if(`error`in n)return lP(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
|
|
2012
|
+
`,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 wP(e,t,n){let r=C(e.slice(1),{});if(`error`in r)return lP(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 TP(e,t){let n=C(e.slice(1),{});if(`error`in n)return lP(n.error);let r=n.positionals[0],i=n.positionals[1];if(!r||!i)return{stdout:``,stderr:`secret: test requires <name> <url>
|
|
2013
|
+
`,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?ga(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 EP(e,t){let n=C(e.slice(1),{});if(`error`in n)return lP(n.error);if(!t.inExtension)return{stdout:`secret: in CLI mode, edit ~/.slicc/secrets.env directly with your text editor.
|
|
2006
2014
|
(changes are picked up on the next request — no restart needed)
|
|
2007
2015
|
`,stderr:``,exitCode:0};try{return await chrome.runtime.openOptionsPage(),{stdout:`Opened Mount Secrets options page in a new tab.
|
|
2008
|
-
`,stderr:``,exitCode:0}}catch{let e=chrome.runtime.getURL(`secrets.html`);return window.open(e,`_blank`),{stdout:`Opened ${e}\n`,stderr:``,exitCode:0}}}async function
|
|
2016
|
+
`,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 DP(e,t,n){let r=e[0];switch(r){case`set`:return yP(e,t,n);case`get`:case`read`:return bP(e,n);case`peek`:return xP(e,n);case`scope`:return SP(e,n);case`list`:return CP(e,n);case`delete`:case`rm`:return wP(e,r,n);case`test`:return TP(e,n);case`edit`:return EP(e,n);default:return{stdout:``,stderr:`secret: unknown command "${r}"\n`,exitCode:1}}}function OP(e={}){let t=hP(e);return S(`secret`,async(e,n)=>{if(e.length===0||w(e,{valueFlags:aP}))return{stdout:sP(),stderr:``,exitCode:0};try{return await DP(e,n,t)}catch(e){return{stdout:``,stderr:`secret: ${e instanceof Error?e.message:String(e)}\n`,exitCode:1}}})}function kP(){return null}function AP(){return null}function jP(){return{stdout:`usage: serve [--entry <relative-path>] [--ttl <duration>] [--bridge | --no-bridge] [--max-tabs <n>] [--quiet] [--stop <token>] [--list] <directory>
|
|
2009
2017
|
serve --logs [<token>] [--lines <n>]
|
|
2010
2018
|
serve --truncate [<token>]
|
|
2011
2019
|
|
|
@@ -2041,28 +2049,28 @@ Limits and lifetime:
|
|
|
2041
2049
|
its TTL. Either can be removed sooner with \`serve --stop\`.
|
|
2042
2050
|
- <token> is the "Preview token" printed at mint time or the TOKEN column
|
|
2043
2051
|
of \`serve --list\`; \`--stop\` also accepts the preview URL.
|
|
2044
|
-
`,stderr:``,exitCode:0}}function
|
|
2045
|
-
`}:(n.lines=i,{skip:+(e===`--lines`)})}}function
|
|
2052
|
+
`,stderr:``,exitCode:0}}function MP(e){return`error`in e}function NP(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
|
|
2053
|
+
`}:(n.lines=i,{skip:+(e===`--lines`)})}}function PP(e,t,n){if(e!==`--ttl`&&!e.startsWith(`--ttl=`))return;let r=e===`--ttl`?t:e.slice(6);if(!r)return{error:`serve: missing value for --ttl
|
|
2046
2054
|
`};let i=/^([1-9][0-9]*)([mhdw])$/.exec(r);if(!i)return{error:`serve: --ttl must be a positive whole duration (m, h, d, or w)
|
|
2047
2055
|
`};let a=Number(i[1])*{m:6e4,h:36e5,d:864e5,w:6048e5}[i[2]];return Number.isSafeInteger(a)?a>2592e6?{error:`serve: --ttl cannot exceed 30d; longer retention requires a Sliccy Deluxe De-Enshittification plan.
|
|
2048
2056
|
`}:(n.ttlMs=a,{skip:+(e===`--ttl`)}):{error:`serve: --ttl must be a positive whole duration (m, h, d, or w)
|
|
2049
|
-
`}}function
|
|
2057
|
+
`}}function FP(e,t){let n={"--bridge":`bridge`,"--no-bridge":`noBridge`,"--project":`project`,"--quiet":`quiet`}[e];if(n)return t[n]=!0,{skip:0}}function IP(e,t,n){let r=PP(e,t,n);if(r)return r;let i=FP(e,n);if(i)return i;if(e===`--entry`)return t?(n.entry=t,{skip:1}):{error:`serve: missing value for --entry
|
|
2050
2058
|
`};if(e.startsWith(`--entry=`))return n.entry=e.slice(8),{skip:0};if(e===`--stop`)return t?(n.stop=t,{skip:1}):{error:`serve: missing value for --stop
|
|
2051
|
-
`};if(e.startsWith(`--stop=`))return n.stop=e.slice(7),{skip:0};let a=
|
|
2059
|
+
`};if(e.startsWith(`--stop=`))return n.stop=e.slice(7),{skip:0};let a=NP(e,t,n);if(a)return a;if(e===`--max-tabs`){if(!t)return{error:`serve: missing value for --max-tabs
|
|
2052
2060
|
`};let e=Number.parseInt(t,10);return!Number.isFinite(e)||e<=0?{error:`serve: --max-tabs must be a positive integer
|
|
2053
2061
|
`}:(n.maxTabs=e,{skip:1})}if(e.startsWith(`--max-tabs=`)){let t=Number.parseInt(e.slice(11),10);return!Number.isFinite(t)||t<=0?{error:`serve: --max-tabs must be a positive integer
|
|
2054
2062
|
`}:(n.maxTabs=t,{skip:0})}return e.startsWith(`-`)?{error:`serve: unknown option: ${e}\n`}:n.directory?{error:`serve: expected a single directory argument
|
|
2055
|
-
`}:(n.directory=e,{skip:0})}function
|
|
2056
|
-
`,exitCode:1};if(n.webhookId){let e=await ey();if(!e)return{stdout:`Preview revoked: ${t}\n`,stderr:`serve: preview revoked, but the preview-bridge webhook could not be cleaned up (lick manager unavailable). It is a live endpoint — delete it with \`webhook delete ${n.webhookId}\`.\n`,exitCode:0};try{await e.deleteWebhook(n.webhookId)}catch(e){return{stdout:`Preview revoked: ${t}\n`,stderr:`serve: preview revoked, but webhook cleanup failed: ${e instanceof Error?e.message:String(e)}. Delete it with \`webhook delete ${n.webhookId}\`.\n`,exitCode:0}}}return{stdout:`Preview revoked: ${t}\n`,stderr:``,exitCode:0}}async function
|
|
2057
|
-
`,stderr:``,exitCode:0}:{stdout:
|
|
2058
|
-
`,stderr:``,exitCode:0}:{stdout:
|
|
2059
|
-
`,stderr:``,exitCode:0}:{stdout:`Preview lifecycle records (oldest to newest):\n${t.map(
|
|
2063
|
+
`}:(n.directory=e,{skip:0})}function LP(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=IP(e[n],e[n+1],t);if(MP(r))return{...t,error:r.error};n+=r.skip}return t}async function RP(e,t,n,r){if(!rr(t))return{stdout:``,stderr:`serve: invalid entry file: ${t}\n`,exitCode:1};let i=n.resolvePath(r,e),a;try{a=await n.stat(i)}catch{return{stdout:``,stderr:`serve: no such directory: ${e}\n`,exitCode:1}}if(!a.isDirectory)return{stdout:``,stderr:`serve: not a directory: ${e}\n`,exitCode:1};let o=ur(i,t),s;try{s=await n.stat(o)}catch{return{stdout:``,stderr:`serve: entry file not found: ${o}\n`,exitCode:1}}return s.isFile?{fullDirectory:i,entryPath:o}:{stdout:``,stderr:`serve: entry is not a file: ${o}\n`,exitCode:1}}function zP(e){return`exitCode`in e}async function BP(e){let t=ma(e)??e,n,r=AP();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
|
|
2064
|
+
`,exitCode:1};if(n.webhookId){let e=await ey();if(!e)return{stdout:`Preview revoked: ${t}\n`,stderr:`serve: preview revoked, but the preview-bridge webhook could not be cleaned up (lick manager unavailable). It is a live endpoint — delete it with \`webhook delete ${n.webhookId}\`.\n`,exitCode:0};try{await e.deleteWebhook(n.webhookId)}catch(e){return{stdout:`Preview revoked: ${t}\n`,stderr:`serve: preview revoked, but webhook cleanup failed: ${e instanceof Error?e.message:String(e)}. Delete it with \`webhook delete ${n.webhookId}\`.\n`,exitCode:0}}}return{stdout:`Preview revoked: ${t}\n`,stderr:``,exitCode:0}}async function VP(){let e=AP();if(e){let t=(await e({type:`list`})).previews??[];return t.length===0?{stdout:`No active previews
|
|
2065
|
+
`,stderr:``,exitCode:0}:{stdout:UP(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
|
|
2066
|
+
`,stderr:``,exitCode:0}:{stdout:UP(n),stderr:``,exitCode:0}}function HP(e){return e.mode===`persistent`?e.state===`pending`?`uploading`:`persistent`:`live`}function UP(e){return`Active previews:\n TOKEN MODE EXPIRES URL ROOT CREATED\n${e.map(e=>` ${e.previewToken} ${HP(e)} ${e.expiresAt??`-`} ${e.url} ${e.servedRoot} ${e.createdAt}\n`).join(``)}`}function WP(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 GP(e){let t,n=AP();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.
|
|
2067
|
+
`,stderr:``,exitCode:0}:{stdout:`Preview lifecycle records (oldest to newest):\n${t.map(WP).join(``)}`,stderr:``,exitCode:0}}async function KP(e){let t,n,r=AP();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 qP(e,t){let n=[],r=0;for await(let i of e.walk(t)){if(n.length>=1e3)throw Error(`persistent preview exceeds 1000 file limit`);let a=await e.readFile(i,{encoding:`binary`}),o=typeof a==`string`?new TextEncoder().encode(a):a,s=i.slice(t===`/`?1:t.length+1);if(o.byteLength>26214400)throw Error(`preview file exceeds 25 MiB limit: ${s}`);if(r+=o.byteLength,r>52428800)throw Error(`persistent preview exceeds 50 MiB total limit`);n.push({path:s,content:o,mime:Jn(s)})}return n}function JP(e){return e().catch(e=>({stdout:``,stderr:`serve: ${e instanceof Error?e.message:String(e)}\n`,exitCode:1}))}async function YP(e){let t=kP();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 XP(e,t){if(t)return t.createPage(e);typeof window<`u`&&typeof window.open==`function`&&window.open(e,`_blank`,`noopener,noreferrer`)}async function ZP(e,t){if(!e)return{ok:!0};let n=await ey();if(!n)return{ok:!1,result:{stdout:``,stderr:`${t}serve: --bridge requires an active lick manager\n`,exitCode:1}};try{return{ok:!0,webhookId:(await n.createWebhook(`preview-bridge`)).id}}catch(e){return{ok:!1,result:{stdout:``,stderr:`${t}serve: webhook creation failed: ${e instanceof Error?e.message:String(e)}\n`,exitCode:1}}}}async function QP(e,t,n,r,i,a,o){let s;try{s=await YP({entryPath:n,servedRoot:t,bridge:e.bridge,noBridge:e.ttlMs!==void 0||e.noBridge,maxTabs:e.maxTabs,quiet:e.quiet,webhookId:r,ttlMs:e.ttlMs,snapshotFiles:a})}catch(e){if(r){let e=await ey();e&&await e.deleteWebhook(r).catch(()=>{})}return{stdout:``,stderr:`${i}serve: ${e instanceof Error?e.message:String(e)}\n`,exitCode:1}}let c=await XP(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 $P(e){if(e.stop){let t=e.stop;return JP(()=>BP(t))}if(e.list)return JP(()=>VP());if(e.logs&&e.truncate)return{stdout:``,stderr:`serve: --logs and --truncate are mutually exclusive
|
|
2060
2068
|
`,exitCode:1};if(e.lines!==void 0&&!e.logs)return{stdout:``,stderr:`serve: --lines requires --logs
|
|
2061
|
-
`,exitCode:1};if(e.logs){let t=typeof e.logs==`string`?e.logs:void 0;return
|
|
2069
|
+
`,exitCode:1};if(e.logs){let t=typeof e.logs==`string`?e.logs:void 0;return JP(()=>GP({previewToken:t,lines:e.lines}))}if(e.truncate){let t=typeof e.truncate==`string`?e.truncate:void 0;return JP(()=>KP(t))}}function eF(e){if(e.ttlMs!==void 0&&e.bridge)return{stdout:``,stderr:`serve: --ttl cannot be combined with --bridge
|
|
2062
2070
|
`,exitCode:1};if(e.ttlMs!==void 0&&e.maxTabs!==void 0)return{stdout:``,stderr:`serve: --ttl cannot be combined with --max-tabs
|
|
2063
|
-
`,exitCode:1}}async function
|
|
2064
|
-
`:``,f=await
|
|
2065
|
-
`;function
|
|
2071
|
+
`,exitCode:1}}async function tF(e,t,n){if(e.ttlMs!==void 0){if(!t)throw Error(`persistent snapshot filesystem unavailable`);return qP(t,n)}}async function nF(e,t,n,r){if(e.length===0||e.includes(`--help`)||e.includes(`-h`))return jP();let i=LP(e);if(i.error)return{stdout:``,stderr:i.error,exitCode:1};let a=await $P(i);if(a)return a;if(!i.directory)return jP();let o=eF(i);if(o)return o;let s=await RP(i.directory,i.entry,t.fs,t.cwd);if(zP(s))return s;let{fullDirectory:c,entryPath:l}=s,u;try{u=await tF(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)
|
|
2072
|
+
`:``,f=await ZP(!i.noBridge&&i.bridge,d);return f.ok?QP(i,c,l,f.webhookId,d,u,n):f.result}function rF(e,t){return S(`serve`,(n,r)=>nF(n,r,e,t))}const iF=`usage: session export [--id <id>] [--output <path>]
|
|
2073
|
+
`;function aF(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 oF(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${iF}`};let n=r[e+1];if(!n||n.startsWith(`-`))return{ok:!1,stderr:`session export: --id requires a value\n${iF}`};t=n,e++}else if(i===`--output`){if(n!==null)return{ok:!1,stderr:`session export: duplicate flag --output\n${iF}`};let t=r[e+1];if(!t||t.startsWith(`-`))return{ok:!1,stderr:`session export: --output requires a path\n${iF}`};n=t,e++}else if(i.startsWith(`-`))return{ok:!1,stderr:`session export: unknown flag ${i}\n${iF}`};else return{ok:!1,stderr:`session export: unexpected argument ${JSON.stringify(i)}\n${iF}`}}return{ok:!0,args:{sessionId:t,outputPath:n}}}async function sF(e){let t=[],n=0;for await(let r of e.chunks)t.push(r),n+=r.byteLength;let r=new Uint8Array(n),i=0;for(let e of t)r.set(e,i),i+=e.byteLength;let a=await e.completion;if(a.byteLength!==n||bt(r)!==a.sha256)throw new xa(`transfer-corrupt`);return r}async function cF(e,t){let n=oF(e);if(!n.ok)return{stdout:``,stderr:n.stderr,exitCode:1};let{sessionId:r,outputPath:i}=n.args;if(i!==null){let e=aF(i);if(!e.ok)return{stdout:``,stderr:`session export: --output ${e.reason}\n${iF}`,exitCode:1}}let a=r==null?{kind:`active`}:{kind:`frozen`,sessionId:r};try{let e=await ss().export(a,{}),n=await sF(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 xa?e.code:e instanceof Error?e.message:String(e)}\n`,exitCode:1}}}function lF(){return S(`session`,async(e,t)=>{if(e[0]===`export`&&!w(e))return cF(e,t);let{dispatchSessionMemoryAware:n}=await import(`./session-command-memory-CV0M_waq.js`);return n(e,t,iF)})}function uF(){return S(`slicc`,async(e,t)=>{let{runSlicc:n}=await import(`./run-cvQKad0O.js`);return await n(e,t)})}const dF=`leader`;function fF(){try{let e=globalThis.localStorage?.getItem(`slicc.leaderSprinkleInstances`);if(e)return JSON.parse(e)}catch{}return[]}function pF(e){return+!!e.leader+e.followers.length}function mF(){return{stdout:`usage: sprinkle <subcommand> [args]
|
|
2066
2074
|
|
|
2067
2075
|
list [--runtime <id>] List sprinkles + an instance line per runtime
|
|
2068
2076
|
open <name> Open a sprinkle by name
|
|
@@ -2080,22 +2088,22 @@ Limits and lifetime:
|
|
|
2080
2088
|
chat <html> Show inline HTML in chat (Tool UI)
|
|
2081
2089
|
Use data-action="name" on buttons for callbacks
|
|
2082
2090
|
Pipe HTML: echo "<div>...</div>" | sprinkle chat
|
|
2083
|
-
`,stderr:``,exitCode:0}}function
|
|
2091
|
+
`,stderr:``,exitCode:0}}function hF(){return globalThis.__slicc_sprinkleManager??null}function J(e,t){return{stdout:``,stderr:`sprinkle ${e}: ${t}\n`,exitCode:1}}function gF(){return[dF,...ee().map(e=>e.runtimeId)]}function _F(e){return`unknown runtime "${e}"\nknown runtimes: ${gF().join(`, `)}\nRun \`host\` to see connected followers.`}async function vF(e,t){let n=e.slice(1).join(` `);if(!n){let e=P(t.stdin);e&&(n=e)}if(!n)return{stdout:``,stderr:`sprinkle chat: HTML content required
|
|
2084
2092
|
`,exitCode:1};let r=await we({html:n,onAction:async(e,t)=>({action:e,data:t})});return r===null?{stdout:``,stderr:`sprinkle chat: not in tool execution context
|
|
2085
2093
|
`,exitCode:1}:{stdout:JSON.stringify(r)+`
|
|
2086
|
-
`,stderr:``,exitCode:0}}function
|
|
2087
|
-
`,stderr:``,exitCode:0};let a=new Set(e.opened()),o=
|
|
2094
|
+
`,stderr:``,exitCode:0}}function yF(e){return e.map(e=>{let t=e.runtime?` (${e.runtime})`:``;return` instance: ${e.runtimeId}${t}`})}function bF(e){return[...e.map(e=>({name:e,runtimeId:dF})),...fF()]}async function xF(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&&!gF().includes(r))return J(`list`,_F(r));await e.refresh();let i=e.available();if(i.length===0)return{stdout:`No .shtml sprinkles found.
|
|
2095
|
+
`,stderr:``,exitCode:0};let a=new Set(e.opened()),o=bF([...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(...yF(t))}return s.length===0?{stdout:`No sprinkles are open on runtime "${r}".\n`,stderr:``,exitCode:0}:{stdout:s.join(`
|
|
2088
2096
|
`)+`
|
|
2089
|
-
`,stderr:``,exitCode:0}}function
|
|
2097
|
+
`,stderr:``,exitCode:0}}function SF(e,t){return!t||Eo(e)?null:(Do(e,t),Eo(e)===t?t:null)}async function CF(e,t,n){let r=C(t.slice(1),{});if(`error`in r)return J(`open`,r.error);let i=r.positionals[0];if(!i)return J(`open`,`name required`);let a=Ri(void 0,n),o=SF(i,a);try{a?await e.open(i,void 0,{lickOriginTarget:a}):await e.open(i)}catch(e){return o&&Oo(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 wF(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 TF(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 EF(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 DF(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=ko(),t=Object.entries(e);return t.length===0?{stdout:`No sprinkle routes configured (all licks go to cone).
|
|
2090
2098
|
`,stderr:``,exitCode:0}:{stdout:`Sprinkle routes (applied to every runtime — the leader resolves the
|
|
2091
2099
|
route for follower-forwarded licks too):
|
|
2092
2100
|
`+t.map(([e,t])=>` ${e} -> ${t}`).join(`
|
|
2093
2101
|
`)+`
|
|
2094
|
-
`,stderr:``,exitCode:0}}if(t.bools.has(`--clear`))return
|
|
2095
|
-
`,exitCode:1};switch(n){case`list`:return
|
|
2096
|
-
`,stderr:``,exitCode:0}}function
|
|
2097
|
-
`)}\n`:``}async function
|
|
2098
|
-
`)?e:`${e}\n`,exitCode:1}}function
|
|
2102
|
+
`,stderr:``,exitCode:0}}if(t.bools.has(`--clear`))return Oo(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=Eo(n);return e?{stdout:`${n} -> ${e}\n`,stderr:``,exitCode:0}:{stdout:`${n} -> cone (default)\n`,stderr:``,exitCode:0}}return Do(n,r),{stdout:`Sprinkle "${n}" lick events will route to scoop "${r}".\n`,stderr:``,exitCode:0}}function OF(e){let t=[];return e.leader&&t.push(dF),t.push(...e.followers),t.join(`, `)}async function kF(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&&!gF().includes(o))return J(`send`,_F(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`,_F(s.unknownRuntime));let c=pF(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`} (${OF(s)}).\n`,stderr:``,exitCode:0}}function AF(){return S(`sprinkle`,async(e,t)=>{if(e.length===0||e[0]===`--help`||e[0]===`-h`)return mF();let n=e[0];if(w(e.slice(1),{valueFlags:[`--scoop`,`--runtime`]}))return{stdout:$e(`sprinkle`,n,mF().stdout),stderr:``,exitCode:0};if(n===`chat`)return vF(Qe(e),t);let r=hF();if(!r)return{stdout:``,stderr:`sprinkle: sprinkle manager not initialized
|
|
2103
|
+
`,exitCode:1};switch(n){case`list`:return xF(r,e);case`open`:return CF(r,e,t.env);case`close`:return wF(r,e);case`reload`:return TF(r,e);case`refresh`:return EF(r,e);case`route`:return DF(e);case`send`:return kF(r,e);default:return{stdout:``,stderr:`sprinkle: unknown subcommand "${n}"\n`,exitCode:1}}})}function jF(){return{stdout:`usage: sqlite3 [database] [sql]
|
|
2104
|
+
`,stderr:``,exitCode:0}}function MF(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 NF(e,t){return e===`:memory:`?e:t.fs.resolvePath(t.cwd,e)}async function PF(e,t,n){return t===`:memory:`||!await n.fs.exists(t)?new e.Database:new e.Database(await n.fs.readFileBuffer(t))}async function FF(e,t,n){t!==`:memory:`&&await n.fs.writeFile(t,e.export())}function IF(e){let t=e.flatMap(e=>e.values.map(e=>e.map(nr).join(`|`)));return t.length>0?`${t.join(`
|
|
2105
|
+
`)}\n`:``}async function LF(e,t,n){let r=await lr(),i=NF(e,n),a=await PF(r,i,n),o=a.exec(t);return await FF(a,i,n),a.close(),IF(o)}function RF(e,t){return{stdout:``,stderr:`${e}: ${t instanceof Error?t.message:String(t)}\n`,exitCode:1}}function zF(e=`sqlite3`){return S(e,async(t,n)=>{if(t.includes(`--help`)||t.includes(`-h`))return jF();let{database:r,sql:i}=MF(t,n);if(!i)return RF(e,`interactive mode is not supported; provide SQL as argument or stdin`);try{return{stdout:await LF(r,i,n),stderr:``,exitCode:0}}catch(t){return RF(e,t)}})}function BF(e){return{stdout:``,stderr:e.endsWith(`
|
|
2106
|
+
`)?e:`${e}\n`,exitCode:1}}function VF(){return{stdout:`ssh - run a command on a connected tray follower
|
|
2099
2107
|
|
|
2100
2108
|
Usage: ssh [--cwd <dir>] [--timeout <seconds>] <runtime-id> <command...>
|
|
2101
2109
|
ssh --list
|
|
@@ -2118,11 +2126,11 @@ Examples:
|
|
|
2118
2126
|
ssh --list
|
|
2119
2127
|
ssh follower-abc123 "uname -a"
|
|
2120
2128
|
ssh --cwd /tmp follower-abc123 "ls -la"
|
|
2121
|
-
`,stderr:``,exitCode:0}}function
|
|
2129
|
+
`,stderr:``,exitCode:0}}function HF(e){let t=e.filter(e=>e.exec);if(t.length===0)return`No exec-capable followers connected.
|
|
2122
2130
|
Start one with: slicc <join-url> follow sh -c
|
|
2123
2131
|
`;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(`
|
|
2124
|
-
`)}\n`}function
|
|
2125
|
-
Usage: ssh <runtime-id> <command...>`);let r=y();if(!r)return
|
|
2132
|
+
`)}\n`}function UF(e){if(e.stdin===void 0)return;let n=ei(e.stdin);if(n.length===0)return;let r=new Uint8Array(n.length);for(let e=0;e<n.length;e++)r[e]=n.charCodeAt(e)&255;return t(r)}function WF(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 GF(){return S(`ssh`,async(e,t)=>{let n=WF(e);if(`help`in n)return VF();if(`error`in n)return BF(n.error);if(n.list||n.runtimeId===void 0)return{stdout:HF(ee()),stderr:``,exitCode:0};if(!n.command)return BF(`ssh: missing command
|
|
2133
|
+
Usage: ssh <runtime-id> <command...>`);let r=y();if(!r)return BF(`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:UF(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 BF(`ssh: ${e instanceof Error?e.message:String(e)}`)}finally{t.signal?.removeEventListener(`abort`,a)}})}function KF(e){return{stdout:``,stderr:`${ct(`sudo`,e)}\n`,exitCode:1}}function qF(e={}){let{broker:t,persistGrant:n,suppressNextGate:r}=e;return S(`sudo`,async(e,i)=>{if(e.length===0)return{stdout:``,stderr:`sudo: usage: sudo <command> [args...]
|
|
2126
2134
|
`,exitCode:1};if(e[0]===`--help`||e[0]===`-h`)return{stdout:`usage: sudo <command> [args...]
|
|
2127
2135
|
|
|
2128
2136
|
Request human approval to run <command> with elevation. If approved, the
|
|
@@ -2136,14 +2144,14 @@ Options:
|
|
|
2136
2144
|
-h, --help Show this help message and exit.
|
|
2137
2145
|
`,stderr:``,exitCode:0};if(!t)return{stdout:``,stderr:`sudo: command-level approval is not configured
|
|
2138
2146
|
`,exitCode:1};if(!i.exec)return{stdout:``,stderr:`sudo: cannot dispatch inner command in this context
|
|
2139
|
-
`,exitCode:1};let a=Yp(e[0],e.slice(1)),o=i.env?.get($p),s=await t.requestApproval({kind:`command`,detail:a,...o?{reason:o}:{}});if(s.decision===`deny`)return
|
|
2140
|
-
`,exitCode:1};let i=await Promise.all(r.map(e=>
|
|
2141
|
-
`,exitCode:1};let r=await Promise.all(n.paths.map(e=>
|
|
2142
|
-
`,exitCode:1};let a=await Promise.all(i.map(e=>
|
|
2143
|
-
`,stderr:``,exitCode:0}}function
|
|
2144
|
-
`)}\n`:``,stderr:``,exitCode:0}}async function
|
|
2145
|
-
`);return{stdout:e?`${e}\n`:``,stderr:``,exitCode:0}}let i=t.fs.resolvePath(t.cwd,e.directory);await t.fs.mkdir(i,{recursive:!0});let a=[];for(let e of r){let n=
|
|
2146
|
-
`)}\n`:``,stderr:``,exitCode:0}}function
|
|
2147
|
+
`,exitCode:1};let a=Yp(e[0],e.slice(1)),o=i.env?.get($p),s=await t.requestApproval({kind:`command`,detail:a,...o?{reason:o}:{}});if(s.decision===`deny`)return KF(s);if(s.decision===`always`){let e=s.pattern?.trim()||a;if(n)try{await n(e)}catch{}}return r&&r(a),i.exec(e[0],{cwd:i.cwd,args:e.slice(1)})})}function JF(e){let t=e instanceof Error?e.message:String(e);return/ENOENT|no such file/i.test(t)?`No such file or directory`:/ENOTEMPTY|not empty/i.test(t)?`Directory not empty`:t.replace(/^\w+:\s*/,``)}async function YF(e,t){return e.fs.lstat?e.fs.lstat(t):e.fs.stat(t)}function XF(e,t){return e.some(e=>/^-[^-]/.test(e)&&e.slice(1).includes(t))}async function ZF(e,t,n){let r=e.fs.resolvePath(e.cwd,t);try{let i=await YF(e,r);return i.isDirectory&&!i.isSymbolicLink&&!n.recursive?{stdout:``,stderr:`rm: cannot remove '${t}': Is a directory\n`}:(await e.fs.rm(r,{recursive:n.recursive,force:n.force}),{stdout:n.verbose?`removed '${t}'\n`:``,stderr:``})}catch(e){return{stdout:``,stderr:n.force?``:`rm: cannot remove '${t}': ${JF(e)}\n`}}}function QF(){return S(`rm`,async(e,t)=>{let n={recursive:XF(e,`r`)||XF(e,`R`)||e.includes(`--recursive`),force:XF(e,`f`)||e.includes(`--force`),verbose:XF(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
|
|
2148
|
+
`,exitCode:1};let i=await Promise.all(r.map(e=>ZF(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 $F(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 eI(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 tI(e,t,n){try{let r=e.fs.resolvePath(e.cwd,t),i=n.follow?await e.fs.stat(r):await YF(e,r);return{stdout:n.format?`${$F(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 nI(){return S(`stat`,async(e,t)=>{let n=eI(e);if(n.paths.length===0)return{stdout:``,stderr:`stat: missing operand
|
|
2149
|
+
`,exitCode:1};let r=await Promise.all(n.paths.map(e=>tI(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 rI(e){let t=e.replace(/\/+$/,``),n=t.lastIndexOf(`/`);return n<=0?`/`:t.slice(0,n)}async function iI(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 YF(e,a);if(!t.isDirectory||t.isSymbolicLink)throw Error(`Not a directory`);await e.fs.rm(a,{recursive:!1,force:!1}),r&&(o+=`rmdir: removing directory, '${a}'\n`)}catch(e){return{stdout:o,stderr:`rmdir: failed to remove '${t}': ${JF(e)}\n`}}if(!n||s===i.length-1)return{stdout:o,stderr:``};a=rI(a)}return{stdout:o,stderr:``}}function aI(){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
|
|
2150
|
+
`,exitCode:1};let a=await Promise.all(i.map(e=>iI(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 oI(){return{stdout:`usage: tar (-c|-x|-t) [-zv] -f <archive> [-C <dir>] [paths...]
|
|
2151
|
+
`,stderr:``,exitCode:0}}function sI(e){return{stdout:``,stderr:`tar: ${e}\n`,exitCode:1}}function cI(e,t){if(e.mode)return sI(`exactly one of -c, -x, or -t is required`);e.mode=t}function lI(e,t,n){if(n)return[n,t];let r=e[t+1];return r===void 0?void 0:[r,t+1]}const uI={c:`create`,x:`extract`,t:`list`};function dI(e,t,n,r,i){let a=uI[e];if(a)return{nextIndex:r,error:cI(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:sI(`unsupported option -${e}`)};let o=lI(n,r,t);return o?(e===`f`?i.archive=o[0]:i.directory=o[0],{nextIndex:o[1],consumedValue:!0}):{nextIndex:r,error:sI(`option -${e} requires an argument`)}}function fI(e,t,n){let r=e[t];for(let i=1;i<r.length;i++){let a=dI(r[i],r.slice(i+1),e,t,n);if(a.error||a.consumedValue)return a}return{nextIndex:t}}function pI(e){let t={gzip:!1,verbose:!1,directory:`.`,paths:[]};for(let n=0;n<e.length;n++){let r=e[n];if(!r.startsWith(`-`)||r===`-`){t.paths.push(r);continue}if(r.startsWith(`--`))return sI(`unsupported option ${r}`);let i=fI(e,n,t);if(i.error)return i.error;n=i.nextIndex}return t}function mI(e,t){let n=e.replace(/\\/g,`/`).replace(/^\/+/,``).replace(/^(?:\.\/)+/,``);return n?n===`.`?`.`:n.replace(/\/+$/,``):er(t)}async function hI(e,t,n,r){let i=await e.fs.stat(t);if(i.isFile){r.push({path:n,bytes:await e.fs.readFileBuffer(t)});return}if(!i.isDirectory)throw Error(`unsupported file type: ${t}`);let a=n.endsWith(`/`)?n:`${n}/`;r.push({path:a,bytes:new Uint8Array,directory:!0});for(let n of await e.fs.readdir(t))await hI(e,$n(t,n),`${a}${n}`,r)}function gI(e,t){let n=e.length>=2&&e[0]===31&&e[1]===139,r=t||n?Yi(e):e;return Gi(r,{stripNpmPrefix:!1,includeDirectories:!0,preserveRawPaths:!0})}function _I(e,t,n){let r=n.replace(/\\/g,`/`);if(!r||r.startsWith(`/`)||/^[a-zA-Z]:\//.test(r)||r.split(`/`).includes(`..`))return;let i=e.fs.resolvePath(t,r);return cr(t,i)?i:void 0}async function vI(e,t){if(e.paths.length===0)return sI(`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 hI(t,e,mI(i,e),n)}let i=t.fs.resolvePath(t.cwd,e.archive),a=Zi(n);return await t.fs.writeFile(i,e.gzip?Ui(a):a),{stdout:e.verbose?`${n.map(e=>e.path).join(`
|
|
2152
|
+
`)}\n`:``,stderr:``,exitCode:0}}async function yI(e,t){if(e.paths.length>0)return sI(`${e.mode} mode does not accept input paths`);let n=t.fs.resolvePath(t.cwd,e.archive),r=gI(await t.fs.readFileBuffer(n),e.gzip);if(e.mode===`list`){let e=r.map(e=>e.path).join(`
|
|
2153
|
+
`);return{stdout:e?`${e}\n`:``,stderr:``,exitCode:0}}let i=t.fs.resolvePath(t.cwd,e.directory);await t.fs.mkdir(i,{recursive:!0});let a=[];for(let e of r){let n=_I(t,i,e.path);if(!n)return sI(`blocked suspicious path ${e.path}`);if(e.directory)await t.fs.mkdir(n,{recursive:!0});else{let r=ar(n);r!==`/`&&await t.fs.mkdir(r,{recursive:!0}),await t.fs.writeFile(n,e.bytes)}a.push(e.path)}return{stdout:e.verbose?`${a.join(`
|
|
2154
|
+
`)}\n`:``,stderr:``,exitCode:0}}function bI(){return S(`tar`,async(e,t)=>{if(e.length===0||e.includes(`--help`)||e.includes(`-h`))return oI();let n=pI(e);return`exitCode`in n?n:n.mode?n.archive?n.mode===`list`&&n.directory!==`.`?sI(`-C is only supported in create or extract mode`):n.mode===`create`?vI(n,t):yI(n,t):sI(`option -f requires an archive path`):sI(`exactly one of -c, -x, or -t is required`)})}var xI=`/**
|
|
2147
2155
|
* Standalone assertions - no dependency on test runner
|
|
2148
2156
|
*
|
|
2149
2157
|
* Each assertion:
|
|
@@ -2331,7 +2339,7 @@ function sameMembers(a, b) {
|
|
|
2331
2339
|
}
|
|
2332
2340
|
|
|
2333
2341
|
const slice = a => (isPrimitive(a) ? a : a.slice ? a.slice() : Object.assign({}, a))
|
|
2334
|
-
`,
|
|
2342
|
+
`,SI=`/**
|
|
2335
2343
|
* tst - minimal test runner
|
|
2336
2344
|
*
|
|
2337
2345
|
* - Standalone assertions (assert.js works anywhere)
|
|
@@ -2961,7 +2969,7 @@ function scheduleAutoRun() {
|
|
|
2961
2969
|
scheduleAutoRun()
|
|
2962
2970
|
|
|
2963
2971
|
export * from './assert.js'
|
|
2964
|
-
`;function
|
|
2972
|
+
`;function CI(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 wI=`tsc - thin wrapper over the ipk-loaded TypeScript 6 package
|
|
2965
2973
|
|
|
2966
2974
|
Usage:
|
|
2967
2975
|
tsc [options] [files...]
|
|
@@ -2985,28 +2993,28 @@ Install:
|
|
|
2985
2993
|
Then \`tsc --version\` and the transpile commands above. There is no
|
|
2986
2994
|
bundled binary, no CDN fallback; a missing package exits non-zero
|
|
2987
2995
|
with a clear \`ipk add\` hint.
|
|
2988
|
-
`;function
|
|
2989
|
-
`);if(t.file&&typeof t.start==`number`){let{line:e,character:r}=t.file.getLineAndCharacterOfPosition(t.start);return`${t.file.fileName}(${e+1},${r+1}): error TS${t.code}: ${n}`}return`error TS${t.code}: ${n}`}function
|
|
2990
|
-
`)}\n`:``;return{stdout:t.noEmit?``:i,stderr:s,exitCode:+(a.length>0)}}async function
|
|
2996
|
+
`;function TI(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 EI(e,t){let n=`${er(e).replace(/\.(ts|tsx|mts|cts)$/i,``)}.js`;return t?`${t.endsWith(`/`)?t.slice(0,-1):t}/${n}`:`${ar(e)}/${n}`}async function DI(e,t){let n=t||`/`,r=``;for(;n&&n!==r;){let t=n===`/`?`/tsconfig.json`:`${n}/tsconfig.json`;if(await e.exists(t))return t;r=n,n=ar(n)}return null}function OI(e){return{target:e.ScriptTarget.ES2022,module:e.ModuleKind.ESNext,moduleResolution:e.ModuleResolutionKind.Bundler,esModuleInterop:!0,allowSyntheticDefaultImports:!0,isolatedModules:!0}}function kI(e){if(typeof e!=`object`||!e)return{};let{compilerOptions:t}=e;return t??{}}async function AI(e,t,n){let r=OI(t),i=await DI(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,...kI(o)}}}function jI(e,t){let n=e.flattenDiagnosticMessageText(t.messageText,`
|
|
2997
|
+
`);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 MI(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 NI(e,t,n,r,i){let a=e.transpileModule(t,{compilerOptions:r,fileName:n,reportDiagnostics:i});return{outputText:a.outputText,diagnostics:a.diagnostics??[]}}function PI(e,t,n,r){let{outputText:i,diagnostics:a}=NI(e,r,`<stdin>.ts`,n.compilerOptions,!0),o=a.map(t=>jI(e,t)),s=o.length>0?`${o.join(`
|
|
2998
|
+
`)}\n`:``;return{stdout:t.noEmit?``:i,stderr:s,exitCode:+(a.length>0)}}async function FI(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}}MI(e,a);let{outputText:s,diagnostics:c}=NI(e,o,a,i.compilerOptions,!0),l=[];for(let t of c)l.push(`${jI(e,t)}\n`);let u=c.length>0;if(r.noEmit)return{stderr:l.join(``),hadError:u};let d=t.fs.resolvePath(t.cwd,EI(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 II(e,t){let n;try{n=TI(e)}catch(e){return{done:{stdout:``,stderr:`${e instanceof Error?e.message:String(e)}\n`,exitCode:2}}}if(n.showHelp)return{done:{stdout:wI,stderr:``,exitCode:0}};let r;try{r=await Zn(CI(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 LI(){return S(`tsc`,async(e,t)=>{let n=await II(e,t);if(`done`in n)return n.done;let{parsed:r,ts:i}=n,a=await AI(t.fs,i,t.cwd);if(r.files.length===0){let e=P(t.stdin);return e?PI(i,r,a,e):{stdout:wI,stderr:``,exitCode:0}}let o=[],s=!1;for(let e of r.files){let n=await FI(i,t,e,r,a);n.stderr&&o.push(n.stderr),n.hadError&&(s=!0)}return{stdout:``,stderr:o.join(``),exitCode:+!!s}})}const RI=[`**/*.test.{js,ts}`];function zI(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 BI(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 VI(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=zI(s,e[o+1]);if(c){n=c.reporter,c.consumed===2&&(o+=1);continue}let l=BI(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:[...RI],reporter:n,showHelp:r,coverage:i,coverageDir:a}}function HI(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 HI(`${r}${e}${i}`))o.push(t);return o}function UI(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 WI(e,t,n){let r=n.flatMap(HI).map(UI),i=new Set,a=t===`/`?``:t;async function o(t){let n;try{n=await e.readdir(t)}catch{return}for(let s of n){if(s===`node_modules`||s.startsWith(`.`))continue;let n=t===`/`?`/${s}`:`${t}/${s}`,c=!1;try{c=(await e.stat(n)).isDirectory}catch{continue}if(c){await o(n);continue}let l=n.startsWith(`${a}/`)?n.slice(a.length+1):n;r.some(e=>e.test(l))&&i.add(n)}}return await o(t),[...i].sort()}let GI=null;async function KI(e){if(GI)return GI;let t={module:e.ModuleKind.CommonJS,target:e.ScriptTarget.ES2022,esModuleInterop:!0,isolatedModules:!1};return GI=`
|
|
2991
2999
|
if (typeof process !== 'undefined' && !process.versions) {
|
|
2992
3000
|
try { process.versions = { node: '20.0.0' }; } catch (_) { /* readonly process.versions is fine */ }
|
|
2993
3001
|
}
|
|
2994
3002
|
const __tst_assert_exports = (function () {
|
|
2995
3003
|
const module = { exports: {} };
|
|
2996
3004
|
const exports = module.exports;
|
|
2997
|
-
${e.transpileModule(
|
|
3005
|
+
${e.transpileModule(xI,{compilerOptions:t,fileName:`assert.js`}).outputText}
|
|
2998
3006
|
return module.exports;
|
|
2999
3007
|
})();
|
|
3000
3008
|
const __tst_module_exports = (function () {
|
|
3001
3009
|
const module = { exports: {} };
|
|
3002
3010
|
const exports = module.exports;
|
|
3003
|
-
${e.transpileModule(
|
|
3011
|
+
${e.transpileModule(SI,{compilerOptions:t,fileName:`tst.js`}).outputText.replace(/require\(["']\.\/assert\.js["']\)/g,`__tst_assert_exports`).replace(/\bimport\.meta\b/g,`({url:""})`).replace(/await\s+import\(['"](?:worker_threads|fs|path)['"]\)/g,`await Promise.reject(new Error("tst: fork mode is not supported in the realm"))`)}
|
|
3004
3012
|
return module.exports;
|
|
3005
3013
|
})();
|
|
3006
3014
|
const __tst = __tst_module_exports.default || __tst_module_exports;
|
|
3007
3015
|
__tst.manual = true;
|
|
3008
|
-
`.trim(),
|
|
3009
|
-
`)}}`,d=
|
|
3016
|
+
`.trim(),GI}function qI(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 JI(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 YI(e,t,n){let r=b(`${t}/${n}`),i=[r];r.endsWith(`.js`)&&i.push(`${r.slice(0,-3)}.ts`),/\.[a-zA-Z0-9]+$/.test(r)||i.push(`${r}.ts`,`${r}.js`);for(let t of i)if(await e.exists(t))return t;return null}async function XI(e,t,n,r,i,a){let o=new Map,s=new Map,c=[{path:n,cjs:r}];for(;c.length>0;){let{path:n,cjs:r}=c.shift(),l=ar(n),u=new Map;for(let n of JI(r)){if(!n.startsWith(`./`)&&!n.startsWith(`../`))continue;let r=await YI(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 ZI(e,t,n,r,i,a,o=``,s=``){let c=r===`spec`?`pretty`:`tap`,l=[];for(let[e,t]of i.entries()){let n=qI(t,a.get(e)??new Map);l.push(`${JSON.stringify(e)}: function (module, exports, require) {\n${n}\n}`)}let u=`{${l.join(`,
|
|
3017
|
+
`)}}`,d=qI(n,a.get(t)??new Map),f=o,p=s;return`"use strict";
|
|
3010
3018
|
${f}${e}
|
|
3011
3019
|
const __realmRequire = require;
|
|
3012
3020
|
const { createRequire: __createRequire } = __realmRequire("module");
|
|
@@ -3049,7 +3057,7 @@ await Promise.resolve();
|
|
|
3049
3057
|
await new Promise((resolve) => setTimeout(resolve));
|
|
3050
3058
|
${p}
|
|
3051
3059
|
if (__state && __state.failed && __state.failed.length > 0) process.exit(1);
|
|
3052
|
-
`}const
|
|
3060
|
+
`}const QI={esModuleInterop:!0,allowJs:!0,isolatedModules:!1};function $I(e){return{module:e.ModuleKind.CommonJS,target:e.ScriptTarget.ES2022,...QI}}async function eL(e,t){let n;try{n=VI(e)}catch(e){return{done:{stdout:``,stderr:`${e instanceof Error?e.message:String(e)}\n`,exitCode:2}}}if(n.showHelp)return{done:{stdout:`tst - run *.test.{js,ts} files with the bundled tst runner
|
|
3053
3061
|
|
|
3054
3062
|
Usage:
|
|
3055
3063
|
tst [options] [glob...]
|
|
@@ -3071,7 +3079,7 @@ Notes:
|
|
|
3071
3079
|
with statement counters. nyc/c8 cannot wrap this runner: it is not a
|
|
3072
3080
|
Node child. Istanbul/Babel are not bundled (webapp size-limit); the
|
|
3073
3081
|
TypeScript AST already in process does the rewrite.
|
|
3074
|
-
`,stderr:``,exitCode:0}};let r=await
|
|
3082
|
+
`,stderr:``,exitCode:0}};let r=await WI(t.fs,t.cwd,n.globs);if(r.length===0)return{done:{stdout:``,stderr:`tst: no test files matched ${n.globs.join(` `)}\n`,exitCode:1}};let i;try{i=await Zn(CI(t))}catch(e){return{done:{stdout:``,stderr:`tst: ${e instanceof Error?e.message:String(e)}\n`,exitCode:1}}}let a=await KI(i),o=n.coverage?await import(`./coverage-instrument-CjoHgKzK.js`):null;return{parsed:n,files:r,ts:i,harness:a,userOpts:$I(i),coverageMaps:{},coverageCounts:{},coverageMod:o}}function tL(e){return e.includes(`# fail `)||/(^|\n)not ok /.test(e)}async function nL(e,t,n,r){let{ts:i,harness:a,userOpts:o,parsed:s}=t,c=t.coverageMod,l=c?(e,n)=>{let{source:r,map:a}=c.instrumentSource(i,e,n);return t.coverageMaps[n]=a,r}:void 0,u;try{u=await e.fs.readFile(n)}catch(e){return{stdout:``,stderr:`tst: ${n}: ${e instanceof Error?e.message:String(e)}\n`,failed:!0}}l&&(u=l(u,n));let d;try{d=i.transpileModule(u,{compilerOptions:o,fileName:n}).outputText}catch(e){return{stdout:``,stderr:`tst: ${n}: transpile error: ${e instanceof Error?e.message:String(e)}\n`,failed:!0}}let f,p;try{({modules:f,edgeRewrites:p}=await XI(e.fs,i,n,d,o,l))}catch(e){return{stdout:``,stderr:`tst: ${n}: local-require resolve error: ${e instanceof Error?e.message:String(e)}\n`,failed:!0}}let m=ZI(a,n,d,s.reporter,f,p,c?`${c.coverageRuntimeSource()}\n`:``,c?`\n${c.coverageDumpSource()}`:``),h=await Hr(m,[`node`,n],e,void 0,{filename:n}),g=h.stdout;if(c){let e=c.extractCoverageCounts(g);g=e.stdout,c.mergeCounts(t.coverageCounts,e.counts)}return{stdout:r?`# ${n}\n${g}`:g,stderr:h.stderr,failed:h.exitCode!==0||tL(g)}}function rL(){return S(`tst`,async(e,t)=>{let n=await eL(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 nL(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 iL=[],aL=`usage: theme <subcommand> [args]
|
|
3075
3083
|
|
|
3076
3084
|
Subcommands:
|
|
3077
3085
|
list List available preset and custom themes
|
|
@@ -3080,23 +3088,23 @@ Subcommands:
|
|
|
3080
3088
|
reset Reset to the default theme
|
|
3081
3089
|
current Show the currently active theme
|
|
3082
3090
|
export <id> <path> Export a theme to a VFS path
|
|
3083
|
-
`;function
|
|
3084
|
-
`),stderr:``,exitCode:0}}async function
|
|
3085
|
-
`,stderr:``,exitCode:0}}async function
|
|
3091
|
+
`;function oL(e,t){return{stdout:``,stderr:`theme ${e}: ${t}\n`,exitCode:1}}function sL(){return S(`theme`,async(e,t)=>{if(e.length===0||e[0]===`--help`||e[0]===`-h`)return{stdout:aL,stderr:``,exitCode:0};let n=e[0];return w(e.slice(1),{valueFlags:iL})?{stdout:$e(`theme`,n,aL),stderr:``,exitCode:0}:n===`list`?cL(e):n===`current`?lL(e):n===`reset`?uL(e):n===`apply`?dL(e.slice(1),t):n===`export`?fL(e.slice(1),t):{stdout:``,stderr:`theme: unknown subcommand "${n}"\n${aL}`,exitCode:1}})}async function cL(e){let t=C(e.slice(1),{value:iL});if(`error`in t)return oL(`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(`
|
|
3092
|
+
`),stderr:``,exitCode:0}}async function lL(e){let t=C(e.slice(1),{value:iL});return`error`in t?oL(`current`,t.error):{stdout:`Check the Theme settings dialog for the active theme.
|
|
3093
|
+
`,stderr:``,exitCode:0}}async function uL(e){let t=C(e.slice(1),{value:iL});if(`error`in t)return oL(`reset`,t.error);let n=y();return n?(await n.call(`theme-apply`,{action:`reset`}),{stdout:`Theme reset to default.
|
|
3086
3094
|
`,stderr:``,exitCode:0}):{stdout:``,stderr:`theme: no panel-RPC connection available
|
|
3087
|
-
`,exitCode:1}}async function
|
|
3095
|
+
`,exitCode:1}}async function dL(e,t){let n=C(e,{value:iL});if(`error`in n)return oL(`apply`,n.error);if(n.positionals.length===0)return{stdout:``,stderr:`theme apply: missing theme id or path
|
|
3088
3096
|
`,exitCode:1};let r=y();if(!r)return{stdout:``,stderr:`theme: no panel-RPC connection available
|
|
3089
3097
|
`,exitCode:1};let i=n.positionals[0],{PRESETS:a}=await import(`./theme-presets-xiOb9AFN.js`),o=a.find(e=>e.id===i);if(o){let e=JSON.stringify(o);return await r.call(`theme-apply`,{themeJson:e,action:`apply`}),{stdout:`Applied theme: ${o.name}\n`,stderr:``,exitCode:0}}let s=t.fs.resolvePath(t.cwd,i),c;try{c=await t.fs.readFile(s)}catch{return{stdout:``,stderr:`theme apply: "${i}" is not a known preset id and file not found at ${s}\n`,exitCode:1}}try{let e=JSON.parse(c);if(!e.id||!e.name||!e.base||!e.tokens)return{stdout:``,stderr:`theme apply: invalid theme file (missing id, name, base, or tokens)
|
|
3090
3098
|
`,exitCode:1}}catch{return{stdout:``,stderr:`theme apply: file is not valid JSON
|
|
3091
|
-
`,exitCode:1}}return{stdout:`Applied theme: ${(await r.call(`theme-apply`,{themeJson:c,action:`apply`})).applied}\n`,stderr:``,exitCode:0}}async function
|
|
3092
|
-
`,exitCode:1};let[r,i]=n.positionals,{PRESETS:a}=await import(`./theme-presets-xiOb9AFN.js`),o=a.find(e=>e.id===r);if(!o)return{stdout:``,stderr:`theme export: unknown preset id "${r}"\n`,exitCode:1};let s=t.fs.resolvePath(t.cwd,i);try{await t.fs.writeFile(s,JSON.stringify(o,null,2))}catch(e){return{stdout:``,stderr:`theme export: write failed: ${e instanceof Error?e.message:String(e)}\n`,exitCode:1}}return{stdout:`Exported "${o.name}" to ${s}\n`,stderr:``,exitCode:0}}const
|
|
3093
|
-
`),stderr:``,exitCode:0}}function
|
|
3099
|
+
`,exitCode:1}}return{stdout:`Applied theme: ${(await r.call(`theme-apply`,{themeJson:c,action:`apply`})).applied}\n`,stderr:``,exitCode:0}}async function fL(e,t){let n=C(e,{value:iL});if(`error`in n)return oL(`export`,n.error);if(n.positionals.length<2)return{stdout:``,stderr:`theme export: usage: theme export <id> <path>
|
|
3100
|
+
`,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 pL=`unknown`,mL=`usage: uname [-amnorsv]`,hL=[`s`,`n`,`r`,`v`,`m`,`o`];function gL(){return{stdout:[mL,` -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(`
|
|
3101
|
+
`),stderr:``,exitCode:0}}function _L(){let{releasedAt:e,buildId:t}=Ke();return e?`${t} (${e})`:t}function vL(){let e=globalThis.navigator,t=e?.userAgentData?.platform||e?.platform;return typeof t==`string`&&t.length>0?t:pL}function yL(){let e=globalThis.navigator?.userAgent;return typeof e==`string`&&e.length>0?e:pL}function bL(e){switch(e){case`s`:return`SLICC`;case`n`:return Ge();case`r`:return Ke().version;case`v`:return _L();case`m`:return vL();case`o`:return yL()}}function xL(e){return{stdout:``,stderr:`uname: ${e}\n${mL}\n`,exitCode:1}}function SL(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 hL)t.add(e);continue}if(!hL.includes(e))return{error:`unrecognized option '-${e}'`};t.add(e)}}return t}function CL(){return S(`uname`,async e=>{if(e.includes(`--help`)||e.includes(`-h`))return gL();let t=SL(e);return`error`in t?xL(t.error):{stdout:`${(t.size>0?hL.filter(e=>t.has(e)):[`s`]).map(bL).join(` `)}\n`,stderr:``,exitCode:0}})}function wL(){return S(`unlink`,async(e,t)=>{if(e.includes(`--help`))return{stdout:`Usage: unlink FILE
|
|
3094
3102
|
Remove FILE. Symbolic links are removed without following their target.
|
|
3095
3103
|
`,stderr:``,exitCode:0};if(e.length!==1||e[0].startsWith(`-`))return{stdout:``,stderr:e.length===0?`unlink: missing operand
|
|
3096
3104
|
`:`unlink: extra operand
|
|
3097
|
-
`,exitCode:1};let n=t.fs.resolvePath(t.cwd,e[0]);try{let r=t.fs.lstat?await t.fs.lstat(n):await t.fs.stat(n);return r.isDirectory&&!r.isSymbolicLink?{stdout:``,stderr:`unlink: cannot unlink '${e[0]}': Is a directory\n`,exitCode:1}:(await t.fs.rm(n,{recursive:!1,force:!1}),{stdout:``,stderr:``,exitCode:0})}catch(t){let n=t instanceof Error?t.message:String(t);return{stdout:``,stderr:`unlink: cannot unlink '${e[0]}': ${n}\n`,exitCode:1}}})}function
|
|
3098
|
-
`,stderr:``,exitCode:0}}function
|
|
3099
|
-
`,exitCode:1}}:{kind:`ok`,archive:n[0],destination:t||`.`}}async function
|
|
3105
|
+
`,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 TL(){return{stdout:`usage: unzip <archive.zip> [-d <destination>]
|
|
3106
|
+
`,stderr:``,exitCode:0}}function EL(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
|
|
3107
|
+
`,exitCode:1}}:{kind:`ok`,archive:n[0],destination:t||`.`}}async function DL(e,t,n,r){let i=n.replace(/\\/g,`/`);if(!i||i.endsWith(`/`))return!1;let a=e.fs.resolvePath(t,i);if(!cr(t,a))return{stdout:``,stderr:`unzip: blocked suspicious path ${n}\n`,exitCode:1};let o=ar(a);return o!==`/`&&await e.fs.mkdir(o,{recursive:!0}),await e.fs.writeFile(a,r),!0}function OL(){return S(`unzip`,async(e,t)=>{if(e.length===0||e.includes(`--help`)||e.includes(`-h`))return TL();let n=EL(e);if(n.kind===`error`)return n.result;let r=t.fs.resolvePath(t.cwd,n.archive),i=t.fs.resolvePath(t.cwd,n.destination);await t.fs.mkdir(i,{recursive:!0});let a=await t.fs.readFileBuffer(r),o=xt(a),s=0;for(let[e,n]of Object.entries(o)){let r=await DL(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 kL=`ai-ecoverse/slicc`,AL=`usage: upgrade status | upgrade apply --from=<version> --to=<version>`,jL=`packages/vfs-root`,ML=3e4,NL=[`${jL}/workspace/skills/`,`${jL}/shared/sprinkles/`,`${jL}/shared/sounds/`,`${jL}/shared/GELATIERE.md`,`${jL}/shared/wiki/WIKI.md`,`${jL}/etc/`],PL=[`auto-applied`,`merged-clean`,`kept-local`,`needs-review`,`unchanged`,`added-new`];function FL(){return Object.fromEntries(PL.map(e=>[e,0]))}function IL(e,t,n,r){let i=FL();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 LL(e){if(e[0]!==`apply`)throw Error(AL);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 RL(e){return e.startsWith(`v`)?e:`v${e}`}function zL(e){if(!NL.some(t=>e.startsWith(t)))return null;let t=e.slice(17);return!t||t.split(`/`).some(e=>e===`.`||e===`..`)?null:t}async function BL(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 ${ML}ms`)),ML)})])}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 VL(e,t){let n=await BL(t,`https://api.github.com/repos/${kL}/git/trees/${encodeURIComponent(e)}?recursive=1`),r=ue(n.body);if(r.truncated)throw Error(`bundled file discovery was truncated for ${e}`);if(!Array.isArray(r.tree))throw Error(`invalid bundled file discovery response for ${e}`);let i=new Map;for(let e of r.tree){if(e.type!==`blob`||typeof e.path!=`string`)continue;let t=zL(e.path);t&&i.set(t,e.path)}return i}function HL(e,t){let n=t.split(`/`).map(encodeURIComponent).join(`/`);return`https://raw.githubusercontent.com/${kL}/${encodeURIComponent(e)}/${n}`}function UL(e,t){return!e||!t||e.byteLength!==t.byteLength?!1:e.every((e,n)=>e===t[n])}function WL(e){try{return new TextDecoder(`utf-8`,{fatal:!0}).decode(e)}catch{return null}}async function GL(e,t){if(!await e.exists(t))return;let n=await e.readFile(t,{encoding:`binary`});return n instanceof Uint8Array?n:new TextEncoder().encode(n)}async function KL(e,t,n,r,i){let a=`${t}.upgrade-${RL(n)}-to-${RL(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 qL(e,t,n,r,i,a,o){let s=await GL(e.fs,t);if(!a)return{path:t,classification:s?`kept-local`:`unchanged`};if(!i)return s?{path:t,classification:UL(s,a)?`unchanged`:`kept-local`}:{path:t,classification:`added-new`,content:a};if(UL(i,a)||UL(s,a))return{path:t,classification:`unchanged`};if(!s)return{path:t,classification:`kept-local`};if(UL(s,i))return{path:t,classification:`auto-applied`,content:a};let[c,l,u]=[s,i,a].map(WL);if(c!==null&&l!==null&&u!==null){let i=ke(c,l,u,{diff3:!0,labels:{current:`local:${t}`,base:`${RL(n)}:${t}`,other:`${RL(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 KL(e.fs,t,n,r,o)}}return{path:t,classification:`needs-review`,content:a,sidecar:await KL(e.fs,t,n,r,o)}}async function JL(e,t){t.content?await e.writeFile(t.path,t.content):await e.exists(t.path)&&await e.rm(t.path)}async function YL(e,t){let n=t.filter(e=>e.content!==void 0),r=await Promise.all(n.map(async t=>{let n=t.sidecar??t.path;return{path:n,content:await GL(e,n)}})),i=[];for(let t=0;t<n.length;t+=1){let a=n[t],o=r[t];try{await e.writeFile(o.path,a.content),i.push(o)}catch(t){let n=[];for(let t of[o,...i.slice().reverse()])try{await JL(e,t)}catch(e){n.push(`${t.path}: ${e instanceof Error?e.message:String(e)}`)}let r=t instanceof Error?t.message:String(t),a=n.length===0?`all writes rolled back`:`rollback failed (${n.join(`; `)})`;throw Error(`apply failed for ${o.path}: ${r}; ${a}`)}}}async function XL(e,t,n){let r=RL(t),i=RL(n),[a,o]=await Promise.all([VL(r,e.fetch),VL(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)?BL(e.fetch,HL(r,a.get(t))).then(e=>fe(e.body)):void 0,o.has(t)?BL(e.fetch,HL(i,o.get(t))).then(e=>fe(e.body)):void 0]);return{path:t,base:n,theirs:s}})),l=new Set(s),u=[];for(let{path:r,base:i,theirs:a}of c)u.push(await qL(e,r,t,n,i,a,l));return await YL(e.fs,u),u}async function ZL(e){let{version:t,releasedAt:n,buildId:r}=Ke(),i=[],a=null,o=e.getLastSeen??qe();if(!o)i.push(`last-seen version unavailable: no reader registered in this runtime`);else try{a=await o()}catch(e){i.push(`last-seen version unavailable: ${e instanceof Error?e.message:String(e)}`)}let s=a!==null&&a!==t;return`${JSON.stringify({ok:i.length===0,version:t,releasedAt:n,build:r,lastSeen:a,mergePending:s,...s?{apply:`upgrade apply --from=${a} --to=${t}`}:{},errors:i})}\n`}function QL(e){return S(`upgrade`,async t=>{if(t.includes(`--help`)||t.includes(`-h`))return{stdout:`${AL}\n`,stderr:``,exitCode:0};if(t[0]===`status`)return t.length>1?{stdout:IL(``,``,[],[`unsupported argument: ${t[1]}`]),stderr:``,exitCode:1}:{stdout:await ZL(e),stderr:``,exitCode:0};let n=``,r=``;try{({from:n,to:r}=LL(t));let i=await XL(e,n,r),a=i.some(e=>e.classification===`needs-review`);return{stdout:IL(n,r,i,[]),stderr:``,exitCode:+!!a}}catch(e){let t=e instanceof Error?e.message:String(e);return{stdout:IL(n,r,[],[t]),stderr:``,exitCode:1}}})}const $L=`usage: uptime [-p|--pretty] [-s|--since]`,eR=`${$L}
|
|
3100
3108
|
|
|
3101
3109
|
Print how long this SLICC has been running. The clock starts when the browser
|
|
3102
3110
|
window was last loaded — a reload is a reboot.
|
|
@@ -3112,7 +3120,7 @@ The load average is the average number of live kernel processes over the last
|
|
|
3112
3120
|
processes are retained in bounded numbers, so a long burst of short commands
|
|
3113
3121
|
can under-report the older windows. The user count is always 1: a SLICC
|
|
3114
3122
|
runtime has one user identity (see \`id\`).
|
|
3115
|
-
`,
|
|
3123
|
+
`,tR=[1,5,15],nR=6e4,rR=60*nR,iR=24*rR;function aR(){let e=globalThis.__slicc_pm;return e instanceof Object&&typeof e.list==`function`?e:null}function oR(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 sR(e){let t=Math.max(0,e),n=Math.floor(t/iR),r=Math.floor(t%iR/rR),i=Math.floor(t%rR/nR),a=r>0?`${r}:${String(i).padStart(2,`0`)}`:`${i} min`;return n===0?a:`${n} ${n===1?`day`:`days`}, ${a}`}function cR(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/iR),`day`),r(Math.floor(t%iR/rR),`hour`),r(Math.floor(t%rR/nR),`minute`),n.length===0?`up ${Math.floor(t/1e3)} seconds`:`up ${n.join(`, `)}`}function lR(e){let t=new Date(e),n=e=>String(e).padStart(2,`0`);return`${`${t.getFullYear()}-${n(t.getMonth()+1)}-${n(t.getDate())}`} ${n(t.getHours())}:${n(t.getMinutes())}:${n(t.getSeconds())}`}function uR(e){let t=new Date(e),n=e=>String(e).padStart(2,`0`);return`${n(t.getHours())}:${n(t.getMinutes())}:${n(t.getSeconds())}`}function dR(e,t,n){let r=tR.map(r=>oR(e,t,r*nR,n).toFixed(2));return` ${uR(t)} up ${sR(t-n)}, 1 user, load average: ${r.join(`, `)}\n`}function fR(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 pR(e={}){return S(`uptime`,async t=>{let n=fR(t);if(typeof n!=`string`)return{stdout:``,stderr:`uptime: ${n.error}\n${$L}\n`,exitCode:1};if(n===`help`)return{stdout:eR,stderr:``,exitCode:0};if(n===`version`)return{stdout:`uptime (SLICC) ${Ke().version}\n`,stderr:``,exitCode:0};let r=e.now?e.now():Date.now(),i=e.bootedAt?e.bootedAt():fa();if(n===`since`)return mR(`${lR(i)}\n`);if(n===`pretty`)return mR(`${cR(r-i)}\n`);let a=e.processManager??aR();return mR(dR(a?a.list():[],r,i))})}function mR(e){return{stdout:e,stderr:``,exitCode:0}}const hR=new Set([`--vid`,`--pid`,`--class`,`--subclass`,`--protocol`,`--serial`,`--request-type`,`--recipient`,`--request`,`--value`,`--index`,`--__resolved`]);function gR(e){return vn(e,hR)}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 _R(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 vR=new Set([`standard`,`class`,`vendor`]),yR=new Set([`device`,`interface`,`endpoint`,`other`]);function bR(e){let t=e.get(`--request-type`)??`vendor`,n=e.get(`--recipient`)??`device`;if(!vR.has(t))throw Error(`invalid --request-type: '${t}'`);if(!yR.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 xR(e){let t=ei(e.stdin),n=new Uint8Array(t.length);for(let e=0;e<t.length;e++)n[e]=t.charCodeAt(e)&255;return n}function SR(e){return Array.from(e,e=>e.toString(16).padStart(2,`0`)).join(` `)}function CR(e){return`0x${e.toString(16).padStart(4,`0`)}`}function wR(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${CR(e.vendorId)}:${CR(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 TR=`usb - access USB devices via WebUSB
|
|
3116
3124
|
|
|
3117
3125
|
Usage: usb <subcommand> [options]
|
|
3118
3126
|
|
|
@@ -3151,11 +3159,11 @@ Options:
|
|
|
3151
3159
|
-h, --help
|
|
3152
3160
|
|
|
3153
3161
|
Transfers are capped at ${$r} bytes (4 MiB).
|
|
3154
|
-
`;function
|
|
3155
|
-
`):X(`${t.map(
|
|
3156
|
-
`)}\n`)}async function
|
|
3162
|
+
`;function ER(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?`${SR(e)}\n`:``)}async function DR(e){let t=await e.list();return t.length===0?X(`no granted USB devices
|
|
3163
|
+
`):X(`${t.map(wR).join(`
|
|
3164
|
+
`)}\n`)}async function OR(e,t){let n=e.get(`--__resolved`);if(n)return X(`${wR(await t.info(n))}\n`);let r=_R(e),i=xe();if(i){let e=await Sx(`usb-device`,r,i);if(e.handle)return X(`${wR(await t.info(e.handle))}\n`);let n=e.info,a=Zr();if(!a)return Z(`request: WebUSB unavailable for device re-acquire`);let o=(await a.getDevices()).find(e=>e.vendorId===n.vendorId&&e.productId===n.productId&&(!n.serialNumber||e.serialNumber===n.serialNumber));if(!o)return Z(`request: granted device could not be re-acquired`);let s=Qr().register(o);return X(`${wR(Xr(s,o))}\n`)}return X(`${wR(await t.request(r))}\n`)}async function kR(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 AR(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 jR(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 MR(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 NR(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`):ER((await n.controlIn(i,bR(t),o)).bytes,r)}async function PR(e,t,n,r){let i=e[1];if(!i)return Z(`control-out: handle required`);let a=xR(t);return a.length>4194304?Z(`control-out payload exceeds 4 MiB limit`):X(`${(await r.controlOut(i,bR(n),a)).bytesWritten} bytes written\n`)}async function FR(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`):ER((await n.transferIn(i,Y(a,`endpoint`),s)).bytes,r)}async function IR(e,t,n,r){let[,i,a]=e;if(!i||a===void 0)return Z(`transfer-out: handle and endpoint required`);let o=xR(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 LR(e,t,n){let{positionals:r,flags:i,bools:a}=gR(e),o=r[0],s=a.has(`--raw`);switch(o){case`list`:return DR(n);case`request`:return OR(i,n);case`open`:case`close`:case`reset`:return kR(o,r,n,a);case`clear-halt`:return AR(r,n);case`select-config`:return jR(r,n);case`claim`:case`release`:return MR(o,r,n,a);case`control-in`:return NR(r,i,n,s);case`control-out`:return PR(r,t,i,n);case`transfer-in`:return FR(r,i,n,s);case`transfer-out`:return IR(r,t,i,n);default:return Z(`unknown subcommand '${o??``}'. Try 'usb --help'.`)}}function RR(){return S(`usb`,async(e,t)=>{if(e.length===0||e.includes(`--help`)||e.includes(`-h`))return X(TR);let n=Mr(se(),y());if(!n)return Z(`WebUSB is unavailable in this environment`);try{return await LR(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 zR=`/workspace/.v86`,BR=`v86 - run an x86 virtual machine (v86 wasm engine)
|
|
3157
3165
|
|
|
3158
|
-
Requires: ${N} v86@${
|
|
3166
|
+
Requires: ${N} v86@${ZD}
|
|
3159
3167
|
|
|
3160
3168
|
Usage:
|
|
3161
3169
|
v86 start [boot options] Boot a VM in the background (prints pid)
|
|
@@ -3189,7 +3197,7 @@ Boot options (QEMU-flavored):
|
|
|
3189
3197
|
proxy — no gateway needed, https upstream via the proxy
|
|
3190
3198
|
-vga <MiB> SVGA/VBE video memory (default 8, max 64) —
|
|
3191
3199
|
raise for high-res VESA modes (1080p32 needs ~9)
|
|
3192
|
-
-bios <path> -vgabios <path> BIOS blobs (default ${
|
|
3200
|
+
-bios <path> -vgabios <path> BIOS blobs (default ${zR}/{seabios,vgabios}.bin)
|
|
3193
3201
|
-nographic Serial-only guest (skip VGA)
|
|
3194
3202
|
|
|
3195
3203
|
Notes:
|
|
@@ -3197,19 +3205,19 @@ Notes:
|
|
|
3197
3205
|
(Alpine, FreeDOS, Buildroot Linux) work best.
|
|
3198
3206
|
- The copy.sh Arch Linux image boots via -state + -fs9p; see the v86 skill.
|
|
3199
3207
|
- BIOS blobs are not bundled; download once:
|
|
3200
|
-
mkdir -p ${
|
|
3201
|
-
curl -o ${
|
|
3202
|
-
curl -o ${
|
|
3203
|
-
`,
|
|
3204
|
-
mkdir -p ${
|
|
3205
|
-
curl -o ${
|
|
3206
|
-
curl -o ${
|
|
3207
|
-
or pass -bios / -vgabios with explicit VFS paths.`,
|
|
3208
|
+
mkdir -p ${zR}
|
|
3209
|
+
curl -o ${zR}/seabios.bin https://raw.githubusercontent.com/copy/v86/master/bios/seabios.bin
|
|
3210
|
+
curl -o ${zR}/vgabios.bin https://raw.githubusercontent.com/copy/v86/master/bios/vgabios.bin
|
|
3211
|
+
`,VR=`v86: BIOS images not found. Download them once:
|
|
3212
|
+
mkdir -p ${zR}
|
|
3213
|
+
curl -o ${zR}/seabios.bin https://raw.githubusercontent.com/copy/v86/master/bios/seabios.bin
|
|
3214
|
+
curl -o ${zR}/vgabios.bin https://raw.githubusercontent.com/copy/v86/master/bios/vgabios.bin
|
|
3215
|
+
or pass -bios / -vgabios with explicit VFS paths.`,HR={"-n":UR,"-name":UR,"--name":UR,"-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)=>WR(e,`cdrom`,t),"-hda":(e,t)=>WR(e,`hda`,t),"-fda":(e,t)=>WR(e,`fda`,t),"-kernel":(e,t)=>WR(e,`kernel`,t),"-initrd":(e,t)=>WR(e,`initrd`,t),"-append":(e,t)=>WR(e,`append`,t),"-bios":(e,t)=>WR(e,`bios`,t),"-vgabios":(e,t)=>WR(e,`vgabios`,t),"-state":(e,t)=>WR(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 UR(e,t){return/^[A-Za-z0-9_-]+$/.test(t)?(e.name=t,null):`invalid VM name '${t}'`}function WR(e,t,n){return e[t]=n,null}const GR=[...Object.keys(HR),`--fps`,`--tail`,`--send`,`--to`];function KR(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(HR,r)?HR[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 qR(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 JR(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 YR(e){return oa(e)||Q(`no VM named '${e}' — boot one with \`v86 start -n ${e} ...\``)}function XR(e){return`exitCode`in e}async function ZR(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 QR={a:801,c:306,d:531};function $R(){let e=globalThis.__slicc_pm;return e instanceof Object&&typeof e.signal==`function`?e:null}function ez(e={}){return S(`v86`,async(t,n)=>{if(t.length===0||t[0]===`--help`||t[0]===`-h`||t[0]===`help`)return $(BR);if(t[0]===`--version`)return tz(n,e);let r=t[0];if(w(t.slice(1),{valueFlags:GR}))return $($e(`v86`,r,BR,{prefix:`v86`}));let i=Qe(t.slice(1));try{switch(r){case`start`:return await sz(i,n,e);case`ls`:return lz();case`type`:return await pz(i,n);case`key`:return await mz(i,n);case`mouse`:return await gz(i,n);case`screenshot`:return await _z(i,n);case`text`:return await vz(i,n);case`serve`:return yz(i);case`serial`:return bz(i);case`state`:return await xz(i,n);case`stop`:return await Sz(i,e);default:return Q(`unknown subcommand '${r}' — see \`v86 --help\``)}}catch(e){return Q(e instanceof Error?e.message:String(e))}})}async function tz(e,t){if(t.loadEngine)return $(`v86 ${(await t.loadEngine(qR(e))).version} (qemu-flavored CLI)\n`);let n=await rO(qR(e));return n?$(`v86 ${n.version} (qemu-flavored CLI)\n`):Q(QD)}async function nz(e,t,n){if(e.state&&!e.bios&&!e.vgabios)return null;let r=await ZR(t,e.bios??`${zR}/seabios.bin`,`-bios`);if(`exitCode`in r)return e.bios?r:Q(VR.replace(/^v86: /u,``));if(n.bios=r,e.nographic)return null;let i=await ZR(t,e.vgabios??`${zR}/vgabios.bin`,`-vgabios`);return`exitCode`in i?e.vgabios?i:Q(VR.replace(/^v86: /u,``)):(n.vga_bios=i,null)}async function rz(e,t,n){let r=await nz(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 ZR(t,a,`-${r}`);if(`exitCode`in o)return o;n[i]=o}if(e.append&&(n.cmdline=e.append),e.boot&&(n.boot_order=QR[e.boot]),e.state){let r=await ZR(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 iz=6e4;function az(e){return e.v86?Promise.resolve():new Promise((t,n)=>{let r=setTimeout(()=>n(Error(`engine init timed out after ${iz/1e3}s`)),iz);e.add_listener(`emulator-loaded`,()=>{clearTimeout(r),t()})})}function oz(e,t){let n=e.network_adapter;if(!n||typeof n.fetch!=`function`)return Q(`relay=fetch: engine exposed no fetch-relay network adapter`);let r=t.proxiedFetch??h();return n.fetch=async(e,t)=>{let n=e.replace(/^http:\/\/(?!localhost[:/]|127\.0\.0\.1[:/])/u,`https://`),i={};t?.headers?.forEach((e,t)=>{i[t]=e});let a;if(t?.body){let e=``;for(let n of t.body)e+=String.fromCharCode(n);a=e}let o=await r(n,{method:t?.method,headers:i,body:a}),s=o.body,c=s.buffer.slice(s.byteOffset,s.byteOffset+s.byteLength);return{status:o.status,statusText:o.statusText,headers:new Headers(o.headers),redirected:!1,url:o.url,arrayBuffer:async()=>c}},null}async function sz(e,t,n){let r=KR(e);if(!r.ok)return Q(r.error);let i=r.parsed;if(oa(i.name))return Q(`VM '${i.name}' already running — stop it first or pick another -n name`);let a=qR(t),o=n.loadEngine?await n.loadEngine(a):await eO({ipk:a}),s={wasm_fn:aO(o.wasmModule),memory_size:i.memoryMib*1024*1024,vga_memory_size:i.vgaMemoryMib*1024*1024,autostart:!1,disable_speaker:!0,fastboot:!0},c=await rz(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??$R();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`,()=>{cz(u,d)})}aa(u);try{if(await az(l),i.netRelay===`fetch`){let e=oz(l,n);if(e)return await cz(u,d),e}ia(u),await l.run()}catch(e){return await cz(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 cz(e,t){sa(e),ra(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 lz(){let e=na();if(e.length===0)return $(`no VMs running
|
|
3208
3216
|
`);let t=[`NAME PID STATE UP BOOT`];for(let n of e){let e=Math.round((Date.now()-n.startedAt)/1e3),r=e>=60?`${Math.floor(e/60)}m${e%60}s`:`${e}s`;t.push(`${n.name.padEnd(10)} ${String(n.pid??`-`).padEnd(6)} ${(n.emulator.is_running()?`running`:`stopped`).padEnd(9)} ${r.padEnd(9)} `+n.bootArgv.slice(2).join(` `))}return $(`${t.join(`
|
|
3209
|
-
`)}\n`)}function
|
|
3217
|
+
`)}\n`)}function uz(e,t){return`prefer: computer ${e} -c ${t}\n`}async function dz(e,t,n,r){let i=YR(t);if(XR(i))return i;let[{runComputer:a},{getComputerRegistry:o,installComputerRegistry:s},c]=await Promise.all([import(`./run-BVlVC7jS.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),fz(await a([`-c`,l,...n],e,{registry:u}),r,l)}function fz(e,t,n){let r=uz(t,n);return e.exitCode===0?$(`${e.stdout}${r}`):e.stderr.includes(`screenshot failed after input`)?$(`${e.stderr}${r}`):{stdout:e.stdout,stderr:e.stderr.replace(/^computer: /u,`v86: `),exitCode:e.exitCode}}async function pz(e,t){let{name:n,rest:r}=JR(e);if(r.length===0){let e=YR(n);return XR(e)?e:Q(`type: no text supplied`)}return dz(t,n,[`type`,`--`,...r],`type`)}async function mz(e,t){let{name:n,rest:r}=JR(e);if(r.length===0){let e=YR(n);return XR(e)?e:Q(`key: no chord supplied`)}return dz(t,n,[`key`,...r],`key`)}const hz=[`left`,`middle`,`right`];async function gz(e,t){let{name:n,rest:r}=JR(e),i=YR(n);if(XR(i))return i;let a=r.indexOf(`--to`);if(a!==-1){let e=r[a+1],i=e?/^(\d+),(\d+)$/u.exec(e):null;return i?dz(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>`):dz(t,n,[`--native`,`mousemove`,e,i,`--relative`],`mousemove`)}if(o===`click`){let e=r[1]??`left`;if(!hz.includes(e))return Q(`mouse: unknown button '${r[1]}'`);let i=[`click`,e];return r.includes(`--double`)&&i.push(`--repeat`,`2`),dz(t,n,i,`click`)}return Q(`mouse: expected move <dx> <dy>, click [button], or --to <x>,<y>`)}async function _z(e,t){let{name:n,rest:r}=JR(e);return dz(t,n,[`screenshot`,...r],`screenshot`)}async function vz(e,t){let{name:n}=JR(e);return dz(t,n,[`text`],`text`)}function yz(e){let{name:t}=JR(e);return $(`v86 serve is retired.\nUse: computer watch -c v86:${t}\nLive frames go to the overlay, lightbox, and bash rows.\n`)}function bz(e){let{name:t,rest:n}=JR(e),r=YR(t);if(XR(r))return r;let i=n.indexOf(`--send`);if(i!==-1){let e=n.slice(i+1).join(` `).replace(/\\n/gu,`
|
|
3210
3218
|
`);return e?(r.emulator.serial0_send(e),$()):Q(`serial: --send requires text`)}let a=n.indexOf(`--tail`);if(a!==-1){let e=Number.parseInt(n[a+1]??`25`,10);return $(`${r.serial.buffer.split(`
|
|
3211
3219
|
`).slice(-Math.max(1,e)).join(`
|
|
3212
|
-
`)}\n`)}return $(r.serial.buffer?`${r.serial.buffer}\n`:``)}async function
|
|
3220
|
+
`)}\n`)}return $(r.serial.buffer?`${r.serial.buffer}\n`:``)}async function xz(e,t){let{name:n,rest:r}=JR(e),i=YR(n);if(XR(i))return i;let[a,o]=r;if(a!==`save`&&a!==`load`||!o)return Q(`state: expected save|load <file>`);let s=t.fs.resolvePath(t.cwd,o);if(a===`save`){let e=await i.emulator.save_state();return await t.fs.writeFile(s,new Uint8Array(e)),$(`${s} (${e.byteLength} bytes)\n`)}if(!await t.fs.exists(s))return Q(`state: no such file: ${o}`);let c=await t.fs.readFileBuffer(s),l=new ArrayBuffer(c.byteLength);return new Uint8Array(l).set(c),await i.emulator.restore_state(l),$()}async function Sz(e,t){let{name:n,rest:r}=JR(e),i=YR(n);if(XR(i))return i;let a=t.processManager??$R();return r.includes(`--force`)&&a&&i.pid!==null?(a.signal(i.pid,`SIGKILL`),$(`VM '${n}' killed\n`)):(await cz(i,a),$(`VM '${n}' stopped\n`))}const Cz=[`--name`,`--filter`,`--scoop`],wz={state:`inactive`,session:null};function Tz(){return{stdout:`usage: webhook <command> [options]
|
|
3213
3221
|
|
|
3214
3222
|
Commands:
|
|
3215
3223
|
create [--scoop <name>] [--name <name>] [--filter <code>] Create a new webhook endpoint
|
|
@@ -3229,21 +3237,21 @@ Examples:
|
|
|
3229
3237
|
webhook create --scoop slack-relay --name slack --filter "(e) => ({ text: e.body.text, user: e.body.user })"
|
|
3230
3238
|
webhook list
|
|
3231
3239
|
webhook delete abc123
|
|
3232
|
-
`,stderr:``,exitCode:0}}function
|
|
3240
|
+
`,stderr:``,exitCode:0}}function Ez(e){return e().session?.webhookUrl??null}function Dz(e,t,n){return t?ca(t,e):n()?la(self.location.href,e):`(URL unavailable — connect a leader tray)`}function Oz(e){return{stdout:``,stderr:`webhook ${e}: kernel host has not booted yet — try again in a moment\n`,exitCode:1}}async function kz(e){if(e.length!==1)return{stdout:``,stderr:`webhook rotate: takes no arguments
|
|
3233
3241
|
`,exitCode:1};let t=y();if(!t)return{stdout:``,stderr:`webhook rotate: no leader panel connected
|
|
3234
3242
|
`,exitCode:1};try{return await t.call(`tray-webhook-rotate`,void 0),{stdout:`Rotated webhook delivery secret. Old URLs no longer work; run webhook list for replacement URLs.
|
|
3235
3243
|
`,stderr:``,exitCode:0}}catch{return{stdout:``,stderr:`webhook rotate: rotation failed; reconnect the leader and retry
|
|
3236
|
-
`,exitCode:1}}}async function
|
|
3237
|
-
`,exitCode:1};let s=
|
|
3238
|
-
`,stderr:``,exitCode:0};let{trayUrlBase:a,urlResolutionError:o}=
|
|
3244
|
+
`,exitCode:1}}}async function Az(e,t,n){let r=C(e.slice(1),{value:Cz});if(`error`in r)return{stdout:``,stderr:`webhook create: ${r.error}\n`,exitCode:1};let i=r.values.get(`--name`)??`default`,a=r.values.get(`--filter`),o=Ri(r.values.get(`--scoop`),n);if(!t.hasLocalNodeServer()&&a)return{stdout:``,stderr:`webhook create: --filter is not supported in extension mode (CSP forbids dynamic eval) — drop --filter, or use standalone CLI mode
|
|
3245
|
+
`,exitCode:1};let s=Nz(t);if(s)return s;let c=await ey();if(!c)return Oz(`create`);let l=await ny(c,`webhook create`,r.values.get(`--scoop`));if(l)return{stdout:``,stderr:l,exitCode:1};let u=await c.createWebhook(i,o,a),d=Pz(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 jz(e,t){let n=C(e.slice(1),{});if(`error`in n)return{stdout:``,stderr:`webhook list: ${n.error}\n`,exitCode:1};let r=await ey();if(!r)return Oz(`list`);let i=await r.listWebhooks();if(i.length===0)return{stdout:`No active webhooks
|
|
3246
|
+
`,stderr:``,exitCode:0};let{trayUrlBase:a,urlResolutionError:o}=Fz(t);return{stdout:Iz(i.map(e=>({id:e.id,name:e.name,url:Dz(e.id,a,t.hasLocalNodeServer),createdAt:e.createdAt,filter:e.filter,scoop:e.scoop})),a,o,t.hasLocalNodeServer),stderr:``,exitCode:0}}async function Mz(e,t){let n=C(e.slice(1),{});if(`error`in n)return{stdout:``,stderr:`webhook delete: ${n.error}\n`,exitCode:1};let r=n.positionals[0];if(n.positionals.length>1)return{stdout:``,stderr:`webhook delete: requires exactly one ID
|
|
3239
3247
|
`,exitCode:1};if(!r)return{stdout:``,stderr:`webhook delete: requires an ID
|
|
3240
|
-
`,exitCode:1};let i=await ey();if(!i)return
|
|
3241
|
-
`,exitCode:1}}return await i.deleteWebhook(r)?{stdout:`Deleted webhook "${r}"\n`,stderr:``,exitCode:0}:{stdout:``,stderr:`webhook delete: webhook "${r}" not found\n`,exitCode:1}}function
|
|
3242
|
-
`,exitCode:1}}return null}function
|
|
3248
|
+
`,exitCode:1};let i=await ey();if(!i)return Oz(`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
|
|
3249
|
+
`,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 Nz(e){if(e.hasLocalNodeServer())return null;if(!Ez(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}")`)+`
|
|
3250
|
+
`,exitCode:1}}return null}function Pz(e,t){try{return Dz(e,Ez(t.getLeaderStatus),t.hasLocalNodeServer)}catch(e){return`(URL resolution failed: ${e instanceof Error?e.message:String(e)})`}}function Fz(e){try{return{trayUrlBase:Ez(e.getLeaderStatus),urlResolutionError:null}}catch(e){return{trayUrlBase:null,urlResolutionError:e instanceof Error?e.message:String(e)}}}function Iz(e,t,n,r){let i=`Active webhooks:
|
|
3243
3251
|
`;for(let t of e)i+=` ${t.id} ${t.name.padEnd(20)} ${t.url}`,t.scoop&&(i+=` -> ${t.scoop}`),t.filter&&(i+=` [filtered]`),i+=`
|
|
3244
3252
|
`;return n?i+=`\nNote: webhook URL resolution failed (${n}). Try again once the tray is connected.\n`:!r()&&!t&&(i+=`
|
|
3245
3253
|
Note: webhook URLs require a leader tray. Configure one in Settings to expose POST endpoints.
|
|
3246
|
-
`),i}function
|
|
3254
|
+
`),i}function Lz(e={}){let t={hasLocalNodeServer:e.hasLocalNodeServer??(()=>!0),getLeaderStatus:e.getLeaderStatus??(()=>wz)};return S(`webhook`,async(e,n)=>{if(e.length===0)return Tz();let r=e[0];if(w(e,{valueFlags:r===`create`?Cz:void 0}))return Tz();try{switch(r){case`create`:return await Az(e,t,n.env);case`list`:return await jz(e,t);case`delete`:return await Mz(e,t);case`rotate`:return await kz(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 Rz(){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 zz(){return{stdout:`usage: websocat [FLAGS] [OPTIONS] <ws://URL | wss://URL>
|
|
3247
3255
|
|
|
3248
3256
|
Minimal websocat client. Sends stdin lines as WebSocket messages and prints
|
|
3249
3257
|
received messages to stdout. Server mode and advanced specifiers (exec:, tcp:,
|
|
@@ -3285,14 +3293,14 @@ EXAMPLES:
|
|
|
3285
3293
|
echo 'Page.navigate {"url":"https://example.com"}' \\
|
|
3286
3294
|
| websocat -1 --jsonrpc --jsonrpc-omit-jsonrpc \\
|
|
3287
3295
|
ws://127.0.0.1:9222/devtools/page/<id>
|
|
3288
|
-
`,stderr:``,exitCode:0}}const
|
|
3289
|
-
`)}function
|
|
3290
|
-
`,r=e.split(n);return r.length>0&&r[r.length-1]===``&&r.pop(),r}function
|
|
3296
|
+
`,stderr:``,exitCode:0}}const Bz=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 Vz(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 Hz(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 Uz(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 Wz(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 Gz(e,t){return t===`-v`?(e.verbose+=1,!0):t===`-vv`&&(e.verbose+=2,!0)}function Kz(e,t,n,r,i){let a=Vz(t,n,r,e);return a?(i(a.value),{nextIndex:a.next}):{stop:!0}}function qz(e,t,n,r,i,a,o){let s=Vz(t,n,r,e);if(!s)return{stop:!0};let c=Hz(e,s.value,i,o);return c===null?{stop:!0}:(a(c),{nextIndex:s.next})}function Jz(e,t){return t.some(t=>e===t||e.startsWith(`${t}=`))}const Yz=[(e,t,n,r)=>{if(!Jz(r,[`--close-status-code`]))return null;let i=Vz(t,n,`--close-status-code`,e);if(!i)return{stop:!0};let a=Uz(e,i.value);return a===null?{stop:!0}:(e.closeStatus=a,{nextIndex:i.next})},(e,t,n,r)=>Jz(r,[`--close-reason`])?Kz(e,t,n,`--close-reason`,t=>{e.closeReason=t}):null,(e,t,n,r)=>Jz(r,[`-B`,`--buffer-size`])?qz(e,t,n,r===`-B`?`-B`:`--buffer-size`,`--buffer-size`,t=>{e.bufferSize=t}):null,(e,t,n,r)=>Jz(r,[`--max-messages`])?qz(e,t,n,`--max-messages`,`--max-messages`,t=>{e.maxMessages=t}):null,(e,t,n,r)=>Jz(r,[`--protocol`])?Kz(e,t,n,`--protocol`,t=>{e.protocol=t}):null,(e,t,n,r)=>{if(!Jz(r,[`--ping-interval`]))return null;let i=Vz(t,n,`--ping-interval`,e);return i?(e.pingInterval=Number(i.value),{nextIndex:i.next}):{stop:!0}},(e,t,n,r)=>Jz(r,[`--conn-timeout`])?qz(e,t,n,`--conn-timeout`,`--conn-timeout`,t=>{e.connTimeoutMs=Math.round(t*1e3)},`positive seconds`):null,(e,t,n,r)=>Jz(r,[`-H`,`--header`])?Kz(e,t,n,r===`-H`?`-H`:`--header`,t=>{e.customHeaders.push(t)}):null];function Xz(e,t,n,r){for(let i of Yz){let a=i(e,t,n,r);if(a)return a}return null}function Zz(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)
|
|
3297
|
+
`)}function Qz(e){let t=Rz();for(let n=0;n<e.length;n+=1){let r=e[n];if(r===`-h`||r===`--help`)return t.showHelp=!0,t;if(Bz.has(r)||Bz.has(r.split(`=`)[0]))return t.error=`websocat: flag '${r}' is not supported in slicc's minimal client\n`,t;if(Wz(t,r)||Gz(t,r))continue;let i=Xz(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 Zz(t),t}function $z(e,t){if(!e)return[];let n=t?`\0`:`
|
|
3298
|
+
`,r=e.split(n);return r.length>0&&r[r.length-1]===``&&r.pop(),r}function eB(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 tB(e){try{return new TextDecoder(`utf-8`,{fatal:!1}).decode(e)}catch{return t(e)}}function nB(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 rB=1e4;function iB(){let e,t;return{promise:new Promise((n,r)=>{e=n,t=r}),resolve:e,reject:t}}function aB(){let e=!1,t=iB();return{...t,settle:n=>{e||(e=!0,t.resolve(n))}}}function oB(e,t){return e.length?e.join(t)+t:``}function sB(e){return e.length?e.join(`
|
|
3291
3299
|
`)+`
|
|
3292
|
-
`:``}function
|
|
3293
|
-
`,a=
|
|
3294
|
-
`);if(!/^wss?:\/\//i.test(r.url))return
|
|
3295
|
-
`,exitCode:1}}function
|
|
3300
|
+
`:``}function cB(e,t,n){e.quiet||t.push(`websocat: ${n}`)}function lB(e,t){e.verbose<1||(e.customHeaders.length>0&&cB(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&&cB(e,t,`--ping-interval has no effect in browsers (no ping API exposed)`),e.insecure&&cB(e,t,`-k/--insecure has no effect in browsers`))}function uB(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 dB(e,t,n,r){if(n.outLines.length<rB){n.outLines.push(r);return}n.droppedForOverflow===0&&cB(e,t,`output buffer reached ${rB} 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 fB(e,n,r){let{bytes:i,isBinary:a}=nB(r);return i.length>e.bufferSize&&(cB(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):tB(i)}function pB(e,t){return e.maxMessages!==void 0&&t>=e.maxMessages||e.oneMessage}function mB(e,t,n){try{n===void 0?e.close(t):e.close(t,n)}catch{}}function hB(e,t){setTimeout(()=>{mB(t,e.closeStatus??1e3,e.closeReason)},0)}function gB(e,t,n){let r=$z(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=eB(n,i,t.jsonrpcOmit),i+=1),t.binary?e.send(new TextEncoder().encode(r).buffer):e.send(r),a+=1}return a}function _B(e,t,n){!t.oneMessage&&!t.noClose&&(t.exitOnEof||n===0)&&hB(t,e)}async function vB(e,t,n){let r=[];lB(e,r);let i=e.nullTerminated?`\0`:`
|
|
3301
|
+
`,a=uB(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=iB(),u=aB(),d=0,f=!1,p=setTimeout(()=>{f=!0,mB(o,1e3),c||l.reject(Error(`connect timeout`))},e.connTimeoutMs),m=()=>{if(e.noClose){u.settle(d);return}mB(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=fB(e,r,t.data);dB(e,r,s,n)}s.received+=1,pB(e,s.received)&&(s.finishing=!0,m())}},o.onerror=()=>{f||(cB(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&&cB(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:oB(s.outLines,i),stderr:sB(r.concat([`websocat: ${t}`])),exitCode:t===`connect timeout`?124:1}}e.unidirectionalReverse?!e.noClose&&e.exitOnEof&&!e.oneMessage&&hB(e,o):_B(o,e,gB(o,e,t));let h=await u.promise;return s.droppedForOverflow>0&&cB(e,r,`dropped ${s.droppedForOverflow} inbound message(s) due to output buffer cap`),{stdout:oB(s.outLines,i),stderr:sB(r),exitCode:h}}function yB(e){return{stdout:``,stderr:e,exitCode:2}}function bB(e){return e.WebSocketCtor??(typeof WebSocket<`u`?WebSocket:void 0)}async function xB(e,t,n={}){let r=Qz(e);if(r.showHelp)return zz();if(r.error)return yB(r.error);if(!r.url)return yB(`websocat: missing ws:// or wss:// URL (use --help for usage)
|
|
3302
|
+
`);if(!/^wss?:\/\//i.test(r.url))return yB(`websocat: URL must start with ws:// or wss://, got '${r.url}'\n`);let i=bB(n);return i?vB(r,t.stdin,i):{stdout:``,stderr:`websocat: no WebSocket implementation available in this runtime
|
|
3303
|
+
`,exitCode:1}}function SB(){return S(`websocat`,async(e,t)=>xB(e,{stdin:P(t.stdin)}))}function CB(){return S(`__wf_progress`,async()=>({stdout:``,stderr:``,exitCode:0}))}const wB={commands:new Map,collisions:[]};async function TB(e,t){let n=Vn(t);return e.scriptCatalog?e.scriptCatalog.getJshIndex(n):e.fs?Wn(e.fs,n):wB}async function EB(e){return e.scriptCatalog?e.scriptCatalog.getWorkflowCommands():e.fs?ri(e.fs):new Map}function DB(e,t,n,r,i,a,o){if(i.has(e)){let i=[`/usr/bin/${e}`];if((t||r)&&i.push(` (shadowed by built-in ${e})`),t){let e=n?[t,...n.shadowedPaths]:[t];for(let t of e)i.push(` (shadowed ${t})`)}return{lines:i,found:!0}}if(t){let e=[t];if(n)for(let t of n.shadowedPaths)e.push(` (shadowed ${t})`);return r&&e.push(` ${r.path} (workflow, shadowed by .jsh)`),{lines:e,found:!0}}return r?{lines:[`${r.path} (workflow)`],found:!0}:a.has(e)&&!o.has(e)?{lines:[`/usr/bin/${e}`],found:!0}:{lines:[],found:!1}}function OB(e={}){let t=e.scriptCatalog!==void 0||e.fs!==void 0?e:typeof e.walk==`function`&&typeof e.exists==`function`?{fs:e}:{};return S(`which`,async(e,n)=>{if(w(e))return{stdout:`which - locate a command
|
|
3296
3304
|
|
|
3297
3305
|
Usage: which <command> [command...]
|
|
3298
3306
|
|
|
@@ -3303,9 +3311,9 @@ Prints the path of the given command(s).
|
|
|
3303
3311
|
|
|
3304
3312
|
Exit code 0 if all commands found, 1 if any not found.
|
|
3305
3313
|
`,stderr:``,exitCode:0};let r=C(e,{});if(`error`in r)return{stdout:``,stderr:`which: ${r.error}\n`,exitCode:1};if(r.positionals.length===0)return{stdout:``,stderr:`which: missing argument
|
|
3306
|
-
`,exitCode:1};let i=n.getRegisteredCommands?.()??[],a=new Set(i),o=await
|
|
3314
|
+
`,exitCode:1};let i=n.getRegisteredCommands?.()??[],a=new Set(i),o=await TB(t,n.env.get(`PATH`)),s=o.commands,c=new Map(o.collisions.map(e=>[e.name,e])),l=await EB(t),u=typeof t.getStaticBuiltins==`function`?new Set(t.getStaticBuiltins()):a,d=new Set(t.getScriptRegisteredNames?.()??[]),f=[],p=!0;for(let e of r.positionals){let t=s.get(e),n=l.get(e),r=DB(e,t,c.get(e),n,u,a,d);f.push(...r.lines),r.found||(p=!1)}return{stdout:f.length>0?f.join(`
|
|
3307
3315
|
`)+`
|
|
3308
|
-
`:``,stderr:``,exitCode:+!p}})}const
|
|
3316
|
+
`:``,stderr:``,exitCode:+!p}})}const kB=`__slicc_workflows`,AB=String.raw`
|
|
3309
3317
|
class WorkflowError extends Error {}
|
|
3310
3318
|
class WorkflowDeterminismError extends WorkflowError {}
|
|
3311
3319
|
class WorkflowAgentCapError extends WorkflowError {}
|
|
@@ -3418,40 +3426,40 @@ function log(message) {
|
|
|
3418
3426
|
}
|
|
3419
3427
|
const budget = { total: (__WF.budget == null ? null : __WF.budget), spent() { return 0; }, remaining() { return this.total == null ? Infinity : Math.max(0, this.total - this.spent()); } };
|
|
3420
3428
|
function workflow() { throw new WorkflowNestingUnsupportedError('nested workflow() unsupported in SP1'); }
|
|
3421
|
-
`;function
|
|
3429
|
+
`;function jB(){return`WF_RESULT_${globalThis.crypto?.randomUUID?.()??`${Date.now().toString(36)}${Math.random().toString(36).slice(2)}`}`}function MB(e){let t=IB(e);return t===null?{name:null,description:null}:{name:LB(t,`name`),description:LB(t,`description`)}}function NB(e){return e.replace(/\bexport\s+(const|let|var|function|async\s+function|class)\b/g,`$1`)}function PB(e){return`const __emit = console.log.bind(console);
|
|
3422
3430
|
const __stringify = JSON.stringify.bind(JSON);
|
|
3423
|
-
const __WF = ${JSON.stringify(e.config)};\n${e.prelude}\nconst __r = await (async () => {\n${
|
|
3431
|
+
const __WF = ${JSON.stringify(e.config)};\n${e.prelude}\nconst __r = await (async () => {\n${NB(e.body)}\n})();\n__emit(${JSON.stringify(e.sentinel)} + __stringify(__r ?? null));\n`}function FB(e,t){let n=e.split(`
|
|
3424
3432
|
`);for(let e=n.length-1;e>=0;e--)if(n[e].startsWith(t)){let r=[...n.slice(0,e),...n.slice(e+1)].join(`
|
|
3425
|
-
`).replace(/\n+$/,``);try{return{result:JSON.parse(n[e].slice(t.length)),log:r,hadResult:!0}}catch{return{result:null,log:r,hadResult:!0}}}return{result:null,log:e.replace(/\n+$/,``),hadResult:!1}}function
|
|
3433
|
+
`).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 IB(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 LB(e,t){let n=RegExp(`\\b${t}\\s*:\\s*(['"\\\`])((?:\\\\.|(?!\\1).)*)\\1`).exec(e);return n?n[2]:null}const RB=e(`workflow-command`),zB=`usage: workflow run <file.js> [--args <json>] [--budget <n>] [--concurrency <n>] [--wait]
|
|
3426
3434
|
workflow run --script '<inline js>' [...]
|
|
3427
3435
|
workflow list
|
|
3428
3436
|
workflow status <runId>
|
|
3429
3437
|
workflow stop <runId>
|
|
3430
3438
|
workflow save <runId> <name> [--force]
|
|
3431
3439
|
Runs a Claude-Code-format dynamic workflow. Default is non-blocking (returns a run id);
|
|
3432
|
-
pass --wait to block and print the full result.`,
|
|
3433
|
-
`,stderr:``,exitCode:0};if(t[0]===`list`||t[0]===`status`||t[0]===`stop`)return
|
|
3440
|
+
pass --wait to block and print the full result.`,BB=new Set([`list`,`status`,`stop`,`save`]);function VB(){return globalThis[kB]}function HB(){let e=globalThis.navigator?.hardwareConcurrency??8;return Math.min(16,Math.max(8,e*4))}function UB(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 WB(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=HB(),n={budget:null,cap:Math.min(8,t)};for(let r=1;r<e.length;r++){let i=UB(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 GB(e={}){return S(`workflow`,async(t,n)=>{if(BB.has(t[0])&&w(t.slice(1)))return{stdout:zB+`
|
|
3441
|
+
`,stderr:``,exitCode:0};if(t[0]===`list`||t[0]===`status`||t[0]===`stop`)return ZB(t,n);if(t[0]===`save`)return XB(t,n,e);let r=WB(t);if(r.help)return{stdout:zB+`
|
|
3434
3442
|
`,stderr:``,exitCode:0};if(r.error)return{stdout:``,stderr:r.error+`
|
|
3435
|
-
`,exitCode:1};let i,a;if(r.script!==void 0)i=r.script,a=`<workflow>`;else{let e=n.fs.resolvePath(n.cwd,r.file);if(!await n.fs.exists(e))return{stdout:``,stderr:`workflow: file not found: ${r.file}\n`,exitCode:1};i=await n.fs.readFile(e),a=r.file}let o=
|
|
3436
|
-
`,exitCode:1};let s=
|
|
3437
|
-
`,exitCode:1};let n=e.options.getParentJid?.(),{runId:r}=await t.start({code:e.code,source:e.source,name:e.name,filename:e.filename,parentJid:n,ctx:e.ctx,sentinel:e.sentinel,runId:e.runId});return{stdout:`▶ workflow '${e.name}' started (run ${r}). Watch: workflow status ${r}\n`,stderr:``,exitCode:0}}const
|
|
3438
|
-
`,exitCode:1};if(!
|
|
3443
|
+
`,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=MB(i);if(!o.name)return{stdout:``,stderr:`workflow: script must define a meta block with a name (description optional)
|
|
3444
|
+
`,exitCode:1};let s=jB().slice(10,22),c=`/shared/workflow-runs/${s}/scratch/`;await n.fs.mkdir(c,{recursive:!0});let l=jB(),u=PB({prelude:AB,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?KB(u,a,l,o,n):qB({code:u,source:i,name:o.name,filename:a,sentinel:l,runId:s,ctx:n,options:e})})}async function KB(e,t,n,r,i){let a;try{a=await Hr(e,[`workflow`,t],i,void 0,{filename:t})}catch(e){return RB.error(`workflow run failed`,e),{stdout:``,stderr:`workflow: ${e instanceof Error?e.message:String(e)}\n`,exitCode:1}}return QB(r,a,n)}async function qB(e){let t=VB();if(!t)return{stdout:``,stderr:`workflow: run manager not available
|
|
3445
|
+
`,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 JB=/^[a-z0-9][a-z0-9-]*$/,YB=`/workspace/.workflows`;async function XB(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]
|
|
3446
|
+
`,exitCode:1};if(!JB.test(o))return{stdout:``,stderr:`workflow: invalid name '${o}' (use [a-z0-9][a-z0-9-]*)\n`,exitCode:1};let c=VB()?.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=`${YB}/${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(YB,{recursive:!0}),await t.fs.writeFile(l,c.source);try{await n.syncScriptCommands?.()}catch(e){RB.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 ZB(e,t){let n=VB();if(e[0]===`list`){if(!n)return{stdout:``,stderr:`workflow: run manager not available
|
|
3439
3447
|
`,exitCode:1};let e=n.listRuns().map(e=>`${e.id} ${e.status.padEnd(7)} ${e.agentsDone}/${e.agentsStarted} ${e.name??``}`);return{stdout:(e.length?e.join(`
|
|
3440
3448
|
`):`(no runs)`)+`
|
|
3441
3449
|
`,stderr:``,exitCode:0}}let r=e[1],i=n?.getRun(r??``);if(!i)return{stdout:``,stderr:`workflow: no run '${r}'\n`,exitCode:1};if(e[0]===`status`)return{stdout:[`run ${i.id} (${i.name??`unnamed`}) status=${i.status}`,`agents ${i.agentsDone}/${i.agentsStarted} phase=${i.currentPhase??`-`}`,i.resultPath?`result: ${i.resultPath}`:``,i.preview?`preview: ${i.preview}`:``,i.error?`error: ${i.error}`:``].filter(Boolean).join(`
|
|
3442
3450
|
`)+`
|
|
3443
|
-
`,stderr:``,exitCode:0};if(i.pid==null)return{stdout:`workflow: run ${i.id} has not started a realm process yet (nothing to stop)\n`,stderr:``,exitCode:0};if(i.status!==`running`&&i.status!==`paused`)return{stdout:`workflow: run ${i.id} already ${i.status}\n`,stderr:``,exitCode:0};let a=await t.exec?.(`kill`,{cwd:t.cwd,args:[`-KILL`,String(i.pid)]});return a&&a.exitCode!==0?{stdout:``,stderr:a.stderr||`workflow: kill failed (exit ${a.exitCode})\n`,exitCode:a.exitCode}:{stdout:`stopped run ${i.id} (pid ${i.pid})\n`,stderr:``,exitCode:0}}function
|
|
3451
|
+
`,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 QB(e,t,n){let{result:r,log:i,hadResult:a}=FB(t.stdout,n),o=e.name?`workflow: ${e.name}${e.description?` — `+e.description:``}\n`:``,s=i?$B(i)+`
|
|
3444
3452
|
`:``;return t.exitCode!==0||!a?{stdout:o+s,stderr:t.stderr||(a?``:`workflow: script produced no result
|
|
3445
3453
|
`),exitCode:t.exitCode||1}:{stdout:o+s+(typeof r==`string`?r:JSON.stringify(r))+`
|
|
3446
|
-
`,stderr:t.stderr,exitCode:0}}function
|
|
3454
|
+
`,stderr:t.stderr,exitCode:0}}function $B(e){return e.split(`
|
|
3447
3455
|
`).map(e=>e.replace(/^WFPHASE/,`▸ `).replace(/^WFLOG/,`· `)).join(`
|
|
3448
|
-
`)}function
|
|
3456
|
+
`)}function eV(e){return{stdout:``,stderr:`xxd: ${e}\n`,exitCode:1}}function tV(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 nV(e,t){let n=e.toString(16).padStart(2,`0`);return t?n.toUpperCase():n}function rV(e){let t=``;for(let n=0;n<e.length;n++)t+=String.fromCharCode(e[n]);return t}function iV(e){return e.replace(/[^0-9a-zA-Z]/g,`_`)}function aV(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?nV(e[o+i],r):` `;let u=``;for(let t=o;t<s;t++)u+=e[t]>=32&&e[t]<=126?String.fromCharCode(e[t]):`.`;a.push(`${c}: ${l} ${u}`)}return a.length?a.join(`
|
|
3449
3457
|
`)+`
|
|
3450
|
-
`:``}function
|
|
3451
|
-
`}return r}function
|
|
3458
|
+
`:``}function oV(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+=nV(e[i+r],n);r+=a+`
|
|
3459
|
+
`}return r}function sV(e,t,n,r){let i=Array.from(e,e=>`0x${nV(e,n)}`),a=[];for(let e=0;e<i.length;e+=t)a.push(` `+i.slice(e,e+t).join(`, `));let o=a.join(`,
|
|
3452
3460
|
`);return r===null?i.length?o+`
|
|
3453
|
-
`:``:`unsigned char ${r}[] = {\n${o}\n};\nunsigned int ${r}_len = ${e.length};\n`}function
|
|
3454
|
-
`)){let e=r.replace(/\r$/,``),i=e.indexOf(`:`);if(i<0)continue;let a=parseInt(e.slice(0,i).trim(),16);if(Number.isNaN(a))continue;let o=e.slice(i+1),s=o.indexOf(` `);s>=0&&(o=o.slice(0,s));let c=o.replace(/[^0-9a-fA-F]/g,``),l=[];for(let e=0;e+1<c.length;e+=2)l.push(parseInt(c.substr(e,2),16));l.length&&(t.push({offset:a,bytes:l}),n=Math.max(n,a+l.length))}if(!t.length)return new Uint8Array;let r=new Uint8Array(n);for(let e of t)for(let t=0;t<e.bytes.length;t++)r[e.offset+t]=e.bytes[t];return r}const
|
|
3461
|
+
`:``:`unsigned char ${r}[] = {\n${o}\n};\nunsigned int ${r}_len = ${e.length};\n`}function cV(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 lV(e){let t=[],n=0;for(let r of e.split(`
|
|
3462
|
+
`)){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 uV={"-u":`upper`,"-p":`plain`,"-ps":`plain`,"-postscript":`plain`,"-i":`include`,"-include":`include`,"-r":`revert`,"-revert":`revert`},dV=[{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 fV(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=uV[r];if(i){t[i]=!0;continue}let a=dV.find(e=>e.exact.includes(r)||e.attached.test(r));if(a){t[a.key]=tV(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 pV(e){return e.includes(`-h`)||e.includes(`--help`)||e.includes(`-help`)}async function mV(e,t,n){if(!n&&t)return e.fs.readFileBuffer(e.fs.resolvePath(e.cwd,t));let r=ei(e.stdin),i=new Uint8Array(r.length);for(let e=0;e<r.length;e++)i[e]=r.charCodeAt(e)&255;return i}function hV(e,t,n,r,i){let a=e.cols&&e.cols>0?e.cols:e.plain?30:e.include?12:16;return e.plain?oV(t,a,e.upper):e.include?sV(t,a,e.upper,i?null:iV(r??``)):aV(t,a,e.group!=null&&e.group>=0?e.group:2,e.upper,n)}function gV(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 _V(){return S(`xxd`,async(e,t)=>{if(pV(e))return{stdout:`usage: xxd [options] [infile [outfile]]
|
|
3455
3463
|
-c cols number of octets per line (default 16; 30 for -p; 12 for -i)
|
|
3456
3464
|
-g bytes number of octets per group (default 2; 0 disables grouping)
|
|
3457
3465
|
-l len stop after len octets
|
|
@@ -3461,8 +3469,8 @@ pass --wait to block and print the full result.`,PB=new Set([`list`,`status`,`st
|
|
|
3461
3469
|
-i output in C include style
|
|
3462
3470
|
-r reverse: convert a hex dump back to binary (-r -p for plain)
|
|
3463
3471
|
-h show this help
|
|
3464
|
-
`,stderr:``,exitCode:0};let n;try{n=
|
|
3465
|
-
`,stderr:``,exitCode:0}}function
|
|
3466
|
-
`,exitCode:1};let i=t.fs.resolvePath(t.cwd,r[0]),a=r.slice(1),o={},s=0;for(let e of a){let r=t.fs.resolvePath(t.cwd,e),i=await t.fs.stat(r),a=(e.startsWith(`/`)?e.slice(1):e.replace(/^\.\//,``))||er(r);if(i.isDirectory&&!n)return{stdout:``,stderr:`zip: ${e} is a directory (use -r)\n`,exitCode:1};s+=await
|
|
3467
|
-
`,exitCode:1};let c=St(o);return await t.fs.writeFile(i,c),{stdout:`created ${i} (${s} file(s))\n`,stderr:``,exitCode:0}})}function hV(e){return{setEnv:e.setEnv,unsetEnv:e.unsetEnv,broker:e.sudoCommand?.broker}}function gV(e){let{fs:t,fetch:n}=e;if(!t||!n)return[];let r={fs:t,fetch:n,scriptCatalog:e.scriptCatalog,syncScriptCommands:e.syncScriptCommands};return[UD(`ipk`,r),UD(`npm`,r),UD(`i`,r),EO(`ipx`,{fs:t,fetch:n}),EO(`npx`,{fs:t,fetch:n}),Zy(`di`,{fs:t,fetch:n}),Zy(`uv`,{fs:t,fetch:n}),KL({fs:t,fetch:n})]}function _V(e={}){let t=[qT({getJshCommands:e.getJshCommands,getWorkflowCommands:e.getWorkflowCommands}),te(),zF(),iF(),ZP(e.browserAPI,e.fs),Ij(e.browserAPI),py(e.browserAPI),JE(e),mV(),SL(),mI(),KF(),$F(),XF(),cv(),dV(),NF(`sqlite3`),NF(`sqllite`),jI(),ZI(),px(),W_(),$A({buildProcessConfig:e.buildProcessConfig}),$A({buildProcessConfig:e.buildProcessConfig},`jsh`),XM(`python3`,{buildProcessConfig:e.buildProcessConfig}),XM(`python`,{buildProcessConfig:e.buildProcessConfig}),...gV(e),...e.fs?[yS({fs:e.fs})]:[],...e.fs?[dA({fs:e.fs})]:[],...e.fetch?[eE({fetch:e.fetch})]:[],oS(),sS(),jz(e.webhook),gB(),fy(e.crontask),vk({fs:e.fs,scriptCatalog:e.scriptCatalog}),nM({fs:e.fs,fetch:e.fetch}),vS(),wF(),Lj(),Rj(`pdftk`),Rj(`pdf`),G_(`biscotto`),G_(`biscotti`),Jj(`pdftoppm`),Jj(`pdftocairo`),Yj(`pdftotext`),Xv(`convert`),Xv(`magick`),SB({fs:e.fs,scriptCatalog:e.scriptCatalog,getStaticBuiltins:e.getStaticBuiltins,getScriptRegisteredNames:e.getScriptRegisteredNames}),tL(),_L(),WE(),GE(),vL(),fA(),eN(),fk(),Rb(),mj(),pj(),lk(),SP(hV(e)),pN({fs:e.fs}),BN(),av(),ov(),sv(`xclip`),sv(`xsel`),zN(),LS(),gg(),_g(),zA(e.fs),et(),ij(),Lg({getParentJid:e.getParentJid}),Kb(),wM({processManager:e.processManager}),sR({processManager:e.processManager}),kO({processManager:e.processManager}),DO({processManager:e.processManager,scriptCatalog:e.scriptCatalog}),...Bg(),uA(),tk(),MR(),EE(),Jx(),JR({processManager:e.processManager}),dv({processManager:e.processManager,browser:e.browserAPI,sudoBroker:e.sudoCommand?.broker}),aS(),Q_({registry:e.cherryRuntimeRegistry}),by(),Dy({fs:e.fs}),Oy({fs:e.fs}),VF(e.sudoCommand),zB({getParentJid:e.getParentJid,syncScriptCommands:e.syncScriptCommands}),_B(),rF()];return e.fs&&(Zj(),t.push(...Mn.map(t=>WT(t,e.browserAPI,e.fs)))),t}let vV=null;function yV(e){vV=e}function bV(e){vV?.(e)}var xV=Et();const SV=Reflect.get(Je,`DefenseInDepthBox`);function CV(e){return(typeof e==`string`?e:e?.encoding)??`utf8`}function wV(e,t){if(typeof e!=`string`)return e;let n=CV(t);if(n===`binary`||n===`latin1`){let t=le(e);if(t)return t}return xV.Buffer.from(e,n)}var TV=class{vfs;registeredCommandsFn=null;listingStats=new Map;listingStatsMax;listingStatsTtlMs;constructor(e,t){this.vfs=e,this.listingStatsMax=Math.max(1,t?.listingStatsMax??2e4),this.listingStatsTtlMs=t?.listingStatsTtlMs??1e3}get listingStatsSize(){return this.listingStats.size}primeListingStats(e,t){let n=Date.now();if(t.length>this.listingStatsMax){this.listingStats.clear();return}this.sweepExpiredListingStats(n),this.listingStats.size+t.length>this.listingStatsMax&&this.listingStats.clear();let r=e===`/`?`/`:`${e}/`;for(let e of t){let t=Ne(e),i=`${r}${e.name}`;this.listingStats.delete(i),t&&this.listingStats.set(i,{stats:t,at:n})}}sweepExpiredListingStats(e){for(let[t,n]of this.listingStats){if(e-n.at<=this.listingStatsTtlMs)break;this.listingStats.delete(t)}}primedStats(e){let t=this.listingStats.get(e);if(t){if(Date.now()-t.at>this.listingStatsTtlMs){this.listingStats.delete(e);return}return t.stats}}dropListingStats(){this.listingStats.clear()}setRegisteredCommandsFn(e){this.registeredCommandsFn=e}getVirtualBinCommands(){return this.registeredCommandsFn?.()??[]}virtualUsrStat(e){if(e===`/usr`||e===`/usr/bin`)return{isFile:!1,isDirectory:!0,isSymbolicLink:!1,mode:493,size:0,mtime:new Date(0)};if(e.startsWith(`/usr/bin/`)){let t=e.slice(9);if(t.length>0&&!t.includes(`/`)&&this.getVirtualBinCommands().includes(t))return{isFile:!0,isDirectory:!1,isSymbolicLink:!1,mode:493,size:0,mtime:new Date(0)}}return null}canWrite(e){let t=this.vfs;return typeof t.canWrite!=`function`||t.canWrite(e)}listMountPoints(){let e=this.vfs;return typeof e.listMountPoints==`function`?e.listMountPoints():[]}trusted(e){let t=SV?.runTrustedAsync;return t?t(e):Promise.resolve().then(e)}async readFile(e,t){return this.trusted(async()=>{let n=b(e),r=await this.vfs.readFile(n,{encoding:`binary`}),i=r instanceof Uint8Array?r:new TextEncoder().encode(r),a=CV(t),o=xV.Buffer.from(i.buffer,i.byteOffset,i.byteLength).toString(a);return a!==`hex`&&a!==`base64`&&g(o,i),o})}async readFileBuffer(e){return this.trusted(async()=>{let t=b(e),n=await this.vfs.readFile(t,{encoding:`binary`});return n instanceof Uint8Array?n:new TextEncoder().encode(n)})}async readFileBytes(e){let t=await this.readFileBuffer(e);return xV.Buffer.from(t.buffer,t.byteOffset,t.byteLength).toString(`latin1`)}async getNativeFile(e){return this.trusted(()=>this.vfs.getNativeFile(b(e)))}async readFileRange(e,t,n){return this.trusted(()=>this.vfs.readFileRange(b(e),t,n))}async writeFile(e,t,n){return this.dropListingStats(),this.trusted(async()=>{let r=b(e);await this.vfs.writeFile(r,wV(t,n))})}async appendFile(e,t,n){return this.dropListingStats(),this.trusted(()=>this.vfs.appendFile(b(e),wV(t,n)))}async exists(e){return this.trusted(async()=>{let t=b(e);return this.virtualUsrStat(t)?!0:this.vfs.exists(t)})}async stat(e){return this.trusted(async()=>{let t=b(e),n=this.virtualUsrStat(t);if(n)return n;let r=this.vfs.statSync(t);if(r)return{isFile:r.type===`file`,isDirectory:r.type===`directory`,isSymbolicLink:!!r.isSymlink,mode:r.mode??(r.type===`directory`?493:420),size:r.size,mtime:new Date(r.mtime),identity:r.identity,dev:r.dev,ino:r.identity===void 0?void 0:r.ino};let i=this.primedStats(t)??await this.vfs.stat(t);return{isFile:i.type===`file`,isDirectory:i.type===`directory`,isSymbolicLink:!!i.isSymlink,mode:i.mode??(i.type===`directory`?493:420),size:i.size,mtime:new Date(i.mtime),identity:i.identity,dev:i.dev,ino:i.identity===void 0?void 0:i.ino}})}async lstat(e){return this.trusted(async()=>{let t=b(e),n=this.virtualUsrStat(t);if(n)return n;let r=this.vfs.lstatSync(t);if(r)return{isFile:r.type===`file`,isDirectory:r.type===`directory`,isSymbolicLink:r.type===`symlink`,mode:r.mode??(r.type===`directory`?493:r.type===`symlink`?511:420),size:r.size,mtime:new Date(r.mtime),identity:r.identity,dev:r.dev,ino:r.identity===void 0?void 0:r.ino};let i=this.primedStats(t)??await this.vfs.lstat(t);return{isFile:i.type===`file`,isDirectory:i.type===`directory`,isSymbolicLink:i.type===`symlink`,mode:i.mode??(i.type===`directory`?493:i.type===`symlink`?511:420),size:i.size,mtime:new Date(i.mtime),identity:i.identity,dev:i.dev,ino:i.identity===void 0?void 0:i.ino}})}async mkdir(e,t){return this.dropListingStats(),this.trusted(async()=>{await this.vfs.mkdir(b(e),t)})}async readdir(e){return this.trusted(async()=>{let t=b(e);if(t===`/usr`)return[`bin`];if(t===`/usr/bin`)return this.getVirtualBinCommands().slice().sort();let n=this.vfs.readDirSync(t);if(n!==null)return n.map(e=>e.name);let r=await this.vfs.readDir(t,{includeStats:!0});return this.primeListingStats(t,r),r.map(e=>e.name)})}async readdirWithFileTypes(e){return this.trusted(async()=>{let t=b(e);if(t===`/usr`)return[{name:`bin`,isFile:!1,isDirectory:!0,isSymbolicLink:!1}];if(t===`/usr/bin`)return this.getVirtualBinCommands().slice().sort().map(e=>({name:e,isFile:!0,isDirectory:!1,isSymbolicLink:!1}));let n=this.vfs.readDirSync(t);if(n!==null)return this.mapFastEntriesToDirents(n);let r=await this.vfs.readDir(t,{includeStats:!0});return this.primeListingStats(t,r),this.mapAsyncEntriesToDirents(r)})}mapFastEntriesToDirents(e){return e.map(e=>this.entryToDirent(e))}mapAsyncEntriesToDirents(e){return e.map(e=>this.entryToDirent(e))}entryToDirent(e){return e.type===`symlink`?{name:e.name,isFile:!1,isDirectory:!1,isSymbolicLink:!0}:{name:e.name,isFile:e.type===`file`,isDirectory:e.type===`directory`,isSymbolicLink:!1}}async rm(e,t){return this.dropListingStats(),this.trusted(async()=>{await this.vfs.rm(b(e),t)})}async cp(e,t,n){return this.dropListingStats(),this.trusted(async()=>{let r=b(e),i=b(t);if((await this.vfs.stat(r)).type===`directory`){if(!n?.recursive)throw new Pe(`EISDIR`,`is a directory`,r);await this.cpDir(r,i)}else await this.vfs.copyFile(r,i)})}async cpDir(e,t){await this.vfs.mkdir(t,{recursive:!0});let n=await this.vfs.readDir(e);for(let r of n){let n=x(e,r.name),i=x(t,r.name);r.type===`directory`?await this.cpDir(n,i):await this.vfs.copyFile(n,i)}}async mv(e,t){return this.dropListingStats(),this.trusted(async()=>{await this.vfs.rename(b(e),b(t))})}async rename(e,t){return this.mv(e,t)}resolvePath(e,t){return t.startsWith(`/`)?b(t):b(x(e,t))}getAllPaths(){return[]}async chmod(e,t){return this.dropListingStats(),this.trusted(()=>this.vfs.chmod(b(e),t))}async symlink(e,t){return this.dropListingStats(),this.trusted(async()=>{await this.vfs.symlink(e,b(t))})}async link(e,t){throw Error(`Hard links not supported in VirtualFS`)}async readlink(e){return this.trusted(async()=>this.vfs.readlink(b(e)))}async realpath(e){return this.trusted(async()=>this.vfs.realpath(b(e)))}async utimes(e,t,n){return this.dropListingStats(),this.trusted(()=>this.vfs.utimes(b(e),t,n))}invalidatePaths(e){this.dropListingStats();let t=this.vfs;t.invalidatePaths&&t.invalidatePaths(e)}async forgetSidecarConsistency(){await this.vfs.forgetSidecarConsistency?.()}};function EV(e){return e&&typeof e.getWatcher==`function`?e.getWatcher?.()??null:e&&typeof e.getUnderlyingFS==`function`?EV(e.getUnderlyingFS?.()):null}async function DV(e){let t=ce(`github`);if(t){if(e?.force){await t.onSilentRenew?.();return}await t.getValidAccessToken?.()}}const OV=e(`almost-bash-shell`),kV=`__SLICC_RUN_PID`,AV=`__SLICC_OUTPUT_TEE__`;function jV(e){let t=e?.get(kV);if(t===void 0)return;let n=Number.parseInt(t,10);return Number.isSafeInteger(n)&&n>0?n:void 0}function MV(e){if(!(kV in e)&&!(AV in e)&&!(`__SLICC_SUDO_REASON`in e)&&!(`__SLICC_PIPESTATUS`in e)&&!(`__SLICC_PIPESTATUS_EX`in e))return{...e};let{[kV]:t,[AV]:n,[$p]:r,[rp]:i,[ip]:a,...o}=e;return o}var NV=class e{options;bash;vfsAdapter;gitCommands;mountCommands;lastEnv;cwd;builtinCommandNames;staticBuiltinNames;allowedCommands;scriptCatalog;initialJshSync=null;ownsScriptCatalog;registeredJshCommands=new Map;registeredWorkflowCommands=new Set;jshSyncInflight=null;jshSyncDirty=!1;pendingCommandGrants=[];pendingSudoBypasses=new Map;pendingEnvWrites=new Map;activeShellPid;progress;activeRunSignal;scriptRun=null;scriptRunsActive=0;registryNames=new Set;outputTees=new Map;nextOutputTeeId=0;resolveJshProcessConfig=e=>this.buildJshProcessConfig(jV(e));static buildAllowedCommandSet(e){return e.sudo?.defaultDisposition===`require-approval`||!e.allowedCommands||e.allowedCommands.includes(`*`)?null:new Set(e.allowedCommands)}static buildInitialEnv(e,t){return{HOME:$f,PATH:Hn,USER:`user`,SHELL:`/bin/bash`,TMPDIR:`/tmp`,PWD:t,...e.env}}buildSupplementalCommands(e,t){return _V({onMediaPreview:async e=>this.renderMediaPreview(e),getJshCommands:()=>this.getJshCommandNames(),getWorkflowCommands:()=>this.getWorkflowCommandNames(),syncScriptCommands:()=>this.syncJshCommands(),getStaticBuiltins:()=>[...this.staticBuiltinNames],getScriptRegisteredNames:()=>[...this.registeredJshCommands.keys(),...this.registeredWorkflowCommands],fs:e.fs,fetch:t,scriptCatalog:this.scriptCatalog,browserAPI:e.browserAPI,webhook:e.webhook,crontask:e.crontask,getParentJid:e.getParentJid,buildProcessConfig:this.resolveJshProcessConfig,processManager:e.processManager,sudoCommand:e.sudo?{broker:e.sudo.broker,persistGrant:async e=>{this.pendingCommandGrants.push(e)},suppressNextGate:e=>this.registerSudoBypass(e)}:void 0,setEnv:(e,t)=>{this.pendingEnvWrites.set(e,t),this.lastEnv[e]=t},unsetEnv:e=>{this.pendingEnvWrites.set(e,null),delete this.lastEnv[e]}})}constructor(t){this.options=t,this.vfsAdapter=new TV(t.fs),this.progress=new hp({scrubLabel:t.scrubProgressLabel}),this.allowedCommands=e.buildAllowedCommandSet(t);let n=t.cwd??`/`,r=e.buildInitialEnv(t,n);this.gitCommands=new Xf({fs:t.fs,authorName:r.GIT_AUTHOR_NAME??`User`,authorEmail:r.GIT_AUTHOR_EMAIL??`user@example.com`,ensureFreshGithubToken:DV}),this.mountCommands=new Cs({fs:t.fs,isScoop:t.isScoop,acquireLocalMountViaToolUI:om});let i=t.jshDiscoveryFs??t.fs,a=t.bshDiscoveryFs??t.fs,o=EV(i)??EV(a);this.scriptCatalog=t.scriptCatalog??new ai({jshFs:i,bshFs:a,watcher:o}),this.ownsScriptCatalog=!t.scriptCatalog,o&&o.watch(`/`,e=>e.endsWith(`.jsh`)||e.endsWith(`.workflow.js`),()=>{this.syncJshCommands().catch(()=>void 0)});let s=this.createGitCustomCommand(),c=h({progress:bp(this.progress)}),l=this.buildSupplementalCommands(t,c),u=[s,this.createMountCustomCommand(),this.createUmountCustomCommand(),eh(t.fs),Zh(t.fs,c,t.browserAPI),...l].filter(e=>this.isCommandAllowed(e.name)),d=[...Xe(),...Ye()],f=this.allowedCommands?d.filter(e=>this.isCommandAllowed(e)):void 0;if(this.bash=new Ze({fs:this.vfsAdapter,cwd:n,env:{},fetch:c,commands:f,customCommands:u,sleep:Vp(this.progress,{isAborted:()=>this.activeRunSignal?.aborted??!1}),executionLimitProfile:t.executionLimitProfile,executionLimits:Qf(t.isScoop?.()??!1,t.executionLimits)}),this.bash.registerTransformPlugin(mm),this.allowedCommands!==null){let e=this.bash;for(let t of Ye())this.isCommandAllowed(t)||e.commands.delete(t)}{let e=this.bash;for(let[t,n]of e.commands)e.commands.set(t,this.wrapCommandForDispatch(n));this.registryNames=new Set(e.commands.keys())}let p=u.map(e=>e.name),m=f??[...Xe(),...Ye()];this.builtinCommandNames=new Set([...m,...p]),this.staticBuiltinNames=new Set(this.builtinCommandNames),this.vfsAdapter.setRegisteredCommandsFn(()=>[...this.builtinCommandNames]),this.lastEnv={...r},this.cwd=n,this.startInitialJshSync()}getBash(){return this.bash}getCwd(){return this.cwd}getScriptCatalog(){return this.scriptCatalog}getEnv(){return{...this.lastEnv}}setMaskedEnvVar(e,t){this.pendingEnvWrites.set(e,t),this.lastEnv[e]=t}applySessionOverrides(e){e.cwd!==void 0&&(this.cwd=e.cwd,this.lastEnv.PWD=e.cwd),e.env&&Object.assign(this.lastEnv,e.env)}async getJshCommandNames(){return[...(await this.getFilteredJshCommands()).keys()]}async syncJshCommands(){return this.jshSyncInflight===null?(this.jshSyncInflight=this.doSyncJshCommands(),this.jshSyncInflight):(this.jshSyncDirty=!0,this.jshSyncInflight)}async executeCommand(e,t,n,r=``,i){let a=this.activeShellPid;n!==void 0&&(this.activeShellPid=n);let o=i?.onOutput?`tee-${this.nextOutputTeeId+=1}`:void 0;o&&i?.onOutput&&this.outputTees.set(o,i.onOutput);try{let a=await this.runCommand(e,t,n,r,o,i?.capturePipeStatus);return{stdout:a.stdout,stderr:a.stderr,exitCode:a.exitCode,...a.pipeStatus===void 0?{}:{pipeStatus:a.pipeStatus}}}finally{this.activeShellPid=a,o&&this.outputTees.delete(o)}}async executeScriptFile(e,t=[]){return zr(e,t,{fs:this.vfsAdapter,cwd:this.cwd,env:new Map(Object.entries(this.lastEnv)),stdin:``,exec:(e,t)=>this.bash.exec(e,{env:t?.env??this.lastEnv,cwd:t?.cwd??this.cwd,...t?.env===void 0?{}:{replaceEnv:!0}})},this.buildJshProcessConfig())}dispose(){this.ownsScriptCatalog&&this.scriptCatalog.dispose()}async renderMediaPreview(e){throw Error(`terminal preview is unavailable in headless mode`)}currentScanRoots(){return Un(this.lastEnv.PATH)}startInitialJshSync(){this.initialJshSync=this.initHomeAndProfile().then(()=>this.syncJshCommands()).catch(()=>void 0).finally(()=>{this.initialJshSync=null})}async initHomeAndProfile(){let e=this.options.fs;try{let t=this.options.env?.HOME??await ep(e);this.lastEnv.HOME=t,this.options.env?.USER||(this.lastEnv.USER=tp(t));let n=`${t.replace(/\/+$/,``)}/.profile`;if(!await e.exists(n).catch(()=>!1))return;let r=await this.bash.exec(`. "$HOME/.profile"`,{env:this.lastEnv,cwd:this.cwd});if(r.env){let{PWD:e,...t}=r.env;this.lastEnv={...t,PWD:this.lastEnv.PWD??this.cwd}}}catch(e){OV.warn(`HOME/profile init failed; continuing with defaults`,e)}}async waitForInitialJshSync(e){let t=this.initialJshSync;if(t===null)return;if(!e){await t;return}if(e.aborted)return;let n;try{await new Promise(r=>{n=()=>r(),e.addEventListener(`abort`,n,{once:!0}),t.then(()=>r(),()=>r())})}finally{n&&e.removeEventListener(`abort`,n)}}async runCommand(e,t,n,r=``,i,a=!1){bV(e.trim().split(/\s+/)[0]||`unknown`),p(),await this.waitForInitialJshSync(t);let o=tm(e),s={env:{...this.lastEnv,...n===void 0?{}:{[kV]:String(n)},...i===void 0?{}:{[AV]:i},...o?{[$p]:o}:{}},cwd:this.cwd,signal:t,...r===``?{}:{stdin:r,stdinKind:`bytes`}},c=this.lastEnv.PATH;this.activeRunSignal=t;let l=this.beginScriptRun(e),u;try{u=await this.bash.exec(lp(e,a),s)}finally{this.activeRunSignal===t&&(this.activeRunSignal=void 0),this.endScriptRun(l)}if(await this.flushPendingCommandGrants(),u=up(u,a),u.env&&(this.lastEnv=MV(u.env)),u.env&&this.lastEnv.PATH!==c&&await this.syncJshCommands().catch(()=>void 0),this.pendingEnvWrites.size>0){for(let[e,t]of this.pendingEnvWrites)t===null?delete this.lastEnv[e]:this.lastEnv[e]=t;this.pendingEnvWrites.clear()}if(u.env?.PWD&&(this.cwd=u.env.PWD),u.exitCode===127){let t=await this.tryJshFallback(e,n);if(t)return this.syncJshCommands().catch(()=>void 0),t}if(u.exitCode!==0&&u.stderr.includes(`Permission denied`)){let{withShebangExecHint:e}=await import(`./shebang-exec-hint-BISPom3l.js`);return dp(await e(u,this.cwd,this.vfsAdapter),u.pipeStatus)}return u}isTransparentGatingEnabled(){let e=this.options.sudo;return!!e&&e.transparentGating!==!1}wrapCommandForDispatch(e){let t=this.wrapCommandForSudo(e),n=e.name===`timeout`?Gp(t,this.progress):qp(t,this.progress),r=()=>this.scriptRun?.stepDone(),i=(e,t)=>this.teeCommandOutput(e,t),a=this.outputTees;return{...n,async execute(e,t){let o=t.env?.get(AV),s=o?a.get(o):void 0;s&&(t.writeStdout=s);try{let r=await n.execute(e,t);return i(t.env,r),r}finally{r()}}}}teeCommandOutput(e,t){let n=e?.get(AV);if(!n)return;let r=this.outputTees.get(n);if(!r)return;let i=[t.stdout,t.stderr].filter(Boolean).join(``);i&&r(i)}beginScriptRun(e){if(this.scriptRunsActive+=1,!this.progress.hasSink())return null;if(this.scriptRunsActive>1)return this.scriptRun?.end(),this.scriptRun=null,null;let t={totalSteps:null};try{t=Ip(this.bash.transform(e).ast,this.registryNames)}catch{t={totalSteps:null}}return this.scriptRun=new Rp(t,this.progress,Lp(e)),this.scriptRun}endScriptRun(e){this.scriptRunsActive=Math.max(0,this.scriptRunsActive-1),e&&(e.end(),this.scriptRun===e&&(this.scriptRun=null))}wrapCommandForSudo(e){if(!this.isTransparentGatingEnabled())return e;let t=(t,n)=>this.gateCommandDispatch(e.name,t,n);return{...e,async execute(n,r){return await t(n,r.env?.get($p))||e.execute(n,r)}}}async gateCommandDispatch(e,t,n){let r=this.options.sudo;if(!r)return null;let i=Yp(e,t);if(this.consumeSudoBypass(i))return null;let a=r.getPolicy();if(!a)return null;let o=await Zp(i,{policy:a,broker:r.broker,persistGrant:async e=>{this.pendingCommandGrants.push(e)},defaultDisposition:r.defaultDisposition,...n?{reason:n}:{}});return o.allowed?null:{stdout:``,stderr:`${o.message}\n`,exitCode:1}}registerSudoBypass(e){let t=e.trim();t&&this.pendingSudoBypasses.set(t,(this.pendingSudoBypasses.get(t)??0)+1)}consumeSudoBypass(e){let t=this.pendingSudoBypasses.get(e);return t?(t===1?this.pendingSudoBypasses.delete(e):this.pendingSudoBypasses.set(e,t-1),!0):!1}async flushPendingCommandGrants(){if(this.pendingCommandGrants.length===0)return;let e=this.pendingCommandGrants;this.pendingCommandGrants=[];for(let t of e)try{await this.persistCommandGrant(t)}catch{}}async persistCommandGrant(e){let t=this.options.sudo?.persistCommandGrant;if(t){await t(e);return}let n=nt(e);if(!n)return;let r=`${it}/granted`,i=this.options.fs,a=``;try{await i.exists(r)&&(a=await i.readFile(r))}catch(e){if(!(e instanceof Pe&&e.code===`ENOENT`))throw e}let o=a&&!a.endsWith(`
|
|
3468
|
-
`)?`${a}\n`:a;await i.writeFile(r,`${o}NOPASSWD Cmnd ${n}\n`)}isCommandAllowed(e){return this.allowedCommands===null||this.allowedCommands.has(e)}async doSyncJshCommands(){try{let e=await this.scriptCatalog.getJshIndex(this.currentScanRoots()),t=e.commands;for(let t of e.collisions)
|
|
3472
|
+
`,stderr:``,exitCode:0};let n;try{n=fV(e)}catch(e){return eV(e.message)}let r=n.positional[0],i=n.positional[1],a=!r||r===`-`,o;try{o=await mV(t,r,a)}catch{return eV(`${r}: No such file or directory`)}if(n.revert){let e=rV(o),r=n.plain?cV(e):lV(e);return i?(await t.fs.writeFile(t.fs.resolvePath(t.cwd,i),r),{stdout:``,stderr:``,exitCode:0}):{stdout:rV(r),stderr:``,exitCode:0}}let{data:s,base:c}=gV(n,o),l=hV(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 vV(e,t,n,r){if((await e.fs.stat(t)).isFile)return r[n]=await e.fs.readFileBuffer(t),1;let i=await e.fs.readdir(t),a=0;for(let o of i){let i=$n(t,o),s=n?`${n}/${o}`:o;a+=await vV(e,i,s,r)}return a}function yV(){return{stdout:`usage: zip [-r] <archive.zip> <path> [path...]
|
|
3473
|
+
`,stderr:``,exitCode:0}}function bV(){return S(`zip`,async(e,t)=>{if(e.length===0||e.includes(`--help`)||e.includes(`-h`))return yV();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
|
|
3474
|
+
`,exitCode:1};let i=t.fs.resolvePath(t.cwd,r[0]),a=r.slice(1),o={},s=0;for(let e of a){let r=t.fs.resolvePath(t.cwd,e),i=await t.fs.stat(r),a=(e.startsWith(`/`)?e.slice(1):e.replace(/^\.\//,``))||er(r);if(i.isDirectory&&!n)return{stdout:``,stderr:`zip: ${e} is a directory (use -r)\n`,exitCode:1};s+=await vV(t,r,a,o)}if(s===0)return{stdout:``,stderr:`zip: nothing to do
|
|
3475
|
+
`,exitCode:1};let c=St(o);return await t.fs.writeFile(i,c),{stdout:`created ${i} (${s} file(s))\n`,stderr:``,exitCode:0}})}function xV(e){return{setEnv:e.setEnv,unsetEnv:e.unsetEnv,broker:e.sudoCommand?.broker}}function SV(e){let{fs:t,fetch:n}=e;if(!t||!n)return[];let r={fs:t,fetch:n,scriptCatalog:e.scriptCatalog,syncScriptCommands:e.syncScriptCommands};return[XD(`ipk`,r),XD(`npm`,r),XD(`i`,r),NO(`ipx`,{fs:t,fetch:n}),NO(`npx`,{fs:t,fetch:n}),Zy(`di`,{fs:t,fetch:n}),Zy(`uv`,{fs:t,fetch:n}),QL({fs:t,fetch:n})]}function CV(e={}){let t=[YT({getJshCommands:e.getJshCommands,getWorkflowCommands:e.getWorkflowCommands}),te(),GF(),uF(),rF(e.browserAPI,e.fs),Uj(e.browserAPI),py(e.browserAPI),tD(e),bV(),OL(),bI(),QF(),aI(),nI(),cv(),_V(),zF(`sqlite3`),zF(`sqllite`),LI(),rL(),px(),W_(),oj({buildProcessConfig:e.buildProcessConfig}),oj({buildProcessConfig:e.buildProcessConfig},`jsh`),rN(`python3`,{buildProcessConfig:e.buildProcessConfig}),rN(`python`,{buildProcessConfig:e.buildProcessConfig}),...SV(e),...e.fs?[yS({fs:e.fs})]:[],...e.fs?[vA({fs:e.fs})]:[],...e.fetch?[sE({fetch:e.fetch})]:[],oS(),sS(),Lz(e.webhook),SB(),fy(e.crontask),Tk({fs:e.fs,scriptCatalog:e.scriptCatalog}),lM({fs:e.fs,fetch:e.fetch}),vS(),AF(),Wj(),Gj(`pdftk`),Gj(`pdf`),G_(`biscotto`),G_(`biscotti`),tM(`pdftoppm`),tM(`pdftocairo`),nM(`pdftotext`),Xv(`convert`),Xv(`magick`),OB({fs:e.fs,scriptCatalog:e.scriptCatalog,getStaticBuiltins:e.getStaticBuiltins,getScriptRegisteredNames:e.getScriptRegisteredNames}),sL(),CL(),ZE(),QE(),wL(),yA(),sN(),yk(),Rb(),xj(),bj(),gk(),OP(xV(e)),bN({fs:e.fs}),KN(),av(),ov(),sv(`xclip`),sv(`xsel`),GN(),LS(),gg(),_g(),KA(e.fs),et(),dj(),Lg({getParentJid:e.getParentJid}),Kb(),jM({processManager:e.processManager}),pR({processManager:e.processManager}),IO({processManager:e.processManager}),PO({processManager:e.processManager,scriptCatalog:e.scriptCatalog}),...Bg(),_A(),ck(),RR(),NE(),Jx(),ez({processManager:e.processManager}),dv({processManager:e.processManager,browser:e.browserAPI,sudoBroker:e.sudoCommand?.broker}),aS(),Q_({registry:e.cherryRuntimeRegistry}),by(),Dy({fs:e.fs}),Oy({fs:e.fs}),qF(e.sudoCommand),GB({getParentJid:e.getParentJid,syncScriptCommands:e.syncScriptCommands}),CB(),lF()];return e.fs&&(iM(),t.push(...Mn.map(t=>KT(t,e.browserAPI,e.fs,{isScoop:e.isScoop})))),t}let wV=null;function TV(e){wV=e}function EV(e){wV?.(e)}var DV=Et();const OV=Reflect.get(Je,`DefenseInDepthBox`);function kV(e){return(typeof e==`string`?e:e?.encoding)??`utf8`}function AV(e,t){if(typeof e!=`string`)return e;let n=kV(t);if(n===`binary`||n===`latin1`){let t=le(e);if(t)return t}return DV.Buffer.from(e,n)}var jV=class{vfs;registeredCommandsFn=null;listingStats=new Map;listingStatsMax;listingStatsTtlMs;constructor(e,t){this.vfs=e,this.listingStatsMax=Math.max(1,t?.listingStatsMax??2e4),this.listingStatsTtlMs=t?.listingStatsTtlMs??1e3}get listingStatsSize(){return this.listingStats.size}primeListingStats(e,t){let n=Date.now();if(t.length>this.listingStatsMax){this.listingStats.clear();return}this.sweepExpiredListingStats(n),this.listingStats.size+t.length>this.listingStatsMax&&this.listingStats.clear();let r=e===`/`?`/`:`${e}/`;for(let e of t){let t=Ne(e),i=`${r}${e.name}`;this.listingStats.delete(i),t&&this.listingStats.set(i,{stats:t,at:n})}}sweepExpiredListingStats(e){for(let[t,n]of this.listingStats){if(e-n.at<=this.listingStatsTtlMs)break;this.listingStats.delete(t)}}primedStats(e){let t=this.listingStats.get(e);if(t){if(Date.now()-t.at>this.listingStatsTtlMs){this.listingStats.delete(e);return}return t.stats}}dropListingStats(){this.listingStats.clear()}setRegisteredCommandsFn(e){this.registeredCommandsFn=e}getVirtualBinCommands(){return this.registeredCommandsFn?.()??[]}virtualUsrStat(e){if(e===`/usr`||e===`/usr/bin`)return{isFile:!1,isDirectory:!0,isSymbolicLink:!1,mode:493,size:0,mtime:new Date(0)};if(e.startsWith(`/usr/bin/`)){let t=e.slice(9);if(t.length>0&&!t.includes(`/`)&&this.getVirtualBinCommands().includes(t))return{isFile:!0,isDirectory:!1,isSymbolicLink:!1,mode:493,size:0,mtime:new Date(0)}}return null}canWrite(e){let t=this.vfs;return typeof t.canWrite!=`function`||t.canWrite(e)}listMountPoints(){let e=this.vfs;return typeof e.listMountPoints==`function`?e.listMountPoints():[]}trusted(e){let t=OV?.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=kV(t),o=DV.Buffer.from(i.buffer,i.byteOffset,i.byteLength).toString(a);return a!==`hex`&&a!==`base64`&&g(o,i),o})}async readFileBuffer(e){return this.trusted(async()=>{let t=b(e),n=await this.vfs.readFile(t,{encoding:`binary`});return n instanceof Uint8Array?n:new TextEncoder().encode(n)})}async readFileBytes(e){let t=await this.readFileBuffer(e);return DV.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,AV(t,n))})}async appendFile(e,t,n){return this.dropListingStats(),this.trusted(()=>this.vfs.appendFile(b(e),AV(t,n)))}async exists(e){return this.trusted(async()=>{let t=b(e);return this.virtualUsrStat(t)?!0:this.vfs.exists(t)})}async stat(e){return this.trusted(async()=>{let t=b(e),n=this.virtualUsrStat(t);if(n)return n;let r=this.vfs.statSync(t);if(r)return{isFile:r.type===`file`,isDirectory:r.type===`directory`,isSymbolicLink:!!r.isSymlink,mode:r.mode??(r.type===`directory`?493:420),size:r.size,mtime:new Date(r.mtime),identity:r.identity,dev:r.dev,ino:r.identity===void 0?void 0:r.ino};let i=this.primedStats(t)??await this.vfs.stat(t);return{isFile:i.type===`file`,isDirectory:i.type===`directory`,isSymbolicLink:!!i.isSymlink,mode:i.mode??(i.type===`directory`?493:420),size:i.size,mtime:new Date(i.mtime),identity:i.identity,dev:i.dev,ino:i.identity===void 0?void 0:i.ino}})}async lstat(e){return this.trusted(async()=>{let t=b(e),n=this.virtualUsrStat(t);if(n)return n;let r=this.vfs.lstatSync(t);if(r)return{isFile:r.type===`file`,isDirectory:r.type===`directory`,isSymbolicLink:r.type===`symlink`,mode:r.mode??(r.type===`directory`?493:r.type===`symlink`?511:420),size:r.size,mtime:new Date(r.mtime),identity:r.identity,dev:r.dev,ino:r.identity===void 0?void 0:r.ino};let i=this.primedStats(t)??await this.vfs.lstat(t);return{isFile:i.type===`file`,isDirectory:i.type===`directory`,isSymbolicLink:i.type===`symlink`,mode:i.mode??(i.type===`directory`?493:i.type===`symlink`?511:420),size:i.size,mtime:new Date(i.mtime),identity:i.identity,dev:i.dev,ino:i.identity===void 0?void 0:i.ino}})}async mkdir(e,t){return this.dropListingStats(),this.trusted(async()=>{await this.vfs.mkdir(b(e),t)})}async readdir(e){return this.trusted(async()=>{let t=b(e);if(t===`/usr`)return[`bin`];if(t===`/usr/bin`)return this.getVirtualBinCommands().slice().sort();let n=this.vfs.readDirSync(t);if(n!==null)return n.map(e=>e.name);let r=await this.vfs.readDir(t,{includeStats:!0});return this.primeListingStats(t,r),r.map(e=>e.name)})}async readdirWithFileTypes(e){return this.trusted(async()=>{let t=b(e);if(t===`/usr`)return[{name:`bin`,isFile:!1,isDirectory:!0,isSymbolicLink:!1}];if(t===`/usr/bin`)return this.getVirtualBinCommands().slice().sort().map(e=>({name:e,isFile:!0,isDirectory:!1,isSymbolicLink:!1}));let n=this.vfs.readDirSync(t);if(n!==null)return this.mapFastEntriesToDirents(n);let r=await this.vfs.readDir(t,{includeStats:!0});return this.primeListingStats(t,r),this.mapAsyncEntriesToDirents(r)})}mapFastEntriesToDirents(e){return e.map(e=>this.entryToDirent(e))}mapAsyncEntriesToDirents(e){return e.map(e=>this.entryToDirent(e))}entryToDirent(e){return e.type===`symlink`?{name:e.name,isFile:!1,isDirectory:!1,isSymbolicLink:!0}:{name:e.name,isFile:e.type===`file`,isDirectory:e.type===`directory`,isSymbolicLink:!1}}async rm(e,t){return this.dropListingStats(),this.trusted(async()=>{await this.vfs.rm(b(e),t)})}async cp(e,t,n){return this.dropListingStats(),this.trusted(async()=>{let r=b(e),i=b(t);if((await this.vfs.stat(r)).type===`directory`){if(!n?.recursive)throw new Pe(`EISDIR`,`is a directory`,r);await this.cpDir(r,i)}else await this.vfs.copyFile(r,i)})}async cpDir(e,t){await this.vfs.mkdir(t,{recursive:!0});let n=await this.vfs.readDir(e);for(let r of n){let n=x(e,r.name),i=x(t,r.name);r.type===`directory`?await this.cpDir(n,i):await this.vfs.copyFile(n,i)}}async mv(e,t){return this.dropListingStats(),this.trusted(async()=>{await this.vfs.rename(b(e),b(t))})}async rename(e,t){return this.mv(e,t)}resolvePath(e,t){return t.startsWith(`/`)?b(t):b(x(e,t))}getAllPaths(){return[]}async chmod(e,t){return this.dropListingStats(),this.trusted(()=>this.vfs.chmod(b(e),t))}async symlink(e,t){return this.dropListingStats(),this.trusted(async()=>{await this.vfs.symlink(e,b(t))})}async link(e,t){throw Error(`Hard links not supported in VirtualFS`)}async readlink(e){return this.trusted(async()=>this.vfs.readlink(b(e)))}async realpath(e){return this.trusted(async()=>this.vfs.realpath(b(e)))}async utimes(e,t,n){return this.dropListingStats(),this.trusted(()=>this.vfs.utimes(b(e),t,n))}invalidatePaths(e){this.dropListingStats();let t=this.vfs;t.invalidatePaths&&t.invalidatePaths(e)}async forgetSidecarConsistency(){await this.vfs.forgetSidecarConsistency?.()}};function MV(e){return e&&typeof e.getWatcher==`function`?e.getWatcher?.()??null:e&&typeof e.getUnderlyingFS==`function`?MV(e.getUnderlyingFS?.()):null}async function NV(e){let t=ce(`github`);if(t){if(e?.force){await t.onSilentRenew?.();return}await t.getValidAccessToken?.()}}const PV=e(`almost-bash-shell`),FV=`__SLICC_RUN_PID`,IV=`__SLICC_OUTPUT_TEE__`;function LV(e){let t=e?.get(FV);if(t===void 0)return;let n=Number.parseInt(t,10);return Number.isSafeInteger(n)&&n>0?n:void 0}function RV(e){if(!(FV in e)&&!(IV in e)&&!(`__SLICC_SUDO_REASON`in e)&&!(`__SLICC_PIPESTATUS`in e)&&!(`__SLICC_PIPESTATUS_EX`in e))return{...e};let{[FV]:t,[IV]:n,[$p]:r,[rp]:i,[ip]:a,...o}=e;return o}var zV=class e{options;bash;vfsAdapter;gitCommands;mountCommands;lastEnv;cwd;builtinCommandNames;staticBuiltinNames;allowedCommands;scriptCatalog;initialJshSync=null;ownsScriptCatalog;registeredJshCommands=new Map;registeredWorkflowCommands=new Set;jshSyncInflight=null;jshSyncDirty=!1;pendingCommandGrants=[];pendingSudoBypasses=new Map;pendingEnvWrites=new Map;activeShellPid;progress;activeRunSignal;scriptRun=null;scriptRunsActive=0;registryNames=new Set;outputTees=new Map;nextOutputTeeId=0;resolveJshProcessConfig=e=>this.buildJshProcessConfig(LV(e));static buildAllowedCommandSet(e){return e.sudo?.defaultDisposition===`require-approval`||!e.allowedCommands||e.allowedCommands.includes(`*`)?null:new Set(e.allowedCommands)}static buildInitialEnv(e,t){return{HOME:$f,PATH:Hn,USER:`user`,SHELL:`/bin/bash`,TMPDIR:`/tmp`,PWD:t,...e.env}}buildSupplementalCommands(e,t){return CV({onMediaPreview:async e=>this.renderMediaPreview(e),getJshCommands:()=>this.getJshCommandNames(),getWorkflowCommands:()=>this.getWorkflowCommandNames(),syncScriptCommands:()=>this.syncJshCommands(),getStaticBuiltins:()=>[...this.staticBuiltinNames],getScriptRegisteredNames:()=>[...this.registeredJshCommands.keys(),...this.registeredWorkflowCommands],fs:e.fs,fetch:t,scriptCatalog:this.scriptCatalog,browserAPI:e.browserAPI,webhook:e.webhook,crontask:e.crontask,getParentJid:e.getParentJid,isScoop:e.isScoop,buildProcessConfig:this.resolveJshProcessConfig,processManager:e.processManager,sudoCommand:e.sudo?{broker:e.sudo.broker,persistGrant:async e=>{this.pendingCommandGrants.push(e)},suppressNextGate:e=>this.registerSudoBypass(e)}:void 0,setEnv:(e,t)=>{this.pendingEnvWrites.set(e,t),this.lastEnv[e]=t},unsetEnv:e=>{this.pendingEnvWrites.set(e,null),delete this.lastEnv[e]}})}constructor(t){this.options=t,this.vfsAdapter=new jV(t.fs),this.progress=new hp({scrubLabel:t.scrubProgressLabel}),this.allowedCommands=e.buildAllowedCommandSet(t);let n=t.cwd??`/`,r=e.buildInitialEnv(t,n);this.gitCommands=new Xf({fs:t.fs,authorName:r.GIT_AUTHOR_NAME??`User`,authorEmail:r.GIT_AUTHOR_EMAIL??`user@example.com`,ensureFreshGithubToken:NV}),this.mountCommands=new Ss({fs:t.fs,isScoop:t.isScoop,acquireLocalMountViaToolUI:om});let i=t.jshDiscoveryFs??t.fs,a=t.bshDiscoveryFs??t.fs,o=MV(i)??MV(a);this.scriptCatalog=t.scriptCatalog??new ai({jshFs:i,bshFs:a,watcher:o}),this.ownsScriptCatalog=!t.scriptCatalog,o&&o.watch(`/`,e=>e.endsWith(`.jsh`)||e.endsWith(`.workflow.js`),()=>{this.syncJshCommands().catch(()=>void 0)});let s=this.createGitCustomCommand(),c=h({progress:bp(this.progress)}),l=this.buildSupplementalCommands(t,c),u=[s,this.createMountCustomCommand(),this.createUmountCustomCommand(),eh(t.fs),Zh(t.fs,c,t.browserAPI),...l].filter(e=>this.isCommandAllowed(e.name)),d=[...Xe(),...Ye()],f=this.allowedCommands?d.filter(e=>this.isCommandAllowed(e)):void 0;if(this.bash=new Ze({fs:this.vfsAdapter,cwd:n,env:{},fetch:c,commands:f,customCommands:u,sleep:Vp(this.progress,{isAborted:()=>this.activeRunSignal?.aborted??!1}),executionLimitProfile:t.executionLimitProfile,executionLimits:Qf(t.isScoop?.()??!1,t.executionLimits)}),this.bash.registerTransformPlugin(mm),this.allowedCommands!==null){let e=this.bash;for(let t of Ye())this.isCommandAllowed(t)||e.commands.delete(t)}{let e=this.bash;for(let[t,n]of e.commands)e.commands.set(t,this.wrapCommandForDispatch(n));this.registryNames=new Set(e.commands.keys())}let p=u.map(e=>e.name),m=f??[...Xe(),...Ye()];this.builtinCommandNames=new Set([...m,...p]),this.staticBuiltinNames=new Set(this.builtinCommandNames),this.vfsAdapter.setRegisteredCommandsFn(()=>[...this.builtinCommandNames]),this.lastEnv={...r},this.cwd=n,this.startInitialJshSync()}getBash(){return this.bash}getCwd(){return this.cwd}getScriptCatalog(){return this.scriptCatalog}getEnv(){return{...this.lastEnv}}setMaskedEnvVar(e,t){this.pendingEnvWrites.set(e,t),this.lastEnv[e]=t}applySessionOverrides(e){e.cwd!==void 0&&(this.cwd=e.cwd,this.lastEnv.PWD=e.cwd),e.env&&Object.assign(this.lastEnv,e.env)}async getJshCommandNames(){return[...(await this.getFilteredJshCommands()).keys()]}async syncJshCommands(){return this.jshSyncInflight===null?(this.jshSyncInflight=this.doSyncJshCommands(),this.jshSyncInflight):(this.jshSyncDirty=!0,this.jshSyncInflight)}async executeCommand(e,t,n,r=``,i){let a=this.activeShellPid;n!==void 0&&(this.activeShellPid=n);let o=i?.onOutput?`tee-${this.nextOutputTeeId+=1}`:void 0;o&&i?.onOutput&&this.outputTees.set(o,i.onOutput);try{let a=await this.runCommand(e,t,n,r,o,i?.capturePipeStatus);return{stdout:a.stdout,stderr:a.stderr,exitCode:a.exitCode,...a.pipeStatus===void 0?{}:{pipeStatus:a.pipeStatus}}}finally{this.activeShellPid=a,o&&this.outputTees.delete(o)}}async executeScriptFile(e,t=[]){return zr(e,t,{fs:this.vfsAdapter,cwd:this.cwd,env:new Map(Object.entries(this.lastEnv)),stdin:``,exec:(e,t)=>this.bash.exec(e,{env:t?.env??this.lastEnv,cwd:t?.cwd??this.cwd,...t?.env===void 0?{}:{replaceEnv:!0}})},this.buildJshProcessConfig())}dispose(){this.ownsScriptCatalog&&this.scriptCatalog.dispose()}async renderMediaPreview(e){throw Error(`terminal preview is unavailable in headless mode`)}currentScanRoots(){return Un(this.lastEnv.PATH)}startInitialJshSync(){this.initialJshSync=this.initHomeAndProfile().then(()=>this.syncJshCommands()).catch(()=>void 0).finally(()=>{this.initialJshSync=null})}async initHomeAndProfile(){let e=this.options.fs;try{let t=this.options.env?.HOME??await ep(e);this.lastEnv.HOME=t,this.options.env?.USER||(this.lastEnv.USER=tp(t));let n=`${t.replace(/\/+$/,``)}/.profile`;if(!await e.exists(n).catch(()=>!1))return;let r=await this.bash.exec(`. "$HOME/.profile"`,{env:this.lastEnv,cwd:this.cwd});if(r.env){let{PWD:e,...t}=r.env;this.lastEnv={...t,PWD:this.lastEnv.PWD??this.cwd}}}catch(e){PV.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){EV(e.trim().split(/\s+/)[0]||`unknown`),p(),await this.waitForInitialJshSync(t);let o=tm(e),s={env:{...this.lastEnv,...n===void 0?{}:{[FV]:String(n)},...i===void 0?{}:{[IV]:i},...o?{[$p]:o}:{}},cwd:this.cwd,signal:t,...r===``?{}:{stdin:r,stdinKind:`bytes`}},c=this.lastEnv.PATH;this.activeRunSignal=t;let l=this.beginScriptRun(e),u;try{u=await this.bash.exec(lp(e,a),s)}finally{this.activeRunSignal===t&&(this.activeRunSignal=void 0),this.endScriptRun(l)}if(await this.flushPendingCommandGrants(),u=up(u,a),u.env&&(this.lastEnv=RV(u.env)),u.env&&this.lastEnv.PATH!==c&&await this.syncJshCommands().catch(()=>void 0),this.pendingEnvWrites.size>0){for(let[e,t]of this.pendingEnvWrites)t===null?delete this.lastEnv[e]:this.lastEnv[e]=t;this.pendingEnvWrites.clear()}if(u.env?.PWD&&(this.cwd=u.env.PWD),u.exitCode===127){let t=await this.tryJshFallback(e,n);if(t)return this.syncJshCommands().catch(()=>void 0),t}if(u.exitCode!==0&&u.stderr.includes(`Permission denied`)){let{withShebangExecHint:e}=await import(`./shebang-exec-hint-BISPom3l.js`);return dp(await e(u,this.cwd,this.vfsAdapter),u.pipeStatus)}return u}isTransparentGatingEnabled(){let e=this.options.sudo;return!!e&&e.transparentGating!==!1}wrapCommandForDispatch(e){let t=this.wrapCommandForSudo(e),n=e.name===`timeout`?Gp(t,this.progress):qp(t,this.progress),r=()=>this.scriptRun?.stepDone(),i=(e,t)=>this.teeCommandOutput(e,t),a=this.outputTees;return{...n,async execute(e,t){let o=t.env?.get(IV),s=o?a.get(o):void 0;s&&(t.writeStdout=s);try{let r=await n.execute(e,t);return i(t.env,r),r}finally{r()}}}}teeCommandOutput(e,t){let n=e?.get(IV);if(!n)return;let r=this.outputTees.get(n);if(!r)return;let i=[t.stdout,t.stderr].filter(Boolean).join(``);i&&r(i)}beginScriptRun(e){if(this.scriptRunsActive+=1,!this.progress.hasSink())return null;if(this.scriptRunsActive>1)return this.scriptRun?.end(),this.scriptRun=null,null;let t={totalSteps:null};try{t=Ip(this.bash.transform(e).ast,this.registryNames)}catch{t={totalSteps:null}}return this.scriptRun=new Rp(t,this.progress,Lp(e)),this.scriptRun}endScriptRun(e){this.scriptRunsActive=Math.max(0,this.scriptRunsActive-1),e&&(e.end(),this.scriptRun===e&&(this.scriptRun=null))}wrapCommandForSudo(e){if(!this.isTransparentGatingEnabled())return e;let t=(t,n)=>this.gateCommandDispatch(e.name,t,n);return{...e,async execute(n,r){return await t(n,r.env?.get($p))||e.execute(n,r)}}}async gateCommandDispatch(e,t,n){let r=this.options.sudo;if(!r)return null;let i=Yp(e,t);if(this.consumeSudoBypass(i))return null;let a=r.getPolicy();if(!a)return null;let o=await Zp(i,{policy:a,broker:r.broker,persistGrant:async e=>{this.pendingCommandGrants.push(e)},defaultDisposition:r.defaultDisposition,...n?{reason:n}:{}});return o.allowed?null:{stdout:``,stderr:`${o.message}\n`,exitCode:1}}registerSudoBypass(e){let t=e.trim();t&&this.pendingSudoBypasses.set(t,(this.pendingSudoBypasses.get(t)??0)+1)}consumeSudoBypass(e){let t=this.pendingSudoBypasses.get(e);return t?(t===1?this.pendingSudoBypasses.delete(e):this.pendingSudoBypasses.set(e,t-1),!0):!1}async flushPendingCommandGrants(){if(this.pendingCommandGrants.length===0)return;let e=this.pendingCommandGrants;this.pendingCommandGrants=[];for(let t of e)try{await this.persistCommandGrant(t)}catch{}}async persistCommandGrant(e){let t=this.options.sudo?.persistCommandGrant;if(t){await t(e);return}let n=nt(e);if(!n)return;let r=`${it}/granted`,i=this.options.fs,a=``;try{await i.exists(r)&&(a=await i.readFile(r))}catch(e){if(!(e instanceof Pe&&e.code===`ENOENT`))throw e}let o=a&&!a.endsWith(`
|
|
3476
|
+
`)?`${a}\n`:a;await i.writeFile(r,`${o}NOPASSWD Cmnd ${n}\n`)}isCommandAllowed(e){return this.allowedCommands===null||this.allowedCommands.has(e)}async doSyncJshCommands(){try{let e=await this.scriptCatalog.getJshIndex(this.currentScanRoots()),t=e.commands;for(let t of e.collisions)PV.warn(`jsh command '${t.name}' is provided by more than one skill; using ${t.winnerPath} (${t.reason}), shadowed ${t.shadowedPaths.join(`, `)}`);let n=await this.getFilteredWorkflowCommands();for(let[e,n]of t)this.isCommandAllowed(e)&&(this.builtinCommandNames.has(e)&&!this.registeredJshCommands.has(e)||this.registeredJshCommands.get(e)!==n&&(this.bash.registerCommand(this.wrapCommandForDispatch(this.makeScriptCommand(e))),this.registeredJshCommands.set(e,n),this.builtinCommandNames.add(e)));for(let e of n.keys())if(!this.registeredWorkflowCommands.has(e)){if(this.registeredJshCommands.has(e)){this.registeredWorkflowCommands.add(e);continue}this.builtinCommandNames.has(e)||(this.bash.registerCommand(this.wrapCommandForDispatch(this.makeScriptCommand(e))),this.registeredWorkflowCommands.add(e),this.builtinCommandNames.add(e))}}finally{this.jshSyncInflight=null,this.jshSyncDirty&&(this.jshSyncDirty=!1,this.syncJshCommands().catch(()=>void 0))}}makeScriptCommand(e){let t=this.scriptCatalog,n=this.options.jshDiscoveryFs??this.options.fs,r=e,i=async(e,i)=>{let a=i.exec??((e,t)=>this.bash.exec(e,{env:t?.env??Object.fromEntries(i.env),cwd:t?.cwd??i.cwd,args:t?.args,...t?.env===void 0?{}:{replaceEnv:!0}})),o=(await t.getJshCommands(this.currentScanRoots())).get(r);if(o){let t;try{let e=await n.readFile(o,{encoding:`utf-8`});t=typeof e==`string`?e:new TextDecoder().decode(e)}catch{return{stdout:``,stderr:`jsh: cannot read script '${o}'\n`,exitCode:127}}return Hr(t,[`node`,o,...e],{fs:i.fs,cwd:i.cwd,env:i.env,stdin:i.stdin,exec:a},this.buildJshProcessConfig(LV(i.env)))}let s=(await t.getWorkflowCommands()).get(r);if(s){let t=ii(s.path,e);return a(t[0],{args:t.slice(1),cwd:i.cwd})}return{stdout:``,stderr:`${r}: command no longer exists\n`,exitCode:127}};return{name:e,trusted:!0,async execute(e,t){try{return await i(e,t)}catch(e){let t=e instanceof Error?e.message:String(e);return{stdout:``,stderr:`${r}: ${t}\n`,exitCode:1}}}}}createGitCustomCommand(){let e=this.gitCommands;return S(`git`,async(t,n)=>{let r=n.cwd,i=await e.execute(t,r,n.env,P(n.stdin));return{stdout:i.stdout,stderr:i.stderr,exitCode:i.exitCode}})}createMountCustomCommand(){let e=this.mountCommands;return S(`mount`,async(t,n)=>{let r=n.cwd,i=await e.execute(t,r,n.env);return{stdout:i.stdout,stderr:i.stderr,exitCode:i.exitCode}})}createUmountCustomCommand(){let e=this.mountCommands;return S(`umount`,async(t,n)=>{let r=n.cwd,i=await e.executeUmount(t,r);return{stdout:i.stdout,stderr:i.stderr,exitCode:i.exitCode}})}async getFilteredJshCommands(){let e=await this.scriptCatalog.getJshCommands(this.currentScanRoots()),t=new Map;for(let[n,r]of e)this.builtinCommandNames.has(n)||this.isCommandAllowed(n)&&t.set(n,r);return t}async getFilteredWorkflowCommands(){let e=await this.scriptCatalog.getWorkflowCommands(),t=new Map;for(let[n,r]of e)this.isCommandAllowed(n)&&t.set(n,r);return t}async getWorkflowCommandNames(){return[...(await this.getFilteredWorkflowCommands()).keys()]}async tryJshFallback(e,t){let n=e.trim(),r=n.indexOf(` `),i=r>=0?n.slice(0,r):n,a=r>=0?n.slice(r+1).trim():``,o=(await this.getFilteredJshCommands()).get(i);if(!o)return null;let s=a?np(a):[],c=this.options.jshDiscoveryFs??this.options.fs,l;try{let e=await c.readFile(o,{encoding:`utf-8`});l=typeof e==`string`?e:new TextDecoder().decode(e)}catch{return{stdout:``,stderr:`jsh: cannot read script '${o}'\n`,exitCode:127,env:this.lastEnv}}let u=[`node`,o,...s],d=await Hr(l,u,{fs:this.vfsAdapter,cwd:this.cwd,env:new Map(Object.entries(this.lastEnv)),stdin:``,exec:(e,t)=>this.bash.exec(e,{env:t?.env??this.lastEnv,cwd:t?.cwd??this.cwd,...t?.env===void 0?{}:{replaceEnv:!0}})},this.buildJshProcessConfig(t));return{stdout:d.stdout,stderr:d.stderr,exitCode:d.exitCode,env:this.lastEnv}}buildJshProcessConfig(e){if(!(!this.options.processManager||!this.options.processOwner))return{processManager:this.options.processManager,owner:this.options.processOwner,getParentPid:()=>e??this.activeShellPid??this.options.getCurrentShellPid?.()}}};export{da as C,bo as S,Fo as _,FB as a,xa as b,mp as c,ps as d,os as f,Io as g,es as h,jB as i,$f as l,ns as m,jV as n,kB as o,rs as p,TV as r,Qp as s,zV as t,ms as u,Eo as v,ba as x,_a as y};
|