sliccy 6.239.1 → 6.240.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (158) hide show
  1. package/dist/ui/.vite/manifest.json +221 -219
  2. package/dist/ui/assets/{account-store-BspEP7gu.js → account-store-C-NiHHQY.js} +1 -1
  3. package/dist/ui/assets/{account-store-BMuQVHFz.js → account-store-CtGPvHvd.js} +1 -1
  4. package/dist/ui/assets/{adobe-Bno0A9Rh.js → adobe-D5hgWlms.js} +1 -1
  5. package/dist/ui/assets/{adobe-lvs94eE-.js → adobe-nBjoxFtq.js} +1 -1
  6. package/dist/ui/assets/{agent-panels-Dw3EUkgf.js → agent-panels-DWqSZGxf.js} +1 -1
  7. package/dist/ui/assets/{almost-bash-shell-headless-DjH45LFx.js → almost-bash-shell-headless-CZbWjwJm.js} +499 -499
  8. package/dist/ui/assets/{apply-layout-OjpkOPJI.js → apply-layout-Bk_e9oqd.js} +1 -1
  9. package/dist/ui/assets/{azure-openai-Dd5EJ5OF.js → azure-openai-BRf15lgF.js} +1 -1
  10. package/dist/ui/assets/{azure-openai-BPfNF8uA.js → azure-openai-CHfa8r_n.js} +1 -1
  11. package/dist/ui/assets/{cdp-C1aEyl98.js → cdp-D5mBrwwS.js} +1 -1
  12. package/dist/ui/assets/{cerebras-CCfRW5qr.js → cerebras-Cw7KXUM3.js} +1 -1
  13. package/dist/ui/assets/{cerebras-BIXXLNra.js → cerebras-Cy2j1Ui_.js} +1 -1
  14. package/dist/ui/assets/{composer-speech-CGejp4Op.js → composer-speech-BWjTBIUx.js} +1 -1
  15. package/dist/ui/assets/{connect-surface-C-YnHz9O.js → connect-surface-CuJ3Reds.js} +1 -1
  16. package/dist/ui/assets/context-compaction-BCsq-2e6.js +58 -0
  17. package/dist/ui/assets/core-BFRZk2b-.js +62 -0
  18. package/dist/ui/assets/{core-C1m4D34S.js → core-EGZ5TU35.js} +1 -1
  19. package/dist/ui/assets/{directed-approval-Dqeeo7Ur.js → directed-approval-CR57DTOL.js} +1 -1
  20. package/dist/ui/assets/{emscripten-vfs-hook-DIUvgf55.js → emscripten-vfs-hook-CpfmtemG.js} +1 -1
  21. package/dist/ui/assets/{frozen-archive-writer-1Sfd3_hn.js → frozen-archive-writer-CQj4KU4Z.js} +1 -1
  22. package/dist/ui/assets/{frozen-archive-writer-BCuzFGRS.js → frozen-archive-writer-Dtee_g3m.js} +1 -1
  23. package/dist/ui/assets/{frozen-session-delete-DknkxXFd.js → frozen-session-delete-B69rr58N.js} +1 -1
  24. package/dist/ui/assets/{frozen-session-identity-pkUWEifZ.js → frozen-session-identity-hKpX_Wns.js} +1 -1
  25. package/dist/ui/assets/{frozen-session-identity-Ba-yRITY.js → frozen-session-identity-vrVfUkEJ.js} +1 -1
  26. package/dist/ui/assets/{gelatiere-unit-BANCZ9x3.js → gelatiere-unit-Ahwb21GE.js} +1 -1
  27. package/dist/ui/assets/{github-DCZKorBz.js → github-COORmPyK.js} +1 -1
  28. package/dist/ui/assets/{github-BlMprkf6.js → github-Cv5SjCCJ.js} +1 -1
  29. package/dist/ui/assets/{github-copilot-D23XZpG6.js → github-copilot-CpHEaEoF.js} +1 -1
  30. package/dist/ui/assets/{github-copilot-C8Hqj_iR.js → github-copilot-DnY7C0vv.js} +1 -1
  31. package/dist/ui/assets/{go-driver-CvHJRpyw.js → go-driver-Bl_pd-vs.js} +1 -1
  32. package/dist/ui/assets/{guest-tool-gate-CXdRgkkb.js → guest-tool-gate-83ZVVYjM.js} +1 -1
  33. package/dist/ui/assets/{hear-BHugiT-P.js → hear-Cg_l3xI4.js} +1 -1
  34. package/dist/ui/assets/icons-BJTFywJo.js +1 -0
  35. package/dist/ui/assets/{idle-compaction-pwltoPDa.js → idle-compaction-DGln8tkz.js} +1 -1
  36. package/dist/ui/assets/{interrupted-work-recovery-DSX617ic.js → interrupted-work-recovery-CWSaMQsO.js} +1 -1
  37. package/dist/ui/assets/{js-realm-worker-CmibdX_h.js → js-realm-worker-CBw_mwZz.js} +2 -2
  38. package/dist/ui/assets/{jsh-executor-DHAF6dFq.js → jsh-executor-CQjOV2Rz.js} +2 -2
  39. package/dist/ui/assets/{kernel-worker-Dd6UT_Hw.js → kernel-worker-bxQFQR0N.js} +78 -78
  40. package/dist/ui/assets/{lick-ws-bridge-LW2pivtS.js → lick-ws-bridge-B8QaH0Pf.js} +1 -1
  41. package/dist/ui/assets/{lick-ws-bridge-B6GPqj60.js → lick-ws-bridge-CDo81_q8.js} +1 -1
  42. package/dist/ui/assets/{live-session-curation-B6nC2IwS.js → live-session-curation-BkxJa78s.js} +1 -1
  43. package/dist/ui/assets/live-session-curation-DmTewcBv.js +186 -0
  44. package/dist/ui/assets/{live-session-snapshot-BhWFvQrZ.js → live-session-snapshot-BlD0vbcV.js} +1 -1
  45. package/dist/ui/assets/{local-llm-_r9oESrG.js → local-llm-C5Mw5oib.js} +1 -1
  46. package/dist/ui/assets/{local-llm-bB4uQj3y.js → local-llm-CjqUAhTS.js} +1 -1
  47. package/dist/ui/assets/main-6hbXaflT.js +22 -0
  48. package/dist/ui/assets/{main-cherry-Cg_eulXT.js → main-cherry-ChIZgtW1.js} +1 -1
  49. package/dist/ui/assets/{mcp-command-Br5ePgQj.js → mcp-command-CZ0dP9jt.js} +9 -9
  50. package/dist/ui/assets/{memory-curation-seam-D74FwxQn.js → memory-curation-seam-CzM3y0O_.js} +1 -1
  51. package/dist/ui/assets/{memory-health-CpD91kc7.js → memory-health-BX2lnaGt.js} +1 -1
  52. package/dist/ui/assets/{memory-write-execute-B7mSsyNT.js → memory-write-execute-CNtHUYEr.js} +1 -1
  53. package/dist/ui/assets/{merge-folded-cost-into-frozen-9g-oWfCg.js → merge-folded-cost-into-frozen-DAqbDB81.js} +1 -1
  54. package/dist/ui/assets/{new-session-BEyoS6w7.js → new-session-DBeXyiOz.js} +2 -2
  55. package/dist/ui/assets/oauth-bootstrap-CbyjrWqJ.js +2 -0
  56. package/dist/ui/assets/{onboarding-orchestrator-CUANwcPE.js → onboarding-orchestrator-8slcbG6R.js} +1 -1
  57. package/dist/ui/assets/{openai-codex-BWzG7p7O.js → openai-codex-C61wrKlC.js} +1 -1
  58. package/dist/ui/assets/{openai-codex-Dqq1RGXY.js → openai-codex-Dj9y9W7z.js} +1 -1
  59. package/dist/ui/assets/{openrouter-CYjM-kZx.js → openrouter-BHpmKURm.js} +1 -1
  60. package/dist/ui/assets/{openrouter-DZ-E1wuB.js → openrouter-fAEMsV54.js} +1 -1
  61. package/dist/ui/assets/{openrouter-free-BOWeJi1P.js → openrouter-free-CJy-TuXT.js} +1 -1
  62. package/dist/ui/assets/{openrouter-free-D9nGhI8x.js → openrouter-free-CiiM1Gjs.js} +1 -1
  63. package/dist/ui/assets/{openrouter-oauth-wf55kglO.js → openrouter-oauth-7nM0b7Jo.js} +1 -1
  64. package/dist/ui/assets/{openrouter-oauth-CtSL7Qxf.js → openrouter-oauth-Cvd_-gjS.js} +1 -1
  65. package/dist/ui/assets/panel-rpc-handlers-DDdB1M8b.js +2 -0
  66. package/dist/ui/assets/{panelize-shell-C04CGO5Z.js → panelize-shell-DpeA6cvD.js} +1 -1
  67. package/dist/ui/assets/{pi-edit-execution-CKBidACs.js → pi-edit-execution-BXlFQhnB.js} +1 -1
  68. package/dist/ui/assets/{process-worker-Qo-KJQnm.js → process-worker-B_jMhtwi.js} +1 -1
  69. package/dist/ui/assets/{provider-B6KB41WB.js → provider-30BKUHu6.js} +1 -1
  70. package/dist/ui/assets/{provider-BvJJikM5.js → provider-jAi7a3_L.js} +1 -1
  71. package/dist/ui/assets/{provider-settings-D5h7Kn8Y.js → provider-settings-D94LxvnC.js} +1 -1
  72. package/dist/ui/assets/provider-store-access-D_a8X9pQ.js +1 -0
  73. package/dist/ui/assets/provider-store-access-GlTLXpic.js +1 -0
  74. package/dist/ui/assets/{providers-H2QVvHIo.js → providers-BzMeirCU.js} +1 -1
  75. package/dist/ui/assets/providers-DPjGqnnZ.js +2 -0
  76. package/dist/ui/assets/{quick-llm-CVspCSPa.js → quick-llm-Ds2TLGFz.js} +1 -1
  77. package/dist/ui/assets/{realm-inprocess-BcXidk7x.js → realm-inprocess-BRdFlTB1.js} +2 -2
  78. package/dist/ui/assets/{realm-unhandled-rejections-C17KMSUA.js → realm-unhandled-rejections-BMZKXRkX.js} +1 -1
  79. package/dist/ui/assets/{realm-unhandled-rejections-C_hJHL3a.js → realm-unhandled-rejections-f3NQhko5.js} +1 -1
  80. package/dist/ui/assets/{recovery-screen-B3EIqd1H.js → recovery-screen-Ar1gewgj.js} +1 -1
  81. package/dist/ui/assets/{remote-terminal-view-B8c0sr0S.js → remote-terminal-view-DzxSx53x.js} +2 -2
  82. package/dist/ui/assets/{restore-D0xn5gYN.js → restore-38QkEUrK.js} +1 -1
  83. package/dist/ui/assets/{run-E8fkhkYA.js → run-0TklT6x-.js} +1 -1
  84. package/dist/ui/assets/{run-x2hyttPz.js → run-BYqCvTd8.js} +2 -2
  85. package/dist/ui/assets/{run-yIEzBr4M.js → run-BnVYcWap.js} +1 -1
  86. package/dist/ui/assets/{run-C3Hy4SBY.js → run-D1iXNNpZ.js} +2 -2
  87. package/dist/ui/assets/{run-DKWaudm_.js → run-DW65sPip.js} +12 -12
  88. package/dist/ui/assets/{session-command-memory-LPNx4Ykm.js → session-command-memory-nk61yZd5.js} +2 -2
  89. package/dist/ui/assets/{session-jsonl-DzjYDmn3.js → session-jsonl-BGYnLhO2.js} +1 -1
  90. package/dist/ui/assets/{session-jsonl-C2urTY7z.js → session-jsonl-DmNevCGc.js} +1 -1
  91. package/dist/ui/assets/{session-search-index-Eq_qfrjB.js → session-search-index-BpfPtbUp.js} +1 -1
  92. package/dist/ui/assets/{setup-feature-flags-remote-Ch1uljUD.js → setup-feature-flags-remote-CfuFdg1B.js} +1 -1
  93. package/dist/ui/assets/{setup-model-catalog-DTQU8cnr.js → setup-model-catalog-o-lxwTfe.js} +1 -1
  94. package/dist/ui/assets/{silent-renew-backoff-ClxUKo41.js → silent-renew-backoff-BsUcHR9C.js} +1 -1
  95. package/dist/ui/assets/slicc-version-KlsjiTIs.js +1 -0
  96. package/dist/ui/assets/{soundscape-DmMhiSiT.js → soundscape-DGsKTL7n.js} +1 -1
  97. package/dist/ui/assets/{speak-B-nz5uMy.js → speak-DQq-78bT.js} +1 -1
  98. package/dist/ui/assets/{sprinkle-manager-I5F18apA.js → sprinkle-manager-D3kZi8c1.js} +1 -1
  99. package/dist/ui/assets/{sprinkle-renderer-BtNj8eVS.js → sprinkle-renderer-BSZ6849V.js} +1 -1
  100. package/dist/ui/assets/{sudo-CR-Y4poZ.js → sudo-Bh0Nyu2S.js} +1 -1
  101. package/dist/ui/assets/{supervisor-rbjp5Jxz.js → supervisor-CgK-g-6U.js} +1 -1
  102. package/dist/ui/assets/{sync-dialog-Cjgp-t5Q.js → sync-dialog-BLnO9spb.js} +1 -1
  103. package/dist/ui/assets/{transformers-env-CCuheXlU.js → transformers-env-CGv03PAS.js} +1 -1
  104. package/dist/ui/assets/{tray-leader-CnIx31Lw.js → tray-leader-ChyMsq5K.js} +1 -1
  105. package/dist/ui/assets/{tray-leave-runtime-D1qkvSFd.js → tray-leave-runtime-uSx_wlpd.js} +1 -1
  106. package/dist/ui/assets/{tray-sidecar-DQO-4oRP.js → tray-sidecar-CEUzqaCB.js} +1 -1
  107. package/dist/ui/assets/{turn-journal-EgGBqAjY.js → turn-journal-CVQtwHPx.js} +1 -1
  108. package/dist/ui/assets/{upgrade-detection-bn5ZPVwB.js → upgrade-detection-CRfiGZtd.js} +1 -1
  109. package/dist/ui/assets/utf16-clip-Dcxt-q1C.js +1 -0
  110. package/dist/ui/assets/{voice-reply-ByGMcwzr.js → voice-reply-CmTXBNIY.js} +1 -1
  111. package/dist/ui/assets/{wasi-runtime-D50sf0fY.js → wasi-runtime-BBxEcrtW.js} +5 -5
  112. package/dist/ui/assets/wc-attach-BMrT2hbz.js +13 -0
  113. package/dist/ui/assets/{wc-browser-D8-89DQs.js → wc-browser-SiC_HbcV.js} +1 -1
  114. package/dist/ui/assets/{wc-computers-BSwZi2VG.js → wc-computers-CbxHjQwk.js} +1 -1
  115. package/dist/ui/assets/{wc-detached-BmB8d_Yi.js → wc-detached-pGIdhxB4.js} +1 -1
  116. package/dist/ui/assets/wc-extension-N1war_PP.js +2 -0
  117. package/dist/ui/assets/wc-follower-CgTZ9JBz.js +17 -0
  118. package/dist/ui/assets/{wc-follower-oauth-Dm8dPxfI.js → wc-follower-oauth-B260JoLu.js} +1 -1
  119. package/dist/ui/assets/{wc-gelatiere-DVODoBJi.js → wc-gelatiere-BlsqWkHN.js} +1 -1
  120. package/dist/ui/assets/wc-live-ZUBUivnE.js +248 -0
  121. package/dist/ui/assets/wc-nav-DdROtTx2.js +2 -0
  122. package/dist/ui/assets/{wc-onboarding-BRP76Hoi.js → wc-onboarding-C30GH-OF.js} +2 -2
  123. package/dist/ui/assets/{wc-permissions-Bah1z66z.js → wc-permissions-CBJYM_hx.js} +2 -2
  124. package/dist/ui/assets/{wc-placeholder-KZttIyjU.js → wc-placeholder-BuoA4euI.js} +3 -3
  125. package/dist/ui/assets/{wc-secret-request-BHU1XUwC.js → wc-secret-request-B01vmSA2.js} +1 -1
  126. package/dist/ui/assets/{wc-settings-DrY7SIeo.js → wc-settings-DGUNaOtw.js} +3 -3
  127. package/dist/ui/assets/{wc-shell-Bt8UzfFa.js → wc-shell-BEqDPo9n.js} +4 -4
  128. package/dist/ui/assets/{wc-shortcut-config-D7PIvlOi.js → wc-shortcut-config-DBFBwkp1.js} +1 -1
  129. package/dist/ui/assets/wc-sprinkles-HVofkAHe.js +2 -0
  130. package/dist/ui/assets/{wc-transcript-export-BPYmvVFN.js → wc-transcript-export-A3G5Te93.js} +2 -2
  131. package/dist/ui/assets/{wc-tray-BO3RL4ye.js → wc-tray-HziHRnx8.js} +4 -4
  132. package/dist/ui/assets/welcome-detection-02ejBHCj.js +1 -0
  133. package/dist/ui/assets/whisper-session-CRowBEuo.js +2 -0
  134. package/dist/ui/assets/{xai-grok-BWDHZnXP.js → xai-grok-Bb6A-2nI.js} +1 -1
  135. package/dist/ui/assets/{xai-grok-DS8TkopE.js → xai-grok-Bi7RG8b2.js} +1 -1
  136. package/dist/ui/index.html +5 -4
  137. package/dist/ui/lucide-icons.js +358 -355
  138. package/dist/ui/packages/webapp/index.html +5 -4
  139. package/package.json +1 -1
  140. package/dist/ui/assets/context-compaction-B8b3xc1C.js +0 -58
  141. package/dist/ui/assets/core-Cx9N3lmn.js +0 -62
  142. package/dist/ui/assets/icons-2DY2vYOc.js +0 -1
  143. package/dist/ui/assets/live-session-curation-Cj_Et3yL.js +0 -186
  144. package/dist/ui/assets/main-DJ1JbcDS.js +0 -22
  145. package/dist/ui/assets/oauth-bootstrap-Cbq8G8pM.js +0 -2
  146. package/dist/ui/assets/panel-rpc-handlers-Xpdj6WbR.js +0 -2
  147. package/dist/ui/assets/provider-store-access-Dfk23puf.js +0 -1
  148. package/dist/ui/assets/provider-store-access-g6Y5oeM5.js +0 -1
  149. package/dist/ui/assets/providers-CrXalGVD.js +0 -2
  150. package/dist/ui/assets/slicc-version-DRlU9ovU.js +0 -1
  151. package/dist/ui/assets/wc-attach-AkwSo7Fl.js +0 -13
  152. package/dist/ui/assets/wc-extension-CaM9V86I.js +0 -2
  153. package/dist/ui/assets/wc-follower-B7ksSDDH.js +0 -17
  154. package/dist/ui/assets/wc-live-DF9dh-BS.js +0 -248
  155. package/dist/ui/assets/wc-nav-CKnUmkye.js +0 -2
  156. package/dist/ui/assets/wc-sprinkles-BWilXn3I.js +0 -2
  157. package/dist/ui/assets/welcome-detection-DrCUfyTd.js +0 -1
  158. package/dist/ui/assets/whisper-session-DL1fUZYq.js +0 -2
@@ -1,96 +1,96 @@
1
- import{t as e}from"./logger-LESFN7Hj.js";import{r as t,t as n}from"./base64-BPBW1Gzr.js";import{n as r}from"./bridge-protocol-31SWTdS5.js";import{a as i,n as a,o,s,t as c}from"./handoff-link-B3It6xQY.js";import{C as l,d as u,f as d,i as f,u as p}from"./account-store-BspEP7gu.js";import{c as m,d as h,n as g,r as _,s as v}from"./proxied-fetch-F-dCBEfh.js";import{t as ee}from"./sha256-DynDhwRL.js";import{t as te}from"./runtime-env-DadgceZk.js";import{t as ne}from"./slugify-BYJ6QVAt.js";import{i as re,n as ie,r as ae,t as oe}from"./host-command-CvUauhDf.js";import{a as se,c as ce,d as y,f as le,i as ue,l as de,m as fe,n as pe,o as me,p as he,r as ge,s as _e,t as ve,u as ye}from"./snapshot-HHgn9isb.js";import{n as be,t as b}from"./panel-rpc-accessor-B4BfPLSo.js";import{a as xe,c as Se,n as Ce,o as we,s as Te,t as Ee}from"./feature-flags-QlgHaQc1.js";import{t as De}from"./providers-H2QVvHIo.js";import{r as Oe}from"./binary-cache-bSOhqXB1.js";import{i as ke,n as Ae,r as je}from"./fetch-body-CuwTaJC_.js";import{s as Me,t as Ne}from"./api-endpoint-D8lUKmPu.js";import{t as Pe}from"./compat-nGhSz-U1.js";import"./core-C1m4D34S.js";import{n as Fe,t as Ie}from"./mime-types-D7IV6i7k.js";import{n as Le,t as Re}from"./float-topology-COIC4j_U.js";import{t as ze}from"./secrets-bridge-client-GOCzDscb.js";import{a as Be,i as Ve,n as He,r as Ue}from"./tool-ui-DRnUkp2g.js";import{a as We,i as Ge,n as x,t as S}from"./path-utils-DNJG-zQf.js";import{n as Ke,r as qe,t as Je}from"./merge-file-core-VJlzucJY.js";import{n as Ye,t as Xe}from"./types-D8gIX-W-.js";import{i as Ze}from"./mount-index-CQfmUPuZ.js";import{a as Qe,i as $e,n as et,o as tt,s as nt,t as rt}from"./signed-fetch-DeDG40wV.js";import{o as it}from"./mount-table-store-DrF_Ifaz.js";import{t as at}from"./remote-cache-UwMD8EkX.js";import{n as ot}from"./fs-D_cFUSir.js";import{a as st}from"./tray-leader-status-CpkFr6n7.js";import{n as ct,t as lt}from"./slicc-version-DRlU9ovU.js";import{a as ut,i as dt,o as ft,r as C,t as pt}from"./browser-CGX7MbCQ.js";import{t as w}from"./subcommand-flags-BZi7j78Q.js";import{n as mt,r as ht,t as T}from"./subcommand-help-CgO7wRS5.js";import{n as gt}from"./cost-command-TMcbUPyN.js";import{d as _t,g as vt,i as yt,n as bt,o as xt}from"./sudoers-BdBYQPUn.js";import{t as St}from"./sudo-refusal-DVwTXFRE.js";import{n as Ct}from"./types-Dj5TU-Qg.js";import{a as wt,c as Tt,i as Et,l as Dt,n as Ot,o as kt,r as At,t as jt}from"./types-JfhqX7lD.js";import{n as E,t as Mt}from"./boundary-DjgipyWT.js";import"./rest-paths-Dia19u9P.js";import{t as Nt}from"./html-B_Hg2WOy.js";import{n as Pt}from"./llm-session-id-CKpY5F_-.js";import{t as Ft}from"./src-CUSndb9K.js";import{i as It,o as Lt}from"./browser-DuyhpHbR.js";import{a as Rt,c as zt,i as Bt,n as Vt,o as Ht,s as Ut,t as Wt}from"./pipe-status-BBrT3VeG.js";import{i as Gt,r as Kt,t as qt}from"./mount-picker-popup-BMils9JY.js";import{t as Jt}from"./buffer-B5d1xHaH.js";import"./buffer-polyfill-BwLbCySD.js";import{A as Yt,B as D,C as Xt,D as O,E as Zt,F as Qt,G as $t,H as k,I as A,J as en,K as tn,L as nn,M as rn,N as an,O as on,P as sn,R as cn,S as ln,T as un,U as dn,V as fn,W as pn,Y as mn,_ as hn,a as gn,b as _n,c as vn,d as yn,f as bn,g as xn,h as Sn,i as Cn,j as wn,k as Tn,l as En,m as Dn,n as On,o as kn,p as j,q as An,r as jn,s as Mn,t as Nn,u as Pn,v as Fn,w as In,x as Ln,y as Rn,z as zn}from"./isomorphic-git-r9mnHMnp.js";import"./global-db-DJXlpNui.js";import{C as Bn,S as M,a as Vn,b as Hn,c as Un,d as Wn,f as Gn,g as Kn,i as qn,l as Jn,m as Yn,n as Xn,o as Zn,p as Qn,r as $n,s as er,t as tr,u as nr,x as rr,y as N}from"./state-Dx_7TiP6.js";import{a as ir,i as ar,r as or,t as sr}from"./git-config-Bdgu8kD2.js";import{a as P,i as cr,r as lr,t as ur}from"./just-bash-compat-B-SPHuh_.js";import{h as dr,i as fr,r as pr}from"./stdio-tty-CipJs8Mm.js";import{i as mr,r as hr}from"./global-prefix-DqCuANmV.js";import{t as gr}from"./wasm-programs-Bd5YaoqY.js";import{a as _r,n as vr,o as yr,r as br,s as xr}from"./jsh-discovery-CnvNKojr.js";import{C as Sr,a as Cr,b as wr,c as Tr,d as Er,f as Dr,h as Or,i as kr,l as Ar,m as jr,n as Mr,o as Nr,p as Pr,r as Fr,s as Ir,t as F,u as Lr,v as Rr,y as zr}from"./shared-D-ZRFYou.js";import{_ as Br,a as Vr,b as Hr,d as Ur,f as Wr,g as Gr,h as Kr,i as qr,l as Jr,m as Yr,p as Xr,r as Zr,s as Qr,u as $r,v as ei,y as ti}from"./require-guards-dUdxJmkR.js";import{_ as ni,a as ri,b as ii,c as ai,d as oi,f as si,g as ci,h as li,l as ui,m as di,n as fi,p as pi,s as mi,t as hi,u as gi,v as _i,x as vi,y as yi}from"./jsh-executor-DHAF6dFq.js";import{n as bi,t as xi}from"./esbuild-wasm-DeTghvWH.js";import{n as Si}from"./wasm-compiler-Ct7QZURL.js";import{a as Ci,o as wi,s as Ti,t as Ei}from"./usb-device-registry-DFzxaOky.js";import{i as Di,r as Oi,t as ki}from"./script-catalog-D5joO5l7.js";import{a as Ai,c as ji,o as Mi,s as Ni,t as Pi}from"./types-Dzr0qYl3.js";import{a as Fi,c as Ii,d as Li,f as Ri,n as zi,r as Bi,u as Vi}from"./github-zip-CMSbKC3q.js";import{i as Hi,t as Ui}from"./github-auth-D-_-pCrt.js";import{a as Wi,i as Gi,o as Ki,r as qi,t as Ji}from"./provenance-DdmsQ3Nr.js";import{a as Yi,c as Xi,i as Zi,n as Qi,o as $i,r as ea,s as ta}from"./github-install-NHKpL-_w.js";import{n as na,t as ra}from"./magick-wasm-BbnwhVj1.js";import{i as ia,n as aa,r as oa,t as sa}from"./pdf-raster-BWk6ezTX.js";import{n as ca}from"./lick-target-env-8JxfVcIV.js";import{t as la}from"./tmpdir-env-ate4iNcK.js";import{n as ua,t as da}from"./keyboard-TcuVIW9F.js";import{n as fa,t as pa}from"./hf-defaults-BwJdGLgk.js";import{t as ma}from"./ffmpeg-wasm-sx-3yVAE.js";import{t as ha}from"./local-llm-_r9oESrG.js";import{i as ga,n as _a,r as va,t as ya}from"./tar-BWIPCxI2.js";import{a as ba,c as xa,i as Sa,o as Ca,r as wa,s as Ta}from"./v86-vm-DCm7zA2r.js";import{n as Ea,r as Da}from"./lick-urls-CgPiVwD-.js";let Oa=null;function ka(e){Oa=e!==null&&Number.isFinite(e)&&e>0?e:null}function Aa(){if(Oa!==null)return Oa;let e=globalThis.performance?.timeOrigin;return typeof e==`number`&&Number.isFinite(e)&&e>0?e:Date.now()}new URL(r).hostname;const ja=/^([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=ja.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 Na(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 Pa(e,t){return e.some(e=>Na(e,t))}const Fa=`slicc-transcript`,Ia=[`canonical-agent-history-unavailable`,`tool-data-may-be-truncated`,`model-metadata-unavailable`,`scoop-history-unavailable`,`attachment-file-missing`,`attachment-association-unavailable`,`complete-snapshot-unavailable`],La=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 Ra(e){return La.has(e.replace(/\/\d+(?=\/|$)/g,`/*`))}var za=class extends Error{code;detail;constructor(e,t){super(t?`${e}: ${t}`:e),this.code=e,this.detail=t,this.name=`TranscriptExportError`}};const Ba=new Set(Ia),Va=/^[0-9a-fA-F]{64}$/,Ha=/^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}/;function I(e){return typeof e==`object`&&!!e&&!Array.isArray(e)}function Ua(e){return typeof e==`string`&&Va.test(e)}function Wa(e){return Ha.test(e)&&Number.isFinite(Date.parse(e))}function Ga(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:Ga(n,t)}:{ok:!0}}function qa(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 Ya(e,t){if(!I(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 Xa(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 Za(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 Qa(e,t){let n=Xa(e,t);if(!n.ok)return n;let r=e.cost;return I(r)?Za(r,`${t}.cost`):{ok:!1,error:`${t}.cost must be a non-null object`}}function $a(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`?Wa(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 eo(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 to(e,t){let n=e.usage;return n===void 0?{ok:!0}:I(n)?Qa(n,`${t}.usage`):{ok:!1,error:`${t}.usage must be a non-null object`}}function no(e,t){if(!I(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=eo(e,t);if(!n.ok)return n}let r=$a(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=qa(i,Ya,`${t}.content`);return a.ok?to(e,t):a}function ro(e,t){if(!I(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)?qa(r,no,`${t}.messages`):{ok:!1,error:`${t}.messages must be an array`}}function io(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 ao(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`}:Ua(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 oo=[`attachment-file-missing`,`attachment-association-unavailable`];function so(e,t){let n=e.path,r=e.sha256,i=e.byteLength;return n===``?r===``?i===0?Ka(e.missingReason,oo,`${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 co(e,t){return e.present?ao(e,t):so(e,t)}function lo(e,t){if(!I(e))return{ok:!1,error:`${t} must be a non-null object`};let n=io(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?co(e,t):r}function uo(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 fo(e,t){if(!I(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 I(r)?uo(r,`${t}.target`):{ok:!1,error:`${t}.target must be a non-null object`}}function po(e,t){return I(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 mo(e,t){return typeof e!=`string`||!Ba.has(e)?{ok:!1,error:`${t} is not a valid completeness reason`}:{ok:!0}}function ho(e){if(!I(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 I(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 go(e){if(!I(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)?qa(e.missing,mo,`session.completeness.missing`):{ok:!1,error:`session.completeness.missing must be an array`}:t}function _o(e){if(!I(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?go(e.completeness):t}function vo(e){if(!I(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(!I(e.redactionCounts))return{ok:!1,error:`privacy.redactionCounts must be a non-null object`};let n=e.redactions;return Array.isArray(n)?qa(n,fo,`privacy.redactions`):{ok:!1,error:`privacy.redactions must be an array`}}function yo(e){let t=e.conversations;if(!Array.isArray(t))return{ok:!1,error:`conversations must be an array`};let n=qa(t,ro,`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=qa(r,po,`delegations`);if(!i.ok)return i;let a=e.attachments;return Array.isArray(a)?qa(a,lo,`attachments`):{ok:!1,error:`attachments must be an array`}}function bo(e){let t=new Set,n=new Set;for(let r of e){if(!I(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(!(!I(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 xo(e){for(let t of e){if(!I(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(!I(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 So(e){let t=[];for(let n of e){if(!I(n))continue;let e=n.content;if(Array.isArray(e))for(let n of e)I(n)&&n.type===`tool-call`&&typeof n.id==`string`&&t.push(n.id)}return t}function Co(e){let t=new Set;for(let n of e){if(!I(n))continue;let e=n.messages;if(Array.isArray(e))for(let n of So(e))t.add(n)}return t}function wo(e,t){for(let n of e){if(!I(n))continue;let e=n.messages;if(Array.isArray(e))for(let n of e){if(!I(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 To(e){return wo(e,Co(e))}function Eo(e,t){for(let n of e){if(!I(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 Do(e,t){for(let n of e){if(!I(n))continue;let e=n.messages;if(Array.isArray(e))for(let n of e){if(!I(n))continue;let e=n.content;if(!Array.isArray(e))continue;let r=Eo(e,t);if(!r.ok)return r}}return{ok:!0}}function Oo(e,t){let n=new Set;for(let e of t)I(e)&&typeof e.id==`string`&&n.add(e.id);return Do(e,n)}function ko(e){let t=new Map;for(let n of e){if(!I(n)||typeof n.id!=`string`)continue;let e=new Set,r=n.messages;if(Array.isArray(r))for(let t of r)I(t)&&typeof t.id==`string`&&e.add(t.id);t.set(n.id,e)}return t}function Ao(e,t){let n=ko(t);for(let t=0;t<e.length;t++){let r=e[t];if(!I(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 jo(e){let t=new Map;for(let n of e){if(!I(n)||typeof n.id!=`string`)continue;let e=Array.isArray(n.messages)?n.messages:[];t.set(n.id,new Set(So(e)))}return t}function Mo(e,t,n){for(let r=0;r<e.length;r++){let i=e[r];if(!I(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 No(e,t){let n=new Set;for(let e of t)I(e)&&typeof e.id==`string`&&n.add(e.id);return Mo(e,n,jo(t))}function Po(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 Fo(e,t){let n=new Set;for(let e of t)I(e)&&typeof e.id==`string`&&n.add(e.id);for(let t=0;t<e.length;t++){let r=e[t];if(!I(r))continue;let i=r.target;if(!I(i))continue;let a=Po(i,n,`privacy.redactions[${t}].target`);if(!a.ok)return a}return{ok:!0}}function Io(e){let t=e.conversations,n=e.attachments,r=e.delegations,i=e.privacy,a=Array.isArray(i?.redactions)?i.redactions:[],o=bo(t);if(!o.ok)return o;let s=xo(t);if(!s.ok)return s;let c=To(t);if(!c.ok)return c;let l=Oo(t,n);if(!l.ok)return l;let u=Ao(n,t);if(!u.ok)return u;let d=No(r,t);return d.ok?Fo(a,n):d}function Lo(e){let t=yo(e);return t.ok?Io(e):t}function Ro(e){if(!I(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=ho(e.export);if(!t.ok)return t;let n=_o(e.session);if(!n.ok)return n;let r=vo(e.privacy);return r.ok?Lo(e):r}async function zo(e,t,n){let r=await n({method:`GET`,path:`/${e}/sites/${t}/config.json`,origin:tt});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:Bo(a),sourceUrl:a}}function Bo(e){if(!e)return`da`;let t;try{t=new URL(e).host}catch{return`da`}return t===`api.aem.live`?`aem`:`da`}const Vo=`slicc-sprinkle-routes`;function Ho(){try{let e=localStorage.getItem(Vo);return e?JSON.parse(e):{}}catch{return{}}}function Uo(e){try{localStorage.setItem(Vo,JSON.stringify(e))}catch{}}function Wo(e){return Ho()[e]}function Go(e,t){let n=Ho();n[e]=t,Uo(n)}function Ko(e){let t=Ho();delete t[e],Uo(t)}function qo(){return Ho()}function Jo(e,t,n){return Tt(t,n,`${e} adapter does not implement ${t}.${n}`)}function Yo(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 Xo(e){let{adapter:t,pageGestures:n}=e,r=n??{};return{adapter:t,browser:Yo(t,`browser`,Ot,e.browser),network:Yo(t,`network`,wt,e.network),secrets:Yo(t,`secrets`,kt,e.secrets),devices:Yo(t,`devices`,At,{usbRequest:r.usbRequest,serialRequest:r.serialRequest,hidRequest:r.hidRequest,...e.devices}),mounts:Yo(t,`mounts`,Et,{pickDirectory:r.pickDirectory,...e.mounts}),approvals:Yo(t,`approvals`,jt,e.approvals)}}function Zo(e={}){return Xo({adapter:`connect`,pageGestures:e.pageGestures})}function Qo(e){let t=Mt(()=>import(`./extension-ops-OtrqWANJ.js`).then(t=>t.createExtensionOps(e)));return Xo({adapter:e.adapter,pageGestures:e.pageGestures,network:{crossOriginFetch:e=>E(`network`,`crossOriginFetch`,async()=>(await t()).crossOriginFetch(e))},secrets:{listMaskedEnv:()=>E(`secrets`,`listMaskedEnv`,async()=>(await t()).secrets.listMaskedEnv()),getMasked:e=>E(`secrets`,`getMasked`,async()=>(await t()).secrets.getMasked(e)),set:e=>E(`secrets`,`set`,async()=>(await t()).secrets.set(e)),delete:e=>E(`secrets`,`delete`,async()=>(await t()).secrets.delete(e))},mounts:{signRequest:e=>E(`mounts`,`signRequest`,async()=>(await t()).signRequest(e))},approvals:{request:e=>E(`approvals`,`request`,async()=>(await t()).requestApproval(e))}})}function $o(e={}){let t=Mt(()=>import(`./rest-ops-j0P6ql7f.js`).then(t=>t.createRestOps(e)),e.controlTimeoutMs??1e4);return Xo({adapter:`node-rest`,pageGestures:e.pageGestures,network:{localNodeServer:()=>Promise.resolve({ok:!0,value:{available:!0}}),crossOriginFetch:e=>E(`network`,`crossOriginFetch`,async()=>(await t()).crossOriginFetch(e))},secrets:{listMaskedEnv:()=>E(`secrets`,`listMaskedEnv`,async()=>(await t()).secrets.listMaskedEnv()),getMasked:e=>E(`secrets`,`getMasked`,async()=>(await t()).secrets.getMasked(e)),set:e=>E(`secrets`,`set`,async()=>(await t()).secrets.set(e)),delete:e=>E(`secrets`,`delete`,async()=>(await t()).secrets.delete(e))},mounts:{signRequest:e=>E(`mounts`,`signRequest`,async()=>(await t()).signRequest(e))},approvals:{request:e=>E(`approvals`,`request`,async()=>(await t()).requestApproval(e))}})}function es(e,t={}){let{pageGestures:n}=t;switch(e){case`node-rest`:return $o({pageGestures:n});case`extension-direct`:case`extension-delegate`:return Qo({adapter:e,pageGestures:n});case`connect`:return Zo({pageGestures:n})}}function ts(e){let t=``;for(let n=0;n<e.length;n++){let r=e.charCodeAt(n);if(r>=55296&&r<=56319){let r=n+1<e.length?e.charCodeAt(n+1):0;r>=56320&&r<=57343?(t+=e.slice(n,n+2),n+=1):t+=`�`}else t+=r>=56320&&r<=57343?`�`:e.slice(n,n+1)}return t}function ns(e){let t=String.prototype.toWellFormed;return typeof t==`function`?t.call(e):ts(e)}const rs=e(`quick-llm`);async function is(e){let t=f();if(!t)return rs.debug(`No API key for active provider — skipping`),null;let n=d(),r=u(),i;if(i=e.modelId?cs(n,e.modelId)??cs(n,r):as(n,r),!i)return rs.debug(`No model available for provider`,{providerId:n}),null;let a=ns(e.prompt),o=e.system===void 0?void 0:ns(e.system),s={role:`user`,content:a,timestamp:Date.now()},c={};i.provider===`adobe`&&(c[`X-Session-Id`]=ls());try{let n=(await Pe(i,{systemPrompt:o,messages:[s]},{apiKey:t,maxTokens:e.maxTokens??60,temperature:e.temperature??.3,signal:e.signal,headers:Object.keys(c).length>0?c:void 0})).content.filter(e=>e.type===`text`).map(e=>e.text).join(``).trim();return n.length>0?n:null}catch(e){return rs.debug(`Quick label call failed`,{error:e instanceof Error?e.message:String(e)}),null}}function as(e,t){let n=p(e);if(n.length===0)return;let r=n.find(e=>e.id===t)??n[0],i=ss(r.id),a=n.filter(e=>os(e,r,i));return a.length===0?r:(a.sort((e,t)=>(e.cost?.input??0)-(t.cost?.input??0)),a[0])}function os(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 ss(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 cs(e,t){return p(e).find(e=>e.id===t)}function ls(){return Pt(`ui-quick-llm`)}const us=e(`sudo-suggest`),ds=[`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
- `),fs=[`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 ps(e,t){if(e.suggestedPattern&&e.suggestedPattern.trim().length>0)return e.suggestedPattern.trim();let n=e.detail.trim();if(e.kind===`guest-message`||e.kind===`guest-tool`)return n;let r=e.kind===`command`?ds:fs,i=null;try{i=await is({prompt:n,system:r,maxTokens:40,temperature:0,signal:t})}catch(e){us.debug(`suggestPattern: quickLabel threw`,{error:e instanceof Error?e.message:String(e)}),i=null}return ms(i)||n}function ms(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 hs=e(`sudo:capability-gesture`);function gs(e,t={}){let n=t.suggest??ps;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 hs.warn(`sudo approval aborted before prompting — denying`,{detail:t.detail}),Ct();if(!e)return hs.warn(`no CapabilityBroker injected for the sudo gesture hop — denying (composition bug, never a guessed transport)`,{detail:t.detail}),Ct();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?Dt(o.value,a):(hs.warn(`capability broker approvals.request failed — denying`,{message:o.message}),Ct())}}}const _s=e(`sudo:tray-first`);function vs(e,t={}){let n=t.suggest??ps,r=t.timeoutMs??6e5,i=t.getClient??(async()=>{let{getPanelRpcClient:e}=await import(`./panel-rpc-CR9k3qWE.js`).then(e=>e.r);return e()});return{async requestApproval(t,a){if(a?.signal?.aborted)return Ct();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){_s.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 bs(e?.decision,o)}catch(e){_s.warn(`tray-first sudo probe failed — using native broker`,{error:e instanceof Error?e.message:String(e)})}return e.requestApproval(s,a)}}}const ys=[`user-timeout`,`cone-timeout`,`unavailable`];function bs(e,t){if(!e||typeof e!=`object`)return Ct();let n=e,r=n.attestation===`biometric`||n.attestation===`passcode`||n.attestation===`none`?n.attestation:void 0;if(n.decision===`allow`)return{decision:`allow`,...r?{attestation:r}:{}};if(n.decision===`always`)return{decision:`always`,pattern:typeof n.pattern==`string`&&n.pattern.trim().length>0?n.pattern.trim():t,...r?{attestation:r}:{}};if(n.decision!==`deny`)return Ct();let i=ys.find(e=>e===n.reason);return i?{decision:`deny`,reason:i}:{decision:`deny`}}function xs(e,t){return{requestApproval(n){return t.enqueueSudoRequest(e,n)}}}function Ss(){return`lick-${Date.now()}-${Math.random().toString(36).slice(2,10)}`}var Cs=class{pending=new Map;timeoutMs;newId;setTimer;clearTimer;onAutoSettle;constructor(e={}){this.timeoutMs=e.timeoutMs??3e5,this.newId=e.newId??Ss,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(ae(`cone-timeout`)),this.notifyAutoSettle(r,`expired`,e.scoopJid))},this.timeoutMs)),this.pending.set(r,{scoopJid:e,request:t,resolve:i,timerHandle:a,approverJid:n})})}}resolve(e,t){let n=this.pending.get(e);return n?(this.pending.delete(e),n.timerHandle!=null&&this.clearTimer(n.timerHandle),n.resolve(t),!0):!1}failScoop(e){let t=0;for(let[n,r]of this.pending)r.scoopJid===e&&(this.pending.delete(n),r.timerHandle!=null&&this.clearTimer(r.timerHandle),r.resolve({decision:`deny`,reason:`unavailable`}),this.notifyAutoSettle(n,`scoop-dropped`,r.scoopJid),t++);return t}failAll(){let e=0;for(let[t,n]of this.pending)n.timerHandle!=null&&this.clearTimer(n.timerHandle),n.resolve({decision:`deny`,reason:`unavailable`}),this.notifyAutoSettle(t,`shutdown`,n.scoopJid),e++;return this.pending.clear(),e}get(e){let t=this.pending.get(e);return t?{id:e,scoopJid:t.scoopJid,request:t.request,...t.approverJid?{approverJid:t.approverJid}:{}}:null}list(){let e=[];for(let[t,n]of this.pending)e.push({id:t,scoopJid:n.scoopJid,request:n.request,...n.approverJid?{approverJid:n.approverJid}:{}});return e}size(){return this.pending.size}};e(`sudo-panel`),typeof globalThis.confirm==`function`&&globalThis.confirm.bind(globalThis),typeof globalThis.prompt==`function`&&globalThis.prompt.bind(globalThis),e(`sudo:page`),e(`sudo`);function ws(e){return re(Ts(e))}function Ts(e){let t=gs(e);return e?.adapter===`extension-direct`||e?.adapter===`extension-delegate`?t:vs(t)}let Es=null;function Ds(e){return Es=e,()=>{Es===e&&(Es=null)}}function Os(){if(!Es)throw new za(`session-not-found`);return Es}const ks=`focus`,As={type:`leaf`,surfaceId:`chat`};function js(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 Ms={focus:{name:`focus`,tree:js({left:As},{left:3,middle:1})}};function Ns(e){return Ms[e]??null}const Ps=`progress`;async function Fs(){try{let e=await Kt();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 qt(e.idbKey);if(!t)throw Error(`mount: no directory handle found in storage`);return await Gt(t),t}throw Error(`mount: unexpected popup result`)}catch(e){throw Error(`mount: ${e instanceof Error?e.message:String(e)}`)}}async function Is(){if(typeof window>`u`||!(`showDirectoryPicker`in window))throw Error(`mount: local picker requires a user gesture in the panel (unavailable in this runtime). Ask the agent to mount it instead.`);try{return await window.showDirectoryPicker({mode:`readwrite`})}catch(e){throw e instanceof Error&&e.name===`AbortError`?Error(`mount: cancelled`):Error(`mount: ${e instanceof Error?e.message:String(e)}`)}}async function Ls(e,t){let n;try{({grants:n}=await e.call(`permission-request`,{kinds:[`filesystem`],description:`A command in the terminal asks to mount a local directory at ${t}.`},{timeoutMs:3e5}))}catch(e){let t=e instanceof Error?e.message:String(e);throw Error(t.replace(/^permission-request: /,``))}let r=n.find(e=>e.kind===`filesystem`);if(!r||!(`idbKey`in r))throw Error(`no directory selected`);let i=await qt(r.idbKey);if(!i)throw Error(`no directory handle found in storage`);return await Gt(i),i}function Rs(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 zs(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 Vs(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 Hs(e){return`aem://${e.org}/${e.name}${e.path?`/${e.path}`:``}`}var Us=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=Rs(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=Be();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=be()?null:b(),i;if(n){let t=this.options.acquireLocalMountViaToolUI;if(!t)throw Error(`mount: tool UI not available in this runtime`);i=await t(n,e)}else i=te()?await Fs():r?await Ls(r,e):await Is();let a=Ze.fromHandle(i,{mountId:it()});return await this.options.fs.mount(e,a,{env:t}),{stdout:`Mounted '${a.describe().displayName}' → ${e}\nIndexing in background for fast file discovery.\nNote: External changes are not auto-detected — use 'mount refresh ${e}' after modifying files outside the browser.\n`,stderr:``,exitCode:0}}catch(e){return{stdout:``,stderr:`mount: ${e instanceof Error?e.message:String(e)}\n`,exitCode:1}}}async mountS3(e,t){if(!t.source)return this.usageError(`mount: --source required`);let n=t.profile??`default`,r=it(),i=new at({mountId:r,ttlMs:3e4}),a=new $e({source:t.source,profile:n,cache:i,maxBodyBytes:t.maxBodyMb?t.maxBodyMb*1024*1024:void 0,mountId:r,signedFetch:this.signedFetchS3??et(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??rt(),i=zs(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 zo(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=it(),c=new at({mountId:s,ttlMs:3e4}),l={source:a===`aem`?Hs(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 nt(l):new Qe(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(Vs(e))return n===`umount`?this.umountHelp():this.help();let r=Rs(e);if(r.positional.length===0)return{stdout:``,stderr:`${n}: path required\n`,exitCode:1};let i=this.resolvePath(r.positional[0],t);try{let e,t;if(r.clearCache){let{getAllMountEntries:n}=await import(`./mount-table-store-DrF_Ifaz.js`).then(e=>e.r),r=(await n()).find(e=>e.targetPath===i),a=r?.descriptor.kind;r&&(a===`s3`||a===`da`||a===`aem`)&&(e=r.descriptor.mountId,t=r.descriptor.kind)}await this.options.fs.unmount(i);let n=``;if(r.clearCache&&e&&t){let{RemoteMountCache:t}=await import(`./remote-cache-UwMD8EkX.js`).then(e=>e.n);await new t({mountId:e,ttlMs:3e4}).clearMount(),n=` (cache cleared)`}else r.clearCache&&(n=` (no remote cache to clear)`);return{stdout:`Unmounted ${i}${n}\n`,stderr:``,exitCode:0}}catch(e){return{stdout:``,stderr:`${n}: ${e instanceof Error?e.message:String(e)}\n`,exitCode:1}}}async handleList(){try{let e=this.options.fs.listMounts();if(e.length===0)return{stdout:`No active mounts
1
+ import{t as e}from"./logger-LESFN7Hj.js";import{r as t,t as n}from"./base64-BPBW1Gzr.js";import{n as r}from"./bridge-protocol-31SWTdS5.js";import{a as i,n as a,o,s,t as c}from"./handoff-link-B3It6xQY.js";import{C as l,d as u,f as d,i as f,u as p}from"./account-store-C-NiHHQY.js";import{c as m,d as h,n as g,r as _,s as v}from"./proxied-fetch-F-dCBEfh.js";import{t as ee}from"./sha256-DynDhwRL.js";import{t as te}from"./runtime-env-DadgceZk.js";import{t as ne}from"./slugify-BYJ6QVAt.js";import{i as re,n as ie,r as ae,t as oe}from"./host-command-CvUauhDf.js";import{a as se,c as ce,d as y,f as le,i as ue,l as de,m as fe,n as pe,o as me,p as he,r as ge,s as _e,t as ve,u as ye}from"./snapshot-HHgn9isb.js";import{n as be,t as b}from"./panel-rpc-accessor-B4BfPLSo.js";import{a as xe,c as Se,n as Ce,o as we,s as Te,t as Ee}from"./feature-flags-QlgHaQc1.js";import{t as De}from"./providers-BzMeirCU.js";import{r as Oe}from"./binary-cache-bSOhqXB1.js";import{i as ke,n as Ae,r as je}from"./fetch-body-CuwTaJC_.js";import{s as Me,t as Ne}from"./api-endpoint-D8lUKmPu.js";import{t as Pe}from"./compat-nGhSz-U1.js";import"./core-EGZ5TU35.js";import{t as Fe}from"./utf16-clip-Dcxt-q1C.js";import{n as Ie,t as Le}from"./mime-types-D7IV6i7k.js";import{n as Re,t as ze}from"./float-topology-COIC4j_U.js";import{t as Be}from"./secrets-bridge-client-GOCzDscb.js";import{a as Ve,i as He,n as Ue,r as We}from"./tool-ui-DRnUkp2g.js";import{a as Ge,i as Ke,n as x,t as S}from"./path-utils-DNJG-zQf.js";import{n as qe,r as Je,t as Ye}from"./merge-file-core-VJlzucJY.js";import{n as Xe,t as Ze}from"./types-D8gIX-W-.js";import{i as Qe}from"./mount-index-CQfmUPuZ.js";import{a as $e,i as et,n as tt,o as nt,s as rt,t as it}from"./signed-fetch-DeDG40wV.js";import{o as at}from"./mount-table-store-DrF_Ifaz.js";import{t as ot}from"./remote-cache-UwMD8EkX.js";import{n as st}from"./fs-D_cFUSir.js";import{a as ct}from"./tray-leader-status-CpkFr6n7.js";import{n as lt,t as ut}from"./slicc-version-KlsjiTIs.js";import{a as dt,i as ft,o as pt,r as C,t as mt}from"./browser-CGX7MbCQ.js";import{t as w}from"./subcommand-flags-BZi7j78Q.js";import{n as ht,r as gt,t as T}from"./subcommand-help-CgO7wRS5.js";import{n as _t}from"./cost-command-TMcbUPyN.js";import{d as vt,g as yt,i as bt,n as xt,o as St}from"./sudoers-BdBYQPUn.js";import{t as Ct}from"./sudo-refusal-DVwTXFRE.js";import{n as wt}from"./types-Dj5TU-Qg.js";import{a as Tt,c as Et,i as Dt,l as Ot,n as kt,o as At,r as jt,t as Mt}from"./types-JfhqX7lD.js";import{n as E,t as Nt}from"./boundary-DjgipyWT.js";import"./rest-paths-Dia19u9P.js";import{t as Pt}from"./html-B_Hg2WOy.js";import{n as Ft}from"./llm-session-id-CKpY5F_-.js";import{t as It}from"./src-CUSndb9K.js";import{i as Lt,o as Rt}from"./browser-DuyhpHbR.js";import{a as zt,c as Bt,i as Vt,n as Ht,o as Ut,s as Wt,t as Gt}from"./pipe-status-BBrT3VeG.js";import{i as Kt,r as qt,t as Jt}from"./mount-picker-popup-BMils9JY.js";import{t as Yt}from"./buffer-B5d1xHaH.js";import"./buffer-polyfill-BwLbCySD.js";import{A as Xt,B as D,C as Zt,D as O,E as Qt,F as $t,G as en,H as k,I as A,J as tn,K as nn,L as rn,M as an,N as on,O as sn,P as cn,R as ln,S as un,T as dn,U as fn,V as pn,W as mn,Y as hn,_ as gn,a as _n,b as vn,c as yn,d as bn,f as xn,g as Sn,h as Cn,i as wn,j as Tn,k as En,l as Dn,m as On,n as kn,o as An,p as j,q as jn,r as Mn,s as Nn,t as Pn,u as Fn,v as In,w as Ln,x as Rn,y as zn,z as Bn}from"./isomorphic-git-r9mnHMnp.js";import"./global-db-DJXlpNui.js";import{C as Vn,S as M,a as Hn,b as Un,c as Wn,d as Gn,f as Kn,g as qn,i as Jn,l as Yn,m as Xn,n as Zn,o as Qn,p as $n,r as er,s as tr,t as nr,u as rr,x as ir,y as N}from"./state-Dx_7TiP6.js";import{a as ar,i as or,r as sr,t as cr}from"./git-config-Bdgu8kD2.js";import{a as P,i as lr,r as ur,t as dr}from"./just-bash-compat-B-SPHuh_.js";import{h as fr,i as pr,r as mr}from"./stdio-tty-CipJs8Mm.js";import{i as hr,r as gr}from"./global-prefix-DqCuANmV.js";import{t as _r}from"./wasm-programs-Bd5YaoqY.js";import{a as vr,n as yr,o as br,r as xr,s as Sr}from"./jsh-discovery-CnvNKojr.js";import{C as Cr,a as wr,b as Tr,c as Er,d as Dr,f as Or,h as kr,i as Ar,l as jr,m as Mr,n as Nr,o as Pr,p as Fr,r as Ir,s as Lr,t as F,u as Rr,v as zr,y as Br}from"./shared-D-ZRFYou.js";import{_ as Vr,a as Hr,b as Ur,d as Wr,f as Gr,g as Kr,h as qr,i as Jr,l as Yr,m as Xr,p as Zr,r as Qr,s as $r,u as ei,v as ti,y as ni}from"./require-guards-dUdxJmkR.js";import{_ as ri,a as ii,b as ai,c as oi,d as si,f as ci,g as li,h as ui,l as di,m as fi,n as pi,p as mi,s as hi,t as gi,u as _i,v as vi,x as yi,y as bi}from"./jsh-executor-CQjOV2Rz.js";import{n as xi,t as Si}from"./esbuild-wasm-DeTghvWH.js";import{n as Ci}from"./wasm-compiler-Ct7QZURL.js";import{a as wi,o as Ti,s as Ei,t as Di}from"./usb-device-registry-DFzxaOky.js";import{i as Oi,r as ki,t as Ai}from"./script-catalog-D5joO5l7.js";import{a as ji,c as Mi,o as Ni,s as Pi,t as Fi}from"./types-Dzr0qYl3.js";import{a as Ii,c as Li,d as Ri,f as zi,n as Bi,r as Vi,u as Hi}from"./github-zip-CMSbKC3q.js";import{i as Ui,t as Wi}from"./github-auth-D-_-pCrt.js";import{a as Gi,i as Ki,o as qi,r as Ji,t as Yi}from"./provenance-DdmsQ3Nr.js";import{a as Xi,c as Zi,i as Qi,n as $i,o as ea,r as ta,s as na}from"./github-install-NHKpL-_w.js";import{n as ra,t as ia}from"./magick-wasm-BbnwhVj1.js";import{i as aa,n as oa,r as sa,t as ca}from"./pdf-raster-BWk6ezTX.js";import{n as la}from"./lick-target-env-8JxfVcIV.js";import{t as ua}from"./tmpdir-env-ate4iNcK.js";import{n as da,t as fa}from"./keyboard-TcuVIW9F.js";import{n as pa,t as ma}from"./hf-defaults-BwJdGLgk.js";import{t as ha}from"./ffmpeg-wasm-sx-3yVAE.js";import{t as ga}from"./local-llm-C5Mw5oib.js";import{i as _a,n as va,r as ya,t as ba}from"./tar-BWIPCxI2.js";import{a as xa,c as Sa,i as Ca,o as wa,r as Ta,s as Ea}from"./v86-vm-DCm7zA2r.js";import{n as Da,r as Oa}from"./lick-urls-CgPiVwD-.js";let ka=null;function Aa(e){ka=e!==null&&Number.isFinite(e)&&e>0?e:null}function ja(){if(ka!==null)return ka;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 Na(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 Pa(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 Fa(e,t){return e.some(e=>Pa(e,t))}const Ia=`slicc-transcript`,La=[`canonical-agent-history-unavailable`,`tool-data-may-be-truncated`,`model-metadata-unavailable`,`scoop-history-unavailable`,`attachment-file-missing`,`attachment-association-unavailable`,`complete-snapshot-unavailable`],Ra=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 za(e){return Ra.has(e.replace(/\/\d+(?=\/|$)/g,`/*`))}var Ba=class extends Error{code;detail;constructor(e,t){super(t?`${e}: ${t}`:e),this.code=e,this.detail=t,this.name=`TranscriptExportError`}};const Va=new Set(La),Ha=/^[0-9a-fA-F]{64}$/,Ua=/^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}/;function I(e){return typeof e==`object`&&!!e&&!Array.isArray(e)}function Wa(e){return typeof e==`string`&&Ha.test(e)}function Ga(e){return Ua.test(e)&&Number.isFinite(Date.parse(e))}function Ka(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 qa(e,t,n){return typeof e!=`string`||!t.includes(e)?{ok:!1,error:Ka(n,t)}:{ok:!0}}function Ja(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 Ya(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 Xa(e,t){if(!I(e))return{ok:!1,error:`${t} must be a non-null object`};let n=qa(e.type,[`text`,`tool-call`,`attachment-ref`],`${t}.type`);return n.ok?Ya(e,t):n}function Za(e,t){for(let n of[`input`,`output`,`cacheRead`,`cacheWrite`,`totalTokens`]){let r=e[n];if(typeof r!=`number`)return{ok:!1,error:`${t}.${n} must be a number`};if(!Number.isInteger(r)||r<0)return{ok:!1,error:`${t}.${n} must be a non-negative integer`}}return{ok:!0}}function Qa(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 $a(e,t){let n=Za(e,t);if(!n.ok)return n;let r=e.cost;return I(r)?Qa(r,`${t}.cost`):{ok:!1,error:`${t}.cost must be a non-null object`}}function eo(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`?Ga(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 to(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 no(e,t){let n=e.usage;return n===void 0?{ok:!0}:I(n)?$a(n,`${t}.usage`):{ok:!1,error:`${t}.usage must be a non-null object`}}function ro(e,t){if(!I(e))return{ok:!1,error:`${t} must be a non-null object`};let n=qa(e.role,[`user`,`assistant`,`tool-result`],`${t}.role`);if(!n.ok)return n;if(e.role===`tool-result`){let n=to(e,t);if(!n.ok)return n}let r=eo(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=Ja(i,Xa,`${t}.content`);return a.ok?no(e,t):a}function io(e,t){if(!I(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=qa(e.kind,[`cone`,`scoop`],`${t}.kind`);if(!n.ok)return n;let r=e.messages;return Array.isArray(r)?Ja(r,ro,`${t}.messages`):{ok:!1,error:`${t}.messages must be an array`}}function ao(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 oo(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`}:Wa(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 so=[`attachment-file-missing`,`attachment-association-unavailable`];function co(e,t){let n=e.path,r=e.sha256,i=e.byteLength;return n===``?r===``?i===0?qa(e.missingReason,so,`${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 lo(e,t){return e.present?oo(e,t):co(e,t)}function uo(e,t){if(!I(e))return{ok:!1,error:`${t} must be a non-null object`};let n=ao(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=qa(e.handling,[`text-redacted`,`binary-unchanged`],`${t}.handling`);return r.ok?lo(e,t):r}function fo(e,t){let n=qa(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 po(e,t){if(!I(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=qa(e.detector,[`known-secret`,`credential-pattern`,`pre-obfuscated`],`${t}.detector`);if(!n.ok)return n;let r=e.target;return I(r)?fo(r,`${t}.target`):{ok:!1,error:`${t}.target must be a non-null object`}}function mo(e,t){return I(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 ho(e,t){return typeof e!=`string`||!Va.has(e)?{ok:!1,error:`${t} is not a valid completeness reason`}:{ok:!0}}function go(e){if(!I(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 I(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 _o(e){if(!I(e))return{ok:!1,error:`session.completeness must be a non-null object`};let t=qa(e.status,[`complete`,`partial`],`session.completeness.status`);return t.ok?Array.isArray(e.missing)?Ja(e.missing,ho,`session.completeness.missing`):{ok:!1,error:`session.completeness.missing must be an array`}:t}function vo(e){if(!I(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=qa(e.state,[`active`,`frozen`],`session.state`);return t.ok?_o(e.completeness):t}function yo(e){if(!I(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(!I(e.redactionCounts))return{ok:!1,error:`privacy.redactionCounts must be a non-null object`};let n=e.redactions;return Array.isArray(n)?Ja(n,po,`privacy.redactions`):{ok:!1,error:`privacy.redactions must be an array`}}function bo(e){let t=e.conversations;if(!Array.isArray(t))return{ok:!1,error:`conversations must be an array`};let n=Ja(t,io,`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=Ja(r,mo,`delegations`);if(!i.ok)return i;let a=e.attachments;return Array.isArray(a)?Ja(a,uo,`attachments`):{ok:!1,error:`attachments must be an array`}}function xo(e){let t=new Set,n=new Set;for(let r of e){if(!I(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(!(!I(t)||typeof t.id!=`string`)){if(n.has(t.id))return{ok:!1,error:`duplicate message id "${t.id}"`};n.add(t.id)}}}return{ok:!0}}function So(e){for(let t of e){if(!I(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(!I(t)||typeof t.sequence!=`number`)continue;let e=t.sequence;if(e<=r)return{ok:!1,error:`sequences in conversation "${n}" must be strictly increasing`};r=e}}return{ok:!0}}function Co(e){let t=[];for(let n of e){if(!I(n))continue;let e=n.content;if(Array.isArray(e))for(let n of e)I(n)&&n.type===`tool-call`&&typeof n.id==`string`&&t.push(n.id)}return t}function wo(e){let t=new Set;for(let n of e){if(!I(n))continue;let e=n.messages;if(Array.isArray(e))for(let n of Co(e))t.add(n)}return t}function To(e,t){for(let n of e){if(!I(n))continue;let e=n.messages;if(Array.isArray(e))for(let n of e){if(!I(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 Eo(e){return To(e,wo(e))}function Do(e,t){for(let n of e){if(!I(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 Oo(e,t){for(let n of e){if(!I(n))continue;let e=n.messages;if(Array.isArray(e))for(let n of e){if(!I(n))continue;let e=n.content;if(!Array.isArray(e))continue;let r=Do(e,t);if(!r.ok)return r}}return{ok:!0}}function ko(e,t){let n=new Set;for(let e of t)I(e)&&typeof e.id==`string`&&n.add(e.id);return Oo(e,n)}function Ao(e){let t=new Map;for(let n of e){if(!I(n)||typeof n.id!=`string`)continue;let e=new Set,r=n.messages;if(Array.isArray(r))for(let t of r)I(t)&&typeof t.id==`string`&&e.add(t.id);t.set(n.id,e)}return t}function jo(e,t){let n=Ao(t);for(let t=0;t<e.length;t++){let r=e[t];if(!I(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(!I(n)||typeof n.id!=`string`)continue;let e=Array.isArray(n.messages)?n.messages:[];t.set(n.id,new Set(Co(e)))}return t}function No(e,t,n){for(let r=0;r<e.length;r++){let i=e[r];if(!I(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 Po(e,t){let n=new Set;for(let e of t)I(e)&&typeof e.id==`string`&&n.add(e.id);return No(e,n,Mo(t))}function Fo(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 Io(e,t){let n=new Set;for(let e of t)I(e)&&typeof e.id==`string`&&n.add(e.id);for(let t=0;t<e.length;t++){let r=e[t];if(!I(r))continue;let i=r.target;if(!I(i))continue;let a=Fo(i,n,`privacy.redactions[${t}].target`);if(!a.ok)return a}return{ok:!0}}function Lo(e){let t=e.conversations,n=e.attachments,r=e.delegations,i=e.privacy,a=Array.isArray(i?.redactions)?i.redactions:[],o=xo(t);if(!o.ok)return o;let s=So(t);if(!s.ok)return s;let c=Eo(t);if(!c.ok)return c;let l=ko(t,n);if(!l.ok)return l;let u=jo(n,t);if(!u.ok)return u;let d=Po(r,t);return d.ok?Io(a,n):d}function Ro(e){let t=bo(e);return t.ok?Lo(e):t}function zo(e){if(!I(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=go(e.export);if(!t.ok)return t;let n=vo(e.session);if(!n.ok)return n;let r=yo(e.privacy);return r.ok?Ro(e):r}async function Bo(e,t,n){let r=await n({method:`GET`,path:`/${e}/sites/${t}/config.json`,origin:nt});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:Vo(a),sourceUrl:a}}function Vo(e){if(!e)return`da`;let t;try{t=new URL(e).host}catch{return`da`}return t===`api.aem.live`?`aem`:`da`}const Ho=`slicc-sprinkle-routes`;function Uo(){try{let e=localStorage.getItem(Ho);return e?JSON.parse(e):{}}catch{return{}}}function Wo(e){try{localStorage.setItem(Ho,JSON.stringify(e))}catch{}}function Go(e){return Uo()[e]}function Ko(e,t){let n=Uo();n[e]=t,Wo(n)}function qo(e){let t=Uo();delete t[e],Wo(t)}function Jo(){return Uo()}function Yo(e,t,n){return Et(t,n,`${e} adapter does not implement ${t}.${n}`)}function Xo(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(Yo(e,t,n))]});return{...Object.fromEntries(a),allowlist:i,supports:e=>i.includes(e)}}function Zo(e){let{adapter:t,pageGestures:n}=e,r=n??{};return{adapter:t,browser:Xo(t,`browser`,kt,e.browser),network:Xo(t,`network`,Tt,e.network),secrets:Xo(t,`secrets`,At,e.secrets),devices:Xo(t,`devices`,jt,{usbRequest:r.usbRequest,serialRequest:r.serialRequest,hidRequest:r.hidRequest,...e.devices}),mounts:Xo(t,`mounts`,Dt,{pickDirectory:r.pickDirectory,...e.mounts}),approvals:Xo(t,`approvals`,Mt,e.approvals)}}function Qo(e={}){return Zo({adapter:`connect`,pageGestures:e.pageGestures})}function $o(e){let t=Nt(()=>import(`./extension-ops-OtrqWANJ.js`).then(t=>t.createExtensionOps(e)));return Zo({adapter:e.adapter,pageGestures:e.pageGestures,network:{crossOriginFetch:e=>E(`network`,`crossOriginFetch`,async()=>(await t()).crossOriginFetch(e))},secrets:{listMaskedEnv:()=>E(`secrets`,`listMaskedEnv`,async()=>(await t()).secrets.listMaskedEnv()),getMasked:e=>E(`secrets`,`getMasked`,async()=>(await t()).secrets.getMasked(e)),set:e=>E(`secrets`,`set`,async()=>(await t()).secrets.set(e)),delete:e=>E(`secrets`,`delete`,async()=>(await t()).secrets.delete(e))},mounts:{signRequest:e=>E(`mounts`,`signRequest`,async()=>(await t()).signRequest(e))},approvals:{request:e=>E(`approvals`,`request`,async()=>(await t()).requestApproval(e))}})}function es(e={}){let t=Nt(()=>import(`./rest-ops-j0P6ql7f.js`).then(t=>t.createRestOps(e)),e.controlTimeoutMs??1e4);return Zo({adapter:`node-rest`,pageGestures:e.pageGestures,network:{localNodeServer:()=>Promise.resolve({ok:!0,value:{available:!0}}),crossOriginFetch:e=>E(`network`,`crossOriginFetch`,async()=>(await t()).crossOriginFetch(e))},secrets:{listMaskedEnv:()=>E(`secrets`,`listMaskedEnv`,async()=>(await t()).secrets.listMaskedEnv()),getMasked:e=>E(`secrets`,`getMasked`,async()=>(await t()).secrets.getMasked(e)),set:e=>E(`secrets`,`set`,async()=>(await t()).secrets.set(e)),delete:e=>E(`secrets`,`delete`,async()=>(await t()).secrets.delete(e))},mounts:{signRequest:e=>E(`mounts`,`signRequest`,async()=>(await t()).signRequest(e))},approvals:{request:e=>E(`approvals`,`request`,async()=>(await t()).requestApproval(e))}})}function ts(e,t={}){let{pageGestures:n}=t;switch(e){case`node-rest`:return es({pageGestures:n});case`extension-direct`:case`extension-delegate`:return $o({adapter:e,pageGestures:n});case`connect`:return Qo({pageGestures:n})}}const ns=e(`quick-llm`);async function rs(e){let t=f();if(!t)return ns.debug(`No API key for active provider — skipping`),null;let n=d(),r=u(),i;if(i=e.modelId?ss(n,e.modelId)??ss(n,r):is(n,r),!i)return ns.debug(`No model available for provider`,{providerId:n}),null;let a=Fe(e.prompt),o=e.system===void 0?void 0:Fe(e.system),s={role:`user`,content:a,timestamp:Date.now()},c={};i.provider===`adobe`&&(c[`X-Session-Id`]=cs());try{let n=(await Pe(i,{systemPrompt:o,messages:[s]},{apiKey:t,maxTokens:e.maxTokens??60,temperature:e.temperature??.3,signal:e.signal,headers:Object.keys(c).length>0?c:void 0})).content.filter(e=>e.type===`text`).map(e=>e.text).join(``).trim();return n.length>0?n:null}catch(e){return ns.debug(`Quick label call failed`,{error:e instanceof Error?e.message:String(e)}),null}}function is(e,t){let n=p(e);if(n.length===0)return;let r=n.find(e=>e.id===t)??n[0],i=os(r.id),a=n.filter(e=>as(e,r,i));return a.length===0?r:(a.sort((e,t)=>(e.cost?.input??0)-(t.cost?.input??0)),a[0])}function as(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 os(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 ss(e,t){return p(e).find(e=>e.id===t)}function cs(){return Ft(`ui-quick-llm`)}const ls=e(`sudo-suggest`),us=[`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
+ `),ds=[`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 fs(e,t){if(e.suggestedPattern&&e.suggestedPattern.trim().length>0)return e.suggestedPattern.trim();let n=e.detail.trim();if(e.kind===`guest-message`||e.kind===`guest-tool`)return n;let r=e.kind===`command`?us:ds,i=null;try{i=await rs({prompt:n,system:r,maxTokens:40,temperature:0,signal:t})}catch(e){ls.debug(`suggestPattern: quickLabel threw`,{error:e instanceof Error?e.message:String(e)}),i=null}return ps(i)||n}function ps(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 ms=e(`sudo:capability-gesture`);function hs(e,t={}){let n=t.suggest??fs;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 ms.warn(`sudo approval aborted before prompting — denying`,{detail:t.detail}),wt();if(!e)return ms.warn(`no CapabilityBroker injected for the sudo gesture hop — denying (composition bug, never a guessed transport)`,{detail:t.detail}),wt();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?Ot(o.value,a):(ms.warn(`capability broker approvals.request failed — denying`,{message:o.message}),wt())}}}const gs=e(`sudo:tray-first`);function _s(e,t={}){let n=t.suggest??fs,r=t.timeoutMs??6e5,i=t.getClient??(async()=>{let{getPanelRpcClient:e}=await import(`./panel-rpc-CR9k3qWE.js`).then(e=>e.r);return e()});return{async requestApproval(t,a){if(a?.signal?.aborted)return wt();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){gs.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 ys(e?.decision,o)}catch(e){gs.warn(`tray-first sudo probe failed — using native broker`,{error:e instanceof Error?e.message:String(e)})}return e.requestApproval(s,a)}}}const vs=[`user-timeout`,`cone-timeout`,`unavailable`];function ys(e,t){if(!e||typeof e!=`object`)return wt();let n=e,r=n.attestation===`biometric`||n.attestation===`passcode`||n.attestation===`none`?n.attestation:void 0;if(n.decision===`allow`)return{decision:`allow`,...r?{attestation:r}:{}};if(n.decision===`always`)return{decision:`always`,pattern:typeof n.pattern==`string`&&n.pattern.trim().length>0?n.pattern.trim():t,...r?{attestation:r}:{}};if(n.decision!==`deny`)return wt();let i=vs.find(e=>e===n.reason);return i?{decision:`deny`,reason:i}:{decision:`deny`}}function bs(e,t){return{requestApproval(n){return t.enqueueSudoRequest(e,n)}}}function xs(){return`lick-${Date.now()}-${Math.random().toString(36).slice(2,10)}`}var Ss=class{pending=new Map;timeoutMs;newId;setTimer;clearTimer;onAutoSettle;constructor(e={}){this.timeoutMs=e.timeoutMs??3e5,this.newId=e.newId??xs,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(ae(`cone-timeout`)),this.notifyAutoSettle(r,`expired`,e.scoopJid))},this.timeoutMs)),this.pending.set(r,{scoopJid:e,request:t,resolve:i,timerHandle:a,approverJid:n})})}}resolve(e,t){let n=this.pending.get(e);return n?(this.pending.delete(e),n.timerHandle!=null&&this.clearTimer(n.timerHandle),n.resolve(t),!0):!1}failScoop(e){let t=0;for(let[n,r]of this.pending)r.scoopJid===e&&(this.pending.delete(n),r.timerHandle!=null&&this.clearTimer(r.timerHandle),r.resolve({decision:`deny`,reason:`unavailable`}),this.notifyAutoSettle(n,`scoop-dropped`,r.scoopJid),t++);return t}failAll(){let e=0;for(let[t,n]of this.pending)n.timerHandle!=null&&this.clearTimer(n.timerHandle),n.resolve({decision:`deny`,reason:`unavailable`}),this.notifyAutoSettle(t,`shutdown`,n.scoopJid),e++;return this.pending.clear(),e}get(e){let t=this.pending.get(e);return t?{id:e,scoopJid:t.scoopJid,request:t.request,...t.approverJid?{approverJid:t.approverJid}:{}}:null}list(){let e=[];for(let[t,n]of this.pending)e.push({id:t,scoopJid:n.scoopJid,request:n.request,...n.approverJid?{approverJid:n.approverJid}:{}});return e}size(){return this.pending.size}};e(`sudo-panel`),typeof globalThis.confirm==`function`&&globalThis.confirm.bind(globalThis),typeof globalThis.prompt==`function`&&globalThis.prompt.bind(globalThis),e(`sudo:page`),e(`sudo`);function Cs(e){return re(ws(e))}function ws(e){let t=hs(e);return e?.adapter===`extension-direct`||e?.adapter===`extension-delegate`?t:_s(t)}let Ts=null;function Es(e){return Ts=e,()=>{Ts===e&&(Ts=null)}}function Ds(){if(!Ts)throw new Ba(`session-not-found`);return Ts}const Os=`focus`,ks={type:`leaf`,surfaceId:`chat`};function As(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 js={focus:{name:`focus`,tree:As({left:ks},{left:3,middle:1})}};function Ms(e){return js[e]??null}const Ns=`progress`;async function Ps(){try{let e=await qt();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 Jt(e.idbKey);if(!t)throw Error(`mount: no directory handle found in storage`);return await Kt(t),t}throw Error(`mount: unexpected popup result`)}catch(e){throw Error(`mount: ${e instanceof Error?e.message:String(e)}`)}}async function Fs(){if(typeof window>`u`||!(`showDirectoryPicker`in window))throw Error(`mount: local picker requires a user gesture in the panel (unavailable in this runtime). Ask the agent to mount it instead.`);try{return await window.showDirectoryPicker({mode:`readwrite`})}catch(e){throw e instanceof Error&&e.name===`AbortError`?Error(`mount: cancelled`):Error(`mount: ${e instanceof Error?e.message:String(e)}`)}}async function Is(e,t){let n;try{({grants:n}=await e.call(`permission-request`,{kinds:[`filesystem`],description:`A command in the terminal asks to mount a local directory at ${t}.`},{timeoutMs:3e5}))}catch(e){let t=e instanceof Error?e.message:String(e);throw Error(t.replace(/^permission-request: /,``))}let r=n.find(e=>e.kind===`filesystem`);if(!r||!(`idbKey`in r))throw Error(`no directory selected`);let i=await Jt(r.idbKey);if(!i)throw Error(`no directory handle found in storage`);return await Kt(i),i}function Ls(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 Rs(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 zs=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;zs.has(n)&&t++}return!1}function Vs(e){return`aem://${e.org}/${e.name}${e.path?`/${e.path}`:``}`}var Hs=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=Ls(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=Ve();if(!n){let n=await Us(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=be()?null:b(),i;if(n){let t=this.options.acquireLocalMountViaToolUI;if(!t)throw Error(`mount: tool UI not available in this runtime`);i=await t(n,e)}else i=te()?await Ps():r?await Is(r,e):await Fs();let a=Qe.fromHandle(i,{mountId:at()});return await this.options.fs.mount(e,a,{env:t}),{stdout:`Mounted '${a.describe().displayName}' → ${e}\nIndexing in background for fast file discovery.\nNote: External changes are not auto-detected — use 'mount refresh ${e}' after modifying files outside the browser.\n`,stderr:``,exitCode:0}}catch(e){return{stdout:``,stderr:`mount: ${e instanceof Error?e.message:String(e)}\n`,exitCode:1}}}async mountS3(e,t){if(!t.source)return this.usageError(`mount: --source required`);let n=t.profile??`default`,r=at(),i=new ot({mountId:r,ttlMs:3e4}),a=new et({source:t.source,profile:n,cache:i,maxBodyBytes:t.maxBodyMb?t.maxBodyMb*1024*1024:void 0,mountId:r,signedFetch:this.signedFetchS3??tt(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??it(),i=Rs(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 Bo(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=at(),c=new ot({mountId:s,ttlMs:3e4}),l={source:a===`aem`?Vs(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 rt(l):new $e(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=Ls(e);if(r.positional.length===0)return{stdout:``,stderr:`${n}: path required\n`,exitCode:1};let i=this.resolvePath(r.positional[0],t);try{let e,t;if(r.clearCache){let{getAllMountEntries:n}=await import(`./mount-table-store-DrF_Ifaz.js`).then(e=>e.r),r=(await n()).find(e=>e.targetPath===i),a=r?.descriptor.kind;r&&(a===`s3`||a===`da`||a===`aem`)&&(e=r.descriptor.mountId,t=r.descriptor.kind)}await this.options.fs.unmount(i);let n=``;if(r.clearCache&&e&&t){let{RemoteMountCache:t}=await import(`./remote-cache-UwMD8EkX.js`).then(e=>e.n);await new t({mountId:e,ttlMs:3e4}).clearMount(),n=` (cache cleared)`}else r.clearCache&&(n=` (no remote cache to clear)`);return{stdout:`Unmounted ${i}${n}\n`,stderr:``,exitCode:0}}catch(e){return{stdout:``,stderr:`${n}: ${e instanceof Error?e.message:String(e)}\n`,exitCode:1}}}async handleList(){try{let e=this.options.fs.listMounts();if(e.length===0)return{stdout:`No active mounts
5
5
  `,stderr:``,exitCode:0};let t=this.options.fs.getMountIndex();return{stdout:e.map(e=>{let n=t.getState(e);if(!n)return e;if(n.status===`ready`)return`${e} (indexed: ${n.indexed} entries)`;if(n.status===`indexing`)return`${e} (indexing: ${n.indexed} entries...)`;if(n.status===`error`)switch(n.abortCause){case`depth-exceeded`:return`${e} (index skipped: directory nesting exceeded the depth limit — reads use the slow path; raise SLICC_MOUNT_INDEX_MAX_DEPTH or 'mount unmount ${e}')`;case`entries-exceeded`:return`${e} (index skipped: mounted tree is too large — reads use the slow path; raise SLICC_MOUNT_INDEX_MAX_ENTRIES or 'mount unmount ${e}')`;case`cycle-detected`:return`${e} (index skipped: self-referential mount cycle detected — run 'mount unmount ${e}' to remove it)`;default:return`${e} (index error: ${n.error})`}return`${e} (pending index)`}).join(`
6
6
  `)+`
7
- `,stderr:``,exitCode:0}}catch(e){return{stdout:``,stderr:`mount list: ${e instanceof Error?e.message:String(e)}\n`,exitCode:1}}}async handleInfo(e,t){if(Vs(e))return this.help();let n=Rs(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=Rs(e);if(r.positional.length===0)return{stdout:``,stderr:`mount refresh: path required
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=Ls(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=Ls(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 Ws(e){let t=`pendingMount:term:${e}`,n;try{n=await qt(t)}catch{return null}if(!n)return null;try{await Gt(n)}catch{return null}return Ze.fromHandle(n,{mountId:it()})}async function Gs(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 Ks(e,t,a);else if(o.includes(`.`))await qs(e,t,a);else if(i)await Js(e,t,a);else for(let n of o)await gn({fs:e.lfs,cache:e.cache,dir:t,filepath:n,force:a});return{stdout:``,stderr:``,exitCode:0}}async function Ks(e,t,n){let r=await k({fs:e.lfs,cache:e.cache,dir:t});for(let[i,,a,o]of r)a!==o&&(a===0?await cn({fs:e.lfs,cache:e.cache,dir:t,filepath:i}):await gn({fs:e.lfs,cache:e.cache,dir:t,filepath:i,force:n}))}async function qs(e,t,n){let r=await k({fs:e.lfs,cache:e.cache,dir:t});for(let[i,,a,o]of r)a!==o&&a!==0&&await gn({fs:e.lfs,cache:e.cache,dir:t,filepath:i,force:n})}async function Js(e,t,n){let r=await k({fs:e.lfs,cache:e.cache,dir:t});for(let[i,a,o,s]of r)a!==0&&o!==s&&(o===0?await cn({fs:e.lfs,cache:e.cache,dir:t,filepath:i}):await gn({fs:e.lfs,cache:e.cache,dir:t,filepath:i,force:n}))}const Ys={boolean:[`dry-run`,`force`,`d`,`x`,`X`,`quiet`],alias:{n:`dry-run`,f:`force`,q:`quiet`}},L={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:Ys,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`}}},Xs=/^(--?)([^=]+)(=.*)?$/;function Zs(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 Qs(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 $s(){let e=new Set([`c`,`C`,`git-dir`,`work-tree`]);for(let t of Object.values(L))for(let n of Qs(t))e.add(n);return e}function ec(e,t,n){for(let r of e){if(!t.has(r))return r;if(n.has(r))return}}function tc(e,t){let n=Zs(t),r=Qs(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=Xs.exec(t);if(!i)continue;let o=i[2];if(i[1]===`-`&&o.length>1&&!i[3]&&!n.has(o)){let e=ec(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 nc(e){return{stdout:``,stderr:`error: unknown ${e.length===1?`switch`:`option`} \`${e}\`\n`,exitCode:129}}function rc(e,t){if(!t)return;let n=tc(e,t);return n?nc(n):void 0}function R(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 ic(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 ac(e,t){if(!(e instanceof Error))return sc(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=>ac(e,t)).join(`
15
- `)}return sc(ic(e.message)??e.message,t)}function oc(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 sc(e,t){if(!/\b401\b|Unauthorized/i.test(e))return e;if(t!==void 0){if(!oc(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 cc={refresh:!1},lc=new Set([`never`,`false`,`0`,`off`,`no`]),uc=new Set([`always`,`true`,`1`,`on`,`yes`]),dc=/^(--?)([^=]+)(=.*)?$/,fc=$s();function pc(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 mc(e){let t,n=e.indexOf(`--`),r=n===-1?e:e.slice(0,n);for(let e=0;e<r.length;e++){if(gc(r,e))continue;let n=r[e];if(n===`--no-color`){t=`never`;continue}if(n===`--color`){t=`always`;continue}n.startsWith(`--color=`)&&(t=pc(n.slice(8))??t)}return t}function hc(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(gc(e,r,t)){n.push(i);continue}if(i.startsWith(`--color=`)){let e=_c(i.slice(8));e&&n.push(e);continue}n.push(i)}return n}function gc(e,t,n=-1){if(t===0||n!==-1&&t-1>=n)return!1;let r=e[t-1],i=dc.exec(r);return!i||i[3]?!1:fc.has(i[2])}function _c(e){let t=e.toLowerCase();if(lc.has(t))return`--no-color`;if(uc.has(t))return`--color`}function vc(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(pc(e.colorUi));return i===void 0?!e.noColorEnv&&t:i}function yc(e,t,n){return e?`\x1b[${t}m${n}\x1b[0m`:n}async function bc(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 j({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 Dn({fs:e.lfs,dir:t,ref:a}),{stdout:`Deleted branch ${a}\n`,stderr:``,exitCode:0};if(a&&!r)return await vn({fs:e.lfs,dir:t,ref:a}),{stdout:``,stderr:``,exitCode:0};let o=await Zt({fs:e.lfs,dir:t}),s=await j({fs:e.lfs,dir:t}),c=``;for(let t of o)c+=t===s?`* ${yc(e.useColor,`32`,t)}\n`:` ${t}\n`;if(i)try{let n=await Zt({fs:e.lfs,dir:t,remote:`origin`});for(let t of n)c+=` ${yc(e.useColor,`31`,`remotes/origin/${t}`)}\n`}catch{}return{stdout:c,stderr:``,exitCode:0}}async function xc(e,t,n){let r=n.includes(`-b`),i=n.includes(`-f`)||n.includes(`--force`),a=n.indexOf(`--`);if(a!==-1){let r=n.slice(a+1);if(r.length===0)return{stdout:``,stderr:`error: you must specify path(s) to restore
16
- `,exitCode:1};let i=n.slice(0,a).filter(e=>!e.startsWith(`-`))[0];return Ec(e,t,r,i)}let o=n.find(e=>!e.startsWith(`-`));if(!o)return{stdout:``,stderr:`error: you must specify path(s) or a branch to checkout
17
- `,exitCode:1};if(r){let r=n.indexOf(`-b`),a=n.slice(r+1).filter(e=>!e.startsWith(`-`)),s=a.length>1?a[1]:void 0;try{await vn({fs:e.lfs,dir:t,ref:o,object:s,checkout:!1,force:i})}catch(e){return Tc(e,o)}try{await Sc(e,t,o,i)}catch(n){if(!i)try{await Dn({fs:e.lfs,dir:t,ref:o})}catch{}return Tc(n,o)}return await e.fs.flush(),{stdout:`Switched to a new branch '${o}'\n`,stderr:``,exitCode:0}}try{await Sc(e,t,o,i)}catch(e){return Tc(e,o)}return await e.fs.flush(),{stdout:`Switched to branch '${o}'\n`,stderr:``,exitCode:0}}async function Sc(e,t,n,r){let i;try{i=await D({fs:e.lfs,dir:t,ref:`HEAD`})}catch{i=void 0}let a=new Set(await O({fs:e.lfs,cache:e.cache,dir:t}));await En({fs:e.lfs,cache:e.cache,dir:t,ref:n,force:r});let o=await D({fs:e.lfs,dir:t,ref:n}),s=new Set(await O({fs:e.lfs,cache:e.cache,dir:t,ref:o}));await Cc(e,t,a,s),!(!r&&i===o)&&await wc(e,t,o,a,s)}async function Cc(e,t,n,r){for(let i of n)if(!r.has(i)){try{await cn({fs:e.lfs,cache:e.cache,dir:t,filepath:i})}catch{}try{await e.fs.rm(`${t}/${i}`)}catch{}}}async function wc(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 Qt({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 zn({fs:e.lfs,cache:e.cache,dir:t,filepath:a,ref:n})}}function Tc(e,t){if(e instanceof Error&&e.name===`MultipleGitError`)return{stdout:``,stderr:`error: unable to checkout '${t}':\n${ac(e).split(`
13
+ `,stderr:``,exitCode:0}}};async function Us(e){let t=`pendingMount:term:${e}`,n;try{n=await Jt(t)}catch{return null}if(!n)return null;try{await Kt(n)}catch{return null}return Qe.fromHandle(n,{mountId:at()})}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 Gs(e,t,a);else if(o.includes(`.`))await Ks(e,t,a);else if(i)await qs(e,t,a);else for(let n of o)await _n({fs:e.lfs,cache:e.cache,dir:t,filepath:n,force:a});return{stdout:``,stderr:``,exitCode:0}}async function Gs(e,t,n){let r=await k({fs:e.lfs,cache:e.cache,dir:t});for(let[i,,a,o]of r)a!==o&&(a===0?await ln({fs:e.lfs,cache:e.cache,dir:t,filepath:i}):await _n({fs:e.lfs,cache:e.cache,dir:t,filepath:i,force:n}))}async function Ks(e,t,n){let r=await k({fs:e.lfs,cache:e.cache,dir:t});for(let[i,,a,o]of r)a!==o&&a!==0&&await _n({fs:e.lfs,cache:e.cache,dir:t,filepath:i,force:n})}async function qs(e,t,n){let r=await k({fs:e.lfs,cache:e.cache,dir:t});for(let[i,a,o,s]of r)a!==0&&o!==s&&(o===0?await ln({fs:e.lfs,cache:e.cache,dir:t,filepath:i}):await _n({fs:e.lfs,cache:e.cache,dir:t,filepath:i,force:n}))}const Js={boolean:[`dry-run`,`force`,`d`,`x`,`X`,`quiet`],alias:{n:`dry-run`,f:`force`,q:`quiet`}},L={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:Js,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`}}},Ys=/^(--?)([^=]+)(=.*)?$/;function Xs(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 Zs(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 Qs(){let e=new Set([`c`,`C`,`git-dir`,`work-tree`]);for(let t of Object.values(L))for(let n of Zs(t))e.add(n);return e}function $s(e,t,n){for(let r of e){if(!t.has(r))return r;if(n.has(r))return}}function ec(e,t){let n=Xs(t),r=Zs(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=Ys.exec(t);if(!i)continue;let o=i[2];if(i[1]===`-`&&o.length>1&&!i[3]&&!n.has(o)){let e=$s(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 tc(e){return{stdout:``,stderr:`error: unknown ${e.length===1?`switch`:`option`} \`${e}\`\n`,exitCode:129}}function nc(e,t){if(!t)return;let n=ec(e,t);return n?tc(n):void 0}function R(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 rc(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 ic(e,t){if(!(e instanceof Error))return oc(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=>ic(e,t)).join(`
15
+ `)}return oc(rc(e.message)??e.message,t)}function ac(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 oc(e,t){if(!/\b401\b|Unauthorized/i.test(e))return e;if(t!==void 0){if(!ac(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 sc={refresh:!1},cc=new Set([`never`,`false`,`0`,`off`,`no`]),lc=new Set([`always`,`true`,`1`,`on`,`yes`]),uc=/^(--?)([^=]+)(=.*)?$/,dc=Qs();function fc(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 pc(e){let t,n=e.indexOf(`--`),r=n===-1?e:e.slice(0,n);for(let e=0;e<r.length;e++){if(hc(r,e))continue;let n=r[e];if(n===`--no-color`){t=`never`;continue}if(n===`--color`){t=`always`;continue}n.startsWith(`--color=`)&&(t=fc(n.slice(8))??t)}return t}function mc(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(hc(e,r,t)){n.push(i);continue}if(i.startsWith(`--color=`)){let e=gc(i.slice(8));e&&n.push(e);continue}n.push(i)}return n}function hc(e,t,n=-1){if(t===0||n!==-1&&t-1>=n)return!1;let r=e[t-1],i=uc.exec(r);return!i||i[3]?!1:dc.has(i[2])}function gc(e){let t=e.toLowerCase();if(cc.has(t))return`--no-color`;if(lc.has(t))return`--color`}function _c(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(fc(e.colorUi));return i===void 0?!e.noColorEnv&&t:i}function vc(e,t,n){return e?`\x1b[${t}m${n}\x1b[0m`:n}async function yc(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 j({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 On({fs:e.lfs,dir:t,ref:a}),{stdout:`Deleted branch ${a}\n`,stderr:``,exitCode:0};if(a&&!r)return await yn({fs:e.lfs,dir:t,ref:a}),{stdout:``,stderr:``,exitCode:0};let o=await Qt({fs:e.lfs,dir:t}),s=await j({fs:e.lfs,dir:t}),c=``;for(let t of o)c+=t===s?`* ${vc(e.useColor,`32`,t)}\n`:` ${t}\n`;if(i)try{let n=await Qt({fs:e.lfs,dir:t,remote:`origin`});for(let t of n)c+=` ${vc(e.useColor,`31`,`remotes/origin/${t}`)}\n`}catch{}return{stdout:c,stderr:``,exitCode:0}}async function bc(e,t,n){let r=n.includes(`-b`),i=n.includes(`-f`)||n.includes(`--force`),a=n.indexOf(`--`);if(a!==-1){let r=n.slice(a+1);if(r.length===0)return{stdout:``,stderr:`error: you must specify path(s) to restore
16
+ `,exitCode:1};let i=n.slice(0,a).filter(e=>!e.startsWith(`-`))[0];return Tc(e,t,r,i)}let o=n.find(e=>!e.startsWith(`-`));if(!o)return{stdout:``,stderr:`error: you must specify path(s) or a branch to checkout
17
+ `,exitCode:1};if(r){let r=n.indexOf(`-b`),a=n.slice(r+1).filter(e=>!e.startsWith(`-`)),s=a.length>1?a[1]:void 0;try{await yn({fs:e.lfs,dir:t,ref:o,object:s,checkout:!1,force:i})}catch(e){return wc(e,o)}try{await xc(e,t,o,i)}catch(n){if(!i)try{await On({fs:e.lfs,dir:t,ref:o})}catch{}return wc(n,o)}return await e.fs.flush(),{stdout:`Switched to a new branch '${o}'\n`,stderr:``,exitCode:0}}try{await xc(e,t,o,i)}catch(e){return wc(e,o)}return await e.fs.flush(),{stdout:`Switched to branch '${o}'\n`,stderr:``,exitCode:0}}async function xc(e,t,n,r){let i;try{i=await D({fs:e.lfs,dir:t,ref:`HEAD`})}catch{i=void 0}let a=new Set(await O({fs:e.lfs,cache:e.cache,dir:t}));await Dn({fs:e.lfs,cache:e.cache,dir:t,ref:n,force:r});let o=await D({fs:e.lfs,dir:t,ref:n}),s=new Set(await O({fs:e.lfs,cache:e.cache,dir:t,ref:o}));await Sc(e,t,a,s),!(!r&&i===o)&&await Cc(e,t,o,a,s)}async function Sc(e,t,n,r){for(let i of n)if(!r.has(i)){try{await ln({fs:e.lfs,cache:e.cache,dir:t,filepath:i})}catch{}try{await e.fs.rm(`${t}/${i}`)}catch{}}}async function Cc(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 $t({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 Bn({fs:e.lfs,cache:e.cache,dir:t,filepath:a,ref:n})}}function wc(e,t){if(e instanceof Error&&e.name===`MultipleGitError`)return{stdout:``,stderr:`error: unable to checkout '${t}':\n${ic(e).split(`
18
18
  `).map(e=>` ${e}`).join(`
19
- `)}\n`,exitCode:1};throw e}async function Ec(e,t,n,r){let i=r??`HEAD`,a=await D({fs:e.lfs,dir:t,ref:i});for(let r of n){let{blob:n}=await Qt({fs:e.lfs,cache:e.cache,dir:t,oid:a,filepath:r}),i=r.lastIndexOf(`/`);i!==-1&&await e.fs.mkdir(`${t}/${r.slice(0,i)}`,{recursive:!0}),await e.fs.writeFile(`${t}/${r}`,n),await gn({fs:e.lfs,cache:e.cache,dir:t,filepath:r})}return await e.fs.flush(),{stdout:``,stderr:``,exitCode:0}}function Dc(e={}){let{favor:t,diff3:n,labels:r}=e;return({contents:e,branches:i})=>{let[a,o,s]=e,c=Je(o??``,a??``,s??``,{favor:t,diff3:n,labels:{current:r?.current??i[1]??`ours`,base:r?.base??i[0]??`base`,other:r?.other??i[2]??`theirs`}});return{cleanMerge:t!==void 0||c.conflicts===0,mergedText:c.content}}}async function Oc(e,t,n){let r=kc(n),i=await Mc(e,t,r.base);for(let n of r.steps)if(n.kind===`first-parent`)for(let r=0;r<n.count;r++)i=await Pc(e,t,i,1);else i=await Pc(e,t,i,n.count);return i}function kc(e){if(e.includes(`@{`))throw Error(`reflog selectors are unsupported`);let t=/^(.+?)(?:(~[0-9]*|\^[0-9]*))*$/.exec(e);if(!t)throw Error(`invalid revision`);let n=t[1],r=e.slice(n.length),i=r.match(/~[0-9]*|\^[0-9]*/g)??[];if(i.join(``)!==r)throw Error(`invalid revision`);return{base:n,steps:i.map(e=>{let t=e.length===1?1:Number(e.slice(1));return{kind:e[0]===`~`?`first-parent`:`parent`,count:t}})}}async function Ac(e,t,n){try{return await Oc(e,t,n)}catch{return}}const jc=/^[0-9a-f]{4,40}$/i;async function Mc(e,t,n){if(n===`FETCH_HEAD`)return await Nc(e,t);try{return await D({fs:e.lfs,dir:t,ref:n})}catch(e){if(!jc.test(n))throw e}return await Fn({fs:e.lfs,cache:e.cache,dir:t,oid:n})}async function Nc(e,t){let n=await Ln({fs:e.lfs,filepath:t}),r;try{let t=await e.lfs.readFile(`${n}/.git/FETCH_HEAD`,{encoding:`utf8`});r=typeof t==`string`?t:new TextDecoder().decode(t)}catch{throw Error(`Could not find FETCH_HEAD.`)}let i=r.split(`
20
- `).find(e=>e.trim().length>0)?.split(/[\t ]/)[0];if(!i||!jc.test(i)||i.length!==40)throw Error(`Could not find FETCH_HEAD.`);return i.toLowerCase()}async function Pc(e,t,n,r){if(r<1)return n;let{commit:i}=await A({fs:e.lfs,cache:e.cache,dir:t,oid:n}),a=i.parent[r-1];if(!a)throw Error(`missing parent`);return a}function Fc(e){return e.replace(/^\.\//,``).replace(/\/+$/,``)}function Ic(e,t){return t.length===0||t.some(t=>{let n=Fc(t);return n===``||e===n||e.startsWith(`${n}/`)})}function Lc(e,t){return t.length===0||t.some(t=>{let n=Fc(t);return n===``||e===n||e.startsWith(`${n}/`)||n.startsWith(`${e}/`)})}async function Rc(e,t,n){let{flags:r,positionals:i}=M(n,L[`cherry-pick`]),a=r[`no-commit`]===!0,o=r.x===!0,s=i[0];if(!s)return{stdout:``,stderr:`error: empty commit set passed
21
- `,exitCode:128};let c=await Ac(e,t,s);if(c===void 0)return{stdout:``,stderr:`fatal: bad revision '${s}'\n`,exitCode:128};try{let n=await Pn({fs:e.lfs,cache:e.cache,dir:t,oid:c,abortOnConflict:!1,noUpdateBranch:a,committer:await e.resolveAuthor(t),mergeDriver:Dc()});if(a)return{stdout:``,stderr:``,exitCode:0};let r=n,{commit:i}=await A({fs:e.lfs,cache:e.cache,dir:t,oid:n});if(o){let n=i.message.replace(/\s+$/,``);r=await bn({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 j({fs:e.lfs,dir:t}),l=i.message.split(`
22
- `)[0];return{stdout:`[${s??`HEAD`} ${r.slice(0,7)}] ${l}\n`,stderr:``,exitCode:0}}catch(e){return zc(e,c)}}function zc(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>',
19
+ `)}\n`,exitCode:1};throw e}async function Tc(e,t,n,r){let i=r??`HEAD`,a=await D({fs:e.lfs,dir:t,ref:i});for(let r of n){let{blob:n}=await $t({fs:e.lfs,cache:e.cache,dir:t,oid:a,filepath:r}),i=r.lastIndexOf(`/`);i!==-1&&await e.fs.mkdir(`${t}/${r.slice(0,i)}`,{recursive:!0}),await e.fs.writeFile(`${t}/${r}`,n),await _n({fs:e.lfs,cache:e.cache,dir:t,filepath:r})}return await e.fs.flush(),{stdout:``,stderr:``,exitCode:0}}function Ec(e={}){let{favor:t,diff3:n,labels:r}=e;return({contents:e,branches:i})=>{let[a,o,s]=e,c=Ye(o??``,a??``,s??``,{favor:t,diff3:n,labels:{current:r?.current??i[1]??`ours`,base:r?.base??i[0]??`base`,other:r?.other??i[2]??`theirs`}});return{cleanMerge:t!==void 0||c.conflicts===0,mergedText:c.content}}}async function Dc(e,t,n){let r=Oc(n),i=await jc(e,t,r.base);for(let n of r.steps)if(n.kind===`first-parent`)for(let r=0;r<n.count;r++)i=await Nc(e,t,i,1);else i=await Nc(e,t,i,n.count);return i}function Oc(e){if(e.includes(`@{`))throw Error(`reflog selectors are unsupported`);let t=/^(.+?)(?:(~[0-9]*|\^[0-9]*))*$/.exec(e);if(!t)throw Error(`invalid revision`);let n=t[1],r=e.slice(n.length),i=r.match(/~[0-9]*|\^[0-9]*/g)??[];if(i.join(``)!==r)throw Error(`invalid revision`);return{base:n,steps:i.map(e=>{let t=e.length===1?1:Number(e.slice(1));return{kind:e[0]===`~`?`first-parent`:`parent`,count:t}})}}async function kc(e,t,n){try{return await Dc(e,t,n)}catch{return}}const Ac=/^[0-9a-f]{4,40}$/i;async function jc(e,t,n){if(n===`FETCH_HEAD`)return await Mc(e,t);try{return await D({fs:e.lfs,dir:t,ref:n})}catch(e){if(!Ac.test(n))throw e}return await In({fs:e.lfs,cache:e.cache,dir:t,oid:n})}async function Mc(e,t){let n=await Rn({fs:e.lfs,filepath:t}),r;try{let t=await e.lfs.readFile(`${n}/.git/FETCH_HEAD`,{encoding:`utf8`});r=typeof t==`string`?t:new TextDecoder().decode(t)}catch{throw Error(`Could not find FETCH_HEAD.`)}let i=r.split(`
20
+ `).find(e=>e.trim().length>0)?.split(/[\t ]/)[0];if(!i||!Ac.test(i)||i.length!==40)throw Error(`Could not find FETCH_HEAD.`);return i.toLowerCase()}async function Nc(e,t,n,r){if(r<1)return n;let{commit:i}=await A({fs:e.lfs,cache:e.cache,dir:t,oid:n}),a=i.parent[r-1];if(!a)throw Error(`missing parent`);return a}function Pc(e){return e.replace(/^\.\//,``).replace(/\/+$/,``)}function Fc(e,t){return t.length===0||t.some(t=>{let n=Pc(t);return n===``||e===n||e.startsWith(`${n}/`)})}function Ic(e,t){return t.length===0||t.some(t=>{let n=Pc(t);return n===``||e===n||e.startsWith(`${n}/`)||n.startsWith(`${e}/`)})}async function Lc(e,t,n){let{flags:r,positionals:i}=M(n,L[`cherry-pick`]),a=r[`no-commit`]===!0,o=r.x===!0,s=i[0];if(!s)return{stdout:``,stderr:`error: empty commit set passed
21
+ `,exitCode:128};let c=await kc(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:Ec()});if(a)return{stdout:``,stderr:``,exitCode:0};let r=n,{commit:i}=await A({fs:e.lfs,cache:e.cache,dir:t,oid:n});if(o){let n=i.message.replace(/\s+$/,``);r=await xn({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 j({fs:e.lfs,dir:t}),l=i.message.split(`
22
+ `)[0];return{stdout:`[${s??`HEAD`} ${r.slice(0,7)}] ${l}\n`,stderr:``,exitCode:0}}catch(e){return Rc(e,c)}}function Rc(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: ${ac(e)}\n`,exitCode:128}}async function Bc(e,t,n){let r=M(n,Ys),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 k({fs:e.lfs,cache:e.cache,dir:t,...cc}),f=Vc(d),p=d.filter(([,e,t,n])=>e===0&&t===2&&n===0).map(([e])=>e),m;if(c||s){let n=(await k({fs:e.lfs,cache:e.cache,dir:t,ignored:!0,...cc})).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=>Uc(e,t))));let h=new Set,g=new Set;for(let e of m){let t=Hc(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 Vc(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 Hc(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 Uc(e,t){let n=t.endsWith(`/`)?t.slice(0,-1):t;return e===n||e.startsWith(`${n}/`)}let Wc=null;function Gc(){return Wc||=g(),Wc}async function*Kc(e,t,n){t&&t({phase:`Receiving`,loaded:e.length,total:n??e.length}),yield e}function qc(){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 Gc()(t,{method:n,headers:r,body:o}),c=parseInt(s.headers[`content-length`]??`0`,10)||void 0,l=Kc(s.body,a,c);return{url:s.url,method:n,headers:s.headers,body:l,statusCode:s.status,statusMessage:s.statusText}}}}const Jc=qc();async function Yc(e,t,n){let r=rc(n,L.clone);if(r)return r;let{flags:i,positionals:a}=M(n,L.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=x(l.startsWith(`/`)?l:`${t}/${l}`),d=R(o,`depth`),f=R(o,`branch`),p=o[`single-branch`]!==!1,m=s?``:`Cloning into '${l}'...\n`,h=Xc(c,t);if(h)return Zc(e,h,u,c,l,m,f,s);try{await yn({fs:e.lfs,cache:e.cache,http:Jc,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 $c(e,u,c)}if(await e.fs.flush(),!s)try{let t=await O({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 Xc(e,t){if(e.startsWith(`file://`))try{return x(decodeURIComponent(new URL(e).pathname))}catch{return null}return e.startsWith(`/`)?x(e):e.startsWith(`./`)||e.startsWith(`../`)?x(S(t,e)):null}async function Zc(e,t,n,r,i,a,o,s=!1){if(n===t||n.startsWith(`${t}/`))return $c(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 $c(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 j({fs:e.lfs,dir:t});if(await Qc(e,`${t}/.git`,`${n}/.git`),c&&await En({fs:e.lfs,cache:e.cache,dir:n,ref:c,force:!0}),await kn({fs:e.lfs,dir:n,remote:`origin`,url:r,force:!0}),await e.fs.flush(),!s){let t=await O({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 $c(e,n,r)}}async function Qc(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 Qc(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 $c(e,t,n){return{stdout:``,stderr:`fatal: ${ac(e,n).replace(/'\/__opfs__\/[^']*<path>'/g,`'${t}'`).replace(/\/__opfs__\/[^\s'"<]*<path>/g,t).replace(/<path>/g,t)}\n`,exitCode:128}}const el=[`MERGE_HEAD`,`MERGE_MSG`,`MERGE_MODE`,`AUTO_MERGE`];async function tl(e,t){return`${await Ln({fs:e.lfs,filepath:t})}/.git`}async function nl(e,t){try{return(await e.fs.readTextFile(t)).trim()}catch{return}}async function rl(e,t){try{await e.fs.rm(t)}catch{}}async function il(e,t){try{return await nl(e,`${await tl(e,t)}/MERGE_HEAD`)}catch{return}}async function al(e,t){return await il(e,t)!==void 0}async function ol(e,t){try{return await nl(e,`${await tl(e,t)}/MERGE_MSG`)}catch{return}}async function sl(e,t,n){let r=await tl(e,t);await e.fs.writeFile(`${r}/ORIG_HEAD`,`${n}\n`)}async function cl(e,t,n,r){let i=await tl(e,t);await e.fs.writeFile(`${i}/MERGE_HEAD`,`${n}\n`),await e.fs.writeFile(`${i}/MERGE_MSG`,r.endsWith(`
27
- `)?r:`${r}\n`)}async function ll(e,t){let n;try{n=await tl(e,t)}catch{return}await Promise.all(el.map(t=>rl(e,`${n}/${t}`)))}async function ul(e,t){let n=await O({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 dl=new Set([`message`,`author`,`date`,`file`,`cleanup`,`amend`,`all`,`allow-empty`,`m`,`a`,`F`]);async function fl(e,t,n){let r=wl(n),i=M(r,L.commit).flags,a=await il(e,t),o=await Sl(e,t,i);if(typeof o!=`string`){if(a){let n=await ol(e,t);if(n)return await pl(e,t,i,n,a)}return o}return await pl(e,t,i,o,a)}async function pl(e,t,n,r,i){let a=n.amend===!0,o=n.all===!0,s=n[`allow-empty`]===!0;if(o&&await Cl(e,t),!s&&!a&&!i&&!(await k({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 bn({fs:e.lfs,cache:e.cache,dir:t,message:r,author:await e.resolveAuthor(t),amend:a,noUpdateBranch:void 0,...i?{parent:[await D({fs:e.lfs,dir:t,ref:`HEAD`}),i]}:{}});i&&await ll(e,t);let l=c.slice(0,7);return{stdout:`[${await j({fs:e.lfs,dir:t})??`HEAD`} ${l}] ${r}\n`,stderr:``,exitCode:0}}function ml(e,t){let n=e[t];if(n!==void 0&&n!==!0&&n!==!1)return R(e,t)}function hl(e){return Object.keys(e).find(e=>!dl.has(e))}function gl(e){return{stdout:``,stderr:`error: unknown ${e.length===1?`switch`:`option`} \`${e}\`\n`,exitCode:129}}function _l(e){return{stdout:``,stderr:`error: switch \`${e}\` requires a value\n`,exitCode:1}}function vl(e){let t=hl(e);return t?gl(t):`message`in e||`m`in e?_l(`m`):`file`in e||`F`in e?_l(`F`):{stdout:``,stderr:"error: option `-m' or `-F' is required\n",exitCode:1}}function yl(){return{stdout:``,stderr:`Aborting commit due to empty commit message.
29
- `,exitCode:1}}function bl(e){return{stdout:``,stderr:`error: could not read log file '${e}': No such file or directory\n`,exitCode:128}}async function xl(e,t,n){if(n===`-`)return e.stdin;let r=n.startsWith(`/`)?n:`${t}/${n}`;try{return await e.fs.readTextFile(r)}catch{return bl(n)}}async function Sl(e,t,n){let r=ml(n,`message`);if(r!==void 0)return r;let i=ml(n,`file`);if(i!==void 0){let n=await xl(e,t,i);return typeof n==`string`&&n===``?yl():n}return vl(n)}async function Cl(e,t){let n=await k({fs:e.lfs,cache:e.cache,dir:t});for(let[r,i,a,o]of n)i!==0&&a!==o&&(a===0?await cn({fs:e.lfs,cache:e.cache,dir:t,filepath:r}):await gn({fs:e.lfs,cache:e.cache,dir:t,filepath:r}))}function wl(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 Tl(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 kl(e,t,a);if(i)return El(e,t,o,a);if(!o)return{stdout:``,stderr:`usage: git config [--global] [--list] [--unset] <key> [<value>]
30
- `,exitCode:1};let s=n.indexOf(o),c;for(let e=s+1;e<n.length;e++)if(!n[e].startsWith(`-`)){c=n[e];break}return c===void 0?Ol(e,t,o,a):Dl(e,t,o,c,a)}async function El(e,t,n,r){if(!n)return{stdout:``,stderr:`error: key required for --unset
31
- `,exitCode:1};if(n===`credential.token`||n===`github.token`)return await e.setGithubToken(``),{stdout:``,stderr:``,exitCode:0};if(r){let t=await e.getGlobalFs();try{let e=await t.readTextFile(sr),r=ar(e,n);await t.writeFile(sr,r)}catch{}}else try{let r=`${t}/.git/config`,i=await e.fs.readTextFile(r),a=ar(i,n);await e.fs.writeFile(r,a)}catch{}return{stdout:``,stderr:``,exitCode:0}}async function Dl(e,t,n,r,i){return n===`credential.token`||n===`github.token`?(await e.setGithubToken(r),{stdout:``,stderr:``,exitCode:0}):(i?await ir(await e.getGlobalFs(),n,r):await fn({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 Ol(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 or(await e.getGlobalFs(),n):(i=await ln({fs:e.lfs,dir:t,path:n}),i||=await or(await e.getGlobalFs(),n)),{stdout:i?`${i}\n`:``,stderr:``,exitCode:+!i}}async function kl(e,t,n){let r=``;if(!n)try{let n=`${t}/.git/config`,i=await e.fs.readTextFile(n);r+=Al(i)}catch{}try{let t=await(await e.getGlobalFs()).readTextFile(sr);r+=Al(t)}catch{}return{stdout:r,stderr:``,exitCode:0}}function Al(e){let t=``,n=``,r=``;for(let i of e.split(`
32
- `)){let e=i.trim();if(!e||e.startsWith(`#`)||e.startsWith(`;`))continue;let a=e.match(/^\[(\w+)(?:\s+"([^"]*)")?\]$/);if(a){n=a[1].toLowerCase(),r=a[2]??``;continue}let o=e.match(/^(\w+)\s*=\s*(.*)$/);if(o&&n){let e=o[1],i=o[2].trim(),a=r?`${n}.${r}.${e}`:`${n}.${e}`;t+=`${a}=${i}\n`}}return t}const jl=`/dev/null`,Ml={bytes:new Uint8Array,text:``,binary:!1};async function Nl(e,t,n,r){if(n.length!==2)return{stdout:``,stderr:`usage: git diff --no-index [<options>] <path> <path>
33
- `,exitCode:129};let[i,a]=await Promise.all([zl(e,t,n[0]),zl(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 Hl(e,i,a)]).filter(e=>!Pl(e.oldBlob.bytes,e.newBlob.bytes));return s.length===0?{stdout:``,stderr:``,exitCode:0}:{stdout:Fl(s,r,e.useColor),stderr:``,exitCode:1}}function Pl(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 Fl(e,t,n){if(t.nameOnly)return`${e.map(e=>e.absent===`new`?jl:e.newName).join(`
34
- `)}\n`;if(t.stat)return Ke(e.map(Ll),{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 ${Il(i,`old`)} and ${Il(i,`new`)} differ\n`;continue}r+=qe({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 Il(e,t){return e.absent===t?jl:t===`old`?`a/${e.oldName}`:`b/${e.newName}`}function Ll(e){return{name:Rl(e.absent===`old`?jl:e.oldName,e.absent===`new`?jl: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 Rl(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 zl(e,t,n){if(n===jl)return{kind:`null`,given:n};let r=x(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 zl(e,t,`${n.given}/${Vl(r.given)}`),r]:r.kind===`dir`&&(n.kind===`file`||n.kind===`null`)?[n,await zl(e,t,`${r.given}/${Vl(n.given)}`)]:[n,r]}function Vl(e){let t=e.lastIndexOf(`/`);return t===-1?e:e.slice(t+1)}async function Hl(e,t,n){let[r,i]=await Promise.all([Ul(e,t),Ul(e,n)]),a=t.kind===`null`?`old`:n.kind===`null`?`new`:void 0,o=ql(t.kind===`null`?n.given:t.given);return{oldName:a?o:ql(t.given),newName:a?o:ql(n.given),absent:a,oldBlob:r,newBlob:i}}function Ul(e,t){return t.kind===`file`?Kl(e,t.abs):Promise.resolve(Ml)}async function Wl(e,t,n){let[r,i]=await Promise.all([Gl(e,t.abs),Gl(e,n.abs)]),a=[...new Set([...r,...i])].sort(),o=[];for(let s of a){let a=ql(`${t.given}/${s}`),c=ql(`${n.given}/${s}`);i.has(s)?r.has(s)?o.push({oldName:a,newName:c,oldBlob:await Kl(e,`${t.abs}/${s}`),newBlob:await Kl(e,`${n.abs}/${s}`)}):o.push({oldName:c,newName:c,absent:`old`,oldBlob:Ml,newBlob:await Kl(e,`${n.abs}/${s}`)}):o.push({oldName:a,newName:a,absent:`new`,oldBlob:await Kl(e,`${t.abs}/${s}`),newBlob:Ml})}return o}async function Gl(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 Kl(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 ql(e){return e.replace(/^\/+/,``)}function Jl(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 Yl(e,t,n){let r=lu(n),i=rc(r,L.diff);if(i)return i;let{flags:a,positionals:o,doubleDashRest:s}=M(r,L.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:uu(a.unified)};if(a[`no-index`]===!0||a.index===!1)return Nl(e,t,o,u);if(o.length>=2)return tu(e,t,o[0],o[1],u);if(o.length===1){let n=du(o[0]);if(n)return nu(e,t,n[0],n[1],u);let r=fu(o[0]);return r?tu(e,t,r[0],r[1],u):c?Zl(e,t,o[0],u):iu(e,t,o[0],u)}return cu(e,c?await Xl(e,t,u.pathspecs):await Ql(e,t,u.pathspecs),u)}async function Xl(e,t,n=[],r=`HEAD`){let i=[];return await $t({fs:e.lfs,cache:e.cache,dir:t,trees:[On({ref:r}),Nn()],iterate:Jl(e=>Lc(e,n)),map:async(r,[a,o])=>{if(r===`.`||r===`.git`||r.startsWith(`.git/`)||!Ic(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 eu(e,t,l),f=await eu(e,t,u);i.push({filepath:r,oldContent:d,newContent:f,oldPresent:!!l,newPresent:!!u})}}),i}async function Zl(e,t,n,r){let i;try{i=await Oc(e,t,n)}catch{return mu(n)}return cu(e,await Xl(e,t,r.pathspecs,i),r)}async function Ql(e,t,n=[]){let r=[];return await $t({fs:e.lfs,cache:e.cache,dir:t,trees:[Nn(),jn(cc)],iterate:Jl((e,[t])=>t===!0&&Lc(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`||!Ic(i,n))return null;let c=await a.oid(),l=await $l(o);if(l&&c&&(await Xt({object:l})).oid===c)return null;let u=await eu(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 $l(e){if(e)try{return await e.type()===`blob`?await e.content()??void 0:void 0}catch{return}}async function eu(e,t,n){if(!n)return``;try{let{blob:r}=await Qt({fs:e.lfs,dir:t,oid:n,cache:e.cache});return new TextDecoder().decode(r)}catch{return``}}async function tu(e,t,n,r,i){try{return await ru(e,t,await Oc(e,t,n),await Oc(e,t,r),i)}catch{return mu(await pu(e,t,[n,r])??n)}}async function nu(e,t,n,r,i){let a=n||`HEAD`,o=r||`HEAD`;try{let n=await Oc(e,t,a),r=await Oc(e,t,o),s=await _n({fs:e.lfs,cache:e.cache,dir:t,oids:[n,r]});return s[0]?await ru(e,t,s[0],r,i):{stdout:``,stderr:`fatal: '${a}...${o}' has no merge base\n`,exitCode:128}}catch{return mu(await pu(e,t,[a,o])??a)}}async function ru(e,t,n,r,i){let a=[];return await $t({fs:e.lfs,cache:e.cache,dir:t,trees:[On({ref:n}),On({ref:r})],iterate:Jl(e=>Lc(e,i.pathspecs??[])),map:async(e,[t,n])=>{if(await ou(t,n))return null;let r=await su(e,t,n,i.pathspecs??[]);r&&a.push(r)}}),cu(e,a,i)}async function iu(e,t,n,r){let i;try{i=await Oc(e,t,n)}catch{return mu(n)}let a=new Set(await O({fs:e.lfs,dir:t,cache:e.cache})),o=au(a),s=[];return await $t({fs:e.lfs,cache:e.cache,dir:t,trees:[On({ref:i}),jn(cc)],iterate:Jl((e,[t])=>(t===!0||a.has(e)||o.has(e))&&Lc(e,r.pathspecs??[])),map:async(e,[t,n])=>{if(!t&&!a.has(e)&&!o.has(e))return null;let i=await su(e,t,n,r.pathspecs??[]);i&&s.push(i)}}),cu(e,s,r)}function au(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 ou(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 su(e,t,n,r){if(e===`.`||!Ic(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 cu(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(`
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: ${ic(e)}\n`,exitCode:128}}async function zc(e,t,n){let r=M(n,Js),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 k({fs:e.lfs,cache:e.cache,dir:t,...sc}),f=Bc(d),p=d.filter(([,e,t,n])=>e===0&&t===2&&n===0).map(([e])=>e),m;if(c||s){let n=(await k({fs:e.lfs,cache:e.cache,dir:t,ignored:!0,...sc})).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=>Hc(e,t))));let h=new Set,g=new Set;for(let e of m){let t=Vc(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 Bc(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 Vc(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 Hc(e,t){let n=t.endsWith(`/`)?t.slice(0,-1):t;return e===n||e.startsWith(`${n}/`)}let Uc=null;function Wc(){return Uc||=g(),Uc}async function*Gc(e,t,n){t&&t({phase:`Receiving`,loaded:e.length,total:n??e.length}),yield e}function Kc(){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 Wc()(t,{method:n,headers:r,body:o}),c=parseInt(s.headers[`content-length`]??`0`,10)||void 0,l=Gc(s.body,a,c);return{url:s.url,method:n,headers:s.headers,body:l,statusCode:s.status,statusMessage:s.statusText}}}}const qc=Kc();async function Jc(e,t,n){let r=nc(n,L.clone);if(r)return r;let{flags:i,positionals:a}=M(n,L.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=x(l.startsWith(`/`)?l:`${t}/${l}`),d=R(o,`depth`),f=R(o,`branch`),p=o[`single-branch`]!==!1,m=s?``:`Cloning into '${l}'...\n`,h=Yc(c,t);if(h)return Xc(e,h,u,c,l,m,f,s);try{await bn({fs:e.lfs,cache:e.cache,http:qc,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 Qc(e,u,c)}if(await e.fs.flush(),!s)try{let t=await O({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 Yc(e,t){if(e.startsWith(`file://`))try{return x(decodeURIComponent(new URL(e).pathname))}catch{return null}return e.startsWith(`/`)?x(e):e.startsWith(`./`)||e.startsWith(`../`)?x(S(t,e)):null}async function Xc(e,t,n,r,i,a,o,s=!1){if(n===t||n.startsWith(`${t}/`))return Qc(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 Qc(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 j({fs:e.lfs,dir:t});if(await Zc(e,`${t}/.git`,`${n}/.git`),c&&await Dn({fs:e.lfs,cache:e.cache,dir:n,ref:c,force:!0}),await An({fs:e.lfs,dir:n,remote:`origin`,url:r,force:!0}),await e.fs.flush(),!s){let t=await O({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 Qc(e,n,r)}}async function Zc(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 Zc(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 Qc(e,t,n){return{stdout:``,stderr:`fatal: ${ic(e,n).replace(/'\/__opfs__\/[^']*<path>'/g,`'${t}'`).replace(/\/__opfs__\/[^\s'"<]*<path>/g,t).replace(/<path>/g,t)}\n`,exitCode:128}}const $c=[`MERGE_HEAD`,`MERGE_MSG`,`MERGE_MODE`,`AUTO_MERGE`];async function el(e,t){return`${await Rn({fs:e.lfs,filepath:t})}/.git`}async function tl(e,t){try{return(await e.fs.readTextFile(t)).trim()}catch{return}}async function nl(e,t){try{await e.fs.rm(t)}catch{}}async function rl(e,t){try{return await tl(e,`${await el(e,t)}/MERGE_HEAD`)}catch{return}}async function il(e,t){return await rl(e,t)!==void 0}async function al(e,t){try{return await tl(e,`${await el(e,t)}/MERGE_MSG`)}catch{return}}async function ol(e,t,n){let r=await el(e,t);await e.fs.writeFile(`${r}/ORIG_HEAD`,`${n}\n`)}async function sl(e,t,n,r){let i=await el(e,t);await e.fs.writeFile(`${i}/MERGE_HEAD`,`${n}\n`),await e.fs.writeFile(`${i}/MERGE_MSG`,r.endsWith(`
27
+ `)?r:`${r}\n`)}async function cl(e,t){let n;try{n=await el(e,t)}catch{return}await Promise.all($c.map(t=>nl(e,`${n}/${t}`)))}async function ll(e,t){let n=await O({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 ul=new Set([`message`,`author`,`date`,`file`,`cleanup`,`amend`,`all`,`allow-empty`,`m`,`a`,`F`]);async function dl(e,t,n){let r=Cl(n),i=M(r,L.commit).flags,a=await rl(e,t),o=await xl(e,t,i);if(typeof o!=`string`){if(a){let n=await al(e,t);if(n)return await fl(e,t,i,n,a)}return o}return await fl(e,t,i,o,a)}async function fl(e,t,n,r,i){let a=n.amend===!0,o=n.all===!0,s=n[`allow-empty`]===!0;if(o&&await Sl(e,t),!s&&!a&&!i&&!(await k({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 xn({fs:e.lfs,cache:e.cache,dir:t,message:r,author:await e.resolveAuthor(t),amend:a,noUpdateBranch:void 0,...i?{parent:[await D({fs:e.lfs,dir:t,ref:`HEAD`}),i]}:{}});i&&await cl(e,t);let l=c.slice(0,7);return{stdout:`[${await j({fs:e.lfs,dir:t})??`HEAD`} ${l}] ${r}\n`,stderr:``,exitCode:0}}function pl(e,t){let n=e[t];if(n!==void 0&&n!==!0&&n!==!1)return R(e,t)}function ml(e){return Object.keys(e).find(e=>!ul.has(e))}function hl(e){return{stdout:``,stderr:`error: unknown ${e.length===1?`switch`:`option`} \`${e}\`\n`,exitCode:129}}function gl(e){return{stdout:``,stderr:`error: switch \`${e}\` requires a value\n`,exitCode:1}}function _l(e){let t=ml(e);return t?hl(t):`message`in e||`m`in e?gl(`m`):`file`in e||`F`in e?gl(`F`):{stdout:``,stderr:"error: option `-m' or `-F' is required\n",exitCode:1}}function vl(){return{stdout:``,stderr:`Aborting commit due to empty commit message.
29
+ `,exitCode:1}}function yl(e){return{stdout:``,stderr:`error: could not read log file '${e}': No such file or directory\n`,exitCode:128}}async function bl(e,t,n){if(n===`-`)return e.stdin;let r=n.startsWith(`/`)?n:`${t}/${n}`;try{return await e.fs.readTextFile(r)}catch{return yl(n)}}async function xl(e,t,n){let r=pl(n,`message`);if(r!==void 0)return r;let i=pl(n,`file`);if(i!==void 0){let n=await bl(e,t,i);return typeof n==`string`&&n===``?vl():n}return _l(n)}async function Sl(e,t){let n=await k({fs:e.lfs,cache:e.cache,dir:t});for(let[r,i,a,o]of n)i!==0&&a!==o&&(a===0?await ln({fs:e.lfs,cache:e.cache,dir:t,filepath:r}):await _n({fs:e.lfs,cache:e.cache,dir:t,filepath:r}))}function Cl(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 wl(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 Ol(e,t,a);if(i)return Tl(e,t,o,a);if(!o)return{stdout:``,stderr:`usage: git config [--global] [--list] [--unset] <key> [<value>]
30
+ `,exitCode:1};let s=n.indexOf(o),c;for(let e=s+1;e<n.length;e++)if(!n[e].startsWith(`-`)){c=n[e];break}return c===void 0?Dl(e,t,o,a):El(e,t,o,c,a)}async function Tl(e,t,n,r){if(!n)return{stdout:``,stderr:`error: key required for --unset
31
+ `,exitCode:1};if(n===`credential.token`||n===`github.token`)return await e.setGithubToken(``),{stdout:``,stderr:``,exitCode:0};if(r){let t=await e.getGlobalFs();try{let e=await t.readTextFile(cr),r=or(e,n);await t.writeFile(cr,r)}catch{}}else try{let r=`${t}/.git/config`,i=await e.fs.readTextFile(r),a=or(i,n);await e.fs.writeFile(r,a)}catch{}return{stdout:``,stderr:``,exitCode:0}}async function El(e,t,n,r,i){return n===`credential.token`||n===`github.token`?(await e.setGithubToken(r),{stdout:``,stderr:``,exitCode:0}):(i?await ar(await e.getGlobalFs(),n,r):await pn({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 Dl(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 sr(await e.getGlobalFs(),n):(i=await un({fs:e.lfs,dir:t,path:n}),i||=await sr(await e.getGlobalFs(),n)),{stdout:i?`${i}\n`:``,stderr:``,exitCode:+!i}}async function Ol(e,t,n){let r=``;if(!n)try{let n=`${t}/.git/config`,i=await e.fs.readTextFile(n);r+=kl(i)}catch{}try{let t=await(await e.getGlobalFs()).readTextFile(cr);r+=kl(t)}catch{}return{stdout:r,stderr:``,exitCode:0}}function kl(e){let t=``,n=``,r=``;for(let i of e.split(`
32
+ `)){let e=i.trim();if(!e||e.startsWith(`#`)||e.startsWith(`;`))continue;let a=e.match(/^\[(\w+)(?:\s+"([^"]*)")?\]$/);if(a){n=a[1].toLowerCase(),r=a[2]??``;continue}let o=e.match(/^(\w+)\s*=\s*(.*)$/);if(o&&n){let e=o[1],i=o[2].trim(),a=r?`${n}.${r}.${e}`:`${n}.${e}`;t+=`${a}=${i}\n`}}return t}const Al=`/dev/null`,jl={bytes:new Uint8Array,text:``,binary:!1};async function Ml(e,t,n,r){if(n.length!==2)return{stdout:``,stderr:`usage: git diff --no-index [<options>] <path> <path>
33
+ `,exitCode:129};let[i,a]=await Promise.all([Rl(e,t,n[0]),Rl(e,t,n[1])]);[i,a]=await zl(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 Ul(e,i,a):[await Vl(e,i,a)]).filter(e=>!Nl(e.oldBlob.bytes,e.newBlob.bytes));return s.length===0?{stdout:``,stderr:``,exitCode:0}:{stdout:Pl(s,r,e.useColor),stderr:``,exitCode:1}}function Nl(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 Pl(e,t,n){if(t.nameOnly)return`${e.map(e=>e.absent===`new`?Al:e.newName).join(`
34
+ `)}\n`;if(t.stat)return qe(e.map(Il),{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 ${Fl(i,`old`)} and ${Fl(i,`new`)} differ\n`;continue}r+=Je({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 Fl(e,t){return e.absent===t?Al:t===`old`?`a/${e.oldName}`:`b/${e.newName}`}function Il(e){return{name:Ll(e.absent===`old`?Al:e.oldName,e.absent===`new`?Al: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 Ll(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 Rl(e,t,n){if(n===Al)return{kind:`null`,given:n};let r=x(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 zl(e,t,n,r){return n.kind===`dir`&&(r.kind===`file`||r.kind===`null`)?[await Rl(e,t,`${n.given}/${Bl(r.given)}`),r]:r.kind===`dir`&&(n.kind===`file`||n.kind===`null`)?[n,await Rl(e,t,`${r.given}/${Bl(n.given)}`)]:[n,r]}function Bl(e){let t=e.lastIndexOf(`/`);return t===-1?e:e.slice(t+1)}async function Vl(e,t,n){let[r,i]=await Promise.all([Hl(e,t),Hl(e,n)]),a=t.kind===`null`?`old`:n.kind===`null`?`new`:void 0,o=Kl(t.kind===`null`?n.given:t.given);return{oldName:a?o:Kl(t.given),newName:a?o:Kl(n.given),absent:a,oldBlob:r,newBlob:i}}function Hl(e,t){return t.kind===`file`?Gl(e,t.abs):Promise.resolve(jl)}async function Ul(e,t,n){let[r,i]=await Promise.all([Wl(e,t.abs),Wl(e,n.abs)]),a=[...new Set([...r,...i])].sort(),o=[];for(let s of a){let a=Kl(`${t.given}/${s}`),c=Kl(`${n.given}/${s}`);i.has(s)?r.has(s)?o.push({oldName:a,newName:c,oldBlob:await Gl(e,`${t.abs}/${s}`),newBlob:await Gl(e,`${n.abs}/${s}`)}):o.push({oldName:c,newName:c,absent:`old`,oldBlob:jl,newBlob:await Gl(e,`${n.abs}/${s}`)}):o.push({oldName:a,newName:a,absent:`new`,oldBlob:await Gl(e,`${t.abs}/${s}`),newBlob:jl})}return o}async function Wl(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 Gl(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 Kl(e){return e.replace(/^\/+/,``)}function ql(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 Jl(e,t,n){let r=cu(n),i=nc(r,L.diff);if(i)return i;let{flags:a,positionals:o,doubleDashRest:s}=M(r,L.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:lu(a.unified)};if(a[`no-index`]===!0||a.index===!1)return Ml(e,t,o,u);if(o.length>=2)return eu(e,t,o[0],o[1],u);if(o.length===1){let n=uu(o[0]);if(n)return tu(e,t,n[0],n[1],u);let r=du(o[0]);return r?eu(e,t,r[0],r[1],u):c?Xl(e,t,o[0],u):ru(e,t,o[0],u)}return su(e,c?await Yl(e,t,u.pathspecs):await Zl(e,t,u.pathspecs),u)}async function Yl(e,t,n=[],r=`HEAD`){let i=[];return await en({fs:e.lfs,cache:e.cache,dir:t,trees:[kn({ref:r}),Pn()],iterate:ql(e=>Ic(e,n)),map:async(r,[a,o])=>{if(r===`.`||r===`.git`||r.startsWith(`.git/`)||!Fc(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 $l(e,t,l),f=await $l(e,t,u);i.push({filepath:r,oldContent:d,newContent:f,oldPresent:!!l,newPresent:!!u})}}),i}async function Xl(e,t,n,r){let i;try{i=await Dc(e,t,n)}catch{return pu(n)}return su(e,await Yl(e,t,r.pathspecs,i),r)}async function Zl(e,t,n=[]){let r=[];return await en({fs:e.lfs,cache:e.cache,dir:t,trees:[Pn(),Mn(sc)],iterate:ql((e,[t])=>t===!0&&Ic(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`||!Fc(i,n))return null;let c=await a.oid(),l=await Ql(o);if(l&&c&&(await Zt({object:l})).oid===c)return null;let u=await $l(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 Ql(e){if(e)try{return await e.type()===`blob`?await e.content()??void 0:void 0}catch{return}}async function $l(e,t,n){if(!n)return``;try{let{blob:r}=await $t({fs:e.lfs,dir:t,oid:n,cache:e.cache});return new TextDecoder().decode(r)}catch{return``}}async function eu(e,t,n,r,i){try{return await nu(e,t,await Dc(e,t,n),await Dc(e,t,r),i)}catch{return pu(await fu(e,t,[n,r])??n)}}async function tu(e,t,n,r,i){let a=n||`HEAD`,o=r||`HEAD`;try{let n=await Dc(e,t,a),r=await Dc(e,t,o),s=await vn({fs:e.lfs,cache:e.cache,dir:t,oids:[n,r]});return s[0]?await nu(e,t,s[0],r,i):{stdout:``,stderr:`fatal: '${a}...${o}' has no merge base\n`,exitCode:128}}catch{return pu(await fu(e,t,[a,o])??a)}}async function nu(e,t,n,r,i){let a=[];return await en({fs:e.lfs,cache:e.cache,dir:t,trees:[kn({ref:n}),kn({ref:r})],iterate:ql(e=>Ic(e,i.pathspecs??[])),map:async(e,[t,n])=>{if(await au(t,n))return null;let r=await ou(e,t,n,i.pathspecs??[]);r&&a.push(r)}}),su(e,a,i)}async function ru(e,t,n,r){let i;try{i=await Dc(e,t,n)}catch{return pu(n)}let a=new Set(await O({fs:e.lfs,dir:t,cache:e.cache})),o=iu(a),s=[];return await en({fs:e.lfs,cache:e.cache,dir:t,trees:[kn({ref:i}),Mn(sc)],iterate:ql((e,[t])=>(t===!0||a.has(e)||o.has(e))&&Ic(e,r.pathspecs??[])),map:async(e,[t,n])=>{if(!t&&!a.has(e)&&!o.has(e))return null;let i=await ou(e,t,n,r.pathspecs??[]);i&&s.push(i)}}),su(e,s,r)}function iu(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 au(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 ou(e,t,n,r){if(e===`.`||!Fc(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 su(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?hu(t,e.useColor):{stdout:t.map(t=>qe({oldContent:t.oldContent,newContent:t.newContent,oldName:t.filepath,newName:t.filepath,context:n.context,color:e.useColor})).join(``),stderr:``,exitCode:0}}function lu(e){let t=e.indexOf(`--`);return e.map((e,n)=>(t===-1||n<t)&&/^-U\d+$/.test(e)?`--unified=${e.slice(2)}`:e)}function uu(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 du(e){let t=e.indexOf(`...`);return t===-1?null:[e.slice(0,t),e.slice(t+3)]}function fu(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 pu(e,t,n){for(let r of n)try{await Oc(e,t,r)}catch{return r}return null}function mu(e){return{stdout:``,stderr:`fatal: ambiguous argument '${e}'\n`,exitCode:128}}function hu(e,t=!1){return{stdout:Ke(e.map(e=>({name:e.filepath,oldContent:e.oldContent,newContent:e.newContent})),{color:t}),stderr:``,exitCode:0}}async function gu(e,t,n,r){let i=[];if(await $t({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 hu(i.map(e=>({filepath:e.filepath,oldContent:``,newContent:e.content})),e.useColor).stdout;let a=``;for(let t of i)a+=qe({oldContent:``,newContent:t.content,oldName:t.filepath,newName:t.filepath,color:e.useColor});return a}async function _u(e,t,n){let r=rc(n,L.fetch);if(r)return r;let{flags:i,positionals:a}=M(n,L.fetch),o=i,s=a[0]??`origin`,c=a[1],l=o.prune===!0,u=o.quiet===!0,d=R(o,`depth`),f=u?``:`Fetching ${s}\n`,p=await Rn({fs:e.lfs,cache:e.cache,http:Jc,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 vu(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 vu(e,t,n,r){let i=await Ln({fs:e.lfs,filepath:t}),a=r??``;await e.fs.writeFile(`${i}/.git/FETCH_HEAD`,`${n}\t\t${a}\n`)}async function yu(e,t,n){let r=M(n,L.init).flags,i=R(r,`initial-branch`)??e.getConfigOverrides()?.get(`init.defaultbranch`)??`main`;return await In({fs:e.lfs,dir:t,defaultBranch:i}),{stdout:`Initialized empty Git repository in ${t}/.git/\n`,stderr:``,exitCode:0}}function bu(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 xu=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(!bu(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&&bu(this.heap[t],this.heap[n])&&(n=t),t+1<this.heap.length&&bu(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 Su(e,t,n){try{return await D({fs:e.lfs,dir:t,ref:n})}catch{return}}async function Cu(e,t,n,r){try{return await A({fs:e.lfs,dir:t,oid:n,cache:r})}catch{return}}async function wu(e,t,n,r,i){let a=await Zt({fs:e.lfs,dir:t});for(let[o,s]of a.entries()){let a=await Su(e,t,s);if(a===void 0||r.has(a))continue;r.add(a);let c=await Cu(e,t,a,i);c&&n.push(c,o)}}async function*Tu(e,t,n){let r=new Set,i=new xu;for(await wu(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 Cu(e,t,o,n.cache);s&&i.push(s,a.tipRank)}}}async function Eu(e,t,n){let r=[];if(n.limit<=0)return r;for await(let i of Tu(e,t,{cache:n.cache}))if(r.push(i),r.length>=n.limit)break;return r}async function Du(e,t,n){let{flags:r,positionals:i,doubleDashRest:a}=M(n,L.log),o=r,s=R(o,`max-count`),c=o.oneline===!0,l=o.stat===!0,u=o.reverse===!0,d=o.all===!0,f=R(o,`format`),p=R(o,`author`),m=R(o,`grep`),h=R(o,`follow`),g=await Ou(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 Lu(e,t,g,{format:f,oneline:c,showStat:l}),stderr:``,exitCode:0}}async function Ou(e,t,n){let r=n.revision?Vu(n.revision):null,i=r?.[1]??n.revision,a=Hu(e.cache),o=n.maxCount??10;if(n.pathspecs.length>0&&!n.all&&!r&&!n.followFile)return await Pu(e,t,{ref:i,pathspecs:n.pathspecs,limit:o,caches:a});if(n.all&&n.pathspecs.length>0)return await ju(e,t,{pathspecs:n.pathspecs,limit:o,caches:a,exclude:r?await Au(e,t,r[0],a):void 0});let s=n.all?await Eu(e,t,{limit:n.maxCount??ku,cache:a.git}):await wn({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 Au(e,t,r[0],a);s=s.filter(e=>!n.has(e.oid))}return n.pathspecs.length>0?await Iu(e,t,s,n.pathspecs,o,a):r?s.slice(0,o):s}const ku=50;async function Au(e,t,n,r){let i=await wn({fs:e.lfs,dir:t,cache:r.git,ref:n});return new Set(i.map(e=>e.oid))}async function ju(e,t,n){let r=[],i=[],a=async()=>{if(i.length>0){let a=n.limit-r.length;r.push(...await Iu(e,t,i,n.pathspecs,a,n.caches)),i=[]}return r.length>=n.limit};for await(let o of Tu(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 Mu(e){let t=e.replace(/^\.\//,``).replace(/\/+$/,``);return t===`.`?``:t}function Nu(e){let t=[...new Set(e.map(Mu))];return t.some(e=>e===``)?null:t}async function Pu(e,t,n){let r=n.ref?{ref:n.ref}:{},i=Nu(n.pathspecs);return i===null?await wn({fs:e.lfs,dir:t,cache:n.caches.git,...r,depth:n.limit}):i.length===1?(await wn({fs:e.lfs,dir:t,cache:n.caches.git,...r,filepath:i[0],depth:n.limit,force:!0})).slice(0,n.limit):await Fu(e,t,{refArg:r,specs:i,limit:n.limit,caches:n.caches})}async function Fu(e,t,n){let r=[],i=0,a=Math.max(n.limit*4,32);for(;;){let o=await wn({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 Ku(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 Iu(e,t,n,r,i,a){let o=Nu(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 Ku(e,t,r,o,a)&&s.push(r),s.length>=i)break;return s}async function Lu(e,t,n,r){let i=``;for(let a of n){let{commit:n,oid:o}=a;r.format?i+=`${Ru(o,n,r.format)}\n`:r.oneline?i+=`${yc(e.useColor,`33`,o.slice(0,7))} ${n.message.split(`
37
- `)[0]}\n`:(i+=`${yc(e.useColor,`33`,`commit ${o}`)}\n`,i+=`Author: ${n.author.name} <${n.author.email}>\n`,i+=`Date: ${new Date(n.author.timestamp*1e3).toLocaleString()}\n\n`,i+=` ${n.message.replace(/\n/g,`
38
- `)}\n\n`),r.showStat&&(i+=await Bu(e,t,a))}return i}function Ru(e,t,n){let r=new Date(t.author.timestamp*1e3);return n.replace(/%H/g,e).replace(/%h/g,e.slice(0,7)).replace(/%s/g,t.message.split(`
39
- `)[0]).replace(/%an/g,t.author.name).replace(/%ae/g,t.author.email).replace(/%ad/g,r.toLocaleString()).replace(/%ar/g,zu(r))}function zu(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 tu(e,t,a,i,{nameOnly:!1,stat:!0})).stdout:await gu(e,t,i,!0)}function Vu(e){let t=/^(.+)\.\.([^.]*)$/.exec(e);return t?.[2]?[t[1],t[2]]:null}function Hu(e){return{git:e,commitTrees:new Map,trees:new Map,entries:new Map}}async function Uu(e,t,n,r){let i=r.trees.get(n);if(i)return i;let{tree:a}=await nn({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 A({fs:e.lfs,dir:t,oid:n,cache:r.git});return r.commitTrees.set(n,a.tree),a.tree}async function Gu(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 Uu(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 Ku(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 Gu(e,t,n.commit.tree,a,i)!==(o===void 0?void 0:await Gu(e,t,o,a,i)))return!0;return!1}async function qu(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 k({fs:e.lfs,cache:e.cache,dir:t,...cc}),c=[],l=i?`others`:r?`modified`:a?`deleted`:`cached`;for(let[e,t,n,r]of s)Yu(l,t,n,r)&&(o.length>0&&!Ju(e,o)||c.push(e));return c.sort(),{stdout:c.map(e=>`${e}\n`).join(``),stderr:``,exitCode:0}}function Ju(e,t){for(let n of t)if(e===n||e.startsWith(n+`/`))return!0;return!1}function Yu(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 Xu(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 on({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 Tn({http:Jc,url:l,corsProxy:e.corsProxy,onAuth:e.getOnAuth(),onAuthFailure:e.getOnAuthFailure(),prefix:t,symrefs:a,peelTags:i})).filter(e=>Zu(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: ${sc(e instanceof Error?e.message:String(e),l)}\n`,exitCode:128}}}function Zu(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 Qu(e,t,n){let{flags:r,positionals:i}=M(n,L[`ls-tree`]),a=r.r===!0,o=r.d===!0,s=r[`name-only`]===!0,c=i[0],l=$u(i.slice(1));if(!c)return{stdout:``,stderr:`usage: git ls-tree [<options>] <tree-ish> [<path>...]
40
- `,exitCode:129};let u=await Ac(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 nn({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 ed(e,t,d,``,l,a,o,s,f),{stdout:f.join(``),stderr:``,exitCode:0}}function $u(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 ed(e,t,n,r,i,a,o,s,c){for(let l of n){let n=r?`${r}/${l.path}`:l.path,u=td(n,i);if(u!==`no`){if(l.type===`tree`){let r=u===`exact`&&(o||!a),d=u===`parent`||a;if(r&&c.push(nd(l,n,s)),d){let{tree:r}=await nn({fs:e.lfs,cache:e.cache,dir:t,oid:l.oid});await ed(e,t,r,n,i,a,o,s,c)}}else u!==`parent`&&!o&&c.push(nd(l,n,s))}}}function td(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 nd(e,t,n){return n?`${t}\n`:`${e.mode.padStart(6,`0`)} ${e.type} ${e.oid}\t${t}\n`}function rd(e){return e===void 0?[]:(Array.isArray(e)?e:[e]).map(e=>String(e))}function id(e,t){let n,r=!1;for(let t of rd(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 ad(e,t,n){let r=rc(n,L.merge);if(r)return r;let i=M(n,L.merge);if(i.flags.abort===!0)return od(e,t);let a=i.positionals[0];if(!a)return{stdout:``,stderr:`fatal: No branch specified to merge.
41
- `,exitCode:128};if(await al(e,t))return{stdout:``,stderr:`fatal: You have not concluded your merge (MERGE_HEAD exists).
36
+ `)}\n`,stderr:``,exitCode:0}:n.stat?mu(t,e.useColor):{stdout:t.map(t=>Je({oldContent:t.oldContent,newContent:t.newContent,oldName:t.filepath,newName:t.filepath,context:n.context,color:e.useColor})).join(``),stderr:``,exitCode:0}}function cu(e){let t=e.indexOf(`--`);return e.map((e,n)=>(t===-1||n<t)&&/^-U\d+$/.test(e)?`--unified=${e.slice(2)}`:e)}function lu(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 uu(e){let t=e.indexOf(`...`);return t===-1?null:[e.slice(0,t),e.slice(t+3)]}function du(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 fu(e,t,n){for(let r of n)try{await Dc(e,t,r)}catch{return r}return null}function pu(e){return{stdout:``,stderr:`fatal: ambiguous argument '${e}'\n`,exitCode:128}}function mu(e,t=!1){return{stdout:qe(e.map(e=>({name:e.filepath,oldContent:e.oldContent,newContent:e.newContent})),{color:t}),stderr:``,exitCode:0}}async function hu(e,t,n,r){let i=[];if(await en({fs:e.lfs,cache:e.cache,dir:t,trees:[kn({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 mu(i.map(e=>({filepath:e.filepath,oldContent:``,newContent:e.content})),e.useColor).stdout;let a=``;for(let t of i)a+=Je({oldContent:``,newContent:t.content,oldName:t.filepath,newName:t.filepath,color:e.useColor});return a}async function gu(e,t,n){let r=nc(n,L.fetch);if(r)return r;let{flags:i,positionals:a}=M(n,L.fetch),o=i,s=a[0]??`origin`,c=a[1],l=o.prune===!0,u=o.quiet===!0,d=R(o,`depth`),f=u?``:`Fetching ${s}\n`,p=await zn({fs:e.lfs,cache:e.cache,http:qc,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 _u(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 _u(e,t,n,r){let i=await Rn({fs:e.lfs,filepath:t}),a=r??``;await e.fs.writeFile(`${i}/.git/FETCH_HEAD`,`${n}\t\t${a}\n`)}async function vu(e,t,n){let r=M(n,L.init).flags,i=R(r,`initial-branch`)??e.getConfigOverrides()?.get(`init.defaultbranch`)??`main`;return await Ln({fs:e.lfs,dir:t,defaultBranch:i}),{stdout:`Initialized empty Git repository in ${t}/.git/\n`,stderr:``,exitCode:0}}function yu(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 bu=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(!yu(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&&yu(this.heap[t],this.heap[n])&&(n=t),t+1<this.heap.length&&yu(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 xu(e,t,n){try{return await D({fs:e.lfs,dir:t,ref:n})}catch{return}}async function Su(e,t,n,r){try{return await A({fs:e.lfs,dir:t,oid:n,cache:r})}catch{return}}async function Cu(e,t,n,r,i){let a=await Qt({fs:e.lfs,dir:t});for(let[o,s]of a.entries()){let a=await xu(e,t,s);if(a===void 0||r.has(a))continue;r.add(a);let c=await Su(e,t,a,i);c&&n.push(c,o)}}async function*wu(e,t,n){let r=new Set,i=new bu;for(await Cu(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 Su(e,t,o,n.cache);s&&i.push(s,a.tipRank)}}}async function Tu(e,t,n){let r=[];if(n.limit<=0)return r;for await(let i of wu(e,t,{cache:n.cache}))if(r.push(i),r.length>=n.limit)break;return r}async function Eu(e,t,n){let{flags:r,positionals:i,doubleDashRest:a}=M(n,L.log),o=r,s=R(o,`max-count`),c=o.oneline===!0,l=o.stat===!0,u=o.reverse===!0,d=o.all===!0,f=R(o,`format`),p=R(o,`author`),m=R(o,`grep`),h=R(o,`follow`),g=await Du(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 Iu(e,t,g,{format:f,oneline:c,showStat:l}),stderr:``,exitCode:0}}async function Du(e,t,n){let r=n.revision?Bu(n.revision):null,i=r?.[1]??n.revision,a=Vu(e.cache),o=n.maxCount??10;if(n.pathspecs.length>0&&!n.all&&!r&&!n.followFile)return await Nu(e,t,{ref:i,pathspecs:n.pathspecs,limit:o,caches:a});if(n.all&&n.pathspecs.length>0)return await Au(e,t,{pathspecs:n.pathspecs,limit:o,caches:a,exclude:r?await ku(e,t,r[0],a):void 0});let s=n.all?await Tu(e,t,{limit:n.maxCount??Ou,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 ku(e,t,r[0],a);s=s.filter(e=>!n.has(e.oid))}return n.pathspecs.length>0?await Fu(e,t,s,n.pathspecs,o,a):r?s.slice(0,o):s}const Ou=50;async function ku(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 Au(e,t,n){let r=[],i=[],a=async()=>{if(i.length>0){let a=n.limit-r.length;r.push(...await Fu(e,t,i,n.pathspecs,a,n.caches)),i=[]}return r.length>=n.limit};for await(let o of wu(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 ju(e){let t=e.replace(/^\.\//,``).replace(/\/+$/,``);return t===`.`?``:t}function Mu(e){let t=[...new Set(e.map(ju))];return t.some(e=>e===``)?null:t}async function Nu(e,t,n){let r=n.ref?{ref:n.ref}:{},i=Mu(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 Pu(e,t,{refArg:r,specs:i,limit:n.limit,caches:n.caches})}async function Pu(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 Gu(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 Fu(e,t,n,r,i,a){let o=Mu(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 Gu(e,t,r,o,a)&&s.push(r),s.length>=i)break;return s}async function Iu(e,t,n,r){let i=``;for(let a of n){let{commit:n,oid:o}=a;r.format?i+=`${Lu(o,n,r.format)}\n`:r.oneline?i+=`${vc(e.useColor,`33`,o.slice(0,7))} ${n.message.split(`
37
+ `)[0]}\n`:(i+=`${vc(e.useColor,`33`,`commit ${o}`)}\n`,i+=`Author: ${n.author.name} <${n.author.email}>\n`,i+=`Date: ${new Date(n.author.timestamp*1e3).toLocaleString()}\n\n`,i+=` ${n.message.replace(/\n/g,`
38
+ `)}\n\n`),r.showStat&&(i+=await zu(e,t,a))}return i}function Lu(e,t,n){let r=new Date(t.author.timestamp*1e3);return n.replace(/%H/g,e).replace(/%h/g,e.slice(0,7)).replace(/%s/g,t.message.split(`
39
+ `)[0]).replace(/%an/g,t.author.name).replace(/%ae/g,t.author.email).replace(/%ad/g,r.toLocaleString()).replace(/%ar/g,Ru(r))}function Ru(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 zu(e,t,n){let{commit:r,oid:i}=n,a=r.parent.length>0?r.parent[0]:void 0;return a?(await eu(e,t,a,i,{nameOnly:!1,stat:!0})).stdout:await hu(e,t,i,!0)}function Bu(e){let t=/^(.+)\.\.([^.]*)$/.exec(e);return t?.[2]?[t[1],t[2]]:null}function Vu(e){return{git:e,commitTrees:new Map,trees:new Map,entries:new Map}}async function Hu(e,t,n,r){let i=r.trees.get(n);if(i)return i;let{tree:a}=await rn({fs:e.lfs,dir:t,oid:n,cache:r.git});return r.trees.set(n,a),a}async function Uu(e,t,n,r){let i=r.commitTrees.get(n);if(i)return i;let{commit:a}=await A({fs:e.lfs,dir:t,oid:n,cache:r.git});return r.commitTrees.set(n,a.tree),a.tree}async function Wu(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 Hu(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 Gu(e,t,n,r,i){let a=n.commit.parent[0],o=a?await Uu(e,t,a,i):void 0;for(let a of r)if(await Wu(e,t,n.commit.tree,a,i)!==(o===void 0?void 0:await Wu(e,t,o,a,i)))return!0;return!1}async function Ku(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 k({fs:e.lfs,cache:e.cache,dir:t,...sc}),c=[],l=i?`others`:r?`modified`:a?`deleted`:`cached`;for(let[e,t,n,r]of s)Ju(l,t,n,r)&&(o.length>0&&!qu(e,o)||c.push(e));return c.sort(),{stdout:c.map(e=>`${e}\n`).join(``),stderr:``,exitCode:0}}function qu(e,t){for(let n of t)if(e===n||e.startsWith(n+`/`))return!0;return!1}function Ju(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 Yu(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 sn({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 En({http:qc,url:l,corsProxy:e.corsProxy,onAuth:e.getOnAuth(),onAuthFailure:e.getOnAuthFailure(),prefix:t,symrefs:a,peelTags:i})).filter(e=>Xu(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: ${oc(e instanceof Error?e.message:String(e),l)}\n`,exitCode:128}}}function Xu(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 Zu(e,t,n){let{flags:r,positionals:i}=M(n,L[`ls-tree`]),a=r.r===!0,o=r.d===!0,s=r[`name-only`]===!0,c=i[0],l=Qu(i.slice(1));if(!c)return{stdout:``,stderr:`usage: git ls-tree [<options>] <tree-ish> [<path>...]
40
+ `,exitCode:129};let u=await kc(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 rn({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 $u(e,t,d,``,l,a,o,s,f),{stdout:f.join(``),stderr:``,exitCode:0}}function Qu(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 $u(e,t,n,r,i,a,o,s,c){for(let l of n){let n=r?`${r}/${l.path}`:l.path,u=ed(n,i);if(u!==`no`){if(l.type===`tree`){let r=u===`exact`&&(o||!a),d=u===`parent`||a;if(r&&c.push(td(l,n,s)),d){let{tree:r}=await rn({fs:e.lfs,cache:e.cache,dir:t,oid:l.oid});await $u(e,t,r,n,i,a,o,s,c)}}else u!==`parent`&&!o&&c.push(td(l,n,s))}}}function ed(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 td(e,t,n){return n?`${t}\n`:`${e.mode.padStart(6,`0`)} ${e.type} ${e.oid}\t${t}\n`}function nd(e){return e===void 0?[]:(Array.isArray(e)?e:[e]).map(e=>String(e))}function rd(e,t){let n,r=!1;for(let t of nd(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 id(e,t,n){let r=nc(n,L.merge);if(r)return r;let i=M(n,L.merge);if(i.flags.abort===!0)return ad(e,t);let a=i.positionals[0];if(!a)return{stdout:``,stderr:`fatal: No branch specified to merge.
41
+ `,exitCode:128};if(await il(e,t))return{stdout:``,stderr:`fatal: You have not concluded your merge (MERGE_HEAD exists).
42
42
  Please, commit your changes before you merge.
43
- `,exitCode:128};let o=await Ac(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}=id(i,n);try{await sl(e,t,await D({fs:e.lfs,dir:t,ref:`HEAD`}));let n=await rn({fs:e.lfs,cache:e.cache,dir:t,ours:await j({fs:e.lfs,dir:t})??void 0,theirs:o,fastForward:!s,fastForwardOnly:c,author:await e.resolveAuthor(t),abortOnConflict:!1,mergeDriver:Dc({favor:l,diff3:u})});return n.alreadyMerged?{stdout:`Already up to date.
44
- `,stderr:``,exitCode:0}:n.fastForward?(await En({fs:e.lfs,cache:e.cache,dir:t,ref:await j({fs:e.lfs,dir:t})??`HEAD`}),{stdout:`Updating..${n.oid?n.oid.slice(0,7):``}\nFast-forward\n`,stderr:``,exitCode:0}):n.mergeCommit?(await En({fs:e.lfs,cache:e.cache,dir:t,ref:await j({fs:e.lfs,dir:t})??`HEAD`,force:!0}),{stdout:`Merge made by the 'ort' strategy.
43
+ `,exitCode:128};let o=await kc(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}=rd(i,n);try{await ol(e,t,await D({fs:e.lfs,dir:t,ref:`HEAD`}));let n=await an({fs:e.lfs,cache:e.cache,dir:t,ours:await j({fs:e.lfs,dir:t})??void 0,theirs:o,fastForward:!s,fastForwardOnly:c,author:await e.resolveAuthor(t),abortOnConflict:!1,mergeDriver:Ec({favor:l,diff3:u})});return n.alreadyMerged?{stdout:`Already up to date.
44
+ `,stderr:``,exitCode:0}:n.fastForward?(await Dn({fs:e.lfs,cache:e.cache,dir:t,ref:await j({fs:e.lfs,dir:t})??`HEAD`}),{stdout:`Updating..${n.oid?n.oid.slice(0,7):``}\nFast-forward\n`,stderr:``,exitCode:0}):n.mergeCommit?(await Dn({fs:e.lfs,cache:e.cache,dir:t,ref:await j({fs:e.lfs,dir:t})??`HEAD`,force:!0}),{stdout:`Merge made by the 'ort' strategy.
45
45
  `,stderr:``,exitCode:0}):{stdout:`Merge complete.
46
- `,stderr:``,exitCode:0}}catch(n){return n instanceof Error&&n.name===`MergeConflictError`&&await cl(e,t,o,`Merge branch '${a}' into ${await j({fs:e.lfs,dir:t})??`HEAD`}`),sd(n)}}async function od(e,t){if(!await al(e,t))return{stdout:``,stderr:`fatal: There is no merge to abort (MERGE_HEAD missing).
47
- `,exitCode:128};try{await Cn({fs:e.lfs,cache:e.cache,dir:t,commit:`HEAD`})}catch{}return await En({fs:e.lfs,cache:e.cache,dir:t,ref:await j({fs:e.lfs,dir:t})??`HEAD`,force:!0}),await ll(e,t),{stdout:``,stderr:``,exitCode:0}}function sd(e){if(e instanceof Error&&e.name===`MergeConflictError`)return{stdout:(e.data?.filepaths??[]).map(e=>`CONFLICT (content): Merge conflict in ${e}\n`).join(``),stderr:`Automatic merge failed; fix conflicts and then commit the result.
46
+ `,stderr:``,exitCode:0}}catch(n){return n instanceof Error&&n.name===`MergeConflictError`&&await sl(e,t,o,`Merge branch '${a}' into ${await j({fs:e.lfs,dir:t})??`HEAD`}`),od(n)}}async function ad(e,t){if(!await il(e,t))return{stdout:``,stderr:`fatal: There is no merge to abort (MERGE_HEAD missing).
47
+ `,exitCode:128};try{await wn({fs:e.lfs,cache:e.cache,dir:t,commit:`HEAD`})}catch{}return await Dn({fs:e.lfs,cache:e.cache,dir:t,ref:await j({fs:e.lfs,dir:t})??`HEAD`,force:!0}),await cl(e,t),{stdout:``,stderr:``,exitCode:0}}function od(e){if(e instanceof Error&&e.name===`MergeConflictError`)return{stdout:(e.data?.filepaths??[]).map(e=>`CONFLICT (content): Merge conflict in ${e}\n`).join(``),stderr:`Automatic merge failed; fix conflicts and then commit the result.
48
48
  `,exitCode:1};if(e instanceof Error&&e.name===`MergeNotSupportedError`)return{stdout:``,stderr:`fatal: merge is not possible because you have unmerged files.
49
49
  `,exitCode:128};if(e instanceof Error&&e.name===`FastForwardError`)return{stdout:``,stderr:`fatal: Not possible to fast-forward, aborting.
50
- `,exitCode:128};throw e}async function cd(e,t,n){let r=n.includes(`--is-ancestor`),i=n.filter(e=>!e.startsWith(`-`));if(i.length<2)return{stdout:``,stderr:`usage: git merge-base <commit> <commit>
51
- `,exitCode:129};try{let n=await Promise.all(i.slice(0,2).map(n=>Oc(e,t,n)));if(r)return n[0]===n[1]?{stdout:``,stderr:``,exitCode:0}:{stdout:``,stderr:``,exitCode:+!await un({fs:e.lfs,cache:e.cache,dir:t,oid:n[1],ancestor:n[0],depth:-1})};let a=await _n({fs:e.lfs,cache:e.cache,dir:t,oids:n});return{stdout:a[0]?`${a[0]}\n`:``,stderr:``,exitCode:+!a[0]}}catch{return{stdout:``,stderr:`fatal: Not a valid object name
52
- `,exitCode:128}}}function ld(e){return e===void 0?[]:(Array.isArray(e)?e:[e]).map(e=>String(e))}async function ud(e,t,n){let r=M(n,L[`merge-file`]),i=r.positionals;if(i.length!==3)return{stdout:``,stderr:`usage: git merge-file [<options>] <current-file> <base-file> <other-file>
53
- `,exitCode:255};let a=ld(r.flags.L);if(a.length>3)return{stdout:``,stderr:`fatal: too many labels on the command line
50
+ `,exitCode:128};throw e}async function sd(e,t,n){let r=n.includes(`--is-ancestor`),i=n.filter(e=>!e.startsWith(`-`));if(i.length<2)return{stdout:``,stderr:`usage: git merge-base <commit> <commit>
51
+ `,exitCode:129};try{let n=await Promise.all(i.slice(0,2).map(n=>Dc(e,t,n)));if(r)return n[0]===n[1]?{stdout:``,stderr:``,exitCode:0}:{stdout:``,stderr:``,exitCode:+!await dn({fs:e.lfs,cache:e.cache,dir:t,oid:n[1],ancestor:n[0],depth:-1})};let a=await vn({fs:e.lfs,cache:e.cache,dir:t,oids:n});return{stdout:a[0]?`${a[0]}\n`:``,stderr:``,exitCode:+!a[0]}}catch{return{stdout:``,stderr:`fatal: Not a valid object name
52
+ `,exitCode:128}}}function cd(e){return e===void 0?[]:(Array.isArray(e)?e:[e]).map(e=>String(e))}async function ld(e,t,n){let r=M(n,L[`merge-file`]),i=r.positionals;if(i.length!==3)return{stdout:``,stderr:`usage: git merge-file [<options>] <current-file> <base-file> <other-file>
53
+ `,exitCode:255};let a=cd(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=Je(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 dd(e,t,n){let r=rc(n,L.pull);if(r)return r;let{flags:i,positionals:a}=M(n,L.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 an({fs:e.lfs,cache:e.cache,http:Jc,dir:t,remote:o,ref:s,corsProxy:e.corsProxy,author:await e.resolveAuthor(t),fastForwardOnly:c,fastForward:!l,onAuth:e.getOnAuth(),onAuthFailure:e.getOnAuthFailure(),onProgress:u?void 0:e=>{d+=`${e.phase}: ${e.loaded}/${e.total}\n`}}),u||(d+=`Already up to date.
56
- `),{stdout:d,stderr:``,exitCode:0}}async function fd(e,t,n){let{flags:r,positionals:i}=M(n,L.push),a=r.force===!0,o=r[`set-upstream`]===!0,s=r[`dry-run`]===!0,c=i[0]??`origin`,l=i[1]??await j({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 sn({fs:e.lfs,cache:e.cache,http:Jc,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 fn({fs:e.lfs,dir:t,path:`branch.${l}.remote`,value:c}),await fn({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 on({fs:e.lfs,dir:t}).catch(()=>[])).find(e=>e.remote===c)?.url;return{stdout:``,stderr:`error: failed to push to '${c}': ${sc(String(d.error),n)}\n`,exitCode:1}}return{stdout:u,stderr:``,exitCode:0}}function pd(e){return e===void 0?[]:(Array.isArray(e)?e:[e]).map(e=>String(e))}const md=`.git/rebase-merge`;async function hd(e,t,n){let{flags:r,positionals:i}=M(n,L.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 yd(e,t):r.continue?await _d(e,t):r.skip?await vd(e,t):await gd(e,t,i[0],r)}catch(e){return{stdout:``,stderr:`fatal: ${ac(e)}\n`,exitCode:128}}}async function gd(e,t,n,r){if(!n)return{stdout:``,stderr:`fatal: No upstream specified.
57
- `,exitCode:128};if(await Dd(e,t))return{stdout:``,stderr:`fatal: It seems that there is already a rebase-merge directory,
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=Ye(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 ud(e,t,n){let r=nc(n,L.pull);if(r)return r;let{flags:i,positionals:a}=M(n,L.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 on({fs:e.lfs,cache:e.cache,http:qc,dir:t,remote:o,ref:s,corsProxy:e.corsProxy,author:await e.resolveAuthor(t),fastForwardOnly:c,fastForward:!l,onAuth:e.getOnAuth(),onAuthFailure:e.getOnAuthFailure(),onProgress:u?void 0:e=>{d+=`${e.phase}: ${e.loaded}/${e.total}\n`}}),u||(d+=`Already up to date.
56
+ `),{stdout:d,stderr:``,exitCode:0}}async function dd(e,t,n){let{flags:r,positionals:i}=M(n,L.push),a=r.force===!0,o=r[`set-upstream`]===!0,s=r[`dry-run`]===!0,c=i[0]??`origin`,l=i[1]??await j({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 cn({fs:e.lfs,cache:e.cache,http:qc,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 pn({fs:e.lfs,dir:t,path:`branch.${l}.remote`,value:c}),await pn({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 sn({fs:e.lfs,dir:t}).catch(()=>[])).find(e=>e.remote===c)?.url;return{stdout:``,stderr:`error: failed to push to '${c}': ${oc(String(d.error),n)}\n`,exitCode:1}}return{stdout:u,stderr:``,exitCode:0}}function fd(e){return e===void 0?[]:(Array.isArray(e)?e:[e]).map(e=>String(e))}const pd=`.git/rebase-merge`;async function md(e,t,n){let{flags:r,positionals:i}=M(n,L.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 vd(e,t):r.continue?await gd(e,t):r.skip?await _d(e,t):await hd(e,t,i[0],r)}catch(e){return{stdout:``,stderr:`fatal: ${ic(e)}\n`,exitCode:128}}}async function hd(e,t,n,r){if(!n)return{stdout:``,stderr:`fatal: No upstream specified.
57
+ `,exitCode:128};if(await Ed(e,t))return{stdout:``,stderr:`fatal: It seems that there is already a rebase-merge directory,
58
58
  and I wonder if you are in the middle of another rebase.
59
59
  `,exitCode:128};let i=await j({fs:e.lfs,dir:t});if(!i)return{stdout:``,stderr:`fatal: no such branch/commit (detached HEAD)
60
- `,exitCode:128};let a=await Cd(e,t,n);if(!a)return{stdout:``,stderr:`fatal: invalid upstream '${n}'\n`,exitCode:128};let o=await D({fs:e.lfs,dir:t,ref:`HEAD`}),s=await Td(e,t);if(s)return s;let[c]=await _n({fs:e.lfs,cache:e.cache,dir:t,oids:[o,a]});if(c===o)return await Ed(e,t,i,a),{stdout:`Fast-forwarded ${i} to ${n}.\n`,stderr:``,exitCode:0};if(c===a)return{stdout:`Current branch ${i} is up to date.\n`,stderr:``,exitCode:0};let l=await wd(e,t,o,c),u=l.find(e=>e.parents>1);if(u)return{stdout:``,stderr:`error: commit ${u.oid} is a merge but no -m option was given.\nfatal: rebase failed\n`,exitCode:128};let d,f=!1;for(let e of pd(r[`strategy-option`]))e===`ours`||e===`theirs`||e===`union`?d=e:e===`diff3`&&(f=!0);return await Ed(e,t,i,a),bd(e,t,{onto:a,origHead:o,headName:`refs/heads/${i}`,branch:i,todo:l.map(e=>e.oid),favor:d,diff3:f})}async function _d(e,t){let n=await kd(e,t);if(!n)return Sd();if(n.current){let{commit:r}=await A({fs:e.lfs,cache:e.cache,dir:t,oid:n.current});await bn({fs:e.lfs,cache:e.cache,dir:t,message:r.message,author:r.author,committer:await e.resolveAuthor(t)}),n.current=void 0}return bd(e,t,n)}async function vd(e,t){let n=await kd(e,t);return n?(await En({fs:e.lfs,cache:e.cache,dir:t,ref:n.branch,force:!0}),n.current=void 0,bd(e,t,n)):Sd()}async function yd(e,t){let n=await kd(e,t);return n?(await Ed(e,t,n.branch,n.origHead),await jd(e,t),{stdout:``,stderr:``,exitCode:0}):Sd()}async function bd(e,t,n){for(;n.todo.length>0;){let r=n.todo[0],{commit:i}=await A({fs:e.lfs,cache:e.cache,dir:t,oid:r}),a=i.message.split(`
61
- `)[0];try{await Pn({fs:e.lfs,cache:e.cache,dir:t,oid:r,abortOnConflict:!1,committer:await e.resolveAuthor(t),mergeDriver:Dc({favor:n.favor,diff3:n.diff3})})}catch(i){if(i instanceof Error&&i.name===`MergeConflictError`){let o=i.data?.filepaths??[];return n.current=r,n.todo=n.todo.slice(1),await Ad(e,t,n),xd(r,a,o)}throw i}n.todo=n.todo.slice(1)}return await jd(e,t),{stdout:`Successfully rebased and updated ${n.headName}.\n`,stderr:``,exitCode:0}}function xd(e,t,n){let r=e.slice(0,7),i=``;for(let e of n)i+=`CONFLICT (content): Merge conflict in ${e}\n`;return i+=`error: could not apply ${r}... ${t}\n`,i+=`hint: Resolve all conflicts manually, mark them as resolved with
60
+ `,exitCode:128};let a=await Sd(e,t,n);if(!a)return{stdout:``,stderr:`fatal: invalid upstream '${n}'\n`,exitCode:128};let o=await D({fs:e.lfs,dir:t,ref:`HEAD`}),s=await wd(e,t);if(s)return s;let[c]=await vn({fs:e.lfs,cache:e.cache,dir:t,oids:[o,a]});if(c===o)return await Td(e,t,i,a),{stdout:`Fast-forwarded ${i} to ${n}.\n`,stderr:``,exitCode:0};if(c===a)return{stdout:`Current branch ${i} is up to date.\n`,stderr:``,exitCode:0};let l=await Cd(e,t,o,c),u=l.find(e=>e.parents>1);if(u)return{stdout:``,stderr:`error: commit ${u.oid} is a merge but no -m option was given.\nfatal: rebase failed\n`,exitCode:128};let d,f=!1;for(let e of fd(r[`strategy-option`]))e===`ours`||e===`theirs`||e===`union`?d=e:e===`diff3`&&(f=!0);return await Td(e,t,i,a),yd(e,t,{onto:a,origHead:o,headName:`refs/heads/${i}`,branch:i,todo:l.map(e=>e.oid),favor:d,diff3:f})}async function gd(e,t){let n=await Od(e,t);if(!n)return xd();if(n.current){let{commit:r}=await A({fs:e.lfs,cache:e.cache,dir:t,oid:n.current});await xn({fs:e.lfs,cache:e.cache,dir:t,message:r.message,author:r.author,committer:await e.resolveAuthor(t)}),n.current=void 0}return yd(e,t,n)}async function _d(e,t){let n=await Od(e,t);return n?(await Dn({fs:e.lfs,cache:e.cache,dir:t,ref:n.branch,force:!0}),n.current=void 0,yd(e,t,n)):xd()}async function vd(e,t){let n=await Od(e,t);return n?(await Td(e,t,n.branch,n.origHead),await Ad(e,t),{stdout:``,stderr:``,exitCode:0}):xd()}async function yd(e,t,n){for(;n.todo.length>0;){let r=n.todo[0],{commit:i}=await A({fs:e.lfs,cache:e.cache,dir:t,oid:r}),a=i.message.split(`
61
+ `)[0];try{await Fn({fs:e.lfs,cache:e.cache,dir:t,oid:r,abortOnConflict:!1,committer:await e.resolveAuthor(t),mergeDriver:Ec({favor:n.favor,diff3:n.diff3})})}catch(i){if(i instanceof Error&&i.name===`MergeConflictError`){let o=i.data?.filepaths??[];return n.current=r,n.todo=n.todo.slice(1),await kd(e,t,n),bd(r,a,o)}throw i}n.todo=n.todo.slice(1)}return await Ad(e,t),{stdout:`Successfully rebased and updated ${n.headName}.\n`,stderr:``,exitCode:0}}function bd(e,t,n){let r=e.slice(0,7),i=``;for(let e of n)i+=`CONFLICT (content): Merge conflict in ${e}\n`;return i+=`error: could not apply ${r}... ${t}\n`,i+=`hint: Resolve all conflicts manually, mark them as resolved with
62
62
  `,i+=`hint: "git add/rm <conflicted_files>", then run "git rebase --continue".
63
63
  `,i+=`hint: You can instead skip this commit: run "git rebase --skip".
64
64
  `,i+=`hint: To abort and get back to the state before "git rebase", run "git rebase --abort".
65
- `,{stdout:``,stderr:i,exitCode:1}}function Sd(){return{stdout:``,stderr:`fatal: No rebase in progress?
66
- `,exitCode:128}}async function Cd(e,t,n){return await Ac(e,t,n)}async function wd(e,t,n,r){let i=await wn({fs:e.lfs,cache:e.cache,dir:t,ref:n}),a=[];for(let e of i){if(e.oid===r)break;a.push({oid:e.oid,parents:e.commit.parent.length})}return a.reverse()}async function Td(e,t){let n=await k({fs:e.lfs,cache:e.cache,dir:t}),r=!1,i=!1;for(let[,e,t,a]of n)(e!==0||a!==0)&&(t===a?e!==a&&(i=!0):r=!0);if(r)return{stdout:``,stderr:`error: cannot rebase: You have unstaged changes.
65
+ `,{stdout:``,stderr:i,exitCode:1}}function xd(){return{stdout:``,stderr:`fatal: No rebase in progress?
66
+ `,exitCode:128}}async function Sd(e,t,n){return await kc(e,t,n)}async function Cd(e,t,n,r){let i=await Tn({fs:e.lfs,cache:e.cache,dir:t,ref:n}),a=[];for(let e of i){if(e.oid===r)break;a.push({oid:e.oid,parents:e.commit.parent.length})}return a.reverse()}async function wd(e,t){let n=await k({fs:e.lfs,cache:e.cache,dir:t}),r=!1,i=!1;for(let[,e,t,a]of n)(e!==0||a!==0)&&(t===a?e!==a&&(i=!0):r=!0);if(r)return{stdout:``,stderr:`error: cannot rebase: You have unstaged changes.
67
67
  error: Please commit or stash them.
68
68
  `,exitCode:128};if(i)return{stdout:``,stderr:`error: cannot rebase: Your index contains uncommitted changes.
69
69
  error: Please commit or stash them.
70
- `,exitCode:128}}async function Ed(e,t,n,r){await en({fs:e.lfs,dir:t,ref:`refs/heads/${n}`,value:r,force:!0}),await En({fs:e.lfs,cache:e.cache,dir:t,ref:n,force:!0})}async function Dd(e,t){return e.fs.exists(`${t}/${md}/onto`)}async function Od(e,t,n){try{return(await e.fs.readTextFile(`${t}/${md}/${n}`)).trim()}catch{return}}async function kd(e,t){let n=await Od(e,t,`onto`),r=await Od(e,t,`orig-head`),i=await Od(e,t,`head-name`);if(!n||!r||!i)return;let a=(await Od(e,t,`git-rebase-todo`)??``).split(`
71
- `).map(e=>e.replace(/^pick\s+/,``).trim()).filter(e=>e.length>0),o=await Od(e,t,`strategy-opts`)??``,s,c=!1;for(let e of o.split(/\s+/).filter(e=>e.length>0))e===`ours`||e===`theirs`||e===`union`?s=e:e===`diff3`&&(c=!0);return{onto:n,origHead:r,headName:i,branch:i.replace(/^refs\/heads\//,``),current:await Od(e,t,`stopped-sha`),todo:a,favor:s,diff3:c}}async function Ad(e,t,n){let r=`${t}/${md}`;await e.fs.mkdir(r,{recursive:!0}),await e.fs.writeFile(`${r}/onto`,`${n.onto}\n`),await e.fs.writeFile(`${r}/orig-head`,`${n.origHead}\n`),await e.fs.writeFile(`${r}/head-name`,`${n.headName}\n`),await e.fs.writeFile(`${r}/git-rebase-todo`,`${n.todo.map(e=>`pick ${e}`).join(`
72
- `)}\n`),n.current?await e.fs.writeFile(`${r}/stopped-sha`,`${n.current}\n`):await Md(e,`${r}/stopped-sha`);let i=[];n.favor&&i.push(n.favor),n.diff3&&i.push(`diff3`),i.length>0?await e.fs.writeFile(`${r}/strategy-opts`,`${i.join(` `)}\n`):await Md(e,`${r}/strategy-opts`)}async function jd(e,t){try{await e.fs.rm(`${t}/${md}`,{recursive:!0})}catch{}}async function Md(e,t){try{await e.fs.rm(t)}catch{}}async function Nd(e,t,n){let[r,...i]=n;if(r===`add`&&i.length>=2){let[n,r]=i;return await kn({fs:e.lfs,dir:t,remote:n,url:r}),{stdout:``,stderr:``,exitCode:0}}if(r===`remove`||r===`rm`){let n=i[0];if(n)return await xn({fs:e.lfs,dir:t,remote:n}),{stdout:``,stderr:``,exitCode:0}}let a=n.includes(`-v`)||n.includes(`--verbose`),o=await on({fs:e.lfs,dir:t}),s=``;for(let{remote:e,url:t}of o)a?(s+=`${e}\t${t} (fetch)\n`,s+=`${e}\t${t} (push)\n`):s+=`${e}\n`;return{stdout:s,stderr:``,exitCode:0}}async function Pd(e,t,n){let r=n.includes(`--soft`),i=n.includes(`--hard`),a=n.includes(`--mixed`),o=n.filter(e=>!e.startsWith(`-`)),s=r||i||a;if(!s&&o.length===0){let n=await k({fs:e.lfs,cache:e.cache,dir:t});for(let[r,i,,a]of n)a!==i&&await zn({fs:e.lfs,cache:e.cache,dir:t,filepath:r});return{stdout:``,stderr:``,exitCode:0}}if(!s){let n=o.filter(e=>e!==`HEAD`);if(n.length===0){let n=await k({fs:e.lfs,cache:e.cache,dir:t});for(let[r,i,,a]of n)a!==i&&await zn({fs:e.lfs,cache:e.cache,dir:t,filepath:r});return{stdout:``,stderr:``,exitCode:0}}for(let r of n)await zn({fs:e.lfs,cache:e.cache,dir:t,filepath:r});return{stdout:``,stderr:``,exitCode:0}}let c=o[0]??`HEAD`,l=await D({fs:e.lfs,dir:t,ref:c}),u=await j({fs:e.lfs,dir:t,fullname:!0});if(!u)return{stdout:``,stderr:`fatal: not on a branch, cannot reset
73
- `,exitCode:128};if(await en({fs:e.lfs,dir:t,ref:u,value:l,force:!0}),r)return{stdout:`HEAD is now at ${l.slice(0,7)}\n`,stderr:``,exitCode:0};let d=new Set(await O({fs:e.lfs,cache:e.cache,dir:t}));for(let n of d)await cn({fs:e.lfs,cache:e.cache,dir:t,filepath:n});return await Id(e,t,l),i?(await Rd(e,t,l,d),await Fd(e,t,l),{stdout:`HEAD is now at ${l.slice(0,7)}\n`,stderr:``,exitCode:0}):{stdout:`HEAD is now at ${l.slice(0,7)}\n`,stderr:``,exitCode:0}}async function Fd(e,t,n){try{await Cn({fs:e.lfs,cache:e.cache,dir:t,commit:n})}catch{}await ll(e,t)}async function Id(e,t,n){let{tree:r}=await nn({fs:e.lfs,cache:e.cache,dir:t,oid:n});await Ld(e,t,n,r,``)}async function Ld(e,t,n,r,i){for(let a of r){let r=i?`${i}/${a.path}`:a.path;if(a.type===`blob`)await zn({fs:e.lfs,cache:e.cache,dir:t,filepath:r,ref:n});else if(a.type===`tree`){let{tree:i}=await nn({fs:e.lfs,cache:e.cache,dir:t,oid:a.oid});await Ld(e,t,n,i,r)}}}async function Rd(e,t,n,r){let i=new Set,{tree:a}=await nn({fs:e.lfs,cache:e.cache,dir:t,oid:n});await zd(e,t,a,``,i);for(let r of i){let{blob:i}=await Qt({fs:e.lfs,cache:e.cache,dir:t,oid:n,filepath:r}),a=r.lastIndexOf(`/`);a!==-1&&await e.fs.mkdir(`${t}/${r.slice(0,a)}`,{recursive:!0}),await e.fs.writeFile(`${t}/${r}`,i)}for(let n of r)if(!i.has(n))try{await e.fs.rm(`${t}/${n}`)}catch{}}async function zd(e,t,n,r,i){for(let a of n){let n=r?`${r}/${a.path}`:a.path;if(a.type===`blob`)i.add(n);else if(a.type===`tree`){let{tree:r}=await nn({fs:e.lfs,cache:e.cache,dir:t,oid:a.oid});await zd(e,t,r,n,i)}}}async function Bd(e,t,n){if(n.includes(`--show-toplevel`))try{return{stdout:`${await Ln({fs:e.lfs,filepath:t})}\n`,stderr:``,exitCode:0}}catch{return{stdout:``,stderr:`fatal: not a git repository
74
- `,exitCode:128}}if(n.includes(`--is-inside-work-tree`))try{return await Ln({fs:e.lfs,filepath:t}),{stdout:`true
70
+ `,exitCode:128}}async function Td(e,t,n,r){await tn({fs:e.lfs,dir:t,ref:`refs/heads/${n}`,value:r,force:!0}),await Dn({fs:e.lfs,cache:e.cache,dir:t,ref:n,force:!0})}async function Ed(e,t){return e.fs.exists(`${t}/${pd}/onto`)}async function Dd(e,t,n){try{return(await e.fs.readTextFile(`${t}/${pd}/${n}`)).trim()}catch{return}}async function Od(e,t){let n=await Dd(e,t,`onto`),r=await Dd(e,t,`orig-head`),i=await Dd(e,t,`head-name`);if(!n||!r||!i)return;let a=(await Dd(e,t,`git-rebase-todo`)??``).split(`
71
+ `).map(e=>e.replace(/^pick\s+/,``).trim()).filter(e=>e.length>0),o=await Dd(e,t,`strategy-opts`)??``,s,c=!1;for(let e of o.split(/\s+/).filter(e=>e.length>0))e===`ours`||e===`theirs`||e===`union`?s=e:e===`diff3`&&(c=!0);return{onto:n,origHead:r,headName:i,branch:i.replace(/^refs\/heads\//,``),current:await Dd(e,t,`stopped-sha`),todo:a,favor:s,diff3:c}}async function kd(e,t,n){let r=`${t}/${pd}`;await e.fs.mkdir(r,{recursive:!0}),await e.fs.writeFile(`${r}/onto`,`${n.onto}\n`),await e.fs.writeFile(`${r}/orig-head`,`${n.origHead}\n`),await e.fs.writeFile(`${r}/head-name`,`${n.headName}\n`),await e.fs.writeFile(`${r}/git-rebase-todo`,`${n.todo.map(e=>`pick ${e}`).join(`
72
+ `)}\n`),n.current?await e.fs.writeFile(`${r}/stopped-sha`,`${n.current}\n`):await jd(e,`${r}/stopped-sha`);let i=[];n.favor&&i.push(n.favor),n.diff3&&i.push(`diff3`),i.length>0?await e.fs.writeFile(`${r}/strategy-opts`,`${i.join(` `)}\n`):await jd(e,`${r}/strategy-opts`)}async function Ad(e,t){try{await e.fs.rm(`${t}/${pd}`,{recursive:!0})}catch{}}async function jd(e,t){try{await e.fs.rm(t)}catch{}}async function Md(e,t,n){let[r,...i]=n;if(r===`add`&&i.length>=2){let[n,r]=i;return await An({fs:e.lfs,dir:t,remote:n,url:r}),{stdout:``,stderr:``,exitCode:0}}if(r===`remove`||r===`rm`){let n=i[0];if(n)return await Sn({fs:e.lfs,dir:t,remote:n}),{stdout:``,stderr:``,exitCode:0}}let a=n.includes(`-v`)||n.includes(`--verbose`),o=await sn({fs:e.lfs,dir:t}),s=``;for(let{remote:e,url:t}of o)a?(s+=`${e}\t${t} (fetch)\n`,s+=`${e}\t${t} (push)\n`):s+=`${e}\n`;return{stdout:s,stderr:``,exitCode:0}}async function Nd(e,t,n){let r=n.includes(`--soft`),i=n.includes(`--hard`),a=n.includes(`--mixed`),o=n.filter(e=>!e.startsWith(`-`)),s=r||i||a;if(!s&&o.length===0){let n=await k({fs:e.lfs,cache:e.cache,dir:t});for(let[r,i,,a]of n)a!==i&&await Bn({fs:e.lfs,cache:e.cache,dir:t,filepath:r});return{stdout:``,stderr:``,exitCode:0}}if(!s){let n=o.filter(e=>e!==`HEAD`);if(n.length===0){let n=await k({fs:e.lfs,cache:e.cache,dir:t});for(let[r,i,,a]of n)a!==i&&await Bn({fs:e.lfs,cache:e.cache,dir:t,filepath:r});return{stdout:``,stderr:``,exitCode:0}}for(let r of n)await Bn({fs:e.lfs,cache:e.cache,dir:t,filepath:r});return{stdout:``,stderr:``,exitCode:0}}let c=o[0]??`HEAD`,l=await D({fs:e.lfs,dir:t,ref:c}),u=await j({fs:e.lfs,dir:t,fullname:!0});if(!u)return{stdout:``,stderr:`fatal: not on a branch, cannot reset
73
+ `,exitCode:128};if(await tn({fs:e.lfs,dir:t,ref:u,value:l,force:!0}),r)return{stdout:`HEAD is now at ${l.slice(0,7)}\n`,stderr:``,exitCode:0};let d=new Set(await O({fs:e.lfs,cache:e.cache,dir:t}));for(let n of d)await ln({fs:e.lfs,cache:e.cache,dir:t,filepath:n});return await Fd(e,t,l),i?(await Ld(e,t,l,d),await Pd(e,t,l),{stdout:`HEAD is now at ${l.slice(0,7)}\n`,stderr:``,exitCode:0}):{stdout:`HEAD is now at ${l.slice(0,7)}\n`,stderr:``,exitCode:0}}async function Pd(e,t,n){try{await wn({fs:e.lfs,cache:e.cache,dir:t,commit:n})}catch{}await cl(e,t)}async function Fd(e,t,n){let{tree:r}=await rn({fs:e.lfs,cache:e.cache,dir:t,oid:n});await Id(e,t,n,r,``)}async function Id(e,t,n,r,i){for(let a of r){let r=i?`${i}/${a.path}`:a.path;if(a.type===`blob`)await Bn({fs:e.lfs,cache:e.cache,dir:t,filepath:r,ref:n});else if(a.type===`tree`){let{tree:i}=await rn({fs:e.lfs,cache:e.cache,dir:t,oid:a.oid});await Id(e,t,n,i,r)}}}async function Ld(e,t,n,r){let i=new Set,{tree:a}=await rn({fs:e.lfs,cache:e.cache,dir:t,oid:n});await Rd(e,t,a,``,i);for(let r of i){let{blob:i}=await $t({fs:e.lfs,cache:e.cache,dir:t,oid:n,filepath:r}),a=r.lastIndexOf(`/`);a!==-1&&await e.fs.mkdir(`${t}/${r.slice(0,a)}`,{recursive:!0}),await e.fs.writeFile(`${t}/${r}`,i)}for(let n of r)if(!i.has(n))try{await e.fs.rm(`${t}/${n}`)}catch{}}async function Rd(e,t,n,r,i){for(let a of n){let n=r?`${r}/${a.path}`:a.path;if(a.type===`blob`)i.add(n);else if(a.type===`tree`){let{tree:r}=await rn({fs:e.lfs,cache:e.cache,dir:t,oid:a.oid});await Rd(e,t,r,n,i)}}}async function zd(e,t,n){if(n.includes(`--show-toplevel`))try{return{stdout:`${await Rn({fs:e.lfs,filepath:t})}\n`,stderr:``,exitCode:0}}catch{return{stdout:``,stderr:`fatal: not a git repository
74
+ `,exitCode:128}}if(n.includes(`--is-inside-work-tree`))try{return await Rn({fs:e.lfs,filepath:t}),{stdout:`true
75
75
  `,stderr:``,exitCode:0}}catch{return{stdout:`false
76
- `,stderr:``,exitCode:0}}let r=n.find(e=>!e.startsWith(`-`))??`HEAD`;try{if(n.includes(`--abbrev-ref`))return r===`HEAD`?{stdout:`${await j({fs:e.lfs,dir:t})??`HEAD`}\n`,stderr:``,exitCode:0}:{stdout:`${r.replace(/^refs\/(?:heads|tags|remotes)\//,``)}\n`,stderr:``,exitCode:0};let i=await Oc(e,t,r),a=n.find(e=>e===`--short`||e.startsWith(`--short=`)),o=a?.includes(`=`)?Number(a.split(`=`)[1]):7;return{stdout:`${a?i.slice(0,Number.isFinite(o)?o:7):i}\n`,stderr:``,exitCode:0}}catch{return{stdout:``,stderr:`fatal: ambiguous argument '${r}'\n`,exitCode:128}}}async function Vd(e,t,n){let{flags:r,positionals:i}=M(n,L.revert),a=r[`no-commit`]===!0,o=i[0];if(!o)return{stdout:``,stderr:`error: empty commit set passed
77
- `,exitCode:128};let s=await Ac(e,t,o);if(s===void 0)return{stdout:``,stderr:`fatal: bad revision '${o}'\n`,exitCode:128};let c;try{c=await D({fs:e.lfs,dir:t,ref:`HEAD`})}catch{return{stdout:``,stderr:`fatal: your current branch does not have any commits yet
76
+ `,stderr:``,exitCode:0}}let r=n.find(e=>!e.startsWith(`-`))??`HEAD`;try{if(n.includes(`--abbrev-ref`))return r===`HEAD`?{stdout:`${await j({fs:e.lfs,dir:t})??`HEAD`}\n`,stderr:``,exitCode:0}:{stdout:`${r.replace(/^refs\/(?:heads|tags|remotes)\//,``)}\n`,stderr:``,exitCode:0};let i=await Dc(e,t,r),a=n.find(e=>e===`--short`||e.startsWith(`--short=`)),o=a?.includes(`=`)?Number(a.split(`=`)[1]):7;return{stdout:`${a?i.slice(0,Number.isFinite(o)?o:7):i}\n`,stderr:``,exitCode:0}}catch{return{stdout:``,stderr:`fatal: ambiguous argument '${r}'\n`,exitCode:128}}}async function Bd(e,t,n){let{flags:r,positionals:i}=M(n,L.revert),a=r[`no-commit`]===!0,o=i[0];if(!o)return{stdout:``,stderr:`error: empty commit set passed
77
+ `,exitCode:128};let s=await kc(e,t,o);if(s===void 0)return{stdout:``,stderr:`fatal: bad revision '${o}'\n`,exitCode:128};let c;try{c=await D({fs:e.lfs,dir:t,ref:`HEAD`})}catch{return{stdout:``,stderr:`fatal: your current branch does not have any commits yet
78
78
  `,exitCode:128}}let{commit:l}=await A({fs:e.lfs,cache:e.cache,dir:t,oid:s});if(l.parent.length!==1)return{stdout:``,stderr:`error: commit ${s} is a merge but no -m option was given.\nfatal: revert failed\n`,exitCode:128};let u=l.parent[0],d=l.message.split(`
79
- `)[0],f=s.slice(0,7),p=await j({fs:e.lfs,dir:t})??`HEAD`;try{let n=await Hd(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>',
79
+ `)[0],f=s.slice(0,7),p=await j({fs:e.lfs,dir:t})??`HEAD`;try{let n=await Vd(e,t,c,s,u,{current:p,base:f,other:`parent of ${f} (${d})`});if(n.length>0){let e=``;for(let t of n)e+=`CONFLICT (content): Merge conflict in ${t}\n`;return e+=`error: could not revert ${f}... ${d}\n`,e+=`hint: after resolving the conflicts, mark them with 'git add <paths>',
80
80
  `,e+=`hint: then commit the result.
81
- `,{stdout:``,stderr:e,exitCode:1}}if(a)return{stdout:``,stderr:``,exitCode:0};let r=await e.resolveAuthor(t),i=`Revert "${d}"\n\nThis reverts commit ${s}.\n`;return{stdout:`[${p} ${(await bn({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: ${ac(e)}\n`,exitCode:128}}}async function Hd(e,t,n,r,i,a){let[o,s,c]=await Promise.all([O({fs:e.lfs,cache:e.cache,dir:t,ref:n}),O({fs:e.lfs,cache:e.cache,dir:t,ref:r}),O({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 Ud(e,t,r,o),c=await Ud(e,t,i,o);if(s===c)continue;let l=await Ud(e,t,n,o)??``,f,p=!1;if(l===(s??``))f=c??``;else{let e=Je(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 gn({fs:e.lfs,cache:e.cache,dir:t,filepath:o})}return d}async function Ud(e,t,n,r){try{let{blob:i}=await Qt({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 cn({fs:e.lfs,cache:e.cache,dir:t,filepath:n})}catch{}}async function Gd(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 Kd(e,t,n,r,i);if(a)return a}return{stdout:``,stderr:``,exitCode:0}}async function Kd(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 O({fs:e.lfs,cache:e.cache,dir:t})).filter(e=>e===n||e.startsWith(n+`/`));for(let n of a)if(await cn({fs:e.lfs,cache:e.cache,dir:t,filepath:n}),!r)try{await e.fs.rm(`${t}/${n}`)}catch{}}else if(await cn({fs:e.lfs,cache:e.cache,dir:t,filepath:n}),!r)try{await e.fs.rm(a)}catch{}return null}async function qd(e,t,n){let{flags:r,positionals:i}=M(n,L.show),a=r,o=a.stat===!0,s=R(a,`format`),c=i[0];if(c?.includes(`:`))return await Jd(e,t,c);let l=c??`HEAD`,u=await Ac(e,t,l);if(u===void 0)return{stdout:``,stderr:`fatal: bad object ${l}\n`,exitCode:128};let{commit:d}=await A({fs:e.lfs,cache:e.cache,dir:t,oid:u}),f=Yd(u,d,s,e.useColor),p=d.parent.length>0?d.parent[0]:void 0;if(p){let n=await tu(e,t,p,u,{nameOnly:!1,stat:o});f+=n.stdout}else{let n=await gu(e,t,u,o);f+=n}return{stdout:f,stderr:``,exitCode:0}}async function Jd(e,t,n){let r=n.indexOf(`:`),i=n.slice(0,r)||`HEAD`,a=n.slice(r+1),o=await Ac(e,t,i);if(o===void 0)return{stdout:``,stderr:`fatal: bad object ${i}\n`,exitCode:128};let s=await Qt({fs:e.lfs,cache:e.cache,dir:t,oid:o,filepath:a});return{stdout:new TextDecoder().decode(s.blob),stderr:``,exitCode:0}}function Yd(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(`
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 xn({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: ${ic(e)}\n`,exitCode:128}}}async function Vd(e,t,n,r,i,a){let[o,s,c]=await Promise.all([O({fs:e.lfs,cache:e.cache,dir:t,ref:n}),O({fs:e.lfs,cache:e.cache,dir:t,ref:r}),O({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 Hd(e,t,r,o),c=await Hd(e,t,i,o);if(s===c)continue;let l=await Hd(e,t,n,o)??``,f,p=!1;if(l===(s??``))f=c??``;else{let e=Ye(l,s??``,c??``,{labels:a});f=e.content,p=e.conflicts>0}if(!p&&c===void 0&&f===``){await Ud(e,t,o);continue}await e.fs.writeFile(`${t}/${o}`,u.encode(f)),p?d.push(o):await _n({fs:e.lfs,cache:e.cache,dir:t,filepath:o})}return d}async function Hd(e,t,n,r){try{let{blob:i}=await $t({fs:e.lfs,cache:e.cache,dir:t,oid:n,filepath:r});return new TextDecoder().decode(i)}catch{return}}async function Ud(e,t,n){try{await e.fs.rm(`${t}/${n}`)}catch{}try{await ln({fs:e.lfs,cache:e.cache,dir:t,filepath:n})}catch{}}async function Wd(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 Gd(e,t,n,r,i);if(a)return a}return{stdout:``,stderr:``,exitCode:0}}async function Gd(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 O({fs:e.lfs,cache:e.cache,dir:t})).filter(e=>e===n||e.startsWith(n+`/`));for(let n of a)if(await ln({fs:e.lfs,cache:e.cache,dir:t,filepath:n}),!r)try{await e.fs.rm(`${t}/${n}`)}catch{}}else if(await ln({fs:e.lfs,cache:e.cache,dir:t,filepath:n}),!r)try{await e.fs.rm(a)}catch{}return null}async function Kd(e,t,n){let{flags:r,positionals:i}=M(n,L.show),a=r,o=a.stat===!0,s=R(a,`format`),c=i[0];if(c?.includes(`:`))return await qd(e,t,c);let l=c??`HEAD`,u=await kc(e,t,l);if(u===void 0)return{stdout:``,stderr:`fatal: bad object ${l}\n`,exitCode:128};let{commit:d}=await A({fs:e.lfs,cache:e.cache,dir:t,oid:u}),f=Jd(u,d,s,e.useColor),p=d.parent.length>0?d.parent[0]:void 0;if(p){let n=await eu(e,t,p,u,{nameOnly:!1,stat:o});f+=n.stdout}else{let n=await hu(e,t,u,o);f+=n}return{stdout:f,stderr:``,exitCode:0}}async function qd(e,t,n){let r=n.indexOf(`:`),i=n.slice(0,r)||`HEAD`,a=n.slice(r+1),o=await kc(e,t,i);if(o===void 0)return{stdout:``,stderr:`fatal: bad object ${i}\n`,exitCode:128};let s=await $t({fs:e.lfs,cache:e.cache,dir:t,oid:o,filepath:a});return{stdout:new TextDecoder().decode(s.blob),stderr:``,exitCode:0}}function Jd(e,t,n,r=!1){if(n)return n.replace(/%H/g,e).replace(/%h/g,e.slice(0,7)).replace(/%s/g,t.message.split(`
83
83
  `)[0]).replace(/%an/g,t.author.name).replace(/%ae/g,t.author.email).replace(/%ad/g,new Date(t.author.timestamp*1e3).toLocaleString())+`
84
- `;let i=`${yc(r,`33`,`commit ${e}`)}\n`;return i+=`Author: ${t.author.name} <${t.author.email}>\n`,i+=`Date: ${new Date(t.author.timestamp*1e3).toLocaleString()}\n\n`,i+=` ${t.message.replace(/\n/g,`
85
- `)}\n\n`,i}async function Xd(e,t,n){let r=n.includes(`--heads`),i=n.includes(`--tags`),a=n.find(e=>!e.startsWith(`-`)),o=``;if(!i){let n=await Zt({fs:e.lfs,dir:t});for(let r of n){let n=await D({fs:e.lfs,dir:t,ref:r}),i=`refs/heads/${r}`;a&&!i.includes(a)||(o+=`${n} ${i}\n`)}}if(!r){let n=await Yt({fs:e.lfs,dir:t});for(let r of n){let n=await D({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 Zd=new Uint8Array;async function Qd(e,t){return await e.fs.readFile(t,{encoding:`binary`})}function $d(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 ef(e){if(!e.includes(0))try{return new TextDecoder(`utf-8`,{fatal:!0}).decode(e)}catch{return}}async function tf(e,t,n){let r=n[0];if(!r||r.startsWith(`-`))return nf(e,t,n);switch(r){case`push`:case`save`:return nf(e,t,n.slice(1));case`pop`:return sf(e,t);case`apply`:return cf(e,t);case`list`:return pf(e,t);case`drop`:return mf(e,t,n.slice(1));case`show`:return hf(e,t);default:return{stdout:``,stderr:`error: unknown subcommand: ${r}\n`,exitCode:1}}}async function nf(e,t,n){let r=await j({fs:e.lfs,dir:t})??`HEAD`,i;try{i=await D({fs:e.lfs,dir:t,ref:`HEAD`})}catch{return{stdout:``,stderr:`fatal: cannot stash without a HEAD commit
86
- `,exitCode:128}}let a=await O({fs:e.lfs,cache:e.cache,dir:t,ref:`HEAD`}),o=await O({fs:e.lfs,cache:e.cache,dir:t}),s=new Set([...a,...o]),c=await k({fs:e.lfs,cache:e.cache,dir:t});for(let[e,t,,n]of c)t===0&&n!==0&&s.add(e);let{dirtyFiles:l,indexEntries:u}=await rf(e,t,i,s,a);if(l.length===0)return{stdout:``,stderr:`No local changes to save
87
- `,exitCode:1};let d=await of(e,t,u),f=[i];try{let n=await D({fs:e.lfs,dir:t,ref:`refs/stash`});f.push(n)}catch{}let{commit:p}=await A({fs:e.lfs,cache:e.cache,dir:t,oid:i}),m=`WIP on ${r}: ${i.slice(0,7)} ${p.message.split(`
88
- `)[0]}`,h=await e.resolveAuthor(t),g=Math.floor(Date.now()/1e3),_=await An({fs:e.lfs,dir:t,commit:{tree:d,parent:f,author:{...h,timestamp:g,timezoneOffset:0},committer:{...h,timestamp:g,timezoneOffset:0},message:m}});return await en({fs:e.lfs,dir:t,ref:`refs/stash`,value:_,force:!0}),await af(e,t,i,l),{stdout:`Saved working directory and index state ${m}\n`,stderr:``,exitCode:0}}async function rf(e,t,n,r,i){let a=[],o=[];for(let s of r){let r=i.includes(s),c;try{c=await Qd(e,`${t}/${s}`)}catch{}if(r){let{blob:r}=await Qt({fs:e.lfs,cache:e.cache,dir:t,oid:n,filepath:s});if(c===void 0)a.push({file:s,inHead:!0,existsInWorkdir:!1});else if($d(c,r)){let n=await tn({fs:e.lfs,dir:t,blob:r});o.push({filepath:s,oid:n})}else{a.push({file:s,inHead:!0,existsInWorkdir:!0});let n=await tn({fs:e.lfs,dir:t,blob:c});o.push({filepath:s,oid:n})}}else if(c!==void 0){a.push({file:s,inHead:!1,existsInWorkdir:!0});let n=await tn({fs:e.lfs,dir:t,blob:c});o.push({filepath:s,oid:n})}}return{dirtyFiles:a,indexEntries:o}}async function af(e,t,n,r){for(let i of r)if(i.inHead){let{blob:r}=await Qt({fs:e.lfs,cache:e.cache,dir:t,oid:n,filepath:i.file});await e.fs.writeFile(`${t}/${i.file}`,r),await zn({fs:e.lfs,cache:e.cache,dir:t,filepath:i.file,ref:n})}else{try{await e.fs.rm(`${t}/${i.file}`)}catch{}try{await cn({fs:e.lfs,cache:e.cache,dir:t,filepath:i.file})}catch{}}}async function of(e,t,n){let r=new Map;for(let{filepath:e,oid:t}of n){let n=e.split(`/`),i=r;for(let e=0;e<n.length-1;e++){let t=i.get(n[e]);t?.type!==`tree`&&(t={type:`tree`,children:new Map},i.set(n[e],t)),i=t.children}i.set(n[n.length-1],{type:`blob`,oid:t,mode:`100644`})}let i=async n=>{let r=[];for(let[e,t]of n)if(t.type===`blob`)r.push({mode:t.mode,path:e,oid:t.oid,type:`blob`});else{let n=await i(t.children);r.push({mode:`040000`,path:e,oid:n,type:`tree`})}return await mn({fs:e.lfs,dir:t,tree:r})};return i(r)}async function sf(e,t){return lf(e,t,!0)}async function cf(e,t){return lf(e,t,!1)}async function lf(e,t,n){let r;try{r=await D({fs:e.lfs,dir:t,ref:`refs/stash`})}catch{return{stdout:``,stderr:`error: No stash entries found.
89
- `,exitCode:1}}let{commit:i}=await A({fs:e.lfs,cache:e.cache,dir:t,oid:r}),a=await D({fs:e.lfs,dir:t,ref:`HEAD`}),o=i.parent[0]??a,{conflicts:s,warnings:c}=await uf(e,t,i.tree,o);if(s.length>0){let e=s.map(e=>`CONFLICT (content): Merge conflict in ${e}\n`).join(``),t=n?`The stash entry is kept in case you need it again.
90
- `:``;return{stdout:e,stderr:c.join(``)+t,exitCode:1}}return n?(i.parent.length>1?await en({fs:e.lfs,dir:t,ref:`refs/stash`,value:i.parent[1],force:!0}):await gf(e,t,`refs/stash`),{stdout:`Dropped refs/stash@{0} (${r.slice(0,7)})\n`,stderr:``,exitCode:0}):{stdout:``,stderr:``,exitCode:0}}async function uf(e,t,n,r){let i=new Map,a=async(n,r)=>{let{tree:o}=await nn({fs:e.lfs,cache:e.cache,dir:t,oid:n});for(let n of o){let o=r?`${r}/${n.path}`:n.path;if(n.type===`blob`){let{blob:r}=await Qt({fs:e.lfs,cache:e.cache,dir:t,oid:n.oid});i.set(o,r)}else n.type===`tree`&&await a(n.oid,o)}};await a(n,``);let o=new Set;try{let n=await O({fs:e.lfs,cache:e.cache,dir:t,ref:r});for(let e of n)o.add(e)}catch{}let s=[],c=[];for(let[n,a]of i){let i=o.has(n)?await ff(e,t,r,n):Zd,l;try{l=await Qd(e,`${t}/${n}`)}catch{}let{merged:u,conflicted:d,binary:f}=df(l,i,a),p=n.lastIndexOf(`/`);p!==-1&&await e.fs.mkdir(`${t}/${n.slice(0,p)}`,{recursive:!0}),await e.fs.writeFile(`${t}/${n}`,u),f&&c.push(`warning: Cannot merge binary files: ${n} (Updated upstream vs Stashed changes)\n`),d?s.push(n):$d(u,i)||await gn({fs:e.lfs,cache:e.cache,dir:t,filepath:n})}for(let n of o)if(!i.has(n)){try{await e.fs.rm(`${t}/${n}`)}catch{}await cn({fs:e.lfs,cache:e.cache,dir:t,filepath:n})}return{conflicts:s,warnings:c}}function df(e,t,n){if(e===void 0||$d(e,n)||$d(e,t))return{merged:n,conflicted:!1,binary:!1};if($d(n,t))return{merged:e,conflicted:!1,binary:!1};let r=ef(e),i=ef(t),a=ef(n);if(r===void 0||i===void 0||a===void 0)return{merged:e,conflicted:!0,binary:!0};let o=Je(r,i,a,{labels:{current:`Updated upstream`,base:`stash base`,other:`Stashed changes`}});return{merged:new TextEncoder().encode(o.content),conflicted:o.conflicts>0,binary:!1}}async function ff(e,t,n,r){try{let{blob:i}=await Qt({fs:e.lfs,cache:e.cache,dir:t,oid:n,filepath:r});return i}catch{return Zd}}async function pf(e,t){let n=``,r=0;try{let i=await D({fs:e.lfs,dir:t,ref:`refs/stash`});for(;i;){let{commit:a}=await A({fs:e.lfs,cache:e.cache,dir:t,oid:i});if(n+=`stash@{${r}}: ${a.message}\n`,r++,a.parent.length>1)i=a.parent[1];else break}}catch{}return{stdout:n,stderr:``,exitCode:0}}async function mf(e,t,n){let r=0,i=n.find(e=>e.startsWith(`stash@{`));if(i){let e=i.match(/stash@\{(\d+)\}/);e&&(r=parseInt(e[1],10))}let a;try{a=await D({fs:e.lfs,dir:t,ref:`refs/stash`})}catch{return{stdout:``,stderr:`error: No stash entries found.
91
- `,exitCode:1}}if(r===0){let{commit:n}=await A({fs:e.lfs,cache:e.cache,dir:t,oid:a});return n.parent.length>1?await en({fs:e.lfs,dir:t,ref:`refs/stash`,value:n.parent[1],force:!0}):await gf(e,t,`refs/stash`),{stdout:`Dropped refs/stash@{0} (${a.slice(0,7)})\n`,stderr:``,exitCode:0}}let o=[],s=a;for(let n=0;n<r;n++){let{commit:n}=await A({fs:e.lfs,cache:e.cache,dir:t,oid:s});if(o.push({oid:s,commit:n}),n.parent.length<=1)return{stdout:``,stderr:`error: stash@{${r}} not found\n`,exitCode:1};s=n.parent[1]}let c=s,{commit:l}=await A({fs:e.lfs,cache:e.cache,dir:t,oid:c}),u=l.parent.length>1?l.parent[1]:void 0;for(let n=o.length-1;n>=0;n--){let r=o[n],i=[r.commit.parent[0]];u&&i.push(u),u=await An({fs:e.lfs,dir:t,commit:{...r.commit,parent:i}})}return u?await en({fs:e.lfs,dir:t,ref:`refs/stash`,value:u,force:!0}):await gf(e,t,`refs/stash`),{stdout:`Dropped refs/stash@{${r}} (${c.slice(0,7)})\n`,stderr:``,exitCode:0}}async function hf(e,t){let n;try{n=await D({fs:e.lfs,dir:t,ref:`refs/stash`})}catch{return{stdout:``,stderr:`error: No stash entries found.
92
- `,exitCode:1}}let{commit:r}=await A({fs:e.lfs,cache:e.cache,dir:t,oid:n}),i=r.parent[0];return tu(e,t,i,n,{nameOnly:!1,stat:!0})}async function gf(e,t,n){try{await e.lfs.unlink(`${t}/.git/${n}`)}catch{}}async function _f(e,t,n){let r=n.includes(`--short`)||n.includes(`-s`),i=n.includes(`--porcelain`),a=n.indexOf(`--`),o=a===-1?[]:n.slice(a+1);if(r||i)return bf(e,t,o);let s=``;try{let n=await j({fs:e.lfs,dir:t});s+=`On branch ${n??`(no branch)`}\n`}catch{s+=`Not on any branch.
93
- `}let c=await al(e,t);c?(await ul(e,t)).length>0?(s+=`You have unmerged paths.
84
+ `;let i=`${vc(r,`33`,`commit ${e}`)}\n`;return i+=`Author: ${t.author.name} <${t.author.email}>\n`,i+=`Date: ${new Date(t.author.timestamp*1e3).toLocaleString()}\n\n`,i+=` ${t.message.replace(/\n/g,`
85
+ `)}\n\n`,i}async function Yd(e,t,n){let r=n.includes(`--heads`),i=n.includes(`--tags`),a=n.find(e=>!e.startsWith(`-`)),o=``;if(!i){let n=await Qt({fs:e.lfs,dir:t});for(let r of n){let n=await D({fs:e.lfs,dir:t,ref:r}),i=`refs/heads/${r}`;a&&!i.includes(a)||(o+=`${n} ${i}\n`)}}if(!r){let n=await Xt({fs:e.lfs,dir:t});for(let r of n){let n=await D({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 Xd=new Uint8Array;async function Zd(e,t){return await e.fs.readFile(t,{encoding:`binary`})}function Qd(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 $d(e){if(!e.includes(0))try{return new TextDecoder(`utf-8`,{fatal:!0}).decode(e)}catch{return}}async function ef(e,t,n){let r=n[0];if(!r||r.startsWith(`-`))return tf(e,t,n);switch(r){case`push`:case`save`:return tf(e,t,n.slice(1));case`pop`:return of(e,t);case`apply`:return sf(e,t);case`list`:return ff(e,t);case`drop`:return pf(e,t,n.slice(1));case`show`:return mf(e,t);default:return{stdout:``,stderr:`error: unknown subcommand: ${r}\n`,exitCode:1}}}async function tf(e,t,n){let r=await j({fs:e.lfs,dir:t})??`HEAD`,i;try{i=await D({fs:e.lfs,dir:t,ref:`HEAD`})}catch{return{stdout:``,stderr:`fatal: cannot stash without a HEAD commit
86
+ `,exitCode:128}}let a=await O({fs:e.lfs,cache:e.cache,dir:t,ref:`HEAD`}),o=await O({fs:e.lfs,cache:e.cache,dir:t}),s=new Set([...a,...o]),c=await k({fs:e.lfs,cache:e.cache,dir:t});for(let[e,t,,n]of c)t===0&&n!==0&&s.add(e);let{dirtyFiles:l,indexEntries:u}=await nf(e,t,i,s,a);if(l.length===0)return{stdout:``,stderr:`No local changes to save
87
+ `,exitCode:1};let d=await af(e,t,u),f=[i];try{let n=await D({fs:e.lfs,dir:t,ref:`refs/stash`});f.push(n)}catch{}let{commit:p}=await A({fs:e.lfs,cache:e.cache,dir:t,oid:i}),m=`WIP on ${r}: ${i.slice(0,7)} ${p.message.split(`
88
+ `)[0]}`,h=await e.resolveAuthor(t),g=Math.floor(Date.now()/1e3),_=await jn({fs:e.lfs,dir:t,commit:{tree:d,parent:f,author:{...h,timestamp:g,timezoneOffset:0},committer:{...h,timestamp:g,timezoneOffset:0},message:m}});return await tn({fs:e.lfs,dir:t,ref:`refs/stash`,value:_,force:!0}),await rf(e,t,i,l),{stdout:`Saved working directory and index state ${m}\n`,stderr:``,exitCode:0}}async function nf(e,t,n,r,i){let a=[],o=[];for(let s of r){let r=i.includes(s),c;try{c=await Zd(e,`${t}/${s}`)}catch{}if(r){let{blob:r}=await $t({fs:e.lfs,cache:e.cache,dir:t,oid:n,filepath:s});if(c===void 0)a.push({file:s,inHead:!0,existsInWorkdir:!1});else if(Qd(c,r)){let n=await nn({fs:e.lfs,dir:t,blob:r});o.push({filepath:s,oid:n})}else{a.push({file:s,inHead:!0,existsInWorkdir:!0});let n=await nn({fs:e.lfs,dir:t,blob:c});o.push({filepath:s,oid:n})}}else if(c!==void 0){a.push({file:s,inHead:!1,existsInWorkdir:!0});let n=await nn({fs:e.lfs,dir:t,blob:c});o.push({filepath:s,oid:n})}}return{dirtyFiles:a,indexEntries:o}}async function rf(e,t,n,r){for(let i of r)if(i.inHead){let{blob:r}=await $t({fs:e.lfs,cache:e.cache,dir:t,oid:n,filepath:i.file});await e.fs.writeFile(`${t}/${i.file}`,r),await Bn({fs:e.lfs,cache:e.cache,dir:t,filepath:i.file,ref:n})}else{try{await e.fs.rm(`${t}/${i.file}`)}catch{}try{await ln({fs:e.lfs,cache:e.cache,dir:t,filepath:i.file})}catch{}}}async function af(e,t,n){let r=new Map;for(let{filepath:e,oid:t}of n){let n=e.split(`/`),i=r;for(let e=0;e<n.length-1;e++){let t=i.get(n[e]);t?.type!==`tree`&&(t={type:`tree`,children:new Map},i.set(n[e],t)),i=t.children}i.set(n[n.length-1],{type:`blob`,oid:t,mode:`100644`})}let i=async n=>{let r=[];for(let[e,t]of n)if(t.type===`blob`)r.push({mode:t.mode,path:e,oid:t.oid,type:`blob`});else{let n=await i(t.children);r.push({mode:`040000`,path:e,oid:n,type:`tree`})}return await hn({fs:e.lfs,dir:t,tree:r})};return i(r)}async function of(e,t){return cf(e,t,!0)}async function sf(e,t){return cf(e,t,!1)}async function cf(e,t,n){let r;try{r=await D({fs:e.lfs,dir:t,ref:`refs/stash`})}catch{return{stdout:``,stderr:`error: No stash entries found.
89
+ `,exitCode:1}}let{commit:i}=await A({fs:e.lfs,cache:e.cache,dir:t,oid:r}),a=await D({fs:e.lfs,dir:t,ref:`HEAD`}),o=i.parent[0]??a,{conflicts:s,warnings:c}=await lf(e,t,i.tree,o);if(s.length>0){let e=s.map(e=>`CONFLICT (content): Merge conflict in ${e}\n`).join(``),t=n?`The stash entry is kept in case you need it again.
90
+ `:``;return{stdout:e,stderr:c.join(``)+t,exitCode:1}}return n?(i.parent.length>1?await tn({fs:e.lfs,dir:t,ref:`refs/stash`,value:i.parent[1],force:!0}):await hf(e,t,`refs/stash`),{stdout:`Dropped refs/stash@{0} (${r.slice(0,7)})\n`,stderr:``,exitCode:0}):{stdout:``,stderr:``,exitCode:0}}async function lf(e,t,n,r){let i=new Map,a=async(n,r)=>{let{tree:o}=await rn({fs:e.lfs,cache:e.cache,dir:t,oid:n});for(let n of o){let o=r?`${r}/${n.path}`:n.path;if(n.type===`blob`){let{blob:r}=await $t({fs:e.lfs,cache:e.cache,dir:t,oid:n.oid});i.set(o,r)}else n.type===`tree`&&await a(n.oid,o)}};await a(n,``);let o=new Set;try{let n=await O({fs:e.lfs,cache:e.cache,dir:t,ref:r});for(let e of n)o.add(e)}catch{}let s=[],c=[];for(let[n,a]of i){let i=o.has(n)?await df(e,t,r,n):Xd,l;try{l=await Zd(e,`${t}/${n}`)}catch{}let{merged:u,conflicted:d,binary:f}=uf(l,i,a),p=n.lastIndexOf(`/`);p!==-1&&await e.fs.mkdir(`${t}/${n.slice(0,p)}`,{recursive:!0}),await e.fs.writeFile(`${t}/${n}`,u),f&&c.push(`warning: Cannot merge binary files: ${n} (Updated upstream vs Stashed changes)\n`),d?s.push(n):Qd(u,i)||await _n({fs:e.lfs,cache:e.cache,dir:t,filepath:n})}for(let n of o)if(!i.has(n)){try{await e.fs.rm(`${t}/${n}`)}catch{}await ln({fs:e.lfs,cache:e.cache,dir:t,filepath:n})}return{conflicts:s,warnings:c}}function uf(e,t,n){if(e===void 0||Qd(e,n)||Qd(e,t))return{merged:n,conflicted:!1,binary:!1};if(Qd(n,t))return{merged:e,conflicted:!1,binary:!1};let r=$d(e),i=$d(t),a=$d(n);if(r===void 0||i===void 0||a===void 0)return{merged:e,conflicted:!0,binary:!0};let o=Ye(r,i,a,{labels:{current:`Updated upstream`,base:`stash base`,other:`Stashed changes`}});return{merged:new TextEncoder().encode(o.content),conflicted:o.conflicts>0,binary:!1}}async function df(e,t,n,r){try{let{blob:i}=await $t({fs:e.lfs,cache:e.cache,dir:t,oid:n,filepath:r});return i}catch{return Xd}}async function ff(e,t){let n=``,r=0;try{let i=await D({fs:e.lfs,dir:t,ref:`refs/stash`});for(;i;){let{commit:a}=await A({fs:e.lfs,cache:e.cache,dir:t,oid:i});if(n+=`stash@{${r}}: ${a.message}\n`,r++,a.parent.length>1)i=a.parent[1];else break}}catch{}return{stdout:n,stderr:``,exitCode:0}}async function pf(e,t,n){let r=0,i=n.find(e=>e.startsWith(`stash@{`));if(i){let e=i.match(/stash@\{(\d+)\}/);e&&(r=parseInt(e[1],10))}let a;try{a=await D({fs:e.lfs,dir:t,ref:`refs/stash`})}catch{return{stdout:``,stderr:`error: No stash entries found.
91
+ `,exitCode:1}}if(r===0){let{commit:n}=await A({fs:e.lfs,cache:e.cache,dir:t,oid:a});return n.parent.length>1?await tn({fs:e.lfs,dir:t,ref:`refs/stash`,value:n.parent[1],force:!0}):await hf(e,t,`refs/stash`),{stdout:`Dropped refs/stash@{0} (${a.slice(0,7)})\n`,stderr:``,exitCode:0}}let o=[],s=a;for(let n=0;n<r;n++){let{commit:n}=await A({fs:e.lfs,cache:e.cache,dir:t,oid:s});if(o.push({oid:s,commit:n}),n.parent.length<=1)return{stdout:``,stderr:`error: stash@{${r}} not found\n`,exitCode:1};s=n.parent[1]}let c=s,{commit:l}=await A({fs:e.lfs,cache:e.cache,dir:t,oid:c}),u=l.parent.length>1?l.parent[1]:void 0;for(let n=o.length-1;n>=0;n--){let r=o[n],i=[r.commit.parent[0]];u&&i.push(u),u=await jn({fs:e.lfs,dir:t,commit:{...r.commit,parent:i}})}return u?await tn({fs:e.lfs,dir:t,ref:`refs/stash`,value:u,force:!0}):await hf(e,t,`refs/stash`),{stdout:`Dropped refs/stash@{${r}} (${c.slice(0,7)})\n`,stderr:``,exitCode:0}}async function mf(e,t){let n;try{n=await D({fs:e.lfs,dir:t,ref:`refs/stash`})}catch{return{stdout:``,stderr:`error: No stash entries found.
92
+ `,exitCode:1}}let{commit:r}=await A({fs:e.lfs,cache:e.cache,dir:t,oid:n}),i=r.parent[0];return eu(e,t,i,n,{nameOnly:!1,stat:!0})}async function hf(e,t,n){try{await e.lfs.unlink(`${t}/.git/${n}`)}catch{}}async function gf(e,t,n){let r=n.includes(`--short`)||n.includes(`-s`),i=n.includes(`--porcelain`),a=n.indexOf(`--`),o=a===-1?[]:n.slice(a+1);if(r||i)return yf(e,t,o);let s=``;try{let n=await j({fs:e.lfs,dir:t});s+=`On branch ${n??`(no branch)`}\n`}catch{s+=`Not on any branch.
93
+ `}let c=await il(e,t);c?(await ll(e,t)).length>0?(s+=`You have unmerged paths.
94
94
  `,s+=` (fix conflicts and run "git commit")
95
95
  `,s+=` (use "git merge --abort" to abort the merge)
96
96
 
@@ -98,25 +98,25 @@ error: Please commit or stash them.
98
98
  `,s+=` (use "git commit" to conclude merge)
99
99
 
100
100
  `):s+=`
101
- `;let{staged:l,unstaged:u,untracked:d}=vf(await k({fs:e.lfs,cache:e.cache,dir:t,...cc}),o);return s+=yf(l,u,d,c,e.useColor),{stdout:s,stderr:``,exitCode:0}}function vf(e,t){let n=[],r=[],i=[];for(let[a,o,s,c]of e)Ic(a,t)&&(o===0&&s===2&&c===0?i.push(a):c===2||o===1&&c===0&&s===0?n.push(a):s!==c&&s!==0?r.push(a):o===1&&s===0&&c===1&&r.push(a+` (deleted)`));return{staged:n,unstaged:r,untracked:i}}function yf(e,t,n,r=!1,i=!1){let a=``;if(e.length>0){a+=`Changes to be committed:
101
+ `;let{staged:l,unstaged:u,untracked:d}=_f(await k({fs:e.lfs,cache:e.cache,dir:t,...sc}),o);return s+=vf(l,u,d,c,e.useColor),{stdout:s,stderr:``,exitCode:0}}function _f(e,t){let n=[],r=[],i=[];for(let[a,o,s,c]of e)Fc(a,t)&&(o===0&&s===2&&c===0?i.push(a):c===2||o===1&&c===0&&s===0?n.push(a):s!==c&&s!==0?r.push(a):o===1&&s===0&&c===1&&r.push(a+` (deleted)`));return{staged:n,unstaged:r,untracked:i}}function vf(e,t,n,r=!1,i=!1){let a=``;if(e.length>0){a+=`Changes to be committed:
102
102
  `,a+=` (use "git restore --staged <file>..." to unstage)
103
103
 
104
- `;for(let t of e)a+=`\t${yc(i,`32`,t)}\n`;a+=`
104
+ `;for(let t of e)a+=`\t${vc(i,`32`,t)}\n`;a+=`
105
105
  `}if(t.length>0){a+=`Changes not staged for commit:
106
106
  `,a+=` (use "git add <file>..." to update what will be committed)
107
107
 
108
- `;for(let e of t)a+=`\t${yc(i,`31`,e)}\n`;a+=`
108
+ `;for(let e of t)a+=`\t${vc(i,`31`,e)}\n`;a+=`
109
109
  `}if(n.length>0){a+=`Untracked files:
110
110
  `,a+=` (use "git add <file>..." to include in what will be committed)
111
111
 
112
- `;for(let e of n)a+=`\t${yc(i,`31`,e)}\n`;a+=`
112
+ `;for(let e of n)a+=`\t${vc(i,`31`,e)}\n`;a+=`
113
113
  `}return e.length===0&&t.length===0&&n.length===0&&!r&&(a+=`nothing to commit, working tree clean
114
- `),a}async function bf(e,t,n){let r=await k({fs:e.lfs,cache:e.cache,dir:t,...cc}),i=``;for(let[e,t,a,o]of r){if(!Ic(e,n))continue;let r=xf(t,a,o);r&&(i+=`${r[0]}${r[1]} ${e}\n`)}return{stdout:i,stderr:``,exitCode:0}}function xf(e,t,n){return e===0&&t===2&&n===0?[`?`,`?`]:e===0&&t===2&&n===2?[`A`,` `]:e===0&&t===2&&n===3?[`A`,`M`]:e===1&&t===2&&n===1?[` `,`M`]:e===1&&t===2&&n===2?[`M`,` `]:e===1&&t===2&&n===3?[`M`,`M`]:e===1&&t===0&&n===0?[`D`,` `]:e===1&&t===0&&n===1?[` `,`D`]:null}const Sf=`usage: git symbolic-ref <name>
114
+ `),a}async function yf(e,t,n){let r=await k({fs:e.lfs,cache:e.cache,dir:t,...sc}),i=``;for(let[e,t,a,o]of r){if(!Fc(e,n))continue;let r=bf(t,a,o);r&&(i+=`${r[0]}${r[1]} ${e}\n`)}return{stdout:i,stderr:``,exitCode:0}}function bf(e,t,n){return e===0&&t===2&&n===0?[`?`,`?`]:e===0&&t===2&&n===2?[`A`,` `]:e===0&&t===2&&n===3?[`A`,`M`]:e===1&&t===2&&n===1?[` `,`M`]:e===1&&t===2&&n===2?[`M`,` `]:e===1&&t===2&&n===3?[`M`,`M`]:e===1&&t===0&&n===0?[`D`,` `]:e===1&&t===0&&n===1?[` `,`D`]:null}const xf=`usage: git symbolic-ref <name>
115
115
  or: git symbolic-ref <name> <ref>
116
- or: git symbolic-ref (-d | --delete) <name>`;function Cf(e){let t=Array.isArray(e)?e[e.length-1]:e;return typeof t==`boolean`?t:void 0}function wf(e){let t={};typeof e.m==`string`&&(t.m=e.m);let n=Cf(e.delete);n!==void 0&&(t.delete=n);let r=Cf(e.d);r!==void 0&&(t.d=r);let i=Cf(e.quiet);i!==void 0&&(t.quiet=i);let a=Cf(e.q);a!==void 0&&(t.q=a);let o=Cf(e.short);o!==void 0&&(t.short=o);let s=Cf(e.recurse);return s!==void 0&&(t.recurse=s),t}function Tf(){return{stdout:``,stderr:`${Sf}\n`,exitCode:129}}function Ef(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 Df(e,t,n){try{let r=await D({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 Of(e,t,n,r){let i=await Df(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 Df(e,t,o);if(r.kind!==`symbolic`)return o;o=r.target}}function kf(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 Af(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${Sf}\n`,exitCode:129};if(e.m!==void 0)return{stdout:``,stderr:`fatal: option '-m' is not supported because reflogs are not persisted
117
- `,exitCode:128};if(e.delete===!1||t&&(e.short!==void 0||e.recurse!==void 0))return Tf()}async function jf(e,t,n,r){if(n===`HEAD`)return{stdout:``,stderr:`fatal: deleting 'HEAD' is not allowed
118
- `,exitCode:128};let i=await Df(e,t,n);return i.kind===`symbolic`?(await Sn({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 Mf(e,t,n,r){return Ef(r)?(await en({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 Nf(e,t,n,r){let i=await Of(e,t,n,r.recurse!==!1);return typeof i==`string`?{stdout:`${r.short?kf(i):i}\n`,stderr:``,exitCode:0}:r.quiet&&i.exitCode===1?{...i,stderr:``}:i}async function Pf(e,t,n){let{flags:r,positionals:i}=M(n,L[`symbolic-ref`]),a=r.delete===!0,o=Af(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?jf(e,t,i[0],!!r.quiet):Tf():i.length===2?s?Tf():Mf(e,t,i[0],i[1]):i.length===1?Nf(e,t,i[0],wf(r)):Tf()}async function Ff(e,t,n){let{flags:r,positionals:i}=M(n,L.tag),a=r,o=a.delete===!0,s=R(a,`list`),c=a.annotate===!0,l=R(a,`message`),u=a.force===!0;if(o){let n=i[0];return n?(await hn({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 Yt({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 Mn({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 dn({fs:e.lfs,dir:t,ref:d,object:f,force:u});return{stdout:``,stderr:``,exitCode:0}}function If(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 Lf(e,t){let n=t.mtimeMs??0;return{type:e,mode:If(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 Rf(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 zf(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 Vf=`/objects/pack`,Hf=/^(.*\/objects)\/([0-9a-f]{2})\/[0-9a-f]{38,}$/,Uf=/\/objects\/[0-9a-f]{2}$/;function Wf(e){return e.endsWith(Vf)||Uf.test(e)}function Gf(e){let t=Ye(e);return e.type===`directory`?t?{type:`dir`,stats:t}:{type:`dir`}:t?{type:`file`,stats:t}:void 0}function Kf(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=x(n),a=i===`/`?`/`:`${i}/`;for(let e of r){let n=Gf(e);n?t.set(`${a}${e.name}`,n):t.delete(`${a}${e.name}`)}},get(e){let n=t.get(x(e));if(n)return Lf(n.type,n.stats?Rf(n.stats):{})},drop(e){t.delete(x(e))},clear(){t.clear()},size(){return t.size}}}function qf(e,t={}){let n=t.objectCache?{packDirs:new Map,fanouts:new Map}:void 0,r=Kf(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!=null)return n;let r=i(t).then(e=>new Set(e));return e.fanouts.set(t,r),r},o=async e=>{if(!n)return!1;let t=Hf.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 Xe(`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,zf(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(Vf))return await i(e);let t=n.packDirs.get(e);if(t!=null)return[...await t];let r=i(e);return n.packDirs.set(e,r),[...await r]},async mkdir(t,n){let r=n??void 0;await c(t,()=>e.mkdir(t,r?.recursive===void 0?void 0:{recursive:r.recursive}))},async rmdir(t){r.clear(),await l(()=>e.rm(t))},async stat(t){let n=r.get(t);if(n)return n;let i=await e.stat(t);return Lf(i.type===`directory`?`dir`:`file`,Rf(i))},async lstat(t){let n=r.get(t);if(n)return n;let i=await e.lstat(t);return Lf(i.type===`directory`?`dir`:i.type===`symlink`?`symlink`:`file`,Rf(i))},async readlink(t){if(e.isPathUnderMount(t))throw new Xe(`EINVAL`,`symlinks not supported on mounted filesystems`,t);return e.readlink(t)},async symlink(t,n){if(e.isPathUnderMount(n))throw new Xe(`EINVAL`,`symlinks not supported on mounted filesystems`,n);await c(n,()=>e.symlink(t,n))}},clearStatCache(){r.clear()},statCacheSize(){return r.size()}}}const Jf={maxEntries:5e4,maxFileBytes:1048576,maxTotalBytes:8388608},Yf=new Set([`ENOENT`,`ENOTDIR`,`EISDIR`]);function Xf(e){return e.endsWith(`.pack`)||e.endsWith(`.idx`)}function Zf(e){let t=e.replace(/\/{2,}/g,`/`);return t.length>1&&t.endsWith(`/`)?t.slice(0,-1):t}function Qf(e){let t=e.lastIndexOf(`/`);return t<0?`.`:t===0?`/`:e.slice(0,t)}function $f(e){let t=e?.code;return typeof t==`string`?t:void 0}function ep(e){return typeof e==`string`?e.length*2:e.byteLength}function tp(e,t){return`${t?`u`:`b`} ${e}`}var np=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=ep(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[tp(e,!0),tp(e,!1)])this.files.delete(t),this.dropFile(t)}invalidatePath(e){let t=Zf(e);this.forgetSelf(t);let n=Qf(t);this.dirs.delete(n),this.stats.delete(n),this.lstats.delete(n)}invalidateSubtree(e){let t=Zf(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 rp(e,t,n,r){let i=e.get(t);if(i!=null)return i;let a=n();if(!r.admit())return a;e.set(t,a);let o=()=>{e.get(t)===a&&e.delete(t)};return a.then(e=>{r.keep&&!r.keep(e)&&o()},e=>{Yf.has($f(e)??``)||o()}),a}function ip(e,t={}){let n=new np({...Jf,...t}),r=()=>n.hasRoom(),i=async t=>(await rp(n.dirs,Zf(t),()=>e.readdir(t),{admit:r})).slice(),a=async(t,i)=>{if(Xf(t))return e.readFile(t,i);let a=tp(Zf(t),zf(i)),o=await rp(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=>rp(e,Zf(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 ap=e(`git-cache`);function op(e){for(let t of Object.getOwnPropertySymbols(e)){if(t.description!==`PackfileCache`)continue;let n=e[t];if(n instanceof Map)return n}}function sp(e){return`${e.replace(/\/+$/,``)}/.git`}var cp=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=sp(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=sp(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=op(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=op(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=`${sp(e)}/objects/pack/`,n=op(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=op(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;ap.debug(`unloaded packfile buffers past the resident bound`,{unloaded:t.length,resident:this.maxResidentPacks})}};const lp=e(`git-commands`),up=new Set([`clone`,`fetch`,`pull`,`push`,`ls-remote`]),dp=new Set([`clone`,`fetch`,`pull`]),fp=new Set([`add`,`branch`,`commit`,`diff`,`init`,`log`,`ls-files`,`ls-tree`,`merge-base`,`rev-parse`,`show`,`show-ref`,`status`,`symbolic-ref`,`tag`]),pp={string:[`c`,`C`,`git-dir`,`work-tree`],boolean:[`help`,`version`,`no-pager`,`paginate`,`no-replace-objects`,`color`],alias:{h:`help`},stopEarly:!0};function mp(e){return e===void 0?[]:(Array.isArray(e)?e:[e]).map(e=>String(e))}function hp(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 gp=class e{options;static globalFsByDbName=new Map;lfs;corsProxy;authorName;authorEmail;globalDbName;githubToken;currentEnv;currentConfigOverrides;currentStdin=``;cacheManager;constructor(e){this.options=e,this.lfs=qf(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 cp(this.lfs,{...e.maxResidentPacks===void 0?{}:{maxResidentPacks:e.maxResidentPacks}})}contextFor(e,t){let n=qf(this.options.fs,{objectCache:!0}),r=fp.has(e)?ip(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){lp.warn(`GitHub token force-renew after 401 failed`,{error:e instanceof Error?e.message:String(e)});return}await this.loadGithubToken();let t=this.resolveAuthToken();if(t)return{username:`x-access-token`,password:t}}}resolveAuthToken(e=this.currentEnv){if(this.githubToken)return this.githubToken;if(!e)return;let t=hp(e,`GH_TOKEN`);if(t)return t;let n=hp(e,`GITHUB_TOKEN`);if(n)return n}async githubCredential(e,t){return await this.ensureFreshGithubToken(t),await this.loadGithubToken(),this.resolveAuthToken(e)}async identity(){let e=await this.getGlobalFs();return{name:await or(e,`user.name`)??this.authorName,email:await or(e,`user.email`)??this.authorEmail}}getGlobalFs(){let t=e.globalFsByDbName.get(this.globalDbName);if(t!=null)return t;let n=ot.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){lp.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 ln({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 or(i,`user.name`)??this.authorName,email:r?.get(`user.email`)??await n(`user.email`)??await or(i,`user.email`)??this.authorEmail}}async execute(e,t,n,r,i){if(e.length===0)return this.help();let a=this.stripGlobalFlags(hc(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=L[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),up.has(s)&&await this.ensureFreshGithubToken(),await this.loadGithubToken(),await this.dispatch(s,p,o,c)}catch(e){return{stdout:``,stderr:`fatal: ${ac(e)}\n`,exitCode:128}}finally{await this.cacheManager.afterCommand(o,{wrotePacks:dp.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 yu(t,n,r);case`clone`:return await Yc(t,n,r);case`add`:return await Gs(t,n,r);case`status`:return await _f(t,n,r);case`commit`:return await fl(t,n,r);case`log`:return await Du(t,n,r);case`ls-remote`:return await Xu(t,n,r);case`branch`:return await bc(t,n,r);case`checkout`:return await xc(t,n,r);case`clean`:return await Bc(t,n,r);case`diff`:return await Yl(t,n,r);case`show`:return await qd(t,n,r);case`remote`:return await Nd(t,n,r);case`fetch`:return await _u(t,n,r);case`pull`:return await dd(t,n,r);case`push`:return await fd(t,n,r);case`merge`:return await ad(t,n,r);case`merge-base`:return await cd(t,n,r);case`cherry-pick`:return await Rc(t,n,r);case`rebase`:return await hd(t,n,r);case`revert`:return await Vd(t,n,r);case`merge-file`:return await ud(t,n,r);case`reset`:return await Pd(t,n,r);case`config`:return await Tl(t,n,r);case`tag`:return await Ff(t,n,r);case`ls-files`:return await qu(t,n,r);case`ls-tree`:return await Qu(t,n,r);case`show-ref`:return await Xd(t,n,r);case`symbolic-ref`:return await Pf(t,n,r);case`stash`:return await tf(t,n,r);case`rm`:return await Gd(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 vc({cliWhen:mc(e),colorUi:n?.get(`color.ui`),noColorEnv:!!(t&&hp(t,`NO_COLOR`)),stdoutIsTTY:r?.stdoutIsTTY===!0,term:t?hp(t,`TERM`):void 0})}shouldVerifyPackfiles(){let e=this.currentEnv,t=e?hp(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,pp),r=t;for(let e of mp(n.flags.C))e!==``&&(r=e.startsWith(`/`)?e:`${r}/${e}`);let i=new Map;for(let e of mp(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 ${pn()})\n`,stderr:``,exitCode:0}}help(){return{stdout:`usage: git <command> [<args>]
116
+ or: git symbolic-ref (-d | --delete) <name>`;function Sf(e){let t=Array.isArray(e)?e[e.length-1]:e;return typeof t==`boolean`?t:void 0}function Cf(e){let t={};typeof e.m==`string`&&(t.m=e.m);let n=Sf(e.delete);n!==void 0&&(t.delete=n);let r=Sf(e.d);r!==void 0&&(t.d=r);let i=Sf(e.quiet);i!==void 0&&(t.quiet=i);let a=Sf(e.q);a!==void 0&&(t.q=a);let o=Sf(e.short);o!==void 0&&(t.short=o);let s=Sf(e.recurse);return s!==void 0&&(t.recurse=s),t}function wf(){return{stdout:``,stderr:`${xf}\n`,exitCode:129}}function Tf(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 Ef(e,t,n){try{let r=await D({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 Df(e,t,n,r){let i=await Ef(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 Ef(e,t,o);if(r.kind!==`symbolic`)return o;o=r.target}}function Of(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 kf(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${xf}\n`,exitCode:129};if(e.m!==void 0)return{stdout:``,stderr:`fatal: option '-m' is not supported because reflogs are not persisted
117
+ `,exitCode:128};if(e.delete===!1||t&&(e.short!==void 0||e.recurse!==void 0))return wf()}async function Af(e,t,n,r){if(n===`HEAD`)return{stdout:``,stderr:`fatal: deleting 'HEAD' is not allowed
118
+ `,exitCode:128};let i=await Ef(e,t,n);return i.kind===`symbolic`?(await Cn({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 jf(e,t,n,r){return Tf(r)?(await tn({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 Mf(e,t,n,r){let i=await Df(e,t,n,r.recurse!==!1);return typeof i==`string`?{stdout:`${r.short?Of(i):i}\n`,stderr:``,exitCode:0}:r.quiet&&i.exitCode===1?{...i,stderr:``}:i}async function Nf(e,t,n){let{flags:r,positionals:i}=M(n,L[`symbolic-ref`]),a=r.delete===!0,o=kf(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?Af(e,t,i[0],!!r.quiet):wf():i.length===2?s?wf():jf(e,t,i[0],i[1]):i.length===1?Mf(e,t,i[0],Cf(r)):wf()}async function Pf(e,t,n){let{flags:r,positionals:i}=M(n,L.tag),a=r,o=a.delete===!0,s=R(a,`list`),c=a.annotate===!0,l=R(a,`message`),u=a.force===!0;if(o){let n=i[0];return n?(await gn({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 Xt({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 Nn({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 fn({fs:e.lfs,dir:t,ref:d,object:f,force:u});return{stdout:``,stderr:``,exitCode:0}}function Ff(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 If(e,t){let n=t.mtimeMs??0;return{type:e,mode:Ff(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 Lf(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 Rf(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 zf(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 Bf=`/objects/pack`,Vf=/^(.*\/objects)\/([0-9a-f]{2})\/[0-9a-f]{38,}$/,Hf=/\/objects\/[0-9a-f]{2}$/;function Uf(e){return e.endsWith(Bf)||Hf.test(e)}function Wf(e){let t=Xe(e);return e.type===`directory`?t?{type:`dir`,stats:t}:{type:`dir`}:t?{type:`file`,stats:t}:void 0}function Gf(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=x(n),a=i===`/`?`/`:`${i}/`;for(let e of r){let n=Wf(e);n?t.set(`${a}${e.name}`,n):t.delete(`${a}${e.name}`)}},get(e){let n=t.get(x(e));if(n)return If(n.type,n.stats?Lf(n.stats):{})},drop(e){t.delete(x(e))},clear(){t.clear()},size(){return t.size}}}function Kf(e,t={}){let n=t.objectCache?{packDirs:new Map,fanouts:new Map}:void 0,r=Gf(Math.max(0,t.statCacheMax??1e5)),i=async t=>{let n=await e.readDir(t,Uf(t)?void 0:{includeStats:!0});return r.prime(t,n),n.map(e=>e.name)},a=(e,t)=>{let n=e.fanouts.get(t);if(n!=null)return n;let r=i(t).then(e=>new Set(e));return e.fanouts.set(t,r),r},o=async e=>{if(!n)return!1;let t=Vf.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 Ze(`ENOENT`,`no such file or directory`,t);let r=zf(n);return r?await e.readFileRange(t,r.start,r.end):await e.readFile(t,Rf(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(Bf))return await i(e);let t=n.packDirs.get(e);if(t!=null)return[...await t];let r=i(e);return n.packDirs.set(e,r),[...await r]},async mkdir(t,n){let r=n??void 0;await c(t,()=>e.mkdir(t,r?.recursive===void 0?void 0:{recursive:r.recursive}))},async rmdir(t){r.clear(),await l(()=>e.rm(t))},async stat(t){let n=r.get(t);if(n)return n;let i=await e.stat(t);return If(i.type===`directory`?`dir`:`file`,Lf(i))},async lstat(t){let n=r.get(t);if(n)return n;let i=await e.lstat(t);return If(i.type===`directory`?`dir`:i.type===`symlink`?`symlink`:`file`,Lf(i))},async readlink(t){if(e.isPathUnderMount(t))throw new Ze(`EINVAL`,`symlinks not supported on mounted filesystems`,t);return e.readlink(t)},async symlink(t,n){if(e.isPathUnderMount(n))throw new Ze(`EINVAL`,`symlinks not supported on mounted filesystems`,n);await c(n,()=>e.symlink(t,n))}},clearStatCache(){r.clear()},statCacheSize(){return r.size()}}}const qf={maxEntries:5e4,maxFileBytes:1048576,maxTotalBytes:8388608},Jf=new Set([`ENOENT`,`ENOTDIR`,`EISDIR`]);function Yf(e){return e.endsWith(`.pack`)||e.endsWith(`.idx`)}function Xf(e){let t=e.replace(/\/{2,}/g,`/`);return t.length>1&&t.endsWith(`/`)?t.slice(0,-1):t}function Zf(e){let t=e.lastIndexOf(`/`);return t<0?`.`:t===0?`/`:e.slice(0,t)}function Qf(e){let t=e?.code;return typeof t==`string`?t:void 0}function $f(e){return typeof e==`string`?e.length*2:e.byteLength}function ep(e,t){return`${t?`u`:`b`} ${e}`}var tp=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=$f(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[ep(e,!0),ep(e,!1)])this.files.delete(t),this.dropFile(t)}invalidatePath(e){let t=Xf(e);this.forgetSelf(t);let n=Zf(t);this.dirs.delete(n),this.stats.delete(n),this.lstats.delete(n)}invalidateSubtree(e){let t=Xf(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 np(e,t,n,r){let i=e.get(t);if(i!=null)return i;let a=n();if(!r.admit())return a;e.set(t,a);let o=()=>{e.get(t)===a&&e.delete(t)};return a.then(e=>{r.keep&&!r.keep(e)&&o()},e=>{Jf.has(Qf(e)??``)||o()}),a}function rp(e,t={}){let n=new tp({...qf,...t}),r=()=>n.hasRoom(),i=async t=>(await np(n.dirs,Xf(t),()=>e.readdir(t),{admit:r})).slice(),a=async(t,i)=>{if(Yf(t))return e.readFile(t,i);let a=ep(Xf(t),Rf(i)),o=await np(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=>np(e,Xf(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 ip=e(`git-cache`);function ap(e){for(let t of Object.getOwnPropertySymbols(e)){if(t.description!==`PackfileCache`)continue;let n=e[t];if(n instanceof Map)return n}}function op(e){return`${e.replace(/\/+$/,``)}/.git`}var sp=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=op(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=op(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=ap(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=ap(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=`${op(e)}/objects/pack/`,n=ap(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=ap(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;ip.debug(`unloaded packfile buffers past the resident bound`,{unloaded:t.length,resident:this.maxResidentPacks})}};const cp=e(`git-commands`),lp=new Set([`clone`,`fetch`,`pull`,`push`,`ls-remote`]),up=new Set([`clone`,`fetch`,`pull`]),dp=new Set([`add`,`branch`,`commit`,`diff`,`init`,`log`,`ls-files`,`ls-tree`,`merge-base`,`rev-parse`,`show`,`show-ref`,`status`,`symbolic-ref`,`tag`]),fp={string:[`c`,`C`,`git-dir`,`work-tree`],boolean:[`help`,`version`,`no-pager`,`paginate`,`no-replace-objects`,`color`],alias:{h:`help`},stopEarly:!0};function pp(e){return e===void 0?[]:(Array.isArray(e)?e:[e]).map(e=>String(e))}function mp(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 hp=class e{options;static globalFsByDbName=new Map;lfs;corsProxy;authorName;authorEmail;globalDbName;githubToken;currentEnv;currentConfigOverrides;currentStdin=``;cacheManager;constructor(e){this.options=e,this.lfs=Kf(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 sp(this.lfs,{...e.maxResidentPacks===void 0?{}:{maxResidentPacks:e.maxResidentPacks}})}contextFor(e,t){let n=Kf(this.options.fs,{objectCache:!0}),r=dp.has(e)?rp(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){cp.warn(`GitHub token force-renew after 401 failed`,{error:e instanceof Error?e.message:String(e)});return}await this.loadGithubToken();let t=this.resolveAuthToken();if(t)return{username:`x-access-token`,password:t}}}resolveAuthToken(e=this.currentEnv){if(this.githubToken)return this.githubToken;if(!e)return;let t=mp(e,`GH_TOKEN`);if(t)return t;let n=mp(e,`GITHUB_TOKEN`);if(n)return n}async githubCredential(e,t){return await this.ensureFreshGithubToken(t),await this.loadGithubToken(),this.resolveAuthToken(e)}async identity(){let e=await this.getGlobalFs();return{name:await sr(e,`user.name`)??this.authorName,email:await sr(e,`user.email`)??this.authorEmail}}getGlobalFs(){let t=e.globalFsByDbName.get(this.globalDbName);if(t!=null)return t;let n=st.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){cp.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 un({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 sr(i,`user.name`)??this.authorName,email:r?.get(`user.email`)??await n(`user.email`)??await sr(i,`user.email`)??this.authorEmail}}async execute(e,t,n,r,i){if(e.length===0)return this.help();let a=this.stripGlobalFlags(mc(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=L[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),lp.has(s)&&await this.ensureFreshGithubToken(),await this.loadGithubToken(),await this.dispatch(s,p,o,c)}catch(e){return{stdout:``,stderr:`fatal: ${ic(e)}\n`,exitCode:128}}finally{await this.cacheManager.afterCommand(o,{wrotePacks:up.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 vu(t,n,r);case`clone`:return await Jc(t,n,r);case`add`:return await Ws(t,n,r);case`status`:return await gf(t,n,r);case`commit`:return await dl(t,n,r);case`log`:return await Eu(t,n,r);case`ls-remote`:return await Yu(t,n,r);case`branch`:return await yc(t,n,r);case`checkout`:return await bc(t,n,r);case`clean`:return await zc(t,n,r);case`diff`:return await Jl(t,n,r);case`show`:return await Kd(t,n,r);case`remote`:return await Md(t,n,r);case`fetch`:return await gu(t,n,r);case`pull`:return await ud(t,n,r);case`push`:return await dd(t,n,r);case`merge`:return await id(t,n,r);case`merge-base`:return await sd(t,n,r);case`cherry-pick`:return await Lc(t,n,r);case`rebase`:return await md(t,n,r);case`revert`:return await Bd(t,n,r);case`merge-file`:return await ld(t,n,r);case`reset`:return await Nd(t,n,r);case`config`:return await wl(t,n,r);case`tag`:return await Pf(t,n,r);case`ls-files`:return await Ku(t,n,r);case`ls-tree`:return await Zu(t,n,r);case`show-ref`:return await Yd(t,n,r);case`symbolic-ref`:return await Nf(t,n,r);case`stash`:return await ef(t,n,r);case`rm`:return await Wd(t,n,r);case`mv`:{let{mv:e}=await import(`./mv-ohCkaQgo.js`);return await e(t,n,r)}case`rev-parse`:return await zd(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 _c({cliWhen:pc(e),colorUi:n?.get(`color.ui`),noColorEnv:!!(t&&mp(t,`NO_COLOR`)),stdoutIsTTY:r?.stdoutIsTTY===!0,term:t?mp(t,`TERM`):void 0})}shouldVerifyPackfiles(){let e=this.currentEnv,t=e?mp(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,fp),r=t;for(let e of pp(n.flags.C))e!==``&&(r=e.startsWith(`/`)?e:`${r}/${e}`);let i=new Map;for(let e of pp(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 ${mn()})\n`,stderr:``,exitCode:0}}help(){return{stdout:`usage: git <command> [<args>]
120
120
 
121
121
  Available commands:
122
122
  init Initialize a new repository
@@ -151,8 +151,8 @@ Available commands:
151
151
  config Get and set repository options
152
152
  rev-parse Pick out and massage parameters
153
153
 
154
- `,stderr:``,exitCode:0}}};function _p(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 vp=1e4;async function yp(e,t,n){let r={method:e,headers:Ne({"Content-Type":`application/json`}),signal:AbortSignal.timeout(vp)};n&&(r.body=JSON.stringify(n));try{let e=await fetch(Me(`/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:bp(e)}}}}function bp(e){let t=e instanceof Error?e.name:``;return t===`TimeoutError`||t===`AbortError`?`no response from the secret store within ${vp/1e3}s`:`secret store unreachable: ${e instanceof Error?e.message:String(e)}`}function xp(e,t){return`could not read ${e} secrets — ${t??`the bridge gave no reason`}`}function Sp(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 Cp(){return{async list(){let[e,t]=await Promise.all([yp(`GET`,``),yp(`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(xp(`saved`,Dp(e.data)));if(t.ok)for(let e of t.data)n.push({name:e.name,domains:e.domains,persisted:!1});else r.push(xp(`session`,Dp(t.data)));return{entries:n,warnings:r}},async getInfo(e){return Sp(await this.list(),e)},async getMasked(e){let{ok:t,data:n}=await yp(`GET`,`/masked`);return t?n.find(t=>t.name===e)??null:null},async peek(e){let{ok:t,data:n}=await yp(`GET`,`/peek?name=${encodeURIComponent(e)}`);return t?n:null},async setSession(e,t,n){let{ok:r,data:i}=await yp(`POST`,`/session`,{name:e,value:t,domains:n});if(!r)throw Error(Dp(i)??`failed to set session secret`)},async setPersisted(e,t,n){let{ok:r,data:i}=await yp(`POST`,``,{name:e,value:t,domains:n});if(!r)throw Error(Dp(i)??`failed to persist secret`)},async setScope(e,t){let{ok:n,data:r}=await yp(`POST`,`/scope`,{name:e,domains:t});if(!n)throw Error(Dp(r)??`failed to update scope`)},async delete(e){let{ok:t,status:n,data:r}=await yp(`DELETE`,`/${encodeURIComponent(e)}`);if(n===404)return{removed:!1};if(!t)throw Error(Dp(r)??`failed to delete secret`);return{removed:!0,fromSession:r&&typeof r==`object`&&`fromSession`in r?!!r.fromSession:void 0}}}}function wp(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(xp(`saved`,e?.error)),n?.entries||i.push(xp(`session`,n?.error)),{entries:r,warnings:i}},async getInfo(e){return Sp(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 wp(e=>_p(e))}function Ep(){return wp(e=>{let{type:t,...n}=e;return ze(t,n)})}function Dp(e){if(e&&typeof e==`object`&&`error`in e){let t=e.error;if(typeof t==`string`)return t}}function Op(e){switch(e){case`extension-direct`:return Tp();case`extension-delegate`:return Ep();default:return Cp()}}const kp=`git-credential-slicc`,Ap=new Map([[kp,`git`],[`git-upload-pack`,`git`],[`git-receive-pack`,`git`],[`git-upload-archive`,`git`],[`git-remote-http`,`git`],[`git-remote-https`,`git`]]),jp=[`github.com`,`*.github.com`],Mp=/(_TOKEN|_PAT)$/;function Np(e){let t=new Map;for(let n of e.split(`
155
- `)){let e=n.indexOf(`=`);e>0&&t.set(n.slice(0,e),n.slice(e+1).replace(/\r$/,``))}return t}function Pp(e){let t=e.get(`host`)??``;try{return new URL(`https://${t}`).hostname}catch{return``}}async function Fp(e,t,n,r){for(let r of t){let t=await n.getMasked(r).catch(()=>null);if(t&&t.maskedValue===e)return t.domains}return r}async function Ip(e,t,n){let r=await t.githubToken?.(e).catch(()=>void 0);if(!r)return;let i=t.githubDomains?.()??jp;return{token:r,domains:r===e.GH_TOKEN||r===e.GITHUB_TOKEN?await Fp(r,[`GH_TOKEN`,`GITHUB_TOKEN`],n,jp):i}}async function Lp(e,t){let{entries:n}=await t.list().catch(()=>({entries:[]})),r=n.filter(e=>Mp.test(e.name)&&!e.domains.includes(`*`)).filter(t=>Pa(t.domains,e)).sort((t,n)=>Number(!t.domains.includes(e))-Number(!n.domains.includes(e))||t.name.localeCompare(n.name));for(let e of r){let n=await t.getMasked(e.name).catch(()=>null);if(n)return{token:n.maskedValue,domains:n.domains}}}async function Rp(e,t,n){let r=Pp(e);if(e.get(`protocol`)!==`https`||!r)return{stdout:``,stderr:``,exitCode:0};let i=(n.backend??(()=>Op(Le())))(),a=await Ip(t,n,i),o=a&&Pa(a.domains,r)?a:await Lp(r,i);return o?{stdout:`username=${e.get(`username`)||`x-access-token`}\npassword=${o.token}\n`,stderr:``,exitCode:0}:{stdout:``,stderr:``,exitCode:0}}async function zp(e,t,n){let r=e.get(`password`),i=await n.githubToken?.(t).catch(()=>void 0);return r&&i===r&&await n.githubToken?.(t,{force:!0}).catch(()=>void 0),{stdout:``,stderr:``,exitCode:0}}function Bp(e={}){return C(kp,async(t,n)=>{let r=t[0];if(r===void 0||r===`-h`||r===`--help`)return{stdout:`usage: git-credential-slicc <get|store|erase>
154
+ `,stderr:``,exitCode:0}}};function gp(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 _p=1e4;async function vp(e,t,n){let r={method:e,headers:Ne({"Content-Type":`application/json`}),signal:AbortSignal.timeout(_p)};n&&(r.body=JSON.stringify(n));try{let e=await fetch(Me(`/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:yp(e)}}}}function yp(e){let t=e instanceof Error?e.name:``;return t===`TimeoutError`||t===`AbortError`?`no response from the secret store within ${_p/1e3}s`:`secret store unreachable: ${e instanceof Error?e.message:String(e)}`}function bp(e,t){return`could not read ${e} secrets — ${t??`the bridge gave no reason`}`}function xp(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 Sp(){return{async list(){let[e,t]=await Promise.all([vp(`GET`,``),vp(`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(bp(`saved`,Ep(e.data)));if(t.ok)for(let e of t.data)n.push({name:e.name,domains:e.domains,persisted:!1});else r.push(bp(`session`,Ep(t.data)));return{entries:n,warnings:r}},async getInfo(e){return xp(await this.list(),e)},async getMasked(e){let{ok:t,data:n}=await vp(`GET`,`/masked`);return t?n.find(t=>t.name===e)??null:null},async peek(e){let{ok:t,data:n}=await vp(`GET`,`/peek?name=${encodeURIComponent(e)}`);return t?n:null},async setSession(e,t,n){let{ok:r,data:i}=await vp(`POST`,`/session`,{name:e,value:t,domains:n});if(!r)throw Error(Ep(i)??`failed to set session secret`)},async setPersisted(e,t,n){let{ok:r,data:i}=await vp(`POST`,``,{name:e,value:t,domains:n});if(!r)throw Error(Ep(i)??`failed to persist secret`)},async setScope(e,t){let{ok:n,data:r}=await vp(`POST`,`/scope`,{name:e,domains:t});if(!n)throw Error(Ep(r)??`failed to update scope`)},async delete(e){let{ok:t,status:n,data:r}=await vp(`DELETE`,`/${encodeURIComponent(e)}`);if(n===404)return{removed:!1};if(!t)throw Error(Ep(r)??`failed to delete secret`);return{removed:!0,fromSession:r&&typeof r==`object`&&`fromSession`in r?!!r.fromSession:void 0}}}}function Cp(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(bp(`saved`,e?.error)),n?.entries||i.push(bp(`session`,n?.error)),{entries:r,warnings:i}},async getInfo(e){return xp(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 wp(){return Cp(e=>gp(e))}function Tp(){return Cp(e=>{let{type:t,...n}=e;return Be(t,n)})}function Ep(e){if(e&&typeof e==`object`&&`error`in e){let t=e.error;if(typeof t==`string`)return t}}function Dp(e){switch(e){case`extension-direct`:return wp();case`extension-delegate`:return Tp();default:return Sp()}}const Op=`git-credential-slicc`,kp=new Map([[Op,`git`],[`git-upload-pack`,`git`],[`git-receive-pack`,`git`],[`git-upload-archive`,`git`],[`git-remote-http`,`git`],[`git-remote-https`,`git`]]),Ap=[`github.com`,`*.github.com`],jp=/(_TOKEN|_PAT)$/;function Mp(e){let t=new Map;for(let n of e.split(`
155
+ `)){let e=n.indexOf(`=`);e>0&&t.set(n.slice(0,e),n.slice(e+1).replace(/\r$/,``))}return t}function Np(e){let t=e.get(`host`)??``;try{return new URL(`https://${t}`).hostname}catch{return``}}async function Pp(e,t,n,r){for(let r of t){let t=await n.getMasked(r).catch(()=>null);if(t&&t.maskedValue===e)return t.domains}return r}async function Fp(e,t,n){let r=await t.githubToken?.(e).catch(()=>void 0);if(!r)return;let i=t.githubDomains?.()??Ap;return{token:r,domains:r===e.GH_TOKEN||r===e.GITHUB_TOKEN?await Pp(r,[`GH_TOKEN`,`GITHUB_TOKEN`],n,Ap):i}}async function Ip(e,t){let{entries:n}=await t.list().catch(()=>({entries:[]})),r=n.filter(e=>jp.test(e.name)&&!e.domains.includes(`*`)).filter(t=>Fa(t.domains,e)).sort((t,n)=>Number(!t.domains.includes(e))-Number(!n.domains.includes(e))||t.name.localeCompare(n.name));for(let e of r){let n=await t.getMasked(e.name).catch(()=>null);if(n)return{token:n.maskedValue,domains:n.domains}}}async function Lp(e,t,n){let r=Np(e);if(e.get(`protocol`)!==`https`||!r)return{stdout:``,stderr:``,exitCode:0};let i=(n.backend??(()=>Dp(Re())))(),a=await Fp(t,n,i),o=a&&Fa(a.domains,r)?a:await Ip(r,i);return o?{stdout:`username=${e.get(`username`)||`x-access-token`}\npassword=${o.token}\n`,stderr:``,exitCode:0}:{stdout:``,stderr:``,exitCode:0}}async function Rp(e,t,n){let r=e.get(`password`),i=await n.githubToken?.(t).catch(()=>void 0);return r&&i===r&&await n.githubToken?.(t,{force:!0}).catch(()=>void 0),{stdout:``,stderr:``,exitCode:0}}function zp(e={}){return C(Op,async(t,n)=>{let r=t[0];if(r===void 0||r===`-h`||r===`--help`)return{stdout:`usage: git-credential-slicc <get|store|erase>
156
156
 
157
157
  The git credential helper for native git in the wasm realm, configured by
158
158
  default (credential.helper=slicc). Reads git's key=value request on stdin.
@@ -163,10 +163,10 @@ default (credential.helper=slicc). Reads git's key=value request on stdin.
163
163
  a host outside the credential's domains, or for plain http.
164
164
  store Nothing to do: SLICC keeps its own credentials.
165
165
  erase Renews SLICC's GitHub token when it was the one rejected.
166
- `,stderr:``,exitCode:+(r===void 0)};let i=Object.fromEntries(n.env),a=Np(P(n.stdin));return r===`get`?Rp(a,i,e):r===`erase`?zp(a,i,e):{stdout:``,stderr:``,exitCode:0}})}async function Vp(e){let t=De(`github`);if(t){if(e?.force){await t.onSilentRenew?.();return}await t.getValidAccessToken?.()}}function Hp(){let e=De(`github`);if(!e)return jp;let t=typeof localStorage>`u`?[]:l(localStorage).github;return[...e.oauthTokenDomains??jp,...t??[]]}const Up=new Map([[`jsh`,`node`]]);function Wp(e,t){return`${Up.get(e)??e} ${t.join(` `)}`.trim()}function Gp(e){return St(`sudo`,e)}async function Kp(e,t){let n=e.trim();if(!n||yt(_t(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:Gp(r),exitCode:77};if(r.decision===`always`){let e=r.pattern?.trim()||n;await t.persistGrant(e)}return{allowed:!0}}const qp=`__SLICC_SUDO_REASON`,Jp=/^#!/;function Yp(e){let t=[];for(let n of e.split(`
167
- `)){let e=n.trim();if(e.length===0){if(t.length>0)break;continue}if(!e.startsWith(`#`))break;if(Jp.test(e))continue;let r=e.replace(/^#+/,``).trim();r&&t.push(r)}return Ut(t.join(` `))}var Xp=class{options;pendingCommandGrants=[];pendingSudoBypasses=new Map;constructor(e){this.options=e}isTransparentGatingEnabled(){let e=this.options.getSudo();return!!e&&e.transparentGating!==!1}wrapCommandForSudo(e){if(!this.isTransparentGatingEnabled()||Ap.has(e.name))return e;let t=(t,n)=>this.gateCommandDispatch(e.name,t,n);return{...e,async execute(n,r){return await t(n,r.env?.get(qp))||e.execute(n,r)}}}async gateCommandDispatch(e,t,n){let r=this.options.getSudo();if(!r)return null;let i=Wp(e,t);if(this.consumeSudoBypass(i))return null;let a=r.getPolicy();if(!a)return null;let o=await Kp(i,{policy:a,broker:r.broker,persistGrant:async e=>{this.queueGrant(e)},defaultDisposition:r.defaultDisposition,...n?{reason:n}:{}});return o.allowed?null:{stdout:``,stderr:`${o.message}\n`,exitCode:o.exitCode??77}}queueGrant(e){this.pendingCommandGrants.push(e)}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.getSudo()?.persistCommandGrant;if(t){await t(e);return}let n=vt(e);if(!n)return;let r=`${bt}/granted`,i=this.options.fs,a=``;try{await i.exists(r)&&(a=await i.readFile(r))}catch(e){if(!(e instanceof Xe&&e.code===`ENOENT`))throw e}let o=a&&!a.endsWith(`
168
- `)?`${a}\n`:a;await i.writeFile(r,`${o}NOPASSWD Cmnd ${n}\n`)}};const Zp={maxTraversalEntries:1e5,maxTraversalDepth:256,maxTraversalWork:1e5,maxGlobOperations:1e5,maxLiveBytes:67108864,maxInputBytes:33554432,maxArchiveBytes:134217728,maxArchiveCompressedBytes:67108864,maxArchiveEntryBytes:67108864,maxArchiveEntries:1e5};function Qp(e,t){return e?{...Zp,...t}:t}const $p=new Set([`SHLVL`,`_`]);function em(e){let t=e.split(`\0`);if(t.length<4)return null;let[n=``,r=``,i=``,...a]=t;if(!/^\d+$/.test(n)||!i.startsWith(`/`))return null;let o={};for(let e of a){let t=e.indexOf(`=`);t>0&&(o[e.slice(0,t)]=e.slice(t+1))}let s=r.trim()===``?[]:r.trim().split(/\s+/).map(Number);return{status:Number(n),pipeStatus:s,cwd:i,env:o}}function tm(e,t=[]){let n=new Set([...$p,...t]);return Object.fromEntries(Object.entries(e).filter(([e])=>!n.has(e)))}function nm(e,t){if(t!==`bytes`)return e;let n=new Uint8Array(e.length);for(let t=0;t<e.length;t++)n[t]=e.charCodeAt(t)&255;return new TextDecoder().decode(n)}async function rm(e,t){let n=[],r=dr(e=>n.push(e)),i=await t.run([`bash`,`-c`,`__slicc_save() { local __s=\$1 __p=\$2 __c __n; { printf "%s\\0%s\\0%s\\0" "\$__s" "\$__p" "\$PWD"; for __c in {A..Z} {a..z} _; do eval "__slicc_names=(\\"\\\${!\${__c}@}\\")"; for __n in "\${__slicc_names[@]}"; do [[ \${!__n@a} == *x* ]] && printf "%s=%s\\0" "\$__n" "\${!__n}"; done; done; } >&97 2>/dev/null; }; trap '__slicc_save "\$?" "\${PIPESTATUS[*]}"' EXIT; ${e}`],t.env,[[97,r]]),a=n.reduce((e,t)=>e+t.length,0),o=new Uint8Array(a),s=0;for(let e of n)o.set(e,s),s+=e.length;return{stdout:nm(i.stdout,i.stdoutKind),stderr:i.stderr,exitCode:i.exitCode,state:a>0?em(new TextDecoder().decode(o)):null}}const im=`__SLICC_RUN_PID`,am=`__SLICC_OUTPUT_TEE__`;function om(e){let t=e?.get(im);if(t===void 0)return;let n=Number.parseInt(t,10);return Number.isSafeInteger(n)&&n>0?n:void 0}var sm=class{host;constructor(e){this.host=e}async usesGnuBash(){let e=this.host;return!e.gnuBash||e.lastEnv.SLICC_SHELL===`just-bash`||typeof SharedArrayBuffer!=`function`?!1:(await e.scriptCatalog.getWasmCommands()).has(`bash`)}async runOnGnuBash(e,t,n,r,i,a){let o=this.host,{runWasmCommand:s,withoutRealmDefaults:c}=await import(`./run-DKWaudm_.js`),l=Yp(e),u={...o.lastEnv,...n===void 0?{}:{[im]:String(n)},...l?{[qp]:l}:{}},d=i===void 0?void 0:o.outputTees.get(i),f=await rm(e,{env:u,run:(e,i,a)=>s(e,this.wasmContext(i,t,r),{processConfig:o.buildJshProcessConfig(n),gate:o.gateNativeCommand,onOutput:d,fds:a,commands:()=>o.scriptCatalog.getWasmCommands(),gitIdentity:()=>o.gitIdentity()})}),p=o.lastEnv.PATH;return f.state&&(o.adoptCwd(f.state.cwd),o.adoptEnv(tm(c(f.state.env,u),[im,qp,am]))),o.lastEnv.PATH!==p&&await o.syncJshCommands().catch(()=>void 0),await o.flushPendingCommandGrants(),o.applyPendingEnvWrites(),{stdout:f.stdout,stderr:f.stderr,exitCode:f.exitCode,env:{...o.lastEnv},...a&&f.state?{pipeStatus:f.state.pipeStatus}:{}}}wasmContext(e,t,n){let r=this.host;return{fs:r.vfsAdapter,cwd:r.cwd,env:new Map(Object.entries(e)),exportedEnv:e,stdin:n,signal:t,exec:(e,t)=>r.bash.exec(e,{...t,umask:r.umask})}}};const cm=`/home/user`;async function lm(e){try{let t=await e.readDir(`/home`),n=null,r=null;for(let i of t)if(i.type===`directory`){r??=i.name;try{let t=(await e.stat(`/home/${i.name}/.welcome.json`)).mtime??0;(!n||t>n.mtime)&&(n={name:i.name,mtime:t})}catch{}}let i=n?.name??r;return i?`/home/${i}`:cm}catch{return cm}}function um(e){return e.replace(/\/+$/,``).split(`/`).pop()||`user`}function dm(e){let t=[],n=``,r=0;for(;r<e.length;){let i=e[r];if(i===`"`){for(r++;r<e.length&&e[r]!==`"`;)n+=e[r],r++;r++}else if(i===`'`){for(r++;r<e.length&&e[r]!==`'`;)n+=e[r],r++;r++}else i===`\\`&&r+1<e.length&&e[r+1]===` `?(n+=` `,r+=2):/\s/.test(i)?(n.length>0&&(t.push(n),n=``),r++):(n+=i,r++)}return n.length>0&&t.push(n),t}const fm=e(`almost-bash-shell`);var pm=class{host;registeredJshCommands=new Map;registeredWorkflowCommands=new Set;registeredWasmCommands=new Set;jshSyncInflight=null;jshSyncDirty=!1;constructor(e){this.host=e}scriptRegisteredNames(){return[...this.registeredJshCommands.keys(),...this.registeredWorkflowCommands,...this.registeredWasmCommands]}scanRoots(){return yr(this.host.path())}async getJshCommandNames(){return[...(await this.getFilteredJshCommands()).keys()]}async getWorkflowCommandNames(){return[...(await this.getFilteredWorkflowCommands()).keys()]}async syncJshCommands(){return this.jshSyncInflight===null?(this.jshSyncInflight=this.doSyncJshCommands(),this.jshSyncInflight):(this.jshSyncDirty=!0,this.jshSyncInflight)}async getFilteredJshCommands(){let e=await this.host.scriptCatalog.getJshCommands(this.scanRoots()),t=new Map;for(let[n,r]of e)this.host.builtinCommandNames.has(n)||this.host.isCommandAllowed(n)&&t.set(n,r);return t}async getFilteredWorkflowCommands(){let e=await this.host.scriptCatalog.getWorkflowCommands(),t=new Map;for(let[n,r]of e)this.host.isCommandAllowed(n)&&t.set(n,r);return t}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?dm(a):[],c;try{let e=await this.host.discoveryFs.readFile(o,{encoding:`utf-8`});c=typeof e==`string`?e:new TextDecoder().decode(e)}catch{return{stdout:``,stderr:`jsh: cannot read script '${o}'\n`,exitCode:127,env:this.host.lastEnv}}let l=[`node`,o,...s],u=await hi(c,l,{fs:this.host.vfsAdapter,cwd:this.host.cwd,env:new Map(Object.entries(this.host.lastEnv)),stdin:``,exec:(e,t)=>this.host.bash.exec(e,{env:t?.env??this.host.lastEnv,cwd:t?.cwd??this.host.cwd,umask:this.host.umask,...t?.env===void 0?{}:{replaceEnv:!0}})},this.host.buildJshProcessConfig(t));return{stdout:u.stdout,stderr:u.stderr,exitCode:u.exitCode,env:this.host.lastEnv}}makeScriptCommand(e){let t=this.host,n=t.scriptCatalog,r=t.discoveryFs,i=e,a=async(e,a)=>{let o=a.exec??((e,n)=>t.bash.exec(e,{env:n?.env??Object.fromEntries(a.env),cwd:n?.cwd??a.cwd,args:n?.args,...n?.env===void 0?{}:{replaceEnv:!0}})),s=(await n.getJshCommands(this.scanRoots())).get(i);if(s){let n;try{let e=await r.readFile(s,{encoding:`utf-8`});n=typeof e==`string`?e:new TextDecoder().decode(e)}catch{return{stdout:``,stderr:`jsh: cannot read script '${s}'\n`,exitCode:127}}return hi(n,[`node`,s,...e],{fs:a.fs,cwd:a.cwd,env:a.env,stdin:a.stdin,exec:o},t.buildJshProcessConfig(om(a.env)))}let c=(await n.getWasmCommands()).get(i);if(c){let{runWasmCommand:r}=await import(`./run-DKWaudm_.js`);return r(c.script?[i,...e]:[`--argv0`,c.argv0,`--module`,c.wasm,c.glue,...c.args??[],...e],a,{processConfig:t.buildJshProcessConfig(om(a.env)),gate:t.gateNativeCommand,defaults:c.env,commands:()=>n.getWasmCommands(),gitIdentity:()=>t.gitIdentity()})}let l=(await n.getWorkflowCommands()).get(i);if(l){let t=Oi(l.path,e);return o(t[0],{args:t.slice(1),cwd:a.cwd})}return{stdout:``,stderr:`${i}: command no longer exists\n`,exitCode:127}};return{name:e,trusted:!0,async execute(e,t){try{return await a(e,t)}catch(e){let t=e instanceof Error?e.message:String(e);return{stdout:``,stderr:`${i}: ${t}\n`,exitCode:1}}}}}async doSyncJshCommands(){try{let e=await this.host.scriptCatalog.getJshIndex(this.scanRoots()),t=e.commands;for(let t of e.collisions)fm.warn(`jsh command '${t.name}' is provided by more than one skill; using ${t.winnerPath} (${t.reason}), shadowed ${t.shadowedPaths.join(`, `)}`);let n=await this.getFilteredWorkflowCommands(),r=await this.host.scriptCatalog.getWasmCommands();for(let[e,n]of t)this.host.isCommandAllowed(e)&&(this.host.builtinCommandNames.has(e)&&!this.registeredJshCommands.has(e)||this.registeredJshCommands.get(e)!==n&&(this.host.bash.registerCommand(this.host.wrapCommandForDispatch(this.makeScriptCommand(e))),this.registeredJshCommands.set(e,n),this.host.builtinCommandNames.add(e)));let i=[...r.keys()].filter(e=>this.host.isCommandAllowed(e));this.registerLateScriptNames(i,this.registeredWasmCommands),this.registerLateScriptNames(n.keys(),this.registeredWorkflowCommands)}finally{this.jshSyncInflight=null,this.jshSyncDirty&&(this.jshSyncDirty=!1,this.syncJshCommands().catch(()=>void 0))}}registerLateScriptNames(e,t){let n=[this.registeredJshCommands,this.registeredWasmCommands,this.registeredWorkflowCommands];for(let r of e)if(!t.has(r)){if(n.some(e=>e!==t&&e.has(r))){t.add(r);continue}this.host.builtinCommandNames.has(r)||(this.host.bash.registerCommand(this.host.wrapCommandForDispatch(this.makeScriptCommand(r))),t.add(r),this.host.builtinCommandNames.add(r))}}},mm=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=Be();if(!e)return null;let t=e.onUpdate;return e=>{t({content:[{type:Ps,progress:e}]})}}scrubbed(e){return this.scrubLabel?hm(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=gm(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:gm(i)})})}};async function hm(e,t){if(!t)return t;try{return await e(t)}catch{return`[label withheld: secret scrub unavailable]`}}function gm(e,t=80){return e.length>t?`${e.slice(0,t-1)}…`:e}function _m(e,t){return t.length?`${e} ${t.join(` `)}`:e}function vm(e){try{let t=new URL(e);return`↓ ${t.host}${t.pathname===`/`?``:t.pathname}`}catch{return`↓ ${e}`}}function ym(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:vm(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 bm={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}},xm=new Set([`xargs`,`watch`,`parallel`,`bash`,`sh`,`eval`,`source`,`.`]);function Sm(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 Cm(e,t){switch(e.type){case`CommandSubstitution`:return Pm(e.body,t);case`DoubleQuoted`:{let n=0;for(let r of e.parts){let e=Cm(r,t);if(e===null)return null;n+=e}return n}case`ProcessSubstitution`:return null;default:return 0}}function wm(e,t){let n=0;for(let r of e.parts){let e=Cm(r,t);if(e===null)return null;n+=e}return n}function Tm(e,t){let n=0;for(let r of e.assignments){if(!r.value)continue;let e=wm(r.value,t);if(e===null)return null;n+=e}for(let r of e.args){let e=wm(r,t);if(e===null)return null;n+=e}if(!e.name)return n;let r=Sm(e.name);if(r===null||xm.has(r))return null;if(!t.has(r))return n;n+=1;let i=bm[r];if(i){let r=e.args.map(Sm);if(r.some(e=>e===null))return null;let a=r[i(r)];if(a===void 0)return n;if(xm.has(a))return null;t.has(a)&&(n+=1)}return n}function Em(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 Dm(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||Sm(r.name)!==`seq`)return null;let i=r.args.map(e=>{let t=Sm(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 Om(e){let t=0;for(let n of e){let e=n.type===`Word`?km(n.word):Em(n);if(e===null)return null;t+=e}return t}function km(e){let t=Dm(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=Om(t.items);if(e===null)return null;n*=e;break}default:return null}return n}function Am(e){let t=0;for(let n of e){let e=km(n);if(e===null)return null;t+=e}return t}function jm(e,t){let n=0;for(let r of e){let e=Nm(r,t);if(e===null)return null;n+=e}return n}function Mm(e,t){switch(e.type){case`SimpleCommand`:return Tm(e,t);case`For`:{if(!e.words)return null;let n=Am(e.words),r=jm(e.body,t);return n===null||r===null?null:e.words.filter(e=>Dm(e)!==null&&t.has(`seq`)).length+n*r}case`Subshell`:case`Group`:return jm(e.body,t);case`FunctionDef`:return 0;default:return null}}function Nm(e,t){let n=0;for(let r of e.pipelines)for(let e of r.commands){let r=Mm(e,t);if(r===null)return null;n+=r}return n}function Pm(e,t){return jm(e.statements,t)}function Fm(e,t){let n=Pm(e,t);return{totalSteps:n!==null&&n>0?n:null}}function Im(e){return e.split(`
169
- `).map(e=>e.trim()).find(e=>e.length>0&&!e.startsWith(`#`))||`bash`}var Lm=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 Rm=globalThis.setTimeout.bind(globalThis);function zm(e){let t=e/1e3;return`sleep ${Number.isInteger(t)?t:t.toFixed(1)}`}function Bm(e,t={}){let n=t.now??Date.now,r=t.setTimeout??Rm,i=t.isAborted??(()=>!1),a=t.label??zm,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 Vm=globalThis.setTimeout.bind(globalThis);function Hm(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 Um(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 Wm(e,t,n={}){let r=n.now??Date.now,i=n.setTimeout??Vm;return{...e,async execute(n,a){let o=Um(n),s=o>=0?Hm(n[o]):null;if(!t.hasSink()||s===null||s<=0)return e.execute(n,a);let c=t.allocateId(`timeout`),l=_m(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 Gm=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 Km(e,t,n={}){if((n.skip??Gm).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=_m(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 qm={stdout:``,stderr:``,exitCode:130};function Jm(e,t){if(!t)return e();if(t.aborted)return Promise.resolve(qm);let n,r=new Promise(e=>{n=()=>e(qm),t.addEventListener(`abort`,n,{once:!0})});return Promise.race([e(),r]).finally(()=>{n&&t.removeEventListener(`abort`,n)})}const Ym={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 Xm(e,t=[],n){let r=Ym[e],i=t.length?` data-action-data='${JSON.stringify({filters:t}).replace(/'/g,`&apos;`)}'`:``,a=e===`directory`&&n?`<div class="sprinkle-action-card__meta">Target: ${Nt(n)}</div>`:``;return`
166
+ `,stderr:``,exitCode:+(r===void 0)};let i=Object.fromEntries(n.env),a=Mp(P(n.stdin));return r===`get`?Lp(a,i,e):r===`erase`?Rp(a,i,e):{stdout:``,stderr:``,exitCode:0}})}async function Bp(e){let t=De(`github`);if(t){if(e?.force){await t.onSilentRenew?.();return}await t.getValidAccessToken?.()}}function Vp(){let e=De(`github`);if(!e)return Ap;let t=typeof localStorage>`u`?[]:l(localStorage).github;return[...e.oauthTokenDomains??Ap,...t??[]]}const Hp=new Map([[`jsh`,`node`]]);function Up(e,t){return`${Hp.get(e)??e} ${t.join(` `)}`.trim()}function Wp(e){return Ct(`sudo`,e)}async function Gp(e,t){let n=e.trim();if(!n||bt(vt(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:Wp(r),exitCode:77};if(r.decision===`always`){let e=r.pattern?.trim()||n;await t.persistGrant(e)}return{allowed:!0}}const Kp=`__SLICC_SUDO_REASON`,qp=/^#!/;function Jp(e){let t=[];for(let n of e.split(`
167
+ `)){let e=n.trim();if(e.length===0){if(t.length>0)break;continue}if(!e.startsWith(`#`))break;if(qp.test(e))continue;let r=e.replace(/^#+/,``).trim();r&&t.push(r)}return Wt(t.join(` `))}var Yp=class{options;pendingCommandGrants=[];pendingSudoBypasses=new Map;constructor(e){this.options=e}isTransparentGatingEnabled(){let e=this.options.getSudo();return!!e&&e.transparentGating!==!1}wrapCommandForSudo(e){if(!this.isTransparentGatingEnabled()||kp.has(e.name))return e;let t=(t,n)=>this.gateCommandDispatch(e.name,t,n);return{...e,async execute(n,r){return await t(n,r.env?.get(Kp))||e.execute(n,r)}}}async gateCommandDispatch(e,t,n){let r=this.options.getSudo();if(!r)return null;let i=Up(e,t);if(this.consumeSudoBypass(i))return null;let a=r.getPolicy();if(!a)return null;let o=await Gp(i,{policy:a,broker:r.broker,persistGrant:async e=>{this.queueGrant(e)},defaultDisposition:r.defaultDisposition,...n?{reason:n}:{}});return o.allowed?null:{stdout:``,stderr:`${o.message}\n`,exitCode:o.exitCode??77}}queueGrant(e){this.pendingCommandGrants.push(e)}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.getSudo()?.persistCommandGrant;if(t){await t(e);return}let n=yt(e);if(!n)return;let r=`${xt}/granted`,i=this.options.fs,a=``;try{await i.exists(r)&&(a=await i.readFile(r))}catch(e){if(!(e instanceof Ze&&e.code===`ENOENT`))throw e}let o=a&&!a.endsWith(`
168
+ `)?`${a}\n`:a;await i.writeFile(r,`${o}NOPASSWD Cmnd ${n}\n`)}};const Xp={maxTraversalEntries:1e5,maxTraversalDepth:256,maxTraversalWork:1e5,maxGlobOperations:1e5,maxLiveBytes:67108864,maxInputBytes:33554432,maxArchiveBytes:134217728,maxArchiveCompressedBytes:67108864,maxArchiveEntryBytes:67108864,maxArchiveEntries:1e5};function Zp(e,t){return e?{...Xp,...t}:t}const Qp=new Set([`SHLVL`,`_`]);function $p(e){let t=e.split(`\0`);if(t.length<4)return null;let[n=``,r=``,i=``,...a]=t;if(!/^\d+$/.test(n)||!i.startsWith(`/`))return null;let o={};for(let e of a){let t=e.indexOf(`=`);t>0&&(o[e.slice(0,t)]=e.slice(t+1))}let s=r.trim()===``?[]:r.trim().split(/\s+/).map(Number);return{status:Number(n),pipeStatus:s,cwd:i,env:o}}function em(e,t=[]){let n=new Set([...Qp,...t]);return Object.fromEntries(Object.entries(e).filter(([e])=>!n.has(e)))}function tm(e,t){if(t!==`bytes`)return e;let n=new Uint8Array(e.length);for(let t=0;t<e.length;t++)n[t]=e.charCodeAt(t)&255;return new TextDecoder().decode(n)}async function nm(e,t){let n=[],r=fr(e=>n.push(e)),i=await t.run([`bash`,`-c`,`__slicc_save() { local __s=\$1 __p=\$2 __c __n; { printf "%s\\0%s\\0%s\\0" "\$__s" "\$__p" "\$PWD"; for __c in {A..Z} {a..z} _; do eval "__slicc_names=(\\"\\\${!\${__c}@}\\")"; for __n in "\${__slicc_names[@]}"; do [[ \${!__n@a} == *x* ]] && printf "%s=%s\\0" "\$__n" "\${!__n}"; done; done; } >&97 2>/dev/null; }; trap '__slicc_save "\$?" "\${PIPESTATUS[*]}"' EXIT; ${e}`],t.env,[[97,r]]),a=n.reduce((e,t)=>e+t.length,0),o=new Uint8Array(a),s=0;for(let e of n)o.set(e,s),s+=e.length;return{stdout:tm(i.stdout,i.stdoutKind),stderr:i.stderr,exitCode:i.exitCode,state:a>0?$p(new TextDecoder().decode(o)):null}}const rm=`__SLICC_RUN_PID`,im=`__SLICC_OUTPUT_TEE__`;function am(e){let t=e?.get(rm);if(t===void 0)return;let n=Number.parseInt(t,10);return Number.isSafeInteger(n)&&n>0?n:void 0}var om=class{host;constructor(e){this.host=e}async usesGnuBash(){let e=this.host;return!e.gnuBash||e.lastEnv.SLICC_SHELL===`just-bash`||typeof SharedArrayBuffer!=`function`?!1:(await e.scriptCatalog.getWasmCommands()).has(`bash`)}async runOnGnuBash(e,t,n,r,i,a){let o=this.host,{runWasmCommand:s,withoutRealmDefaults:c}=await import(`./run-DW65sPip.js`),l=Jp(e),u={...o.lastEnv,...n===void 0?{}:{[rm]:String(n)},...l?{[Kp]:l}:{}},d=i===void 0?void 0:o.outputTees.get(i),f=await nm(e,{env:u,run:(e,i,a)=>s(e,this.wasmContext(i,t,r),{processConfig:o.buildJshProcessConfig(n),gate:o.gateNativeCommand,onOutput:d,fds:a,commands:()=>o.scriptCatalog.getWasmCommands(),gitIdentity:()=>o.gitIdentity()})}),p=o.lastEnv.PATH;return f.state&&(o.adoptCwd(f.state.cwd),o.adoptEnv(em(c(f.state.env,u),[rm,Kp,im]))),o.lastEnv.PATH!==p&&await o.syncJshCommands().catch(()=>void 0),await o.flushPendingCommandGrants(),o.applyPendingEnvWrites(),{stdout:f.stdout,stderr:f.stderr,exitCode:f.exitCode,env:{...o.lastEnv},...a&&f.state?{pipeStatus:f.state.pipeStatus}:{}}}wasmContext(e,t,n){let r=this.host;return{fs:r.vfsAdapter,cwd:r.cwd,env:new Map(Object.entries(e)),exportedEnv:e,stdin:n,signal:t,exec:(e,t)=>r.bash.exec(e,{...t,umask:r.umask})}}};const sm=`/home/user`;async function cm(e){try{let t=await e.readDir(`/home`),n=null,r=null;for(let i of t)if(i.type===`directory`){r??=i.name;try{let t=(await e.stat(`/home/${i.name}/.welcome.json`)).mtime??0;(!n||t>n.mtime)&&(n={name:i.name,mtime:t})}catch{}}let i=n?.name??r;return i?`/home/${i}`:sm}catch{return sm}}function lm(e){return e.replace(/\/+$/,``).split(`/`).pop()||`user`}function um(e){let t=[],n=``,r=0;for(;r<e.length;){let i=e[r];if(i===`"`){for(r++;r<e.length&&e[r]!==`"`;)n+=e[r],r++;r++}else if(i===`'`){for(r++;r<e.length&&e[r]!==`'`;)n+=e[r],r++;r++}else i===`\\`&&r+1<e.length&&e[r+1]===` `?(n+=` `,r+=2):/\s/.test(i)?(n.length>0&&(t.push(n),n=``),r++):(n+=i,r++)}return n.length>0&&t.push(n),t}const dm=e(`almost-bash-shell`);var fm=class{host;registeredJshCommands=new Map;registeredWorkflowCommands=new Set;registeredWasmCommands=new Set;jshSyncInflight=null;jshSyncDirty=!1;constructor(e){this.host=e}scriptRegisteredNames(){return[...this.registeredJshCommands.keys(),...this.registeredWorkflowCommands,...this.registeredWasmCommands]}scanRoots(){return br(this.host.path())}async getJshCommandNames(){return[...(await this.getFilteredJshCommands()).keys()]}async getWorkflowCommandNames(){return[...(await this.getFilteredWorkflowCommands()).keys()]}async syncJshCommands(){return this.jshSyncInflight===null?(this.jshSyncInflight=this.doSyncJshCommands(),this.jshSyncInflight):(this.jshSyncDirty=!0,this.jshSyncInflight)}async getFilteredJshCommands(){let e=await this.host.scriptCatalog.getJshCommands(this.scanRoots()),t=new Map;for(let[n,r]of e)this.host.builtinCommandNames.has(n)||this.host.isCommandAllowed(n)&&t.set(n,r);return t}async getFilteredWorkflowCommands(){let e=await this.host.scriptCatalog.getWorkflowCommands(),t=new Map;for(let[n,r]of e)this.host.isCommandAllowed(n)&&t.set(n,r);return t}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?um(a):[],c;try{let e=await this.host.discoveryFs.readFile(o,{encoding:`utf-8`});c=typeof e==`string`?e:new TextDecoder().decode(e)}catch{return{stdout:``,stderr:`jsh: cannot read script '${o}'\n`,exitCode:127,env:this.host.lastEnv}}let l=[`node`,o,...s],u=await gi(c,l,{fs:this.host.vfsAdapter,cwd:this.host.cwd,env:new Map(Object.entries(this.host.lastEnv)),stdin:``,exec:(e,t)=>this.host.bash.exec(e,{env:t?.env??this.host.lastEnv,cwd:t?.cwd??this.host.cwd,umask:this.host.umask,...t?.env===void 0?{}:{replaceEnv:!0}})},this.host.buildJshProcessConfig(t));return{stdout:u.stdout,stderr:u.stderr,exitCode:u.exitCode,env:this.host.lastEnv}}makeScriptCommand(e){let t=this.host,n=t.scriptCatalog,r=t.discoveryFs,i=e,a=async(e,a)=>{let o=a.exec??((e,n)=>t.bash.exec(e,{env:n?.env??Object.fromEntries(a.env),cwd:n?.cwd??a.cwd,args:n?.args,...n?.env===void 0?{}:{replaceEnv:!0}})),s=(await n.getJshCommands(this.scanRoots())).get(i);if(s){let n;try{let e=await r.readFile(s,{encoding:`utf-8`});n=typeof e==`string`?e:new TextDecoder().decode(e)}catch{return{stdout:``,stderr:`jsh: cannot read script '${s}'\n`,exitCode:127}}return gi(n,[`node`,s,...e],{fs:a.fs,cwd:a.cwd,env:a.env,stdin:a.stdin,exec:o},t.buildJshProcessConfig(am(a.env)))}let c=(await n.getWasmCommands()).get(i);if(c){let{runWasmCommand:r}=await import(`./run-DW65sPip.js`);return r(c.script?[i,...e]:[`--argv0`,c.argv0,`--module`,c.wasm,c.glue,...c.args??[],...e],a,{processConfig:t.buildJshProcessConfig(am(a.env)),gate:t.gateNativeCommand,defaults:c.env,commands:()=>n.getWasmCommands(),gitIdentity:()=>t.gitIdentity()})}let l=(await n.getWorkflowCommands()).get(i);if(l){let t=ki(l.path,e);return o(t[0],{args:t.slice(1),cwd:a.cwd})}return{stdout:``,stderr:`${i}: command no longer exists\n`,exitCode:127}};return{name:e,trusted:!0,async execute(e,t){try{return await a(e,t)}catch(e){let t=e instanceof Error?e.message:String(e);return{stdout:``,stderr:`${i}: ${t}\n`,exitCode:1}}}}}async doSyncJshCommands(){try{let e=await this.host.scriptCatalog.getJshIndex(this.scanRoots()),t=e.commands;for(let t of e.collisions)dm.warn(`jsh command '${t.name}' is provided by more than one skill; using ${t.winnerPath} (${t.reason}), shadowed ${t.shadowedPaths.join(`, `)}`);let n=await this.getFilteredWorkflowCommands(),r=await this.host.scriptCatalog.getWasmCommands();for(let[e,n]of t)this.host.isCommandAllowed(e)&&(this.host.builtinCommandNames.has(e)&&!this.registeredJshCommands.has(e)||this.registeredJshCommands.get(e)!==n&&(this.host.bash.registerCommand(this.host.wrapCommandForDispatch(this.makeScriptCommand(e))),this.registeredJshCommands.set(e,n),this.host.builtinCommandNames.add(e)));let i=[...r.keys()].filter(e=>this.host.isCommandAllowed(e));this.registerLateScriptNames(i,this.registeredWasmCommands),this.registerLateScriptNames(n.keys(),this.registeredWorkflowCommands)}finally{this.jshSyncInflight=null,this.jshSyncDirty&&(this.jshSyncDirty=!1,this.syncJshCommands().catch(()=>void 0))}}registerLateScriptNames(e,t){let n=[this.registeredJshCommands,this.registeredWasmCommands,this.registeredWorkflowCommands];for(let r of e)if(!t.has(r)){if(n.some(e=>e!==t&&e.has(r))){t.add(r);continue}this.host.builtinCommandNames.has(r)||(this.host.bash.registerCommand(this.host.wrapCommandForDispatch(this.makeScriptCommand(r))),t.add(r),this.host.builtinCommandNames.add(r))}}},pm=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=Ve();if(!e)return null;let t=e.onUpdate;return e=>{t({content:[{type:Ns,progress:e}]})}}scrubbed(e){return this.scrubLabel?mm(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=hm(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:hm(i)})})}};async function mm(e,t){if(!t)return t;try{return await e(t)}catch{return`[label withheld: secret scrub unavailable]`}}function hm(e,t=80){return e.length>t?`${e.slice(0,t-1)}…`:e}function gm(e,t){return t.length?`${e} ${t.join(` `)}`:e}function _m(e){try{let t=new URL(e);return`↓ ${t.host}${t.pathname===`/`?``:t.pathname}`}catch{return`↓ ${e}`}}function vm(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:_m(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 ym={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}},bm=new Set([`xargs`,`watch`,`parallel`,`bash`,`sh`,`eval`,`source`,`.`]);function xm(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 Sm(e,t){switch(e.type){case`CommandSubstitution`:return Nm(e.body,t);case`DoubleQuoted`:{let n=0;for(let r of e.parts){let e=Sm(r,t);if(e===null)return null;n+=e}return n}case`ProcessSubstitution`:return null;default:return 0}}function Cm(e,t){let n=0;for(let r of e.parts){let e=Sm(r,t);if(e===null)return null;n+=e}return n}function wm(e,t){let n=0;for(let r of e.assignments){if(!r.value)continue;let e=Cm(r.value,t);if(e===null)return null;n+=e}for(let r of e.args){let e=Cm(r,t);if(e===null)return null;n+=e}if(!e.name)return n;let r=xm(e.name);if(r===null||bm.has(r))return null;if(!t.has(r))return n;n+=1;let i=ym[r];if(i){let r=e.args.map(xm);if(r.some(e=>e===null))return null;let a=r[i(r)];if(a===void 0)return n;if(bm.has(a))return null;t.has(a)&&(n+=1)}return n}function Tm(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 Em(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||xm(r.name)!==`seq`)return null;let i=r.args.map(e=>{let t=xm(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 Dm(e){let t=0;for(let n of e){let e=n.type===`Word`?Om(n.word):Tm(n);if(e===null)return null;t+=e}return t}function Om(e){let t=Em(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=Dm(t.items);if(e===null)return null;n*=e;break}default:return null}return n}function km(e){let t=0;for(let n of e){let e=Om(n);if(e===null)return null;t+=e}return t}function Am(e,t){let n=0;for(let r of e){let e=Mm(r,t);if(e===null)return null;n+=e}return n}function jm(e,t){switch(e.type){case`SimpleCommand`:return wm(e,t);case`For`:{if(!e.words)return null;let n=km(e.words),r=Am(e.body,t);return n===null||r===null?null:e.words.filter(e=>Em(e)!==null&&t.has(`seq`)).length+n*r}case`Subshell`:case`Group`:return Am(e.body,t);case`FunctionDef`:return 0;default:return null}}function Mm(e,t){let n=0;for(let r of e.pipelines)for(let e of r.commands){let r=jm(e,t);if(r===null)return null;n+=r}return n}function Nm(e,t){return Am(e.statements,t)}function Pm(e,t){let n=Nm(e,t);return{totalSteps:n!==null&&n>0?n:null}}function Fm(e){return e.split(`
169
+ `).map(e=>e.trim()).find(e=>e.length>0&&!e.startsWith(`#`))||`bash`}var Im=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 Lm=globalThis.setTimeout.bind(globalThis);function Rm(e){let t=e/1e3;return`sleep ${Number.isInteger(t)?t:t.toFixed(1)}`}function zm(e,t={}){let n=t.now??Date.now,r=t.setTimeout??Lm,i=t.isAborted??(()=>!1),a=t.label??Rm,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 Bm=globalThis.setTimeout.bind(globalThis);function Vm(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 Hm(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 Um(e,t,n={}){let r=n.now??Date.now,i=n.setTimeout??Bm;return{...e,async execute(n,a){let o=Hm(n),s=o>=0?Vm(n[o]):null;if(!t.hasSink()||s===null||s<=0)return e.execute(n,a);let c=t.allocateId(`timeout`),l=gm(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 Wm=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 Gm(e,t,n={}){if((n.skip??Wm).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=gm(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 Km={stdout:``,stderr:``,exitCode:130};function qm(e,t){if(!t)return e();if(t.aborted)return Promise.resolve(Km);let n,r=new Promise(e=>{n=()=>e(Km),t.addEventListener(`abort`,n,{once:!0})});return Promise.race([e(),r]).finally(()=>{n&&t.removeEventListener(`abort`,n)})}const Jm={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 Ym(e,t=[],n){let r=Jm[e],i=t.length?` data-action-data='${JSON.stringify({filters:t}).replace(/'/g,`&apos;`)}'`:``,a=e===`directory`&&n?`<div class="sprinkle-action-card__meta">Target: ${Pt(n)}</div>`:``;return`
170
170
  <div class="sprinkle-action-card">
171
171
  <div class="sprinkle-action-card__header">
172
172
  <div class="sprinkle-action-card__title-group">${r.title}${a}</div>
@@ -177,11 +177,11 @@ default (credential.helper=slicc). Reads git's key=value request on stdin.
177
177
  <button class="sprinkle-btn sprinkle-btn--primary" data-action="approve" data-picker="${e}"${i}>${r.approve}</button>
178
178
  </div>
179
179
  </div>
180
- `}const Zm=Symbol(`mount:timeout`),Qm=Symbol(`mount:no-panel`);async function $m(e,t){let n=Ve.generateId(),r=!1,i=!1,a=He({id:n,html:Xm(`directory`,[],t),onAction:(e,t)=>eh(e,t)},e.onUpdate).catch(e=>{if(r)return Zm;if(i)return Qm;throw e}),o,s=new Promise(e=>{o=setTimeout(()=>{r=!0,Ve.cancel(n,`mount: timed out`),e(Zm)},3e5)}),c=new Promise(e=>{Ve.waitForMount(n,5e3).then(()=>{},()=>{r||(i=!0,Ve.cancel(n,`mount: panel did not render the approval card`),e(Qm))})}),l=await Promise.race([a,s,c]);if(o&&clearTimeout(o),l===Zm)throw Error(`mount: timed out after 5 minute(s) waiting for user approval`);if(l===Qm)throw Error(`mount: chat panel did not render the approval card — open the chat panel and retry`);if(!l)throw Error(`mount: tool UI not available`);let u=l;if(u.denied)throw Error(`mount: denied by user`);if(u.cancelled)throw Error(`mount: cancelled`);if(u.error)throw Error(`mount: ${u.error}`);if(!u.handle)throw Error(`mount: no directory selected`);return u.handle}async function eh(e,t){if(e!==`approve`)return{denied:!0};let n=t;if(n?.handleInIdb&&typeof n.idbKey==`string`)try{let e=await qt(n.idbKey);return e?(await Gt(e),{approved:!0,handle:e}):{error:`No directory handle found in storage`}}catch(e){return{error:e instanceof Error?e.message:String(e)}}if(n?.cancelled)return{cancelled:!0};if(n?.error)return{error:String(n.error)};try{return{approved:!0,handle:await window.showDirectoryPicker({mode:`readwrite`})}}catch(e){return e instanceof Error&&e.name===`AbortError`?{cancelled:!0}:{error:e instanceof Error?e.message:String(e)}}}function th(e){let t=e?.parts;return t?.length!==1||t[0]?.type!==`Literal`?null:t[0].value??null}function nh(e){return{type:`Word`,parts:[{type:`Literal`,value:e}]}}function rh(e){for(let t of e.args){let e=th(t);if(e===`-o`||e===`--out`)return!0}return!1}function ih(e){for(let t of e.redirections){let e=t.operator,n=t.fd;if(e===`&>`||e===`&>>`||(e===`>`||e===`>>`||e===`>|`)&&(n==null||n===1))return!0}return!1}function ah(e){th(e.name)!==`say`||rh(e)||(e.args=[nh(`-o`),nh(`-`),...e.args])}function oh(e,t){if(Array.isArray(e)){for(let n of e)oh(n,t);return}if(!e||typeof e!=`object`)return;let n=e;if(n.type===`Pipeline`&&Array.isArray(n.commands)){let e=n.commands;for(let n=0;n<e.length;n++){let r=e[n],i=e.length>1&&n<e.length-1,a=t||i||r?.type===`SimpleCommand`&&ih(r);r?.type===`SimpleCommand`&&a&&ah(r),oh(r,a)}return}if(n.type===`CommandSubstitution`||n.type===`ProcessSubstitution`){oh(n.body,!0);return}for(let e of Object.values(n))oh(e,t)}const sh={name:`say-stdio`,transform(e){return oh(e.ast,!1),{ast:e.ast}}};function ch(e){if(e?.trim())return e.split(`,`).map(e=>e.trim()).filter(Boolean)}function lh(e){if(!e)return!1;let t=e.trim().toLowerCase();return t===`true`||t===`1`||t===`yes`}function uh(e){return e.map(e=>{let t=e.boost?parseFloat(e.boost):NaN,n=Number.isFinite(t)?t:void 0;return{name:e.name,displayName:e.displayName||e.name,description:e.description||``,source:{repo:e.repo,path:e.path||void 0,skill:e.skill||void 0,installAll:lh(e.installAll)},affinity:{apps:ch(e.apps),tasks:ch(e.tasks),role:ch(e.role),purpose:ch(e.purpose)},priority:n}})}const dh={apps:3,tasks:2,role:1,purpose:1};function fh(e,t){return e.map(e=>{let n=0,r=[],i=(e.affinity.apps??[]).filter(e=>t.apps.includes(e));i.length&&(n+=i.length*dh.apps,r.push(`apps(${i.join(`, `)})`));let a=(e.affinity.tasks??[]).filter(e=>t.tasks.includes(e));return a.length&&(n+=a.length*dh.tasks,r.push(`tasks(${a.join(`, `)})`)),(e.affinity.role??[]).includes(t.role)&&(n+=dh.role,r.push(`role(${t.role})`)),(e.affinity.purpose??[]).includes(t.purpose)&&(n+=dh.purpose,r.push(`purpose(${t.purpose})`)),n*=e.priority??1,{entry:e,score:n,matchReasons:r}}).filter(e=>e.score>0).sort((e,t)=>t.score-e.score)}function ph(e){let t=`upskill ${e.repo}`;return e.path&&(t+=` --path ${e.path}`),e.installAll?t+=` --all`:e.skill&&(t+=` --skill ${e.skill}`),t}async function mh(e){let t=new Set;try{let n=await e.readDir(Ai);for(let e of n)e.type===`directory`&&t.add(e.name)}catch{}let n=[`.agents`,`.claude`];try{let r=await e.readDir(`/`);for(let i of r)if(i.type===`directory`)for(let r of n)try{let n=`/${i.name}/${r}/skills`,a=await e.readDir(n);for(let e of a)e.type===`directory`&&t.add(e.name)}catch{}}catch{}return t}function hh(e){return{purpose:e.purpose??``,role:e.role??``,tasks:Array.isArray(e.tasks)?e.tasks:[],apps:Array.isArray(e.apps)?e.apps:[],name:e.name??``,company:typeof e.company==`string`?e.company:void 0}}function gh(e){return typeof e!=`string`||!e?null:ne(e)||null}function _h(e,t){if(t.length===0)return e;let n=new Set(t.map(e=>e.name));return[...e.filter(e=>!n.has(e.name)),...t]}async function vh(e,t){try{let n=gh(t);if(!n)return[];let r=await e(`${Mi}${n}.json`,{headers:{Accept:`application/json`}});return r.status===200?uh(ke(r.body).data):[]}catch{return[]}}async function yh(e){let t;try{t=await e(Ni,{headers:{Accept:`application/json`}})}catch(e){throw Error(Hi(e,Ni))}if(t.status!==200)throw Error(`HTTP ${t.status}`);return uh(ke(t.body).data)}function bh(e,t,n){let r=e.entry.source;if(r.skill){let e=n.get(r.skill);return e?{skillPath:e,skillName:r.skill}:r.path?{skillPath:r.path.replace(/^\/|\/$/g,``),skillName:r.skill}:{error:`skill "${r.skill}" not found in ${t}`}}if(r.path)return{skillPath:r.path.replace(/^\/|\/$/g,``),skillName:e.entry.name};let i=n.get(e.entry.name);return i?{skillPath:i,skillName:e.entry.name}:{error:`skill "${e.entry.name}" not found in ${t} and no explicit path provided`}}async function xh(e,t,n,r,i,a,o,s,c){let l=e.entry.source,u=l.path.replace(/^\/|\/$/g,``),d=o<s?` (~${Math.round((s-o)*(Date.now()-c)/o/1e3)}s remaining)`:``,f=[];for(let[e,t]of r)(t===u||t.startsWith(`${u}/`))&&f.push({name:e,path:t});if(f.length===0){let n=`no skills found under "${l.path}" in ${t}`;return{results:[{ok:!1,name:e.entry.name,error:n}],line:`[${o}/${s}] Failed "${e.entry.name}" bundle from ${t}: ${n}${d}\n`}}let p=Date.now(),m=0,h=0,g=[];for(let e of f){if(i.has(e.name))continue;let t=await $i(e.path,e.name,n,a,!1);t.ok?(g.push({ok:!0,name:e.name}),m++):(g.push({ok:!1,name:e.name,error:t.error}),h++)}let _=((Date.now()-p)/1e3).toFixed(1),v;return v=m===0&&h===0?`[${o}/${s}] Skipped "${e.entry.name}" bundle from ${t}: all sub-skills already installed${d}\n`:h===0?`[${o}/${s}] Installed "${e.entry.name}" bundle (${m} skill(s)) from ${t} (${_}s)${d}\n`:`[${o}/${s}] Installed "${e.entry.name}" bundle (${m}/${m+h} skill(s)) from ${t} (${_}s)${d}\n`,{results:g,line:v}}async function Sh(e,t,n,r,i,a,o,s,c,l){let u=e.entry.source,d=s<c?` (~${Math.round((c-s)*(Date.now()-l)/s/1e3)}s remaining)`:``,f=await ea(n,r,i,u.path);if(f.error)return{results:[{ok:!1,name:e.entry.name,error:f.error}],line:`[${s}/${c}] Failed "${e.entry.name}" bundle from ${t}: ${f.error}${d}\n`};let p=Date.now(),m=0,h=0,g=[];for(let e of f.skills){if(a.has(e.name))continue;let t=await Qi(n,r,e.path,e.name,o,i,!1);t.exitCode===0?(g.push({ok:!0,name:e.name}),m++):(g.push({ok:!1,name:e.name,error:t.stderr.trim()}),h++)}let _=((Date.now()-p)/1e3).toFixed(1),v;return v=m===0&&h===0?`[${s}/${c}] Skipped "${e.entry.name}" bundle from ${t}: all sub-skills already installed${d}\n`:h===0?`[${s}/${c}] Installed "${e.entry.name}" bundle (${m} skill(s)) from ${t} (${_}s)${d}\n`:`[${s}/${c}] Installed "${e.entry.name}" bundle (${m}/${m+h} skill(s)) from ${t} (${_}s)${d}\n`,{results:g,line:v}}async function Ch(e,t,n,r,i,a,o,s){let c=new Map;for(let e of Object.keys(n))if(e.endsWith(`/SKILL.md`)){let t=e.replace(/\/SKILL\.md$/,``);c.set(t.split(`/`).pop()||t,t)}let l=[],u=``;for(let d of t){let t=d.entry.source;if(t.installAll&&t.path){r.count++;let t=await xh(d,e,n,c,o,s,r.count,i,a);l.push(...t.results),u+=t.line;continue}let f=bh(d,e,c);if(`error`in f){l.push({ok:!1,name:d.entry.name,error:f.error}),r.count++;let t=r.count<i?` (~${Math.round((i-r.count)*(Date.now()-a)/r.count/1e3)}s remaining)`:``;u+=`[${r.count}/${i}] Failed "${d.entry.name}" from ${e}: ${f.error}${t}\n`;continue}let{skillPath:p,skillName:m}=f,h=Date.now(),g=await $i(p,m,n,s,!1);r.count++;let _=((Date.now()-h)/1e3).toFixed(1),v=(Date.now()-a)/r.count,ee=Math.round((i-r.count)*v/1e3),te=r.count<i?` (~${ee}s remaining)`:``;g.ok?(l.push({ok:!0,name:m}),u+=`[${r.count}/${i}] Installed "${m}" from ${e} (${_}s)${te}\n`):(l.push({ok:!1,name:m,error:g.error}),u+=`[${r.count}/${i}] Failed "${m}" from ${e}: ${g.error}${te}\n`)}return{errors:[],results:l,output:u}}async function wh(e,t,n,r,i,a,o,s,c,l){let u=await Ui(c),d=[],f=``;for(let c of t){let t=c.entry.source;i.count++;let p=i.count<a?` (~${Math.round((a-i.count)*(Date.now()-o)/i.count/1e3)}s remaining)`:``;if(t.installAll&&t.path){let t=await Sh(c,e,n,r,u,s,l,i.count,a,o);d.push(...t.results),f+=t.line;continue}let m=t.path?t.path.replace(/^\/|\/$/g,``):c.entry.name,h=t.skill||c.entry.name,g=await Qi(n,r,m,h,l,u,!1);g.exitCode===0?(f+=`[${i.count}/${a}] Installed "${h}" from ${e}${p}\n`,d.push({ok:!0,name:h})):(f+=`[${i.count}/${a}] Failed "${h}" from ${e}: ${g.stderr.trim()}${p}\n`,d.push({ok:!1,name:h,error:g.stderr.trim()}))}return{errors:[],results:d,output:f}}function Th(e,t,n){let r=``;for(let i of e){if(i.status===`rejected`){t.push(`upskill: unexpected error: ${i.reason}`);continue}r+=i.value.output;for(let e of i.value.errors)t.push(e);for(let e of i.value.results)e.ok?n.push(e.name):e.error&&t.push(`upskill: ${e.error}`)}return r}async function Eh(e,t,n){let r=Date.now(),i=(e,t=[])=>({installedNames:[],errors:t,skipped:e,log:``,elapsedSeconds:(Date.now()-r)/1e3}),a=null;if(n)a=hh(n);else try{let t=await e.readDir(`/home`);for(let n of t)try{let t=await e.readTextFile(`/home/${n.name}/.welcome.json`);a=hh(JSON.parse(t));break}catch{}}catch{}if(!a)return i(`no-profile`);let o,s;try{let[n,r,i]=await Promise.all([yh(t),vh(t,a.company),mh(e)]);o=_h(n,r),s=i}catch(e){return i(`catalog-fetch`,[`upskill: failed to fetch skill catalog from ${Ni}: ${e instanceof Error?e.message:String(e)}`])}let c=fh(o,a).filter(e=>!s.has(e.entry.name));if(c.length===0)return i(`all-installed`);let l=new Map;for(let e of c){let t=e.entry.source.repo,n=l.get(t);n?n.push(e):l.set(t,[e])}let u=c.length,d={count:0},f=[],p=[],m=``;m=Th(await Promise.allSettled(Array.from(l.entries()).map(async([n,i])=>{let[a,o]=n.split(`/`),c=await Bi(a,o,t);return c.status===`error`?wh(n,i,a,o,d,u,r,s,t,e):Ch(n,i,Fi(c.files),d,u,r,s,e)})),f,p);let h=(Date.now()-r)/1e3;return p.length>0&&(await Xi(),m+=`\nInstalled ${p.length} recommended skill(s) in ${h.toFixed(1)}s\n`),{installedNames:p,errors:f,skipped:null,log:m,elapsedSeconds:h}}function Dh(e){let t=e.toLowerCase();return t.startsWith(`www.`)?t.slice(4):t}let Oh,kh;async function Ah(e){if(Oh)return Oh;if(kh!==void 0)return kh;kh=(async()=>{let t;try{t=await e(Pi,{headers:{Accept:`application/json`}})}catch(e){throw Error(Hi(e,Pi))}if(t.status!==200)throw Error(`browse.sh returned HTTP ${t.status}`);let n=ke(t.body),r=Array.isArray(n)?n:n.skills??[];return Oh=r,r})();try{return await kh}catch(e){throw kh=void 0,e}}async function jh(e,t){let n=await Ah(t),r=e.trim().toLowerCase();return r?n.filter(e=>[e.title??``,e.name??``,e.description??``,e.hostname??``,...e.tags??[]].join(` `).toLowerCase().includes(r)).map(e=>({name:e.slug,displayName:e.title||e.name||e.task||e.slug,summary:e.description||``,source:`browseSh`,qualityScore:null,installHint:`upskill browse:${e.hostname}/${e.task}`,sourceRepo:e.hostname})):[]}const Mh=/^[A-Za-z0-9._-]+$/;function Nh(e){return!e||e===`.`||e===`..`?!1:Mh.test(e)}function Ph(e){let t;if(e.startsWith(`browse:`))t=e.slice(7);else{let n=e.match(/^https:\/\/browse\.sh\/skills\/([^/?#]+)\/([^/?#]+?)\/?$/);n&&(t=`${n[1]}/${n[2]}`)}if(!t)return null;let n=t.indexOf(`/`);if(n<0)return null;let r=t.slice(0,n),i=t.slice(n+1);if(!r||!i||i.includes(`/`)||!Nh(r)||!Nh(i))return null;let a=Dh(r);return Nh(a)?{hostname:a,task:i}:null}function Fh(e,t){let n=e.match(/^---\r?\n([\s\S]*?)\r?\n---/);if(n)for(let e of n[1].split(/\r?\n/)){let n=e.match(/^([A-Za-z_][A-Za-z0-9_-]*)\s*:\s*(.*)$/);if(!n||n[1]!==t)continue;let r=n[2].trim();return(r.startsWith(`"`)&&r.endsWith(`"`)||r.startsWith(`'`)&&r.endsWith(`'`))&&(r=r.slice(1,-1)),r||void 0}}function Ih(e,t){let n=e.updated?` · updated ${e.updated}`:``;return[`> [!NOTE] **Imported from browse.sh** — original slug: \`${t}\``,`>`,"> **SLICC adaptation:** use `playwright-cli` — you are running inside the user's real browser session, so the bot-detection workarounds the upstream skill assumes are usually unnecessary.",`>`,`> Source: <https://browse.sh/skills/${t}>${n}`].join(`
181
- `)}function Lh(e){return e.replace(/(?:^|\n)> \[!NOTE\] \*\*Imported from browse\.sh\*\*[\s\S]*?(?:\n\n|$)/,`
182
- `)}function Rh(e,t){let n=e.match(/^(---\r?\n[\s\S]*?\r?\n---)(\r?\n|$)/);return n?`${n[1]}${n[2]||`
183
- `}\n${t}\n\n${e.slice(n[0].length)}`:`${t}\n\n${e}`}async function zh(e,t,n){let r=`${e}/${t}`,i=`${Pi}/${e}/${t}`,a;try{let e=await n(i,{headers:{Accept:`application/json`}});if(e.status===404)return{ok:!1,error:`browse.sh skill "${r}" not found`};if(e.status!==200)return{ok:!1,error:`browse.sh returned HTTP ${e.status} for "${r}"`};a=ke(e.body)}catch(e){return{ok:!1,error:`failed to fetch browse.sh skill "${r}": ${Hi(e,i)}`}}let o;if(a.skillMdUrl)try{let e=await n(a.skillMdUrl,{headers:{Accept:`text/plain`}});e.status===200&&(o=Ae(e.body))}catch{}if(!o&&a.skillMd&&(o=a.skillMd),!o)return{ok:!1,error:`browse.sh skill "${r}" has no SKILL.md content`};let s=Fh(o,`name`),c=t.replace(/-[A-Za-z0-9]{4,8}$/,``),l=s||c||t;if(!Nh(l)||l.length>64)return{ok:!1,error:`refusing to install browse.sh skill with unsafe name "${l}"`};if(!Nh(e))return{ok:!1,error:`refusing to install browse.sh skill with unsafe hostname "${e}"`};let u=Ih(a,r);return{ok:!0,dirName:`browse-${e}-${l}`,slug:r,content:Rh(o,u)}}async function Bh(e,t,n,r,i=!1){let a=await zh(e,t,r);if(!a.ok)return{stdout:``,stderr:`upskill: ${a.error}\n`,exitCode:1};let{dirName:o,slug:s,content:c}=a,l=`${Ai}/${o}`;try{if(await n.stat(l),!i)return{stdout:``,stderr:`upskill: skill "${o}" already exists (use --force to overwrite)\n`,exitCode:1};await Vi(n,l,await ta(n,o))}catch{}return await n.mkdir(l,{recursive:!0}),await n.writeFile(`${l}/SKILL.md`,c),await Ki(n,o,{kind:`browse.sh`,source:s,skill:o,files:[`SKILL.md`]}),await Xi(),{stdout:`Installed skill "${o}" from browse.sh (${s})\n`,stderr:``,exitCode:0}}function Vh(){return"Discovery roots: /workspace/skills plus accessible **/.agents/skills/*, **/.claude/skills/*, **/.claude-plugin/marketplace.json skill collections anywhere in the VFS, and installed agent plugins (`plugin list`).\n"}function Hh(e){switch(e){case`native`:return`native`;case`agents`:return`.agents`;case`claude`:return`.claude`;case`marketplace`:return`marketplace`;case`plugin`:return`plugin`}}function Uh(e,t){let n=Math.max(4,...e.map(e=>e.name.length)),r=Math.max(20,97-n-2-11-1),i=`NAME`.padEnd(n),a=`─`.repeat(2+n+2+11+1+r),o=`${t}:\n\n`;o+=` ${i} SOURCE DESCRIPTION\n`,o+=`${a}\n`;for(let t of e){let e=t.description||``,i=e.length>r?`${e.slice(0,r-1)}…`:e;o+=` ${t.name.padEnd(n)} ${Hh(t.source).padEnd(11)} ${i}\n`}return o+=`\n${Vh()}`,o}function Wh(e){let t=`Skill: ${e.name}\n`;if(t+=`Description: ${e.description||`(none)`}\n`,t+=`Source: ${Hh(e.source)}\n`,t+=`Source root: ${e.sourceRoot}\n`,e.skillFilePath&&(t+=`Instructions: ${e.skillFilePath}\n`),e.shadowedPaths?.length){t+=`Shadowed paths:
184
- `;for(let n of e.shadowedPaths)t+=` - ${n}\n`}return t}function Gh(){return{stdout:`usage: upskill <command> [options]
180
+ `}const Xm=Symbol(`mount:timeout`),Zm=Symbol(`mount:no-panel`);async function Qm(e,t){let n=He.generateId(),r=!1,i=!1,a=Ue({id:n,html:Ym(`directory`,[],t),onAction:(e,t)=>$m(e,t)},e.onUpdate).catch(e=>{if(r)return Xm;if(i)return Zm;throw e}),o,s=new Promise(e=>{o=setTimeout(()=>{r=!0,He.cancel(n,`mount: timed out`),e(Xm)},3e5)}),c=new Promise(e=>{He.waitForMount(n,5e3).then(()=>{},()=>{r||(i=!0,He.cancel(n,`mount: panel did not render the approval card`),e(Zm))})}),l=await Promise.race([a,s,c]);if(o&&clearTimeout(o),l===Xm)throw Error(`mount: timed out after 5 minute(s) waiting for user approval`);if(l===Zm)throw Error(`mount: chat panel did not render the approval card — open the chat panel and retry`);if(!l)throw Error(`mount: tool UI not available`);let u=l;if(u.denied)throw Error(`mount: denied by user`);if(u.cancelled)throw Error(`mount: cancelled`);if(u.error)throw Error(`mount: ${u.error}`);if(!u.handle)throw Error(`mount: no directory selected`);return u.handle}async function $m(e,t){if(e!==`approve`)return{denied:!0};let n=t;if(n?.handleInIdb&&typeof n.idbKey==`string`)try{let e=await Jt(n.idbKey);return e?(await Kt(e),{approved:!0,handle:e}):{error:`No directory handle found in storage`}}catch(e){return{error:e instanceof Error?e.message:String(e)}}if(n?.cancelled)return{cancelled:!0};if(n?.error)return{error:String(n.error)};try{return{approved:!0,handle:await window.showDirectoryPicker({mode:`readwrite`})}}catch(e){return e instanceof Error&&e.name===`AbortError`?{cancelled:!0}:{error:e instanceof Error?e.message:String(e)}}}function eh(e){let t=e?.parts;return t?.length!==1||t[0]?.type!==`Literal`?null:t[0].value??null}function th(e){return{type:`Word`,parts:[{type:`Literal`,value:e}]}}function nh(e){for(let t of e.args){let e=eh(t);if(e===`-o`||e===`--out`)return!0}return!1}function rh(e){for(let t of e.redirections){let e=t.operator,n=t.fd;if(e===`&>`||e===`&>>`||(e===`>`||e===`>>`||e===`>|`)&&(n==null||n===1))return!0}return!1}function ih(e){eh(e.name)!==`say`||nh(e)||(e.args=[th(`-o`),th(`-`),...e.args])}function ah(e,t){if(Array.isArray(e)){for(let n of e)ah(n,t);return}if(!e||typeof e!=`object`)return;let n=e;if(n.type===`Pipeline`&&Array.isArray(n.commands)){let e=n.commands;for(let n=0;n<e.length;n++){let r=e[n],i=e.length>1&&n<e.length-1,a=t||i||r?.type===`SimpleCommand`&&rh(r);r?.type===`SimpleCommand`&&a&&ih(r),ah(r,a)}return}if(n.type===`CommandSubstitution`||n.type===`ProcessSubstitution`){ah(n.body,!0);return}for(let e of Object.values(n))ah(e,t)}const oh={name:`say-stdio`,transform(e){return ah(e.ast,!1),{ast:e.ast}}};function sh(e){if(e?.trim())return e.split(`,`).map(e=>e.trim()).filter(Boolean)}function ch(e){if(!e)return!1;let t=e.trim().toLowerCase();return t===`true`||t===`1`||t===`yes`}function lh(e){return e.map(e=>{let t=e.boost?parseFloat(e.boost):NaN,n=Number.isFinite(t)?t:void 0;return{name:e.name,displayName:e.displayName||e.name,description:e.description||``,source:{repo:e.repo,path:e.path||void 0,skill:e.skill||void 0,installAll:ch(e.installAll)},affinity:{apps:sh(e.apps),tasks:sh(e.tasks),role:sh(e.role),purpose:sh(e.purpose)},priority:n}})}const uh={apps:3,tasks:2,role:1,purpose:1};function dh(e,t){return e.map(e=>{let n=0,r=[],i=(e.affinity.apps??[]).filter(e=>t.apps.includes(e));i.length&&(n+=i.length*uh.apps,r.push(`apps(${i.join(`, `)})`));let a=(e.affinity.tasks??[]).filter(e=>t.tasks.includes(e));return a.length&&(n+=a.length*uh.tasks,r.push(`tasks(${a.join(`, `)})`)),(e.affinity.role??[]).includes(t.role)&&(n+=uh.role,r.push(`role(${t.role})`)),(e.affinity.purpose??[]).includes(t.purpose)&&(n+=uh.purpose,r.push(`purpose(${t.purpose})`)),n*=e.priority??1,{entry:e,score:n,matchReasons:r}}).filter(e=>e.score>0).sort((e,t)=>t.score-e.score)}function fh(e){let t=`upskill ${e.repo}`;return e.path&&(t+=` --path ${e.path}`),e.installAll?t+=` --all`:e.skill&&(t+=` --skill ${e.skill}`),t}async function ph(e){let t=new Set;try{let n=await e.readDir(ji);for(let e of n)e.type===`directory`&&t.add(e.name)}catch{}let n=[`.agents`,`.claude`];try{let r=await e.readDir(`/`);for(let i of r)if(i.type===`directory`)for(let r of n)try{let n=`/${i.name}/${r}/skills`,a=await e.readDir(n);for(let e of a)e.type===`directory`&&t.add(e.name)}catch{}}catch{}return t}function mh(e){return{purpose:e.purpose??``,role:e.role??``,tasks:Array.isArray(e.tasks)?e.tasks:[],apps:Array.isArray(e.apps)?e.apps:[],name:e.name??``,company:typeof e.company==`string`?e.company:void 0}}function hh(e){return typeof e!=`string`||!e?null:ne(e)||null}function gh(e,t){if(t.length===0)return e;let n=new Set(t.map(e=>e.name));return[...e.filter(e=>!n.has(e.name)),...t]}async function _h(e,t){try{let n=hh(t);if(!n)return[];let r=await e(`${Ni}${n}.json`,{headers:{Accept:`application/json`}});return r.status===200?lh(ke(r.body).data):[]}catch{return[]}}async function vh(e){let t;try{t=await e(Pi,{headers:{Accept:`application/json`}})}catch(e){throw Error(Ui(e,Pi))}if(t.status!==200)throw Error(`HTTP ${t.status}`);return lh(ke(t.body).data)}function yh(e,t,n){let r=e.entry.source;if(r.skill){let e=n.get(r.skill);return e?{skillPath:e,skillName:r.skill}:r.path?{skillPath:r.path.replace(/^\/|\/$/g,``),skillName:r.skill}:{error:`skill "${r.skill}" not found in ${t}`}}if(r.path)return{skillPath:r.path.replace(/^\/|\/$/g,``),skillName:e.entry.name};let i=n.get(e.entry.name);return i?{skillPath:i,skillName:e.entry.name}:{error:`skill "${e.entry.name}" not found in ${t} and no explicit path provided`}}async function bh(e,t,n,r,i,a,o,s,c){let l=e.entry.source,u=l.path.replace(/^\/|\/$/g,``),d=o<s?` (~${Math.round((s-o)*(Date.now()-c)/o/1e3)}s remaining)`:``,f=[];for(let[e,t]of r)(t===u||t.startsWith(`${u}/`))&&f.push({name:e,path:t});if(f.length===0){let n=`no skills found under "${l.path}" in ${t}`;return{results:[{ok:!1,name:e.entry.name,error:n}],line:`[${o}/${s}] Failed "${e.entry.name}" bundle from ${t}: ${n}${d}\n`}}let p=Date.now(),m=0,h=0,g=[];for(let e of f){if(i.has(e.name))continue;let t=await ea(e.path,e.name,n,a,!1);t.ok?(g.push({ok:!0,name:e.name}),m++):(g.push({ok:!1,name:e.name,error:t.error}),h++)}let _=((Date.now()-p)/1e3).toFixed(1),v;return v=m===0&&h===0?`[${o}/${s}] Skipped "${e.entry.name}" bundle from ${t}: all sub-skills already installed${d}\n`:h===0?`[${o}/${s}] Installed "${e.entry.name}" bundle (${m} skill(s)) from ${t} (${_}s)${d}\n`:`[${o}/${s}] Installed "${e.entry.name}" bundle (${m}/${m+h} skill(s)) from ${t} (${_}s)${d}\n`,{results:g,line:v}}async function xh(e,t,n,r,i,a,o,s,c,l){let u=e.entry.source,d=s<c?` (~${Math.round((c-s)*(Date.now()-l)/s/1e3)}s remaining)`:``,f=await ta(n,r,i,u.path);if(f.error)return{results:[{ok:!1,name:e.entry.name,error:f.error}],line:`[${s}/${c}] Failed "${e.entry.name}" bundle from ${t}: ${f.error}${d}\n`};let p=Date.now(),m=0,h=0,g=[];for(let e of f.skills){if(a.has(e.name))continue;let t=await $i(n,r,e.path,e.name,o,i,!1);t.exitCode===0?(g.push({ok:!0,name:e.name}),m++):(g.push({ok:!1,name:e.name,error:t.stderr.trim()}),h++)}let _=((Date.now()-p)/1e3).toFixed(1),v;return v=m===0&&h===0?`[${s}/${c}] Skipped "${e.entry.name}" bundle from ${t}: all sub-skills already installed${d}\n`:h===0?`[${s}/${c}] Installed "${e.entry.name}" bundle (${m} skill(s)) from ${t} (${_}s)${d}\n`:`[${s}/${c}] Installed "${e.entry.name}" bundle (${m}/${m+h} skill(s)) from ${t} (${_}s)${d}\n`,{results:g,line:v}}async function Sh(e,t,n,r,i,a,o,s){let c=new Map;for(let e of Object.keys(n))if(e.endsWith(`/SKILL.md`)){let t=e.replace(/\/SKILL\.md$/,``);c.set(t.split(`/`).pop()||t,t)}let l=[],u=``;for(let d of t){let t=d.entry.source;if(t.installAll&&t.path){r.count++;let t=await bh(d,e,n,c,o,s,r.count,i,a);l.push(...t.results),u+=t.line;continue}let f=yh(d,e,c);if(`error`in f){l.push({ok:!1,name:d.entry.name,error:f.error}),r.count++;let t=r.count<i?` (~${Math.round((i-r.count)*(Date.now()-a)/r.count/1e3)}s remaining)`:``;u+=`[${r.count}/${i}] Failed "${d.entry.name}" from ${e}: ${f.error}${t}\n`;continue}let{skillPath:p,skillName:m}=f,h=Date.now(),g=await ea(p,m,n,s,!1);r.count++;let _=((Date.now()-h)/1e3).toFixed(1),v=(Date.now()-a)/r.count,ee=Math.round((i-r.count)*v/1e3),te=r.count<i?` (~${ee}s remaining)`:``;g.ok?(l.push({ok:!0,name:m}),u+=`[${r.count}/${i}] Installed "${m}" from ${e} (${_}s)${te}\n`):(l.push({ok:!1,name:m,error:g.error}),u+=`[${r.count}/${i}] Failed "${m}" from ${e}: ${g.error}${te}\n`)}return{errors:[],results:l,output:u}}async function Ch(e,t,n,r,i,a,o,s,c,l){let u=await Wi(c),d=[],f=``;for(let c of t){let t=c.entry.source;i.count++;let p=i.count<a?` (~${Math.round((a-i.count)*(Date.now()-o)/i.count/1e3)}s remaining)`:``;if(t.installAll&&t.path){let t=await xh(c,e,n,r,u,s,l,i.count,a,o);d.push(...t.results),f+=t.line;continue}let m=t.path?t.path.replace(/^\/|\/$/g,``):c.entry.name,h=t.skill||c.entry.name,g=await $i(n,r,m,h,l,u,!1);g.exitCode===0?(f+=`[${i.count}/${a}] Installed "${h}" from ${e}${p}\n`,d.push({ok:!0,name:h})):(f+=`[${i.count}/${a}] Failed "${h}" from ${e}: ${g.stderr.trim()}${p}\n`,d.push({ok:!1,name:h,error:g.stderr.trim()}))}return{errors:[],results:d,output:f}}function wh(e,t,n){let r=``;for(let i of e){if(i.status===`rejected`){t.push(`upskill: unexpected error: ${i.reason}`);continue}r+=i.value.output;for(let e of i.value.errors)t.push(e);for(let e of i.value.results)e.ok?n.push(e.name):e.error&&t.push(`upskill: ${e.error}`)}return r}async function Th(e,t,n){let r=Date.now(),i=(e,t=[])=>({installedNames:[],errors:t,skipped:e,log:``,elapsedSeconds:(Date.now()-r)/1e3}),a=null;if(n)a=mh(n);else try{let t=await e.readDir(`/home`);for(let n of t)try{let t=await e.readTextFile(`/home/${n.name}/.welcome.json`);a=mh(JSON.parse(t));break}catch{}}catch{}if(!a)return i(`no-profile`);let o,s;try{let[n,r,i]=await Promise.all([vh(t),_h(t,a.company),ph(e)]);o=gh(n,r),s=i}catch(e){return i(`catalog-fetch`,[`upskill: failed to fetch skill catalog from ${Pi}: ${e instanceof Error?e.message:String(e)}`])}let c=dh(o,a).filter(e=>!s.has(e.entry.name));if(c.length===0)return i(`all-installed`);let l=new Map;for(let e of c){let t=e.entry.source.repo,n=l.get(t);n?n.push(e):l.set(t,[e])}let u=c.length,d={count:0},f=[],p=[],m=``;m=wh(await Promise.allSettled(Array.from(l.entries()).map(async([n,i])=>{let[a,o]=n.split(`/`),c=await Vi(a,o,t);return c.status===`error`?Ch(n,i,a,o,d,u,r,s,t,e):Sh(n,i,Ii(c.files),d,u,r,s,e)})),f,p);let h=(Date.now()-r)/1e3;return p.length>0&&(await Zi(),m+=`\nInstalled ${p.length} recommended skill(s) in ${h.toFixed(1)}s\n`),{installedNames:p,errors:f,skipped:null,log:m,elapsedSeconds:h}}function Eh(e){let t=e.toLowerCase();return t.startsWith(`www.`)?t.slice(4):t}let Dh,Oh;async function kh(e){if(Dh)return Dh;if(Oh!==void 0)return Oh;Oh=(async()=>{let t;try{t=await e(Fi,{headers:{Accept:`application/json`}})}catch(e){throw Error(Ui(e,Fi))}if(t.status!==200)throw Error(`browse.sh returned HTTP ${t.status}`);let n=ke(t.body),r=Array.isArray(n)?n:n.skills??[];return Dh=r,r})();try{return await Oh}catch(e){throw Oh=void 0,e}}async function Ah(e,t){let n=await kh(t),r=e.trim().toLowerCase();return r?n.filter(e=>[e.title??``,e.name??``,e.description??``,e.hostname??``,...e.tags??[]].join(` `).toLowerCase().includes(r)).map(e=>({name:e.slug,displayName:e.title||e.name||e.task||e.slug,summary:e.description||``,source:`browseSh`,qualityScore:null,installHint:`upskill browse:${e.hostname}/${e.task}`,sourceRepo:e.hostname})):[]}const jh=/^[A-Za-z0-9._-]+$/;function Mh(e){return!e||e===`.`||e===`..`?!1:jh.test(e)}function Nh(e){let t;if(e.startsWith(`browse:`))t=e.slice(7);else{let n=e.match(/^https:\/\/browse\.sh\/skills\/([^/?#]+)\/([^/?#]+?)\/?$/);n&&(t=`${n[1]}/${n[2]}`)}if(!t)return null;let n=t.indexOf(`/`);if(n<0)return null;let r=t.slice(0,n),i=t.slice(n+1);if(!r||!i||i.includes(`/`)||!Mh(r)||!Mh(i))return null;let a=Eh(r);return Mh(a)?{hostname:a,task:i}:null}function Ph(e,t){let n=e.match(/^---\r?\n([\s\S]*?)\r?\n---/);if(n)for(let e of n[1].split(/\r?\n/)){let n=e.match(/^([A-Za-z_][A-Za-z0-9_-]*)\s*:\s*(.*)$/);if(!n||n[1]!==t)continue;let r=n[2].trim();return(r.startsWith(`"`)&&r.endsWith(`"`)||r.startsWith(`'`)&&r.endsWith(`'`))&&(r=r.slice(1,-1)),r||void 0}}function Fh(e,t){let n=e.updated?` · updated ${e.updated}`:``;return[`> [!NOTE] **Imported from browse.sh** — original slug: \`${t}\``,`>`,"> **SLICC adaptation:** use `playwright-cli` — you are running inside the user's real browser session, so the bot-detection workarounds the upstream skill assumes are usually unnecessary.",`>`,`> Source: <https://browse.sh/skills/${t}>${n}`].join(`
181
+ `)}function Ih(e){return e.replace(/(?:^|\n)> \[!NOTE\] \*\*Imported from browse\.sh\*\*[\s\S]*?(?:\n\n|$)/,`
182
+ `)}function Lh(e,t){let n=e.match(/^(---\r?\n[\s\S]*?\r?\n---)(\r?\n|$)/);return n?`${n[1]}${n[2]||`
183
+ `}\n${t}\n\n${e.slice(n[0].length)}`:`${t}\n\n${e}`}async function Rh(e,t,n){let r=`${e}/${t}`,i=`${Fi}/${e}/${t}`,a;try{let e=await n(i,{headers:{Accept:`application/json`}});if(e.status===404)return{ok:!1,error:`browse.sh skill "${r}" not found`};if(e.status!==200)return{ok:!1,error:`browse.sh returned HTTP ${e.status} for "${r}"`};a=ke(e.body)}catch(e){return{ok:!1,error:`failed to fetch browse.sh skill "${r}": ${Ui(e,i)}`}}let o;if(a.skillMdUrl)try{let e=await n(a.skillMdUrl,{headers:{Accept:`text/plain`}});e.status===200&&(o=Ae(e.body))}catch{}if(!o&&a.skillMd&&(o=a.skillMd),!o)return{ok:!1,error:`browse.sh skill "${r}" has no SKILL.md content`};let s=Ph(o,`name`),c=t.replace(/-[A-Za-z0-9]{4,8}$/,``),l=s||c||t;if(!Mh(l)||l.length>64)return{ok:!1,error:`refusing to install browse.sh skill with unsafe name "${l}"`};if(!Mh(e))return{ok:!1,error:`refusing to install browse.sh skill with unsafe hostname "${e}"`};let u=Fh(a,r);return{ok:!0,dirName:`browse-${e}-${l}`,slug:r,content:Lh(o,u)}}async function zh(e,t,n,r,i=!1){let a=await Rh(e,t,r);if(!a.ok)return{stdout:``,stderr:`upskill: ${a.error}\n`,exitCode:1};let{dirName:o,slug:s,content:c}=a,l=`${ji}/${o}`;try{if(await n.stat(l),!i)return{stdout:``,stderr:`upskill: skill "${o}" already exists (use --force to overwrite)\n`,exitCode:1};await Hi(n,l,await na(n,o))}catch{}return await n.mkdir(l,{recursive:!0}),await n.writeFile(`${l}/SKILL.md`,c),await qi(n,o,{kind:`browse.sh`,source:s,skill:o,files:[`SKILL.md`]}),await Zi(),{stdout:`Installed skill "${o}" from browse.sh (${s})\n`,stderr:``,exitCode:0}}function Bh(){return"Discovery roots: /workspace/skills plus accessible **/.agents/skills/*, **/.claude/skills/*, **/.claude-plugin/marketplace.json skill collections anywhere in the VFS, and installed agent plugins (`plugin list`).\n"}function Vh(e){switch(e){case`native`:return`native`;case`agents`:return`.agents`;case`claude`:return`.claude`;case`marketplace`:return`marketplace`;case`plugin`:return`plugin`}}function Hh(e,t){let n=Math.max(4,...e.map(e=>e.name.length)),r=Math.max(20,97-n-2-11-1),i=`NAME`.padEnd(n),a=`─`.repeat(2+n+2+11+1+r),o=`${t}:\n\n`;o+=` ${i} SOURCE DESCRIPTION\n`,o+=`${a}\n`;for(let t of e){let e=t.description||``,i=e.length>r?`${e.slice(0,r-1)}…`:e;o+=` ${t.name.padEnd(n)} ${Vh(t.source).padEnd(11)} ${i}\n`}return o+=`\n${Bh()}`,o}function Uh(e){let t=`Skill: ${e.name}\n`;if(t+=`Description: ${e.description||`(none)`}\n`,t+=`Source: ${Vh(e.source)}\n`,t+=`Source root: ${e.sourceRoot}\n`,e.skillFilePath&&(t+=`Instructions: ${e.skillFilePath}\n`),e.shadowedPaths?.length){t+=`Shadowed paths:
184
+ `;for(let n of e.shadowedPaths)t+=` - ${n}\n`}return t}function Wh(){return{stdout:`usage: upskill <command> [options]
185
185
 
186
186
  Install skills from GitHub repositories, the Tessl registry, or browse.sh.
187
187
 
@@ -197,7 +197,7 @@ Commands:
197
197
  tessl:<name> Install skill from Tessl registry
198
198
  browse:<hostname>/<task> Install site-specific skill from browse.sh
199
199
 
200
- ${Vh()}
200
+ ${Bh()}
201
201
  GitHub Installation:
202
202
  upskill owner/repo List available skills in repo
203
203
  upskill owner/repo --skill name Install specific skill
@@ -269,14 +269,14 @@ Examples:
269
269
  upskill browse:weather.gov/get-forecast-1uezib
270
270
  upskill list --outdated
271
271
  upskill update --dry-run
272
- `,stderr:``,exitCode:0}}async function Kh(e,t,n,r){let i=e.slice(1).find(e=>e.startsWith(`-`));if(i)return{stdout:``,stderr:`skill: unknown option "${i}" for list\n`,exitCode:1};let a=await n.discoverSkills(t);if(a.length===0)return{stdout:`No discoverable skills found.\n\n${Vh()}Install skills with: upskill owner/repo --all\n`,stderr:``,exitCode:0};let{collisions:o}=await br(t,_r(r));return{...xr(`skill`,Uh(a,`Discoverable skills`),o,{builtinNames:new Set(ft())}),exitCode:0}}function qh(e){return C(`skill`,async(t,n)=>{if(t.length===0||t.includes(`--help`)||t.includes(`-h`))return{stdout:`usage: skill <command> [options]
272
+ `,stderr:``,exitCode:0}}async function Gh(e,t,n,r){let i=e.slice(1).find(e=>e.startsWith(`-`));if(i)return{stdout:``,stderr:`skill: unknown option "${i}" for list\n`,exitCode:1};let a=await n.discoverSkills(t);if(a.length===0)return{stdout:`No discoverable skills found.\n\n${Bh()}Install skills with: upskill owner/repo --all\n`,stderr:``,exitCode:0};let{collisions:o}=await xr(t,vr(r));return{...Sr(`skill`,Hh(a,`Discoverable skills`),o,{builtinNames:new Set(pt())}),exitCode:0}}function Kh(e){return C(`skill`,async(t,n)=>{if(t.length===0||t.includes(`--help`)||t.includes(`-h`))return{stdout:`usage: skill <command> [options]
273
273
 
274
274
  Commands:
275
275
  list List discoverable skills
276
276
  info <name> Show details about a skill
277
277
  read <name> Read the SKILL.md instructions
278
278
 
279
- ${Vh()}
279
+ ${Bh()}
280
280
  For installing skills from registries or GitHub, use 'upskill':
281
281
  upskill search "query" Search registries (Tessl + browse.sh)
282
282
  upskill owner/repo --list List skills in GitHub repo
@@ -288,64 +288,64 @@ Examples:
288
288
  skill list
289
289
  skill info bluebubbles
290
290
  skill read bluebubbles
291
- `,stderr:``,exitCode:0};let r=t[0],i=await import(`./kernel-worker-Dd6UT_Hw.js`).then(e=>e.r);try{switch(r){case`list`:return Kh(t,e,i,n.env.get(`PATH`));case`info`:{let n=t[1];if(!n)return{stdout:``,stderr:`skill: info requires a skill name
292
- `,exitCode:1};let r=await i.getSkillInfo(e,n);return r?{stdout:Wh(r),stderr:``,exitCode:0}:{stdout:``,stderr:`skill: "${n}" not found\n`,exitCode:1}}case`read`:{let n=t[1];if(!n)return{stdout:``,stderr:`skill: read requires a skill name
291
+ `,stderr:``,exitCode:0};let r=t[0],i=await import(`./kernel-worker-bxQFQR0N.js`).then(e=>e.r);try{switch(r){case`list`:return Gh(t,e,i,n.env.get(`PATH`));case`info`:{let n=t[1];if(!n)return{stdout:``,stderr:`skill: info requires a skill name
292
+ `,exitCode:1};let r=await i.getSkillInfo(e,n);return r?{stdout:Uh(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
293
293
  `,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+`
294
- `,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 Jh=[{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=>Zi(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 Yh(e){let t={skills:[],dryRun:!1,json:!1};for(let n=0;n<e.length;n++){let r=e[n],i=Jh.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 Xh(e,t){return!e||!t||e.byteLength!==t.byteLength?!1:e.every((e,n)=>e===t[n])}async function Zh(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 Qh(e,t,n,r){let i=await Zh(e,t);return Li(n)?i?{status:`kept-local`,write:!1}:{status:`added`,write:!0}:i?Xh(i,r)?{status:`unchanged`,write:!1}:{status:`updated`,write:!0}:{status:`added`,write:!0}}async function $h(e,t,n,r){let i={changes:[],writes:[],removals:[]};for(let[r,a]of n){let n=`${t}/${r}`,{status:o,write:s}=await Qh(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 Ri(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 eg(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 Ui(t),d=await Gi(s,c,o.ref,u,!0,l||void 0);if(d&&r.sha===d&&await tg(e,n,r))return{...o,to:d,outcome:`current`,changes:[]};let f=await ng(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 $h(e,`${Ai}/${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 sg(e,{changes:h,writes:g,removals:_}),await Ki(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 tg(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 ng(e,t,n,r,i,a,o){let s=await Bi(e,t,a,i??`main`);if(s.status===`ok`){let i=Fi(s.files),a=n||rg(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:og(i,a),path:a}}try{return{files:ag(ig(await zi(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 rg(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 ig(e){return new Map([...e].filter(([e])=>Ii(e)))}function ag(e){return new Map([...e].sort(([e],[t])=>e.localeCompare(t)))}function og(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);Ii(e)&&r.set(e,i)}return ag(r)}async function sg(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 cg(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 zh(o,s,t);if(!c.ok)return{...a,outcome:`error`,error:c.error};let l=`${Ai}/${n}/SKILL.md`,u=await Zh(e,l),d=new TextEncoder().encode(c.content),f=u!==void 0&&Lh(new TextDecoder().decode(u))===Lh(c.content);if(Xh(u,d)||f)return{...a,changes:[{path:`SKILL.md`,status:`unchanged`}]};let p=u?`updated`:`added`;return i||(await e.mkdir(`${Ai}/${n}`,{recursive:!0}),await e.writeFile(l,d),await Ki(e,n,{...r,files:[`SKILL.md`]})),{...a,outcome:`updated`,changes:[{path:`SKILL.md`,status:p}]}}function lg(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 ug(e,t,n,r){let i=Zi(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 dg(e,t,n){if(t.length===0){let t=await Wi(e);return{targets:t.provenanced,missing:[],skipped:t.unattributed}}let r=[],i=[];for(let a of t){let t=await qi(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?ug(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 fg(e){return e.reason===`not-installed`?`upskill: no skill named "${e.name}" is installed — check \`upskill list\`
294
+ `,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 qh=[{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=>Qi(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 Jh(e){let t={skills:[],dryRun:!1,json:!1};for(let n=0;n<e.length;n++){let r=e[n],i=qh.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 Yh(e,t){return!e||!t||e.byteLength!==t.byteLength?!1:e.every((e,n)=>e===t[n])}async function Xh(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 Zh(e,t,n,r){let i=await Xh(e,t);return Ri(n)?i?{status:`kept-local`,write:!1}:{status:`added`,write:!0}:i?Yh(i,r)?{status:`unchanged`,write:!1}:{status:`updated`,write:!0}:{status:`added`,write:!0}}async function Qh(e,t,n,r){let i={changes:[],writes:[],removals:[]};for(let[r,a]of n){let n=`${t}/${r}`,{status:o,write:s}=await Zh(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 zi(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 $h(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 Wi(t),d=await Ki(s,c,o.ref,u,!0,l||void 0);if(d&&r.sha===d&&await eg(e,n,r))return{...o,to:d,outcome:`current`,changes:[]};let f=await tg(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 Qh(e,`${ji}/${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 og(e,{changes:h,writes:g,removals:_}),await qi(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 eg(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 tg(e,t,n,r,i,a,o){let s=await Vi(e,t,a,i??`main`);if(s.status===`ok`){let i=Ii(s.files),a=n||ng(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:ag(i,a),path:a}}try{return{files:ig(rg(await Bi(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 ng(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 rg(e){return new Map([...e].filter(([e])=>Li(e)))}function ig(e){return new Map([...e].sort(([e],[t])=>e.localeCompare(t)))}function ag(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);Li(e)&&r.set(e,i)}return ig(r)}async function og(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 sg(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 Rh(o,s,t);if(!c.ok)return{...a,outcome:`error`,error:c.error};let l=`${ji}/${n}/SKILL.md`,u=await Xh(e,l),d=new TextEncoder().encode(c.content),f=u!==void 0&&Ih(new TextDecoder().decode(u))===Ih(c.content);if(Yh(u,d)||f)return{...a,changes:[{path:`SKILL.md`,status:`unchanged`}]};let p=u?`updated`:`added`;return i||(await e.mkdir(`${ji}/${n}`,{recursive:!0}),await e.writeFile(l,d),await qi(e,n,{...r,files:[`SKILL.md`]})),{...a,outcome:`updated`,changes:[{path:`SKILL.md`,status:p}]}}function cg(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 lg(e,t,n,r){let i=Qi(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 ug(e,t,n){if(t.length===0){let t=await Gi(e);return{targets:t.provenanced,missing:[],skipped:t.unattributed}}let r=[],i=[];for(let a of t){let t=await Ji(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?lg(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 dg(e){return e.reason===`not-installed`?`upskill: no skill named "${e.name}" is installed — check \`upskill list\`
295
295
  `:`upskill: no install provenance for "${e.name}" — re-run with --from <owner>/<repo> (optionally --path <dir>) to record its source, or reinstall it once
296
- `}function pg(e,t){return`${e} ${t}${e===1?``:`s`}`}function mg(e){return`\nSkipped ${pg(e.length,`skill`)} with no install provenance — not checked:\n ${e.join(`, `)}\n Runtime-bundled skills have no record by design; \`upgrade apply\` keeps those current.
296
+ `}function fg(e,t){return`${e} ${t}${e===1?``:`s`}`}function pg(e){return`\nSkipped ${fg(e.length,`skill`)} with no install provenance — not checked:\n ${e.join(`, `)}\n Runtime-bundled skills have no record by design; \`upgrade apply\` keeps those current.
297
297
  For the rest, record a source once with \`upskill update <skill> --from <owner>/<repo> --dry-run\`,
298
298
  after which a bare \`upskill update\` sweeps them too.
299
- `}function hg(e,t,n,r,i){let a=t?`Skill update (dry run — nothing written):
299
+ `}function mg(e,t,n,r,i){let a=t?`Skill update (dry run — nothing written):
300
300
  `:`Skill update:
301
- `;for(let n of e)a+=lg(n,t);if(i.length>0&&(a+=mg(i)),!n&&r&&e.length>0){let n=i.length>0?`all ${pg(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 gg(e,t,n){let{targets:r,missing:i,skipped:a}=await dg(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 cg(e,t,i.name,i.provenance,n.dryRun):await eg(e,t,i.name,i.provenance,n.branch,n.dryRun));return{results:o,skipped:a,missing:i}}async function _g(e,t,n){let r=Yh(e);if(r.error)return{stdout:``,stderr:`${r.error}\n`,exitCode:1};let{results:i,missing:a,skipped:o}=await gg(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`:hg([],r.dryRun,!1,!0,o),stderr:``,exitCode:0}:{stdout:``,stderr:a.length?a.map(fg).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 Xi();let l=a.map(fg).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:hg(i,r.dryRun,c,u,o),stderr:l,exitCode:+!u}}function vg(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 yg(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 bg(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}${yg(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(`
302
- `)}\n`}async function xg(e,t,n){let r=await(await import(`./kernel-worker-Dd6UT_Hw.js`).then(e=>e.r)).discoverSkills(e),{collisions:i}=await br(e,_r(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${Vh()}`,stderr:``,exitCode:0}:{...xr(`upskill`,Uh(r,`Discoverable local skills`),i,{builtinNames:new Set(ft())}),exitCode:0}}async function Sg(e,t,n){let{results:r,skipped:i}=await gg(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:bg(r,i),stderr:c,exitCode:+!s}}async function Cg(e,t,n,r){let i=vg(e);return i.error?{stdout:``,stderr:`${i.error}\n`,exitCode:1}:i.outdated?Sg(t,n,i.json):xg(t,i.json,r)}async function wg(e,t){let n=`${ji}/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(Hi(e,n))}if(r.status!==200)throw Error(`Tessl returned HTTP ${r.status}`);let i=ke(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=Yi(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 Tg(e,t){let n=`${ji}/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: ${Hi(e,n)}`}}if(r.status!==200)return{error:`Tessl search failed (HTTP ${r.status})`};let i=ke(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=Yi(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 Eg=[{label:`Tessl`,host:new URL(ji).host,fetch:wg},{label:`browse.sh`,host:new URL(Pi).host,fetch:jh}];function Dg(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 Og(e,t,n=1){let r=await Promise.allSettled(Eg.map(n=>n.fetch(e,t))),i=r.map(e=>e.status===`fulfilled`?e.value:[]),a=r.every(e=>e.status===`rejected`),o=Dg(i),s=``;for(let e=0;e<r.length;e++){let t=r[e];if(t.status===`rejected`){let n=Eg[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+=`
301
+ `;for(let n of e)a+=cg(n,t);if(i.length>0&&(a+=pg(i)),!n&&r&&e.length>0){let n=i.length>0?`all ${fg(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 hg(e,t,n){let{targets:r,missing:i,skipped:a}=await ug(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 sg(e,t,i.name,i.provenance,n.dryRun):await $h(e,t,i.name,i.provenance,n.branch,n.dryRun));return{results:o,skipped:a,missing:i}}async function gg(e,t,n){let r=Jh(e);if(r.error)return{stdout:``,stderr:`${r.error}\n`,exitCode:1};let{results:i,missing:a,skipped:o}=await hg(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`:mg([],r.dryRun,!1,!0,o),stderr:``,exitCode:0}:{stdout:``,stderr:a.length?a.map(dg).join(``):"upskill: no skill has install provenance yet — reinstall a skill, or run `upskill update <skill> --from <owner>/<repo>`, to record its source\n",exitCode:1};let s=i.filter(e=>e.outcome===`error`),c=i.some(e=>e.outcome===`updated`);c&&!r.dryRun&&await Zi();let l=a.map(dg).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:mg(i,r.dryRun,c,u,o),stderr:l,exitCode:+!u}}function _g(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 vg(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 yg(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}${vg(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(`
302
+ `)}\n`}async function bg(e,t,n){let r=await(await import(`./kernel-worker-bxQFQR0N.js`).then(e=>e.r)).discoverSkills(e),{collisions:i}=await xr(e,vr(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${Bh()}`,stderr:``,exitCode:0}:{...Sr(`upskill`,Hh(r,`Discoverable local skills`),i,{builtinNames:new Set(pt())}),exitCode:0}}async function xg(e,t,n){let{results:r,skipped:i}=await hg(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:yg(r,i),stderr:c,exitCode:+!s}}async function Sg(e,t,n,r){let i=_g(e);return i.error?{stdout:``,stderr:`${i.error}\n`,exitCode:1}:i.outdated?xg(t,n,i.json):bg(t,i.json,r)}async function Cg(e,t){let n=`${Mi}/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(Ui(e,n))}if(r.status!==200)throw Error(`Tessl returned HTTP ${r.status}`);let i=ke(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=Xi(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 wg(e,t){let n=`${Mi}/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: ${Ui(e,n)}`}}if(r.status!==200)return{error:`Tessl search failed (HTTP ${r.status})`};let i=ke(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=Xi(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 Tg=[{label:`Tessl`,host:new URL(Mi).host,fetch:Cg},{label:`browse.sh`,host:new URL(Fi).host,fetch:Ah}];function Eg(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 Dg(e,t,n=1){let r=await Promise.allSettled(Tg.map(n=>n.fetch(e,t))),i=r.map(e=>e.status===`fulfilled`?e.value:[]),a=r.every(e=>e.status===`rejected`),o=Eg(i),s=``;for(let e=0;e<r.length;e++){let t=r[e];if(t.status===`rejected`){let n=Tg[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+=`
303
303
  `}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:
304
304
  `,p+=` From Tessl: upskill <owner/repo> --skill <name>
305
305
  `,p+=` From browse.sh: upskill browse:<hostname>/<task>
306
- `,{stdout:p,stderr:``,exitCode:0}}function kg(e,t,n){let r=`upskill ${e}`;return t&&(r+=` --branch ${t}`),n&&(r+=` --path ${n}`),r}async function Ag(e,t){let n=[],r;try{r=await t(e,{method:`GET`})}catch(t){return n.push({rel:c,href:e,error:t instanceof Error?t.message:String(t)}),{links:[],failures:n}}let i=[];for(let[e,t]of Object.entries(r.headers||{}))e.toLowerCase()===`link`&&typeof t==`string`&&t.length>0&&i.push(t);if(i.length===0)return{links:[],failures:n};let o=s(i,e),l=[];for(let e of o){if(!e.rel.includes(c))continue;let t=a([e]);t?.verb===`upskill`&&l.push({target:t.target,branch:t.branch,path:t.path,instruction:t.instruction,installHint:kg(t.target,t.branch,t.path)})}return{links:l,failures:n}}function jg(e,t,n){if(!e||t.length===0)return[];let r=[];for(let i of t){if(!i.hostname||Dh(i.hostname)!==e)continue;let t=i.name||i.task.replace(/-[A-Za-z0-9]{4,8}$/,``)||i.task,a=`browse-${i.hostname}-${t}`;r.push({slug:i.slug,hostname:i.hostname,task:i.task,title:i.title||i.name||i.task,description:i.description,installed:n.has(a),installHint:`upskill browse:${i.hostname}/${i.task}`})}return r}function Mg(e){let t=e.active?` [active]`:``,n=`${e.title||`(untitled)`}${t}\n`;if(n+=` ${e.url}\n`,e.origin.length>0){n+=` Origin-advertised:
306
+ `,{stdout:p,stderr:``,exitCode:0}}function Og(e,t,n){let r=`upskill ${e}`;return t&&(r+=` --branch ${t}`),n&&(r+=` --path ${n}`),r}async function kg(e,t){let n=[],r;try{r=await t(e,{method:`GET`})}catch(t){return n.push({rel:c,href:e,error:t instanceof Error?t.message:String(t)}),{links:[],failures:n}}let i=[];for(let[e,t]of Object.entries(r.headers||{}))e.toLowerCase()===`link`&&typeof t==`string`&&t.length>0&&i.push(t);if(i.length===0)return{links:[],failures:n};let o=s(i,e),l=[];for(let e of o){if(!e.rel.includes(c))continue;let t=a([e]);t?.verb===`upskill`&&l.push({target:t.target,branch:t.branch,path:t.path,instruction:t.instruction,installHint:Og(t.target,t.branch,t.path)})}return{links:l,failures:n}}function Ag(e,t,n){if(!e||t.length===0)return[];let r=[];for(let i of t){if(!i.hostname||Eh(i.hostname)!==e)continue;let t=i.name||i.task.replace(/-[A-Za-z0-9]{4,8}$/,``)||i.task,a=`browse-${i.hostname}-${t}`;r.push({slug:i.slug,hostname:i.hostname,task:i.task,title:i.title||i.name||i.task,description:i.description,installed:n.has(a),installHint:`upskill browse:${i.hostname}/${i.task}`})}return r}function jg(e){let t=e.active?` [active]`:``,n=`${e.title||`(untitled)`}${t}\n`;if(n+=` ${e.url}\n`,e.origin.length>0){n+=` Origin-advertised:
307
307
  `;for(let t of e.origin)n+=` ${t.installHint}`,t.instruction&&(n+=` # ${t.instruction}`),n+=`
308
308
  `}if(e.catalog.length>0){n+=` Browse.sh catalog:
309
309
  `;for(let t of e.catalog){let e=t.installed?`✓`:` `;n+=` ${e} ${t.title.padEnd(40)} ${t.installHint}\n`}}e.origin.length===0&&e.catalog.length===0&&!e.failures.length&&(n+=` No skill suggestions for this tab.
310
310
  `);for(let t of e.failures)n+=` (discovery failed: ${t.error})\n`;return n+=`
311
- `,n}async function Ng(e,t,n,r){if(!n)return{stdout:``,stderr:`upskill: browser APIs unavailable in this environment
311
+ `,n}async function Mg(e,t,n,r){if(!n)return{stdout:``,stderr:`upskill: browser APIs unavailable in this environment
312
312
  `,exitCode:1};let i;try{i=await n.listPages()}catch{try{i=await n.listAllTargets()}catch(e){return{stdout:``,stderr:`upskill: failed to list browser tabs: ${e instanceof Error?e.message:String(e)}\n`,exitCode:1}}}if(i.length===0)return r?{stdout:JSON.stringify({tabs:[]},null,2)+`
313
313
  `,stderr:``,exitCode:0}:{stdout:`No open browser tabs.
314
- `,stderr:``,exitCode:0};let a=[],o=``;try{a=await Ah(t)}catch(e){o=`upskill: warning: browse.sh catalog unavailable: ${e instanceof Error?e.message:String(e)}\n`}let s=await mh(e),c=[];for(let e of i){let n=``;try{n=new URL(e.url).hostname}catch{}let r=n?Dh(n):``,i=[],o=[];if(n&&/^https?:/i.test(e.url)){let n=await Ag(e.url,t);i=n.links,o=n.failures}let l=jg(r,a,s);c.push({targetId:e.targetId,title:e.title,url:e.url,hostname:r,active:e.active,origin:i,catalog:l,failures:o})}if(r)return{stdout:JSON.stringify({tabs:c},null,2)+`
315
- `,stderr:o,exitCode:0};let l=``;for(let e of c)l+=Mg(e);return{stdout:l,stderr:o,exitCode:0}}async function Pg(e,t,n){if(n){let n=await Eh(e,t);return n.skipped===`no-profile`?{stdout:``,stderr:`upskill: no user profile found. Complete the welcome onboarding first, or create /home/<name>/.welcome.json manually.
314
+ `,stderr:``,exitCode:0};let a=[],o=``;try{a=await kh(t)}catch(e){o=`upskill: warning: browse.sh catalog unavailable: ${e instanceof Error?e.message:String(e)}\n`}let s=await ph(e),c=[];for(let e of i){let n=``;try{n=new URL(e.url).hostname}catch{}let r=n?Eh(n):``,i=[],o=[];if(n&&/^https?:/i.test(e.url)){let n=await kg(e.url,t);i=n.links,o=n.failures}let l=Ag(r,a,s);c.push({targetId:e.targetId,title:e.title,url:e.url,hostname:r,active:e.active,origin:i,catalog:l,failures:o})}if(r)return{stdout:JSON.stringify({tabs:c},null,2)+`
315
+ `,stderr:o,exitCode:0};let l=``;for(let e of c)l+=jg(e);return{stdout:l,stderr:o,exitCode:0}}async function Ng(e,t,n){if(n){let n=await Th(e,t);return n.skipped===`no-profile`?{stdout:``,stderr:`upskill: no user profile found. Complete the welcome onboarding first, or create /home/<name>/.welcome.json manually.
316
316
  `,exitCode:1}:n.skipped===`catalog-fetch`?{stdout:``,stderr:n.errors.map(e=>`${e}\n`).join(``),exitCode:1}:n.skipped===`all-installed`?{stdout:`No new skill recommendations — all matching skills are already installed.
317
317
  `,stderr:``,exitCode:0}:{stdout:n.log,stderr:n.errors.map(e=>`${e}\n`).join(``),exitCode:+(n.errors.length>0)}}let r=null;try{let t=await e.readDir(`/home`);for(let n of t)try{let t=await e.readTextFile(`/home/${n.name}/.welcome.json`);r=JSON.parse(t);break}catch{}}catch{}if(!r)return{stdout:``,stderr:`upskill: no user profile found. Complete the welcome onboarding first, or create /home/<name>/.welcome.json manually.
318
- `,exitCode:1};let i,a;try{let[n,o,s]=await Promise.all([(async()=>{let e=await t(Ni,{headers:{Accept:`application/json`}});if(e.status!==200)throw Error(`HTTP ${e.status}`);return uh(ke(e.body).data)})(),vh(t,r.company),mh(e)]);i=_h(n,o),a=s}catch(e){return{stdout:``,stderr:`upskill: failed to fetch skill catalog from ${Ni}: ${e instanceof Error?e.message:String(e)}\n`,exitCode:1}}let o=fh(i,r).filter(e=>!a.has(e.entry.name));if(o.length===0)return{stdout:`No new skill recommendations — all matching skills are already installed.
318
+ `,exitCode:1};let i,a;try{let[n,o,s]=await Promise.all([(async()=>{let e=await t(Pi,{headers:{Accept:`application/json`}});if(e.status!==200)throw Error(`HTTP ${e.status}`);return lh(ke(e.body).data)})(),_h(t,r.company),ph(e)]);i=gh(n,o),a=s}catch(e){return{stdout:``,stderr:`upskill: failed to fetch skill catalog from ${Pi}: ${e instanceof Error?e.message:String(e)}\n`,exitCode:1}}let o=dh(i,r).filter(e=>!a.has(e.entry.name));if(o.length===0)return{stdout:`No new skill recommendations — all matching skills are already installed.
319
319
  `,stderr:``,exitCode:0};let s=`Recommended skills for you:
320
320
 
321
- `,c=0;for(let e of o){c++;let t=ph(e.entry.source);s+=` ${c}. ${e.entry.displayName.padEnd(35)} score: ${Math.round(e.score)}\n`,s+=` ${e.entry.description}\n`,s+=` Match: ${e.matchReasons.join(`, `)}\n`,s+=` Install: ${t}\n\n`}return s+=`To install all recommended: upskill recommendations --install
322
- `,{stdout:s,stderr:``,exitCode:0}}function Fg(e){return!e||e.startsWith(`-`)?{stdout:``,stderr:`upskill: --branch requires a value
321
+ `,c=0;for(let e of o){c++;let t=fh(e.entry.source);s+=` ${c}. ${e.entry.displayName.padEnd(35)} score: ${Math.round(e.score)}\n`,s+=` ${e.entry.description}\n`,s+=` Match: ${e.matchReasons.join(`, `)}\n`,s+=` Install: ${t}\n\n`}return s+=`To install all recommended: upskill recommendations --install
322
+ `,{stdout:s,stderr:``,exitCode:0}}function Pg(e){return!e||e.startsWith(`-`)?{stdout:``,stderr:`upskill: --branch requires a value
323
323
  `,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
324
- `,exitCode:1}}function Ig(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
325
- `,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=Fg(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 Lg(e,t,n){if(!t)return{stdout:``,stderr:`upskill: ${e} requires a skill name\n`,exitCode:1};let r=await import(`./kernel-worker-Dd6UT_Hw.js`).then(e=>e.r);if(e===`info`){let e=await r.getSkillInfo(n,t);if(!e)return{stdout:``,stderr:`upskill: skill "${t}" not found\n`,exitCode:1};let i=await qi(n,t),a=i?Ji(i):"Installed from: (no provenance recorded — reinstall to enable `upskill update`)\n";return{stdout:Wh(e)+a,stderr:``,exitCode:0}}let i=await r.readSkillInstructions(n,t);return i===null?{stdout:``,stderr:`upskill: no SKILL.md found for "${t}"\n`,exitCode:1}:{stdout:i+`
326
- `,stderr:``,exitCode:0}}async function Rg(e,t,n,r,i,a,o,s){let c=``,l=``,u=0,d=e.length;for(let f=0;f<e.length;f++){let p=e[f],m=await $i(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 zg(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 Qi(t,n,p.path,p.name,i,r,a,void 0,o),h=f+1,g=((Date.now()-s)/1e3).toFixed(1),_=(Date.now()-s)/h,v=h<d?` (~${Math.round((d-h)*_/1e3)}s remaining)`:``;m.exitCode===0?(c+=`[${h}/${d}] Installed "${p.name}" from ${t}/${n} (${g}s)${v}\n`,u++):(c+=`[${h}/${d}] Failed "${p.name}": ${m.stderr.trim()}${v}\n`,l+=m.stderr)}return{output:c,errors:l,successCount:u}}async function Bg(e,t,n,r,i,a,o,s){let c=``,l=``,u=0;for(let d of e){let e=await Qi(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 Vg(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 Hg(e,t,n,r){let{owner:i,repo:a}=e,o=t.branch??e.branch,s=t.subPath??e.path,c=await Ui(r),l=await ea(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:Vg(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:Vg(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 Bi(i,a,r,o);if(e.status===`ok`){let r=await Gi(i,a,o,c,!0,s),l=await Rg(u,i,a,Fi(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 zg(u,i,a,c,n,t.force,o,f);({output:p,errors:m,successCount:h}=e)}}else({output:p,errors:m,successCount:h}=await Bg(u,i,a,c,n,t.force,r,o));let g=((Date.now()-f)/1e3).toFixed(1);return h>0&&(p+=`\nInstalled ${h} skill(s)${d>1?` in ${g}s`:``}\n`,await Xi()),{stdout:p,stderr:m,exitCode:+!!m}}async function Ug(e,t,n,r,i){switch(e[0]){case`tabs`:return Ng(t,n,r,e.includes(`--json`));case`recommendations`:return Pg(t,n,e.includes(`--install`));case`update`:case`upgrade`:return _g(e.slice(1),t,n);case`list`:return Cg(e.slice(1),t,n,i);case`info`:case`read`:return Lg(e[0],e[1],t);case`search`:return Gg(e,n);default:return null}}function Wg(e,t,n){return C(`upskill`,async(r,i)=>{if(r.length===0||r.includes(`--help`)||r.includes(`-h`))return Gh();let a=await Ug(r,e,t,n,i.env.get(`PATH`));if(a)return a;let o=Ig(r);if(o.earlyReturn)return o.earlyReturn;if(!o.sourceRef)return Gh();if(o.sourceRef.startsWith(`tessl:`))return Kg(o.sourceRef,o.force,e,t);let s=Ph(o.sourceRef);if(s)return Bh(s.hostname,s.task,e,t,o.force);let c=Zi(o.sourceRef);return c?Hg(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 Gg(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?Og(a,t,i):Gh()}async function Kg(e,t,n,r){let i=e.slice(6);if(!i)return{stdout:``,stderr:`upskill: tessl: requires a skill name
327
- `,exitCode:1};let a=await Tg(i,r);if(`error`in a)return{stdout:``,stderr:`upskill: ${a.error}\n`,exitCode:1};let o=await Ui(r);return Qi(a.owner,a.repo,a.skillPath,a.skillName,n,o,t,r)}function qg(){return{stdout:`usage: afplay [-v volume] [-r rate] <file>
324
+ `,exitCode:1}}function Fg(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
325
+ `,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=Pg(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 Ig(e,t,n){if(!t)return{stdout:``,stderr:`upskill: ${e} requires a skill name\n`,exitCode:1};let r=await import(`./kernel-worker-bxQFQR0N.js`).then(e=>e.r);if(e===`info`){let e=await r.getSkillInfo(n,t);if(!e)return{stdout:``,stderr:`upskill: skill "${t}" not found\n`,exitCode:1};let i=await Ji(n,t),a=i?Yi(i):"Installed from: (no provenance recorded — reinstall to enable `upskill update`)\n";return{stdout:Uh(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+`
326
+ `,stderr:``,exitCode:0}}async function Lg(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 ea(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 Rg(e,t,n,r,i,a,o,s){let c=``,l=``,u=0,d=e.length;for(let f=0;f<e.length;f++){let p=e[f],m=await $i(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 zg(e,t,n,r,i,a,o,s){let c=``,l=``,u=0;for(let d of e){let e=await $i(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 Bg(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 Vg(e,t,n,r){let{owner:i,repo:a}=e,o=t.branch??e.branch,s=t.subPath??e.path,c=await Wi(r),l=await ta(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:Bg(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:Bg(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 Vi(i,a,r,o);if(e.status===`ok`){let r=await Ki(i,a,o,c,!0,s),l=await Lg(u,i,a,Ii(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 Rg(u,i,a,c,n,t.force,o,f);({output:p,errors:m,successCount:h}=e)}}else({output:p,errors:m,successCount:h}=await zg(u,i,a,c,n,t.force,r,o));let g=((Date.now()-f)/1e3).toFixed(1);return h>0&&(p+=`\nInstalled ${h} skill(s)${d>1?` in ${g}s`:``}\n`,await Zi()),{stdout:p,stderr:m,exitCode:+!!m}}async function Hg(e,t,n,r,i){switch(e[0]){case`tabs`:return Mg(t,n,r,e.includes(`--json`));case`recommendations`:return Ng(t,n,e.includes(`--install`));case`update`:case`upgrade`:return gg(e.slice(1),t,n);case`list`:return Sg(e.slice(1),t,n,i);case`info`:case`read`:return Ig(e[0],e[1],t);case`search`:return Wg(e,n);default:return null}}function Ug(e,t,n){return C(`upskill`,async(r,i)=>{if(r.length===0||r.includes(`--help`)||r.includes(`-h`))return Wh();let a=await Hg(r,e,t,n,i.env.get(`PATH`));if(a)return a;let o=Fg(r);if(o.earlyReturn)return o.earlyReturn;if(!o.sourceRef)return Wh();if(o.sourceRef.startsWith(`tessl:`))return Gg(o.sourceRef,o.force,e,t);let s=Nh(o.sourceRef);if(s)return zh(s.hostname,s.task,e,t,o.force);let c=Qi(o.sourceRef);return c?Vg(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 Wg(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?Dg(a,t,i):Wh()}async function Gg(e,t,n,r){let i=e.slice(6);if(!i)return{stdout:``,stderr:`upskill: tessl: requires a skill name
327
+ `,exitCode:1};let a=await wg(i,r);if(`error`in a)return{stdout:``,stderr:`upskill: ${a.error}\n`,exitCode:1};let o=await Wi(r);return $i(a.owner,a.repo,a.skillPath,a.skillName,n,o,t,r)}function Kg(){return{stdout:`usage: afplay [-v volume] [-r rate] <file>
328
328
 
329
329
  Plays an audio file using the Web Audio API.
330
330
  -v volume Volume level (0 to 1, default 1)
331
331
  -r rate Playback rate (0.25 to 4, default 1)
332
- `,stderr:``,exitCode:0}}function Jg(e){return{stdout:``,stderr:`afplay: ${e}\n`,exitCode:1}}function Yg(e){return e instanceof Error?e.message:String(e)}const Xg={"-v":`a volume value`,"-r":`a rate value`};function Zg(e){let t=Number.parseFloat(e);return Number.isNaN(t)||t<0||t>1?`volume must be between 0 and 1`:null}function Qg(e){let t=Number.parseFloat(e);return Number.isNaN(t)||t<.25||t>4?`rate must be between 0.25 and 4`:null}function $g(e,t,n){switch(t){case`-v`:return Zg(n)||(e.volume=Number.parseFloat(n),null);case`-r`:return Qg(n)||(e.rate=Number.parseFloat(n),null);default:return`unknown option: ${t}`}}function e_(e){let t={volume:1,rate:1,filePath:null};for(let n=0;n<e.length;n++){let r=e[n];if(Object.hasOwn(Xg,r)){let i=n+1<e.length&&!e[n+1].startsWith(`-`)?e[++n]:null;if(i==null)return Jg(`${r} requires ${Xg[r]}`);let a=$g(t,r,i);if(a)return Jg(a);continue}if(r.startsWith(`-`))return Jg(`unknown option: ${r}`);if(t.filePath!==null)return Jg(`only one file can be specified`);t.filePath=r}return t}let t_=null;function n_(){return(!t_||t_.state===`closed`)&&(t_=new AudioContext),t_}function r_(e){let t=new ArrayBuffer(e.byteLength);return new Uint8Array(t).set(e),t}async function i_(e,t){let n=t.fs.resolvePath(t.cwd,e);try{return{bytes:new Uint8Array(await t.fs.readFileBuffer(n)),fullPath:n}}catch{return Jg(`cannot open ${e}: No such file`)}}function a_(e,t){return Cr(e).startsWith(`audio/`)?null:Jg(`${t} is not an audio file`)}async function o_(e,t,n,r,i){try{let n=Cr(t);return await i.call(`play-audio`,{bytes:r_(e),mimeType:n,volume:r},{timeoutMs:3e5}),{stdout:``,stderr:``,exitCode:0}}catch(e){return Jg(`failed to play ${n}: ${Yg(e)}`)}}async function s_(e,t,n,r){try{let t=n_();t.state===`suspended`&&await t.resume();let i=await t.decodeAudioData(r_(e)),a=t.createBufferSource();a.buffer=i,a.playbackRate.value=r;let o=t.createGain();return o.gain.value=n,a.connect(o),o.connect(t.destination),new Promise(e=>{a.onended=()=>{e({stdout:``,stderr:``,exitCode:0})},a.start()})}catch(e){return Jg(`failed to play ${t}: ${Yg(e)}`)}}async function c_(e,t,n,r){let i=be()&&typeof AudioContext<`u`,a=b();if(!i&&!a)return Jg(`Web Audio API unavailable in this environment`);let o=await i_(e,r);return`exitCode`in o?o:a_(o.fullPath,e)||(i?s_(o.bytes,e,t,n):o_(o.bytes,o.fullPath,e,t,a))}function l_(){return C(`afplay`,async(e,t)=>{if(e.length===0||e.includes(`--help`)||e.includes(`-h`))return qg();let n=e_(e);return`exitCode`in n?n:n.filePath?c_(n.filePath,n.volume,n.rate,t):qg()})}function u_(){return C(`chime`,async(e,t)=>e.includes(`--help`)||e.includes(`-h`)?{stdout:`usage: chime
332
+ `,stderr:``,exitCode:0}}function qg(e){return{stdout:``,stderr:`afplay: ${e}\n`,exitCode:1}}function Jg(e){return e instanceof Error?e.message:String(e)}const Yg={"-v":`a volume value`,"-r":`a rate value`};function Xg(e){let t=Number.parseFloat(e);return Number.isNaN(t)||t<0||t>1?`volume must be between 0 and 1`:null}function Zg(e){let t=Number.parseFloat(e);return Number.isNaN(t)||t<.25||t>4?`rate must be between 0.25 and 4`:null}function Qg(e,t,n){switch(t){case`-v`:return Xg(n)||(e.volume=Number.parseFloat(n),null);case`-r`:return Zg(n)||(e.rate=Number.parseFloat(n),null);default:return`unknown option: ${t}`}}function $g(e){let t={volume:1,rate:1,filePath:null};for(let n=0;n<e.length;n++){let r=e[n];if(Object.hasOwn(Yg,r)){let i=n+1<e.length&&!e[n+1].startsWith(`-`)?e[++n]:null;if(i==null)return qg(`${r} requires ${Yg[r]}`);let a=Qg(t,r,i);if(a)return qg(a);continue}if(r.startsWith(`-`))return qg(`unknown option: ${r}`);if(t.filePath!==null)return qg(`only one file can be specified`);t.filePath=r}return t}let e_=null;function t_(){return(!e_||e_.state===`closed`)&&(e_=new AudioContext),e_}function n_(e){let t=new ArrayBuffer(e.byteLength);return new Uint8Array(t).set(e),t}async function r_(e,t){let n=t.fs.resolvePath(t.cwd,e);try{return{bytes:new Uint8Array(await t.fs.readFileBuffer(n)),fullPath:n}}catch{return qg(`cannot open ${e}: No such file`)}}function i_(e,t){return wr(e).startsWith(`audio/`)?null:qg(`${t} is not an audio file`)}async function a_(e,t,n,r,i){try{let n=wr(t);return await i.call(`play-audio`,{bytes:n_(e),mimeType:n,volume:r},{timeoutMs:3e5}),{stdout:``,stderr:``,exitCode:0}}catch(e){return qg(`failed to play ${n}: ${Jg(e)}`)}}async function o_(e,t,n,r){try{let t=t_();t.state===`suspended`&&await t.resume();let i=await t.decodeAudioData(n_(e)),a=t.createBufferSource();a.buffer=i,a.playbackRate.value=r;let o=t.createGain();return o.gain.value=n,a.connect(o),o.connect(t.destination),new Promise(e=>{a.onended=()=>{e({stdout:``,stderr:``,exitCode:0})},a.start()})}catch(e){return qg(`failed to play ${t}: ${Jg(e)}`)}}async function s_(e,t,n,r){let i=be()&&typeof AudioContext<`u`,a=b();if(!i&&!a)return qg(`Web Audio API unavailable in this environment`);let o=await r_(e,r);return`exitCode`in o?o:i_(o.fullPath,e)||(i?o_(o.bytes,e,t,n):a_(o.bytes,o.fullPath,e,t,a))}function c_(){return C(`afplay`,async(e,t)=>{if(e.length===0||e.includes(`--help`)||e.includes(`-h`))return Kg();let n=$g(e);return`exitCode`in n?n:n.filePath?s_(n.filePath,n.volume,n.rate,t):Kg()})}function l_(){return C(`chime`,async(e,t)=>e.includes(`--help`)||e.includes(`-h`)?{stdout:`usage: chime
333
333
 
334
334
  Plays a notification chime sound.
335
335
  Alias for: afplay /shared/sounds/chime.mp3
336
- `,stderr:``,exitCode:0}:c_(`/shared/sounds/chime.mp3`,1,1,t))}function d_(e={}){return C(`agent`,async(t,n)=>{let{executeAgentCommand:r}=await import(`./agent-command-impl-BQZK9ujN.js`);return r(t,n,e)})}const f_=[`bg`,`caller`,`disown`,`enable`,`fc`,`fg`,`jobs`,`logout`,`suspend`,`times`,`trap`,`ulimit`];function p_(){return f_.map(e=>C(e,async(t,n)=>{let{runBashBuiltin:r}=await import(`./run-DnxVNWPE.js`);return r(e,t,n)}))}function m_(e,t){e.escaped?e.escaped=!1:t===`\\`?e.escaped=!0:t===`"`&&(e.inString=!1)}function h_(e,t){let n=t+2;for(;n<e.length&&e[n]!==`
337
- `&&e[n]!==`\r`;)n++;return{text:` `.repeat(n-t),end:n-1}}function g_(e,t){let n=` `,r=t+2;for(;r<e.length&&(e[r]!==`*`||e[r+1]!==`/`);)n+=e[r]===`
338
- `||e[r]===`\r`?e[r]:` `,r++;return r<e.length&&(n+=` `,r++),{text:n,end:r}}function __(e){let t=``,n={inString:!1,escaped:!1};for(let r=0;r<e.length;r++){let i=e[r],a=e[r+1];if(n.inString){t+=i,m_(n,i);continue}if(i===`"`){n.inString=!0,t+=i;continue}if(i===`/`&&a===`/`){let n=h_(e,r);t+=n.text,r=n.end;continue}if(i===`/`&&a===`*`){let n=g_(e,r);t+=n.text,r=n.end;continue}t+=i}return t}function v_(e){let t=``,n=!1,r=!1;for(let i=0;i<e.length;i++){let a=e[i];if(n){t+=a,r?r=!1:a===`\\`?r=!0:a===`"`&&(n=!1);continue}if(a===`"`){n=!0,t+=a;continue}if(a===`,`){let t=i+1;for(;t<e.length&&/\s/.test(e[t]);)t++;if(e[t]===`}`||e[t]===`]`)continue}t+=a}return t}function y_(e){return typeof e==`object`&&!!e&&!Array.isArray(e)}function b_(e){let t=e.charCodeAt(0)===65279?e.slice(1):e,n=JSON.parse(v_(__(t)));if(!y_(n))throw Error(`configuration must contain a JSON object`);return n}function x_(e){if(typeof e==`string`)return e;if(typeof e!=`object`||!e||Array.isArray(e))return null;let t=e.path;return typeof t==`string`?t:null}function S_(e){let t=e.plugins;if(!Array.isArray(t))return null;for(let e of t){let t=x_(e);if(t!==null)return t}return null}async function C_(e,t){let n=x(t);for(;;){if(!n.split(`/`).includes(`node_modules`))for(let t of[`biome.json`,`biome.jsonc`]){let r=S(n,t);if(await e.exists(r))return r}if(n===`/`)return null;n=We(n).dir}}async function w_(e,t,n){let r;try{r=await e.readFile(t)}catch(e){return{ok:!1,error:`biome: failed to read configuration ${t}: ${e instanceof Error?e.message:String(e)}`,exitCode:n}}try{let e=b_(r),i=S_(e);return i===null?{ok:!0,resolved:{path:t,configuration:e}}:{ok:!1,error:`biome: unsupported configuration ${t}: path-based plugin ${JSON.stringify(i)} cannot be loaded by @biomejs/js-api@6.0.0`,exitCode:n}}catch(e){return{ok:!1,error:`biome: failed to parse configuration ${t}: ${e instanceof Error?e.message:String(e)}`,exitCode:n}}}async function T_(e,t,n,r){if(r!==null){let n=x(e.resolvePath(t,r));return await e.exists(n)?w_(e,n,2):{ok:!1,error:`biome: configuration file not found: ${n}`,exitCode:2}}let i=await C_(e,n);return i===null?{ok:!0,resolved:null}:w_(e,i,1)}const E_=new Set(`address.article.aside.blockquote.dd.div.dl.dt.fieldset.figcaption.figure.footer.form.h1.h2.h3.h4.h5.h6.header.hr.li.main.nav.ol.p.pre.section.table.tbody.td.tfoot.th.thead.tr.ul`.split(`.`)),D_={amp:`&`,apos:`'`,gt:`>`,lt:`<`,nbsp:` `,quot:`"`};function O_(e){let t=e.slice(1,-1);if(!t.startsWith(`#`))return D_[t.toLowerCase()]??e;let n=t[1]?.toLowerCase()===`x`,r=Number.parseInt(t.slice(n?2:1),n?16:10);return!Number.isFinite(r)||r<0||r>1114111||r>=55296&&r<=57343?e:String.fromCodePoint(r)}function k_(e){let t=``,n=0,r=!1;for(let i of e.matchAll(/<!--[\s\S]*?-->|<![^>]*>|<\/?[A-Za-z][^>]*>/g)){let a=e.slice(n,i.index);a&&(t+=a,r=!1);let o=i[0],s=/^<\/?\s*([A-Za-z0-9-]+)/.exec(o)?.[1]?.toLowerCase();s===`br`?(t+=`
339
- `,r=!1):s&&E_.has(s)&&t.length>0&&!t.endsWith(`
336
+ `,stderr:``,exitCode:0}:s_(`/shared/sounds/chime.mp3`,1,1,t))}function u_(e={}){return C(`agent`,async(t,n)=>{let{executeAgentCommand:r}=await import(`./agent-command-impl-BQZK9ujN.js`);return r(t,n,e)})}const d_=[`bg`,`caller`,`disown`,`enable`,`fc`,`fg`,`jobs`,`logout`,`suspend`,`times`,`trap`,`ulimit`];function f_(){return d_.map(e=>C(e,async(t,n)=>{let{runBashBuiltin:r}=await import(`./run-DnxVNWPE.js`);return r(e,t,n)}))}function p_(e,t){e.escaped?e.escaped=!1:t===`\\`?e.escaped=!0:t===`"`&&(e.inString=!1)}function m_(e,t){let n=t+2;for(;n<e.length&&e[n]!==`
337
+ `&&e[n]!==`\r`;)n++;return{text:` `.repeat(n-t),end:n-1}}function h_(e,t){let n=` `,r=t+2;for(;r<e.length&&(e[r]!==`*`||e[r+1]!==`/`);)n+=e[r]===`
338
+ `||e[r]===`\r`?e[r]:` `,r++;return r<e.length&&(n+=` `,r++),{text:n,end:r}}function g_(e){let t=``,n={inString:!1,escaped:!1};for(let r=0;r<e.length;r++){let i=e[r],a=e[r+1];if(n.inString){t+=i,p_(n,i);continue}if(i===`"`){n.inString=!0,t+=i;continue}if(i===`/`&&a===`/`){let n=m_(e,r);t+=n.text,r=n.end;continue}if(i===`/`&&a===`*`){let n=h_(e,r);t+=n.text,r=n.end;continue}t+=i}return t}function __(e){let t=``,n=!1,r=!1;for(let i=0;i<e.length;i++){let a=e[i];if(n){t+=a,r?r=!1:a===`\\`?r=!0:a===`"`&&(n=!1);continue}if(a===`"`){n=!0,t+=a;continue}if(a===`,`){let t=i+1;for(;t<e.length&&/\s/.test(e[t]);)t++;if(e[t]===`}`||e[t]===`]`)continue}t+=a}return t}function v_(e){return typeof e==`object`&&!!e&&!Array.isArray(e)}function y_(e){let t=e.charCodeAt(0)===65279?e.slice(1):e,n=JSON.parse(__(g_(t)));if(!v_(n))throw Error(`configuration must contain a JSON object`);return n}function b_(e){if(typeof e==`string`)return e;if(typeof e!=`object`||!e||Array.isArray(e))return null;let t=e.path;return typeof t==`string`?t:null}function x_(e){let t=e.plugins;if(!Array.isArray(t))return null;for(let e of t){let t=b_(e);if(t!==null)return t}return null}async function S_(e,t){let n=x(t);for(;;){if(!n.split(`/`).includes(`node_modules`))for(let t of[`biome.json`,`biome.jsonc`]){let r=S(n,t);if(await e.exists(r))return r}if(n===`/`)return null;n=Ge(n).dir}}async function C_(e,t,n){let r;try{r=await e.readFile(t)}catch(e){return{ok:!1,error:`biome: failed to read configuration ${t}: ${e instanceof Error?e.message:String(e)}`,exitCode:n}}try{let e=y_(r),i=x_(e);return i===null?{ok:!0,resolved:{path:t,configuration:e}}:{ok:!1,error:`biome: unsupported configuration ${t}: path-based plugin ${JSON.stringify(i)} cannot be loaded by @biomejs/js-api@6.0.0`,exitCode:n}}catch(e){return{ok:!1,error:`biome: failed to parse configuration ${t}: ${e instanceof Error?e.message:String(e)}`,exitCode:n}}}async function w_(e,t,n,r){if(r!==null){let n=x(e.resolvePath(t,r));return await e.exists(n)?C_(e,n,2):{ok:!1,error:`biome: configuration file not found: ${n}`,exitCode:2}}let i=await S_(e,n);return i===null?{ok:!0,resolved:null}:C_(e,i,1)}const T_=new Set(`address.article.aside.blockquote.dd.div.dl.dt.fieldset.figcaption.figure.footer.form.h1.h2.h3.h4.h5.h6.header.hr.li.main.nav.ol.p.pre.section.table.tbody.td.tfoot.th.thead.tr.ul`.split(`.`)),E_={amp:`&`,apos:`'`,gt:`>`,lt:`<`,nbsp:` `,quot:`"`};function D_(e){let t=e.slice(1,-1);if(!t.startsWith(`#`))return E_[t.toLowerCase()]??e;let n=t[1]?.toLowerCase()===`x`,r=Number.parseInt(t.slice(n?2:1),n?16:10);return!Number.isFinite(r)||r<0||r>1114111||r>=55296&&r<=57343?e:String.fromCodePoint(r)}function O_(e){let t=``,n=0,r=!1;for(let i of e.matchAll(/<!--[\s\S]*?-->|<![^>]*>|<\/?[A-Za-z][^>]*>/g)){let a=e.slice(n,i.index);a&&(t+=a,r=!1);let o=i[0],s=/^<\/?\s*([A-Za-z0-9-]+)/.exec(o)?.[1]?.toLowerCase();s===`br`?(t+=`
339
+ `,r=!1):s&&T_.has(s)&&t.length>0&&!t.endsWith(`
340
340
  `)&&(t+=`
341
- `,r=!0),n=(i.index??0)+o.length}let i=e.slice(n);return i&&(t+=i,r=!1),r&&(t=t.slice(0,-1)),t.replace(/&(?:amp|lt|gt|quot|apos|nbsp|#(?:[0-9]+|[xX][0-9A-Fa-f]+));/gi,O_)}const A_=new Set([`js`,`mjs`,`cjs`,`jsx`,`ts`,`mts`,`cts`,`tsx`,`json`,`jsonc`,`css`,`graphql`,`gql`,`html`,`svelte`,`vue`,`astro`,`jsh`,`bsh`]);function j_(e){let t=e.lastIndexOf(`.`);return t<0?!1:A_.has(e.slice(t+1).toLowerCase())}function M_(e){return e.endsWith(`.jsh`)||e.endsWith(`.bsh`)?`${e.slice(0,-4)}.js`:e}const N_=`async function __slicc() {
342
- `,P_=new TextEncoder().encode(N_).length;function F_(e){return e.endsWith(`.jsh`)||e.endsWith(`.bsh`)}function I_(e,t){let n=[e];for(;n.length>0;){let e=n.pop();if(!e||typeof e!=`object`)continue;if(Array.isArray(e)){for(let t of e)n.push(t);continue}let r=e,i=r.span;Array.isArray(i)&&i.length===2&&typeof i[0]==`number`&&typeof i[1]==`number`&&(r.span=[Math.max(0,i[0]-t),Math.max(0,i[1]-t)]),typeof r.sourceCode==`string`&&(r.sourceCode=null);for(let e of Object.keys(r))e!==`span`&&e!==`sourceCode`&&n.push(r[e])}}function L_(e){let t=(e.endsWith(`
341
+ `,r=!0),n=(i.index??0)+o.length}let i=e.slice(n);return i&&(t+=i,r=!1),r&&(t=t.slice(0,-1)),t.replace(/&(?:amp|lt|gt|quot|apos|nbsp|#(?:[0-9]+|[xX][0-9A-Fa-f]+));/gi,D_)}const k_=new Set([`js`,`mjs`,`cjs`,`jsx`,`ts`,`mts`,`cts`,`tsx`,`json`,`jsonc`,`css`,`graphql`,`gql`,`html`,`svelte`,`vue`,`astro`,`jsh`,`bsh`]);function A_(e){let t=e.lastIndexOf(`.`);return t<0?!1:k_.has(e.slice(t+1).toLowerCase())}function j_(e){return e.endsWith(`.jsh`)||e.endsWith(`.bsh`)?`${e.slice(0,-4)}.js`:e}const M_=`async function __slicc() {
342
+ `,N_=new TextEncoder().encode(M_).length;function P_(e){return e.endsWith(`.jsh`)||e.endsWith(`.bsh`)}function F_(e,t){let n=[e];for(;n.length>0;){let e=n.pop();if(!e||typeof e!=`object`)continue;if(Array.isArray(e)){for(let t of e)n.push(t);continue}let r=e,i=r.span;Array.isArray(i)&&i.length===2&&typeof i[0]==`number`&&typeof i[1]==`number`&&(r.span=[Math.max(0,i[0]-t),Math.max(0,i[1]-t)]),typeof r.sourceCode==`string`&&(r.sourceCode=null);for(let e of Object.keys(r))e!==`span`&&e!==`sourceCode`&&n.push(r[e])}}function I_(e){let t=(e.endsWith(`
343
343
  `)?e.slice(0,-1):e).split(`
344
344
  `);return t.shift(),t.pop(),t.map(e=>e.startsWith(` `)?e.slice(1):e).join(`
345
345
  `)+`
346
- `}function R_(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 z_=new Set([`check`,`lint`,`format`]);function B_(e,t,n){let r=e,i=(Array.isArray(r.message)?r.message.map(e=>e&&typeof e==`object`&&typeof e.content==`string`?e.content:``).join(``):``)||(typeof r.description==`string`?r.description:String(r.description??``)),a=r.location?.span,o=Array.isArray(a)&&typeof a[0]==`number`?a[0]:null;if(o===null)return{severity:typeof r.severity==`string`?r.severity:`unknown`,category:typeof r.category==`string`?r.category:`unknown`,message:i,filePath:t,line:null,column:null};let s=new TextEncoder().encode(n),c=new TextDecoder().decode(s.slice(0,Math.max(0,Math.min(o,s.length)))),l=1;for(let e of c)e===`
346
+ `}function L_(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 R_=new Set([`check`,`lint`,`format`]);function z_(e,t,n){let r=e,i=(Array.isArray(r.message)?r.message.map(e=>e&&typeof e==`object`&&typeof e.content==`string`?e.content:``).join(``):``)||(typeof r.description==`string`?r.description:String(r.description??``)),a=r.location?.span,o=Array.isArray(a)&&typeof a[0]==`number`?a[0]:null;if(o===null)return{severity:typeof r.severity==`string`?r.severity:`unknown`,category:typeof r.category==`string`?r.category:`unknown`,message:i,filePath:t,line:null,column:null};let s=new TextEncoder().encode(n),c=new TextDecoder().decode(s.slice(0,Math.max(0,Math.min(o,s.length)))),l=1;for(let e of c)e===`
347
347
  `&&l++;let u=c.lastIndexOf(`
348
- `),d=Array.from(c.slice(u+1)).length+1;return{severity:typeof r.severity==`string`?r.severity:`unknown`,category:typeof r.category==`string`?r.category:`unknown`,message:i,filePath:t,line:l,column:d}}const V_=`2.5.14`,H_=`6.0.0`,U_=xi,W_=`@biomejs/wasm-web@${V_} @biomejs/js-api@${H_} esbuild-wasm@${U_}`,G_={"@biomejs/wasm-web":`@biomejs/wasm-web@${V_}`,"@biomejs/js-api":`@biomejs/js-api@${H_}`,"esbuild-wasm":`esbuild-wasm@${U_}`},K_=`run: ${F} ${W_} (no network fallback)`,q_=`biome - thin wrapper over the ipk-loaded @biomejs/wasm-web
348
+ `),d=Array.from(c.slice(u+1)).length+1;return{severity:typeof r.severity==`string`?r.severity:`unknown`,category:typeof r.category==`string`?r.category:`unknown`,message:i,filePath:t,line:l,column:d}}const B_=`2.5.14`,V_=`6.0.0`,H_=Si,U_=`@biomejs/wasm-web@${B_} @biomejs/js-api@${V_} esbuild-wasm@${H_}`,W_={"@biomejs/wasm-web":`@biomejs/wasm-web@${B_}`,"@biomejs/js-api":`@biomejs/js-api@${V_}`,"esbuild-wasm":`esbuild-wasm@${H_}`},G_=`run: ${F} ${U_} (no network fallback)`,K_=`biome - thin wrapper over the ipk-loaded @biomejs/wasm-web
349
349
 
350
350
  Usage:
351
351
  biome <subcommand> [options] [files...]
@@ -387,20 +387,20 @@ Exit codes:
387
387
 
388
388
  Install:
389
389
  Inert until the backing packages are installed in node_modules:
390
- ${F} ${W_}
390
+ ${F} ${U_}
391
391
  All three packages must be present in the VFS \`node_modules\` for
392
392
  lint/format to run (loading the wasm-web ESM glue also needs the
393
393
  esbuild-wasm transpiler). There is no bundled binary, no CDN
394
394
  fallback; a missing package exits non-zero with a clear \`ipk add\` hint.
395
- `;function J_(e,t,n){let r=e[t+1];if(typeof r!=`string`||r.startsWith(`-`))throw Error(`biome: ${n} requires a value`);return r}function Y_(e){if(!e)throw Error(`biome: --reporter requires a value`);if(e!==`plain`&&e!==`json`)throw Error(`biome: unknown reporter: ${e}`);return e}function X_(e){return e.some((t,n)=>t===`--json`||t===`--reporter=json`||t===`--reporter`&&e[n+1]===`json`)}function Z_(e,t,n){let r=t[n];switch(r){case`-h`:case`--help`:return e.showHelp=!0,n;case`-v`:case`--version`:return e.showVersion=!0,n;case`--write`:return e.write=!0,n;case`--check`:return e.check=!0,n;case`--json`:return e.reporter=`json`,n;case`--stdin-file-path`:return e.stdinFilePath=J_(t,n,r),n+1;case`--config-path`:return e.configPath=J_(t,n,r),n+1;case`--reporter`:return e.reporter=Y_(J_(t,n,r)),n+1}return r.startsWith(`--stdin-file-path=`)?(e.stdinFilePath=Q_(r,`--stdin-file-path`),n):r.startsWith(`--config-path=`)?(e.configPath=Q_(r,`--config-path`),n):r.startsWith(`--reporter=`)?(e.reporter=Y_(r.slice(11)),n):null}function Q_(e,t){let n=e.slice(t.length+1);if(!n)throw Error(`biome: ${t} requires a value`);return n}function $_(e){let t={subcommand:null,paths:[],write:!1,check:!1,stdinFilePath:null,configPath:null,reporter:`plain`,showHelp:!1,showVersion:!1};if(e.length===0)return t.showHelp=!0,t;for(let n=0;n<e.length;n++){let r=e[n],i=Z_(t,e,n);if(i!==null){n=i;continue}if(t.subcommand===null&&z_.has(r)){t.subcommand=r;continue}if(r.startsWith(`-`))throw Error(`biome: unknown option: ${r}`);t.paths.push(r)}if(t.write&&t.check)throw Error(`biome: --write and --check cannot be used together`);if(t.check&&t.subcommand!==`format`)throw Error(`biome: --check is only valid with the format subcommand`);return t}async function ev(e,t,n){let r=[],i=[];for(let a of n){let n=e.resolvePath(t,a);if(!await e.exists(n)){i.push(a);continue}(await e.stat?.(n))?.isDirectory?await tv(e,n,r):j_(n)&&r.push(n)}return{files:r,missing:i}}async function tv(e,t,n){let r=await e.readdir?.(t)??[];for(let i of r){if(i===`node_modules`||i.startsWith(`.git`))continue;let r=t===`/`?`/${i}`:`${t}/${i}`;(await e.stat?.(r))?.isDirectory?await tv(e,r,n):j_(r)&&n.push(r)}}async function nv(e){let t;try{t=await Sr(`@biomejs/wasm-web/package.json`,e.fromDir,e.reader)}catch{return null}if(t.type!==`file`)return null;try{let n=await e.reader.readFile(t.path),r=JSON.parse(n);return typeof r.version==`string`?r.version:null}catch{return null}}async function rv(e){let t;try{t=await Sr(`@biomejs/wasm-web/package.json`,e.fromDir,e.reader)}catch{return{ok:!1,missing:`@biomejs/wasm-web`}}if(t.type!==`file`)return{ok:!1,missing:`@biomejs/wasm-web`};try{if((await Sr(`@biomejs/js-api/web`,e.fromDir,e.reader)).type!==`file`)return{ok:!1,missing:`@biomejs/js-api`}}catch{return{ok:!1,missing:`@biomejs/js-api`}}try{if((await Sr(`esbuild-wasm/package.json`,e.fromDir,e.reader)).type!==`file`)return{ok:!1,missing:`esbuild-wasm`}}catch{return{ok:!1,missing:`esbuild-wasm`}}return{ok:!0,wasmPkgDir:We(t.path).dir}}function iv(e,t){let n=M_(x(e));if(t===null)return n;let r=Ge(t),i=Ge(n),a=0;for(;a<r.length&&a<i.length&&r[a]===i[a];)a++;return[...Array.from({length:r.length-a},()=>`..`),...i.slice(a)].join(`/`)}const av=`
395
+ `;function q_(e,t,n){let r=e[t+1];if(typeof r!=`string`||r.startsWith(`-`))throw Error(`biome: ${n} requires a value`);return r}function J_(e){if(!e)throw Error(`biome: --reporter requires a value`);if(e!==`plain`&&e!==`json`)throw Error(`biome: unknown reporter: ${e}`);return e}function Y_(e){return e.some((t,n)=>t===`--json`||t===`--reporter=json`||t===`--reporter`&&e[n+1]===`json`)}function X_(e,t,n){let r=t[n];switch(r){case`-h`:case`--help`:return e.showHelp=!0,n;case`-v`:case`--version`:return e.showVersion=!0,n;case`--write`:return e.write=!0,n;case`--check`:return e.check=!0,n;case`--json`:return e.reporter=`json`,n;case`--stdin-file-path`:return e.stdinFilePath=q_(t,n,r),n+1;case`--config-path`:return e.configPath=q_(t,n,r),n+1;case`--reporter`:return e.reporter=J_(q_(t,n,r)),n+1}return r.startsWith(`--stdin-file-path=`)?(e.stdinFilePath=Z_(r,`--stdin-file-path`),n):r.startsWith(`--config-path=`)?(e.configPath=Z_(r,`--config-path`),n):r.startsWith(`--reporter=`)?(e.reporter=J_(r.slice(11)),n):null}function Z_(e,t){let n=e.slice(t.length+1);if(!n)throw Error(`biome: ${t} requires a value`);return n}function Q_(e){let t={subcommand:null,paths:[],write:!1,check:!1,stdinFilePath:null,configPath:null,reporter:`plain`,showHelp:!1,showVersion:!1};if(e.length===0)return t.showHelp=!0,t;for(let n=0;n<e.length;n++){let r=e[n],i=X_(t,e,n);if(i!==null){n=i;continue}if(t.subcommand===null&&R_.has(r)){t.subcommand=r;continue}if(r.startsWith(`-`))throw Error(`biome: unknown option: ${r}`);t.paths.push(r)}if(t.write&&t.check)throw Error(`biome: --write and --check cannot be used together`);if(t.check&&t.subcommand!==`format`)throw Error(`biome: --check is only valid with the format subcommand`);return t}async function $_(e,t,n){let r=[],i=[];for(let a of n){let n=e.resolvePath(t,a);if(!await e.exists(n)){i.push(a);continue}(await e.stat?.(n))?.isDirectory?await ev(e,n,r):A_(n)&&r.push(n)}return{files:r,missing:i}}async function ev(e,t,n){let r=await e.readdir?.(t)??[];for(let i of r){if(i===`node_modules`||i.startsWith(`.git`))continue;let r=t===`/`?`/${i}`:`${t}/${i}`;(await e.stat?.(r))?.isDirectory?await ev(e,r,n):A_(r)&&n.push(r)}}async function tv(e){let t;try{t=await Cr(`@biomejs/wasm-web/package.json`,e.fromDir,e.reader)}catch{return null}if(t.type!==`file`)return null;try{let n=await e.reader.readFile(t.path),r=JSON.parse(n);return typeof r.version==`string`?r.version:null}catch{return null}}async function nv(e){let t;try{t=await Cr(`@biomejs/wasm-web/package.json`,e.fromDir,e.reader)}catch{return{ok:!1,missing:`@biomejs/wasm-web`}}if(t.type!==`file`)return{ok:!1,missing:`@biomejs/wasm-web`};try{if((await Cr(`@biomejs/js-api/web`,e.fromDir,e.reader)).type!==`file`)return{ok:!1,missing:`@biomejs/js-api`}}catch{return{ok:!1,missing:`@biomejs/js-api`}}try{if((await Cr(`esbuild-wasm/package.json`,e.fromDir,e.reader)).type!==`file`)return{ok:!1,missing:`esbuild-wasm`}}catch{return{ok:!1,missing:`esbuild-wasm`}}return{ok:!0,wasmPkgDir:Ge(t.path).dir}}function rv(e,t){let n=j_(x(e));if(t===null)return n;let r=Ke(t),i=Ke(n),a=0;for(;a<r.length&&a<i.length&&r[a]===i[a];)a++;return[...Array.from({length:r.length-a},()=>`..`),...i.slice(a)].join(`/`)}const iv=`
396
396
  const fs = require('fs');
397
- const JSH_WRAP_PREFIX = ${JSON.stringify(N_)};
397
+ const JSH_WRAP_PREFIX = ${JSON.stringify(M_)};
398
398
  const JSH_WRAP_SUFFIX = ${JSON.stringify(`
399
399
  }`)};
400
- const JSH_WRAP_PREFIX_BYTES = ${P_};
401
- const shiftBiomeSpans = ${I_.toString()};
402
- const unwrapFormattedJsh = ${L_.toString()};
403
- const biomeDiagnosticToJson = ${B_.toString()};
400
+ const JSH_WRAP_PREFIX_BYTES = ${N_};
401
+ const shiftBiomeSpans = ${F_.toString()};
402
+ const unwrapFormattedJsh = ${I_.toString()};
403
+ const biomeDiagnosticToJson = ${z_.toString()};
404
404
  function supportsFeature(biome, projectKey, path, feature) {
405
405
  const workspace = biome.workspace;
406
406
  if (!workspace || typeof workspace.fileFeatures !== 'function') {
@@ -524,28 +524,28 @@ async function main() {
524
524
  process.stdout.write(JSON.stringify(results));
525
525
  }
526
526
  main().catch((err) => { process.stderr.write(String(err && err.message || err) + '\\n'); process.exit(1); });
527
- `;function ov(e){let t=e.match(/Cannot find module '(@biomejs\/[^']+)'/);if(!t)return null;let n=t[1].split(`/`).slice(0,2).join(`/`);return`biome: ${n} is not installed (run: ${F} ${G_[n]??n}); ${K_}\n`}async function sv(e,t,n,r,i,a,o,s,c){let l={op:t,write:n,check:r,configuration:i,configurationRoot:a,reporter:o,files:s.map(e=>({path:e.path,biomePath:iv(e.path,a),source:e.source,wrap:F_(e.path)}))},u=[`node`,`[biome-helper]`,JSON.stringify(l),c];return cv(await hi(av,u,e,void 0,{filename:`[biome-helper]`}))}function cv(e){if(e.exitCode!==0)return{results:[],stderr:ov(e.stderr)??e.stderr,exitCode:e.exitCode};if(e.stdout.trim()===``){let t=ov(e.stderr)??e.stderr.trim();return{results:[],stderr:t?`biome: helper exited 0 with no output: ${t.replace(/\n$/,``)}\n`:`biome: helper exited 0 with no output (nothing was linted)
528
- `,exitCode:1}}try{return{results:JSON.parse(e.stdout),stderr:``,exitCode:0}}catch(t){let n=t instanceof Error?t.message:String(t),r=e.stderr.trim();return{results:[],stderr:r?`biome: failed to parse helper output: ${n} (helper stderr: ${r})\n`:`biome: failed to parse helper output: ${n}\n`,exitCode:1}}}function lv(e,t,n,r=``){if(e===`plain`)return t;let i=(t.stderr||t.stdout).trimEnd(),a=i?[{severity:t.exitCode===0?`information`:`error`,category:n,message:i,filePath:r,line:null,column:null}]:[],o={summary:{errors:t.exitCode===0?0:1,warnings:0,filesChecked:0,unformattedFiles:0},diagnostics:a,files:[]};return{stdout:`${JSON.stringify(o)}\n`,stderr:``,exitCode:t.exitCode}}async function uv(e,t){let n=await rv(t);if(!n.ok)return{stdout:``,stderr:`biome: ${n.missing} is not installed (run: ${F} ${G_[n.missing]??n.missing}); ${K_}\n`,exitCode:1};let r=`${n.wasmPkgDir}/biome_wasm_bg.wasm`;return await e.fs.exists(r)?{wasmPath:r}:{stdout:``,stderr:`biome: ${r} not found (reinstall: ${F} ${G_[`@biomejs/wasm-web`]})\n`,exitCode:1}}async function dv(e,t){if(t.paths.length===0&&e.stdin)return{inputs:[{path:t.stdinFilePath??`/stdin.ts`,source:P(e.stdin)}],missingErrText:``};if(t.paths.length===0)return{stdout:``,stderr:`biome: no files or directories specified
529
- `,exitCode:2};let n=await ev(e.fs,e.cwd,t.paths),r=n.missing.map(e=>`biome: ${e}: no such file or directory\n`).join(``),i=[];for(let t of n.files)i.push({path:t,source:await e.fs.readFile(t)});return i.length===0?{stdout:``,stderr:`${r}biome: no lintable files found\n`,exitCode:+(n.missing.length>0)}:{inputs:i,missingErrText:r}}async function fv(e,t,n,r,i){let a=[],o=[i],s=0,c=0,l=0;for(let i of r.results)t.reporter===`plain`&&i.diagnosticsText&&o.push(k_(i.diagnosticsText)),s+=i.errorCount,c+=i.warningCount,t.write&&i.formatted!==null&&!i.unchanged?(await e.fs.writeFile(i.path,i.formatted),l++):!t.write&&t.subcommand===`format`&&!t.check&&n.length===1&&n[0].path===i.path&&a.push(i.formatted??n[0].source);t.write&&l>0&&o.push(`biome: wrote ${l} file(s)\n`);let u=+(s>0||c>0||i.length>0);if(t.reporter===`json`){let e=i?[{severity:`error`,category:`io`,message:i.trimEnd(),filePath:``,line:null,column:null}]:[],t={summary:{errors:s+e.length,warnings:c,filesChecked:r.results.length,unformattedFiles:r.results.filter(e=>!e.unchanged).length},diagnostics:[...r.results.flatMap(e=>e.diagnostics),...e],files:r.results.map(e=>({path:e.path,unchanged:e.unchanged}))};return{stdout:`${JSON.stringify(t)}\n`,stderr:``,exitCode:u}}return{stdout:a.join(``),stderr:o.join(``),exitCode:u}}async function pv(e){let t=await nv(e);return t?{stdout:`${t}\n`,stderr:``,exitCode:0}:{stdout:``,stderr:`biome: @biomejs/wasm-web is not installed (run: ${F} @biomejs/wasm-web@${V_}); ${K_}\n`,exitCode:1}}async function mv(e,t){return e.showHelp?lv(e.reporter,{stdout:q_,stderr:``,exitCode:0},`usage`):e.showVersion?lv(e.reporter,await pv(t),`runtime`):null}function hv(e,t){let n=e.paths[0];if(!n)return``;try{return t.fs.resolvePath(t.cwd,n)}catch{return``}}async function gv(e,t){let n=R_(t),r=await mv(e,n);if(r)return r;if(e.subcommand===null)return lv(e.reporter,{stdout:``,stderr:`biome: missing subcommand (expected check, lint, or format)
530
- `,exitCode:2},`usage`);let i=await dv(t,e);if(`exitCode`in i)return lv(e.reporter,i,`io`);let a=e.paths.length===0&&t.stdin?t.cwd:We(i.inputs[0].path).dir,o=await T_(t.fs,t.cwd,a,e.configPath);if(!o.ok)return lv(e.reporter,{stdout:``,stderr:`${o.error}\n`,exitCode:o.exitCode},`configuration`,i.inputs[0].path);let s=await uv(t,n);if(`exitCode`in s)return lv(e.reporter,s,`runtime`,i.inputs[0].path);let c=await sv(t,e.subcommand,e.write,e.check,o.resolved?.configuration??null,o.resolved===null?null:We(o.resolved.path).dir,e.reporter,i.inputs,s.wasmPath);return c.exitCode===0?fv(t,e,i.inputs,c,i.missingErrText):lv(e.reporter,{stdout:``,stderr:i.missingErrText+c.stderr,exitCode:c.exitCode},`runtime`,i.inputs[0].path)}function _v(){return C(`biome`,async(e,t)=>{let n;try{n=$_(e)}catch(t){return lv(X_(e)?`json`:`plain`,{stdout:``,stderr:`${t instanceof Error?t.message:String(t)}\n`,exitCode:2},`usage`)}try{return await gv(n,t)}catch(e){if(n.reporter===`plain`)throw e;return lv(`json`,{stdout:``,stderr:`biome: ${e instanceof Error?e.message:String(e)}\n`,exitCode:1},`runtime`,hv(n,t))}})}function vv(e=`biscotto`,t={}){return C(e,async(n,r)=>{let{runBiscotto:i}=await import(`./run-BAmXlRlW.js`);return i(e,n,r,t.getParentJid?.(),t.isScoop?.()===!0)})}function yv(e={}){let t=e.getFollowers??ie,n=e.getPanelRpc??b,r=e.getEmitter??(()=>null);return{listRuntimeIds(){return t().filter(e=>e.runtime===`slicc-cherry`).map(e=>e.runtimeId)},async emitSliccEvent(e,t,i){let a=r();if(a)try{return await a(e,t,i)?{delivered:!0}:{delivered:!1,reason:`the follower runtime is not connected to the leader`}}catch(e){return{delivered:!1,reason:`direct emit failed: ${e instanceof Error?e.message:String(e)}`}}let o=n();if(!o)return{delivered:!1,reason:`no page bridge to the leader tray (panel-RPC client)`};try{return(await o.call(`cherry-emit`,{runtimeId:e,name:t,detail:i}))?.delivered?{delivered:!0}:{delivered:!1,reason:`the follower runtime is not connected to the leader`}}catch(e){return{delivered:!1,reason:`panel-RPC delivery failed: ${e instanceof Error?e.message:String(e)}`}}}}}const bv=[`--detail`,`--runtime`];function xv(e){return{stdout:``,stderr:`cherry-emit: ${e}\n`,exitCode:1}}function Sv(e){let t=w(e,{value:bv});return`error`in t?xv(t.error):{positionals:t.positionals,detailJson:t.values.get(`--detail`),runtime:t.values.get(`--runtime`)}}function Cv(e,t){return e.length===0?xv(`no cherry follower runtime is connected`):t?e.includes(t)?t:xv(`runtime '${t}' not connected. Available: ${e.join(`, `)}`):e.length>1?xv(`multiple runtimes connected, pass --runtime <id>. Available: ${e.join(`, `)}`):e[0]}function wv(e){if(e===void 0)return{detail:void 0};try{return{detail:JSON.parse(e)}}catch{return xv(`--detail must be valid JSON`)}}function Tv(e={}){let t=e.registry??yv();return C(`cherry-emit`,async e=>{if(T(e,{valueFlags:bv}))return{stdout:`cherry-emit - push a slicc.event to a cherry host page through a follower runtime
527
+ `;function av(e){let t=e.match(/Cannot find module '(@biomejs\/[^']+)'/);if(!t)return null;let n=t[1].split(`/`).slice(0,2).join(`/`);return`biome: ${n} is not installed (run: ${F} ${W_[n]??n}); ${G_}\n`}async function ov(e,t,n,r,i,a,o,s,c){let l={op:t,write:n,check:r,configuration:i,configurationRoot:a,reporter:o,files:s.map(e=>({path:e.path,biomePath:rv(e.path,a),source:e.source,wrap:P_(e.path)}))},u=[`node`,`[biome-helper]`,JSON.stringify(l),c];return sv(await gi(iv,u,e,void 0,{filename:`[biome-helper]`}))}function sv(e){if(e.exitCode!==0)return{results:[],stderr:av(e.stderr)??e.stderr,exitCode:e.exitCode};if(e.stdout.trim()===``){let t=av(e.stderr)??e.stderr.trim();return{results:[],stderr:t?`biome: helper exited 0 with no output: ${t.replace(/\n$/,``)}\n`:`biome: helper exited 0 with no output (nothing was linted)
528
+ `,exitCode:1}}try{return{results:JSON.parse(e.stdout),stderr:``,exitCode:0}}catch(t){let n=t instanceof Error?t.message:String(t),r=e.stderr.trim();return{results:[],stderr:r?`biome: failed to parse helper output: ${n} (helper stderr: ${r})\n`:`biome: failed to parse helper output: ${n}\n`,exitCode:1}}}function cv(e,t,n,r=``){if(e===`plain`)return t;let i=(t.stderr||t.stdout).trimEnd(),a=i?[{severity:t.exitCode===0?`information`:`error`,category:n,message:i,filePath:r,line:null,column:null}]:[],o={summary:{errors:t.exitCode===0?0:1,warnings:0,filesChecked:0,unformattedFiles:0},diagnostics:a,files:[]};return{stdout:`${JSON.stringify(o)}\n`,stderr:``,exitCode:t.exitCode}}async function lv(e,t){let n=await nv(t);if(!n.ok)return{stdout:``,stderr:`biome: ${n.missing} is not installed (run: ${F} ${W_[n.missing]??n.missing}); ${G_}\n`,exitCode:1};let r=`${n.wasmPkgDir}/biome_wasm_bg.wasm`;return await e.fs.exists(r)?{wasmPath:r}:{stdout:``,stderr:`biome: ${r} not found (reinstall: ${F} ${W_[`@biomejs/wasm-web`]})\n`,exitCode:1}}async function uv(e,t){if(t.paths.length===0&&e.stdin)return{inputs:[{path:t.stdinFilePath??`/stdin.ts`,source:P(e.stdin)}],missingErrText:``};if(t.paths.length===0)return{stdout:``,stderr:`biome: no files or directories specified
529
+ `,exitCode:2};let n=await $_(e.fs,e.cwd,t.paths),r=n.missing.map(e=>`biome: ${e}: no such file or directory\n`).join(``),i=[];for(let t of n.files)i.push({path:t,source:await e.fs.readFile(t)});return i.length===0?{stdout:``,stderr:`${r}biome: no lintable files found\n`,exitCode:+(n.missing.length>0)}:{inputs:i,missingErrText:r}}async function dv(e,t,n,r,i){let a=[],o=[i],s=0,c=0,l=0;for(let i of r.results)t.reporter===`plain`&&i.diagnosticsText&&o.push(O_(i.diagnosticsText)),s+=i.errorCount,c+=i.warningCount,t.write&&i.formatted!==null&&!i.unchanged?(await e.fs.writeFile(i.path,i.formatted),l++):!t.write&&t.subcommand===`format`&&!t.check&&n.length===1&&n[0].path===i.path&&a.push(i.formatted??n[0].source);t.write&&l>0&&o.push(`biome: wrote ${l} file(s)\n`);let u=+(s>0||c>0||i.length>0);if(t.reporter===`json`){let e=i?[{severity:`error`,category:`io`,message:i.trimEnd(),filePath:``,line:null,column:null}]:[],t={summary:{errors:s+e.length,warnings:c,filesChecked:r.results.length,unformattedFiles:r.results.filter(e=>!e.unchanged).length},diagnostics:[...r.results.flatMap(e=>e.diagnostics),...e],files:r.results.map(e=>({path:e.path,unchanged:e.unchanged}))};return{stdout:`${JSON.stringify(t)}\n`,stderr:``,exitCode:u}}return{stdout:a.join(``),stderr:o.join(``),exitCode:u}}async function fv(e){let t=await tv(e);return t?{stdout:`${t}\n`,stderr:``,exitCode:0}:{stdout:``,stderr:`biome: @biomejs/wasm-web is not installed (run: ${F} @biomejs/wasm-web@${B_}); ${G_}\n`,exitCode:1}}async function pv(e,t){return e.showHelp?cv(e.reporter,{stdout:K_,stderr:``,exitCode:0},`usage`):e.showVersion?cv(e.reporter,await fv(t),`runtime`):null}function mv(e,t){let n=e.paths[0];if(!n)return``;try{return t.fs.resolvePath(t.cwd,n)}catch{return``}}async function hv(e,t){let n=L_(t),r=await pv(e,n);if(r)return r;if(e.subcommand===null)return cv(e.reporter,{stdout:``,stderr:`biome: missing subcommand (expected check, lint, or format)
530
+ `,exitCode:2},`usage`);let i=await uv(t,e);if(`exitCode`in i)return cv(e.reporter,i,`io`);let a=e.paths.length===0&&t.stdin?t.cwd:Ge(i.inputs[0].path).dir,o=await w_(t.fs,t.cwd,a,e.configPath);if(!o.ok)return cv(e.reporter,{stdout:``,stderr:`${o.error}\n`,exitCode:o.exitCode},`configuration`,i.inputs[0].path);let s=await lv(t,n);if(`exitCode`in s)return cv(e.reporter,s,`runtime`,i.inputs[0].path);let c=await ov(t,e.subcommand,e.write,e.check,o.resolved?.configuration??null,o.resolved===null?null:Ge(o.resolved.path).dir,e.reporter,i.inputs,s.wasmPath);return c.exitCode===0?dv(t,e,i.inputs,c,i.missingErrText):cv(e.reporter,{stdout:``,stderr:i.missingErrText+c.stderr,exitCode:c.exitCode},`runtime`,i.inputs[0].path)}function gv(){return C(`biome`,async(e,t)=>{let n;try{n=Q_(e)}catch(t){return cv(Y_(e)?`json`:`plain`,{stdout:``,stderr:`${t instanceof Error?t.message:String(t)}\n`,exitCode:2},`usage`)}try{return await hv(n,t)}catch(e){if(n.reporter===`plain`)throw e;return cv(`json`,{stdout:``,stderr:`biome: ${e instanceof Error?e.message:String(e)}\n`,exitCode:1},`runtime`,mv(n,t))}})}function _v(e=`biscotto`,t={}){return C(e,async(n,r)=>{let{runBiscotto:i}=await import(`./run-BAmXlRlW.js`);return i(e,n,r,t.getParentJid?.(),t.isScoop?.()===!0)})}function vv(e={}){let t=e.getFollowers??ie,n=e.getPanelRpc??b,r=e.getEmitter??(()=>null);return{listRuntimeIds(){return t().filter(e=>e.runtime===`slicc-cherry`).map(e=>e.runtimeId)},async emitSliccEvent(e,t,i){let a=r();if(a)try{return await a(e,t,i)?{delivered:!0}:{delivered:!1,reason:`the follower runtime is not connected to the leader`}}catch(e){return{delivered:!1,reason:`direct emit failed: ${e instanceof Error?e.message:String(e)}`}}let o=n();if(!o)return{delivered:!1,reason:`no page bridge to the leader tray (panel-RPC client)`};try{return(await o.call(`cherry-emit`,{runtimeId:e,name:t,detail:i}))?.delivered?{delivered:!0}:{delivered:!1,reason:`the follower runtime is not connected to the leader`}}catch(e){return{delivered:!1,reason:`panel-RPC delivery failed: ${e instanceof Error?e.message:String(e)}`}}}}}const yv=[`--detail`,`--runtime`];function bv(e){return{stdout:``,stderr:`cherry-emit: ${e}\n`,exitCode:1}}function xv(e){let t=w(e,{value:yv});return`error`in t?bv(t.error):{positionals:t.positionals,detailJson:t.values.get(`--detail`),runtime:t.values.get(`--runtime`)}}function Sv(e,t){return e.length===0?bv(`no cherry follower runtime is connected`):t?e.includes(t)?t:bv(`runtime '${t}' not connected. Available: ${e.join(`, `)}`):e.length>1?bv(`multiple runtimes connected, pass --runtime <id>. Available: ${e.join(`, `)}`):e[0]}function Cv(e){if(e===void 0)return{detail:void 0};try{return{detail:JSON.parse(e)}}catch{return bv(`--detail must be valid JSON`)}}function wv(e={}){let t=e.registry??vv();return C(`cherry-emit`,async e=>{if(T(e,{valueFlags:yv}))return{stdout:`cherry-emit - push a slicc.event to a cherry host page through a follower runtime
531
531
 
532
532
  Usage: cherry-emit <name> [--detail <json>] [--runtime <id>]
533
533
 
534
534
  --detail <json> JSON payload delivered as the event detail
535
535
  --runtime <id> Target a specific follower runtime (canonical id, e.g. follower-abc).
536
536
  Defaults to the sole connected runtime; required when more than one.
537
- `,stderr:``,exitCode:0};let n=Sv(e);if(`exitCode`in n)return n;let r=n.positionals[0];if(!r)return xv(`event name is required`);let i=Cv(t.listRuntimeIds(),n.runtime);if(typeof i!=`string`)return i;let a=wv(n.detailJson);if(`exitCode`in a)return a;let o=await t.emitSliccEvent(i,r,a.detail);return o.delivered?{stdout:`cherry-emit: sent '${r}' to ${i}\n`,stderr:``,exitCode:0}:xv(`failed to deliver '${r}' to ${i}: ${o.reason}`)})}function Ev(e){return e instanceof Error?e.message:String(e)}function Dv(){return{stdout:`usage: pbcopy
537
+ `,stderr:``,exitCode:0};let n=xv(e);if(`exitCode`in n)return n;let r=n.positionals[0];if(!r)return bv(`event name is required`);let i=Sv(t.listRuntimeIds(),n.runtime);if(typeof i!=`string`)return i;let a=Cv(n.detailJson);if(`exitCode`in a)return a;let o=await t.emitSliccEvent(i,r,a.detail);return o.delivered?{stdout:`cherry-emit: sent '${r}' to ${i}\n`,stderr:``,exitCode:0}:bv(`failed to deliver '${r}' to ${i}: ${o.reason}`)})}function Tv(e){return e instanceof Error?e.message:String(e)}function Ev(){return{stdout:`usage: pbcopy
538
538
 
539
539
  Copy stdin to the clipboard.
540
540
  Example: echo hello | pbcopy
541
- `,stderr:``,exitCode:0}}function Ov(){return{stdout:`usage: pbpaste
541
+ `,stderr:``,exitCode:0}}function Dv(){return{stdout:`usage: pbpaste
542
542
 
543
543
  Paste clipboard contents to stdout.
544
- `,stderr:``,exitCode:0}}function kv(e){return{stdout:`usage: ${e} [-i|-o]\n\n -i Force copy mode (read from stdin)
544
+ `,stderr:``,exitCode:0}}function Ov(e){return{stdout:`usage: ${e} [-i|-o]\n\n -i Force copy mode (read from stdin)
545
545
  -o Force paste mode (write to stdout)
546
546
  (default) Auto-detect: stdin present = copy, no stdin = paste
547
- Example: echo hello | ${e}\n Example: ${e} -o > file.txt\n`,stderr:``,exitCode:0}}async function Av(e,t){let n=!!globalThis.navigator?.clipboard,r=n?null:b();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: ${Ev(e)}\n`,exitCode:1}}}async function jv(e){let t=!!globalThis.navigator?.clipboard,n=t?null:b();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: ${Ev(t)}\n`,exitCode:1}}}function Mv(){return C(`pbcopy`,async(e,t)=>e.includes(`--help`)||e.includes(`-h`)?Dv():Av(P(t.stdin),`pbcopy`))}function Nv(){return C(`pbpaste`,async e=>e.includes(`--help`)||e.includes(`-h`)?Ov():jv(`pbpaste`))}function Pv(e){return C(e,async(t,n)=>{if(t.includes(`--help`)||t.includes(`-h`))return kv(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 jv(e);let a=P(n.stdin);return r||a.length>0?Av(a,e):jv(e)})}function Fv(){return C(`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
548
- `,exitCode:2};let i=await Iv(t,r[0]);if(`error`in i)return n?{...i.error,stderr:``}:i.error;let a=await Iv(t,r[1]);if(`error`in a)return n?{...a.error,stderr:``}:a.error;let o=Lv(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 Iv(e,t){if(t===`-`){let t=cr(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 Lv(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 Rv(e={}){return C(`computer`,async(t,n)=>{let{runComputer:r}=await import(`./run-BJGzDxyk.js`).then(e=>e.t);return r(t,n,e)})}var zv=`/assets/AdobeClean-Regular-CVsq5gF7.otf`;function Bv(e){return{reader:{exists:t=>e.fs.exists(t),isDirectory:async t=>{try{return(await e.fs.stat(t)).isDirectory}catch{return!1}},readFile:t=>e.fs.readFile(t)},readBytes:t=>e.fs.readFileBuffer(t),fromDir:e.cwd}}function Vv(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`,Uv=new WeakSet;let Wv=null;function Gv(){return{stdout:`usage: convert [input ...] [operations...] [output]
547
+ Example: echo hello | ${e}\n Example: ${e} -o > file.txt\n`,stderr:``,exitCode:0}}async function kv(e,t){let n=!!globalThis.navigator?.clipboard,r=n?null:b();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: ${Tv(e)}\n`,exitCode:1}}}async function Av(e){let t=!!globalThis.navigator?.clipboard,n=t?null:b();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: ${Tv(t)}\n`,exitCode:1}}}function jv(){return C(`pbcopy`,async(e,t)=>e.includes(`--help`)||e.includes(`-h`)?Ev():kv(P(t.stdin),`pbcopy`))}function Mv(){return C(`pbpaste`,async e=>e.includes(`--help`)||e.includes(`-h`)?Dv():Av(`pbpaste`))}function Nv(e){return C(e,async(t,n)=>{if(t.includes(`--help`)||t.includes(`-h`))return Ov(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 Av(e);let a=P(n.stdin);return r||a.length>0?kv(a,e):Av(e)})}function Pv(){return C(`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
548
+ `,exitCode:2};let i=await Fv(t,r[0]);if(`error`in i)return n?{...i.error,stderr:``}:i.error;let a=await Fv(t,r[1]);if(`error`in a)return n?{...a.error,stderr:``}:a.error;let o=Iv(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 Fv(e,t){if(t===`-`){let t=lr(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 Iv(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 Lv(e={}){return C(`computer`,async(t,n)=>{let{runComputer:r}=await import(`./run-BJGzDxyk.js`).then(e=>e.t);return r(t,n,e)})}var Rv=`/assets/AdobeClean-Regular-CVsq5gF7.otf`;function zv(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 Bv(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 Vv=`AdobeClean-Regular.otf`,Hv=new WeakSet;let Uv=null;function Wv(){return{stdout:`usage: convert [input ...] [operations...] [output]
549
549
 
550
550
  Operations:
551
551
  -resize GEOMETRY resize; supports %, !, ^, >, and < modifiers
@@ -586,7 +586,7 @@ suffix (0-based, as ImageMagick does); page 0 is used when none is given:
586
586
  convert -density 150 doc.pdf page0.png
587
587
  convert doc.pdf[2] -resize 800x page3.png
588
588
  Use pdftoppm to rasterize a whole document in one pass.
589
- `,stderr:``,exitCode:0}}const Kv=new Map([[`-resize`,1],[`-thumbnail`,1],[`-rotate`,1],[`-crop`,1],[`-quality`,1],[`-auto-orient`,0],[`-auto-gamma`,0],[`-auto-level`,0],[`-flip`,0],[`-flop`,0],[`-strip`,0],[`-trim`,0],[`-negate`,0],[`-normalize`,0],[`-background`,1],[`-extent`,1],[`-alpha`,1],[`-colorspace`,1],[`-transparent`,1],[`-blur`,1],[`-sharpen`,1],[`-gravity`,1],[`-fill`,1],[`-undercolor`,1],[`-pointsize`,1],[`-density`,1],[`-annotate`,2]]);var qv=class{tokens;index=0;density=72;constructor(e){this.tokens=e}parse(){return this.readSequence(!1)}readSequence(e){let t=[],n=[],r=!1;for(;this.index<this.tokens.length;){let i=this.tokens[this.index];if(i===`)`){if(!e)throw Error(`unexpected )`);this.index++,r=!0;break}i===`(`?this.readGroup(t,n):i===`+append`||i===`-append`?this.append(t,i):Kv.has(i)?this.readOperation(t,n,i):this.readInput(t,n,i)}if(e&&!r)throw Error(`missing )`);return this.finishSequence(t,n)}readGroup(e,t){this.index++;let n=this.readSequence(!0);n.operations.unshift(...t.splice(0)),e.push(n)}append(e,t){if(e.length<2)throw Error(`${t} requires at least two images`);let n=[...e];e.splice(0,e.length,{kind:`append`,direction:t===`+append`?`horizontal`:`vertical`,children:n,appendSettings:Jv(n),operations:[]}),this.index++}readOperation(e,t,n){let r=Kv.get(n),i=this.tokens.slice(this.index+1,this.index+1+r);if(i.length!==r||i.some(e=>Zv(e)))throw Error(`missing argument for ${n}`);let a={type:n.slice(1),value:i[0]??``,...r===2?{text:i[1]}:{}};a.type===`density`&&(this.density=Xv(a.value)),(e.at(-1)?.operations??t).push(a),this.index+=r+1}readInput(e,t,n){if(n.startsWith(`-`)||n.startsWith(`+`))throw Error(`unsupported option ${n}`);e.push({kind:`input`,path:n,operations:t.splice(0),density:this.density}),this.index++}finishSequence(e,t){if(t.length>0)throw Error(`operation requires an input image`);if(e.length===0)throw Error(`expected an input image`);if(e.length>1)throw Error(`multiple input files require +append or -append`);return e[0]}};function Jv(e){let t={};for(let n of e)for(let e of n.operations)e.type===`background`&&(t.background=e.value),e.type===`gravity`&&(t.gravity=e.value);return t}function Yv(e){if(e.length<2)throw Error(`expected exactly one input file and one output file`);let t=e.at(-1),n=Kv.get(t);if(n!==void 0)throw Error(n>0?`missing argument for ${t}`:`expected an output file`);if(Zv(t))throw Error(`expected an output file`);return{expression:new qv(e.slice(0,-1)).parse(),outputPath:t}}function Xv(e){let t=Number(e.split(`x`)[0]);if(!Number.isFinite(t)||t<=0)throw Error(`Invalid density: ${e}`);return t}function Zv(e){return e===`(`||e===`)`||e===`+append`||e===`-append`||Kv.has(e)}const Qv=/^(?:\d+(?:x\d*)?|x\d+)(?:[%!^<>@])?$/,$v=/^\d+x\d+(?:[+-]\d+[+-]\d+)?$/;function ey(e,t,n){if(!(n===`resize`||n===`thumbnail`?Qv:$v).test(t))throw Error(`Invalid ${n} geometry: ${t}`);return new e.MagickGeometry(t)}function ty(e,t,n){t.resize(ey(e,n,`resize`))}function ny(e,t){let n=parseFloat(t);if(isNaN(n))throw Error(`Invalid rotation degrees: ${t}`);e.rotate(n)}function ry(e,t,n,r){let i=ey(e,n,`crop`);r===void 0?t.crop(i):t.crop(i,r)}function iy(e,t){let n=parseInt(t,10);if(isNaN(n)||n<0||n>100)throw Error(`Invalid quality: ${t} (must be 0-100)`);e.quality=n}const ay={northwest:`Northwest`,north:`North`,northeast:`Northeast`,west:`West`,center:`Center`,east:`East`,southwest:`Southwest`,south:`South`,southeast:`Southeast`};function oy(e,t){let n=ay[t.toLowerCase()],r=n?e.Gravity[n]:void 0;if(r===void 0)throw Error(`Invalid gravity: ${t}`);return r}const sy={"auto-orient":e=>e.autoOrient(),"auto-gamma":e=>e.autoGamma(),"auto-level":e=>e.autoLevel(),flip:e=>e.flip(),flop:e=>e.flop(),strip:e=>e.strip(),trim:e=>e.trim(),negate:e=>e.negate(),normalize:e=>e.normalize()};function cy(e){return e.toLowerCase().replaceAll(/[-_ ]/g,``)}function ly(e,t,n){let r=cy(t),i=Object.entries(e).find(([e])=>cy(e)===r);if(!i)throw Error(`Invalid ${n}: ${t}`);return i[1]}function uy(e,t,n,r){let i=ey(e,n,`extent`),a=r.background?new e.MagickColor(r.background):void 0;r.gravity!==void 0&&a?t.extent(i,r.gravity,a):r.gravity===void 0?a?t.extent(i,a):t.extent(i):t.extent(i,r.gravity)}function dy(e,t){let n=`(?:\\d+(?:\\.\\d*)?|\\.\\d+)`,r=e.match(RegExp(`^(${n})(?:x(${n}))?$`));if(!r)throw Error(`Invalid ${t} radius/sigma: ${e}`);return[Number(r[1]),r[2]===void 0?1:Number(r[2])]}function fy(e,t,n,r){let i=n.value.match(/^([+-]\d+)([+-]\d+)$/);if(!i)throw Error(`Invalid annotate offset: ${n.value} (expected +X+Y)`);let a=new e.Drawables;r.gravity!==void 0&&a.gravity(r.gravity),r.fill!==void 0&&a.fillColor(new e.MagickColor(r.fill)),r.undercolor!==void 0&&a.textUnderColor(new e.MagickColor(r.undercolor)),a.font(Hv),r.pointsize!==void 0&&a.fontPointSize(r.pointsize),a.text(Number(i[1]),Number(i[2]),n.text??``).draw(t)}async function py(e){if(Uv.has(e.Magick))return;let t=Wv??=fetch(zv).then(async e=>{if(!e.ok)throw Error(`Failed to load annotation font (${e.status})`);return new Uint8Array(await e.arrayBuffer())});try{e.Magick.addFont(Hv,await t),Uv.add(e.Magick)}catch(e){throw Wv===t&&(Wv=null),e}}function my(e){return e.operations.some(e=>e.type===`annotate`)?!0:e.kind===`append`&&e.children.some(my)}function hy(e,t,n,r){let i=sy[n.type];if(i){i(t);return}switch(n.type){case`density`:return;case`resize`:ty(e,t,n.value);return;case`thumbnail`:t.thumbnail(ey(e,n.value,`thumbnail`));return;case`rotate`:ny(t,n.value);return;case`crop`:ry(e,t,n.value,r.gravity);return;case`quality`:iy(t,n.value);return;case`background`:r.background=n.value,t.backgroundColor=new e.MagickColor(n.value);return;case`extent`:uy(e,t,n.value,r);return;case`alpha`:t.alpha(ly(e.AlphaAction,n.value,`alpha mode`));return;case`colorspace`:t.colorSpace=ly(e.ColorSpace,n.value,`colorspace`);return;case`transparent`:t.transparent(new e.MagickColor(n.value));return;case`blur`:t.blur(...dy(n.value,`blur`));return;case`sharpen`:t.sharpen(...dy(n.value,`sharpen`));return;case`gravity`:r.gravity=oy(e,n.value);return;case`fill`:r.fill=n.value;return;case`undercolor`:r.undercolor=n.value;return;case`pointsize`:{let e=Number(n.value);if(!Number.isFinite(e)||e<=0)throw Error(`Invalid point size: ${n.value}`);r.pointsize=e;return}case`annotate`:fy(e,t,n,r);return}}function gy(e,t,n){let{background:r,gravity:i}=t.appendSettings;if(r===void 0&&i===void 0)return;let a=i===void 0?void 0:oy(e,i),o=r===void 0?void 0:new e.MagickColor(r),s=Math.max(...n.map(e=>e.width)),c=Math.max(...n.map(e=>e.height));for(let r of n){let n=t.direction===`vertical`?s:r.width,i=t.direction===`horizontal`?c:r.height;if(n===r.width&&i===r.height)continue;let l=new e.MagickGeometry(n,i);a!==void 0&&o?r.extent(l,a,o):a===void 0?o&&r.extent(l,o):r.extent(l,a)}}function _y(e,t,n){let r={};for(let i of n)hy(e,t,i,r)}function vy(e,t){let n=null,r=Vv(t);return e.write(r,e=>{n=new Uint8Array(e)}),n}async function yy(e,t,n,r,i=[],a=0){if(a===t.children.length)return r(i);await by(e,t.children[a],n,async o=>{i.push(o),await yy(e,t,n,r,i,a+1),i.pop()})}async function by(e,t,n,r){if(t.kind===`input`){await e.ImageMagick.read(n.get(t),async n=>{_y(e,n,t.operations),await r(n)});return}await yy(e,t,n,async n=>{gy(e,t,n);let i=e.MagickImageCollection.create();i.push(...n);let a=t.direction===`horizontal`?i.appendHorizontally.bind(i):i.appendVertically.bind(i);try{await a(async n=>{_y(e,n,t.operations),await r(n)})}finally{i.length=0,i.dispose()}})}function xy(e){let t=e.match(/^(.*)\[(\d+)\]$/);return t?{path:t[1],scene:Number(t[2])}:{path:e}}async function Sy(e,t,n=new Map,r=new Map){if(e.kind===`input`){let{path:i,scene:a}=xy(e.path),o=t.fs.resolvePath(t.cwd,i),s=r.get(o);if(s===void 0&&(s=await t.fs.readFileBuffer(o),r.set(o,s)),aa(s)){let t=await oa(s,(a??0)+1,{scale:sa(e.density),format:`png`});return n.set(e,t.bytes),n}return n.set(e,s),n}for(let i of e.children)await Sy(i,t,n,r);return n}function Cy(e=`convert`){return C(e,async(t,n)=>{if(t.length===0||t.includes(`--help`)||t.includes(`-h`))return Gv();let r;try{r=Yv(t)}catch(t){return{stdout:``,stderr:`${e}: ${t instanceof Error?t.message:String(t)}\n`,exitCode:1}}try{let e=await Sy(r.expression,n),t=await na({ipk:Bv(n)});my(r.expression)&&await py(t);let i=null;if(await by(t,r.expression,e,async e=>{i=vy(e,r.outputPath)}),!i||i.byteLength===0)throw Error(`Failed to generate output image`);let a=n.fs.resolvePath(n.cwd,r.outputPath);return await n.fs.writeFile(a,i),{stdout:``,stderr:``,exitCode:0}}catch(t){return{stdout:``,stderr:`${e}: ${t instanceof Error?t.message:String(t)}\n`,exitCode:1}}})}function wy(){return globalThis.__slicc_lickManager??null}let Ty=null;async function Ey(){if(Ty)return Ty;let{createLickManagerProxy:e}=await import(`./lick-manager-proxy-DMaLHm_t.js`);return Ty=e(),Ty}async function Dy(){let e=wy();if(e)return{resolveLickTarget:async t=>e.resolveLickTarget?.(t)??{status:`unverifiable`},createWebhook:(t,n,r)=>e.createWebhook(t,n,r),deleteWebhook:t=>e.deleteWebhook(t),listWebhooks:async()=>e.listWebhooks(),createCronTask:(t,n,r)=>e.createCronTask(t,n,r),deleteCronTask:t=>e.deleteCronTask(t),listCronTasks:async()=>e.listCronTasks()};if(Re())return null;let t=await Ey(),{listCronTasksAsync:n,listWebhooksAsync:r}=await import(`./lick-manager-proxy-DMaLHm_t.js`);return{resolveLickTarget:e=>t.resolveLickTarget(e),createWebhook:(e,n,r)=>t.createWebhook(e,n,r),deleteWebhook:e=>t.deleteWebhook(e),listWebhooks:()=>r(),createCronTask:(e,n,r)=>t.createCronTask(e,n,r),deleteCronTask:e=>t.deleteCronTask(e),listCronTasks:()=>n()}}function Oy(e){if(e.length===0)return`no cones or scoops are registered`;let t=e.slice(0,12),n=e.length>t.length?`, …`:``;return`valid targets: ${t.join(`, `)}${n}`}async function ky(e,t,n){if(!n||!e)return null;let r;try{r=await e.resolveLickTarget(n)}catch{return null}return r.status===`unresolved`?`${t}: --scoop "${n}" matches no live cone or scoop — its licks would be dropped (${Oy(r.candidates)})\n`:null}function Ay(e){return{stdout:``,stderr:`crontask ${e}: kernel host has not booted yet — try again in a moment\n`,exitCode:1}}function jy(){return{stdout:`usage: crontask <command> [options]
589
+ `,stderr:``,exitCode:0}}const Gv=new Map([[`-resize`,1],[`-thumbnail`,1],[`-rotate`,1],[`-crop`,1],[`-quality`,1],[`-auto-orient`,0],[`-auto-gamma`,0],[`-auto-level`,0],[`-flip`,0],[`-flop`,0],[`-strip`,0],[`-trim`,0],[`-negate`,0],[`-normalize`,0],[`-background`,1],[`-extent`,1],[`-alpha`,1],[`-colorspace`,1],[`-transparent`,1],[`-blur`,1],[`-sharpen`,1],[`-gravity`,1],[`-fill`,1],[`-undercolor`,1],[`-pointsize`,1],[`-density`,1],[`-annotate`,2]]);var Kv=class{tokens;index=0;density=72;constructor(e){this.tokens=e}parse(){return this.readSequence(!1)}readSequence(e){let t=[],n=[],r=!1;for(;this.index<this.tokens.length;){let i=this.tokens[this.index];if(i===`)`){if(!e)throw Error(`unexpected )`);this.index++,r=!0;break}i===`(`?this.readGroup(t,n):i===`+append`||i===`-append`?this.append(t,i):Gv.has(i)?this.readOperation(t,n,i):this.readInput(t,n,i)}if(e&&!r)throw Error(`missing )`);return this.finishSequence(t,n)}readGroup(e,t){this.index++;let n=this.readSequence(!0);n.operations.unshift(...t.splice(0)),e.push(n)}append(e,t){if(e.length<2)throw Error(`${t} requires at least two images`);let n=[...e];e.splice(0,e.length,{kind:`append`,direction:t===`+append`?`horizontal`:`vertical`,children:n,appendSettings:qv(n),operations:[]}),this.index++}readOperation(e,t,n){let r=Gv.get(n),i=this.tokens.slice(this.index+1,this.index+1+r);if(i.length!==r||i.some(e=>Xv(e)))throw Error(`missing argument for ${n}`);let a={type:n.slice(1),value:i[0]??``,...r===2?{text:i[1]}:{}};a.type===`density`&&(this.density=Yv(a.value)),(e.at(-1)?.operations??t).push(a),this.index+=r+1}readInput(e,t,n){if(n.startsWith(`-`)||n.startsWith(`+`))throw Error(`unsupported option ${n}`);e.push({kind:`input`,path:n,operations:t.splice(0),density:this.density}),this.index++}finishSequence(e,t){if(t.length>0)throw Error(`operation requires an input image`);if(e.length===0)throw Error(`expected an input image`);if(e.length>1)throw Error(`multiple input files require +append or -append`);return e[0]}};function qv(e){let t={};for(let n of e)for(let e of n.operations)e.type===`background`&&(t.background=e.value),e.type===`gravity`&&(t.gravity=e.value);return t}function Jv(e){if(e.length<2)throw Error(`expected exactly one input file and one output file`);let t=e.at(-1),n=Gv.get(t);if(n!==void 0)throw Error(n>0?`missing argument for ${t}`:`expected an output file`);if(Xv(t))throw Error(`expected an output file`);return{expression:new Kv(e.slice(0,-1)).parse(),outputPath:t}}function Yv(e){let t=Number(e.split(`x`)[0]);if(!Number.isFinite(t)||t<=0)throw Error(`Invalid density: ${e}`);return t}function Xv(e){return e===`(`||e===`)`||e===`+append`||e===`-append`||Gv.has(e)}const Zv=/^(?:\d+(?:x\d*)?|x\d+)(?:[%!^<>@])?$/,Qv=/^\d+x\d+(?:[+-]\d+[+-]\d+)?$/;function $v(e,t,n){if(!(n===`resize`||n===`thumbnail`?Zv:Qv).test(t))throw Error(`Invalid ${n} geometry: ${t}`);return new e.MagickGeometry(t)}function ey(e,t,n){t.resize($v(e,n,`resize`))}function ty(e,t){let n=parseFloat(t);if(isNaN(n))throw Error(`Invalid rotation degrees: ${t}`);e.rotate(n)}function ny(e,t,n,r){let i=$v(e,n,`crop`);r===void 0?t.crop(i):t.crop(i,r)}function ry(e,t){let n=parseInt(t,10);if(isNaN(n)||n<0||n>100)throw Error(`Invalid quality: ${t} (must be 0-100)`);e.quality=n}const iy={northwest:`Northwest`,north:`North`,northeast:`Northeast`,west:`West`,center:`Center`,east:`East`,southwest:`Southwest`,south:`South`,southeast:`Southeast`};function ay(e,t){let n=iy[t.toLowerCase()],r=n?e.Gravity[n]:void 0;if(r===void 0)throw Error(`Invalid gravity: ${t}`);return r}const oy={"auto-orient":e=>e.autoOrient(),"auto-gamma":e=>e.autoGamma(),"auto-level":e=>e.autoLevel(),flip:e=>e.flip(),flop:e=>e.flop(),strip:e=>e.strip(),trim:e=>e.trim(),negate:e=>e.negate(),normalize:e=>e.normalize()};function sy(e){return e.toLowerCase().replaceAll(/[-_ ]/g,``)}function cy(e,t,n){let r=sy(t),i=Object.entries(e).find(([e])=>sy(e)===r);if(!i)throw Error(`Invalid ${n}: ${t}`);return i[1]}function ly(e,t,n,r){let i=$v(e,n,`extent`),a=r.background?new e.MagickColor(r.background):void 0;r.gravity!==void 0&&a?t.extent(i,r.gravity,a):r.gravity===void 0?a?t.extent(i,a):t.extent(i):t.extent(i,r.gravity)}function uy(e,t){let n=`(?:\\d+(?:\\.\\d*)?|\\.\\d+)`,r=e.match(RegExp(`^(${n})(?:x(${n}))?$`));if(!r)throw Error(`Invalid ${t} radius/sigma: ${e}`);return[Number(r[1]),r[2]===void 0?1:Number(r[2])]}function dy(e,t,n,r){let i=n.value.match(/^([+-]\d+)([+-]\d+)$/);if(!i)throw Error(`Invalid annotate offset: ${n.value} (expected +X+Y)`);let a=new e.Drawables;r.gravity!==void 0&&a.gravity(r.gravity),r.fill!==void 0&&a.fillColor(new e.MagickColor(r.fill)),r.undercolor!==void 0&&a.textUnderColor(new e.MagickColor(r.undercolor)),a.font(Vv),r.pointsize!==void 0&&a.fontPointSize(r.pointsize),a.text(Number(i[1]),Number(i[2]),n.text??``).draw(t)}async function fy(e){if(Hv.has(e.Magick))return;let t=Uv??=fetch(Rv).then(async e=>{if(!e.ok)throw Error(`Failed to load annotation font (${e.status})`);return new Uint8Array(await e.arrayBuffer())});try{e.Magick.addFont(Vv,await t),Hv.add(e.Magick)}catch(e){throw Uv===t&&(Uv=null),e}}function py(e){return e.operations.some(e=>e.type===`annotate`)?!0:e.kind===`append`&&e.children.some(py)}function my(e,t,n,r){let i=oy[n.type];if(i){i(t);return}switch(n.type){case`density`:return;case`resize`:ey(e,t,n.value);return;case`thumbnail`:t.thumbnail($v(e,n.value,`thumbnail`));return;case`rotate`:ty(t,n.value);return;case`crop`:ny(e,t,n.value,r.gravity);return;case`quality`:ry(t,n.value);return;case`background`:r.background=n.value,t.backgroundColor=new e.MagickColor(n.value);return;case`extent`:ly(e,t,n.value,r);return;case`alpha`:t.alpha(cy(e.AlphaAction,n.value,`alpha mode`));return;case`colorspace`:t.colorSpace=cy(e.ColorSpace,n.value,`colorspace`);return;case`transparent`:t.transparent(new e.MagickColor(n.value));return;case`blur`:t.blur(...uy(n.value,`blur`));return;case`sharpen`:t.sharpen(...uy(n.value,`sharpen`));return;case`gravity`:r.gravity=ay(e,n.value);return;case`fill`:r.fill=n.value;return;case`undercolor`:r.undercolor=n.value;return;case`pointsize`:{let e=Number(n.value);if(!Number.isFinite(e)||e<=0)throw Error(`Invalid point size: ${n.value}`);r.pointsize=e;return}case`annotate`:dy(e,t,n,r);return}}function hy(e,t,n){let{background:r,gravity:i}=t.appendSettings;if(r===void 0&&i===void 0)return;let a=i===void 0?void 0:ay(e,i),o=r===void 0?void 0:new e.MagickColor(r),s=Math.max(...n.map(e=>e.width)),c=Math.max(...n.map(e=>e.height));for(let r of n){let n=t.direction===`vertical`?s:r.width,i=t.direction===`horizontal`?c:r.height;if(n===r.width&&i===r.height)continue;let l=new e.MagickGeometry(n,i);a!==void 0&&o?r.extent(l,a,o):a===void 0?o&&r.extent(l,o):r.extent(l,a)}}function gy(e,t,n){let r={};for(let i of n)my(e,t,i,r)}function _y(e,t){let n=null,r=Bv(t);return e.write(r,e=>{n=new Uint8Array(e)}),n}async function vy(e,t,n,r,i=[],a=0){if(a===t.children.length)return r(i);await yy(e,t.children[a],n,async o=>{i.push(o),await vy(e,t,n,r,i,a+1),i.pop()})}async function yy(e,t,n,r){if(t.kind===`input`){await e.ImageMagick.read(n.get(t),async n=>{gy(e,n,t.operations),await r(n)});return}await vy(e,t,n,async n=>{hy(e,t,n);let i=e.MagickImageCollection.create();i.push(...n);let a=t.direction===`horizontal`?i.appendHorizontally.bind(i):i.appendVertically.bind(i);try{await a(async n=>{gy(e,n,t.operations),await r(n)})}finally{i.length=0,i.dispose()}})}function by(e){let t=e.match(/^(.*)\[(\d+)\]$/);return t?{path:t[1],scene:Number(t[2])}:{path:e}}async function xy(e,t,n=new Map,r=new Map){if(e.kind===`input`){let{path:i,scene:a}=by(e.path),o=t.fs.resolvePath(t.cwd,i),s=r.get(o);if(s===void 0&&(s=await t.fs.readFileBuffer(o),r.set(o,s)),oa(s)){let t=await sa(s,(a??0)+1,{scale:ca(e.density),format:`png`});return n.set(e,t.bytes),n}return n.set(e,s),n}for(let i of e.children)await xy(i,t,n,r);return n}function Sy(e=`convert`){return C(e,async(t,n)=>{if(t.length===0||t.includes(`--help`)||t.includes(`-h`))return Wv();let r;try{r=Jv(t)}catch(t){return{stdout:``,stderr:`${e}: ${t instanceof Error?t.message:String(t)}\n`,exitCode:1}}try{let e=await xy(r.expression,n),t=await ra({ipk:zv(n)});py(r.expression)&&await fy(t);let i=null;if(await yy(t,r.expression,e,async e=>{i=_y(e,r.outputPath)}),!i||i.byteLength===0)throw Error(`Failed to generate output image`);let a=n.fs.resolvePath(n.cwd,r.outputPath);return await n.fs.writeFile(a,i),{stdout:``,stderr:``,exitCode:0}}catch(t){return{stdout:``,stderr:`${e}: ${t instanceof Error?t.message:String(t)}\n`,exitCode:1}}})}function Cy(){return globalThis.__slicc_lickManager??null}let wy=null;async function Ty(){if(wy)return wy;let{createLickManagerProxy:e}=await import(`./lick-manager-proxy-DMaLHm_t.js`);return wy=e(),wy}async function Ey(){let e=Cy();if(e)return{resolveLickTarget:async t=>e.resolveLickTarget?.(t)??{status:`unverifiable`},createWebhook:(t,n,r)=>e.createWebhook(t,n,r),deleteWebhook:t=>e.deleteWebhook(t),listWebhooks:async()=>e.listWebhooks(),createCronTask:(t,n,r)=>e.createCronTask(t,n,r),deleteCronTask:t=>e.deleteCronTask(t),listCronTasks:async()=>e.listCronTasks()};if(ze())return null;let t=await Ty(),{listCronTasksAsync:n,listWebhooksAsync:r}=await import(`./lick-manager-proxy-DMaLHm_t.js`);return{resolveLickTarget:e=>t.resolveLickTarget(e),createWebhook:(e,n,r)=>t.createWebhook(e,n,r),deleteWebhook:e=>t.deleteWebhook(e),listWebhooks:()=>r(),createCronTask:(e,n,r)=>t.createCronTask(e,n,r),deleteCronTask:e=>t.deleteCronTask(e),listCronTasks:()=>n()}}function Dy(e){if(e.length===0)return`no cones or scoops are registered`;let t=e.slice(0,12),n=e.length>t.length?`, …`:``;return`valid targets: ${t.join(`, `)}${n}`}async function Oy(e,t,n){if(!n||!e)return null;let r;try{r=await e.resolveLickTarget(n)}catch{return null}return r.status===`unresolved`?`${t}: --scoop "${n}" matches no live cone or scoop — its licks would be dropped (${Dy(r.candidates)})\n`:null}function ky(e){return{stdout:``,stderr:`crontask ${e}: kernel host has not booted yet — try again in a moment\n`,exitCode:1}}function Ay(){return{stdout:`usage: crontask <command> [options]
590
590
 
591
591
  Commands:
592
592
  create [options] Create a new cron task
@@ -618,14 +618,14 @@ Examples:
618
618
  crontask create --name every-5min --scoop poller --cron "*/5 * * * *" --filter "() => ({ time: Date.now() })"
619
619
  crontask list
620
620
  crontask delete abc123
621
- `,stderr:``,exitCode:0}}async function My(e,t,n){let r={method:e,headers:Ne({"Content-Type":`application/json`})};n&&(r.body=JSON.stringify(n));let i=await fetch(Me(`/api/crontasks${t}`),r),a=await i.json().catch(()=>({}));return{ok:i.ok,status:i.status,data:a}}const Ny=[`--name`,`--cron`,`--filter`,`--scoop`];function Py(e){return{stdout:``,stderr:`crontask: ${e}\n`,exitCode:1}}async function Fy(e,t,n){let r=w(e.slice(1),{value:Ny});if(`error`in r)return Py(r.error);let i=r.values.get(`--name`),a=r.values.get(`--cron`),o=r.values.get(`--filter`),s=r.values.get(`--scoop`);if(s=ca(s,t),!i)return{stdout:``,stderr:`crontask: --name is required
621
+ `,stderr:``,exitCode:0}}async function jy(e,t,n){let r={method:e,headers:Ne({"Content-Type":`application/json`})};n&&(r.body=JSON.stringify(n));let i=await fetch(Me(`/api/crontasks${t}`),r),a=await i.json().catch(()=>({}));return{ok:i.ok,status:i.status,data:a}}const My=[`--name`,`--cron`,`--filter`,`--scoop`];function Ny(e){return{stdout:``,stderr:`crontask: ${e}\n`,exitCode:1}}async function Py(e,t,n){let r=w(e.slice(1),{value:My});if(`error`in r)return Ny(r.error);let i=r.values.get(`--name`),a=r.values.get(`--cron`),o=r.values.get(`--filter`),s=r.values.get(`--scoop`);if(s=la(s,t),!i)return{stdout:``,stderr:`crontask: --name is required
622
622
  `,exitCode:1};if(!a)return{stdout:``,stderr:`crontask: --cron is required
623
- `,exitCode:1};let c=await ky(await Dy(),`crontask create`,r.values.get(`--scoop`));if(c)return{stdout:``,stderr:c,exitCode:1};if(!n()){if(o)return{stdout:``,stderr:`crontask: --filter is not supported in extension mode (CSP restriction)
624
- `,exitCode:1};let e=await Dy();if(!e)return Ay(`create`);let t=await e.createCronTask(i,a,s),n=`Created cron task "${t.name}"\n`;return n+=`ID: ${t.id}\n`,n+=`Cron: ${t.cron}\n`,t.scoop&&(n+=`Scoop: ${t.scoop}\n`),t.nextRun&&(n+=`Next run: ${new Date(t.nextRun).toLocaleString()}\n`),{stdout:n,stderr:``,exitCode:0}}let{ok:l,data:u}=await My(`POST`,``,{name:i,cron:a,filter:o,scoop:s});if(!l)return{stdout:``,stderr:`crontask: failed to create: ${u.error??`unknown error`}\n`,exitCode:1};let d=u,f=`Created cron task "${d.name}"\n`;return f+=`ID: ${d.id}\n`,f+=`Cron: ${d.cron}\n`,d.scoop&&(f+=`Scoop: ${d.scoop}\n`),d.filter&&(f+=`Filter: ${d.filter}\n`),d.nextRun&&(f+=`Next run: ${new Date(d.nextRun).toLocaleString()}\n`),{stdout:f,stderr:``,exitCode:0}}function Iy(e){let t=`Active cron tasks:
623
+ `,exitCode:1};let c=await Oy(await Ey(),`crontask create`,r.values.get(`--scoop`));if(c)return{stdout:``,stderr:c,exitCode:1};if(!n()){if(o)return{stdout:``,stderr:`crontask: --filter is not supported in extension mode (CSP restriction)
624
+ `,exitCode:1};let e=await Ey();if(!e)return ky(`create`);let t=await e.createCronTask(i,a,s),n=`Created cron task "${t.name}"\n`;return n+=`ID: ${t.id}\n`,n+=`Cron: ${t.cron}\n`,t.scoop&&(n+=`Scoop: ${t.scoop}\n`),t.nextRun&&(n+=`Next run: ${new Date(t.nextRun).toLocaleString()}\n`),{stdout:n,stderr:``,exitCode:0}}let{ok:l,data:u}=await jy(`POST`,``,{name:i,cron:a,filter:o,scoop:s});if(!l)return{stdout:``,stderr:`crontask: failed to create: ${u.error??`unknown error`}\n`,exitCode:1};let d=u,f=`Created cron task "${d.name}"\n`;return f+=`ID: ${d.id}\n`,f+=`Cron: ${d.cron}\n`,d.scoop&&(f+=`Scoop: ${d.scoop}\n`),d.filter&&(f+=`Filter: ${d.filter}\n`),d.nextRun&&(f+=`Next run: ${new Date(d.nextRun).toLocaleString()}\n`),{stdout:f,stderr:``,exitCode:0}}function Fy(e){let t=`Active cron tasks:
625
625
  `;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+=`
626
- `;return t}async function Ly(e,t){let n=w(e.slice(1),{});if(`error`in n)return Py(n.error);if(!t()){let e=await Dy();if(!e)return Ay(`list`);let t=await e.listCronTasks();return t.length===0?{stdout:`No active cron tasks
627
- `,stderr:``,exitCode:0}:{stdout:Iy(t),stderr:``,exitCode:0}}let{ok:r,data:i}=await My(`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
628
- `,stderr:``,exitCode:0}:{stdout:Iy(a),stderr:``,exitCode:0}}async function Ry(e,t){let n=e[0],r=w(e.slice(1),{});if(`error`in r)return Py(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 Dy();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}:Ay(`delete`)}let{ok:a,status:o,data:s}=await My(`DELETE`,`/${i}`);return a?{stdout:`Deleted cron task "${i}"\n`,stderr:``,exitCode:0}:o===404?{stdout:``,stderr:`crontask: task "${i}" not found\n`,exitCode:1}:{stdout:``,stderr:`crontask: failed to delete: ${s.error??`unknown error`}\n`,exitCode:1}}function zy(e={}){let t=e.hasLocalNodeServer??(()=>!1);return C(`crontask`,async(e,n)=>{let r=e[0];if(!r||T(e,{valueFlags:Ny}))return jy();try{switch(r){case`create`:return await Fy(e,n.env,t);case`list`:return await Ly(e,t);case`delete`:case`kill`:return await Ry(e,t);default:return{stdout:``,stderr:`crontask: unknown command "${r}"\n`,exitCode:1}}}catch(e){return{stdout:``,stderr:`crontask: ${e instanceof Error?e.message:String(e)}\n`,exitCode:1}}})}function By(e){return C(`curlwright`,async(t,n)=>{let{runCurlwright:r}=await import(`./run-Bmg4J98v.js`);return r(e,t,n)})}function Vy(e,t={}){if(!Number.isFinite(e)||e<0)return``;if(t.si){if(e<1e3)return`${Math.round(e)} B`;let t=[`kB`,`MB`,`GB`,`TB`],n=e/1e3,r=0;for(;n>=1e3&&r<t.length-1;)n/=1e3,r+=1;return`${n<10?n.toFixed(1):Math.round(n)} ${t[r]}`}if(e<1024)return Number.isInteger(e)?`${e} B`:e>=.1?`${e.toFixed(1)} B`:e>0?`${Math.max(.01,Number(e.toFixed(2)))} B`:`0 B`;let n=[`KB`,`MB`,`GB`,`TB`,`PB`],r=e,i=-1;for(;r>=1024&&i<n.length-1;)r/=1024,i+=1;return`${r.toFixed(1)} ${n[i]}`}function Hy(e){return Vy(e,{si:!1})}const Uy=`slicc-fs`;async function Wy(){try{let e=globalThis.indexedDB;if(!e)return!1;let t=e.databases;return typeof t!=`function`||(await t.call(e)).some(e=>e.name===Uy)}catch{return!0}}async function Gy(){let e=globalThis.indexedDB;return e?new Promise(t=>{let n;try{n=e.deleteDatabase(Uy)}catch{t(`error`);return}n.onsuccess=()=>t(`deleted`),n.onerror=()=>t(`error`),n.onblocked=()=>t(`blocked`)}):`error`}async function Ky(){if(!await Wy())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 qy(){return`slicc-fs-cleanup — delete the legacy slicc-fs IndexedDB
626
+ `;return t}async function Iy(e,t){let n=w(e.slice(1),{});if(`error`in n)return Ny(n.error);if(!t()){let e=await Ey();if(!e)return ky(`list`);let t=await e.listCronTasks();return t.length===0?{stdout:`No active cron tasks
627
+ `,stderr:``,exitCode:0}:{stdout:Fy(t),stderr:``,exitCode:0}}let{ok:r,data:i}=await jy(`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
628
+ `,stderr:``,exitCode:0}:{stdout:Fy(a),stderr:``,exitCode:0}}async function Ly(e,t){let n=e[0],r=w(e.slice(1),{});if(`error`in r)return Ny(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}:ky(`delete`)}let{ok:a,status:o,data:s}=await jy(`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 Ry(e={}){let t=e.hasLocalNodeServer??(()=>!1);return C(`crontask`,async(e,n)=>{let r=e[0];if(!r||T(e,{valueFlags:My}))return Ay();try{switch(r){case`create`:return await Py(e,n.env,t);case`list`:return await Iy(e,t);case`delete`:case`kill`:return await Ly(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 zy(e){return C(`curlwright`,async(t,n)=>{let{runCurlwright:r}=await import(`./run-Bmg4J98v.js`);return r(e,t,n)})}function By(e,t={}){if(!Number.isFinite(e)||e<0)return``;if(t.si){if(e<1e3)return`${Math.round(e)} B`;let t=[`kB`,`MB`,`GB`,`TB`],n=e/1e3,r=0;for(;n>=1e3&&r<t.length-1;)n/=1e3,r+=1;return`${n<10?n.toFixed(1):Math.round(n)} ${t[r]}`}if(e<1024)return Number.isInteger(e)?`${e} B`:e>=.1?`${e.toFixed(1)} B`:e>0?`${Math.max(.01,Number(e.toFixed(2)))} B`:`0 B`;let n=[`KB`,`MB`,`GB`,`TB`,`PB`],r=e,i=-1;for(;r>=1024&&i<n.length-1;)r/=1024,i+=1;return`${r.toFixed(1)} ${n[i]}`}function Vy(e){return By(e,{si:!1})}const Hy=`slicc-fs`;async function Uy(){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===Hy)}catch{return!0}}async function Wy(){let e=globalThis.indexedDB;return e?new Promise(t=>{let n;try{n=e.deleteDatabase(Hy)}catch{t(`error`);return}n.onsuccess=()=>t(`deleted`),n.onerror=()=>t(`error`),n.onblocked=()=>t(`blocked`)}):`error`}async function Gy(){if(!await Uy())return{kind:`absent`,message:`legacy slicc-fs IDB not present — nothing to clean`};let e=await Wy();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 Ky(){return`slicc-fs-cleanup — delete the legacy slicc-fs IndexedDB
629
629
 
630
630
  Usage:
631
631
  slicc-fs-cleanup Delete the legacy slicc-fs IDB.
@@ -634,7 +634,7 @@ Usage:
634
634
  SLICC's filesystem lives in OPFS; the legacy slicc-fs IndexedDB from
635
635
  the pre-OPFS era is never read anymore. This command deletes it on
636
636
  explicit invocation to reclaim the space.
637
- `}const Jy={deleted:0,absent:0,blocked:1,error:1};function Yy(e={}){let t=e.runCleanup??Ky;return C(`slicc-fs-cleanup`,async e=>{if(e.includes(`--help`)||e.includes(`-h`))return{stdout:qy(),stderr:``,exitCode:0};if(e.length>0)return{stdout:``,stderr:`slicc-fs-cleanup: unsupported argument: ${e[0]}\n`,exitCode:1};let n=await t(),r=Jy[n.kind];return r===0?{stdout:`${n.message}\n`,stderr:``,exitCode:r}:{stdout:``,stderr:`slicc-fs-cleanup: ${n.message}\n`,exitCode:r}})}function Xy(e){return`${e} — report VFS backend and storage usage/quota
637
+ `}const qy={deleted:0,absent:0,blocked:1,error:1};function Jy(e={}){let t=e.runCleanup??Gy;return C(`slicc-fs-cleanup`,async e=>{if(e.includes(`--help`)||e.includes(`-h`))return{stdout:Ky(),stderr:``,exitCode:0};if(e.length>0)return{stdout:``,stderr:`slicc-fs-cleanup: unsupported argument: ${e[0]}\n`,exitCode:1};let n=await t(),r=qy[n.kind];return r===0?{stdout:`${n.message}\n`,stderr:``,exitCode:r}:{stdout:``,stderr:`slicc-fs-cleanup: ${n.message}\n`,exitCode:r}})}function Yy(e){return`${e} — report VFS backend and storage usage/quota
638
638
 
639
639
  Usage:
640
640
  ${e} Show diagnostics (raw bytes).
@@ -642,16 +642,16 @@ Usage:
642
642
  ${e} --help Show this help.
643
643
 
644
644
  Read-only. Cleanup of the legacy IndexedDB lives in 'slicc-fs-cleanup'.
645
- `}function Zy(){return`diskutil — VFS diagnostics alias
645
+ `}function Xy(){return`diskutil — VFS diagnostics alias
646
646
 
647
647
  Usage:
648
648
  diskutil info Show VFS diagnostics (alias for 'df -h').
649
649
  diskutil --help Show this help.
650
650
 
651
651
  Read-only. See 'df --help' for the underlying command.
652
- `}function Qy(e,t){return e===null?`unavailable`:t?Hy(e):`${e}`}async function $y(e){let t=e.fs?.backend??`unknown`,n=null,r=null,i=null,a=globalThis.navigator?.storage;if(a){try{let e=await a.estimate();n=typeof e.usage==`number`?e.usage:null,r=typeof e.quota==`number`?e.quota:null}catch{}if(typeof a.persisted==`function`)try{i=await a.persisted()}catch{i=null}}let o=null,s=e.legacyIdbExists??Wy;try{o=await s()}catch{o=null}return{backend:t,usage:n,quota:r,persisted:i,legacyIdbPresent:o}}function eb(e,t){let n=e.usage!==null&&e.quota!==null&&e.quota>0?`${Math.round(e.usage/e.quota*100)}%`:`unavailable`,r=e.persisted===null?`unavailable`:e.persisted?`true`:`false`,i=e.legacyIdbPresent===null?`unavailable`:e.legacyIdbPresent?`present (slicc-fs)`:`absent`;return`${[`Backend: ${e.backend}`,`Usage: ${Qy(e.usage,t)}`,`Quota: ${Qy(e.quota,t)}`,`Used: ${n}`,`Persisted: ${r}`,`Legacy IDB: ${i}`].join(`
653
- `)}\n`}function tb(e={}){return C(`df`,async t=>{if(t.includes(`--help`))return{stdout:Xy(`df`),stderr:``,exitCode:0};let n=new Set([`-h`,`--human-readable`]),r=t.find(e=>!n.has(e));if(r!==void 0)return{stdout:``,stderr:`df: unsupported argument: ${r}\n`,exitCode:1};let i=t.includes(`-h`)||t.includes(`--human-readable`);return{stdout:eb(await $y(e),i),stderr:``,exitCode:0}})}function nb(e={}){return C(`diskutil`,async t=>{if(t.includes(`--help`))return{stdout:Zy(),stderr:``,exitCode:0};let n=t[0];return n===`info`?{stdout:eb(await $y(e),!0),stderr:``,exitCode:0}:{stdout:``,stderr:n?`diskutil: unsupported subcommand: ${n} (try 'diskutil info')\n`:`diskutil: missing subcommand (try 'diskutil info')
654
- `,exitCode:1}})}const rb=e(`di`),ib=new WeakMap;async function ab(e,t){let n=ib.get(e);if(n)return n;let r;if(await e.exists(`/workspace/node_modules/pyodide/pyodide-lock.json`))try{r=await e.readFile(`/workspace/node_modules/pyodide/pyodide-lock.json`)}catch(e){return rb.error(`failed to read pyodide-lock.json`,e),null}else{let e=`${qr}pyodide-lock.json`,n;try{n=await t(e,{method:`GET`,headers:{Accept:`application/json`},timeoutMs:3e4})}catch(e){return rb.error(`failed to fetch pyodide-lock.json from CDN`,e),null}if(n.status<200||n.status>=300)return rb.error(`pyodide-lock.json CDN fetch returned HTTP ${n.status}`),null;r=Ae(n.body)}let i;try{i=JSON.parse(r)}catch(e){return rb.error(`pyodide-lock.json was not valid JSON`,e),null}let a=new Map;for(let[e,t]of Object.entries(i.packages??{}))!t||typeof t.file_name!=`string`||a.set(Wr(t.name??e),t);return ib.set(e,a),a}async function ob(e,t,n,r){let i=await ab(e,t);if(!i)return null;let a=i.get(Wr(n));if(!a?.file_name||!a.version||!a.sha256)return null;if(r&&r!==a.version)throw Error(`di: ${n}==${r} requested but the Pyodide lockfile pins ${a.name??n}==${a.version} (the Pyodide CDN serves only the locked version — omit the version, or use real uv locally)`);return{name:a.name??n,version:a.version,source:`pyodide-cdn`,fileName:a.file_name,sha256:a.sha256,url:`${qr}${a.file_name}`}}function sb(e,t){let n=`https://pypi.org/pypi/${encodeURIComponent(e)}`;return t?`${n}/${encodeURIComponent(t)}/json`:`${n}/json`}function cb(e){if(!e.endsWith(`.whl`))return null;let t=e.slice(0,-4).split(`-`);return t.length<3?null:t[t.length-1]}async function lb(e,t,n){let r=`di: PyPI lookup for ${t}${n?`==${n}`:``}`,i=sb(t,n),a;try{a=await e(i,{method:`GET`,headers:{Accept:`application/json`},timeoutMs:3e4})}catch(e){let t=e instanceof Error?e.message:String(e);throw Error(`${r}: network error (${t})`)}if(a.status===404)throw Error(`di: package '${t}'${n?` version '${n}'`:``} not found on PyPI`);if(a.status<200||a.status>=300){let e=a.statusText?` ${a.statusText}`:``;throw Error(`${r} returned HTTP ${a.status}${e}`)}let o;try{o=JSON.parse(Ae(a.body))}catch(e){let t=e instanceof Error?e.message:String(e);throw Error(`${r}: response was not valid JSON (${t})`)}let s=o.info?.name??t,c=o.info?.version??n;if(!c)throw Error(`${r}: PyPI did not report a version for '${t}'`);let l=(o.urls??[]).filter(e=>e.packagetype===`bdist_wheel`&&typeof e.filename==`string`&&typeof e.url==`string`);if(l.length===0)throw Error(`di: ${s}==${c} has no wheel on PyPI (sdist/source-only packages are not supported in SLICC's di subset — use real uv locally)`);let u=l.find(e=>cb(e.filename)===`any`);if(!u){let e=l.map(e=>e.filename).join(`, `);throw Error(`di: ${s}==${c} only ships platform-specific wheels (${e}); SLICC's di subset installs pure-Python (none-any) wheels only — use real uv locally for compiled packages`)}let d=u.digests?.sha256;if(!d)throw Error(`di: PyPI did not provide a sha256 digest for ${u.filename}`);return{name:s,version:c,source:`pypi`,fileName:u.filename,sha256:d,url:u.url}}const ub=`/workspace/python_wheels`,db=/^[A-Za-z0-9][A-Za-z0-9._-]*$/;function fb(e){let t=e.trim();if(!t)throw Error(`di: package spec is required`);let n=t,r,i=t.indexOf(`==`);if(i!==-1)n=t.slice(0,i),r=t.slice(i+2);else{let e=t.indexOf(`@`);e!==-1&&(n=t.slice(0,e),r=t.slice(e+1))}if(n=n.trim(),r=r?.trim(),!db.test(n))throw Error(`di: invalid package name '${n}'`);if(r!==void 0&&r===``)throw Error(`di: empty version in spec '${e}'`);return{name:n,version:r}}function pb(e){return e instanceof Error?e:Error(String(e))}async function mb(e,t,n){return await ob(e,t,n.name,n.version)||lb(t,n.name,n.version)}async function hb(e,t,n){let r=await mb(e,t,n),i=await ti(t,{url:r.url,sha256:r.sha256,label:`di: download ${r.name}==${r.version}`});await e.mkdir(ub,{recursive:!0});let a=S(ub,r.fileName),o=!0;if(await e.exists(a)){let t=await e.readFile(a,{encoding:`binary`}),n=await ee(t);if(n===r.sha256.toLowerCase())o=!1;else throw Error(`di: ${r.fileName} is already staged with different bytes (sha256 ${n} != ${r.sha256.toLowerCase()}); refusing to overwrite`)}else await e.writeFile(a,i);return{name:r.name,version:r.version,source:r.source,fileName:r.fileName,sha256:r.sha256,staged:o}}async function gb(e,t,n,r){let i=await Xr(e,n),a=[],o=[];for(let n of r){let r;try{r=fb(n)}catch(e){o.push({spec:n,error:pb(e)});continue}try{a.push(await hb(e,t,r))}catch(e){o.push({spec:n,error:pb(e)})}}if(a.length>0){let t=await $r(e,i),n=t.dependencies,r=await Ur(e,i);for(let e of a)n=Br(n,e.name,e.version),r=ei(r,{name:e.name,version:e.version,source:e.source,fileName:e.fileName,sha256:e.sha256});await Yr(e,i,{...t,dependencies:n}),await Kr(e,i,r)}return{results:a,errors:o,manifestDir:i}}async function _b(e,t){let n=await Jr(e,t);if(!n)return null;let r=await $r(e,n),i=await Ur(e,n),a=new Map(i.map(e=>[Wr(e.name),e]));return r.dependencies.map(e=>{let{name:t,version:n}=Gr(e),r=a.get(Wr(t));return{name:t,version:n||r?.version||`?`,source:r?.source??`unknown`}})}const vb=[];function yb(e){return`${e} - minimal Python package manager (pure-Python + Pyodide wheels)
652
+ `}function Zy(e,t){return e===null?`unavailable`:t?Vy(e):`${e}`}async function Qy(e){let t=e.fs?.backend??`unknown`,n=null,r=null,i=null,a=globalThis.navigator?.storage;if(a){try{let e=await a.estimate();n=typeof e.usage==`number`?e.usage:null,r=typeof e.quota==`number`?e.quota:null}catch{}if(typeof a.persisted==`function`)try{i=await a.persisted()}catch{i=null}}let o=null,s=e.legacyIdbExists??Uy;try{o=await s()}catch{o=null}return{backend:t,usage:n,quota:r,persisted:i,legacyIdbPresent:o}}function $y(e,t){let n=e.usage!==null&&e.quota!==null&&e.quota>0?`${Math.round(e.usage/e.quota*100)}%`:`unavailable`,r=e.persisted===null?`unavailable`:e.persisted?`true`:`false`,i=e.legacyIdbPresent===null?`unavailable`:e.legacyIdbPresent?`present (slicc-fs)`:`absent`;return`${[`Backend: ${e.backend}`,`Usage: ${Zy(e.usage,t)}`,`Quota: ${Zy(e.quota,t)}`,`Used: ${n}`,`Persisted: ${r}`,`Legacy IDB: ${i}`].join(`
653
+ `)}\n`}function eb(e={}){return C(`df`,async t=>{if(t.includes(`--help`))return{stdout:Yy(`df`),stderr:``,exitCode:0};let n=new Set([`-h`,`--human-readable`]),r=t.find(e=>!n.has(e));if(r!==void 0)return{stdout:``,stderr:`df: unsupported argument: ${r}\n`,exitCode:1};let i=t.includes(`-h`)||t.includes(`--human-readable`);return{stdout:$y(await Qy(e),i),stderr:``,exitCode:0}})}function tb(e={}){return C(`diskutil`,async t=>{if(t.includes(`--help`))return{stdout:Xy(),stderr:``,exitCode:0};let n=t[0];return n===`info`?{stdout:$y(await Qy(e),!0),stderr:``,exitCode:0}:{stdout:``,stderr:n?`diskutil: unsupported subcommand: ${n} (try 'diskutil info')\n`:`diskutil: missing subcommand (try 'diskutil info')
654
+ `,exitCode:1}})}const nb=e(`di`),rb=new WeakMap;async function ib(e,t){let n=rb.get(e);if(n)return n;let r;if(await e.exists(`/workspace/node_modules/pyodide/pyodide-lock.json`))try{r=await e.readFile(`/workspace/node_modules/pyodide/pyodide-lock.json`)}catch(e){return nb.error(`failed to read pyodide-lock.json`,e),null}else{let e=`${Jr}pyodide-lock.json`,n;try{n=await t(e,{method:`GET`,headers:{Accept:`application/json`},timeoutMs:3e4})}catch(e){return nb.error(`failed to fetch pyodide-lock.json from CDN`,e),null}if(n.status<200||n.status>=300)return nb.error(`pyodide-lock.json CDN fetch returned HTTP ${n.status}`),null;r=Ae(n.body)}let i;try{i=JSON.parse(r)}catch(e){return nb.error(`pyodide-lock.json was not valid JSON`,e),null}let a=new Map;for(let[e,t]of Object.entries(i.packages??{}))!t||typeof t.file_name!=`string`||a.set(Gr(t.name??e),t);return rb.set(e,a),a}async function ab(e,t,n,r){let i=await ib(e,t);if(!i)return null;let a=i.get(Gr(n));if(!a?.file_name||!a.version||!a.sha256)return null;if(r&&r!==a.version)throw Error(`di: ${n}==${r} requested but the Pyodide lockfile pins ${a.name??n}==${a.version} (the Pyodide CDN serves only the locked version — omit the version, or use real uv locally)`);return{name:a.name??n,version:a.version,source:`pyodide-cdn`,fileName:a.file_name,sha256:a.sha256,url:`${Jr}${a.file_name}`}}function ob(e,t){let n=`https://pypi.org/pypi/${encodeURIComponent(e)}`;return t?`${n}/${encodeURIComponent(t)}/json`:`${n}/json`}function sb(e){if(!e.endsWith(`.whl`))return null;let t=e.slice(0,-4).split(`-`);return t.length<3?null:t[t.length-1]}async function cb(e,t,n){let r=`di: PyPI lookup for ${t}${n?`==${n}`:``}`,i=ob(t,n),a;try{a=await e(i,{method:`GET`,headers:{Accept:`application/json`},timeoutMs:3e4})}catch(e){let t=e instanceof Error?e.message:String(e);throw Error(`${r}: network error (${t})`)}if(a.status===404)throw Error(`di: package '${t}'${n?` version '${n}'`:``} not found on PyPI`);if(a.status<200||a.status>=300){let e=a.statusText?` ${a.statusText}`:``;throw Error(`${r} returned HTTP ${a.status}${e}`)}let o;try{o=JSON.parse(Ae(a.body))}catch(e){let t=e instanceof Error?e.message:String(e);throw Error(`${r}: response was not valid JSON (${t})`)}let s=o.info?.name??t,c=o.info?.version??n;if(!c)throw Error(`${r}: PyPI did not report a version for '${t}'`);let l=(o.urls??[]).filter(e=>e.packagetype===`bdist_wheel`&&typeof e.filename==`string`&&typeof e.url==`string`);if(l.length===0)throw Error(`di: ${s}==${c} has no wheel on PyPI (sdist/source-only packages are not supported in SLICC's di subset — use real uv locally)`);let u=l.find(e=>sb(e.filename)===`any`);if(!u){let e=l.map(e=>e.filename).join(`, `);throw Error(`di: ${s}==${c} only ships platform-specific wheels (${e}); SLICC's di subset installs pure-Python (none-any) wheels only — use real uv locally for compiled packages`)}let d=u.digests?.sha256;if(!d)throw Error(`di: PyPI did not provide a sha256 digest for ${u.filename}`);return{name:s,version:c,source:`pypi`,fileName:u.filename,sha256:d,url:u.url}}const lb=`/workspace/python_wheels`,ub=/^[A-Za-z0-9][A-Za-z0-9._-]*$/;function db(e){let t=e.trim();if(!t)throw Error(`di: package spec is required`);let n=t,r,i=t.indexOf(`==`);if(i!==-1)n=t.slice(0,i),r=t.slice(i+2);else{let e=t.indexOf(`@`);e!==-1&&(n=t.slice(0,e),r=t.slice(e+1))}if(n=n.trim(),r=r?.trim(),!ub.test(n))throw Error(`di: invalid package name '${n}'`);if(r!==void 0&&r===``)throw Error(`di: empty version in spec '${e}'`);return{name:n,version:r}}function fb(e){return e instanceof Error?e:Error(String(e))}async function pb(e,t,n){return await ab(e,t,n.name,n.version)||cb(t,n.name,n.version)}async function mb(e,t,n){let r=await pb(e,t,n),i=await ni(t,{url:r.url,sha256:r.sha256,label:`di: download ${r.name}==${r.version}`});await e.mkdir(lb,{recursive:!0});let a=S(lb,r.fileName),o=!0;if(await e.exists(a)){let t=await e.readFile(a,{encoding:`binary`}),n=await ee(t);if(n===r.sha256.toLowerCase())o=!1;else throw Error(`di: ${r.fileName} is already staged with different bytes (sha256 ${n} != ${r.sha256.toLowerCase()}); refusing to overwrite`)}else await e.writeFile(a,i);return{name:r.name,version:r.version,source:r.source,fileName:r.fileName,sha256:r.sha256,staged:o}}async function hb(e,t,n,r){let i=await Zr(e,n),a=[],o=[];for(let n of r){let r;try{r=db(n)}catch(e){o.push({spec:n,error:fb(e)});continue}try{a.push(await mb(e,t,r))}catch(e){o.push({spec:n,error:fb(e)})}}if(a.length>0){let t=await ei(e,i),n=t.dependencies,r=await Wr(e,i);for(let e of a)n=Vr(n,e.name,e.version),r=ti(r,{name:e.name,version:e.version,source:e.source,fileName:e.fileName,sha256:e.sha256});await Xr(e,i,{...t,dependencies:n}),await qr(e,i,r)}return{results:a,errors:o,manifestDir:i}}async function gb(e,t){let n=await Yr(e,t);if(!n)return null;let r=await ei(e,n),i=await Wr(e,n),a=new Map(i.map(e=>[Gr(e.name),e]));return r.dependencies.map(e=>{let{name:t,version:n}=Kr(e),r=a.get(Gr(t));return{name:t,version:n||r?.version||`?`,source:r?.source??`unknown`}})}const _b=[];function vb(e){return`${e} - minimal Python package manager (pure-Python + Pyodide wheels)
655
655
 
656
656
  Usage:
657
657
  ${e} add <pkg>[@<version>] [<pkg> ...] resolve, stage, and record wheels
@@ -664,20 +664,20 @@ Resolution:
664
664
  staged under /workspace/python_wheels/ and recorded in pyproject.toml + uv.lock.
665
665
 
666
666
  Anything else is not implemented in SLICC's ${e} subset; use real uv locally.
667
- `}function bb(e,t){return{stdout:``,stderr:`${e}: '${t}' is not implemented in SLICC's di/uv subset; use real uv locally. Run '${e} --help' for supported verbs.\n`,exitCode:1}}function xb(e){return e instanceof Error?e.message:String(e)}function Sb(e){let t=Math.max(4,...e.map(e=>e.name.length)),n=Math.max(7,...e.map(e=>e.version.length));return`${e.map(e=>`${e.name.padEnd(t)} ${e.version.padEnd(n)} (${e.source})`).join(`
668
- `)}\n`}async function Cb(e,t,n,r){let i=w(t,{value:vb});if(`error`in i)return{stdout:``,stderr:`${e}: ${i.error}\n`,exitCode:1};let a=i.positionals;if(a.length===0)return{stdout:``,stderr:`${e}: add requires at least one package\n`,exitCode:1};let o;try{o=await gb(r.fs,r.fetch,n.cwd,a)}catch(t){return{stdout:``,stderr:`${e}: ${xb(t)}\n`,exitCode:1}}let s=o.results.map(t=>t.staged?`${e}: added ${t.name}==${t.version} (${t.source}) -> ${t.fileName}`:`${e}: ${t.name}==${t.version} already staged (${t.source})`),c=o.errors.map(t=>`${e}: failed to add ${t.spec}: ${xb(t.error)}`);return{stdout:s.length>0?`${s.join(`
667
+ `}function yb(e,t){return{stdout:``,stderr:`${e}: '${t}' is not implemented in SLICC's di/uv subset; use real uv locally. Run '${e} --help' for supported verbs.\n`,exitCode:1}}function bb(e){return e instanceof Error?e.message:String(e)}function xb(e){let t=Math.max(4,...e.map(e=>e.name.length)),n=Math.max(7,...e.map(e=>e.version.length));return`${e.map(e=>`${e.name.padEnd(t)} ${e.version.padEnd(n)} (${e.source})`).join(`
668
+ `)}\n`}async function Sb(e,t,n,r){let i=w(t,{value:_b});if(`error`in i)return{stdout:``,stderr:`${e}: ${i.error}\n`,exitCode:1};let a=i.positionals;if(a.length===0)return{stdout:``,stderr:`${e}: add requires at least one package\n`,exitCode:1};let o;try{o=await hb(r.fs,r.fetch,n.cwd,a)}catch(t){return{stdout:``,stderr:`${e}: ${bb(t)}\n`,exitCode:1}}let s=o.results.map(t=>t.staged?`${e}: added ${t.name}==${t.version} (${t.source}) -> ${t.fileName}`:`${e}: ${t.name}==${t.version} already staged (${t.source})`),c=o.errors.map(t=>`${e}: failed to add ${t.spec}: ${bb(t.error)}`);return{stdout:s.length>0?`${s.join(`
669
669
  `)}\n`:``,stderr:c.length>0?`${c.join(`
670
- `)}\n`:``,exitCode:o.errors.length===0?0:1}}async function wb(e,t,n,r){let i=w(t,{value:vb});if(`error`in i)return{stdout:``,stderr:`${e}: ${i.error}\n`,exitCode:1};let a=await _b(r.fs,n.cwd);return a===null?{stdout:``,stderr:`${e}: no pyproject.toml found (run '${e} add <pkg>' first)\n`,exitCode:0}:a.length===0?{stdout:`${e}: no dependencies recorded\n`,stderr:``,exitCode:0}:{stdout:Sb(a),stderr:``,exitCode:0}}function Tb(e,t){return C(e,async(n,r)=>{if(n.length===0)return{stdout:yb(e),stderr:`${e}: missing verb\n`,exitCode:1};if(T(n,{valueFlags:vb}))return{stdout:yb(e),stderr:``,exitCode:0};let i=n[0],a=n.slice(1);return i===`add`?Cb(e,a,r,t):i===`list`?wb(e,a,r,t):bb(e,i)})}const Eb=`https://cloudflare-dns.com/dns-query`,Db=`https://dns.quad9.net/dns-query`,Ob=`usage: dig <name> [type] [@server] [+short] [--json]`,kb=[`A`,`AAAA`,`MX`,`TXT`,`CNAME`,`NS`,`SOA`,`SRV`,`PTR`,`CAA`],Ab={"1.1.1.1":Eb,"1.0.0.1":Eb,"cloudflare-dns.com":Eb,"8.8.8.8":`https://dns.google/resolve`,"8.8.4.4":`https://dns.google/resolve`,"dns.google":`https://dns.google/resolve`,"9.9.9.9":Db,"149.112.112.112":Db,"dns.quad9.net":Db};function jb(e){let t=e.split(`.`);if(t.length!==4)return;let n=t.map(Number);if(!(t.some(e=>!/^[0-9]+$/.test(e))||n.some(e=>!Number.isInteger(e)||e<0||e>255)))return n}function Mb(e){if(e.includes(`%`))return;let t=e;if(e.includes(`.`)){let n=e.lastIndexOf(`:`),r=n>=0?jb(e.slice(n+1)):void 0;if(!r)return;let i=[r[0]*256+r[1],r[2]*256+r[3]].map(e=>e.toString(16));t=`${e.slice(0,n+1)}${i.join(`:`)}`}let n=t.split(`::`);if(n.length>2)return;let r=n[0]?n[0].split(`:`):[],i=n[1]?n[1].split(`:`):[],a=[...r,...i];if(!a.some(e=>!/^[0-9a-f]{1,4}$/i.test(e))){if(n.length===1)return a.length===8?a:void 0;if(!(a.length>=8))return[...r,...Array(8-a.length).fill(`0`),...i]}}function Nb(e){let t=jb(e);if(t)return`${t.reverse().join(`.`)}.in-addr.arpa`;let n=Mb(e);if(n)return`${n.map(e=>e.padStart(4,`0`)).join(``).split(``).reverse().join(`.`)}.ip6.arpa`}function Pb(e){return{kind:`error`,message:`dig: '${e}' is not a valid record type; ${Ob}\n`}}function Fb(e,t,n){let r=e[t+1]?.trim();if(!r)return{error:{kind:`error`,message:`dig: -x requires an address
671
- `}};let i=Nb(r);return i?n.name?{error:Pb(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 Ib(e,t,n){return n.server?{error:{kind:`error`,message:`dig: multiple @server arguments
670
+ `)}\n`:``,exitCode:o.errors.length===0?0:1}}async function Cb(e,t,n,r){let i=w(t,{value:_b});if(`error`in i)return{stdout:``,stderr:`${e}: ${i.error}\n`,exitCode:1};let a=await gb(r.fs,n.cwd);return a===null?{stdout:``,stderr:`${e}: no pyproject.toml found (run '${e} add <pkg>' first)\n`,exitCode:0}:a.length===0?{stdout:`${e}: no dependencies recorded\n`,stderr:``,exitCode:0}:{stdout:xb(a),stderr:``,exitCode:0}}function wb(e,t){return C(e,async(n,r)=>{if(n.length===0)return{stdout:vb(e),stderr:`${e}: missing verb\n`,exitCode:1};if(T(n,{valueFlags:_b}))return{stdout:vb(e),stderr:``,exitCode:0};let i=n[0],a=n.slice(1);return i===`add`?Sb(e,a,r,t):i===`list`?Cb(e,a,r,t):yb(e,i)})}const Tb=`https://cloudflare-dns.com/dns-query`,Eb=`https://dns.quad9.net/dns-query`,Db=`usage: dig <name> [type] [@server] [+short] [--json]`,Ob=[`A`,`AAAA`,`MX`,`TXT`,`CNAME`,`NS`,`SOA`,`SRV`,`PTR`,`CAA`],kb={"1.1.1.1":Tb,"1.0.0.1":Tb,"cloudflare-dns.com":Tb,"8.8.8.8":`https://dns.google/resolve`,"8.8.4.4":`https://dns.google/resolve`,"dns.google":`https://dns.google/resolve`,"9.9.9.9":Eb,"149.112.112.112":Eb,"dns.quad9.net":Eb};function Ab(e){let t=e.split(`.`);if(t.length!==4)return;let n=t.map(Number);if(!(t.some(e=>!/^[0-9]+$/.test(e))||n.some(e=>!Number.isInteger(e)||e<0||e>255)))return n}function jb(e){if(e.includes(`%`))return;let t=e;if(e.includes(`.`)){let n=e.lastIndexOf(`:`),r=n>=0?Ab(e.slice(n+1)):void 0;if(!r)return;let i=[r[0]*256+r[1],r[2]*256+r[3]].map(e=>e.toString(16));t=`${e.slice(0,n+1)}${i.join(`:`)}`}let n=t.split(`::`);if(n.length>2)return;let r=n[0]?n[0].split(`:`):[],i=n[1]?n[1].split(`:`):[],a=[...r,...i];if(!a.some(e=>!/^[0-9a-f]{1,4}$/i.test(e))){if(n.length===1)return a.length===8?a:void 0;if(!(a.length>=8))return[...r,...Array(8-a.length).fill(`0`),...i]}}function Mb(e){let t=Ab(e);if(t)return`${t.reverse().join(`.`)}.in-addr.arpa`;let n=jb(e);if(n)return`${n.map(e=>e.padStart(4,`0`)).join(``).split(``).reverse().join(`.`)}.ip6.arpa`}function Nb(e){return{kind:`error`,message:`dig: '${e}' is not a valid record type; ${Db}\n`}}function Pb(e,t,n){let r=e[t+1]?.trim();if(!r)return{error:{kind:`error`,message:`dig: -x requires an address
671
+ `}};let i=Mb(r);return i?n.name?{error:Nb(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 Fb(e,t,n){return n.server?{error:{kind:`error`,message:`dig: multiple @server arguments
672
672
  `}}:(n.server=e.slice(1).trim(),n.server?{nextIndex:t}:{error:{kind:`error`,message:`dig: empty @server argument
673
- `}})}function Lb(e,t,n){let r=e.trim(),i=r.toUpperCase(),a=n.name?.toUpperCase();if(kb.includes(i)&&!n.type&&n.name)n.type=i;else if(!n.name)n.name=r;else if(a&&kb.includes(a)&&!n.type)n.name=r,n.type=a;else return{error:Pb(r)};return{nextIndex:t}}function Rb(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`?Fb(e,t,n):r.startsWith(`@`)?Ib(r,t,n):r.startsWith(`-`)?{error:{kind:`error`,message:`dig: unknown option: ${r}\n`}}:Lb(r,t,n)}function zb(e){if(e.short&&e.json)return{kind:`error`,message:`dig: +short and --json are mutually exclusive
674
- `};if(!e.name)return{kind:`error`,message:`dig: missing domain name\n${Ob}\n`};let t=e.server?.toLowerCase(),n=t?Ab[t]:void 0,r=e.server&&!n?`dig: note: @${e.server} not supported over DoH; using cloudflare-dns.com\n`:``;return{kind:`query`,name:e.name,type:e.type??`A`,short:e.short,json:e.json,resolverUrl:n??`https://cloudflare-dns.com/dns-query`,fallbackNote:r}}function Bb(e){if(e.includes(`-v`)||e.includes(`--version`))return{kind:`version`};let t={short:!1,json:!1};for(let n=0;n<e.length;n+=1){let r=Rb(e,n,t);if(`error`in r)return r.error;n=r.nextIndex}return zb(t)}const Vb={A:1,NS:2,CNAME:5,SOA:6,PTR:12,MX:15,TXT:16,AAAA:28,SRV:33,CAA:257},Hb=new Set(`#/:<>?@[\\]^|`);function Ub(e){return Array.from(e).some(e=>{let t=e.codePointAt(0)??0;return t<=127&&(t<33||t===127||Hb.has(e))})}function Wb(e){if(Ub(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 Gb(e){if(e===`.`)return``;let t=e.endsWith(`.`)?e.slice(0,-1):e,n=t.split(`.`);if(!t||n.some(e=>e.length===0))throw Error(`invalid DNS name: ${e}`);try{return n.map(Wb).join(`.`)}catch{throw Error(`invalid DNS name: ${e}`)}}function Kb(e,t){let n=Gb(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=Vb[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 qb(e,n,r){return`${e}?dns=${t(Kb(n,r)).replaceAll(`+`,`-`).replaceAll(`/`,`_`).replace(/=+$/,``)}`}function Jb(e,t,n){if(t<0||n<0||t+n>e.length)throw Error(`truncated DNS message`)}function Yb(e,t){let n=[],r=new Set,i=t,a=t,o=!1,s=1;for(let t=0;t<=e.length;t+=1){Jb(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){Jb(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(Jb(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 z(e,t){return Jb(e,t,2),new DataView(e.buffer,e.byteOffset,e.byteLength).getUint16(t)}function Xb(e,t){return Jb(e,t,4),new DataView(e.buffer,e.byteOffset,e.byteLength).getUint32(t)}function Zb(e,t){let n=Array.from({length:8},(n,r)=>z(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 Qb(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 $b(e,t,n){let r=t,i=[];for(;r<n;){let t=e[r];if(Jb(e,r+1,t),r+t+1>n)throw Error(`invalid TXT record`);i.push(Qb(e,r+1,r+1+t)),r+=t+1}return i.join(` `)}function ex(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 tx(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 Zb(e,n)}if([2,5,12].includes(t)){let t=Yb(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=Yb(e,n+2);if(t.nextOffset!==r)throw Error(`invalid MX record`);return`${z(e,n)} ${t.name}`}if(t===16)return $b(e,n,r);if(t===6){let t=Yb(e,n),i=Yb(e,t.nextOffset);if(i.nextOffset+20!==r)throw Error(`invalid SOA record`);let a=Array.from({length:5},(t,n)=>Xb(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=Yb(e,n+6);if(t.nextOffset!==r)throw Error(`invalid SRV record`);return`${z(e,n)} ${z(e,n+2)} ${z(e,n+4)} ${t.name}`}if(t===257)return ex(e,n,r);let i=Array.from(e.subarray(n,r),e=>e.toString(16).padStart(2,`0`));return`\\# ${r-n} ${i.join(``)}`}function nx(e,t,n,r){let i=[],a=t;for(let t=0;t<n;t+=1){let t=Yb(e,a);a=t.nextOffset,Jb(e,a,10);let n=z(e,a),o=z(e,a+2),s=Xb(e,a+4),c=z(e,a+8),l=a+10,u=l+c;Jb(e,l,c);let d=tx(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 rx(e){return e.replace(/[A-Z]/g,e=>e.toLowerCase())}function ix(e,t,n,r,i){let a=Gb(r).split(`.`).filter(Boolean);if(!(e.labels.length===a.length&&e.labels.every((e,t)=>rx(e)===rx(a[t])))||t!==Vb[i]||n!==1)throw Error(`unexpected DNS response question`)}function ax(e,t,n){Jb(e,0,12);let r=z(e,2);if(z(e,0)!==0||!(r&32768))throw Error(`invalid DNS response`);if(r&512)throw Error(`truncated DNS response`);let i=z(e,4),a=z(e,6),o=z(e,8),s=z(e,10);if(i!==1)throw Error(`invalid DNS question count`);let c=12,l=Yb(e,c);c=l.nextOffset,Jb(e,c,4),ix(l,z(e,c),z(e,c+2),t,n),c+=4;let u=nx(e,c,a,!0);if(nx(e,nx(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 ox={1:`A`,2:`NS`,5:`CNAME`,6:`SOA`,12:`PTR`,15:`MX`,16:`TXT`,28:`AAAA`,33:`SRV`,257:`CAA`},sx={0:`NOERROR`,1:`FORMERR`,2:`SERVFAIL`,3:`NXDOMAIN`,4:`NOTIMP`,5:`REFUSED`};function cx(){return{stdout:`usage: dig <name> [type] [@server] [+opts] [--json]
673
+ `}})}function Ib(e,t,n){let r=e.trim(),i=r.toUpperCase(),a=n.name?.toUpperCase();if(Ob.includes(i)&&!n.type&&n.name)n.type=i;else if(!n.name)n.name=r;else if(a&&Ob.includes(a)&&!n.type)n.name=r,n.type=a;else return{error:Nb(r)};return{nextIndex:t}}function Lb(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`?Pb(e,t,n):r.startsWith(`@`)?Fb(r,t,n):r.startsWith(`-`)?{error:{kind:`error`,message:`dig: unknown option: ${r}\n`}}:Ib(r,t,n)}function Rb(e){if(e.short&&e.json)return{kind:`error`,message:`dig: +short and --json are mutually exclusive
674
+ `};if(!e.name)return{kind:`error`,message:`dig: missing domain name\n${Db}\n`};let t=e.server?.toLowerCase(),n=t?kb[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 zb(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=Lb(e,n,t);if(`error`in r)return r.error;n=r.nextIndex}return Rb(t)}const Bb={A:1,NS:2,CNAME:5,SOA:6,PTR:12,MX:15,TXT:16,AAAA:28,SRV:33,CAA:257},Vb=new Set(`#/:<>?@[\\]^|`);function Hb(e){return Array.from(e).some(e=>{let t=e.codePointAt(0)??0;return t<=127&&(t<33||t===127||Vb.has(e))})}function Ub(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 Wb(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(Ub).join(`.`)}catch{throw Error(`invalid DNS name: ${e}`)}}function Gb(e,t){let n=Wb(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=Bb[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 Kb(e,n,r){return`${e}?dns=${t(Gb(n,r)).replaceAll(`+`,`-`).replaceAll(`/`,`_`).replace(/=+$/,``)}`}function qb(e,t,n){if(t<0||n<0||t+n>e.length)throw Error(`truncated DNS message`)}function Jb(e,t){let n=[],r=new Set,i=t,a=t,o=!1,s=1;for(let t=0;t<=e.length;t+=1){qb(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){qb(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(qb(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 z(e,t){return qb(e,t,2),new DataView(e.buffer,e.byteOffset,e.byteLength).getUint16(t)}function Yb(e,t){return qb(e,t,4),new DataView(e.buffer,e.byteOffset,e.byteLength).getUint32(t)}function Xb(e,t){let n=Array.from({length:8},(n,r)=>z(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 Zb(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 Qb(e,t,n){let r=t,i=[];for(;r<n;){let t=e[r];if(qb(e,r+1,t),r+t+1>n)throw Error(`invalid TXT record`);i.push(Zb(e,r+1,r+1+t)),r+=t+1}return i.join(` `)}function $b(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 ex(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 Xb(e,n)}if([2,5,12].includes(t)){let t=Jb(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=Jb(e,n+2);if(t.nextOffset!==r)throw Error(`invalid MX record`);return`${z(e,n)} ${t.name}`}if(t===16)return Qb(e,n,r);if(t===6){let t=Jb(e,n),i=Jb(e,t.nextOffset);if(i.nextOffset+20!==r)throw Error(`invalid SOA record`);let a=Array.from({length:5},(t,n)=>Yb(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=Jb(e,n+6);if(t.nextOffset!==r)throw Error(`invalid SRV record`);return`${z(e,n)} ${z(e,n+2)} ${z(e,n+4)} ${t.name}`}if(t===257)return $b(e,n,r);let i=Array.from(e.subarray(n,r),e=>e.toString(16).padStart(2,`0`));return`\\# ${r-n} ${i.join(``)}`}function tx(e,t,n,r){let i=[],a=t;for(let t=0;t<n;t+=1){let t=Jb(e,a);a=t.nextOffset,qb(e,a,10);let n=z(e,a),o=z(e,a+2),s=Yb(e,a+4),c=z(e,a+8),l=a+10,u=l+c;qb(e,l,c);let d=ex(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 nx(e){return e.replace(/[A-Z]/g,e=>e.toLowerCase())}function rx(e,t,n,r,i){let a=Wb(r).split(`.`).filter(Boolean);if(!(e.labels.length===a.length&&e.labels.every((e,t)=>nx(e)===nx(a[t])))||t!==Bb[i]||n!==1)throw Error(`unexpected DNS response question`)}function ix(e,t,n){qb(e,0,12);let r=z(e,2);if(z(e,0)!==0||!(r&32768))throw Error(`invalid DNS response`);if(r&512)throw Error(`truncated DNS response`);let i=z(e,4),a=z(e,6),o=z(e,8),s=z(e,10);if(i!==1)throw Error(`invalid DNS question count`);let c=12,l=Jb(e,c);c=l.nextOffset,qb(e,c,4),rx(l,z(e,c),z(e,c+2),t,n),c+=4;let u=tx(e,c,a,!0);if(tx(e,tx(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 ax={1:`A`,2:`NS`,5:`CNAME`,6:`SOA`,12:`PTR`,15:`MX`,16:`TXT`,28:`AAAA`,33:`SRV`,257:`CAA`},ox={0:`NOERROR`,1:`FORMERR`,2:`SERVFAIL`,3:`NXDOMAIN`,4:`NOTIMP`,5:`REFUSED`};function sx(){return{stdout:`usage: dig <name> [type] [@server] [+opts] [--json]
675
675
  dig -x <address> [@server] [+opts] [--json]
676
676
  dig -v | --version
677
677
 
678
678
  Resolve DNS records via DNS-over-HTTPS.
679
679
 
680
- Supported types: `+kb.join(`, `)+` (default: A).
680
+ Supported types: `+Ob.join(`, `)+` (default: A).
681
681
 
682
682
  Flags:
683
683
  @server use a supported Cloudflare, Google, or Quad9 resolver
@@ -687,11 +687,11 @@ Flags:
687
687
  +opts other dig +options are accepted as no-ops
688
688
  --json resolver response as pretty-printed JSON
689
689
  -h, --help show this help
690
- `,stderr:``,exitCode:0}}function lx(e){return ox[e]??`TYPE${e}`}function ux(e,t){let{fallbackNote:n,json:r,name:i,short:a}=t;if(typeof e.Status==`number`&&e.Status!==0)return{stdout:``,stderr:`${n}dig: ${i}: ${sx[e.Status]??String(e.Status)}\n`,exitCode:1};if(r)return{stdout:`${JSON.stringify(e,null,2)}\n`,stderr:n,exitCode:0};let o=e.Answer??[];return o.length===0?{stdout:a?``:`;; no records found
690
+ `,stderr:``,exitCode:0}}function cx(e){return ax[e]??`TYPE${e}`}function lx(e,t){let{fallbackNote:n,json:r,name:i,short:a}=t;if(typeof e.Status==`number`&&e.Status!==0)return{stdout:``,stderr:`${n}dig: ${i}: ${ox[e.Status]??String(e.Status)}\n`,exitCode:1};if(r)return{stdout:`${JSON.stringify(e,null,2)}\n`,stderr:n,exitCode:0};let o=e.Answer??[];return o.length===0?{stdout:a?``:`;; no records found
691
691
  `,stderr:n,exitCode:0}:a?{stdout:`${o.map(e=>e.data).join(`
692
- `)}\n`,stderr:n,exitCode:0}:{stdout:`${o.map(e=>`${e.name}\t${e.TTL??0}\tIN\t${lx(e.type)}\t${e.data}`).join(`
693
- `)}\n`,stderr:n,exitCode:0}}async function dx(e,t){let n=Bb(e);if(n.kind===`version`)return{stdout:`DiG 9.20.0-slicc (DNS-over-HTTPS)
694
- `,stderr:``,exitCode:0};if(n.kind===`error`)return{stdout:``,stderr:n.message,exitCode:1};let{fallbackNote:r,name:i,resolverUrl:a,type:o}=n,s=a===Db,c,l;try{c=s?qb(a,i,o):`${a}?name=${encodeURIComponent(i)}&type=${o}`,l=await t(c,{method:`GET`,headers:{Accept:s?`application/dns-message`:`application/dns-json`}})}catch(e){return{stdout:``,stderr:`${r}dig: ${e instanceof Error?e.message:String(e)}\n`,exitCode:1}}if(l.status<200||l.status>=300)return{stdout:``,stderr:`${r}dig: lookup failed: ${l.status} ${l.statusText}\n`,exitCode:1};try{return ux(s?ax(l.body,i,o):JSON.parse(new TextDecoder(`utf-8`).decode(l.body)),n)}catch{return{stdout:``,stderr:`${r}dig: invalid response from resolver\n`,exitCode:1}}}function fx(){let e=g();return C(`dig`,async t=>t.includes(`--help`)||t.includes(`-h`)?cx():dx(t,e))}const px=[`api-catalog`,`service-desc`,`service-meta`,`status`,`https://llmstxt.org/rel/llms-txt`];async function mx(e,t={}){let n=t.fetchImpl??fetch,r=t.timeoutMs??3e3,i={links:e,failures:[]},a=[],o=new Set;for(let s of e)for(let e of s.rel)px.includes(e)&&(o.has(e)||(o.add(e),a.push(hx(n,s.href,r,t.signal).then(t=>gx(i,e,t)).catch(t=>{i.failures.push({rel:e,href:s.href,error:t instanceof Error?t.message:String(t)})}))));return await Promise.all(a),i}async function hx(e,t,n,r){let i=new AbortController,a=setTimeout(()=>i.abort(Error(`timeout`)),n),o=()=>i.abort(Error(`aborted`));r&&r.addEventListener(`abort`,o,{once:!0});try{let n=await e(t,{signal:i.signal});if(!n.ok)throw Error(`HTTP ${n.status}`);return{contentType:n.headers.get(`content-type`)??``,body:await n.text()}}finally{clearTimeout(a),r&&r.removeEventListener(`abort`,o)}}function gx(e,t,n){if(t===`https://llmstxt.org/rel/llms-txt`){e.llmsTxt=n.body;return}let r=n.contentType.includes(`json`)||n.contentType.includes(`linkset`),i=n.body;if(r)try{i=JSON.parse(n.body)}catch{i=n.body}switch(t){case`api-catalog`:e.catalog=i;break;case`service-desc`:e.serviceDesc=i;break;case`service-meta`:e.serviceMeta=i;break;case`status`:e.status=i}}const _x=[`--follow`];function vx(e){return async(t,n)=>{let r=typeof t==`string`?t:t instanceof URL?t.toString():t.url,i=h(n?.headers),a=await e(r,{method:n?.method??`GET`,...i?{headers:i}:{}});return new Response(a.body,{status:a.status,statusText:a.statusText,headers:a.headers})}}function yx(){return`discover — fetch a URL and parse RFC 8288 Link headers
692
+ `)}\n`,stderr:n,exitCode:0}:{stdout:`${o.map(e=>`${e.name}\t${e.TTL??0}\tIN\t${cx(e.type)}\t${e.data}`).join(`
693
+ `)}\n`,stderr:n,exitCode:0}}async function ux(e,t){let n=zb(e);if(n.kind===`version`)return{stdout:`DiG 9.20.0-slicc (DNS-over-HTTPS)
694
+ `,stderr:``,exitCode:0};if(n.kind===`error`)return{stdout:``,stderr:n.message,exitCode:1};let{fallbackNote:r,name:i,resolverUrl:a,type:o}=n,s=a===Eb,c,l;try{c=s?Kb(a,i,o):`${a}?name=${encodeURIComponent(i)}&type=${o}`,l=await t(c,{method:`GET`,headers:{Accept:s?`application/dns-message`:`application/dns-json`}})}catch(e){return{stdout:``,stderr:`${r}dig: ${e instanceof Error?e.message:String(e)}\n`,exitCode:1}}if(l.status<200||l.status>=300)return{stdout:``,stderr:`${r}dig: lookup failed: ${l.status} ${l.statusText}\n`,exitCode:1};try{return lx(s?ix(l.body,i,o):JSON.parse(new TextDecoder(`utf-8`).decode(l.body)),n)}catch{return{stdout:``,stderr:`${r}dig: invalid response from resolver\n`,exitCode:1}}}function dx(){let e=g();return C(`dig`,async t=>t.includes(`--help`)||t.includes(`-h`)?sx():ux(t,e))}const fx=[`api-catalog`,`service-desc`,`service-meta`,`status`,`https://llmstxt.org/rel/llms-txt`];async function px(e,t={}){let n=t.fetchImpl??fetch,r=t.timeoutMs??3e3,i={links:e,failures:[]},a=[],o=new Set;for(let s of e)for(let e of s.rel)fx.includes(e)&&(o.has(e)||(o.add(e),a.push(mx(n,s.href,r,t.signal).then(t=>hx(i,e,t)).catch(t=>{i.failures.push({rel:e,href:s.href,error:t instanceof Error?t.message:String(t)})}))));return await Promise.all(a),i}async function mx(e,t,n,r){let i=new AbortController,a=setTimeout(()=>i.abort(Error(`timeout`)),n),o=()=>i.abort(Error(`aborted`));r&&r.addEventListener(`abort`,o,{once:!0});try{let n=await e(t,{signal:i.signal});if(!n.ok)throw Error(`HTTP ${n.status}`);return{contentType:n.headers.get(`content-type`)??``,body:await n.text()}}finally{clearTimeout(a),r&&r.removeEventListener(`abort`,o)}}function hx(e,t,n){if(t===`https://llmstxt.org/rel/llms-txt`){e.llmsTxt=n.body;return}let r=n.contentType.includes(`json`)||n.contentType.includes(`linkset`),i=n.body;if(r)try{i=JSON.parse(n.body)}catch{i=n.body}switch(t){case`api-catalog`:e.catalog=i;break;case`service-desc`:e.serviceDesc=i;break;case`service-meta`:e.serviceMeta=i;break;case`status`:e.status=i}}const gx=[`--follow`];function _x(e){return async(t,n)=>{let r=typeof t==`string`?t:t instanceof URL?t.toString():t.url,i=h(n?.headers),a=await e(r,{method:n?.method??`GET`,...i?{headers:i}:{}});return new Response(a.body,{status:a.status,statusText:a.statusText,headers:a.headers})}}function vx(){return`discover — fetch a URL and parse RFC 8288 Link headers
695
695
 
696
696
  Usage:
697
697
  discover <url> Print parsed links (and any SLICC handoff match)
@@ -705,9 +705,9 @@ Output is always JSON.
705
705
  Examples:
706
706
  discover ${r}/handoff?handoff=demo
707
707
  discover --follow ${r}/llms.txt
708
- `}function bx(){return C(`discover`,async e=>{if(e.length===0||T(e))return{stdout:yx(),stderr:``,exitCode:0};let t=w(e,{bool:_x});if(`error`in t)return{stdout:``,stderr:`discover: ${t.error}\n`,exitCode:1};let n=t.bools.has(`--follow`);if(t.positionals.length!==1)return{stdout:``,stderr:`discover: expected exactly one URL argument
709
- `,exitCode:2};let r=t.positionals[0],i=g(),o;try{o=await i(r,{method:`GET`})}catch(e){return{stdout:``,stderr:`discover: fetch failed: ${e instanceof Error?e.message:String(e)}\n`,exitCode:1}}let c=[];for(let[e,t]of Object.entries(o.headers))e.toLowerCase()===`link`&&typeof t==`string`&&t.length>0&&c.push(t);let l=s(c,r),u=a(l),d={url:r,status:o.status,links:l,handoff:u};if(n&&l.length>0){let e=await mx(l,{fetchImpl:vx(i)});d.discovery={catalog:e.catalog,serviceDesc:e.serviceDesc,serviceMeta:e.serviceMeta,status:e.status,llmsTxt:e.llmsTxt,failures:e.failures}}return{stdout:JSON.stringify(d,null,2)+`
710
- `,stderr:``,exitCode:0}})}function xx(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 Sx=`esbuild - thin wrapper over the ipk-loaded esbuild-wasm
708
+ `}function yx(){return C(`discover`,async e=>{if(e.length===0||T(e))return{stdout:vx(),stderr:``,exitCode:0};let t=w(e,{bool:gx});if(`error`in t)return{stdout:``,stderr:`discover: ${t.error}\n`,exitCode:1};let n=t.bools.has(`--follow`);if(t.positionals.length!==1)return{stdout:``,stderr:`discover: expected exactly one URL argument
709
+ `,exitCode:2};let r=t.positionals[0],i=g(),o;try{o=await i(r,{method:`GET`})}catch(e){return{stdout:``,stderr:`discover: fetch failed: ${e instanceof Error?e.message:String(e)}\n`,exitCode:1}}let c=[];for(let[e,t]of Object.entries(o.headers))e.toLowerCase()===`link`&&typeof t==`string`&&t.length>0&&c.push(t);let l=s(c,r),u=a(l),d={url:r,status:o.status,links:l,handoff:u};if(n&&l.length>0){let e=await px(l,{fetchImpl:_x(i)});d.discovery={catalog:e.catalog,serviceDesc:e.serviceDesc,serviceMeta:e.serviceMeta,status:e.status,llmsTxt:e.llmsTxt,failures:e.failures}}return{stdout:JSON.stringify(d,null,2)+`
710
+ `,stderr:``,exitCode:0}})}function bx(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 xx=`esbuild - thin wrapper over the ipk-loaded esbuild-wasm
711
711
 
712
712
  Usage:
713
713
  esbuild [options] <entry> Bundle / transform
@@ -745,12 +745,12 @@ Module resolution:
745
745
 
746
746
  Install:
747
747
  Inert until the backing package is installed:
748
- ${F} esbuild-wasm@${xi}
748
+ ${F} esbuild-wasm@${Si}
749
749
  Then \`esbuild --version\` and the bundle/transform commands above.
750
- `,Cx=new Set([`iife`,`cjs`,`esm`]),wx=new Set([`browser`,`node`,`neutral`]),Tx=new Set([`linked`,`inline`,`external`,`both`]),Ex={"-h":`showHelp`,"--help":`showHelp`,"-v":`showVersion`,"--version":`showVersion`,"--bundle":`bundle`,"--transform":`transform`,"--minify":`minify`};function Dx(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 Ox(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 kx(e,t,n,r){if(t.inlineValue!==null){if(!Tx.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`&&Tx.has(i)?(e.sourcemap=i,1):(e.sourcemap=!0,0)}function Ax(e,t,n,r){if(t.key===`--outfile`){let{value:i,advance:a}=Ox(t,n,r);return e.outfile=i,a}if(t.key===`--format`){let{value:i,advance:a}=Ox(t,n,r);if(!Cx.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}=Ox(t,n,r);if(!wx.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}=Ox(t,n,r);return e.target=i.split(`,`).map(e=>e.trim()).filter(Boolean),a}if(t.key===`--loader`){let{value:i,advance:a}=Ox(t,n,r);return e.loader=i,a}return-1}function jx(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 Mx(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=Ex[r];if(i){t[i]=!0;continue}if(r.startsWith(`--external:`)){t.external.push(r.slice(11));continue}if(jx(r,`--define:`,t.define)||jx(r,`--banner:`,t.banner)||jx(r,`--footer:`,t.footer))continue;let a=Dx(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+=kx(t,a,e,n);continue}let o=Ax(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 Nx(e,t,n,r,i){return{name:`slicc-vfs`,setup(a){a.onResolve({filter:/.*/},async a=>{if(a.kind!==`entry-point`&&Px(a.path,r)||/^[a-z]+:/.test(a.path)&&!a.path.startsWith(`file:`))return{path:a.path,external:!0};if(Ix(a.path)){let n=a.importer?.startsWith(`/`)?Nr(a.importer):t;return{path:await zx(e,e.resolvePath(n,a.path))}}return Lx(a.path,a.importer,n,Fx(i,a.kind))}),a.onLoad({filter:/.*/},async t=>t.namespace&&t.namespace!==`file`?null:{contents:await e.readFile(t.path),loader:Rx(t.path),resolveDir:Nr(t.path)})}}}function Px(e,t){return t.some(t=>{if(e===t)return!0;if(!t.includes(`*`))return!Ix(t)&&e.startsWith(`${t}/`);let n=t.replace(/[.+?^${}()|[\]\\]/g,`\\$&`).replace(`*`,`.*`);return RegExp(`^${n}$`).test(e)})}function Fx(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 Ix(e){return e.startsWith(`./`)||e.startsWith(`../`)||e.startsWith(`/`)}async function Lx(e,t,n,r){let i=t?.startsWith(`/`)?Nr(t):n.fromDir;try{let t=await Sr(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 Rx(e){let t=kr(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 zx(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=Or(t,`index${r}`);if(await e.exists(n))return n}return t}async function Bx(e,t,n){let r=[];if(n.length>0){let t=await e(n,{kind:`warning`,color:!1});r.push(t.join(``))}if(t.length>0){let n=await e(t,{kind:`error`,color:!1});r.push(n.join(``))}return r.join(``)}function Vx(){return C(`esbuild`,async(e,t)=>{let n;try{n=Mx(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:Sx,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)
751
- `,exitCode:2};let r;try{r=await bi({ipk:xx(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?Hx(n,t,r):Ux(n,t,r)})}async function Hx(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:Sx,stderr:``,exitCode:0};let a={loader:e.loader??Rx(i),sourcefile:i,...e.format?{format:e.format}:{},...e.minify?{minify:!0}:{},...e.sourcemap?{sourcemap:e.sourcemap}:{},...e.target?{target:e.target}:{},...e.platform?{platform:e.platform}:{},...Object.keys(e.define).length>0?{define:e.define}:{},...e.treeShaking===null?{}:{treeShaking:e.treeShaking}};try{let i=await n.transform(r,a),o=await Bx(n.formatMessages,[],i.warnings);if(e.outfile){let n=t.fs.resolvePath(t.cwd,e.outfile);return await t.fs.writeFile(n,i.code),i.map&&e.sourcemap&&e.sourcemap!==`inline`&&await t.fs.writeFile(`${n}.map`,i.map),{stdout:``,stderr:o,exitCode:0}}return{stdout:i.code,stderr:o,exitCode:0}}catch(e){let t=e;return Array.isArray(t.errors)?{stdout:``,stderr:await Bx(n.formatMessages,t.errors,t.warnings??[]),exitCode:1}:{stdout:``,stderr:`esbuild: ${e instanceof Error?e.message:String(e)}\n`,exitCode:1}}}async function Ux(e,t,n){if(e.entries.length===0)return{stdout:``,stderr:`esbuild: --bundle requires at least one entry point
752
- `,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:[Nx(t.fs,t.cwd,xx(t),e.external,e.platform)],format:e.format??`esm`,...Wx(e)};try{let r=await n.build(i),a=await Bx(n.formatMessages,r.errors,r.warnings),o=r.outputFiles??[];if(e.outfile){if(o.length===0)return{stdout:``,stderr:`esbuild: build produced no output
753
- `,exitCode:1};let n=t.fs.resolvePath(t.cwd,e.outfile);await t.fs.writeFile(n,o[0].text);let r=Nr(n);for(let e=1;e<o.length;e++){let n=o[e],i=Or(r,kr(n.path));await t.fs.writeFile(i,n.text)}return{stdout:``,stderr:a,exitCode:0}}return{stdout:o.map(e=>e.text).join(``),stderr:a,exitCode:0}}catch(e){let t=e;return Array.isArray(t.errors)?{stdout:``,stderr:await Bx(n.formatMessages,t.errors,t.warnings??[]),exitCode:1}:{stdout:``,stderr:`esbuild: ${e instanceof Error?e.message:String(e)}\n`,exitCode:1}}}function Wx(e){return{...e.minify?{minify:!0}:{},...e.sourcemap?{sourcemap:e.sourcemap}:{},...e.target?{target:e.target}:{},...e.external.length>0?{external:e.external}:{},...e.platform?{platform:e.platform}:{},...Object.keys(e.define).length>0?{define:e.define}:{},...Object.keys(e.banner).length>0?{banner:e.banner}:{},...Object.keys(e.footer).length>0?{footer:e.footer}:{},...e.treeShaking===null?{}:{treeShaking:e.treeShaking}}}function Gx(e){let t=new ArrayBuffer(e.byteLength);return new Uint8Array(t).set(e),t}var Kx=class{ops(){return import(`./esptool-operations-h8-8jVn_.js`)}registry(){if(!si())throw Error(`Web Serial is unavailable in this browser`);return pi()}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)}},qx=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:Gx(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 Jx(e,t){return e&&si()?new Kx:t?new qx(t):null}const Yx=Symbol(`picker-approval-timeout`);async function Xx(e,t,n){let r=Ve.generateId(),i=!1,a=He({id:r,html:Xm(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 Yx;throw e}),o,s=new Promise(t=>{o=setTimeout(()=>{i=!0,Ve.cancel(r,`${e}: timed out`),t(Yx)},12e4)}),c=await Promise.race([a,s]);if(o&&clearTimeout(o),c===Yx)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 Zx=new Set([`--vid`,`--pid`,`--baud`,`--data-bits`,`--stop-bits`,`--parity`,`--flow-control`,`--buffer-size`,`--bytes`,`--until`,`--timeout-ms`,`--dtr`,`--rts`,`--break`,`--__resolved`]);function Qx(e){return Bn(e,Zx)}function B(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 $x(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 eS(e){let t={};return e.has(`--vid`)&&(t.usbVendorId=B(e.get(`--vid`),`vid`)),e.has(`--pid`)&&(t.usbProductId=B(e.get(`--pid`),`pid`)),Object.keys(t).length>0?[t]:[]}const tS=new Set([`none`,`even`,`odd`]),nS=new Set([`none`,`hardware`]);function rS(e){let t={baudRate:e.has(`--baud`)?B(e.get(`--baud`),`baud`):9600};if(e.has(`--data-bits`)&&(t.dataBits=B(e.get(`--data-bits`),`data-bits`)),e.has(`--stop-bits`)&&(t.stopBits=B(e.get(`--stop-bits`),`stop-bits`)),e.has(`--parity`)){let n=e.get(`--parity`);if(!tS.has(n))throw Error(`invalid --parity: '${n}'`);t.parity=n}if(e.has(`--flow-control`)){let n=e.get(`--flow-control`);if(!nS.has(n))throw Error(`invalid --flow-control: '${n}'`);t.flowControl=n}return e.has(`--buffer-size`)&&(t.bufferSize=B(e.get(`--buffer-size`),`buffer-size`)),t}function iS(e){let t={};return e.has(`--bytes`)&&(t.maxBytes=B(e.get(`--bytes`),`bytes`)),e.has(`--until`)&&(t.until=$x(e.get(`--until`))),e.has(`--timeout-ms`)&&(t.timeoutMs=B(e.get(`--timeout-ms`),`timeout-ms`)),t}function aS(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 oS(e){let t={};return e.has(`--dtr`)&&(t.dataTerminalReady=aS(e.get(`--dtr`),`dtr`)),e.has(`--rts`)&&(t.requestToSend=aS(e.get(`--rts`),`rts`)),e.has(`--break`)&&(t.break=aS(e.get(`--break`),`break`)),t}function sS(e){let t=cr(e.stdin),n=new Uint8Array(t.length);for(let e=0;e<t.length;e++)n[e]=t.charCodeAt(e)&255;return n}function cS(e){return Array.from(e,e=>e.toString(16).padStart(2,`0`)).join(` `)}function lS(e){return`0x${e.toString(16).padStart(4,`0`)}`}function uS(e){let t=e.usbVendorId!==void 0||e.usbProductId!==void 0?`${lS(e.usbVendorId??0)}:${lS(e.usbProductId??0)}`:`(native serial)`,n=e.opened?` [open]`:``;return`${e.handle}\t${t}${n}`}function dS(e){return`cts=${+!!e.clearToSend} dcd=${+!!e.dataCarrierDetect} dsr=${+!!e.dataSetReady} ri=${+!!e.ringIndicator}\n`}function V(e){return{stdout:e,stderr:``,exitCode:0}}function H(e){return{stdout:``,stderr:`serial: ${e}\n`,exitCode:1}}const fS=`serial - access serial ports via Web Serial
750
+ `,Sx=new Set([`iife`,`cjs`,`esm`]),Cx=new Set([`browser`,`node`,`neutral`]),wx=new Set([`linked`,`inline`,`external`,`both`]),Tx={"-h":`showHelp`,"--help":`showHelp`,"-v":`showVersion`,"--version":`showVersion`,"--bundle":`bundle`,"--transform":`transform`,"--minify":`minify`};function Ex(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 Dx(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 Ox(e,t,n,r){if(t.inlineValue!==null){if(!wx.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`&&wx.has(i)?(e.sourcemap=i,1):(e.sourcemap=!0,0)}function kx(e,t,n,r){if(t.key===`--outfile`){let{value:i,advance:a}=Dx(t,n,r);return e.outfile=i,a}if(t.key===`--format`){let{value:i,advance:a}=Dx(t,n,r);if(!Sx.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}=Dx(t,n,r);if(!Cx.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}=Dx(t,n,r);return e.target=i.split(`,`).map(e=>e.trim()).filter(Boolean),a}if(t.key===`--loader`){let{value:i,advance:a}=Dx(t,n,r);return e.loader=i,a}return-1}function Ax(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 jx(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=Tx[r];if(i){t[i]=!0;continue}if(r.startsWith(`--external:`)){t.external.push(r.slice(11));continue}if(Ax(r,`--define:`,t.define)||Ax(r,`--banner:`,t.banner)||Ax(r,`--footer:`,t.footer))continue;let a=Ex(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+=Ox(t,a,e,n);continue}let o=kx(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 Mx(e,t,n,r,i){return{name:`slicc-vfs`,setup(a){a.onResolve({filter:/.*/},async a=>{if(a.kind!==`entry-point`&&Nx(a.path,r)||/^[a-z]+:/.test(a.path)&&!a.path.startsWith(`file:`))return{path:a.path,external:!0};if(Fx(a.path)){let n=a.importer?.startsWith(`/`)?Pr(a.importer):t;return{path:await Rx(e,e.resolvePath(n,a.path))}}return Ix(a.path,a.importer,n,Px(i,a.kind))}),a.onLoad({filter:/.*/},async t=>t.namespace&&t.namespace!==`file`?null:{contents:await e.readFile(t.path),loader:Lx(t.path),resolveDir:Pr(t.path)})}}}function Nx(e,t){return t.some(t=>{if(e===t)return!0;if(!t.includes(`*`))return!Fx(t)&&e.startsWith(`${t}/`);let n=t.replace(/[.+?^${}()|[\]\\]/g,`\\$&`).replace(`*`,`.*`);return RegExp(`^${n}$`).test(e)})}function Px(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 Fx(e){return e.startsWith(`./`)||e.startsWith(`../`)||e.startsWith(`/`)}async function Ix(e,t,n,r){let i=t?.startsWith(`/`)?Pr(t):n.fromDir;try{let t=await Cr(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 Lx(e){let t=Ar(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 Rx(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=kr(t,`index${r}`);if(await e.exists(n))return n}return t}async function zx(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 Bx(){return C(`esbuild`,async(e,t)=>{let n;try{n=jx(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:xx,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)
751
+ `,exitCode:2};let r;try{r=await xi({ipk:bx(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?Vx(n,t,r):Hx(n,t,r)})}async function Vx(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:xx,stderr:``,exitCode:0};let a={loader:e.loader??Lx(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 zx(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 zx(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
752
+ `,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:[Mx(t.fs,t.cwd,bx(t),e.external,e.platform)],format:e.format??`esm`,...Ux(e)};try{let r=await n.build(i),a=await zx(n.formatMessages,r.errors,r.warnings),o=r.outputFiles??[];if(e.outfile){if(o.length===0)return{stdout:``,stderr:`esbuild: build produced no output
753
+ `,exitCode:1};let n=t.fs.resolvePath(t.cwd,e.outfile);await t.fs.writeFile(n,o[0].text);let r=Pr(n);for(let e=1;e<o.length;e++){let n=o[e],i=kr(r,Ar(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 zx(n.formatMessages,t.errors,t.warnings??[]),exitCode:1}:{stdout:``,stderr:`esbuild: ${e instanceof Error?e.message:String(e)}\n`,exitCode:1}}}function Ux(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 Wx(e){let t=new ArrayBuffer(e.byteLength);return new Uint8Array(t).set(e),t}var Gx=class{ops(){return import(`./esptool-operations-h8-8jVn_.js`)}registry(){if(!ci())throw Error(`Web Serial is unavailable in this browser`);return mi()}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)}},Kx=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:Wx(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 qx(e,t){return e&&ci()?new Gx:t?new Kx(t):null}const Jx=Symbol(`picker-approval-timeout`);async function Yx(e,t,n){let r=He.generateId(),i=!1,a=Ue({id:r,html:Ym(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 Jx;throw e}),o,s=new Promise(t=>{o=setTimeout(()=>{i=!0,He.cancel(r,`${e}: timed out`),t(Jx)},12e4)}),c=await Promise.race([a,s]);if(o&&clearTimeout(o),c===Jx)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 Xx=new Set([`--vid`,`--pid`,`--baud`,`--data-bits`,`--stop-bits`,`--parity`,`--flow-control`,`--buffer-size`,`--bytes`,`--until`,`--timeout-ms`,`--dtr`,`--rts`,`--break`,`--__resolved`]);function Zx(e){return Vn(e,Xx)}function B(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 Qx(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 $x(e){let t={};return e.has(`--vid`)&&(t.usbVendorId=B(e.get(`--vid`),`vid`)),e.has(`--pid`)&&(t.usbProductId=B(e.get(`--pid`),`pid`)),Object.keys(t).length>0?[t]:[]}const eS=new Set([`none`,`even`,`odd`]),tS=new Set([`none`,`hardware`]);function nS(e){let t={baudRate:e.has(`--baud`)?B(e.get(`--baud`),`baud`):9600};if(e.has(`--data-bits`)&&(t.dataBits=B(e.get(`--data-bits`),`data-bits`)),e.has(`--stop-bits`)&&(t.stopBits=B(e.get(`--stop-bits`),`stop-bits`)),e.has(`--parity`)){let n=e.get(`--parity`);if(!eS.has(n))throw Error(`invalid --parity: '${n}'`);t.parity=n}if(e.has(`--flow-control`)){let n=e.get(`--flow-control`);if(!tS.has(n))throw Error(`invalid --flow-control: '${n}'`);t.flowControl=n}return e.has(`--buffer-size`)&&(t.bufferSize=B(e.get(`--buffer-size`),`buffer-size`)),t}function rS(e){let t={};return e.has(`--bytes`)&&(t.maxBytes=B(e.get(`--bytes`),`bytes`)),e.has(`--until`)&&(t.until=Qx(e.get(`--until`))),e.has(`--timeout-ms`)&&(t.timeoutMs=B(e.get(`--timeout-ms`),`timeout-ms`)),t}function iS(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 aS(e){let t={};return e.has(`--dtr`)&&(t.dataTerminalReady=iS(e.get(`--dtr`),`dtr`)),e.has(`--rts`)&&(t.requestToSend=iS(e.get(`--rts`),`rts`)),e.has(`--break`)&&(t.break=iS(e.get(`--break`),`break`)),t}function oS(e){let t=lr(e.stdin),n=new Uint8Array(t.length);for(let e=0;e<t.length;e++)n[e]=t.charCodeAt(e)&255;return n}function sS(e){return Array.from(e,e=>e.toString(16).padStart(2,`0`)).join(` `)}function cS(e){return`0x${e.toString(16).padStart(4,`0`)}`}function lS(e){let t=e.usbVendorId!==void 0||e.usbProductId!==void 0?`${cS(e.usbVendorId??0)}:${cS(e.usbProductId??0)}`:`(native serial)`,n=e.opened?` [open]`:``;return`${e.handle}\t${t}${n}`}function uS(e){return`cts=${+!!e.clearToSend} dcd=${+!!e.dataCarrierDetect} dsr=${+!!e.dataSetReady} ri=${+!!e.ringIndicator}\n`}function V(e){return{stdout:e,stderr:``,exitCode:0}}function H(e){return{stdout:``,stderr:`serial: ${e}\n`,exitCode:1}}const dS=`serial - access serial ports via Web Serial
754
754
 
755
755
  Usage: serial <subcommand> [options]
756
756
 
@@ -769,7 +769,7 @@ Open flags:
769
769
  --parity none|even|odd --flow-control none|hardware --buffer-size N
770
770
 
771
771
  Read flags:
772
- --bytes N Stop after N bytes (default: ${gi} cap)
772
+ --bytes N Stop after N bytes (default: ${_i} cap)
773
773
  --until <hex> Stop once this byte sequence is seen
774
774
  --timeout-ms N Stop after N ms (default 1000)
775
775
  --hex Hex-dump the bytes instead of emitting raw
@@ -780,10 +780,10 @@ Signal flags (set):
780
780
  Options:
781
781
  -h, --help
782
782
 
783
- Reads/writes are capped at ${gi} bytes (4 MiB).
784
- `;function pS(e,t){if(t)return V(e.length?`${cS(e)}\n`:``);let n=``;for(let t=0;t<e.length;t++)n+=String.fromCharCode(e[t]);return V(n)}async function mS(e){let t=await e.list();return t.length===0?V(`no granted serial ports
785
- `):V(`${t.map(uS).join(`
786
- `)}\n`)}async function hS(e,t){let n=e.get(`--__resolved`);if(n)return V(`${uS(await t.info(n))}\n`);let r=eS(e),i=Be();if(i){let e=await Xx(`serial-port`,r,i);if(e.handle)return V(`${uS(await t.info(e.handle))}\n`);let n=e.info,a=si();if(!a)return H(`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 H(`request: granted port could not be re-acquired`);let s=pi(),c=s.register(o),l=s.get(c);return l?V(`${uS(oi(c,l))}\n`):H(`request: failed to register granted port`)}return V(`${uS(await t.request(r))}\n`)}async function gS(e,t,n){let r=e[1];return r?(await n.open(r,rS(t)),V(``)):H(`open: handle required`)}async function _S(e,t){let n=e[1];return n?(await t.close(n),V(``)):H(`close: handle required`)}async function vS(e,t,n,r){let i=e[1];if(!i)return H(`read: handle required`);let a=iS(t);return a.maxBytes!==void 0&&a.maxBytes>4194304?H(`read --bytes exceeds 4 MiB limit`):pS(await r.read(i,a),n.has(`--hex`))}async function yS(e,t,n){let r=e[1];if(!r)return H(`write: handle required`);let i=sS(t);return i.length>4194304?H(`write payload exceeds 4 MiB limit`):V(`${await n.write(r,i)} bytes written\n`)}async function bS(e,t,n){let[,r,i]=e;return!r||!i?H(`signals: handle and get|set required`):i===`get`?V(dS(await n.getSignals(r))):i===`set`?(await n.setSignals(r,oS(t)),V(``)):H(`signals: unknown action '${i}' (use get|set)`)}async function xS(e,t,n){let{positionals:r,flags:i,bools:a}=Qx(e),o=r[0];switch(o){case`list`:return mS(n);case`request`:return hS(i,n);case`open`:return gS(r,i,n);case`close`:return _S(r,n);case`read`:return vS(r,i,a,n);case`write`:return yS(r,t,n);case`signals`:return bS(r,i,n);default:return H(`unknown subcommand '${o??``}'. Try 'serial --help'.`)}}function SS(){return C(`serial`,async(e,t)=>{if(e.length===0||e.includes(`--help`)||e.includes(`-h`))return V(fS);let n=ui(be(),b());if(!n)return H(`Web Serial is unavailable in this environment`);try{return await xS(e,t,n)}catch(e){let t=e instanceof Error?e.message:String(e);return/cancelled|NotFoundError|No port selected/i.test(t)?H(`user cancelled or no port selected`):H(t)}})}const CS=new Set([`--port`,`--baud`,`--vid`,`--pid`]),wS=115200;function TS(e){return Bn(e,CS)}function ES(e){let t=e.replace(/-/g,`_`);return t===`chip_info`||t===`id`?`chip_id`:t}function DS(e){return{stdout:e,stderr:``,exitCode:0}}function OS(e){return{stdout:``,stderr:`esptool: ${e}\n`,exitCode:1}}const kS=`esptool - flash ESP32 / ESP8266 chips via esptool-js
783
+ Reads/writes are capped at ${_i} bytes (4 MiB).
784
+ `;function fS(e,t){if(t)return V(e.length?`${sS(e)}\n`:``);let n=``;for(let t=0;t<e.length;t++)n+=String.fromCharCode(e[t]);return V(n)}async function pS(e){let t=await e.list();return t.length===0?V(`no granted serial ports
785
+ `):V(`${t.map(lS).join(`
786
+ `)}\n`)}async function mS(e,t){let n=e.get(`--__resolved`);if(n)return V(`${lS(await t.info(n))}\n`);let r=$x(e),i=Ve();if(i){let e=await Yx(`serial-port`,r,i);if(e.handle)return V(`${lS(await t.info(e.handle))}\n`);let n=e.info,a=ci();if(!a)return H(`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 H(`request: granted port could not be re-acquired`);let s=mi(),c=s.register(o),l=s.get(c);return l?V(`${lS(si(c,l))}\n`):H(`request: failed to register granted port`)}return V(`${lS(await t.request(r))}\n`)}async function hS(e,t,n){let r=e[1];return r?(await n.open(r,nS(t)),V(``)):H(`open: handle required`)}async function gS(e,t){let n=e[1];return n?(await t.close(n),V(``)):H(`close: handle required`)}async function _S(e,t,n,r){let i=e[1];if(!i)return H(`read: handle required`);let a=rS(t);return a.maxBytes!==void 0&&a.maxBytes>4194304?H(`read --bytes exceeds 4 MiB limit`):fS(await r.read(i,a),n.has(`--hex`))}async function vS(e,t,n){let r=e[1];if(!r)return H(`write: handle required`);let i=oS(t);return i.length>4194304?H(`write payload exceeds 4 MiB limit`):V(`${await n.write(r,i)} bytes written\n`)}async function yS(e,t,n){let[,r,i]=e;return!r||!i?H(`signals: handle and get|set required`):i===`get`?V(uS(await n.getSignals(r))):i===`set`?(await n.setSignals(r,aS(t)),V(``)):H(`signals: unknown action '${i}' (use get|set)`)}async function bS(e,t,n){let{positionals:r,flags:i,bools:a}=Zx(e),o=r[0];switch(o){case`list`:return pS(n);case`request`:return mS(i,n);case`open`:return hS(r,i,n);case`close`:return gS(r,n);case`read`:return _S(r,i,a,n);case`write`:return vS(r,t,n);case`signals`:return yS(r,i,n);default:return H(`unknown subcommand '${o??``}'. Try 'serial --help'.`)}}function xS(){return C(`serial`,async(e,t)=>{if(e.length===0||e.includes(`--help`)||e.includes(`-h`))return V(dS);let n=di(be(),b());if(!n)return H(`Web Serial is unavailable in this environment`);try{return await bS(e,t,n)}catch(e){let t=e instanceof Error?e.message:String(e);return/cancelled|NotFoundError|No port selected/i.test(t)?H(`user cancelled or no port selected`):H(t)}})}const SS=new Set([`--port`,`--baud`,`--vid`,`--pid`]),CS=115200;function wS(e){return Vn(e,SS)}function TS(e){let t=e.replace(/-/g,`_`);return t===`chip_info`||t===`id`?`chip_id`:t}function ES(e){return{stdout:e,stderr:``,exitCode:0}}function DS(e){return{stdout:``,stderr:`esptool: ${e}\n`,exitCode:1}}const OS=`esptool - flash ESP32 / ESP8266 chips via esptool-js
787
787
 
788
788
  Usage: esptool [--port H] [--baud N] <subcommand> [args]
789
789
 
@@ -800,37 +800,37 @@ Subcommands:
800
800
 
801
801
  Options:
802
802
  --port H Use an existing serial handle from 'serial request'
803
- --baud N Flash baud rate (default ${wS})
803
+ --baud N Flash baud rate (default ${CS})
804
804
  --vid 0x.. Picker filter when --port is omitted
805
805
  --pid 0x.. Picker filter when --port is omitted
806
806
  --erase write_flash: erase the whole chip before writing
807
807
  -h, --help
808
808
 
809
809
  Without --port, the Web Serial picker opens (asks for permission).
810
- `;async function AS(e,t){return e.get(`--port`)||(await t.request(eS(e))).handle}async function jS(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=B(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 MS(e,t,n,r){let{positionals:i,flags:a,bools:o}=TS(e),s=ES(i[0]??``),c=a.has(`--baud`)?B(a.get(`--baud`),`baud`):wS,l=[],u=e=>l.push(e);switch(s){case`chip_id`:{let e=await AS(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}`),DS(`${l.join(`
811
- `)}\n`)}case`read_mac`:{let e=await AS(a,r),{mac:t}=await n.readMac(e,c,u);return l.push(`MAC: ${t}`),DS(`${l.join(`
812
- `)}\n`)}case`erase_flash`:{let e=await AS(a,r);return await n.eraseFlash(e,c,u),DS(l.length?`${l.join(`
810
+ `;async function kS(e,t){return e.get(`--port`)||(await t.request($x(e))).handle}async function AS(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=B(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 jS(e,t,n,r){let{positionals:i,flags:a,bools:o}=wS(e),s=TS(i[0]??``),c=a.has(`--baud`)?B(a.get(`--baud`),`baud`):CS,l=[],u=e=>l.push(e);switch(s){case`chip_id`:{let e=await kS(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}`),ES(`${l.join(`
811
+ `)}\n`)}case`read_mac`:{let e=await kS(a,r),{mac:t}=await n.readMac(e,c,u);return l.push(`MAC: ${t}`),ES(`${l.join(`
812
+ `)}\n`)}case`erase_flash`:{let e=await kS(a,r);return await n.eraseFlash(e,c,u),ES(l.length?`${l.join(`
813
813
  `)}\n`:`flash erased
814
- `)}case`write_flash`:{let e=await jS(i,t),s=await AS(a,r);return await n.flash(s,c,o.has(`--erase`),e,u),DS(l.length?`${l.join(`
814
+ `)}case`write_flash`:{let e=await AS(i,t),s=await kS(a,r);return await n.flash(s,c,o.has(`--erase`),e,u),ES(l.length?`${l.join(`
815
815
  `)}\n`:`flash written
816
- `)}case`read_flash`:{if(i.length<4)return OS(`read_flash expects <addr> <size> <outfile>`);let e=B(i[1],`address`),o=B(i[2],`size`),s=t.fs.resolvePath(t.cwd,i[3]),d=await AS(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}`),DS(`${l.join(`
817
- `)}\n`)}case`read_reg`:{if(i.length<2)return OS(`read_reg expects <addr>`);let e=B(i[1],`address`),t=await AS(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`)}`),DS(`${l.join(`
818
- `)}\n`)}case`flash_id`:{let e=await AS(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`}`),DS(`${l.join(`
819
- `)}\n`)}case`erase_region`:{if(i.length<3)return OS(`erase_region expects <addr> <size>`);let e=B(i[1],`address`),t=B(i[2],`size`),o=await AS(a,r);return await n.eraseRegion(o,c,e,t,u),DS(l.length?`${l.join(`
816
+ `)}case`read_flash`:{if(i.length<4)return DS(`read_flash expects <addr> <size> <outfile>`);let e=B(i[1],`address`),o=B(i[2],`size`),s=t.fs.resolvePath(t.cwd,i[3]),d=await kS(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}`),ES(`${l.join(`
817
+ `)}\n`)}case`read_reg`:{if(i.length<2)return DS(`read_reg expects <addr>`);let e=B(i[1],`address`),t=await kS(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`)}`),ES(`${l.join(`
818
+ `)}\n`)}case`flash_id`:{let e=await kS(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`}`),ES(`${l.join(`
819
+ `)}\n`)}case`erase_region`:{if(i.length<3)return DS(`erase_region expects <addr> <size>`);let e=B(i[1],`address`),t=B(i[2],`size`),o=await kS(a,r);return await n.eraseRegion(o,c,e,t,u),ES(l.length?`${l.join(`
820
820
  `)}\n`:`region erased
821
- `)}case`run`:{let e=await AS(a,r);return await n.run(e,c,u),DS(l.length?`${l.join(`
821
+ `)}case`run`:{let e=await kS(a,r);return await n.run(e,c,u),ES(l.length?`${l.join(`
822
822
  `)}\n`:`running app
823
- `)}default:return OS(`unknown subcommand '${i[0]??``}'. Try 'esptool --help'.`)}}function NS(){return C(`esptool`,async(e,t)=>{if(e.length===0||e.includes(`--help`)||e.includes(`-h`))return DS(kS);let n=be(),r=b(),i=Jx(n,r),a=ui(n,r);if(!i||!a)return OS(`Web Serial is unavailable in this environment`);try{return await MS(e,t,i,a)}catch(e){let t=e instanceof Error?e.message:String(e);return/cancelled|NotFoundError|No port selected/i.test(t)?OS(`user cancelled or no port selected`):OS(t)}})}function PS(){return C(`ffmpeg`,async(e,t)=>{let{runFfmpeg:n}=await import(`./run-juG_3wwW.js`);return n(e,t)})}function FS(){return C(`ffprobe`,async(e,t)=>{let{runFfprobe:n}=await import(`./run-CRTEPV5c.js`);return n(e,t)})}function IS(e){let t=xe().find(t=>t.id===e);return t?t.id:null}function LS(){return xe().map(e=>e.id)}function RS(e){return Ce(e)}function zS(e,t){if(Se(e,t),Te()[e]!==t)throw Error(`flag ${e} cannot be overridden on this float`)}function BS(e){let t=globalThis.localStorage;if(!t||typeof t.setItem!=`function`)throw Error(`this realm has no localStorage to apply the override`);t.setItem(Ee,e)}const VS=`usage: flags set <id> on|off
823
+ `)}default:return DS(`unknown subcommand '${i[0]??``}'. Try 'esptool --help'.`)}}function MS(){return C(`esptool`,async(e,t)=>{if(e.length===0||e.includes(`--help`)||e.includes(`-h`))return ES(OS);let n=be(),r=b(),i=qx(n,r),a=di(n,r);if(!i||!a)return DS(`Web Serial is unavailable in this environment`);try{return await jS(e,t,i,a)}catch(e){let t=e instanceof Error?e.message:String(e);return/cancelled|NotFoundError|No port selected/i.test(t)?DS(`user cancelled or no port selected`):DS(t)}})}function NS(){return C(`ffmpeg`,async(e,t)=>{let{runFfmpeg:n}=await import(`./run-juG_3wwW.js`);return n(e,t)})}function PS(){return C(`ffprobe`,async(e,t)=>{let{runFfprobe:n}=await import(`./run-CRTEPV5c.js`);return n(e,t)})}function FS(e){let t=xe().find(t=>t.id===e);return t?t.id:null}function IS(){return xe().map(e=>e.id)}function LS(e){return Ce(e)}function RS(e,t){if(Se(e,t),Te()[e]!==t)throw Error(`flag ${e} cannot be overridden on this float`)}function zS(e){let t=globalThis.localStorage;if(!t||typeof t.setItem!=`function`)throw Error(`this realm has no localStorage to apply the override`);t.setItem(Ee,e)}const BS=`usage: flags set <id> on|off
824
824
  flags get <id>
825
825
 
826
826
  set <id> on|off Persist a local override. The next new session reads it.
827
827
  get <id> Print the resolved value
828
- `;function HS(e){return{stdout:``,stderr:`${e}\n`,exitCode:1}}function US(){return`known flags: ${LS().join(`, `)}\n`}async function WS(e,t){let n=b();if(n&&!be()){let{overridesJson:r}=await n.call(`feature-flag-set`,{id:e,value:t});BS(r)}else zS(e,t);if(RS(e)!==t)throw Error(`flag ${e} is ${RS(e)??`unset`} after set`)}async function GS(e){if(e.length!==2)return HS(`usage: flags set <id> on|off`);let t=IS(e[0]);if(!t)return HS(`flags: unknown flag ${e[0]}\n${US().trimEnd()}`);let n=e[1].toLowerCase();if(n!==`on`&&n!==`off`)return HS(`flags set: value must be on or off`);try{await WS(t,n)}catch(e){return HS(`flags set: ${e instanceof Error?e.message:String(e)}`)}return{stdout:`${t}=${n}\n`,stderr:``,exitCode:0}}function KS(e){if(e.length!==1)return HS(`usage: flags get <id>`);let t=IS(e[0]);if(!t)return HS(`flags: unknown flag ${e[0]}\n${US().trimEnd()}`);let n=RS(t);return n===void 0?HS(`flags: ${t} has no value`):{stdout:`${n}\n`,stderr:``,exitCode:0}}function qS(){return C(`flags`,async e=>{if(e.length===0||e[0]===`--help`||e[0]===`-h`)return{stdout:VS,stderr:``,exitCode:0};let t=e[0];if(T(e.slice(1)))return{stdout:ht(`flags`,t,VS),stderr:``,exitCode:0};switch(t){case`set`:return GS(e.slice(1));case`get`:return KS(e.slice(1));default:return HS(`flags: unknown subcommand "${t}"\nusage: flags set <id> on|off
828
+ `;function VS(e){return{stdout:``,stderr:`${e}\n`,exitCode:1}}function HS(){return`known flags: ${IS().join(`, `)}\n`}async function US(e,t){let n=b();if(n&&!be()){let{overridesJson:r}=await n.call(`feature-flag-set`,{id:e,value:t});zS(r)}else RS(e,t);if(LS(e)!==t)throw Error(`flag ${e} is ${LS(e)??`unset`} after set`)}async function WS(e){if(e.length!==2)return VS(`usage: flags set <id> on|off`);let t=FS(e[0]);if(!t)return VS(`flags: unknown flag ${e[0]}\n${HS().trimEnd()}`);let n=e[1].toLowerCase();if(n!==`on`&&n!==`off`)return VS(`flags set: value must be on or off`);try{await US(t,n)}catch(e){return VS(`flags set: ${e instanceof Error?e.message:String(e)}`)}return{stdout:`${t}=${n}\n`,stderr:``,exitCode:0}}function GS(e){if(e.length!==1)return VS(`usage: flags get <id>`);let t=FS(e[0]);if(!t)return VS(`flags: unknown flag ${e[0]}\n${HS().trimEnd()}`);let n=LS(t);return n===void 0?VS(`flags: ${t} has no value`):{stdout:`${n}\n`,stderr:``,exitCode:0}}function KS(){return C(`flags`,async e=>{if(e.length===0||e[0]===`--help`||e[0]===`-h`)return{stdout:BS,stderr:``,exitCode:0};let t=e[0];if(T(e.slice(1)))return{stdout:gt(`flags`,t,BS),stderr:``,exitCode:0};switch(t){case`set`:return WS(e.slice(1));case`get`:return GS(e.slice(1));default:return VS(`flags: unknown subcommand "${t}"\nusage: flags set <id> on|off
829
829
  flags get <id>
830
830
 
831
831
  set <id> on|off Persist a local override. The next new session reads it.
832
- get <id> Print the resolved value`)}})}const JS=new Map;let YS=0;const XS=e=>({stdout:e,stderr:``,exitCode:0}),ZS=e=>({stdout:``,stderr:`fswatch: ${e}\n`,exitCode:1}),QS=[`--path`,`--pattern`,`--scoop`,`--name`];function $S(e){let t=w(e.slice(1),{});if(`error`in t)return ZS(t.error);if(JS.size===0)return XS(`No active file watchers.
833
- `);let n=``;for(let[,e]of JS)n+=`ID: ${e.id}\n`,n+=` Name: ${e.name}\n`,n+=` Path: ${e.basePath}\n`,n+=` Pattern: ${e.pattern}\n`,e.scoop&&(n+=` Scoop: ${e.scoop}\n`),n+=` Created: ${e.createdAt}\n\n`;return XS(n)}function eC(e){let t=w(e.slice(1),{});if(`error`in t)return ZS(t.error);let n=t.positionals[0];if(!n)return ZS(`delete requires an ID`);let r=JS.get(n);return r?(r.unsubscribe(),JS.delete(n),XS(`Deleted watcher "${r.name}" (${n})\n`)):ZS(`watcher not found: ${n}`)}function tC(e){let t=w(e.slice(1),{value:QS});return`error`in t?t:{basePath:t.values.get(`--path`)??``,pattern:t.values.get(`--pattern`)??``,scoop:t.values.get(`--scoop`)??``,name:t.values.get(`--name`)??``}}function nC(e){let t=RegExp(`^`+e.replace(/\./g,`\\.`).replace(/\*/g,`.*`)+`$`);return e=>t.test(e.split(`/`).pop()??``)}async function rC(e,t){let n=tC(e);if(`error`in n)return ZS(n.error);let r=n,i=r.scoop||void 0;if(r.scoop=ca(r.scoop,t)??``,!r.basePath||!r.pattern)return ZS(`--path and --pattern are required`);let a=await ky(await Dy(),`fswatch create`,i);if(a)return{stdout:``,stderr:a,exitCode:1};let o=globalThis,s=o.__slicc_fs_watcher;if(!s)return ZS(`file system watcher not available`);let c=`fsw-${++YS}`,l=r.name||`${r.pattern} in ${r.basePath}`,u=o.__slicc_lick_handler,d=s.watch(r.basePath,nC(r.pattern),e=>{if(!u)return;let t=e.map(e=>({type:e.type,path:e.path}));u({type:`fswatch`,fswatchId:c,fswatchName:l,targetScoop:r.scoop,timestamp:new Date().toISOString(),changes:t,body:{changes:t}})});JS.set(c,{id:c,name:l,basePath:r.basePath,pattern:r.pattern,scoop:r.scoop,unsubscribe:d,createdAt:new Date().toISOString()});let f=`Created file watcher "${l}"\n`;return f+=`ID: ${c}\n`,f+=`Path: ${r.basePath}\n`,f+=`Pattern: ${r.pattern}\n`,r.scoop&&(f+=`Scoop: ${r.scoop}\n`),XS(f)}function iC(){return C(`fswatch`,async(e,t)=>{let n=e[0];if(!n||T(e,{valueFlags:QS}))return XS(`usage: fswatch <command> [options]
832
+ get <id> Print the resolved value`)}})}const qS=new Map;let JS=0;const YS=e=>({stdout:e,stderr:``,exitCode:0}),XS=e=>({stdout:``,stderr:`fswatch: ${e}\n`,exitCode:1}),ZS=[`--path`,`--pattern`,`--scoop`,`--name`];function QS(e){let t=w(e.slice(1),{});if(`error`in t)return XS(t.error);if(qS.size===0)return YS(`No active file watchers.
833
+ `);let n=``;for(let[,e]of qS)n+=`ID: ${e.id}\n`,n+=` Name: ${e.name}\n`,n+=` Path: ${e.basePath}\n`,n+=` Pattern: ${e.pattern}\n`,e.scoop&&(n+=` Scoop: ${e.scoop}\n`),n+=` Created: ${e.createdAt}\n\n`;return YS(n)}function $S(e){let t=w(e.slice(1),{});if(`error`in t)return XS(t.error);let n=t.positionals[0];if(!n)return XS(`delete requires an ID`);let r=qS.get(n);return r?(r.unsubscribe(),qS.delete(n),YS(`Deleted watcher "${r.name}" (${n})\n`)):XS(`watcher not found: ${n}`)}function eC(e){let t=w(e.slice(1),{value:ZS});return`error`in t?t:{basePath:t.values.get(`--path`)??``,pattern:t.values.get(`--pattern`)??``,scoop:t.values.get(`--scoop`)??``,name:t.values.get(`--name`)??``}}function tC(e){let t=RegExp(`^`+e.replace(/\./g,`\\.`).replace(/\*/g,`.*`)+`$`);return e=>t.test(e.split(`/`).pop()??``)}async function nC(e,t){let n=eC(e);if(`error`in n)return XS(n.error);let r=n,i=r.scoop||void 0;if(r.scoop=la(r.scoop,t)??``,!r.basePath||!r.pattern)return XS(`--path and --pattern are required`);let a=await Oy(await Ey(),`fswatch create`,i);if(a)return{stdout:``,stderr:a,exitCode:1};let o=globalThis,s=o.__slicc_fs_watcher;if(!s)return XS(`file system watcher not available`);let c=`fsw-${++JS}`,l=r.name||`${r.pattern} in ${r.basePath}`,u=o.__slicc_lick_handler,d=s.watch(r.basePath,tC(r.pattern),e=>{if(!u)return;let t=e.map(e=>({type:e.type,path:e.path}));u({type:`fswatch`,fswatchId:c,fswatchName:l,targetScoop:r.scoop,timestamp:new Date().toISOString(),changes:t,body:{changes:t}})});qS.set(c,{id:c,name:l,basePath:r.basePath,pattern:r.pattern,scoop:r.scoop,unsubscribe:d,createdAt:new Date().toISOString()});let f=`Created file watcher "${l}"\n`;return f+=`ID: ${c}\n`,f+=`Path: ${r.basePath}\n`,f+=`Pattern: ${r.pattern}\n`,r.scoop&&(f+=`Scoop: ${r.scoop}\n`),YS(f)}function rC(){return C(`fswatch`,async(e,t)=>{let n=e[0];if(!n||T(e,{valueFlags:ZS}))return YS(`usage: fswatch <command> [options]
834
834
 
835
835
  Commands:
836
836
  create --path <path> --pattern <glob> [--scoop <name>] [--name <name>] Watch for file changes
@@ -842,7 +842,7 @@ Options:
842
842
  --pattern <glob> File pattern to match, e.g. "*.md", "*.bsh" (required)
843
843
  --scoop <target> Scoop name, cone name, or folder. Omit for your own cone.
844
844
  --name <name> Human-readable name for the watcher
845
- `);switch(n){case`list`:return $S(e);case`delete`:return eC(e);case`create`:return await rC(e,t.env);default:return ZS(`unknown command: ${n}`)}})}function aC(e){return C(`gelatiere`,async(t,n)=>{let{runGelatiere:r}=await import(`./run-ZVh0R1Qb.js`);return r(t,n,e)})}function oC(e={}){return C(`go`,async(t,n)=>{let{runGoCommand:r}=await import(`./go-driver-CvHJRpyw.js`);return r(t,n,{processConfig:e.buildProcessConfig?.(n.env),terminal:e.terminal,gate:e.gate,commands:e.commands,gitIdentity:e.gitIdentity})})}function sC(){return{stdout:`usage: hear [-i file] [-l lang] [-T seconds] [-d deviceId] [--engine name]
845
+ `);switch(n){case`list`:return QS(e);case`delete`:return $S(e);case`create`:return await nC(e,t.env);default:return XS(`unknown command: ${n}`)}})}function iC(e){return C(`gelatiere`,async(t,n)=>{let{runGelatiere:r}=await import(`./run-ZVh0R1Qb.js`);return r(t,n,e)})}function aC(e={}){return C(`go`,async(t,n)=>{let{runGoCommand:r}=await import(`./go-driver-Bl_pd-vs.js`);return r(t,n,{processConfig:e.buildProcessConfig?.(n.env),terminal:e.terminal,gate:e.gate,commands:e.commands,gitIdentity:e.gitIdentity})})}function oC(){return{stdout:`usage: hear [-i file] [-l lang] [-T seconds] [-d deviceId] [--engine name]
846
846
  hear --devices | --status | --warmup
847
847
 
848
848
  Speech recognition: listens on the microphone until you pause, then
@@ -861,27 +861,27 @@ Options:
861
861
  --devices List audio input devices
862
862
  --status Show the enhanced model state (downloading/ready + ETA)
863
863
  --warmup Start the enhanced model download in the background
864
- `,stderr:``,exitCode:0}}const cC={"--devices":`devices`,"--status":`status`,"--warmup":`warmup`},lC={"-i":`a file path`,"-l":`a language tag`,"-T":`a timeout in seconds`,"-d":`a device id`,"--engine":`an engine name`};function uC(e,t,n){switch(t){case`-i`:return e.inputFile=n,null;case`-l`:return e.lang=n,null;case`-d`:return e.deviceId=n,null;case`-T`:{let t=Number.parseFloat(n);return Number.isNaN(t)||t<=0||t>600?`-T requires a timeout between 0 and 600 seconds`:(e.timeoutSeconds=t,null)}case`--engine`:return n!==`builtin`&&n!==`enhanced`?`--engine must be builtin or enhanced`:(e.engine=n,null);default:return`unknown option: ${t}`}}function dC(e){let t={inputFile:null,lang:void 0,timeoutSeconds:30,deviceId:void 0,engine:`auto`,devices:!1,status:!1,warmup:!1};for(let n=0;n<e.length;n++){let r=e[n],i=cC[r];if(i){t[i]=!0;continue}if(!(r in lC))return pC(`unknown option: ${r}`);let a=n+1<e.length?e[++n]:null;if(a==null)return pC(`${r} requires ${lC[r]}`);let o=uC(t,r,a);if(o)return pC(o)}return t}function fC(e){switch(e.state){case`ready`:return`enhanced engine: ready
864
+ `,stderr:``,exitCode:0}}const sC={"--devices":`devices`,"--status":`status`,"--warmup":`warmup`},cC={"-i":`a file path`,"-l":`a language tag`,"-T":`a timeout in seconds`,"-d":`a device id`,"--engine":`an engine name`};function lC(e,t,n){switch(t){case`-i`:return e.inputFile=n,null;case`-l`:return e.lang=n,null;case`-d`:return e.deviceId=n,null;case`-T`:{let t=Number.parseFloat(n);return Number.isNaN(t)||t<=0||t>600?`-T requires a timeout between 0 and 600 seconds`:(e.timeoutSeconds=t,null)}case`--engine`:return n!==`builtin`&&n!==`enhanced`?`--engine must be builtin or enhanced`:(e.engine=n,null);default:return`unknown option: ${t}`}}function uC(e){let t={inputFile:null,lang:void 0,timeoutSeconds:30,deviceId:void 0,engine:`auto`,devices:!1,status:!1,warmup:!1};for(let n=0;n<e.length;n++){let r=e[n],i=sC[r];if(i){t[i]=!0;continue}if(!(r in cC))return fC(`unknown option: ${r}`);let a=n+1<e.length?e[++n]:null;if(a==null)return fC(`${r} requires ${cC[r]}`);let o=lC(t,r,a);if(o)return fC(o)}return t}function dC(e){switch(e.state){case`ready`:return`enhanced engine: ready
865
865
  `;case`failed`:return`enhanced engine: failed (re-run hear --warmup to retry)
866
866
  `;case`idle`:return`enhanced engine: not downloaded (run hear --warmup)
867
- `;case`loading`:{let t=e=>(e/1024/1024).toFixed(1);return`enhanced engine: downloading${e.loaded!=null&&e.total?` ${t(e.loaded)}/${t(e.total)} MB`:``}${e.etaSeconds!=null&&Number.isFinite(e.etaSeconds)?` · ready in ~${Math.max(1,Math.round(e.etaSeconds))}s`:``}\n`}}}function pC(e){return{stdout:``,stderr:`hear: ${e}\n`,exitCode:1}}function mC(e){return e instanceof Error?e.message:String(e)}function hC(e){let t=e.map((e,t)=>`${e.deviceId}\t${e.label||`Microphone ${t+1}`}`);return t.join(`
867
+ `;case`loading`:{let t=e=>(e/1024/1024).toFixed(1);return`enhanced engine: downloading${e.loaded!=null&&e.total?` ${t(e.loaded)}/${t(e.total)} MB`:``}${e.etaSeconds!=null&&Number.isFinite(e.etaSeconds)?` · ready in ~${Math.max(1,Math.round(e.etaSeconds))}s`:``}\n`}}}function fC(e){return{stdout:``,stderr:`hear: ${e}\n`,exitCode:1}}function pC(e){return e instanceof Error?e.message:String(e)}function mC(e){let t=e.map((e,t)=>`${e.deviceId}\t${e.label||`Microphone ${t+1}`}`);return t.join(`
868
868
  `)+(t.length?`
869
- `:``)}async function gC(e){try{return e.local?navigator.mediaDevices?.enumerateDevices?{stdout:hC((await navigator.mediaDevices.enumerateDevices()).filter(e=>e.kind===`audioinput`)),stderr:``,exitCode:0}:pC(`device enumeration unavailable`):{stdout:hC((await e.panelRpc.call(`enumerate-media-devices`,void 0)).audioinputs),stderr:``,exitCode:0}}catch(e){return pC(mC(e))}}async function _C(e,t){try{if(e.local){let{hearStatus:e,hearWarmup:n}=await import(`./speech-page-realm-stub-C7EPKrHd.js`);return{stdout:fC(t?n():e()),stderr:``,exitCode:0}}return{stdout:fC(t?await e.panelRpc.call(`hear-warmup`,void 0):await e.panelRpc.call(`hear-status`,void 0)),stderr:``,exitCode:0}}catch(e){return pC(mC(e))}}function vC(e){let t=new ArrayBuffer(e.byteLength);return new Uint8Array(t).set(e),t}async function yC(e,t,n,r){if(n.byteLength===0)return pC(`no audio on ${r}`);let i=vC(n);try{return{stdout:(e.local?await(await import(`./speech-page-realm-stub-C7EPKrHd.js`)).hearTranscribe(i,t.lang):await e.panelRpc.call(`hear-transcribe`,{bytes:i,lang:t.lang},{timeoutMs:6e5})).transcript+`
870
- `,stderr:``,exitCode:0}}catch(e){return pC(`transcription failed: ${mC(e)}`)}}async function bC(e,t,n){let r=t.inputFile,i=n.fs.resolvePath(n.cwd,r),a;try{a=new Uint8Array(await n.fs.readFileBuffer(i))}catch{return pC(`cannot open ${r}: No such file`)}let o=Cr(i);return!o.startsWith(`audio/`)&&!o.startsWith(`video/`)?pC(`${r} is not an audio file`):yC(e,t,a,r)}async function xC(e,t){let n=Math.round(t.timeoutSeconds*1e3);try{let r={lang:t.lang,timeoutMs:n,deviceId:t.deviceId,engine:t.engine},i=e.local?await(await import(`./speech-page-realm-stub-C7EPKrHd.js`)).hearCapture(r):await e.panelRpc.call(`hear-capture`,r,{timeoutMs:n+3e4});return i.transcript?{stdout:i.transcript+`
869
+ `:``)}async function hC(e){try{return e.local?navigator.mediaDevices?.enumerateDevices?{stdout:mC((await navigator.mediaDevices.enumerateDevices()).filter(e=>e.kind===`audioinput`)),stderr:``,exitCode:0}:fC(`device enumeration unavailable`):{stdout:mC((await e.panelRpc.call(`enumerate-media-devices`,void 0)).audioinputs),stderr:``,exitCode:0}}catch(e){return fC(pC(e))}}async function gC(e,t){try{if(e.local){let{hearStatus:e,hearWarmup:n}=await import(`./speech-page-realm-stub-C7EPKrHd.js`);return{stdout:dC(t?n():e()),stderr:``,exitCode:0}}return{stdout:dC(t?await e.panelRpc.call(`hear-warmup`,void 0):await e.panelRpc.call(`hear-status`,void 0)),stderr:``,exitCode:0}}catch(e){return fC(pC(e))}}function _C(e){let t=new ArrayBuffer(e.byteLength);return new Uint8Array(t).set(e),t}async function vC(e,t,n,r){if(n.byteLength===0)return fC(`no audio on ${r}`);let i=_C(n);try{return{stdout:(e.local?await(await import(`./speech-page-realm-stub-C7EPKrHd.js`)).hearTranscribe(i,t.lang):await e.panelRpc.call(`hear-transcribe`,{bytes:i,lang:t.lang},{timeoutMs:6e5})).transcript+`
870
+ `,stderr:``,exitCode:0}}catch(e){return fC(`transcription failed: ${pC(e)}`)}}async function yC(e,t,n){let r=t.inputFile,i=n.fs.resolvePath(n.cwd,r),a;try{a=new Uint8Array(await n.fs.readFileBuffer(i))}catch{return fC(`cannot open ${r}: No such file`)}let o=wr(i);return!o.startsWith(`audio/`)&&!o.startsWith(`video/`)?fC(`${r} is not an audio file`):vC(e,t,a,r)}async function bC(e,t){let n=Math.round(t.timeoutSeconds*1e3);try{let r={lang:t.lang,timeoutMs:n,deviceId:t.deviceId,engine:t.engine},i=e.local?await(await import(`./speech-page-realm-stub-C7EPKrHd.js`)).hearCapture(r):await e.panelRpc.call(`hear-capture`,r,{timeoutMs:n+3e4});return i.transcript?{stdout:i.transcript+`
871
871
  `,stderr:``,exitCode:0}:{stdout:``,stderr:`hear: no speech detected
872
- `,exitCode:1}}catch(e){return pC(mC(e))}}function SC(){return C(`hear`,async(e,t)=>{if(e.includes(`--help`)||e.includes(`-h`))return sC();let n=dC(e);if(`exitCode`in n)return n;let r={local:be(),panelRpc:b()};if(!r.local&&!r.panelRpc)return pC(`speech recognition unavailable in this environment`);if(n.devices)return gC(r);if(n.status||n.warmup)return _C(r,n.warmup);if(n.inputFile&&n.inputFile!==`-`)return bC(r,n,t);let i=lr(t.stdin);return n.inputFile===`-`||n.deviceId==null&&!pr(t,i.byteLength)?yC(r,n,i,`stdin`):xC(r,n)})}function CC(e,t,n){return typeof e.onSessionReplaced==`function`?e.onSessionReplaced(t,n):()=>void 0}function wC(e){let{browser:t,targetId:n,listeners:r,enable:i}=e,a=e.transport,o=e.sessionId,s=e=>{for(let[t,n]of r)e.off(t,n),e.on(t,n)},c=e=>{for(let[t,n]of r)e.off(t,n)};s(a);let l=CC(t,n,(e,t)=>{if(t!==a&&c(a),a=t,o=e,s(a),i)try{Promise.resolve(i(a,o)).catch(()=>void 0)}catch{}});return{get sessionId(){return o},get transport(){return a},stop(){l(),c(a)}}}const TC=[`debug`,`log`,`info`,`warning`,`error`],EC=1e3,DC={assert:`error`,trace:`debug`,dir:`log`,dirxml:`log`,table:`log`,count:`info`,timeEnd:`info`,clear:`log`,startGroup:`log`,startGroupCollapsed:`log`,endGroup:`log`,profile:`debug`,profileEnd:`debug`};function OC(e,t,n,r,i){if(t.consoleCleanup.has(r))return;t.consoleMessages.set(r,[]);let a=wC({browser:e,targetId:r,transport:n,sessionId:i,listeners:[[`Runtime.consoleAPICalled`,e=>{let n=e;if(n.sessionId!==a.sessionId)return;let i=n.type??`log`,o=DC[i]??i,s=(n.args??[]).map(e=>String(e.value??e.description??``)).join(` `),c=t.consoleMessages.get(r);c&&(c.push({level:o,text:s,timestamp:Date.now()}),c.length>EC&&c.splice(0,c.length-EC))}]],enable:(e,t)=>e.send(`Runtime.enable`,{},t)});t.consoleCleanup.set(r,()=>a.stop())}const kC=async({browser:e,state:t,positional:n,flags:r,onTab:i})=>{let a=N(r);if(`error`in a)return{stdout:``,stderr:a.error,exitCode:1};let o=n[0]??`log`,s=r.clear===`true`,c=TC.indexOf(o);if(c===-1)return{stdout:``,stderr:`Invalid level "${o}". Valid: ${TC.join(`, `)}\n`,exitCode:1};t.consoleCleanup.has(a.targetId)||await i(a.targetId,async({sessionId:n,transport:r})=>{await r.send(`Runtime.enable`,{},n),OC(e,t,r,a.targetId,n)});let l=(t.consoleMessages.get(a.targetId)??[]).filter(e=>TC.indexOf(e.level)>=c);return s&&t.consoleMessages.set(a.targetId,[]),l.length===0?{stdout:`No console messages
872
+ `,exitCode:1}}catch(e){return fC(pC(e))}}function xC(){return C(`hear`,async(e,t)=>{if(e.includes(`--help`)||e.includes(`-h`))return oC();let n=uC(e);if(`exitCode`in n)return n;let r={local:be(),panelRpc:b()};if(!r.local&&!r.panelRpc)return fC(`speech recognition unavailable in this environment`);if(n.devices)return hC(r);if(n.status||n.warmup)return gC(r,n.warmup);if(n.inputFile&&n.inputFile!==`-`)return yC(r,n,t);let i=ur(t.stdin);return n.inputFile===`-`||n.deviceId==null&&!mr(t,i.byteLength)?vC(r,n,i,`stdin`):bC(r,n)})}function SC(e,t,n){return typeof e.onSessionReplaced==`function`?e.onSessionReplaced(t,n):()=>void 0}function CC(e){let{browser:t,targetId:n,listeners:r,enable:i}=e,a=e.transport,o=e.sessionId,s=e=>{for(let[t,n]of r)e.off(t,n),e.on(t,n)},c=e=>{for(let[t,n]of r)e.off(t,n)};s(a);let l=SC(t,n,(e,t)=>{if(t!==a&&c(a),a=t,o=e,s(a),i)try{Promise.resolve(i(a,o)).catch(()=>void 0)}catch{}});return{get sessionId(){return o},get transport(){return a},stop(){l(),c(a)}}}const wC=[`debug`,`log`,`info`,`warning`,`error`],TC=1e3,EC={assert:`error`,trace:`debug`,dir:`log`,dirxml:`log`,table:`log`,count:`info`,timeEnd:`info`,clear:`log`,startGroup:`log`,startGroupCollapsed:`log`,endGroup:`log`,profile:`debug`,profileEnd:`debug`};function DC(e,t,n,r,i){if(t.consoleCleanup.has(r))return;t.consoleMessages.set(r,[]);let a=CC({browser:e,targetId:r,transport:n,sessionId:i,listeners:[[`Runtime.consoleAPICalled`,e=>{let n=e;if(n.sessionId!==a.sessionId)return;let i=n.type??`log`,o=EC[i]??i,s=(n.args??[]).map(e=>String(e.value??e.description??``)).join(` `),c=t.consoleMessages.get(r);c&&(c.push({level:o,text:s,timestamp:Date.now()}),c.length>TC&&c.splice(0,c.length-TC))}]],enable:(e,t)=>e.send(`Runtime.enable`,{},t)});t.consoleCleanup.set(r,()=>a.stop())}const OC=async({browser:e,state:t,positional:n,flags:r,onTab:i})=>{let a=N(r);if(`error`in a)return{stdout:``,stderr:a.error,exitCode:1};let o=n[0]??`log`,s=r.clear===`true`,c=wC.indexOf(o);if(c===-1)return{stdout:``,stderr:`Invalid level "${o}". Valid: ${wC.join(`, `)}\n`,exitCode:1};t.consoleCleanup.has(a.targetId)||await i(a.targetId,async({sessionId:n,transport:r})=>{await r.send(`Runtime.enable`,{},n),DC(e,t,r,a.targetId,n)});let l=(t.consoleMessages.get(a.targetId)??[]).filter(e=>wC.indexOf(e.level)>=c);return s&&t.consoleMessages.set(a.targetId,[]),l.length===0?{stdout:`No console messages
873
873
  `,stderr:``,exitCode:0}:{stdout:l.map(e=>`[${e.level}] ${e.text}`).join(`
874
874
  `)+`
875
- `,stderr:``,exitCode:0}};function AC(e){return e.cookies??[]}function jC(e){return`${e.name}=${e.value}\tDomain=${e.domain}\tPath=${e.path}\tSecure=${e.secure}\tHttpOnly=${e.httpOnly}\tExpires=${e.expires}`}function MC(e){return{name:e.name,value:e.value,...e.domain===void 0?{}:{domain:e.domain},...e.path===void 0?{}:{path:e.path},...e.secure===void 0?{}:{secure:e.secure},...e.httpOnly===void 0?{}:{httpOnly:e.httpOnly},...e.expires===void 0?{}:{expires:e.expires},...e.sameSite===void 0?{}:{sameSite:e.sameSite},...e.url===void 0?{}:{url:e.url}}}function NC(e){return{name:e.name,...e.domain===void 0?{}:{domain:e.domain},...e.path===void 0?{}:{path:e.path},...e.url===void 0?{}:{url:e.url}}}const PC=async({browser:e,flags:t,onTab:n})=>{let r=N(t);if(`error`in r)return{stdout:``,stderr:r.error,exitCode:1};let i=t.domain,a=t.path;return{stdout:await n(r.targetId,async e=>{let t=AC(await e.send(`Network.getCookies`)),n=i||a?t.filter(e=>(!i||String(e.domain??``).includes(i))&&(!a||String(e.path??``).startsWith(a))):t;return n.length===0?`No cookies`:n.map(jC).join(`
875
+ `,stderr:``,exitCode:0}};function kC(e){return e.cookies??[]}function AC(e){return`${e.name}=${e.value}\tDomain=${e.domain}\tPath=${e.path}\tSecure=${e.secure}\tHttpOnly=${e.httpOnly}\tExpires=${e.expires}`}function jC(e){return{name:e.name,value:e.value,...e.domain===void 0?{}:{domain:e.domain},...e.path===void 0?{}:{path:e.path},...e.secure===void 0?{}:{secure:e.secure},...e.httpOnly===void 0?{}:{httpOnly:e.httpOnly},...e.expires===void 0?{}:{expires:e.expires},...e.sameSite===void 0?{}:{sameSite:e.sameSite},...e.url===void 0?{}:{url:e.url}}}function MC(e){return{name:e.name,...e.domain===void 0?{}:{domain:e.domain},...e.path===void 0?{}:{path:e.path},...e.url===void 0?{}:{url:e.url}}}const NC=async({browser:e,flags:t,onTab:n})=>{let r=N(t);if(`error`in r)return{stdout:``,stderr:r.error,exitCode:1};let i=t.domain,a=t.path;return{stdout:await n(r.targetId,async e=>{let t=kC(await e.send(`Network.getCookies`)),n=i||a?t.filter(e=>(!i||String(e.domain??``).includes(i))&&(!a||String(e.path??``).startsWith(a))):t;return n.length===0?`No cookies`:n.map(AC).join(`
876
876
  `)})+`
877
- `,stderr:``,exitCode:0}},FC=async({browser:e,positional:t,flags:n,onTab:r})=>{if(t.length===0)return{stdout:``,stderr:`cookie-get requires a cookie name
878
- `,exitCode:1};let i=N(n);if(`error`in i)return{stdout:``,stderr:i.error,exitCode:1};let a=t[0];return{stdout:await r(i.targetId,async e=>{let t=AC(await e.send(`Network.getCookies`)).filter(e=>e.name===a);if(t.length===0)throw Error(`Cookie "${a}" not found`);return t.map(jC).join(`
877
+ `,stderr:``,exitCode:0}},PC=async({browser:e,positional:t,flags:n,onTab:r})=>{if(t.length===0)return{stdout:``,stderr:`cookie-get requires a cookie name
878
+ `,exitCode:1};let i=N(n);if(`error`in i)return{stdout:``,stderr:i.error,exitCode:1};let a=t[0];return{stdout:await r(i.targetId,async e=>{let t=kC(await e.send(`Network.getCookies`)).filter(e=>e.name===a);if(t.length===0)throw Error(`Cookie "${a}" not found`);return t.map(AC).join(`
879
879
  `)})+`
880
- `,stderr:``,exitCode:0}},IC=async({browser:e,positional:t,flags:n,onTab:r})=>{if(t.length<2)return{stdout:``,stderr:`cookie-set requires <name> <value>
881
- `,exitCode:1};let i=N(n);return`error`in i?{stdout:``,stderr:i.error,exitCode:1}:(await r(i.targetId,async e=>{let r=await Wn(e),i={name:t[0],value:t[1]};n.domain&&(i.domain=n.domain),n.path&&(i.path=n.path),n.secure===`true`&&(i.secure=!0),n.httpOnly===`true`&&(i.httpOnly=!0),n.expires&&(i.expires=parseFloat(n.expires)),n.sameSite&&(i.sameSite=n.sameSite),!i.domain&&!i.path&&(i.url=r.href),await e.send(`Network.setCookie`,MC(i))}),{stdout:`Cookie "${t[0]}" set\n`,stderr:``,exitCode:0})},LC=async({browser:e,positional:t,flags:n,onTab:r})=>{if(t.length===0)return{stdout:``,stderr:`cookie-delete requires a cookie name
882
- `,exitCode:1};let i=N(n);return`error`in i?{stdout:``,stderr:i.error,exitCode:1}:(await r(i.targetId,async e=>{let r={name:t[0]};n.domain&&(r.domain=n.domain),n.path&&(r.path=n.path),!r.domain&&!r.path&&(r.url=(await Wn(e)).href),await e.send(`Network.deleteCookies`,NC(r))}),{stdout:`Cookie "${t[0]}" deleted\n`,stderr:``,exitCode:0})},RC=async({browser:e,flags:t,onTab:n})=>{let r=N(t);return`error`in r?{stdout:``,stderr:r.error,exitCode:1}:(await n(r.targetId,async e=>{await e.send(`Network.clearBrowserCookies`)}),{stdout:`All cookies cleared
883
- `,stderr:``,exitCode:0})};function zC(e,t){try{return _e(e,t),null}catch(e){return{stdout:``,stderr:`${e.message}\n`,exitCode:1}}}const BC=async({browser:e,state:t,positional:n,flags:r,onTab:i})=>{if(n.length===0)return{stdout:``,stderr:`generate-locator requires a ref (e.g. e5)
884
- `,exitCode:1};let a=N(r);if(`error`in a)return{stdout:``,stderr:a.error,exitCode:1};let o=n[0],s=t.snapshots.get(a.targetId);return s?zC(s,o)||{stdout:await i(a.targetId,async e=>{let{objectId:t,entry:n}=await y(e,s,o),r=JSON.parse(await pe(e,t,`function() {
880
+ `,stderr:``,exitCode:0}},FC=async({browser:e,positional:t,flags:n,onTab:r})=>{if(t.length<2)return{stdout:``,stderr:`cookie-set requires <name> <value>
881
+ `,exitCode:1};let i=N(n);return`error`in i?{stdout:``,stderr:i.error,exitCode:1}:(await r(i.targetId,async e=>{let r=await Gn(e),i={name:t[0],value:t[1]};n.domain&&(i.domain=n.domain),n.path&&(i.path=n.path),n.secure===`true`&&(i.secure=!0),n.httpOnly===`true`&&(i.httpOnly=!0),n.expires&&(i.expires=parseFloat(n.expires)),n.sameSite&&(i.sameSite=n.sameSite),!i.domain&&!i.path&&(i.url=r.href),await e.send(`Network.setCookie`,jC(i))}),{stdout:`Cookie "${t[0]}" set\n`,stderr:``,exitCode:0})},IC=async({browser:e,positional:t,flags:n,onTab:r})=>{if(t.length===0)return{stdout:``,stderr:`cookie-delete requires a cookie name
882
+ `,exitCode:1};let i=N(n);return`error`in i?{stdout:``,stderr:i.error,exitCode:1}:(await r(i.targetId,async e=>{let r={name:t[0]};n.domain&&(r.domain=n.domain),n.path&&(r.path=n.path),!r.domain&&!r.path&&(r.url=(await Gn(e)).href),await e.send(`Network.deleteCookies`,MC(r))}),{stdout:`Cookie "${t[0]}" deleted\n`,stderr:``,exitCode:0})},LC=async({browser:e,flags:t,onTab:n})=>{let r=N(t);return`error`in r?{stdout:``,stderr:r.error,exitCode:1}:(await n(r.targetId,async e=>{await e.send(`Network.clearBrowserCookies`)}),{stdout:`All cookies cleared
883
+ `,stderr:``,exitCode:0})};function RC(e,t){try{return _e(e,t),null}catch(e){return{stdout:``,stderr:`${e.message}\n`,exitCode:1}}}const zC=async({browser:e,state:t,positional:n,flags:r,onTab:i})=>{if(n.length===0)return{stdout:``,stderr:`generate-locator requires a ref (e.g. e5)
884
+ `,exitCode:1};let a=N(r);if(`error`in a)return{stdout:``,stderr:a.error,exitCode:1};let o=n[0],s=t.snapshots.get(a.targetId);return s?RC(s,o)||{stdout:await i(a.targetId,async e=>{let{objectId:t,entry:n}=await y(e,s,o),r=JSON.parse(await pe(e,t,`function() {
885
885
  const el = this;
886
886
  const testId = el.getAttribute('data-testid');
887
887
  const label =
@@ -892,13 +892,13 @@ Options:
892
892
  return JSON.stringify({ testId, label, placeholder, id });
893
893
  }`)??`{}`);return r.testId?`page.getByTestId(${JSON.stringify(r.testId)})`:r.label?`page.getByLabel(${JSON.stringify(r.label)})`:r.placeholder?`page.getByPlaceholder(${JSON.stringify(r.placeholder)})`:r.id?`page.locator(${JSON.stringify(`#${r.id}`)})`:n.name?`page.getByRole(${JSON.stringify(n.role)}, { name: ${JSON.stringify(n.name)} })`:`page.getByRole(${JSON.stringify(n.role)})`})+`
894
894
  `,stderr:``,exitCode:0}:{stdout:``,stderr:`No snapshot available. Run "snapshot" first.
895
- `,exitCode:1}},VC=async({browser:e,state:t,positional:n,flags:r,onTab:i})=>{let a=N(r);if(`error`in a)return{stdout:``,stderr:a.error,exitCode:1};let o=r.hide===`true`,s=r.style??`outline: 3px solid #ff4444; background: rgba(255, 68, 68, 0.1);`;if(o&&!n[0])return await i(a.targetId,async({sessionId:e,transport:t})=>{await t.send(`Runtime.evaluate`,{expression:`document.querySelectorAll('[data-slicc-highlight]').forEach(el => {
895
+ `,exitCode:1}},BC=async({browser:e,state:t,positional:n,flags:r,onTab:i})=>{let a=N(r);if(`error`in a)return{stdout:``,stderr:a.error,exitCode:1};let o=r.hide===`true`,s=r.style??`outline: 3px solid #ff4444; background: rgba(255, 68, 68, 0.1);`;if(o&&!n[0])return await i(a.targetId,async({sessionId:e,transport:t})=>{await t.send(`Runtime.evaluate`,{expression:`document.querySelectorAll('[data-slicc-highlight]').forEach(el => {
896
896
  el.style.outline = '';
897
897
  el.style.background = '';
898
898
  el.removeAttribute('data-slicc-highlight');
899
899
  })`,returnByValue:!0},e)}),{stdout:`All highlights removed
900
900
  `,stderr:``,exitCode:0};if(!n[0])return{stdout:``,stderr:`highlight requires a ref, or use --hide to remove all
901
- `,exitCode:1};let c=n[0],l=t.snapshots.get(a.targetId);return l?zC(l,c)||(await i(a.targetId,async e=>{let{objectId:t}=await y(e,l,c);await pe(e,t,o?`function() {
901
+ `,exitCode:1};let c=n[0],l=t.snapshots.get(a.targetId);return l?RC(l,c)||(await i(a.targetId,async e=>{let{objectId:t}=await y(e,l,c);await pe(e,t,o?`function() {
902
902
  this.style.outline = '';
903
903
  this.style.background = '';
904
904
  this.removeAttribute('data-slicc-highlight');
@@ -906,20 +906,20 @@ Options:
906
906
  this.style.cssText += '; ' + s;
907
907
  this.setAttribute('data-slicc-highlight', '1');
908
908
  }`,o?[]:[s])}),{stdout:o?`Highlight removed from ${c}\n`:`Highlighted ${c}\n`,stderr:``,exitCode:0}):{stdout:``,stderr:`No snapshot available. Run "snapshot" first.
909
- `,exitCode:1}},HC=async({browser:e,positional:t,flags:n,onTab:r})=>{let i=N(n);if(`error`in i)return{stdout:``,stderr:i.error,exitCode:1};let a=t.length>0?t.join(` `):void 0;return await r(i.targetId,async e=>{await e.send(`Page.enable`),await e.send(`Page.handleJavaScriptDialog`,{accept:!0,...a===void 0?{}:{promptText:a}})}),{stdout:`Accepted dialog${a?` with "${a}"`:``}\n`,stderr:``,exitCode:0}},UC=async({browser:e,flags:t,onTab:n})=>{let r=N(t);return`error`in r?{stdout:``,stderr:r.error,exitCode:1}:(await n(r.targetId,async e=>{await e.send(`Page.enable`),await e.send(`Page.handleJavaScriptDialog`,{accept:!1})}),{stdout:`Dismissed dialog
910
- `,stderr:``,exitCode:0})};function WC(e){let t=e instanceof Error?e.message:String(e);return/SyntaxError/.test(t)}function GC(e){return/\bawait\b/.test(e)||/\breturn\b/.test(e)}async function KC(e,t){try{return await e(t)}catch(n){if(!WC(n)||!GC(t))throw n;try{return await e(`(async () => (\n${t}\n))()`)}catch(r){if(!WC(r))throw r;try{return await e(`(async () => {\n${t}\n})()`)}catch(e){throw WC(e)?n:e}}}}function qC(e,t){let n=t.filename,r=t.output;return n!==void 0&&r!==void 0?{error:`${e}: --filename and --output are aliases — pass one, not both\n`}:{path:n??r}}const JC=async({browser:e,fs:t,positional:n,flags:r,onTab:i})=>{if(n.length===0)return{stdout:``,stderr:`eval requires an expression
911
- `,exitCode:1};let a=qC(`eval`,r);if(`error`in a)return{stdout:``,stderr:a.error,exitCode:1};let o=N(r);if(`error`in o)return{stdout:``,stderr:o.error,exitCode:1};let s=n.join(` `),c=await i(o.targetId,async e=>{let t=await Hn(e,r),n=await KC(t?n=>e.evaluateInFrame(t.frameId,n,{world:`main`}):t=>e.evaluate(t),s);return typeof n==`string`?n:JSON.stringify(n,null,2)});return a.path?(await t.writeFile(a.path,c??`null`),{stdout:`Result saved to ${a.path}\n`,stderr:``,exitCode:0}):{stdout:(c??`undefined`)+`
912
- `,stderr:``,exitCode:0}},YC=async({browser:e,fs:t,positional:n,flags:r,onTab:i})=>{if(n.length===0)return{stdout:``,stderr:`eval-file requires a file path
913
- `,exitCode:1};let a=N(r);if(`error`in a)return{stdout:``,stderr:a.error,exitCode:1};let o=n[0],s=qC(`eval-file`,r);if(`error`in s)return{stdout:``,stderr:s.error,exitCode:1};let c=s.path,l;try{l=await t.readTextFile(o)}catch(e){return{stdout:``,stderr:`eval-file: cannot read ${o}: ${e instanceof Error?e.message:String(e)}\n`,exitCode:1}}let u=await i(a.targetId,async e=>{let t=await Hn(e,r),n=await KC(t?n=>e.evaluateInFrame(t.frameId,n,{world:`main`}):t=>e.evaluate(t),l);return typeof n==`string`?n:JSON.stringify(n,null,2)});if(c){let e=u??`null`;return await t.writeFile(c,e),{stdout:`Result saved to ${c} (${Math.round(new TextEncoder().encode(e).length/1024)} KB)\n`,stderr:``,exitCode:0}}return{stdout:(u??`undefined`)+`
914
- `,stderr:``,exitCode:0}};function XC(e){return async(t,n)=>{let r=typeof t==`string`?t:t instanceof URL?t.toString():t.url,i=h(n?.headers),a=await e(r,{method:n?.method??`GET`,...i?{headers:i}:{}});return new Response(a.body,{status:a.status,statusText:a.statusText,headers:a.headers})}}async function ZC(e){let t=new Set;try{let n=await e.readDir(`/workspace/skills`);for(let e of n)e.type===`directory`&&e.name.startsWith(`browse-`)&&t.add(e.name)}catch{}return t}async function QC(e,t,n){let r=``;try{r=new URL(e).hostname}catch{return{}}let i=r?Dh(r):``;if(!i)return{};let a;try{a=await Ah(n)}catch(e){return{warning:`playwright-cli: warning: browse.sh catalog unavailable: ${e instanceof Error?e.message:String(e)}`}}let o=await ZC(t),s=[];for(let e of a){if(!e.hostname||Dh(e.hostname)!==i)continue;let t=e.name||e.task.replace(/-[A-Za-z0-9]{4,8}$/,``)||e.task,n=`browse-${e.hostname}-${t}`;s.push({slug:e.slug,name:e.name,title:e.title||e.name||e.task,recommendedMethod:e.recommendedMethod,installed:o.has(n),installHint:`upskill browse:${e.hostname}/${e.task}`})}return{skills:s}}async function $C(e,t={}){let n=t.fetchImpl??g(),r;try{r=await n(e,{method:t.method??`GET`})}catch(t){return{url:e,links:[],handoff:null,error:t instanceof Error?t.message:String(t)}}let i=[];for(let[e,t]of Object.entries(r.headers))e.toLowerCase()===`link`&&typeof t==`string`&&t.length>0&&i.push(t);let o=s(i,e),c=a(o),l={url:e,status:r.status,links:o,handoff:c};if(t.discover&&o.length>0){let e=await mx(o,{fetchImpl:XC(n)});l.discovery={catalog:e.catalog,serviceDesc:e.serviceDesc,serviceMeta:e.serviceMeta,status:e.status,llmsTxt:e.llmsTxt,failures:e.failures}}else t.discover&&(l.discovery={failures:[]});if(t.discover&&t.fs){let r=await QC(e,t.fs,n);r.warning?l.browseShWarning=r.warning:r.skills&&r.skills.length>0&&(l.discovery={...l.discovery??{failures:[]},browseShSkills:r.skills})}return l}const ew=async({fs:e,positional:t,flags:n})=>{if(t.length===0)return{stdout:``,stderr:`fetch requires a URL
915
- `,exitCode:1};let r=t[0],{browseShWarning:i,...a}=await $C(r,{discover:n.discover===`true`,method:n.method??`GET`,fs:e});return{stdout:JSON.stringify(a,null,2)+`
916
- `,stderr:i?`${i}\n`:``,exitCode:+!!a.error}};function tw(e){if(!e)return 0;let t={Alt:1,Control:2,Meta:4,Shift:8};return e.split(`,`).map(e=>t[e.trim()]??0).reduce((e,t)=>e|t,0)}async function nw(e){let[t,n]=ua(`Enter`);await e.send(`Input.dispatchKeyEvent`,t),await e.send(`Input.dispatchKeyEvent`,n)}async function rw(e,t,n){((await e.send(`Runtime.callFunctionOn`,{objectId:t,functionDeclaration:Zn,returnByValue:!0})).result?.value??``)!==n&&await e.send(`Runtime.callFunctionOn`,{objectId:t,functionDeclaration:Vn,arguments:[{value:n}],returnByValue:!0})}async function iw(e,t,n){await e.clickByBackendNodeId(t.backendNodeId),await e.send(`Runtime.callFunctionOn`,{objectId:t.objectId,functionDeclaration:Xn,returnByValue:!0}),await e.insertText(n),await rw(e,t.objectId,n)}const aw=async({browser:e,state:t,positional:n,flags:r,onTab:i})=>{if(n.length===0)return{stdout:``,stderr:`click requires a ref (e.g. e5)
917
- `,exitCode:1};let a=N(r);if(`error`in a)return{stdout:``,stderr:a.error,exitCode:1};let o=n[0],s=tw(r.modifiers);return{stdout:await i(a.targetId,async e=>{let n=ce(t,a.targetId),r=await y(e,n,o);return r.entry.frameId?(await pe(e,r.objectId,`function() {
909
+ `,exitCode:1}},VC=async({browser:e,positional:t,flags:n,onTab:r})=>{let i=N(n);if(`error`in i)return{stdout:``,stderr:i.error,exitCode:1};let a=t.length>0?t.join(` `):void 0;return await r(i.targetId,async e=>{await e.send(`Page.enable`),await e.send(`Page.handleJavaScriptDialog`,{accept:!0,...a===void 0?{}:{promptText:a}})}),{stdout:`Accepted dialog${a?` with "${a}"`:``}\n`,stderr:``,exitCode:0}},HC=async({browser:e,flags:t,onTab:n})=>{let r=N(t);return`error`in r?{stdout:``,stderr:r.error,exitCode:1}:(await n(r.targetId,async e=>{await e.send(`Page.enable`),await e.send(`Page.handleJavaScriptDialog`,{accept:!1})}),{stdout:`Dismissed dialog
910
+ `,stderr:``,exitCode:0})};function UC(e){let t=e instanceof Error?e.message:String(e);return/SyntaxError/.test(t)}function WC(e){return/\bawait\b/.test(e)||/\breturn\b/.test(e)}async function GC(e,t){try{return await e(t)}catch(n){if(!UC(n)||!WC(t))throw n;try{return await e(`(async () => (\n${t}\n))()`)}catch(r){if(!UC(r))throw r;try{return await e(`(async () => {\n${t}\n})()`)}catch(e){throw UC(e)?n:e}}}}function KC(e,t){let n=t.filename,r=t.output;return n!==void 0&&r!==void 0?{error:`${e}: --filename and --output are aliases — pass one, not both\n`}:{path:n??r}}const qC=async({browser:e,fs:t,positional:n,flags:r,onTab:i})=>{if(n.length===0)return{stdout:``,stderr:`eval requires an expression
911
+ `,exitCode:1};let a=KC(`eval`,r);if(`error`in a)return{stdout:``,stderr:a.error,exitCode:1};let o=N(r);if(`error`in o)return{stdout:``,stderr:o.error,exitCode:1};let s=n.join(` `),c=await i(o.targetId,async e=>{let t=await Un(e,r),n=await GC(t?n=>e.evaluateInFrame(t.frameId,n,{world:`main`}):t=>e.evaluate(t),s);return typeof n==`string`?n:JSON.stringify(n,null,2)});return a.path?(await t.writeFile(a.path,c??`null`),{stdout:`Result saved to ${a.path}\n`,stderr:``,exitCode:0}):{stdout:(c??`undefined`)+`
912
+ `,stderr:``,exitCode:0}},JC=async({browser:e,fs:t,positional:n,flags:r,onTab:i})=>{if(n.length===0)return{stdout:``,stderr:`eval-file requires a file path
913
+ `,exitCode:1};let a=N(r);if(`error`in a)return{stdout:``,stderr:a.error,exitCode:1};let o=n[0],s=KC(`eval-file`,r);if(`error`in s)return{stdout:``,stderr:s.error,exitCode:1};let c=s.path,l;try{l=await t.readTextFile(o)}catch(e){return{stdout:``,stderr:`eval-file: cannot read ${o}: ${e instanceof Error?e.message:String(e)}\n`,exitCode:1}}let u=await i(a.targetId,async e=>{let t=await Un(e,r),n=await GC(t?n=>e.evaluateInFrame(t.frameId,n,{world:`main`}):t=>e.evaluate(t),l);return typeof n==`string`?n:JSON.stringify(n,null,2)});if(c){let e=u??`null`;return await t.writeFile(c,e),{stdout:`Result saved to ${c} (${Math.round(new TextEncoder().encode(e).length/1024)} KB)\n`,stderr:``,exitCode:0}}return{stdout:(u??`undefined`)+`
914
+ `,stderr:``,exitCode:0}};function YC(e){return async(t,n)=>{let r=typeof t==`string`?t:t instanceof URL?t.toString():t.url,i=h(n?.headers),a=await e(r,{method:n?.method??`GET`,...i?{headers:i}:{}});return new Response(a.body,{status:a.status,statusText:a.statusText,headers:a.headers})}}async function XC(e){let t=new Set;try{let n=await e.readDir(`/workspace/skills`);for(let e of n)e.type===`directory`&&e.name.startsWith(`browse-`)&&t.add(e.name)}catch{}return t}async function ZC(e,t,n){let r=``;try{r=new URL(e).hostname}catch{return{}}let i=r?Eh(r):``;if(!i)return{};let a;try{a=await kh(n)}catch(e){return{warning:`playwright-cli: warning: browse.sh catalog unavailable: ${e instanceof Error?e.message:String(e)}`}}let o=await XC(t),s=[];for(let e of a){if(!e.hostname||Eh(e.hostname)!==i)continue;let t=e.name||e.task.replace(/-[A-Za-z0-9]{4,8}$/,``)||e.task,n=`browse-${e.hostname}-${t}`;s.push({slug:e.slug,name:e.name,title:e.title||e.name||e.task,recommendedMethod:e.recommendedMethod,installed:o.has(n),installHint:`upskill browse:${e.hostname}/${e.task}`})}return{skills:s}}async function QC(e,t={}){let n=t.fetchImpl??g(),r;try{r=await n(e,{method:t.method??`GET`})}catch(t){return{url:e,links:[],handoff:null,error:t instanceof Error?t.message:String(t)}}let i=[];for(let[e,t]of Object.entries(r.headers))e.toLowerCase()===`link`&&typeof t==`string`&&t.length>0&&i.push(t);let o=s(i,e),c=a(o),l={url:e,status:r.status,links:o,handoff:c};if(t.discover&&o.length>0){let e=await px(o,{fetchImpl:YC(n)});l.discovery={catalog:e.catalog,serviceDesc:e.serviceDesc,serviceMeta:e.serviceMeta,status:e.status,llmsTxt:e.llmsTxt,failures:e.failures}}else t.discover&&(l.discovery={failures:[]});if(t.discover&&t.fs){let r=await ZC(e,t.fs,n);r.warning?l.browseShWarning=r.warning:r.skills&&r.skills.length>0&&(l.discovery={...l.discovery??{failures:[]},browseShSkills:r.skills})}return l}const $C=async({fs:e,positional:t,flags:n})=>{if(t.length===0)return{stdout:``,stderr:`fetch requires a URL
915
+ `,exitCode:1};let r=t[0],{browseShWarning:i,...a}=await QC(r,{discover:n.discover===`true`,method:n.method??`GET`,fs:e});return{stdout:JSON.stringify(a,null,2)+`
916
+ `,stderr:i?`${i}\n`:``,exitCode:+!!a.error}};function ew(e){if(!e)return 0;let t={Alt:1,Control:2,Meta:4,Shift:8};return e.split(`,`).map(e=>t[e.trim()]??0).reduce((e,t)=>e|t,0)}async function tw(e){let[t,n]=da(`Enter`);await e.send(`Input.dispatchKeyEvent`,t),await e.send(`Input.dispatchKeyEvent`,n)}async function nw(e,t,n){((await e.send(`Runtime.callFunctionOn`,{objectId:t,functionDeclaration:Qn,returnByValue:!0})).result?.value??``)!==n&&await e.send(`Runtime.callFunctionOn`,{objectId:t,functionDeclaration:Hn,arguments:[{value:n}],returnByValue:!0})}async function rw(e,t,n){await e.clickByBackendNodeId(t.backendNodeId),await e.send(`Runtime.callFunctionOn`,{objectId:t.objectId,functionDeclaration:Zn,returnByValue:!0}),await e.insertText(n),await nw(e,t.objectId,n)}const iw=async({browser:e,state:t,positional:n,flags:r,onTab:i})=>{if(n.length===0)return{stdout:``,stderr:`click requires a ref (e.g. e5)
917
+ `,exitCode:1};let a=N(r);if(`error`in a)return{stdout:``,stderr:a.error,exitCode:1};let o=n[0],s=ew(r.modifiers);return{stdout:await i(a.targetId,async e=>{let n=ce(t,a.targetId),r=await y(e,n,o);return r.entry.frameId?(await pe(e,r.objectId,`function() {
918
918
  this.scrollIntoView({ block: 'center' });
919
919
  this.click();
920
920
  }`),t.snapshots.delete(a.targetId),`Clicked ${o} (in iframe)`):(await e.clickByBackendNodeId(r.backendNodeId,s),t.snapshots.delete(a.targetId),`Clicked ${o}`)})+`
921
- `,stderr:``,exitCode:0}},ow=async({browser:e,positional:t,flags:n,onTab:r})=>{if(t.length===0)return{stdout:``,stderr:`type requires text
922
- `,exitCode:1};let i=N(n);if(`error`in i)return{stdout:``,stderr:i.error,exitCode:1};let a=t.join(` `);return await r(i.targetId,async e=>{await e.type(a),n.submit===`true`&&await nw(e)}),{stdout:`Typed: ${a}\n`,stderr:``,exitCode:0}},sw=async({browser:e,state:t,positional:n,flags:r,onTab:i})=>{if(n.length<2)return{stdout:``,stderr:`fill requires <ref> <text>
921
+ `,stderr:``,exitCode:0}},aw=async({browser:e,positional:t,flags:n,onTab:r})=>{if(t.length===0)return{stdout:``,stderr:`type requires text
922
+ `,exitCode:1};let i=N(n);if(`error`in i)return{stdout:``,stderr:i.error,exitCode:1};let a=t.join(` `);return await r(i.targetId,async e=>{await e.type(a),n.submit===`true`&&await tw(e)}),{stdout:`Typed: ${a}\n`,stderr:``,exitCode:0}},ow=async({browser:e,state:t,positional:n,flags:r,onTab:i})=>{if(n.length<2)return{stdout:``,stderr:`fill requires <ref> <text>
923
923
  `,exitCode:1};let a=N(r);if(`error`in a)return{stdout:``,stderr:a.error,exitCode:1};let o=n[0],s=n.slice(1).join(` `);return{stdout:await i(a.targetId,async e=>{let n=ce(t,a.targetId),i=await y(e,n,o);return i.entry.frameId?(await pe(e,i.objectId,`function(text) {
924
924
  this.scrollIntoView({ block: 'center' });
925
925
  this.focus();
@@ -927,40 +927,40 @@ Options:
927
927
  this.value = text;
928
928
  this.dispatchEvent(new Event('input', { bubbles: true }));
929
929
  this.dispatchEvent(new Event('change', { bubbles: true }));
930
- }`,[s]),t.snapshots.delete(a.targetId),r.submit===`true`&&await nw(e),`Filled ${o} with: ${s} (in iframe)`):(await iw(e,i,s),t.snapshots.delete(a.targetId),r.submit===`true`&&await nw(e),`Filled ${o} with: ${s}`)})+`
931
- `,stderr:``,exitCode:0}},cw=async({browser:e,positional:t,flags:n,onTab:r})=>{if(t.length===0)return{stdout:``,stderr:`press requires a key name
932
- `,exitCode:1};let i=N(n);if(`error`in i)return{stdout:``,stderr:i.error,exitCode:1};let a=t[0],[o,s]=ua(a);return await r(i.targetId,async({sessionId:e,transport:t})=>{await t.send(`Input.dispatchKeyEvent`,o,e),await t.send(`Input.dispatchKeyEvent`,s,e)}),{stdout:`Pressed ${a}\n`,stderr:``,exitCode:0}},lw=async({browser:e,positional:t,flags:n,onTab:r})=>{if(t.length===0)return{stdout:``,stderr:`keydown requires a key name
933
- `,exitCode:1};let i=N(n);if(`error`in i)return{stdout:``,stderr:i.error,exitCode:1};let a=t[0],o=da(a,`keyDown`);return await r(i.targetId,async({sessionId:e,transport:t})=>{await t.send(`Input.dispatchKeyEvent`,o,e)}),{stdout:`Key ${a} down\n`,stderr:``,exitCode:0}},uw=async({browser:e,positional:t,flags:n,onTab:r})=>{if(t.length===0)return{stdout:``,stderr:`keyup requires a key name
934
- `,exitCode:1};let i=N(n);if(`error`in i)return{stdout:``,stderr:i.error,exitCode:1};let a=t[0],o=da(a,`keyUp`);return await r(i.targetId,async({sessionId:e,transport:t})=>{await t.send(`Input.dispatchKeyEvent`,o,e)}),{stdout:`Key ${a} up\n`,stderr:``,exitCode:0}},dw=async({browser:e,state:t,positional:n,flags:r,onTab:i})=>{if(n.length===0)return{stdout:``,stderr:`dblclick requires a ref (e.g. e5)
935
- `,exitCode:1};let a=N(r);if(`error`in a)return{stdout:``,stderr:a.error,exitCode:1};let o=n[0],s=n[1]||`left`,c=tw(r.modifiers);return{stdout:await i(a.targetId,async e=>{let n=ce(t,a.targetId),r=await y(e,n,o);return r.entry.frameId?(await pe(e,r.objectId,`function() {
930
+ }`,[s]),t.snapshots.delete(a.targetId),r.submit===`true`&&await tw(e),`Filled ${o} with: ${s} (in iframe)`):(await rw(e,i,s),t.snapshots.delete(a.targetId),r.submit===`true`&&await tw(e),`Filled ${o} with: ${s}`)})+`
931
+ `,stderr:``,exitCode:0}},sw=async({browser:e,positional:t,flags:n,onTab:r})=>{if(t.length===0)return{stdout:``,stderr:`press requires a key name
932
+ `,exitCode:1};let i=N(n);if(`error`in i)return{stdout:``,stderr:i.error,exitCode:1};let a=t[0],[o,s]=da(a);return await r(i.targetId,async({sessionId:e,transport:t})=>{await t.send(`Input.dispatchKeyEvent`,o,e),await t.send(`Input.dispatchKeyEvent`,s,e)}),{stdout:`Pressed ${a}\n`,stderr:``,exitCode:0}},cw=async({browser:e,positional:t,flags:n,onTab:r})=>{if(t.length===0)return{stdout:``,stderr:`keydown requires a key name
933
+ `,exitCode:1};let i=N(n);if(`error`in i)return{stdout:``,stderr:i.error,exitCode:1};let a=t[0],o=fa(a,`keyDown`);return await r(i.targetId,async({sessionId:e,transport:t})=>{await t.send(`Input.dispatchKeyEvent`,o,e)}),{stdout:`Key ${a} down\n`,stderr:``,exitCode:0}},lw=async({browser:e,positional:t,flags:n,onTab:r})=>{if(t.length===0)return{stdout:``,stderr:`keyup requires a key name
934
+ `,exitCode:1};let i=N(n);if(`error`in i)return{stdout:``,stderr:i.error,exitCode:1};let a=t[0],o=fa(a,`keyUp`);return await r(i.targetId,async({sessionId:e,transport:t})=>{await t.send(`Input.dispatchKeyEvent`,o,e)}),{stdout:`Key ${a} up\n`,stderr:``,exitCode:0}},uw=async({browser:e,state:t,positional:n,flags:r,onTab:i})=>{if(n.length===0)return{stdout:``,stderr:`dblclick requires a ref (e.g. e5)
935
+ `,exitCode:1};let a=N(r);if(`error`in a)return{stdout:``,stderr:a.error,exitCode:1};let o=n[0],s=n[1]||`left`,c=ew(r.modifiers);return{stdout:await i(a.targetId,async e=>{let n=ce(t,a.targetId),r=await y(e,n,o);return r.entry.frameId?(await pe(e,r.objectId,`function() {
936
936
  this.scrollIntoView({ block: 'center' });
937
937
  this.dispatchEvent(new MouseEvent('dblclick', { bubbles: true }));
938
938
  }`),t.snapshots.delete(a.targetId),`Double-clicked ${o} (in iframe)`):(await e.dblclickByBackendNodeId(r.backendNodeId,s,c),t.snapshots.delete(a.targetId),`Double-clicked ${o}`)})+`
939
- `,stderr:``,exitCode:0}},fw=async({browser:e,state:t,positional:n,flags:r,onTab:i})=>{if(n.length===0)return{stdout:``,stderr:`hover requires a ref (e.g. e5)
939
+ `,stderr:``,exitCode:0}},dw=async({browser:e,state:t,positional:n,flags:r,onTab:i})=>{if(n.length===0)return{stdout:``,stderr:`hover requires a ref (e.g. e5)
940
940
  `,exitCode:1};let a=N(r);if(`error`in a)return{stdout:``,stderr:a.error,exitCode:1};let o=n[0];return{stdout:await i(a.targetId,async e=>{let n=ce(t,a.targetId),r=await y(e,n,o);return r.entry.frameId?(await pe(e,r.objectId,`function() {
941
941
  this.scrollIntoView({ block: 'center' });
942
942
  this.dispatchEvent(new MouseEvent('mouseover', { bubbles: true }));
943
943
  }`),`Hovered ${o} (in iframe)`):(await e.hoverByBackendNodeId(r.backendNodeId),`Hovered ${o}`)})+`
944
- `,stderr:``,exitCode:0}},pw=async({browser:e,state:t,positional:n,flags:r,onTab:i})=>{if(n.length<2)return{stdout:``,stderr:`select requires <ref> <value>
944
+ `,stderr:``,exitCode:0}},fw=async({browser:e,state:t,positional:n,flags:r,onTab:i})=>{if(n.length<2)return{stdout:``,stderr:`select requires <ref> <value>
945
945
  `,exitCode:1};let a=N(r);if(`error`in a)return{stdout:``,stderr:a.error,exitCode:1};let o=n[0],s=n.slice(1).join(` `);return{stdout:await i(a.targetId,async e=>{let n=ce(t,a.targetId),r=await y(e,n,o);return r.entry.frameId?(await pe(e,r.objectId,`function(value) {
946
946
  this.value = value;
947
947
  this.dispatchEvent(new Event('change', { bubbles: true }));
948
948
  }`,[s]),t.snapshots.delete(a.targetId),`Selected "${s}" on ${o} (in iframe)`):(await e.selectByBackendNodeId(r.backendNodeId,s),t.snapshots.delete(a.targetId),`Selected "${s}" on ${o}`)})+`
949
- `,stderr:``,exitCode:0}};function mw(e){let t=e?`check`:`uncheck`,n=e?`Checked`:`Unchecked`;return async({state:r,positional:i,flags:a,onTab:o})=>{if(i.length===0)return{stdout:``,stderr:`${t} requires a ref (e.g. e5)\n`,exitCode:1};let s=N(a);if(`error`in s)return{stdout:``,stderr:s.error,exitCode:1};let c=i[0];return{stdout:await o(s.targetId,async t=>{let i=ce(r,s.targetId),a=await y(t,i,c),o=!!a.entry.frameId;return(o?await pe(t,a.objectId,`function(checked) {
949
+ `,stderr:``,exitCode:0}};function pw(e){let t=e?`check`:`uncheck`,n=e?`Checked`:`Unchecked`;return async({state:r,positional:i,flags:a,onTab:o})=>{if(i.length===0)return{stdout:``,stderr:`${t} requires a ref (e.g. e5)\n`,exitCode:1};let s=N(a);if(`error`in s)return{stdout:``,stderr:s.error,exitCode:1};let c=i[0];return{stdout:await o(s.targetId,async t=>{let i=ce(r,s.targetId),a=await y(t,i,c),o=!!a.entry.frameId;return(o?await pe(t,a.objectId,`function(checked) {
950
950
  if (this.checked === checked) return 'already';
951
951
  this.checked = checked;
952
952
  this.dispatchEvent(new Event('change', { bubbles: true }));
953
953
  this.dispatchEvent(new MouseEvent('click', { bubbles: true }));
954
954
  return 'toggled';
955
955
  }`,[e]):await t.setCheckedByBackendNodeId(a.backendNodeId,e))===`already`?`${c} already ${n.toLowerCase()}`:(r.snapshots.delete(s.targetId),o?`${n} ${c} (in iframe)`:`${n} ${c}`)})+`
956
- `,stderr:``,exitCode:0}}}const hw=mw(!0),gw=mw(!1),_w=async({browser:e,state:t,positional:n,flags:r,onTab:i})=>{if(n.length<2)return{stdout:``,stderr:`drag requires <startRef> <endRef>
956
+ `,stderr:``,exitCode:0}}}const mw=pw(!0),hw=pw(!1),gw=async({browser:e,state:t,positional:n,flags:r,onTab:i})=>{if(n.length<2)return{stdout:``,stderr:`drag requires <startRef> <endRef>
957
957
  `,exitCode:1};let a=N(r);if(`error`in a)return{stdout:``,stderr:a.error,exitCode:1};let o=n[0],s=n[1];return{stdout:await i(a.targetId,async e=>{let n=ce(t,a.targetId),r=await y(e,n,o);de(r.entry,o,`drag`);let i=await y(e,n,s);return de(i.entry,s,`drag`),await e.dragByBackendNodeIds(r.backendNodeId,i.backendNodeId),t.snapshots.delete(a.targetId),`Dragged ${o} to ${s}`})+`
958
- `,stderr:``,exitCode:0}};async function vw(e,t){let n=await e.readFile(t,{encoding:`binary`});if(n instanceof Uint8Array)return n;if(typeof n!=`string`)throw Error(`cannot represent '${t}' faithfully: unexpected file content type`);if(n.includes(`�`))throw Error(`cannot represent '${t}' faithfully: file was read as text (contains U+FFFD). Binary files must be read as bytes, not UTF-8.`);return new TextEncoder().encode(n)}function yw(e){return e===void 0?`left`:e===`left`||e===`right`||e===`middle`?e:{error:`Invalid button "${e}". Must be left, right, or middle.\n`}}const bw={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 xw(e){let t=e.split(`.`).pop()?.toLowerCase()??``;return bw[t]??`application/octet-stream`}const Sw=async({browser:e,state:t,positional:n,flags:r,onTab:i})=>{if(n.length<2)return{stdout:``,stderr:`mousemove requires <x> <y>
958
+ `,stderr:``,exitCode:0}};async function _w(e,t){let n=await e.readFile(t,{encoding:`binary`});if(n instanceof Uint8Array)return n;if(typeof n!=`string`)throw Error(`cannot represent '${t}' faithfully: unexpected file content type`);if(n.includes(`�`))throw Error(`cannot represent '${t}' faithfully: file was read as text (contains U+FFFD). Binary files must be read as bytes, not UTF-8.`);return new TextEncoder().encode(n)}function vw(e){return e===void 0?`left`:e===`left`||e===`right`||e===`middle`?e:{error:`Invalid button "${e}". Must be left, right, or middle.\n`}}const yw={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 bw(e){let t=e.split(`.`).pop()?.toLowerCase()??``;return yw[t]??`application/octet-stream`}const xw=async({browser:e,state:t,positional:n,flags:r,onTab:i})=>{if(n.length<2)return{stdout:``,stderr:`mousemove requires <x> <y>
959
959
  `,exitCode:1};let a=N(r);if(`error`in a)return{stdout:``,stderr:a.error,exitCode:1};let o=parseFloat(n[0]),s=parseFloat(n[1]);return isNaN(o)||isNaN(s)?{stdout:``,stderr:`x and y must be numbers
960
- `,exitCode:1}:(await i(a.targetId,async({sessionId:e,transport:t})=>{await t.send(`Input.dispatchMouseEvent`,{type:`mouseMoved`,x:o,y:s,button:`none`,modifiers:0},e)}),t.lastMousePosition.set(a.targetId,{x:o,y:s}),{stdout:`Mouse moved to (${o}, ${s})\n`,stderr:``,exitCode:0})},Cw=async({browser:e,state:t,positional:n,flags:r,onTab:i})=>{let a=N(r);if(`error`in a)return{stdout:``,stderr:a.error,exitCode:1};let o=yw(n[0]);if(typeof o==`object`)return{stdout:``,stderr:o.error,exitCode:1};let s=t.lastMousePosition.get(a.targetId)??{x:0,y:0};return await i(a.targetId,async({sessionId:e,transport:t})=>{await t.send(`Input.dispatchMouseEvent`,{type:`mousePressed`,button:o,clickCount:1,x:s.x,y:s.y,modifiers:0},e)}),{stdout:`Mouse button ${o} pressed\n`,stderr:``,exitCode:0}},ww=async({browser:e,state:t,positional:n,flags:r,onTab:i})=>{let a=N(r);if(`error`in a)return{stdout:``,stderr:a.error,exitCode:1};let o=yw(n[0]);if(typeof o==`object`)return{stdout:``,stderr:o.error,exitCode:1};let s=t.lastMousePosition.get(a.targetId)??{x:0,y:0};return await i(a.targetId,async({sessionId:e,transport:t})=>{await t.send(`Input.dispatchMouseEvent`,{type:`mouseReleased`,button:o,clickCount:1,x:s.x,y:s.y,modifiers:0},e)}),{stdout:`Mouse button ${o} released\n`,stderr:``,exitCode:0}},Tw=async({browser:e,state:t,positional:n,flags:r,onTab:i})=>{if(n.length<2)return{stdout:``,stderr:`mousewheel requires <dx> <dy>
960
+ `,exitCode:1}:(await i(a.targetId,async({sessionId:e,transport:t})=>{await t.send(`Input.dispatchMouseEvent`,{type:`mouseMoved`,x:o,y:s,button:`none`,modifiers:0},e)}),t.lastMousePosition.set(a.targetId,{x:o,y:s}),{stdout:`Mouse moved to (${o}, ${s})\n`,stderr:``,exitCode:0})},Sw=async({browser:e,state:t,positional:n,flags:r,onTab:i})=>{let a=N(r);if(`error`in a)return{stdout:``,stderr:a.error,exitCode:1};let o=vw(n[0]);if(typeof o==`object`)return{stdout:``,stderr:o.error,exitCode:1};let s=t.lastMousePosition.get(a.targetId)??{x:0,y:0};return await i(a.targetId,async({sessionId:e,transport:t})=>{await t.send(`Input.dispatchMouseEvent`,{type:`mousePressed`,button:o,clickCount:1,x:s.x,y:s.y,modifiers:0},e)}),{stdout:`Mouse button ${o} pressed\n`,stderr:``,exitCode:0}},Cw=async({browser:e,state:t,positional:n,flags:r,onTab:i})=>{let a=N(r);if(`error`in a)return{stdout:``,stderr:a.error,exitCode:1};let o=vw(n[0]);if(typeof o==`object`)return{stdout:``,stderr:o.error,exitCode:1};let s=t.lastMousePosition.get(a.targetId)??{x:0,y:0};return await i(a.targetId,async({sessionId:e,transport:t})=>{await t.send(`Input.dispatchMouseEvent`,{type:`mouseReleased`,button:o,clickCount:1,x:s.x,y:s.y,modifiers:0},e)}),{stdout:`Mouse button ${o} released\n`,stderr:``,exitCode:0}},ww=async({browser:e,state:t,positional:n,flags:r,onTab:i})=>{if(n.length<2)return{stdout:``,stderr:`mousewheel requires <dx> <dy>
961
961
  `,exitCode:1};let a=N(r);if(`error`in a)return{stdout:``,stderr:a.error,exitCode:1};let o=parseFloat(n[0]),s=parseFloat(n[1]);if(isNaN(o)||isNaN(s))return{stdout:``,stderr:`dx and dy must be numbers
962
- `,exitCode:1};let c=t.lastMousePosition.get(a.targetId)??{x:0,y:0},l=``;return await i(a.targetId,async({sessionId:e,transport:t})=>{if((await t.send(`Runtime.evaluate`,{expression:`document.visibilityState`,returnByValue:!0},e)).result?.value===`hidden`){let n=await t.send(`Runtime.evaluate`,{expression:Ew(c.x,c.y,o,s),returnByValue:!0},e);if(n.exceptionDetails)throw Error(n.exceptionDetails.exception?.description??n.exceptionDetails.text??`Page scroll failed`);l=`note: the tab is in the background, so the wheel was applied as a page scroll
963
- `;return}await t.send(`Input.dispatchMouseEvent`,{type:`mouseWheel`,deltaX:o,deltaY:s,x:c.x,y:c.y,modifiers:0},e)}),{stdout:`Mouse wheel scrolled (dx=${o}, dy=${s})\n`,stderr:l,exitCode:0}};function Ew(e,t,n,r){return`(() => {
962
+ `,exitCode:1};let c=t.lastMousePosition.get(a.targetId)??{x:0,y:0},l=``;return await i(a.targetId,async({sessionId:e,transport:t})=>{if((await t.send(`Runtime.evaluate`,{expression:`document.visibilityState`,returnByValue:!0},e)).result?.value===`hidden`){let n=await t.send(`Runtime.evaluate`,{expression:Tw(c.x,c.y,o,s),returnByValue:!0},e);if(n.exceptionDetails)throw Error(n.exceptionDetails.exception?.description??n.exceptionDetails.text??`Page scroll failed`);l=`note: the tab is in the background, so the wheel was applied as a page scroll
963
+ `;return}await t.send(`Input.dispatchMouseEvent`,{type:`mouseWheel`,deltaX:o,deltaY:s,x:c.x,y:c.y,modifiers:0},e)}),{stdout:`Mouse wheel scrolled (dx=${o}, dy=${s})\n`,stderr:l,exitCode:0}};function Tw(e,t,n,r){return`(() => {
964
964
  const dx = ${JSON.stringify(n)}, dy = ${JSON.stringify(r)};
965
965
  const canScroll = (el) => {
966
966
  const style = getComputedStyle(el);
@@ -979,8 +979,8 @@ Options:
979
979
  : (document.scrollingElement || document.documentElement);
980
980
  target.scrollBy({ left: dx, top: dy, behavior: 'instant' });
981
981
  return true;
982
- })()`}const Dw=async({browser:e,fs:n,state:r,positional:i,flags:a,onTab:o})=>{if(i.length===0)return{stdout:``,stderr:`drop requires a ref (e.g. e5)
983
- `,exitCode:1};let s=N(a);if(`error`in s)return{stdout:``,stderr:s.error,exitCode:1};let c=i[0],l=a.path,u=a.data,d=[];if(l){let e=await vw(n,l),r=l.split(`/`).pop()??l;d.push({name:r,type:xw(r),base64:t(e)})}let f=[];if(u){let e=u.indexOf(`=`);if(e===-1)return{stdout:``,stderr:`--data format must be "mime/type=value"
982
+ })()`}const Ew=async({browser:e,fs:n,state:r,positional:i,flags:a,onTab:o})=>{if(i.length===0)return{stdout:``,stderr:`drop requires a ref (e.g. e5)
983
+ `,exitCode:1};let s=N(a);if(`error`in s)return{stdout:``,stderr:s.error,exitCode:1};let c=i[0],l=a.path,u=a.data,d=[];if(l){let e=await _w(n,l),r=l.split(`/`).pop()??l;d.push({name:r,type:bw(r),base64:t(e)})}let f=[];if(u){let e=u.indexOf(`=`);if(e===-1)return{stdout:``,stderr:`--data format must be "mime/type=value"
984
984
  `,exitCode:1};f.push({mimeType:u.slice(0,e),value:u.slice(e+1)})}return{stdout:await o(s.targetId,async e=>{let t=ce(r,s.targetId),{objectId:n}=await y(e,t,c);return await pe(e,n,`function(filesData, dataItems) {
985
985
  var dt = new DataTransfer();
986
986
  for (var i = 0; i < filesData.length; i++) {
@@ -996,7 +996,7 @@ Options:
996
996
  this.dispatchEvent(new DragEvent('drop', { bubbles: true, cancelable: true, dataTransfer: dt }));
997
997
  return this.tagName;
998
998
  }`,[d,f]),r.snapshots.delete(s.targetId),`Dropped onto ${c}`})+`
999
- `,stderr:``,exitCode:0}},Ow=e(`playwright-teleport`),kw={origin:``,localStorage:{},sessionStorage:{}};function Aw(e){let t=new Map;for(let n of e){let e=n.domain??`unknown`;t.set(e,(t.get(e)??0)+1)}return[...t.entries()].sort((e,t)=>t[1]-e[1]).map(([e,t])=>`${t} ${e}`).join(`, `)}function jw(e){return Object.keys(e.localStorage).length+Object.keys(e.sessionStorage).length}function Mw(e){if(!e)return null;try{return new URL(e).origin}catch{return null}}function Nw(e){try{return new URL(`/favicon.ico`,e).toString()}catch{return e}}function Pw(e,t,n){let r=Mw(t);if(t&&r===e)return t;let i=Mw(n);return n&&i===e?n:e||(t??n)}async function Fw(e,t){let n=await e.evaluate(`(() => {
999
+ `,stderr:``,exitCode:0}},Dw=e(`playwright-teleport`),Ow={origin:``,localStorage:{},sessionStorage:{}};function kw(e){let t=new Map;for(let n of e){let e=n.domain??`unknown`;t.set(e,(t.get(e)??0)+1)}return[...t.entries()].sort((e,t)=>t[1]-e[1]).map(([e,t])=>`${t} ${e}`).join(`, `)}function Aw(e){return Object.keys(e.localStorage).length+Object.keys(e.sessionStorage).length}function jw(e){if(!e)return null;try{return new URL(e).origin}catch{return null}}function Mw(e){try{return new URL(`/favicon.ico`,e).toString()}catch{return e}}function Nw(e,t,n){let r=jw(t);if(t&&r===e)return t;let i=jw(n);return n&&i===e?n:e||(t??n)}async function Pw(e,t){let n=await e.evaluate(`(() => {
1000
1000
  const collect = (storage) => {
1001
1001
  const items = {};
1002
1002
  for (let i = 0; i < storage.length; i++) {
@@ -1010,7 +1010,7 @@ Options:
1010
1010
  localStorage: collect(window.localStorage),
1011
1011
  sessionStorage: collect(window.sessionStorage),
1012
1012
  });
1013
- })()`);if(typeof n!=`string`||n.length===0)return Ow.warn(`Teleport storage capture returned non-string result`,{label:t,type:typeof n}),kw;try{let e=JSON.parse(n);return{origin:typeof e.origin==`string`?e.origin:``,localStorage:e.localStorage??{},sessionStorage:e.sessionStorage??{}}}catch(e){return Ow.warn(`Could not parse teleport storage snapshot`,{label:t,error:String(e)}),kw}}function Iw(e){return`(() => {
1013
+ })()`);if(typeof n!=`string`||n.length===0)return Dw.warn(`Teleport storage capture returned non-string result`,{label:t,type:typeof n}),Ow;try{let e=JSON.parse(n);return{origin:typeof e.origin==`string`?e.origin:``,localStorage:e.localStorage??{},sessionStorage:e.sessionStorage??{}}}catch(e){return Dw.warn(`Could not parse teleport storage snapshot`,{label:t,error:String(e)}),Ow}}function Fw(e){return`(() => {
1014
1014
  const snapshot = ${JSON.stringify(e)};
1015
1015
  if (!snapshot.origin || window.location.origin !== snapshot.origin) return;
1016
1016
  const markerKey = '__slicc_teleport_storage_applied__:' + snapshot.origin;
@@ -1026,7 +1026,7 @@ Options:
1026
1026
  apply(window.localStorage, snapshot.localStorage || {});
1027
1027
  apply(window.sessionStorage, snapshot.sessionStorage || {});
1028
1028
  try { window.sessionStorage.setItem(markerKey, '1'); } catch {}
1029
- })();`}function Lw(e){return`(() => {
1029
+ })();`}function Iw(e){return`(() => {
1030
1030
  const snapshot = ${JSON.stringify(e)};
1031
1031
  if (!snapshot.origin || globalThis.location.origin !== snapshot.origin) {
1032
1032
  throw new Error('Teleport storage origin mismatch');
@@ -1044,82 +1044,82 @@ Options:
1044
1044
  localStorageCount: Object.keys(snapshot.localStorage || {}).length,
1045
1045
  sessionStorageCount: Object.keys(snapshot.sessionStorage || {}).length,
1046
1046
  });
1047
- })();`}async function Rw(e,t,n){let r=jw(t);if(r===0)return;let i=await e.evaluate(Lw(t));Ow.info(`Applied teleport storage snapshot on current page`,{target:n,totalEntries:r,resultType:typeof i}),Ow.debug(`Applied teleport storage snapshot details`,{target:n,origin:t.origin||`(unknown)`,totalEntries:r,resultType:typeof i})}async function zw(e,t,n){let r=jw(t);if(r===0)return null;let i=await e.send(`Page.addScriptToEvaluateOnNewDocument`,{source:Iw(t)}),a=typeof i.identifier==`string`?i.identifier:null;return Ow.info(`Installed teleport storage init script`,{target:n,totalEntries:r,hasIdentifier:!!a}),Ow.debug(`Installed teleport storage init script details`,{target:n,origin:t.origin||`(unknown)`,localStorageCount:Object.keys(t.localStorage).length,sessionStorageCount:Object.keys(t.sessionStorage).length,hasIdentifier:!!a}),a?{identifier:a,targetId:e.targetId}:null}async function Bw(e,t,n){if(t)try{await e.send(`Page.removeScriptToEvaluateOnNewDocument`,{identifier:t.identifier})}catch(e){Ow.warn(`Failed to remove teleport storage init script`,{target:n,error:String(e)})}}async function Vw(e){let t=await e.evaluate(`(() => JSON.stringify({
1047
+ })();`}async function Lw(e,t,n){let r=Aw(t);if(r===0)return;let i=await e.evaluate(Iw(t));Dw.info(`Applied teleport storage snapshot on current page`,{target:n,totalEntries:r,resultType:typeof i}),Dw.debug(`Applied teleport storage snapshot details`,{target:n,origin:t.origin||`(unknown)`,totalEntries:r,resultType:typeof i})}async function Rw(e,t,n){let r=Aw(t);if(r===0)return null;let i=await e.send(`Page.addScriptToEvaluateOnNewDocument`,{source:Fw(t)}),a=typeof i.identifier==`string`?i.identifier:null;return Dw.info(`Installed teleport storage init script`,{target:n,totalEntries:r,hasIdentifier:!!a}),Dw.debug(`Installed teleport storage init script details`,{target:n,origin:t.origin||`(unknown)`,localStorageCount:Object.keys(t.localStorage).length,sessionStorageCount:Object.keys(t.sessionStorage).length,hasIdentifier:!!a}),a?{identifier:a,targetId:e.targetId}:null}async function zw(e,t,n){if(t)try{await e.send(`Page.removeScriptToEvaluateOnNewDocument`,{identifier:t.identifier})}catch(e){Dw.warn(`Failed to remove teleport storage init script`,{target:n,error:String(e)})}}async function Bw(e){let t=await e.evaluate(`(() => JSON.stringify({
1048
1048
  url: window.location.href,
1049
1049
  title: document.title || '',
1050
1050
  bodySnippet: document.body?.innerText?.replace(/\\s+/g, ' ').trim().slice(0, 500) || '(empty)',
1051
- }))()`);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 Hw(e){return/callback|authorize\/resume|error/i.test(e)}async function Uw(e,t,n){try{let r=await Vw(e),i=`${n}:${r.url}:${r.title}`;if(t.lastFollowerDiagnosticKey===i)return;t.lastFollowerDiagnosticKey=i,Ow.debug(`Teleport follower diagnostics`,{reason:n,url:r.url,title:r.title,bodySnippet:r.bodySnippet})}catch(e){Ow.warn(`Could not capture teleport follower diagnostics`,{reason:n,error:String(e)})}}async function Ww(e,t,n){let r=t.followerStorageScript;if(r){t.followerStorageScript=null;try{await e.withTab(r.targetId,e=>Bw(e,r,`follower`)),Ow.info(`Removed follower teleport storage init script`,{reason:n})}catch(e){Ow.warn(`Failed to remove follower teleport storage init script`,{reason:n,error:String(e)})}}}function Gw(e){return Array.isArray(e)?e:[]}const U=e(`playwright-teleport`);let Kw=null,qw=null;function Jw(e){Kw=e}function Yw(e){qw=e}function Xw(){return qw?.()??null}async function Zw(e,t){if(U.warn(`Teleport timed out`,{timeoutMs:t.timeoutMs,phase:t.phase}),U.debug(`Teleport timeout details`,{timeoutMs:t.timeoutMs,phase:t.phase,followerTargetId:t.followerTargetId}),t.phase=`timedOut`,t.followerTargetId){try{await e.withTab(t.followerTargetId,e=>Uw(e,t,`timeout`))}catch(e){U.warn(`Could not attach to follower for timeout diagnostics`,{error:String(e)})}await Ww(e,t,`timeout`)}if(Qw(t),t.followerTargetId)try{await e.closePage(t.followerTargetId)}catch(e){U.warn(`Failed to close follower tab after timeout`,{error:String(e)})}t.rejectBlock?.(Error(`Teleport timed out after ${Math.round(t.timeoutMs/1e3)}s — human did not complete auth`))}function Qw(e){U.info(`Cleaning up teleport watcher`,{phase:e.phase,hadPoll:!!e.pollInterval,hadTimeout:!!e.timeoutTimer,hadListener:!!e.cleanupListener}),e.pollInterval&&=(clearInterval(e.pollInterval),void 0),e.timeoutTimer&&=(clearTimeout(e.timeoutTimer),void 0),e.cleanupListener&&=(e.cleanupListener(),void 0)}function $w(e,t,n,r,i,a,o,s){if(a===`preview`)throw Error(`cannot teleport to a preview target (no Network.*)`);U.info(`Arming teleport watcher`,{timeoutMs:i,runtimeSelection:a?`explicit`:`auto`}),U.debug(`Arming teleport watcher details`,{startPattern:n.source,returnPattern:r.source,timeoutMs:i,runtimeId:a??`auto`,originalUrl:o});let c={startPattern:n,returnPattern:r,timeoutMs:i,runtimeId:a,phase:`armed`,leaderTargetId:s,originalLeaderUrl:o};return c.completionPromise=new Promise((e,t)=>{c.resolveBlock=e,c.rejectBlock=t}),c.completionPromise.catch(()=>{}),c.pollInterval=setInterval(()=>{(async()=>{if(c.phase!==`armed`)return;let r=c.leaderTargetId;if(r)try{let i=await e.withTab(r,e=>e.evaluate(`window.location.href`)),a=typeof i==`string`?i:String(i);U.debug(`Polling leader tab URL`,{targetId:r,href:a,startPattern:n.source}),n.test(a)&&(U.info(`Teleport start pattern matched on leader`),U.debug(`Teleport start pattern matched on leader details`,{targetId:r,href:a,startPattern:n.source}),tT(e,t,c,a).catch(e=>{U.error(`Unhandled teleport trigger error`,{error:String(e)})}))}catch(e){U.warn(`Error polling leader tab URL`,{targetId:r,error:String(e)})}})().catch(e=>{U.warn(`Leader teleport poll failed`,{error:String(e)})})},1e3),s&&t.teleportWatchers.set(s,c),c}async function eT(e,t,n,r,i){if(n.phase===`waitingForAuth`||n.phase===`waitingForReturn`)try{let a=await e.withTab(r,e=>e.evaluate(`window.location.href`)),o=typeof a==`string`?a:String(a);if(!o)return;if(n.lastFollowerUrl!==o&&(n.lastFollowerUrl=o,U.debug(`Follower teleport navigation`,{href:o,phase:n.phase})),n.phase===`waitingForAuth`){n.startPattern.test(o)?(n.phase=`waitingForReturn`,U.info(`Follower reached auth provider; waiting for return pattern`),U.debug(`Follower reached auth provider details`,{href:o,startPattern:n.startPattern.source})):U.debug(`Waiting for auth redirect on follower`,{href:o,startPattern:n.startPattern.source});return}U.debug(`Polling follower tab URL for return`,{href:o,returnPattern:n.returnPattern.source}),Hw(o)&&await e.withTab(r,e=>Uw(e,n,`waiting-for-return`)),n.returnPattern.test(o)&&(U.info(`Follower return pattern matched after auth`),U.debug(`Follower return pattern matched after auth details`,{href:o,returnPattern:n.returnPattern.source}),oT(e,t,n,i).catch(e=>{U.error(`Unhandled teleport capture error`,{error:String(e)})}))}catch(e){U.warn(`Error polling follower tab URL`,{error:String(e)})}}async function tT(e,t,n,r){if(n.phase===`armed`){n.phase=`teleporting`,U.info(`Teleport triggered`),U.debug(`Teleport trigger details`,{triggerUrl:r}),n.pollInterval&&=(clearInterval(n.pollInterval),void 0);try{let i=n.leaderTargetId;if(!i)throw Error(`teleport has no leader tab to capture from`);let a=[],o=kw;try{a=Gw((await e.withTab(i,e=>e.send(`Network.getCookies`,{}))).cookies),U.info(`Captured leader cookies for follower`,{count:a.length})}catch(e){U.warn(`Could not capture leader cookies`,{error:String(e)})}try{o=await e.withTab(i,e=>Fw(e,`leader`)),U.info(`Captured leader storage for follower`,{totalEntries:jw(o),localStorageCount:Object.keys(o.localStorage).length,sessionStorageCount:Object.keys(o.sessionStorage).length}),U.debug(`Captured leader storage for follower details`,{origin:o.origin||`(unknown)`,localStorageCount:Object.keys(o.localStorage).length,sessionStorageCount:Object.keys(o.sessionStorage).length})}catch(e){U.warn(`Could not capture leader storage`,{error:String(e)})}let s=n.runtimeId;if(!s){let e=Kw?.();if(!e)throw Error(`No follower selection available — not connected to a tray`);let t=e();if(!t)throw Error(`No followers connected to teleport to`);s=t.runtimeId}U.info(`Selected follower for teleport`),U.debug(`Selected follower for teleport details`,{runtimeId:s});let c=await e.createRemotePage(s,`about:blank`),l=c.includes(`:`)?c:`${s}:${c}`;n.followerTargetId=l,U.info(`Opened follower tab for teleport`),U.debug(`Opened follower tab for teleport details`,{followerTargetId:l});let u=r;await e.withTab(l,async e=>{if(await e.send(`Page.enable`),a.length>0)try{await e.send(`Network.setCookies`,{cookies:a}),U.info(`Injected leader cookies into follower`,{count:a.length})}catch(e){U.warn(`Could not inject leader cookies into follower`,{error:String(e)})}n.followerStorageScript=await zw(e,o,`follower`),U.info(`Navigating follower to intercepted auth URL`),U.debug(`Navigating follower to intercepted auth URL details`,{url:u,originalLeaderUrl:n.originalLeaderUrl,triggerUrl:r,storageOrigin:o.origin||`(unknown)`}),await e.send(`Page.navigate`,{url:u})}),U.info(`Starting teleport timeout timer`,{timeoutMs:n.timeoutMs}),n.timeoutTimer=setTimeout(()=>{(n.phase===`teleporting`||n.phase===`waitingForAuth`||n.phase===`waitingForReturn`)&&Zw(e,n).catch(e=>{U.error(`Teleport timeout handler failed`,{error:String(e)})})},n.timeoutMs),n.phase=`waitingForAuth`,U.info(`Teleport waiting for follower auth redirect`),U.debug(`Teleport waiting for follower auth redirect details`,{startPattern:n.startPattern.source}),n.pollInterval=setInterval(()=>{eT(e,t,n,l,s).catch(e=>{U.warn(`Follower teleport poll failed`,{error:String(e)})})},1e3)}catch(t){U.error(`Teleport trigger failed`,{error:String(t)}),await Ww(e,n,`trigger-error`),n.phase=`done`,Qw(n),n.rejectBlock?.(t instanceof Error?t:Error(String(t)))}}}async function nT(e,t){U.info(`Waiting for redirect chain to settle (2s)`),await new Promise(e=>setTimeout(e,2e3));let n=t.followerTargetId,r=t.followerStorageScript??null;t.followerStorageScript=null;let{cookies:i,followerStorage:a,finalUrl:o}=await e.withTab(n,async e=>{let n;try{let t=await e.evaluate(`window.location.href`);n=typeof t==`string`?t:String(t),U.debug(`Captured final URL from follower`,{finalUrl:n})}catch(e){U.warn(`Could not read follower URL (may be mid-navigation)`,{error:String(e)})}try{let t=await e.evaluate(`document.body?.innerText?.substring(0, 500) || "(empty)"`);U.debug(`Follower page content at capture time`,{bodyText:t})}catch(e){U.warn(`Could not read follower page content`,{error:String(e)})}let i=Gw((await e.send(`Network.getCookies`)).cookies),a=i.length>0?Aw(i):`none`;U.info(`Captured cookies from follower`,{count:i.length}),U.debug(`Captured cookies from follower details`,{count:i.length,domains:a});let o=kw;try{o=await Fw(e,`follower`),U.info(`Captured follower storage for leader`,{totalEntries:jw(o),localStorageCount:Object.keys(o.localStorage).length,sessionStorageCount:Object.keys(o.sessionStorage).length}),U.debug(`Captured follower storage for leader details`,{origin:o.origin||`(unknown)`,localStorageCount:Object.keys(o.localStorage).length,sessionStorageCount:Object.keys(o.sessionStorage).length})}catch(e){U.warn(`Could not capture follower storage`,{error:String(e)})}return await Uw(e,t,`capture`),await Bw(e,r,`follower`),{cookies:i,followerStorage:o,finalUrl:n}});try{await e.closePage(t.followerTargetId),U.info(`Closed follower tab after teleport`),U.debug(`Closed follower tab after teleport details`,{followerTargetId:t.followerTargetId})}catch(e){U.warn(`Failed to close follower tab`,{error:String(e)})}return{cookies:i,followerStorage:a,finalUrl:o}}async function rT(e,t,n,r){try{await e.navigate(n),await Rw(e,t,`leader`),r&&r!==n&&await e.navigate(r)}catch(i){U.warn(`Direct leader origin hydration failed, falling back to init-script replay`,{error:String(i)}),U.debug(`Direct leader origin hydration fallback details`,{hydrationUrl:n,landingUrl:r,error:String(i)});let a=await zw(e,t,`leader`);try{r&&await e.navigate(r)}finally{await Bw(e,a,`leader`)}}}async function iT(e,t,n,r,i){let a=e.targetId,o=await zw(e,n,`leader`);try{r&&(U.info(`Navigating leader after auth-state injection`,{hasLandingUrl:!0,storageEntries:jw(n)}),U.debug(`Navigating leader after auth-state injection details`,{landingUrl:r,originalLeaderUrl:t.originalLeaderUrl,finalUrl:i,leaderTargetId:a,storageOrigin:n.origin||`(unknown)`,storageEntries:jw(n)}),await e.navigate(r))}finally{await Bw(e,o,`leader`)}}async function aT(e,t,n,r,i){let a=t.leaderTargetId,o=r.origin||``,s=Pw(o,t.originalLeaderUrl,i),c=Mw(t.originalLeaderUrl),l=!!o&&c!==o,u=l?Nw(o):null;return a?(await e.withTab(a,async e=>{n.length>0&&(await e.send(`Network.setCookies`,{cookies:n}),U.info(`Injected cookies into leader tab`,{count:n.length}),U.debug(`Injected cookies into leader tab details`,{count:n.length,leaderTargetId:a})),l&&u?(U.info(`Hydrating leader storage origin before landing`,{storageEntries:jw(r)}),U.debug(`Hydrating leader storage origin before landing details`,{hydrationUrl:u,landingUrl:s,originalLeaderUrl:t.originalLeaderUrl,finalUrl:i,leaderTargetId:a,storageOrigin:o,storageEntries:jw(r)}),await rT(e,r,u,s)):await iT(e,t,r,s,i)}),s):(U.warn(`No leader tab available for auth-state injection`),s)}async function oT(e,t,n,r){if(n.phase===`teleporting`||n.phase===`waitingForReturn`){n.phase=`capturing`,U.info(`Capturing auth state from follower`),U.debug(`Capturing auth state from follower details`,{followerTargetId:n.followerTargetId,runtimeId:r}),n.pollInterval&&=(clearInterval(n.pollInterval),void 0),n.timeoutTimer&&=(clearTimeout(n.timeoutTimer),void 0);try{let{cookies:t,followerStorage:i,finalUrl:a}=await nT(e,n),o=jw(i),s=await aT(e,n,t,i,a);n.phase=`done`,Qw(n);let c=t.length>0?` (${Aw(t)})`:``,l=o>0?` + ${o} storage entr${o===1?`y`:`ies`}`:``,u=s?` (navigated to ${s})`:``,d=`Teleported ${t.length} cookie(s)${c}${l} from ${r}${u}`;U.info(`Teleport completed successfully`,{cookieCount:t.length,storageEntries:o,landed:!!s}),U.debug(`Teleport completed successfully details`,{result:d}),n.resolveBlock?.(d)}catch(t){U.error(`Teleport auth-state capture failed`,{error:String(t)}),await Ww(e,n,`capture-error`),n.phase=`done`,Qw(n),n.rejectBlock?.(t instanceof Error?t:Error(String(t)))}}}const sT=e(`playwright`),cT=async({browser:e,fs:t,state:n,positional:r,flags:i,onTab:a})=>{if(r.length===0)return{stdout:``,stderr:`goto requires a URL
1052
- `,exitCode:1};let o=N(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){sT.info(`Arming teleport via goto/navigate flags`),sT.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&&(Qw(u),n.teleportWatchers.delete(o.targetId)),$w(e,n,t,a,l*1e3,i[`teleport-runtime`],r[0],o.targetId)}if(i.discover===`true`){let{browseShWarning:e,...n}=await $C(r[0],{discover:!0,fs:t}),i={action:`navigate`,targetId:o.targetId,source:`auxiliary-fetch`,...n};return{stdout:JSON.stringify(i,null,2)+`
1053
- `,stderr:e?`${e}\n`:``,exitCode:0}}return{stdout:`Navigated to ${r[0]}\n`,stderr:``,exitCode:0}},lT=async({browser:e,state:t,flags:n,onTab:r})=>{let i=N(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
1054
- `,stderr:``,exitCode:0})},uT=async({browser:e,state:t,flags:n,onTab:r})=>{let i=N(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
1055
- `,stderr:``,exitCode:0})},dT=async({browser:e,flags:t,onTab:n})=>{let r=N(t);return`error`in r?{stdout:``,stderr:r.error,exitCode:1}:(await n(r.targetId,async e=>{await e.send(`Page.reload`)}),{stdout:`Reloaded
1056
- `,stderr:``,exitCode:0})},fT=async({browser:e,flags:t,positional:n,onTab:r})=>{let i=N(t);if(`error`in i)return{stdout:``,stderr:i.error,exitCode:1};let a=n[0];return a!==`online`&&a!==`offline`?{stdout:``,stderr:`network-state-set requires "online" or "offline"
1057
- `,exitCode:1}:(await r(i.targetId,async({sessionId:e,transport:t})=>{await t.send(`Network.enable`,{},e),await t.send(`Network.emulateNetworkConditions`,{offline:a===`offline`,latency:0,downloadThroughput:-1,uploadThroughput:-1},e)}),{stdout:`Network set to ${a}\n`,stderr:``,exitCode:0})},pT=[`image/`,`font/`,`text/css`,`application/javascript`,`text/javascript`];function mT(e,t){if(e&&pT.some(t=>e.startsWith(t)))return!0;try{let e=new URL(t).pathname;return/\.(png|jpe?g|gif|webp|svg|ico|woff2?|ttf|eot|otf|css|js|mjs)$/i.test(e)}catch{return!1}}function hT(e,t,n,r,i){if(t.networkCleanup.has(r))return;t.networkRequests.set(r,[]),t.networkRequestIndex.set(r,new Map);let a=1,o=wC({browser:e,targetId:r,transport:n,sessionId:i,listeners:[[`Network.requestWillBeSent`,e=>{let n=e;if(n.sessionId!==o.sessionId)return;let i=n.requestId,s=n.request;if(!i||!s)return;let c=t.networkRequests.get(r),l=t.networkRequestIndex.get(r);if(!c||!l)return;let u=s.url??``,d={index:a++,requestId:i,method:s.method??`GET`,url:u,requestHeaders:s.headers??{},requestBody:s.postData==null?null:String(s.postData),status:null,responseHeaders:null,responseBody:null,responseBodyBase64:!1,mimeType:null,isStatic:mT(null,u),timestamp:Date.now()};if(c.push(d),l.set(i,d),c.length>500){let e=c.splice(0,c.length-500);for(let t of e)l.delete(t.requestId)}}],[`Network.responseReceived`,e=>{let n=e;if(n.sessionId!==o.sessionId)return;let i=n.requestId,a=n.response;if(!i||!a)return;let s=t.networkRequestIndex.get(r)?.get(i);s&&(s.status=a.status??null,s.responseHeaders=a.headers??null,s.mimeType=a.mimeType??null,s.isStatic=mT(s.mimeType,s.url))}],[`Network.loadingFinished`,e=>{let n=e;if(n.sessionId!==o.sessionId)return;let i=n.requestId;if(!i)return;let a=t.networkRequestIndex.get(r)?.get(i);!a||a.isStatic||a.responseBody!==null||o.transport.send(`Network.getResponseBody`,{requestId:i},o.sessionId).then(e=>{let t=e;t&&(a.responseBody=t.body??null,a.responseBodyBase64=t.base64Encoded===!0)}).catch(()=>{})}]],enable:(e,t)=>e.send(`Network.enable`,{},t)});t.networkCleanup.set(r,()=>o.stop())}function gT(e){for(let t=0;t<e.length;t++){let n=e.charCodeAt(t);if(n<55296||n>57343)continue;if(n>=56320)return t;let r=e.charCodeAt(t+1);if(Number.isNaN(r)||r<56320||r>57343)return t;t++}return-1}function _T(e,t){if(t){let t;try{t=atob(e)}catch{return{error:`response body is flagged base64 but is not valid base64`}}let n=new Uint8Array(t.length);for(let e=0;e<t.length;e++)n[e]=t.charCodeAt(e)&255;return{bytes:n}}let n=gT(e);return n>=0?{error:`response body has an unpaired surrogate at index ${n} and cannot be saved without substituting U+FFFD`}:{bytes:new TextEncoder().encode(e)}}function vT(e,t,n){let r=parseInt(n,10);return!Number.isFinite(r)||r<1?null:(e.networkRequests.get(t)??[]).find(e=>e.index===r)??null}const yT=async({browser:e,state:t,flags:n,onTab:r})=>{let i=N(n);if(`error`in i)return{stdout:``,stderr:i.error,exitCode:1};t.networkCleanup.has(i.targetId)||await r(i.targetId,async({sessionId:n,transport:r})=>{await r.send(`Network.enable`,{},n),hT(e,t,r,i.targetId,n)});let a=n.static===`true`,o=n.filter,s=n.clear===`true`,c=t.networkRequests.get(i.targetId)??[];if(a||(c=c.filter(e=>!e.isStatic)),o){let e;try{e=new RegExp(o)}catch{return{stdout:``,stderr:`Invalid filter regex: ${o}\n`,exitCode:1}}c=c.filter(t=>e.test(t.url))}return s&&(t.networkRequests.set(i.targetId,[]),t.networkRequestIndex.set(i.targetId,new Map)),c.length===0?{stdout:`No requests
1051
+ }))()`);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 Vw(e){return/callback|authorize\/resume|error/i.test(e)}async function Hw(e,t,n){try{let r=await Bw(e),i=`${n}:${r.url}:${r.title}`;if(t.lastFollowerDiagnosticKey===i)return;t.lastFollowerDiagnosticKey=i,Dw.debug(`Teleport follower diagnostics`,{reason:n,url:r.url,title:r.title,bodySnippet:r.bodySnippet})}catch(e){Dw.warn(`Could not capture teleport follower diagnostics`,{reason:n,error:String(e)})}}async function Uw(e,t,n){let r=t.followerStorageScript;if(r){t.followerStorageScript=null;try{await e.withTab(r.targetId,e=>zw(e,r,`follower`)),Dw.info(`Removed follower teleport storage init script`,{reason:n})}catch(e){Dw.warn(`Failed to remove follower teleport storage init script`,{reason:n,error:String(e)})}}}function Ww(e){return Array.isArray(e)?e:[]}const U=e(`playwright-teleport`);let Gw=null,Kw=null;function qw(e){Gw=e}function Jw(e){Kw=e}function Yw(){return Kw?.()??null}async function Xw(e,t){if(U.warn(`Teleport timed out`,{timeoutMs:t.timeoutMs,phase:t.phase}),U.debug(`Teleport timeout details`,{timeoutMs:t.timeoutMs,phase:t.phase,followerTargetId:t.followerTargetId}),t.phase=`timedOut`,t.followerTargetId){try{await e.withTab(t.followerTargetId,e=>Hw(e,t,`timeout`))}catch(e){U.warn(`Could not attach to follower for timeout diagnostics`,{error:String(e)})}await Uw(e,t,`timeout`)}if(Zw(t),t.followerTargetId)try{await e.closePage(t.followerTargetId)}catch(e){U.warn(`Failed to close follower tab after timeout`,{error:String(e)})}t.rejectBlock?.(Error(`Teleport timed out after ${Math.round(t.timeoutMs/1e3)}s — human did not complete auth`))}function Zw(e){U.info(`Cleaning up teleport watcher`,{phase:e.phase,hadPoll:!!e.pollInterval,hadTimeout:!!e.timeoutTimer,hadListener:!!e.cleanupListener}),e.pollInterval&&=(clearInterval(e.pollInterval),void 0),e.timeoutTimer&&=(clearTimeout(e.timeoutTimer),void 0),e.cleanupListener&&=(e.cleanupListener(),void 0)}function Qw(e,t,n,r,i,a,o,s){if(a===`preview`)throw Error(`cannot teleport to a preview target (no Network.*)`);U.info(`Arming teleport watcher`,{timeoutMs:i,runtimeSelection:a?`explicit`:`auto`}),U.debug(`Arming teleport watcher details`,{startPattern:n.source,returnPattern:r.source,timeoutMs:i,runtimeId:a??`auto`,originalUrl:o});let c={startPattern:n,returnPattern:r,timeoutMs:i,runtimeId:a,phase:`armed`,leaderTargetId:s,originalLeaderUrl:o};return c.completionPromise=new Promise((e,t)=>{c.resolveBlock=e,c.rejectBlock=t}),c.completionPromise.catch(()=>{}),c.pollInterval=setInterval(()=>{(async()=>{if(c.phase!==`armed`)return;let r=c.leaderTargetId;if(r)try{let i=await e.withTab(r,e=>e.evaluate(`window.location.href`)),a=typeof i==`string`?i:String(i);U.debug(`Polling leader tab URL`,{targetId:r,href:a,startPattern:n.source}),n.test(a)&&(U.info(`Teleport start pattern matched on leader`),U.debug(`Teleport start pattern matched on leader details`,{targetId:r,href:a,startPattern:n.source}),eT(e,t,c,a).catch(e=>{U.error(`Unhandled teleport trigger error`,{error:String(e)})}))}catch(e){U.warn(`Error polling leader tab URL`,{targetId:r,error:String(e)})}})().catch(e=>{U.warn(`Leader teleport poll failed`,{error:String(e)})})},1e3),s&&t.teleportWatchers.set(s,c),c}async function $w(e,t,n,r,i){if(n.phase===`waitingForAuth`||n.phase===`waitingForReturn`)try{let a=await e.withTab(r,e=>e.evaluate(`window.location.href`)),o=typeof a==`string`?a:String(a);if(!o)return;if(n.lastFollowerUrl!==o&&(n.lastFollowerUrl=o,U.debug(`Follower teleport navigation`,{href:o,phase:n.phase})),n.phase===`waitingForAuth`){n.startPattern.test(o)?(n.phase=`waitingForReturn`,U.info(`Follower reached auth provider; waiting for return pattern`),U.debug(`Follower reached auth provider details`,{href:o,startPattern:n.startPattern.source})):U.debug(`Waiting for auth redirect on follower`,{href:o,startPattern:n.startPattern.source});return}U.debug(`Polling follower tab URL for return`,{href:o,returnPattern:n.returnPattern.source}),Vw(o)&&await e.withTab(r,e=>Hw(e,n,`waiting-for-return`)),n.returnPattern.test(o)&&(U.info(`Follower return pattern matched after auth`),U.debug(`Follower return pattern matched after auth details`,{href:o,returnPattern:n.returnPattern.source}),aT(e,t,n,i).catch(e=>{U.error(`Unhandled teleport capture error`,{error:String(e)})}))}catch(e){U.warn(`Error polling follower tab URL`,{error:String(e)})}}async function eT(e,t,n,r){if(n.phase===`armed`){n.phase=`teleporting`,U.info(`Teleport triggered`),U.debug(`Teleport trigger details`,{triggerUrl:r}),n.pollInterval&&=(clearInterval(n.pollInterval),void 0);try{let i=n.leaderTargetId;if(!i)throw Error(`teleport has no leader tab to capture from`);let a=[],o=Ow;try{a=Ww((await e.withTab(i,e=>e.send(`Network.getCookies`,{}))).cookies),U.info(`Captured leader cookies for follower`,{count:a.length})}catch(e){U.warn(`Could not capture leader cookies`,{error:String(e)})}try{o=await e.withTab(i,e=>Pw(e,`leader`)),U.info(`Captured leader storage for follower`,{totalEntries:Aw(o),localStorageCount:Object.keys(o.localStorage).length,sessionStorageCount:Object.keys(o.sessionStorage).length}),U.debug(`Captured leader storage for follower details`,{origin:o.origin||`(unknown)`,localStorageCount:Object.keys(o.localStorage).length,sessionStorageCount:Object.keys(o.sessionStorage).length})}catch(e){U.warn(`Could not capture leader storage`,{error:String(e)})}let s=n.runtimeId;if(!s){let e=Gw?.();if(!e)throw Error(`No follower selection available — not connected to a tray`);let t=e();if(!t)throw Error(`No followers connected to teleport to`);s=t.runtimeId}U.info(`Selected follower for teleport`),U.debug(`Selected follower for teleport details`,{runtimeId:s});let c=await e.createRemotePage(s,`about:blank`),l=c.includes(`:`)?c:`${s}:${c}`;n.followerTargetId=l,U.info(`Opened follower tab for teleport`),U.debug(`Opened follower tab for teleport details`,{followerTargetId:l});let u=r;await e.withTab(l,async e=>{if(await e.send(`Page.enable`),a.length>0)try{await e.send(`Network.setCookies`,{cookies:a}),U.info(`Injected leader cookies into follower`,{count:a.length})}catch(e){U.warn(`Could not inject leader cookies into follower`,{error:String(e)})}n.followerStorageScript=await Rw(e,o,`follower`),U.info(`Navigating follower to intercepted auth URL`),U.debug(`Navigating follower to intercepted auth URL details`,{url:u,originalLeaderUrl:n.originalLeaderUrl,triggerUrl:r,storageOrigin:o.origin||`(unknown)`}),await e.send(`Page.navigate`,{url:u})}),U.info(`Starting teleport timeout timer`,{timeoutMs:n.timeoutMs}),n.timeoutTimer=setTimeout(()=>{(n.phase===`teleporting`||n.phase===`waitingForAuth`||n.phase===`waitingForReturn`)&&Xw(e,n).catch(e=>{U.error(`Teleport timeout handler failed`,{error:String(e)})})},n.timeoutMs),n.phase=`waitingForAuth`,U.info(`Teleport waiting for follower auth redirect`),U.debug(`Teleport waiting for follower auth redirect details`,{startPattern:n.startPattern.source}),n.pollInterval=setInterval(()=>{$w(e,t,n,l,s).catch(e=>{U.warn(`Follower teleport poll failed`,{error:String(e)})})},1e3)}catch(t){U.error(`Teleport trigger failed`,{error:String(t)}),await Uw(e,n,`trigger-error`),n.phase=`done`,Zw(n),n.rejectBlock?.(t instanceof Error?t:Error(String(t)))}}}async function tT(e,t){U.info(`Waiting for redirect chain to settle (2s)`),await new Promise(e=>setTimeout(e,2e3));let n=t.followerTargetId,r=t.followerStorageScript??null;t.followerStorageScript=null;let{cookies:i,followerStorage:a,finalUrl:o}=await e.withTab(n,async e=>{let n;try{let t=await e.evaluate(`window.location.href`);n=typeof t==`string`?t:String(t),U.debug(`Captured final URL from follower`,{finalUrl:n})}catch(e){U.warn(`Could not read follower URL (may be mid-navigation)`,{error:String(e)})}try{let t=await e.evaluate(`document.body?.innerText?.substring(0, 500) || "(empty)"`);U.debug(`Follower page content at capture time`,{bodyText:t})}catch(e){U.warn(`Could not read follower page content`,{error:String(e)})}let i=Ww((await e.send(`Network.getCookies`)).cookies),a=i.length>0?kw(i):`none`;U.info(`Captured cookies from follower`,{count:i.length}),U.debug(`Captured cookies from follower details`,{count:i.length,domains:a});let o=Ow;try{o=await Pw(e,`follower`),U.info(`Captured follower storage for leader`,{totalEntries:Aw(o),localStorageCount:Object.keys(o.localStorage).length,sessionStorageCount:Object.keys(o.sessionStorage).length}),U.debug(`Captured follower storage for leader details`,{origin:o.origin||`(unknown)`,localStorageCount:Object.keys(o.localStorage).length,sessionStorageCount:Object.keys(o.sessionStorage).length})}catch(e){U.warn(`Could not capture follower storage`,{error:String(e)})}return await Hw(e,t,`capture`),await zw(e,r,`follower`),{cookies:i,followerStorage:o,finalUrl:n}});try{await e.closePage(t.followerTargetId),U.info(`Closed follower tab after teleport`),U.debug(`Closed follower tab after teleport details`,{followerTargetId:t.followerTargetId})}catch(e){U.warn(`Failed to close follower tab`,{error:String(e)})}return{cookies:i,followerStorage:a,finalUrl:o}}async function nT(e,t,n,r){try{await e.navigate(n),await Lw(e,t,`leader`),r&&r!==n&&await e.navigate(r)}catch(i){U.warn(`Direct leader origin hydration failed, falling back to init-script replay`,{error:String(i)}),U.debug(`Direct leader origin hydration fallback details`,{hydrationUrl:n,landingUrl:r,error:String(i)});let a=await Rw(e,t,`leader`);try{r&&await e.navigate(r)}finally{await zw(e,a,`leader`)}}}async function rT(e,t,n,r,i){let a=e.targetId,o=await Rw(e,n,`leader`);try{r&&(U.info(`Navigating leader after auth-state injection`,{hasLandingUrl:!0,storageEntries:Aw(n)}),U.debug(`Navigating leader after auth-state injection details`,{landingUrl:r,originalLeaderUrl:t.originalLeaderUrl,finalUrl:i,leaderTargetId:a,storageOrigin:n.origin||`(unknown)`,storageEntries:Aw(n)}),await e.navigate(r))}finally{await zw(e,o,`leader`)}}async function iT(e,t,n,r,i){let a=t.leaderTargetId,o=r.origin||``,s=Nw(o,t.originalLeaderUrl,i),c=jw(t.originalLeaderUrl),l=!!o&&c!==o,u=l?Mw(o):null;return a?(await e.withTab(a,async e=>{n.length>0&&(await e.send(`Network.setCookies`,{cookies:n}),U.info(`Injected cookies into leader tab`,{count:n.length}),U.debug(`Injected cookies into leader tab details`,{count:n.length,leaderTargetId:a})),l&&u?(U.info(`Hydrating leader storage origin before landing`,{storageEntries:Aw(r)}),U.debug(`Hydrating leader storage origin before landing details`,{hydrationUrl:u,landingUrl:s,originalLeaderUrl:t.originalLeaderUrl,finalUrl:i,leaderTargetId:a,storageOrigin:o,storageEntries:Aw(r)}),await nT(e,r,u,s)):await rT(e,t,r,s,i)}),s):(U.warn(`No leader tab available for auth-state injection`),s)}async function aT(e,t,n,r){if(n.phase===`teleporting`||n.phase===`waitingForReturn`){n.phase=`capturing`,U.info(`Capturing auth state from follower`),U.debug(`Capturing auth state from follower details`,{followerTargetId:n.followerTargetId,runtimeId:r}),n.pollInterval&&=(clearInterval(n.pollInterval),void 0),n.timeoutTimer&&=(clearTimeout(n.timeoutTimer),void 0);try{let{cookies:t,followerStorage:i,finalUrl:a}=await tT(e,n),o=Aw(i),s=await iT(e,n,t,i,a);n.phase=`done`,Zw(n);let c=t.length>0?` (${kw(t)})`:``,l=o>0?` + ${o} storage entr${o===1?`y`:`ies`}`:``,u=s?` (navigated to ${s})`:``,d=`Teleported ${t.length} cookie(s)${c}${l} from ${r}${u}`;U.info(`Teleport completed successfully`,{cookieCount:t.length,storageEntries:o,landed:!!s}),U.debug(`Teleport completed successfully details`,{result:d}),n.resolveBlock?.(d)}catch(t){U.error(`Teleport auth-state capture failed`,{error:String(t)}),await Uw(e,n,`capture-error`),n.phase=`done`,Zw(n),n.rejectBlock?.(t instanceof Error?t:Error(String(t)))}}}const oT=e(`playwright`),sT=async({browser:e,fs:t,state:n,positional:r,flags:i,onTab:a})=>{if(r.length===0)return{stdout:``,stderr:`goto requires a URL
1052
+ `,exitCode:1};let o=N(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){oT.info(`Arming teleport via goto/navigate flags`),oT.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&&(Zw(u),n.teleportWatchers.delete(o.targetId)),Qw(e,n,t,a,l*1e3,i[`teleport-runtime`],r[0],o.targetId)}if(i.discover===`true`){let{browseShWarning:e,...n}=await QC(r[0],{discover:!0,fs:t}),i={action:`navigate`,targetId:o.targetId,source:`auxiliary-fetch`,...n};return{stdout:JSON.stringify(i,null,2)+`
1053
+ `,stderr:e?`${e}\n`:``,exitCode:0}}return{stdout:`Navigated to ${r[0]}\n`,stderr:``,exitCode:0}},cT=async({browser:e,state:t,flags:n,onTab:r})=>{let i=N(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
1054
+ `,stderr:``,exitCode:0})},lT=async({browser:e,state:t,flags:n,onTab:r})=>{let i=N(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
1055
+ `,stderr:``,exitCode:0})},uT=async({browser:e,flags:t,onTab:n})=>{let r=N(t);return`error`in r?{stdout:``,stderr:r.error,exitCode:1}:(await n(r.targetId,async e=>{await e.send(`Page.reload`)}),{stdout:`Reloaded
1056
+ `,stderr:``,exitCode:0})},dT=async({browser:e,flags:t,positional:n,onTab:r})=>{let i=N(t);if(`error`in i)return{stdout:``,stderr:i.error,exitCode:1};let a=n[0];return a!==`online`&&a!==`offline`?{stdout:``,stderr:`network-state-set requires "online" or "offline"
1057
+ `,exitCode:1}:(await r(i.targetId,async({sessionId:e,transport:t})=>{await t.send(`Network.enable`,{},e),await t.send(`Network.emulateNetworkConditions`,{offline:a===`offline`,latency:0,downloadThroughput:-1,uploadThroughput:-1},e)}),{stdout:`Network set to ${a}\n`,stderr:``,exitCode:0})},fT=[`image/`,`font/`,`text/css`,`application/javascript`,`text/javascript`];function pT(e,t){if(e&&fT.some(t=>e.startsWith(t)))return!0;try{let e=new URL(t).pathname;return/\.(png|jpe?g|gif|webp|svg|ico|woff2?|ttf|eot|otf|css|js|mjs)$/i.test(e)}catch{return!1}}function mT(e,t,n,r,i){if(t.networkCleanup.has(r))return;t.networkRequests.set(r,[]),t.networkRequestIndex.set(r,new Map);let a=1,o=CC({browser:e,targetId:r,transport:n,sessionId:i,listeners:[[`Network.requestWillBeSent`,e=>{let n=e;if(n.sessionId!==o.sessionId)return;let i=n.requestId,s=n.request;if(!i||!s)return;let c=t.networkRequests.get(r),l=t.networkRequestIndex.get(r);if(!c||!l)return;let u=s.url??``,d={index:a++,requestId:i,method:s.method??`GET`,url:u,requestHeaders:s.headers??{},requestBody:s.postData==null?null:String(s.postData),status:null,responseHeaders:null,responseBody:null,responseBodyBase64:!1,mimeType:null,isStatic:pT(null,u),timestamp:Date.now()};if(c.push(d),l.set(i,d),c.length>500){let e=c.splice(0,c.length-500);for(let t of e)l.delete(t.requestId)}}],[`Network.responseReceived`,e=>{let n=e;if(n.sessionId!==o.sessionId)return;let i=n.requestId,a=n.response;if(!i||!a)return;let s=t.networkRequestIndex.get(r)?.get(i);s&&(s.status=a.status??null,s.responseHeaders=a.headers??null,s.mimeType=a.mimeType??null,s.isStatic=pT(s.mimeType,s.url))}],[`Network.loadingFinished`,e=>{let n=e;if(n.sessionId!==o.sessionId)return;let i=n.requestId;if(!i)return;let a=t.networkRequestIndex.get(r)?.get(i);!a||a.isStatic||a.responseBody!==null||o.transport.send(`Network.getResponseBody`,{requestId:i},o.sessionId).then(e=>{let t=e;t&&(a.responseBody=t.body??null,a.responseBodyBase64=t.base64Encoded===!0)}).catch(()=>{})}]],enable:(e,t)=>e.send(`Network.enable`,{},t)});t.networkCleanup.set(r,()=>o.stop())}function hT(e){for(let t=0;t<e.length;t++){let n=e.charCodeAt(t);if(n<55296||n>57343)continue;if(n>=56320)return t;let r=e.charCodeAt(t+1);if(Number.isNaN(r)||r<56320||r>57343)return t;t++}return-1}function gT(e,t){if(t){let t;try{t=atob(e)}catch{return{error:`response body is flagged base64 but is not valid base64`}}let n=new Uint8Array(t.length);for(let e=0;e<t.length;e++)n[e]=t.charCodeAt(e)&255;return{bytes:n}}let n=hT(e);return n>=0?{error:`response body has an unpaired surrogate at index ${n} and cannot be saved without substituting U+FFFD`}:{bytes:new TextEncoder().encode(e)}}function _T(e,t,n){let r=parseInt(n,10);return!Number.isFinite(r)||r<1?null:(e.networkRequests.get(t)??[]).find(e=>e.index===r)??null}const vT=async({browser:e,state:t,flags:n,onTab:r})=>{let i=N(n);if(`error`in i)return{stdout:``,stderr:i.error,exitCode:1};t.networkCleanup.has(i.targetId)||await r(i.targetId,async({sessionId:n,transport:r})=>{await r.send(`Network.enable`,{},n),mT(e,t,r,i.targetId,n)});let a=n.static===`true`,o=n.filter,s=n.clear===`true`,c=t.networkRequests.get(i.targetId)??[];if(a||(c=c.filter(e=>!e.isStatic)),o){let e;try{e=new RegExp(o)}catch{return{stdout:``,stderr:`Invalid filter regex: ${o}\n`,exitCode:1}}c=c.filter(t=>e.test(t.url))}return s&&(t.networkRequests.set(i.targetId,[]),t.networkRequestIndex.set(i.targetId,new Map)),c.length===0?{stdout:`No requests
1058
1058
  `,stderr:``,exitCode:0}:{stdout:c.map(e=>`${e.index} ${e.method} ${e.url} → ${e.status??`pending`}`).join(`
1059
1059
  `)+`
1060
- `,stderr:``,exitCode:0}},bT=async({browser:e,state:t,positional:n,flags:r,fs:i,onTab:a})=>{let o=N(r);if(`error`in o)return{stdout:``,stderr:o.error,exitCode:1};t.networkCleanup.has(o.targetId)||await a(o.targetId,async({sessionId:n,transport:r})=>{await r.send(`Network.enable`,{},n),hT(e,t,r,o.targetId,n)});let s=n[0]??``,c=vT(t,o.targetId,s);if(!c)return{stdout:``,stderr:`No request at index ${s}\n`,exitCode:1};let l=[`Method: ${c.method}`,`URL: ${c.url}`,`Status: ${c.status??`pending`}`,``,`Request Headers:`,...Object.entries(c.requestHeaders).map(([e,t])=>` ${e}: ${t}`)];if(c.requestBody!==null&&l.push(``,`Request Body: ${c.requestBody}`),c.responseHeaders!==null&&(l.push(``,`Response Headers:`),l.push(...Object.entries(c.responseHeaders).map(([e,t])=>` ${e}: ${t}`))),c.responseBody!==null){let e=c.responseBody,t=e.length>4096?e.slice(0,4096)+`
1060
+ `,stderr:``,exitCode:0}},yT=async({browser:e,state:t,positional:n,flags:r,fs:i,onTab:a})=>{let o=N(r);if(`error`in o)return{stdout:``,stderr:o.error,exitCode:1};t.networkCleanup.has(o.targetId)||await a(o.targetId,async({sessionId:n,transport:r})=>{await r.send(`Network.enable`,{},n),mT(e,t,r,o.targetId,n)});let s=n[0]??``,c=_T(t,o.targetId,s);if(!c)return{stdout:``,stderr:`No request at index ${s}\n`,exitCode:1};let l=[`Method: ${c.method}`,`URL: ${c.url}`,`Status: ${c.status??`pending`}`,``,`Request Headers:`,...Object.entries(c.requestHeaders).map(([e,t])=>` ${e}: ${t}`)];if(c.requestBody!==null&&l.push(``,`Request Body: ${c.requestBody}`),c.responseHeaders!==null&&(l.push(``,`Response Headers:`),l.push(...Object.entries(c.responseHeaders).map(([e,t])=>` ${e}: ${t}`))),c.responseBody!==null){let e=c.responseBody,t=e.length>4096?e.slice(0,4096)+`
1061
1061
  ... (truncated)`:e,n=c.responseBodyBase64?`Response Body (base64)`:`Response Body`;l.push(``,`${n}:\n${t}`)}let u=l.join(`
1062
1062
  `)+`
1063
- `,d=r.filename;return d?(await i.writeFile(d,u),{stdout:`Saved to ${d}\n`,stderr:``,exitCode:0}):{stdout:u,stderr:``,exitCode:0}},xT=async({browser:e,state:t,positional:n,flags:r,fs:i,onTab:a})=>{let o=N(r);if(`error`in o)return{stdout:``,stderr:o.error,exitCode:1};t.networkCleanup.has(o.targetId)||await a(o.targetId,async({sessionId:n,transport:r})=>{await r.send(`Network.enable`,{},n),hT(e,t,r,o.targetId,n)});let s=n[0]??``,c=vT(t,o.targetId,s);if(!c)return{stdout:``,stderr:`No request at index ${s}\n`,exitCode:1};let l=Object.entries(c.requestHeaders).map(([e,t])=>`${e}: ${t}`).join(`
1063
+ `,d=r.filename;return d?(await i.writeFile(d,u),{stdout:`Saved to ${d}\n`,stderr:``,exitCode:0}):{stdout:u,stderr:``,exitCode:0}},bT=async({browser:e,state:t,positional:n,flags:r,fs:i,onTab:a})=>{let o=N(r);if(`error`in o)return{stdout:``,stderr:o.error,exitCode:1};t.networkCleanup.has(o.targetId)||await a(o.targetId,async({sessionId:n,transport:r})=>{await r.send(`Network.enable`,{},n),mT(e,t,r,o.targetId,n)});let s=n[0]??``,c=_T(t,o.targetId,s);if(!c)return{stdout:``,stderr:`No request at index ${s}\n`,exitCode:1};let l=Object.entries(c.requestHeaders).map(([e,t])=>`${e}: ${t}`).join(`
1064
1064
  `)+`
1065
- `,u=r.filename;return u?(await i.writeFile(u,l),{stdout:`Saved to ${u}\n`,stderr:``,exitCode:0}):{stdout:l,stderr:``,exitCode:0}},ST=async({browser:e,state:t,positional:n,flags:r,fs:i,onTab:a})=>{let o=N(r);if(`error`in o)return{stdout:``,stderr:o.error,exitCode:1};t.networkCleanup.has(o.targetId)||await a(o.targetId,async({sessionId:n,transport:r})=>{await r.send(`Network.enable`,{},n),hT(e,t,r,o.targetId,n)});let s=n[0]??``,c=vT(t,o.targetId,s);if(!c)return{stdout:``,stderr:`No request at index ${s}\n`,exitCode:1};if(c.requestBody===null)return{stdout:`(no request body)
1065
+ `,u=r.filename;return u?(await i.writeFile(u,l),{stdout:`Saved to ${u}\n`,stderr:``,exitCode:0}):{stdout:l,stderr:``,exitCode:0}},xT=async({browser:e,state:t,positional:n,flags:r,fs:i,onTab:a})=>{let o=N(r);if(`error`in o)return{stdout:``,stderr:o.error,exitCode:1};t.networkCleanup.has(o.targetId)||await a(o.targetId,async({sessionId:n,transport:r})=>{await r.send(`Network.enable`,{},n),mT(e,t,r,o.targetId,n)});let s=n[0]??``,c=_T(t,o.targetId,s);if(!c)return{stdout:``,stderr:`No request at index ${s}\n`,exitCode:1};if(c.requestBody===null)return{stdout:`(no request body)
1066
1066
  `,stderr:``,exitCode:0};let l=r.filename;return l?(await i.writeFile(l,c.requestBody),{stdout:`Saved to ${l}\n`,stderr:``,exitCode:0}):{stdout:c.requestBody+`
1067
- `,stderr:``,exitCode:0}},CT=async({browser:e,state:t,positional:n,flags:r,fs:i,onTab:a})=>{let o=N(r);if(`error`in o)return{stdout:``,stderr:o.error,exitCode:1};t.networkCleanup.has(o.targetId)||await a(o.targetId,async({sessionId:n,transport:r})=>{await r.send(`Network.enable`,{},n),hT(e,t,r,o.targetId,n)});let s=n[0]??``,c=vT(t,o.targetId,s);if(!c)return{stdout:``,stderr:`No request at index ${s}\n`,exitCode:1};if(c.responseHeaders===null)return{stdout:`(response not yet received)
1067
+ `,stderr:``,exitCode:0}},ST=async({browser:e,state:t,positional:n,flags:r,fs:i,onTab:a})=>{let o=N(r);if(`error`in o)return{stdout:``,stderr:o.error,exitCode:1};t.networkCleanup.has(o.targetId)||await a(o.targetId,async({sessionId:n,transport:r})=>{await r.send(`Network.enable`,{},n),mT(e,t,r,o.targetId,n)});let s=n[0]??``,c=_T(t,o.targetId,s);if(!c)return{stdout:``,stderr:`No request at index ${s}\n`,exitCode:1};if(c.responseHeaders===null)return{stdout:`(response not yet received)
1068
1068
  `,stderr:``,exitCode:0};let l=Object.entries(c.responseHeaders).map(([e,t])=>`${e}: ${t}`).join(`
1069
1069
  `)+`
1070
- `,u=r.filename;return u?(await i.writeFile(u,l),{stdout:`Saved to ${u}\n`,stderr:``,exitCode:0}):{stdout:l,stderr:``,exitCode:0}},wT=async({browser:e,state:t,positional:n,flags:r,fs:i,onTab:a})=>{let o=N(r);if(`error`in o)return{stdout:``,stderr:o.error,exitCode:1};t.networkCleanup.has(o.targetId)||await a(o.targetId,async({sessionId:n,transport:r})=>{await r.send(`Network.enable`,{},n),hT(e,t,r,o.targetId,n)});let s=n[0]??``,c=vT(t,o.targetId,s);if(!c)return{stdout:``,stderr:`No request at index ${s}\n`,exitCode:1};if(c.responseBody===null)return{stdout:`(response body not yet available)
1071
- `,stderr:``,exitCode:0};let l=r.filename,u=_T(c.responseBody,c.responseBodyBase64);if(`error`in u)return{stdout:``,stderr:`Request ${s}: ${u.error}\n`,exitCode:1};if(l)return await i.writeFile(l,u.bytes),{stdout:`Saved to ${l}\n`,stderr:``,exitCode:0};if(c.mimeType!==null&&!c.mimeType.startsWith(`text/`)&&!c.mimeType.includes(`json`)&&!c.mimeType.includes(`javascript`)&&!c.mimeType.includes(`xml`))return{stdout:`[binary body, ${u.bytes.length} bytes]\n`,stderr:``,exitCode:0};let d=c.responseBodyBase64?new TextDecoder().decode(u.bytes):c.responseBody;return{stdout:(d.length>4096?d.slice(0,4096)+`
1070
+ `,u=r.filename;return u?(await i.writeFile(u,l),{stdout:`Saved to ${u}\n`,stderr:``,exitCode:0}):{stdout:l,stderr:``,exitCode:0}},CT=async({browser:e,state:t,positional:n,flags:r,fs:i,onTab:a})=>{let o=N(r);if(`error`in o)return{stdout:``,stderr:o.error,exitCode:1};t.networkCleanup.has(o.targetId)||await a(o.targetId,async({sessionId:n,transport:r})=>{await r.send(`Network.enable`,{},n),mT(e,t,r,o.targetId,n)});let s=n[0]??``,c=_T(t,o.targetId,s);if(!c)return{stdout:``,stderr:`No request at index ${s}\n`,exitCode:1};if(c.responseBody===null)return{stdout:`(response body not yet available)
1071
+ `,stderr:``,exitCode:0};let l=r.filename,u=gT(c.responseBody,c.responseBodyBase64);if(`error`in u)return{stdout:``,stderr:`Request ${s}: ${u.error}\n`,exitCode:1};if(l)return await i.writeFile(l,u.bytes),{stdout:`Saved to ${l}\n`,stderr:``,exitCode:0};if(c.mimeType!==null&&!c.mimeType.startsWith(`text/`)&&!c.mimeType.includes(`json`)&&!c.mimeType.includes(`javascript`)&&!c.mimeType.includes(`xml`))return{stdout:`[binary body, ${u.bytes.length} bytes]\n`,stderr:``,exitCode:0};let d=c.responseBodyBase64?new TextDecoder().decode(u.bytes):c.responseBody;return{stdout:(d.length>4096?d.slice(0,4096)+`
1072
1072
  ... (truncated)`:d)+`
1073
- `,stderr:``,exitCode:0}},TT=async({browser:e,fs:t,state:n,positional:r,flags:i,onTab:a,signal:o})=>{let s=r[0]||`about:blank`,c=i.filter;await ye(e,n),rr(o,`about to open the recording tab`);let l=await e.createPage(s);try{let{transport:r,sessionId:i}=await a(l,async e=>{let t=await e.transport.send(`Target.attachToTarget`,{targetId:l,flatten:!0});return{transport:e.transport,sessionId:t.sessionId}});n.harRecorder||=e.createHarRecorder(t,r);let u=await n.harRecorder.startRecording(l,i,c,o);return{stdout:`Recording started (targetId: ${l}, recordingId: ${u}) at ${s}\nHAR saved to /recordings/${u}/\n`,stderr:``,exitCode:0}}catch(t){throw await e.closePage(l).catch(()=>void 0),t}},ET=async({state:e,positional:t})=>{if(t.length===0)return{stdout:``,stderr:`stop-recording requires a recordingId
1074
- `,exitCode:1};let n=t[0];return e.harRecorder?{stdout:`Recording stopped. HAR files saved to ${await e.harRecorder.stopRecording(n)}\n`,stderr:``,exitCode:0}:{stdout:``,stderr:`Recording not found: ${n}\n`,exitCode:1}},DT=e(`playwright-route`),OT=[{urlPattern:`*`,requestStage:`Request`}];function kT(e){let t=e.replace(/[.+?^${}()|[\]\\]/g,`\\$&`).replace(/\*\*/g,`@@`).replace(/\*/g,`[^/]*`).replace(/@@/g,`.*`);return RegExp(`^${t}$`)}async function AT(e,n,r,i,a){if(a.sessionId!==n)return;let{requestId:o,request:s}=a,c=(r.routes.get(i)??[]).find(e=>e.regex.test(s.url));if(!c){await e.send(`Fetch.continueRequest`,{requestId:o},n).catch(e=>{DT.warn(`Fetch.continueRequest failed — intercepted request may hang`,{requestId:o,err:e})});return}let l=[{name:`Content-Type`,value:c.contentType},...Object.entries(c.headers).map(([e,t])=>({name:e,value:t}))];await e.send(`Fetch.fulfillRequest`,{requestId:o,responseCode:c.status,responseHeaders:l,body:c.body?t(new TextEncoder().encode(c.body)):void 0},n).catch(e=>{DT.warn(`Fetch.fulfillRequest failed`,{requestId:o,url:s.url,err:e})})}async function jT(e,t,n,r){await t(r,async({sessionId:t,transport:i})=>{await i.send(`Fetch.enable`,{patterns:OT},t);let a,o=e=>{a&&AT(a.transport,a.sessionId,n,r,e)};try{a=wC({browser:e,targetId:r,transport:i,sessionId:t,listeners:[[`Fetch.requestPaused`,o]],enable:(e,t)=>e.send(`Fetch.enable`,{patterns:OT},t)})}catch(e){throw await i.send(`Fetch.disable`,{},t).catch(()=>void 0),e}let s=a;n.routeCleanup.set(r,()=>{s.stop(),s.transport.send(`Fetch.disable`,{},s.sessionId).catch(()=>void 0)})})}const MT=async({browser:e,state:t,positional:n,flags:r,onTab:i})=>{if(n.length===0)return{stdout:``,stderr:`route requires a URL pattern
1075
- `,exitCode:1};let a=N(r);if(`error`in a)return{stdout:``,stderr:a.error,exitCode:1};let o=n[0],s={pattern:o,regex:kT(o),status:r.status?parseInt(r.status,10):200,body:r.body??``,contentType:r[`content-type`]??`text/plain`,headers:{}};if(r.header){r.header.includes(`,`)&&DT.warn(`--header value contains comma — only last segment used. Use separate route calls for multiple headers.`);for(let e of r.header.split(`,`)){let t=e.indexOf(`:`);if(t>0){let n=e.slice(0,t).trim(),r=e.slice(t+1).trim();s.headers[n]=r}}}t.routeCleanup.has(a.targetId)||(t.routes.has(a.targetId)||t.routes.set(a.targetId,[]),await jT(e,i,t,a.targetId));let c=t.routes.get(a.targetId)??[];return c.unshift(s),t.routes.set(a.targetId,c),{stdout:`Route added: ${o}\n`,stderr:``,exitCode:0}},NT=async({state:e,flags:t})=>{let n=N(t);if(`error`in n)return{stdout:``,stderr:n.error,exitCode:1};let r=e.routes.get(n.targetId)??[];return r.length===0?{stdout:`No active routes
1073
+ `,stderr:``,exitCode:0}},wT=async({browser:e,fs:t,state:n,positional:r,flags:i,onTab:a,signal:o})=>{let s=r[0]||`about:blank`,c=i.filter;await ye(e,n),ir(o,`about to open the recording tab`);let l=await e.createPage(s);try{let{transport:r,sessionId:i}=await a(l,async e=>{let t=await e.transport.send(`Target.attachToTarget`,{targetId:l,flatten:!0});return{transport:e.transport,sessionId:t.sessionId}});n.harRecorder||=e.createHarRecorder(t,r);let u=await n.harRecorder.startRecording(l,i,c,o);return{stdout:`Recording started (targetId: ${l}, recordingId: ${u}) at ${s}\nHAR saved to /recordings/${u}/\n`,stderr:``,exitCode:0}}catch(t){throw await e.closePage(l).catch(()=>void 0),t}},TT=async({state:e,positional:t})=>{if(t.length===0)return{stdout:``,stderr:`stop-recording requires a recordingId
1074
+ `,exitCode:1};let n=t[0];return e.harRecorder?{stdout:`Recording stopped. HAR files saved to ${await e.harRecorder.stopRecording(n)}\n`,stderr:``,exitCode:0}:{stdout:``,stderr:`Recording not found: ${n}\n`,exitCode:1}},ET=e(`playwright-route`),DT=[{urlPattern:`*`,requestStage:`Request`}];function OT(e){let t=e.replace(/[.+?^${}()|[\]\\]/g,`\\$&`).replace(/\*\*/g,`@@`).replace(/\*/g,`[^/]*`).replace(/@@/g,`.*`);return RegExp(`^${t}$`)}async function kT(e,n,r,i,a){if(a.sessionId!==n)return;let{requestId:o,request:s}=a,c=(r.routes.get(i)??[]).find(e=>e.regex.test(s.url));if(!c){await e.send(`Fetch.continueRequest`,{requestId:o},n).catch(e=>{ET.warn(`Fetch.continueRequest failed — intercepted request may hang`,{requestId:o,err:e})});return}let l=[{name:`Content-Type`,value:c.contentType},...Object.entries(c.headers).map(([e,t])=>({name:e,value:t}))];await e.send(`Fetch.fulfillRequest`,{requestId:o,responseCode:c.status,responseHeaders:l,body:c.body?t(new TextEncoder().encode(c.body)):void 0},n).catch(e=>{ET.warn(`Fetch.fulfillRequest failed`,{requestId:o,url:s.url,err:e})})}async function AT(e,t,n,r){await t(r,async({sessionId:t,transport:i})=>{await i.send(`Fetch.enable`,{patterns:DT},t);let a,o=e=>{a&&kT(a.transport,a.sessionId,n,r,e)};try{a=CC({browser:e,targetId:r,transport:i,sessionId:t,listeners:[[`Fetch.requestPaused`,o]],enable:(e,t)=>e.send(`Fetch.enable`,{patterns:DT},t)})}catch(e){throw await i.send(`Fetch.disable`,{},t).catch(()=>void 0),e}let s=a;n.routeCleanup.set(r,()=>{s.stop(),s.transport.send(`Fetch.disable`,{},s.sessionId).catch(()=>void 0)})})}const jT=async({browser:e,state:t,positional:n,flags:r,onTab:i})=>{if(n.length===0)return{stdout:``,stderr:`route requires a URL pattern
1075
+ `,exitCode:1};let a=N(r);if(`error`in a)return{stdout:``,stderr:a.error,exitCode:1};let o=n[0],s={pattern:o,regex:OT(o),status:r.status?parseInt(r.status,10):200,body:r.body??``,contentType:r[`content-type`]??`text/plain`,headers:{}};if(r.header){r.header.includes(`,`)&&ET.warn(`--header value contains comma — only last segment used. Use separate route calls for multiple headers.`);for(let e of r.header.split(`,`)){let t=e.indexOf(`:`);if(t>0){let n=e.slice(0,t).trim(),r=e.slice(t+1).trim();s.headers[n]=r}}}t.routeCleanup.has(a.targetId)||(t.routes.has(a.targetId)||t.routes.set(a.targetId,[]),await AT(e,i,t,a.targetId));let c=t.routes.get(a.targetId)??[];return c.unshift(s),t.routes.set(a.targetId,c),{stdout:`Route added: ${o}\n`,stderr:``,exitCode:0}},MT=async({state:e,flags:t})=>{let n=N(t);if(`error`in n)return{stdout:``,stderr:n.error,exitCode:1};let r=e.routes.get(n.targetId)??[];return r.length===0?{stdout:`No active routes
1076
1076
  `,stderr:``,exitCode:0}:{stdout:r.map((e,t)=>`${t+1}. ${e.pattern} → ${e.status} ${e.contentType}`).join(`
1077
1077
  `)+`
1078
- `,stderr:``,exitCode:0}},PT=async({state:e,positional:t,flags:n})=>{let r=N(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
1079
- `,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}},FT=`/.playwright`;function IT(e,t){return e?`${t.replace(/\/+$/,``)}${FT}`:FT}async function LT(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(!Qn(e))throw e}t.sessionDirsCreated.add(n)}}async function RT(e,t,n,r,i){try{return await e.withTab(n,async e=>{let{url:a,title:o,text:s,refs:c}=await ve(e,he(r,n)),l={url:a,title:o,refs:c,content:s,timestamp:Date.now()};r.snapshots.set(n,l);let u=[`Page URL: ${a}`,`Page Title: ${o}`,``,s].join(`
1080
- `),d=`${i}/snapshots/page-${Jn(new Date)}.yml`;return await t.writeFile(d,u),d})}catch{return null}}async function zT(e,t,n,r){await LT(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(`
1078
+ `,stderr:``,exitCode:0}},NT=async({state:e,positional:t,flags:n})=>{let r=N(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
1079
+ `,stderr:``,exitCode:0}}let a=e.routes.get(r.targetId)??[],o=a.length,s=a.filter(e=>e.pattern!==i);if(e.routes.set(r.targetId,s),s.length===0){let t=e.routeCleanup.get(r.targetId);t&&(t(),e.routeCleanup.delete(r.targetId))}return{stdout:`Removed ${o-s.length} route(s) matching "${i}"\n`,stderr:``,exitCode:0}},PT=`/.playwright`;function FT(e,t){return e?`${t.replace(/\/+$/,``)}${PT}`:PT}async function IT(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(!$n(e))throw e}t.sessionDirsCreated.add(n)}}async function LT(e,t,n,r,i){try{return await e.withTab(n,async e=>{let{url:a,title:o,text:s,refs:c}=await ve(e,he(r,n)),l={url:a,title:o,refs:c,content:s,timestamp:Date.now()};r.snapshots.set(n,l);let u=[`Page URL: ${a}`,`Page Title: ${o}`,``,s].join(`
1080
+ `),d=`${i}/snapshots/page-${Yn(new Date)}.yml`;return await t.writeFile(d,u),d})}catch{return null}}async function RT(e,t,n,r){await IT(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(`
1081
1081
  `)+`
1082
- `,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 BT(){return import(`./snapshot-features-C59UnBDa.js`)}async function VT(e,t,n,r){let i=he(t,n),a=await e.getAccessibilityTreeForFrame(r.frameId,{refFloor:i.floor});se(i,a);let o=new Map,s=me(a,o,``,ge(i,r.frameId),r.frameId).join(`
1083
- `);return t.snapshots.set(n,{url:r.url,title:r.name,refs:o,content:s,timestamp:Date.now()}),s}async function HT(e,t,n){let{objectId:r,entry:i}=await y(e,t,n);return de(i,n,`screenshot`),await pe(e,r,`function() {
1082
+ `,l=`${n}/session.md`,u=``;try{let t=await e.readFile(l);u=typeof t==`string`?t:new TextDecoder().decode(t)}catch{}await e.writeFile(l,u+c)}function zT(){return import(`./snapshot-features-C59UnBDa.js`)}async function BT(e,t,n,r){let i=he(t,n),a=await e.getAccessibilityTreeForFrame(r.frameId,{refFloor:i.floor});se(i,a);let o=new Map,s=me(a,o,``,ge(i,r.frameId),r.frameId).join(`
1083
+ `);return t.snapshots.set(n,{url:r.url,title:r.name,refs:o,content:s,timestamp:Date.now()}),s}async function VT(e,t,n){let{objectId:r,entry:i}=await y(e,t,n);return de(i,n,`screenshot`),await pe(e,r,`function() {
1084
1084
  this.scrollIntoView({ block: 'center' });
1085
1085
  const r = this.getBoundingClientRect();
1086
1086
  return { x: r.x + window.scrollX, y: r.y + window.scrollY, width: r.width, height: r.height };
1087
- }`)}const UT=async({browser:e,fs:t,state:n,flags:r,onTab:i})=>{let a=N(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)
1088
- `,exitCode:1};let u=await i(a.targetId,async e=>{let t=await Hn(e,r);if(t)return VT(e,n,a.targetId,t);let{snapshot:i,output:s}=await fe(e,n,a.targetId,{noIframes:o});if(!l)return s;let{annotateBoxes:c}=await BT();return c(e,i,s)});if(c!==void 0){let{limitSnapshotDepth:e}=await BT();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+`
1089
- `,stderr:``,exitCode:0}},WT=async e=>{let{findHandlerImpl:t}=await BT();return t(e)},GT=async({browser:e,flags:t,onTab:n})=>{let r=N(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(`
1087
+ }`)}const HT=async({browser:e,fs:t,state:n,flags:r,onTab:i})=>{let a=N(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)
1088
+ `,exitCode:1};let u=await i(a.targetId,async e=>{let t=await Un(e,r);if(t)return BT(e,n,a.targetId,t);let{snapshot:i,output:s}=await fe(e,n,a.targetId,{noIframes:o});if(!l)return s;let{annotateBoxes:c}=await zT();return c(e,i,s)});if(c!==void 0){let{limitSnapshotDepth:e}=await zT();u=e(u,c)}return r.filename?(await t.writeFile(r.filename,u),{stdout:`Snapshot saved to ${r.filename}\n`,stderr:``,exitCode:0}):{stdout:u+`
1089
+ `,stderr:``,exitCode:0}},UT=async e=>{let{findHandlerImpl:t}=await zT();return t(e)},WT=async({browser:e,flags:t,onTab:n})=>{let r=N(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(`
1090
1090
  `)}`)+`
1091
- `,stderr:``,exitCode:0}},KT=async({browser:e,fs:t,flags:n,scratchDir:r,onTab:i})=>{let a=N(n);if(`error`in a)return{stdout:``,stderr:a.error,exitCode:1};let o=n.filename||`${r}/page-${Jn(new Date)}.pdf`;try{await i(a.targetId,async({sessionId:e,transport:n})=>{let r=(await n.send(`Page.printToPDF`,{},e)).data,i=Un(r);await t.writeFile(o,i)})}catch(e){let t=e instanceof Error?e.message:String(e);return te()?{stdout:``,stderr:`pdf: not available in extension mode — use screenshot --full-page
1092
- `,exitCode:1}:{stdout:``,stderr:`pdf: ${t}\n`,exitCode:1}}return{stdout:`Saved PDF to ${o}\n`,stderr:``,exitCode:0}};async function qT(e,t,n,r){let i=t.snapshots.get(n);if(!i)throw Error(`No snapshot available. Run "snapshot" first.`);let a;try{a=await HT(e,i,r)}catch(e){return{error:e instanceof Error?e.message:String(e)}}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 JT=new Set([`png`,`jpeg`,`webp`]);function YT(e){let t=e.type;if(t&&JT.has(t))return t;let n=e.filename??``;return/\.jpe?g$/i.test(n)?`jpeg`:/\.webp$/i.test(n)?`webp`:`png`}const XT=async({browser:e,fs:t,state:n,positional:r,flags:i,scratchDir:a,sessionRoot:o,onTab:s})=>{let c=N(i);if(`error`in c)return{stdout:``,stderr:c.error,exitCode:1};if(i.type&&!JT.has(i.type))return{stdout:``,stderr:`screenshot: --type must be png, jpeg, or webp, got "${i.type}"\n`,exitCode:1};if(i[`max-width`]&&YT(i)!==`png`)return{stdout:``,stderr:`screenshot: --max-width requires png output (the downscale pass measures PNG headers); drop --type/--filename extension or --max-width
1093
- `,exitCode:1};let l=await s(c.targetId,async e=>{let s;if(r[0]?.startsWith(`e`)){let t=await qT(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 BT();s=await t(e,s,l)}let u=i[`max-width`]?parseInt(i[`max-width`],10):void 0,d=YT(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=Un(f);await t.writeFile(m,h);try{await LT(t,n,o);let e=`${o}/screenshots/screenshot-${Jn(new Date)}.${p}`;await t.writeFile(e,h)}catch{}return{message:`Screenshot saved to ${m} (${Math.round(h.length/1024)} KB)`}});return`error`in l?{stdout:``,stderr:`screenshot: ${l.error}\n`,exitCode:1}:{stdout:l.message+`
1094
- `,stderr:``,exitCode:0}},ZT=async({browser:e,fs:t,positional:n,flags:r,sessionRoot:i,onTab:a})=>{let o=N(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}},QT=async({browser:e,fs:t,positional:n,flags:r,onTab:i})=>{if(n.length===0)return{stdout:``,stderr:`state-load requires a filename
1091
+ `,stderr:``,exitCode:0}},GT=async({browser:e,fs:t,flags:n,scratchDir:r,onTab:i})=>{let a=N(n);if(`error`in a)return{stdout:``,stderr:a.error,exitCode:1};let o=n.filename||`${r}/page-${Yn(new Date)}.pdf`;try{await i(a.targetId,async({sessionId:e,transport:n})=>{let r=(await n.send(`Page.printToPDF`,{},e)).data,i=Wn(r);await t.writeFile(o,i)})}catch(e){let t=e instanceof Error?e.message:String(e);return te()?{stdout:``,stderr:`pdf: not available in extension mode — use screenshot --full-page
1092
+ `,exitCode:1}:{stdout:``,stderr:`pdf: ${t}\n`,exitCode:1}}return{stdout:`Saved PDF to ${o}\n`,stderr:``,exitCode:0}};async function KT(e,t,n,r){let i=t.snapshots.get(n);if(!i)throw Error(`No snapshot available. Run "snapshot" first.`);let a;try{a=await VT(e,i,r)}catch(e){return{error:e instanceof Error?e.message:String(e)}}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 qT=new Set([`png`,`jpeg`,`webp`]);function JT(e){let t=e.type;if(t&&qT.has(t))return t;let n=e.filename??``;return/\.jpe?g$/i.test(n)?`jpeg`:/\.webp$/i.test(n)?`webp`:`png`}const YT=async({browser:e,fs:t,state:n,positional:r,flags:i,scratchDir:a,sessionRoot:o,onTab:s})=>{let c=N(i);if(`error`in c)return{stdout:``,stderr:c.error,exitCode:1};if(i.type&&!qT.has(i.type))return{stdout:``,stderr:`screenshot: --type must be png, jpeg, or webp, got "${i.type}"\n`,exitCode:1};if(i[`max-width`]&&JT(i)!==`png`)return{stdout:``,stderr:`screenshot: --max-width requires png output (the downscale pass measures PNG headers); drop --type/--filename extension or --max-width
1093
+ `,exitCode:1};let l=await s(c.targetId,async e=>{let s;if(r[0]?.startsWith(`e`)){let t=await KT(e,n,c.targetId,r[0]);if(`error`in t)return t;s=t.clip}let l=i.fullPage===`true`||i[`full-page`]===`true`;if(i.hires===`true`){let{hiresClip:t}=await zT();s=await t(e,s,l)}let u=i[`max-width`]?parseInt(i[`max-width`],10):void 0,d=JT(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=Wn(f);await t.writeFile(m,h);try{await IT(t,n,o);let e=`${o}/screenshots/screenshot-${Yn(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+`
1094
+ `,stderr:``,exitCode:0}},XT=async({browser:e,fs:t,positional:n,flags:r,sessionRoot:i,onTab:a})=>{let o=N(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}},ZT=async({browser:e,fs:t,positional:n,flags:r,onTab:i})=>{if(n.length===0)return{stdout:``,stderr:`state-load requires a filename
1095
1095
  `,exitCode:1};let a=N(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() {
1096
1096
  var items = ${JSON.stringify(e)};
1097
1097
  for (var i = 0; i < items.length; i++) {
1098
1098
  localStorage.setItem(items[i].name, items[i].value);
1099
1099
  }
1100
- })()`;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 $T(e,t){return{list:async({browser:e,flags:n,onTab:r})=>{let i=N(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(`
1100
+ })()`;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 QT(e,t){return{list:async({browser:e,flags:n,onTab:r})=>{let i=N(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(`
1101
1101
  `)})+`
1102
1102
  `,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=N(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})+`
1103
- `,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=N(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=N(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=N(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 eE=$T(`localstorage`,`localStorage`),tE=$T(`sessionstorage`,`sessionStorage`),nE=e(`playwright`),rE={width:412,height:915,deviceScaleFactor:2.625};function iE(e,t,n,r,i){let a=n[`teleport-start`],o=n[`teleport-return`];if(!a||!o)return null;nE.info(`Arming teleport via open/tab-new flags`),nE.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&&(Qw(u),t.teleportWatchers.delete(i)),$w(e,t,s,c,l*1e3,n[`teleport-runtime`],r,i),null}const aE=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 ye(e,n);let l=c?`about:blank`:o,u;if(u=s?await e.createRemotePage(s,l):await e.createPage(l),le(n,u),c&&await a(u,async e=>{await e.setViewportOverride(rE.width,rE.height,{deviceScaleFactor:rE.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){nE.debug(`open/tab-new --foreground bringToFront failed`,{targetId:u,error:e instanceof Error?e.message:String(e)})}let d=iE(e,n,i,o,u);if(d)return d;if(i.discover===`true`){let{browseShWarning:e,...n}=await $C(o,{discover:!0,fs:t}),r={action:`open`,targetId:u,source:`auxiliary-fetch`,...n};return{stdout:JSON.stringify(r,null,2)+`
1104
- `,stderr:e?`${e}\n`:``,exitCode:0}}return{stdout:`Opened ${o} in new tab [targetId: ${u}]\n`,stderr:``,exitCode:0}},oE=async({browser:e,state:t})=>{let n=await ue(e,t);return n.length===0?{stdout:`No tabs open
1103
+ `,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=N(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=N(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=N(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 $T=QT(`localstorage`,`localStorage`),eE=QT(`sessionstorage`,`sessionStorage`),tE=e(`playwright`),nE={width:412,height:915,deviceScaleFactor:2.625};function rE(e,t,n,r,i){let a=n[`teleport-start`],o=n[`teleport-return`];if(!a||!o)return null;tE.info(`Arming teleport via open/tab-new flags`),tE.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&&(Zw(u),t.teleportWatchers.delete(i)),Qw(e,t,s,c,l*1e3,n[`teleport-runtime`],r,i),null}const iE=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 ye(e,n);let l=c?`about:blank`:o,u;if(u=s?await e.createRemotePage(s,l):await e.createPage(l),le(n,u),c&&await a(u,async e=>{await e.setViewportOverride(nE.width,nE.height,{deviceScaleFactor:nE.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){tE.debug(`open/tab-new --foreground bringToFront failed`,{targetId:u,error:e instanceof Error?e.message:String(e)})}let d=rE(e,n,i,o,u);if(d)return d;if(i.discover===`true`){let{browseShWarning:e,...n}=await QC(o,{discover:!0,fs:t}),r={action:`open`,targetId:u,source:`auxiliary-fetch`,...n};return{stdout:JSON.stringify(r,null,2)+`
1104
+ `,stderr:e?`${e}\n`:``,exitCode:0}}return{stdout:`Opened ${o} in new tab [targetId: ${u}]\n`,stderr:``,exitCode:0}},aE=async({browser:e,state:t})=>{let n=await ue(e,t);return n.length===0?{stdout:`No tabs open
1105
1105
  `,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}" (tab ${e.number})${r}${i}`}).join(`
1106
1106
  `)+`
1107
- `,stderr:``,exitCode:0}},sE=async({browser:e,state:t,flags:n})=>{let r=N(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),t.tabRefs.delete(r.targetId),t.tabNumbers.delete(r.targetId),{stdout:`Closed tab ${r.targetId}\n`,stderr:``,exitCode:0}},cE=async({browser:e,state:t,positional:n,flags:r,onTab:i})=>{let a=r.tab,o=n[0];if(a&&o)return{stdout:``,stderr:`tab-select takes a tab number or --tab=<targetId>, not both
1107
+ `,stderr:``,exitCode:0}},oE=async({browser:e,state:t,flags:n})=>{let r=N(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),t.tabRefs.delete(r.targetId),t.tabNumbers.delete(r.targetId),{stdout:`Closed tab ${r.targetId}\n`,stderr:``,exitCode:0}},sE=async({browser:e,state:t,positional:n,flags:r,onTab:i})=>{let a=r.tab,o=n[0];if(a&&o)return{stdout:``,stderr:`tab-select takes a tab number or --tab=<targetId>, not both
1108
1108
  `,exitCode:1};if(!a&&!o)return{stdout:``,stderr:`tab-select requires a tab number from tab-list or --tab=<targetId>
1109
1109
  `,exitCode:1};if(o&&!/^[1-9][0-9]*$/.test(o))return{stdout:``,stderr:`tab-select tab number must be a positive integer
1110
- `,exitCode:1};let s=await ue(e,t),c;if(a)c=a;else{let e=parseInt(o,10),t=s.find(t=>t.number===e);if(!t)return{stdout:``,stderr:`tab-select: no open tab is numbered ${e} (it was closed, or this shell never listed it). Run tab-list for current numbers, or pass --tab=<targetId>.\n`,exitCode:1};c=t.targetId}await i(c,e=>e.bringToFront());let l=s.find(e=>e.targetId===c)?.number;return{stdout:`Selected ${l===void 0?`tab`:`tab ${l}`} [targetId: ${c}]\n`,stderr:``,exitCode:0}},lE=async({browser:e,state:t,positional:n,flags:r,onTab:i})=>{if(n.length<2)return{stdout:``,stderr:`resize requires <width> <height>
1110
+ `,exitCode:1};let s=await ue(e,t),c;if(a)c=a;else{let e=parseInt(o,10),t=s.find(t=>t.number===e);if(!t)return{stdout:``,stderr:`tab-select: no open tab is numbered ${e} (it was closed, or this shell never listed it). Run tab-list for current numbers, or pass --tab=<targetId>.\n`,exitCode:1};c=t.targetId}await i(c,e=>e.bringToFront());let l=s.find(e=>e.targetId===c)?.number;return{stdout:`Selected ${l===void 0?`tab`:`tab ${l}`} [targetId: ${c}]\n`,stderr:``,exitCode:0}},cE=async({browser:e,state:t,positional:n,flags:r,onTab:i})=>{if(n.length<2)return{stdout:``,stderr:`resize requires <width> <height>
1111
1111
  `,exitCode:1};let a=N(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
1112
- `,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})},uE=e(`playwright-teleport`);function dE(){uE.info(`Listing available follower runtimes`);let e=Xw();if(!e)return{stdout:``,stderr:`teleport: not connected to a tray
1112
+ `,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})},lE=e(`playwright-teleport`);function uE(){lE.info(`Listing available follower runtimes`);let e=Yw();if(!e)return{stdout:``,stderr:`teleport: not connected to a tray
1113
1113
  `,exitCode:1};let t=e();if(t.length===0)return{stdout:`No followers connected to the tray.
1114
1114
  `,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(`
1115
1115
  `)+`
1116
- `,stderr:``,exitCode:0}}function fE({state:e,flags:t}){let n=N(t);if(`error`in n)return{stdout:``,stderr:n.error,exitCode:1};uE.info(`Disarming teleport watcher via --off`,{targetId:n.targetId});let r=e.teleportWatchers.get(n.targetId);return r&&(Qw(r),e.teleportWatchers.delete(n.targetId)),{stdout:`Teleport watcher disarmed
1117
- `,stderr:``,exitCode:0}}function pE(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 mE(e){return(Xw()?.()??[]).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 hE({browser:e,state:t,flags:n,onTab:r,signal:i}){let a=N(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>
1118
- `,exitCode:1};let c=pE(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
1119
- `,exitCode:1};let u=n.runtime;if(u){let e=mE(u);if(e)return{stdout:``,stderr:e,exitCode:1}}let d=t.teleportWatchers.get(a.targetId);d&&(uE.info(`Disarming existing teleport watcher before re-arming`,{targetId:a.targetId}),Qw(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 uE.info(`Arming teleport via explicit subcommand`,{targetId:a.targetId,timeoutSec:l,runtimeSelection:u?`explicit`:`auto`}),uE.debug(`Arming teleport via explicit subcommand details`,{targetId:a.targetId,startPattern:o,returnPattern:s,timeoutSec:l,runtimeId:u??`auto`,leaderUrl:f}),rr(i,`about to arm a teleport watcher on tab ${a.targetId}`),$w(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 gE=async e=>e.flags.list===`true`?dE():e.flags.off===`true`?fE(e):hE(e),_E={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 vE(e){let t=e.split(`.`).pop()?.toLowerCase()??``;return _E[t]??`application/octet-stream`}function yE(e,t){if(e.length===0)return{error:`upload requires at least one file path
1120
- `};if(!Yn(e[0]))return{targetRef:null,filePaths:e};let n=e[0],r=e.slice(1);if(!t)return{error:`No snapshot available. Run "snapshot" first.
1116
+ `,stderr:``,exitCode:0}}function dE({state:e,flags:t}){let n=N(t);if(`error`in n)return{stdout:``,stderr:n.error,exitCode:1};lE.info(`Disarming teleport watcher via --off`,{targetId:n.targetId});let r=e.teleportWatchers.get(n.targetId);return r&&(Zw(r),e.teleportWatchers.delete(n.targetId)),{stdout:`Teleport watcher disarmed
1117
+ `,stderr:``,exitCode:0}}function fE(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 pE(e){return(Yw()?.()??[]).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 mE({browser:e,state:t,flags:n,onTab:r,signal:i}){let a=N(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>
1118
+ `,exitCode:1};let c=fE(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
1119
+ `,exitCode:1};let u=n.runtime;if(u){let e=pE(u);if(e)return{stdout:``,stderr:e,exitCode:1}}let d=t.teleportWatchers.get(a.targetId);d&&(lE.info(`Disarming existing teleport watcher before re-arming`,{targetId:a.targetId}),Zw(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 lE.info(`Arming teleport via explicit subcommand`,{targetId:a.targetId,timeoutSec:l,runtimeSelection:u?`explicit`:`auto`}),lE.debug(`Arming teleport via explicit subcommand details`,{targetId:a.targetId,startPattern:o,returnPattern:s,timeoutSec:l,runtimeId:u??`auto`,leaderUrl:f}),ir(i,`about to arm a teleport watcher on tab ${a.targetId}`),Qw(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 hE=async e=>e.flags.list===`true`?uE():e.flags.off===`true`?dE(e):mE(e),gE={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 _E(e){let t=e.split(`.`).pop()?.toLowerCase()??``;return gE[t]??`application/octet-stream`}function vE(e,t){if(e.length===0)return{error:`upload requires at least one file path
1120
+ `};if(!Xn(e[0]))return{targetRef:null,filePaths:e};let n=e[0],r=e.slice(1);if(!t)return{error:`No snapshot available. Run "snapshot" first.
1121
1121
  `};try{_e(t,n)}catch(e){return{error:`${e instanceof Error?e.message:String(e)}\n`}}return r.length===0?{error:`upload requires at least one file path
1122
- `}:{targetRef:n,filePaths:r}}const bE=new Map([[`teleport`,gE],[`open`,aE],[`tab-new`,aE],[`fetch`,ew],[`goto`,cT],[`navigate`,cT],[`snapshot`,UT],[`find`,WT],[`frames`,GT],[`screenshot`,XT],[`click`,aw],[`type`,ow],[`fill`,sw],[`eval`,JC],[`eval-file`,YC],[`press`,cw],[`keydown`,lw],[`keyup`,uw],[`go-back`,lT],[`go-forward`,uT],[`reload`,dT],[`tab-list`,oE],[`tab-close`,sE],[`close`,sE],[`dblclick`,dw],[`hover`,fw],[`select`,pw],[`check`,hw],[`uncheck`,gw],[`drag`,_w],[`resize`,lE],[`dialog-accept`,HC],[`dialog-dismiss`,UC],[`cookie-list`,PC],[`cookie-get`,FC],[`cookie-set`,IC],[`cookie-delete`,LC],[`cookie-clear`,RC],[`localstorage-list`,eE.list],[`localstorage-get`,eE.get],[`localstorage-set`,eE.set],[`localstorage-delete`,eE.del],[`localstorage-clear`,eE.clear],[`sessionstorage-list`,tE.list],[`sessionstorage-get`,tE.get],[`sessionstorage-set`,tE.set],[`sessionstorage-delete`,tE.del],[`sessionstorage-clear`,tE.clear],[`record`,TT],[`stop-recording`,ET],[`tab-select`,cE],[`pdf`,KT],[`network-state-set`,fT],[`upload`,async({browser:e,fs:n,state:r,positional:i,flags:a,onTab:o})=>{let s=N(a);if(`error`in s)return{stdout:``,stderr:s.error,exitCode:1};let c=r.snapshots.get(s.targetId),l=yE(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 vw(n,e),i=e.split(`/`).pop()??e;f.push({name:i,type:vE(i),base64:t(r)})}u?await o(s.targetId,async e=>{let{objectId:t}=await y(e,c,u);await pe(e,t,`function(filesData) {
1122
+ `}:{targetRef:n,filePaths:r}}const yE=new Map([[`teleport`,hE],[`open`,iE],[`tab-new`,iE],[`fetch`,$C],[`goto`,sT],[`navigate`,sT],[`snapshot`,HT],[`find`,UT],[`frames`,WT],[`screenshot`,YT],[`click`,iw],[`type`,aw],[`fill`,ow],[`eval`,qC],[`eval-file`,JC],[`press`,sw],[`keydown`,cw],[`keyup`,lw],[`go-back`,cT],[`go-forward`,lT],[`reload`,uT],[`tab-list`,aE],[`tab-close`,oE],[`close`,oE],[`dblclick`,uw],[`hover`,dw],[`select`,fw],[`check`,mw],[`uncheck`,hw],[`drag`,gw],[`resize`,cE],[`dialog-accept`,VC],[`dialog-dismiss`,HC],[`cookie-list`,NC],[`cookie-get`,PC],[`cookie-set`,FC],[`cookie-delete`,IC],[`cookie-clear`,LC],[`localstorage-list`,$T.list],[`localstorage-get`,$T.get],[`localstorage-set`,$T.set],[`localstorage-delete`,$T.del],[`localstorage-clear`,$T.clear],[`sessionstorage-list`,eE.list],[`sessionstorage-get`,eE.get],[`sessionstorage-set`,eE.set],[`sessionstorage-delete`,eE.del],[`sessionstorage-clear`,eE.clear],[`record`,wT],[`stop-recording`,TT],[`tab-select`,sE],[`pdf`,GT],[`network-state-set`,dT],[`upload`,async({browser:e,fs:n,state:r,positional:i,flags:a,onTab:o})=>{let s=N(a);if(`error`in s)return{stdout:``,stderr:s.error,exitCode:1};let c=r.snapshots.get(s.targetId),l=vE(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 _w(n,e),i=e.split(`/`).pop()??e;f.push({name:i,type:_E(i),base64:t(r)})}u?await o(s.targetId,async e=>{let{objectId:t}=await y(e,c,u);await pe(e,t,`function(filesData) {
1123
1123
  const el = this;
1124
1124
  if (el.tagName !== 'INPUT' || el.type !== 'file') {
1125
1125
  throw new Error('Element ' + el.tagName + ' is not a file input');
@@ -1150,12 +1150,12 @@ Options:
1150
1150
  el.dispatchEvent(new Event('change', { bubbles: true }));
1151
1151
  el.dispatchEvent(new Event('input', { bubbles: true }));
1152
1152
  return el.files.length;
1153
- })()`,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`,ZT],[`state-load`,QT],[`console`,kC],[`requests`,yT],[`request`,bT],[`request-headers`,xT],[`request-body`,ST],[`response-headers`,CT],[`response-body`,wT],[`mousemove`,Sw],[`mousedown`,Cw],[`mouseup`,ww],[`mousewheel`,Tw],[`drop`,Dw],[`route`,MT],[`route-list`,NT],[`unroute`,PT],[`generate-locator`,BC],[`highlight`,VC]]);function xE(){let e=(qn.string??[]).map(e=>`--${e}`),t=new Set(qn.boolean??[]);for(let[e,n]of Object.entries(qn.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 SE(e){return e.map(e=>e===`--no-iframes`||e.startsWith(`--no-iframes=`)?e.replace(`--no-iframes`,`--_noiframes`):e)}function CE(e){return{...e,bool:[...e.bool??[],`--_noiframes`],value:[...e.value??[],`--_noiframes`]}}const wE=2e3;function TE(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 EE(e,t,n,r){if(!t||typeof e.getTabLockStats!=`function`)return r;let i=e.getTabLockStats(),a=i.totalWaitMs-t.totalWaitMs;if(a<wE)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>=wE?`${(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.
1154
- `;return{...r,stderr:r.stderr+c}}async function DE(e,t,n){let r=n instanceof Error?n.message:String(n);return{stdout:``,stderr:`Error: ${(t.tab?await nr(e,t.tab,n):null)??r}\n`,exitCode:1}}function OE(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 kE(e,t,n){let r=bE.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?OE(e,t,void 0):a}catch(r){return i?.aborted?OE(e,t,r):await DE(n.browser,n.flags,r)}}async function AE(e,t,n,r){let i=w(SE(n),CE(r));if(`error`in i)return{answer:{stdout:``,stderr:`${e} ${t}: ${i.error}\n`,exitCode:1}};let a;try{({flags:a}=Kn(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-Dgedzig_.js`);return{answer:{stdout:n(e,t),stderr:``,exitCode:0}}}let o=null;try{let{validateSubcommandArgs:r}=await import(`./validate-args-hQ6FqlWN.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 jE(e,t,n,r={}){let i=t?Gn(t,n):null,a=xE();return C(e,async(o,s)=>{if(o.length===0||o[0]===`help`||o[0]===`--help`||o[0]===`-h`){let{formatHelp:t}=await import(`./help-Dgedzig_.js`);return{stdout:t(e)+`
1155
- `,stderr:``,exitCode:0}}let c=o[0],l=o.slice(1),u=await AE(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=TE(t,p),h=la(s.env),g=IT(r.isScoop?.()??!1,h),_=await kE(e,c,{browser:t,fs:n,state:i,positional:d,flags:f,scratchDir:h,sessionRoot:g,onTab:(e,n)=>t.withTab(e,async e=>{try{return await n(e)}finally{await e.releaseObjects?.().catch(()=>void 0)}},{signal:s.signal}),signal:s.signal}),v=f.tab??null,ee=null;tr.has(c)&&_.exitCode===0&&v&&(ee=await RT(t,n,v,i,g));try{await zT(n,i,g,{command:c,args:l,result:_,snapshotPath:ee,targetId:v})}catch{}return EE(t,m,p,ee&&er.has(c)?{..._,stdout:`${_.stdout}Snapshot: ${ee}\n`}:_)})}const ME=new Map([[`File operations`,[`ls`,`cat`,`head`,`tail`,`wc`,`touch`,`mkdir`,`rm`,`cp`,`mv`,`ln`,`chmod`,`stat`,`readlink`,`file`,`rmdir`,`rsync`]],[`Text processing`,[`grep`,`sed`,`awk`,`sort`,`uniq`,`cut`,`tr`,`tee`,`diff`,`patch`,`column`,`comm`,`egrep`,`fgrep`,`expand`,`unexpand`,`fold`,`join`,`nl`,`od`,`paste`,`rev`,`split`,`strings`,`tac`]],[`Search`,[`find`,`rg`]],[`Navigation & paths`,[`pwd`,`basename`,`dirname`,`tree`,`du`,`cd`]],[`Archives`,[`zip`,`unzip`,`pdftk`,`pdf`,`gunzip`,`gzip`,`zcat`]],[`Media`,[`convert`,`magick`,`pdftoppm`,`pdftocairo`,`pdftotext`,`ffmpeg`,`ffprobe`,`screencapture`]],[`Audio`,[`say`,`hear`,`afplay`,`chime`]],[`Environment & shell`,`echo.printf.env.printenv.export.alias.unalias.history.clear.true.false.bash.sh.commands.which.uname.man.host.oauth-token.secret.nuke.models.local-llm.cost.hostname.whoami.id.help.sleep.time.timeout.oauth-domain`.split(`.`)],[`Data processing`,[`xargs`,`jq`,`base64`,`date`,`expr`,`seq`]],[`Hashes`,[`md5sum`,`sha1sum`,`sha256sum`]],[`Network`,[`curl`,`curlwright`,`wget`,`dig`,`websocat`,`html-to-markdown`]],[`Version control`,[`git`]],[`Languages`,[`node`,`jsh`,`python`,`python3`,`pyodide`,`sqlite3`]],[`Virtualization`,[`v86`,`computer`]],[`Build tools`,[`tsc`,`tst`,`esbuild`,`biome`]],[`Packages`,[`ipk`,`hf`,`npm`,`i`,`ipx`,`npx`]],[`Skills`,[`skill`,`upskill`]],[`Browser & UI`,[`serve`,`open`,`imgcat`,...$n,`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)`,[...f_]]]);function NE(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:
1156
- `);let a=[];for(let[e,t]of ME){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(`
1153
+ })()`,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`,XT],[`state-load`,ZT],[`console`,OC],[`requests`,vT],[`request`,yT],[`request-headers`,bT],[`request-body`,xT],[`response-headers`,ST],[`response-body`,CT],[`mousemove`,xw],[`mousedown`,Sw],[`mouseup`,Cw],[`mousewheel`,ww],[`drop`,Ew],[`route`,jT],[`route-list`,MT],[`unroute`,NT],[`generate-locator`,zC],[`highlight`,BC]]);function bE(){let e=(Jn.string??[]).map(e=>`--${e}`),t=new Set(Jn.boolean??[]);for(let[e,n]of Object.entries(Jn.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 xE(e){return e.map(e=>e===`--no-iframes`||e.startsWith(`--no-iframes=`)?e.replace(`--no-iframes`,`--_noiframes`):e)}function SE(e){return{...e,bool:[...e.bool??[],`--_noiframes`],value:[...e.value??[],`--_noiframes`]}}const CE=2e3;function wE(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 TE(e,t,n,r){if(!t||typeof e.getTabLockStats!=`function`)return r;let i=e.getTabLockStats(),a=i.totalWaitMs-t.totalWaitMs;if(a<CE)return r;let o=(a/1e3).toFixed(1),s=n&&t.tabWaitMs!==void 0?e.getTabLockStats(n).tabWaitMs-t.tabWaitMs:0,c=`note: browser bridge contended — lock waits totaled ${o}s while this command ran, ${s>=CE?`${(s/1e3).toFixed(1)}s of it waiting on this tab (--tab=${n})`:`all of it waiting on the bridge, not on this tab`} (queue depth ${i.queueDepth}). Commands on the same tab serialize; commands on different tabs run in parallel — stagger callers on THIS tab, or give each caller its own tab.
1154
+ `;return{...r,stderr:r.stderr+c}}async function EE(e,t,n){let r=n instanceof Error?n.message:String(n);return{stdout:``,stderr:`Error: ${(t.tab?await rr(e,t.tab,n):null)??r}\n`,exitCode:1}}function DE(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 OE(e,t,n){let r=yE.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?DE(e,t,void 0):a}catch(r){return i?.aborted?DE(e,t,r):await EE(n.browser,n.flags,r)}}async function kE(e,t,n,r){let i=w(xE(n),SE(r));if(`error`in i)return{answer:{stdout:``,stderr:`${e} ${t}: ${i.error}\n`,exitCode:1}};let a;try{({flags:a}=qn(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-Dgedzig_.js`);return{answer:{stdout:n(e,t),stderr:``,exitCode:0}}}let o=null;try{let{validateSubcommandArgs:r}=await import(`./validate-args-hQ6FqlWN.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 AE(e,t,n,r={}){let i=t?Kn(t,n):null,a=bE();return C(e,async(o,s)=>{if(o.length===0||o[0]===`help`||o[0]===`--help`||o[0]===`-h`){let{formatHelp:t}=await import(`./help-Dgedzig_.js`);return{stdout:t(e)+`
1155
+ `,stderr:``,exitCode:0}}let c=o[0],l=o.slice(1),u=await kE(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=wE(t,p),h=ua(s.env),g=FT(r.isScoop?.()??!1,h),_=await OE(e,c,{browser:t,fs:n,state:i,positional:d,flags:f,scratchDir:h,sessionRoot:g,onTab:(e,n)=>t.withTab(e,async e=>{try{return await n(e)}finally{await e.releaseObjects?.().catch(()=>void 0)}},{signal:s.signal}),signal:s.signal}),v=f.tab??null,ee=null;nr.has(c)&&_.exitCode===0&&v&&(ee=await LT(t,n,v,i,g));try{await RT(n,i,g,{command:c,args:l,result:_,snapshotPath:ee,targetId:v})}catch{}return TE(t,m,p,ee&&tr.has(c)?{..._,stdout:`${_.stdout}Snapshot: ${ee}\n`}:_)})}const jE=new Map([[`File operations`,[`ls`,`cat`,`head`,`tail`,`wc`,`touch`,`mkdir`,`rm`,`cp`,`mv`,`ln`,`chmod`,`stat`,`readlink`,`file`,`rmdir`,`rsync`]],[`Text processing`,[`grep`,`sed`,`awk`,`sort`,`uniq`,`cut`,`tr`,`tee`,`diff`,`patch`,`column`,`comm`,`egrep`,`fgrep`,`expand`,`unexpand`,`fold`,`join`,`nl`,`od`,`paste`,`rev`,`split`,`strings`,`tac`]],[`Search`,[`find`,`rg`]],[`Navigation & paths`,[`pwd`,`basename`,`dirname`,`tree`,`du`,`cd`]],[`Archives`,[`zip`,`unzip`,`pdftk`,`pdf`,`gunzip`,`gzip`,`zcat`]],[`Media`,[`convert`,`magick`,`pdftoppm`,`pdftocairo`,`pdftotext`,`ffmpeg`,`ffprobe`,`screencapture`]],[`Audio`,[`say`,`hear`,`afplay`,`chime`]],[`Environment & shell`,`echo.printf.env.printenv.export.alias.unalias.history.clear.true.false.bash.sh.commands.which.uname.man.host.oauth-token.secret.nuke.models.local-llm.cost.hostname.whoami.id.help.sleep.time.timeout.oauth-domain`.split(`.`)],[`Data processing`,[`xargs`,`jq`,`base64`,`date`,`expr`,`seq`]],[`Hashes`,[`md5sum`,`sha1sum`,`sha256sum`]],[`Network`,[`curl`,`curlwright`,`wget`,`dig`,`websocat`,`html-to-markdown`]],[`Version control`,[`git`]],[`Languages`,[`node`,`jsh`,`python`,`python3`,`pyodide`,`sqlite3`]],[`Virtualization`,[`v86`,`computer`]],[`Build tools`,[`tsc`,`tst`,`esbuild`,`biome`]],[`Packages`,[`ipk`,`hf`,`npm`,`i`,`ipx`,`npx`]],[`Skills`,[`skill`,`upskill`]],[`Browser & UI`,[`serve`,`open`,`imgcat`,...er,`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)`,[...d_]]]);function ME(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:
1156
+ `);let a=[];for(let[e,t]of jE){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(`
1157
1157
  `)+`
1158
- `}function PE(e={}){return C(`commands`,async(t,n)=>{if(t.includes(`--help`)||t.includes(`-h`))return{stdout:`commands - display available commands
1158
+ `}function NE(e={}){return C(`commands`,async(t,n)=>{if(t.includes(`--help`)||t.includes(`-h`))return{stdout:`commands - display available commands
1159
1159
 
1160
1160
  Usage: commands [command]
1161
1161
 
@@ -1166,7 +1166,7 @@ If a command name is provided, shows help for that command.
1166
1166
  Otherwise, lists all available commands.
1167
1167
 
1168
1168
  Note: This is an enhanced version of 'help' that shows all custom commands.
1169
- `,stderr:``,exitCode:0};if(t.length>0&&n.exec){let e=t[0];return n.exec(`${e} --help`,{cwd:n.cwd})}return{stdout:NE(n.getRegisteredCommands?.()??[],await e.getJshCommands?.()??[],await e.getWorkflowCommands?.()??[]),stderr:``,exitCode:0}})}function FE(e){return{stdout:`hf - download model repos from the Hugging Face Hub into the VFS
1169
+ `,stderr:``,exitCode:0};if(t.length>0&&n.exec){let e=t[0];return n.exec(`${e} --help`,{cwd:n.cwd})}return{stdout:ME(n.getRegisteredCommands?.()??[],await e.getJshCommands?.()??[],await e.getWorkflowCommands?.()??[]),stderr:``,exitCode:0}})}function PE(e){return{stdout:`hf - download model repos from the Hugging Face Hub into the VFS
1170
1170
 
1171
1171
  Usage:
1172
1172
  hf download <repo> [files...] [--to <dir>] [--revision <rev>] [--force]
@@ -1183,7 +1183,7 @@ Defaults:
1183
1183
  --to /workspace/models/<repo>/
1184
1184
  --revision main
1185
1185
  --concurrency, -j 4 files at once
1186
- --max-in-flight-mb ${pa/1048576} MB of downloads in flight at once
1186
+ --max-in-flight-mb ${ma/1048576} MB of downloads in flight at once
1187
1187
 
1188
1188
  Notes:
1189
1189
  - <repo> is the standard <owner>/<name> form.
@@ -1197,8 +1197,8 @@ Notes:
1197
1197
  - Background-job logs get a progress line every few seconds.
1198
1198
  - Weights are read by the speech engines via the preview SW from the
1199
1199
  target directory; transformers expects <localModelPath>/<repo>/.
1200
- `,stderr:``,exitCode:e}}function IE(e){return{stdout:``,stderr:`hf: ${e}\n`,exitCode:1}}const LE=/^[A-Za-z0-9_.-]+\/[A-Za-z0-9_.-]+$/;function RE(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 zE(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=RE(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 LE.test(c)?{repo:c,files:o.slice(1),to:t,revision:n,force:r,concurrency:i,maxInFlightMb:a}:{error:`invalid repo '${c}' — expected <owner>/<name>`}}function BE(e){let t=Math.max(0,Math.round(e/1e3));if(t<60)return`${t}s`;let n=Math.floor(t/60);return n<60?`${n}m ${t%60}s`:`${Math.floor(n/60)}h ${n%60}m`}var VE=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=Hy(this.bytesDone),r=``;if(this.bytesTotal!==void 0){n+=` of ${Hy(this.bytesTotal)}`;let e=this.bytesTotal-this.bytesDone;t>0&&e>0&&(r=`, ~${BE(e/t*1e3)} left`)}return`hf: ${this.filesDone}/${this.filesTotal} files, ${n}, ${Hy(t)}/s${r}\n`}};function HE(e){let t=e;return typeof t.writeStdout==`function`?t.writeStdout.bind(t):void 0}async function UE(e,t,n,r){let i=zE(e);if(`error`in i)return IE(i.error);let a=fa(i.repo,i.to,t.cwd),{downloadHfRepo:o,HfFileDownloadError:s}=await import(`./hf-download-CNg2vD63.js`),c=HE(t),l=new VE(i.files.length,void 0,r),u=``;try{let e=await o({fetch:n.fetch,streamFetch:n.streamFetch,fs:t.fs,repo:i.repo,targetDir:a,files:i.files,revision:i.revision,force:i.force,concurrency:i.concurrency,maxBytesInFlight:i.maxInFlightMb===void 0?void 0:i.maxInFlightMb*1024*1024,signal:t.signal,endpoint:t.env.get(`HF_ENDPOINT`),progress:{onListed:({files:e,totalBytes:t})=>{l.listed(e.length,t);let n=`hf: ${e.length} file(s) listed in ${i.repo}@${i.revision}\n`;u+=n,c?.(n)},onFile:e=>{u+=e.status===`downloaded`?`hf: downloaded ${e.file} (${Hy(e.bytes)})\n`:`hf: skipped ${e.file} (already at ${a})\n`,l.file(e.status,e.bytes);let t=c?l.line():null;t&&c?.(t)}}}),r=e.downloaded>0?` in ${BE(l.elapsedMs())} (${Hy(l.rate())}/s)`:``,s=`hf: ${e.downloaded} downloaded, ${e.skipped} skipped, ${Hy(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}):IE(e instanceof Error?e.message:String(e))}}const WE=[`--to`,`--revision`,`--rev`,`--concurrency`,`-j`,`--max-in-flight-mb`];function GE(e){let t=e.now??Date.now;return{name:`hf`,async execute(n,r){if(n.length===0||T(n,{valueFlags:WE}))return FE(+(n.length===0));let i=n[0];return i===`download`?UE(n.slice(1),r,e,t):IE(`unknown subcommand: ${i}`)}}}const KE=new Set([`--vid`,`--pid`,`--usage-page`,`--usage`,`--__resolved`,`--timeout`]);function qE(e){return Bn(e,KE)}function JE(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 YE(e){let t={};return e.has(`--vid`)&&(t.vendorId=JE(e.get(`--vid`),`vid`)),e.has(`--pid`)&&(t.productId=JE(e.get(`--pid`),`pid`)),e.has(`--usage-page`)&&(t.usagePage=JE(e.get(`--usage-page`),`usage-page`)),e.has(`--usage`)&&(t.usage=JE(e.get(`--usage`),`usage`)),Object.keys(t).length>0?[t]:[]}function XE(e){let t=cr(e.stdin),n=new Uint8Array(t.length);for(let e=0;e<t.length;e++)n[e]=t.charCodeAt(e)&255;return n}function ZE(e){return Array.from(e,e=>e.toString(16).padStart(2,`0`)).join(` `)}function QE(e){return e.toString(16).padStart(2,`0`)}function $E(e){return`0x${e.toString(16).padStart(4,`0`)}`}function eD(e){let t=e.productName||`(unknown)`,n=e.opened?` [open]`:``,r=e.usagePage===void 0?``:`\t${$E(e.usagePage)}:${$E(e.usage??0)}`;return`${e.handle}\t${$E(e.vendorId)}:${$E(e.productId)}${r}\t${t}${n}`}function tD(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 nD(e){return`${e.map(eD).join(`
1201
- `)}\n`}function rD(e){return`${QE(e.reportId)} ${ZE(e.bytes)}`.trimEnd()}function iD(e){return{stdout:e,stderr:``,exitCode:0}}function W(e){return{stdout:``,stderr:`hid: ${e}\n`,exitCode:1}}const aD=`hid - access HID devices via WebHID
1200
+ `,stderr:``,exitCode:e}}function FE(e){return{stdout:``,stderr:`hf: ${e}\n`,exitCode:1}}const IE=/^[A-Za-z0-9_.-]+\/[A-Za-z0-9_.-]+$/;function LE(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 RE(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=LE(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 IE.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 zE(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 BE=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=Vy(this.bytesDone),r=``;if(this.bytesTotal!==void 0){n+=` of ${Vy(this.bytesTotal)}`;let e=this.bytesTotal-this.bytesDone;t>0&&e>0&&(r=`, ~${zE(e/t*1e3)} left`)}return`hf: ${this.filesDone}/${this.filesTotal} files, ${n}, ${Vy(t)}/s${r}\n`}};function VE(e){let t=e;return typeof t.writeStdout==`function`?t.writeStdout.bind(t):void 0}async function HE(e,t,n,r){let i=RE(e);if(`error`in i)return FE(i.error);let a=pa(i.repo,i.to,t.cwd),{downloadHfRepo:o,HfFileDownloadError:s}=await import(`./hf-download-CNg2vD63.js`),c=VE(t),l=new BE(i.files.length,void 0,r),u=``;try{let e=await o({fetch:n.fetch,streamFetch:n.streamFetch,fs:t.fs,repo:i.repo,targetDir:a,files:i.files,revision:i.revision,force:i.force,concurrency:i.concurrency,maxBytesInFlight:i.maxInFlightMb===void 0?void 0:i.maxInFlightMb*1024*1024,signal:t.signal,endpoint:t.env.get(`HF_ENDPOINT`),progress:{onListed:({files:e,totalBytes:t})=>{l.listed(e.length,t);let n=`hf: ${e.length} file(s) listed in ${i.repo}@${i.revision}\n`;u+=n,c?.(n)},onFile:e=>{u+=e.status===`downloaded`?`hf: downloaded ${e.file} (${Vy(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 ${zE(l.elapsedMs())} (${Vy(l.rate())}/s)`:``,s=`hf: ${e.downloaded} downloaded, ${e.skipped} skipped, ${Vy(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}):FE(e instanceof Error?e.message:String(e))}}const UE=[`--to`,`--revision`,`--rev`,`--concurrency`,`-j`,`--max-in-flight-mb`];function WE(e){let t=e.now??Date.now;return{name:`hf`,async execute(n,r){if(n.length===0||T(n,{valueFlags:UE}))return PE(+(n.length===0));let i=n[0];return i===`download`?HE(n.slice(1),r,e,t):FE(`unknown subcommand: ${i}`)}}}const GE=new Set([`--vid`,`--pid`,`--usage-page`,`--usage`,`--__resolved`,`--timeout`]);function KE(e){return Vn(e,GE)}function qE(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 JE(e){let t={};return e.has(`--vid`)&&(t.vendorId=qE(e.get(`--vid`),`vid`)),e.has(`--pid`)&&(t.productId=qE(e.get(`--pid`),`pid`)),e.has(`--usage-page`)&&(t.usagePage=qE(e.get(`--usage-page`),`usage-page`)),e.has(`--usage`)&&(t.usage=qE(e.get(`--usage`),`usage`)),Object.keys(t).length>0?[t]:[]}function YE(e){let t=lr(e.stdin),n=new Uint8Array(t.length);for(let e=0;e<t.length;e++)n[e]=t.charCodeAt(e)&255;return n}function XE(e){return Array.from(e,e=>e.toString(16).padStart(2,`0`)).join(` `)}function ZE(e){return e.toString(16).padStart(2,`0`)}function QE(e){return`0x${e.toString(16).padStart(4,`0`)}`}function $E(e){let t=e.productName||`(unknown)`,n=e.opened?` [open]`:``,r=e.usagePage===void 0?``:`\t${QE(e.usagePage)}:${QE(e.usage??0)}`;return`${e.handle}\t${QE(e.vendorId)}:${QE(e.productId)}${r}\t${t}${n}`}function eD(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 tD(e){return`${e.map($E).join(`
1201
+ `)}\n`}function nD(e){return`${ZE(e.reportId)} ${XE(e.bytes)}`.trimEnd()}function rD(e){return{stdout:e,stderr:``,exitCode:0}}function W(e){return{stdout:``,stderr:`hid: ${e}\n`,exitCode:1}}const iD=`hid - access HID devices via WebHID
1202
1202
 
1203
1203
  Usage: hid <subcommand> [options]
1204
1204
 
@@ -1221,11 +1221,11 @@ Options:
1221
1221
  --timeout <ms> query: wait this long for an input report (default 1000)
1222
1222
  -h, --help
1223
1223
 
1224
- Report payloads are capped at ${li} bytes (4 MiB).
1225
- `;function oD(e,t){if(t){let t=``;for(let n=0;n<e.length;n++)t+=String.fromCharCode(e[n]);return iD(t)}return iD(e.length?`${ZE(e)}\n`:``)}function sD(e){return!e||e.aborted?Promise.resolve():new Promise(t=>{e.addEventListener(`abort`,()=>t(),{once:!0})})}async function cD(e){let t=await e.list();return t.length===0?iD(`no granted HID devices
1226
- `):iD(`${t.map(eD).join(`
1227
- `)}\n`)}async function lD(e,t){let n=e.get(`--__resolved`),r=YE(e),i=r[0];if(n){let e=n.split(`,`).filter(e=>e.length>0);return e.length===0?W(`request: missing resolved handle`):iD(nD(tD(await Promise.all(e.map(e=>t.info(e))),i)))}let a=Be();return a?uD(r,i,a,t):iD(nD(tD(await t.request(r),i)))}async function uD(e,t,n,r){let i=await Xx(`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=ci();if(!t)return W(`request: WebHID unavailable for device re-acquire`);let n=await t.getDevices(),r=ni(),s=n.filter(t=>t.vendorId===e.vendorId&&t.productId===e.productId);if(s.length===0)return W(`request: granted device could not be re-acquired`);for(let e of s)r.register(e);a=e.vendorId,o=e.productId}let s=(await r.list()).filter(e=>e.vendorId===a&&e.productId===o),c=tD(s.length>0?s:[],t);return c.length===0?W(`request: granted device could not be re-acquired`):iD(nD(c))}async function dD(e,t,n){let r=t[1];return r?(e===`open`?await n.open(r):await n.close(r),iD(``)):W(`${e}: handle required`)}async function fD(e,t,n,r){let[,i,a]=t;if(!i||a===void 0)return W(`${e}: handle and report-id required`);let o=JE(a,`report-id`),s=XE(n);return s.length>4194304?W(`${e} payload exceeds 4 MiB limit`):(e===`send`?await r.sendReport(i,o,s):await r.sendFeatureReport(i,o,s),iD(``))}async function pD(e,t,n){let[,r,i]=e;return!r||i===void 0?W(`feature-get: handle and report-id required`):oD((await t.receiveFeatureReport(r,JE(i,`report-id`))).bytes,n)}async function mD(e,t,n){let r=e[1];if(!r)return W(`watch: handle required`);let i=[],a=await n.subscribeInputReports(r,e=>{i.push(rD(e))});try{await sD(t.signal)}finally{await a()}return iD(i.length?`${i.join(`
1228
- `)}\n`:``)}async function hD(e,t,n,r,i){let[,a,o]=e;if(!a||o===void 0)return W(`query: handle and report-id required`);let s=JE(o,`report-id`),c=XE(t);if(c.length>4194304)return W(`query payload exceeds 4 MiB limit`);let l=n.has(`--timeout`)?JE(n.get(`--timeout`),`timeout`):1e3,u=()=>{},d=new Promise(e=>{u=e}),f=await r.subscribeInputReports(a,e=>{u(e)}),p;try{await r.sendReport(a,s,c);let e=new Promise(e=>{p=setTimeout(()=>e(`timeout`),l)}),t=await Promise.race([d,e]);return t===`timeout`?W(`query: no input report within ${l}ms`):i?oD(t.bytes,!0):iD(`${rD(t)}\n`)}finally{p!==void 0&&clearTimeout(p),await f()}}async function gD(e,t,n){let{positionals:r,flags:i,bools:a}=qE(e),o=r[0],s=a.has(`--raw`);switch(o){case`list`:return cD(n);case`request`:return lD(i,n);case`open`:case`close`:return dD(o,r,n);case`send`:case`feature-send`:return fD(o,r,t,n);case`feature-get`:return pD(r,n,s);case`watch`:return mD(r,t,n);case`query`:return hD(r,t,i,n,s);default:return W(`unknown subcommand '${o??``}'. Try 'hid --help'.`)}}function _D(){return C(`hid`,async(e,t)=>{if(e.length===0||e.includes(`--help`)||e.includes(`-h`))return iD(aD);let n=di(be(),b());if(!n)return W(`WebHID is unavailable in this environment`);try{return await gD(e,t,n)}catch(e){let t=e instanceof Error?e.message:String(e);return/cancelled|NotFoundError|No device selected/i.test(t)?W(`user cancelled or no device selected`):W(t)}})}const vD=1e3,yD=`usage: id [-u|-g|-G] [-n] [-r] [USER]`,bD=`${yD}
1224
+ Report payloads are capped at ${ui} bytes (4 MiB).
1225
+ `;function aD(e,t){if(t){let t=``;for(let n=0;n<e.length;n++)t+=String.fromCharCode(e[n]);return rD(t)}return rD(e.length?`${XE(e)}\n`:``)}function oD(e){return!e||e.aborted?Promise.resolve():new Promise(t=>{e.addEventListener(`abort`,()=>t(),{once:!0})})}async function sD(e){let t=await e.list();return t.length===0?rD(`no granted HID devices
1226
+ `):rD(`${t.map($E).join(`
1227
+ `)}\n`)}async function cD(e,t){let n=e.get(`--__resolved`),r=JE(e),i=r[0];if(n){let e=n.split(`,`).filter(e=>e.length>0);return e.length===0?W(`request: missing resolved handle`):rD(tD(eD(await Promise.all(e.map(e=>t.info(e))),i)))}let a=Ve();return a?lD(r,i,a,t):rD(tD(eD(await t.request(r),i)))}async function lD(e,t,n,r){let i=await Yx(`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=li();if(!t)return W(`request: WebHID unavailable for device re-acquire`);let n=await t.getDevices(),r=ri(),s=n.filter(t=>t.vendorId===e.vendorId&&t.productId===e.productId);if(s.length===0)return W(`request: granted device could not be re-acquired`);for(let e of s)r.register(e);a=e.vendorId,o=e.productId}let s=(await r.list()).filter(e=>e.vendorId===a&&e.productId===o),c=eD(s.length>0?s:[],t);return c.length===0?W(`request: granted device could not be re-acquired`):rD(tD(c))}async function uD(e,t,n){let r=t[1];return r?(e===`open`?await n.open(r):await n.close(r),rD(``)):W(`${e}: handle required`)}async function dD(e,t,n,r){let[,i,a]=t;if(!i||a===void 0)return W(`${e}: handle and report-id required`);let o=qE(a,`report-id`),s=YE(n);return s.length>4194304?W(`${e} payload exceeds 4 MiB limit`):(e===`send`?await r.sendReport(i,o,s):await r.sendFeatureReport(i,o,s),rD(``))}async function fD(e,t,n){let[,r,i]=e;return!r||i===void 0?W(`feature-get: handle and report-id required`):aD((await t.receiveFeatureReport(r,qE(i,`report-id`))).bytes,n)}async function pD(e,t,n){let r=e[1];if(!r)return W(`watch: handle required`);let i=[],a=await n.subscribeInputReports(r,e=>{i.push(nD(e))});try{await oD(t.signal)}finally{await a()}return rD(i.length?`${i.join(`
1228
+ `)}\n`:``)}async function mD(e,t,n,r,i){let[,a,o]=e;if(!a||o===void 0)return W(`query: handle and report-id required`);let s=qE(o,`report-id`),c=YE(t);if(c.length>4194304)return W(`query payload exceeds 4 MiB limit`);let l=n.has(`--timeout`)?qE(n.get(`--timeout`),`timeout`):1e3,u=()=>{},d=new Promise(e=>{u=e}),f=await r.subscribeInputReports(a,e=>{u(e)}),p;try{await r.sendReport(a,s,c);let e=new Promise(e=>{p=setTimeout(()=>e(`timeout`),l)}),t=await Promise.race([d,e]);return t===`timeout`?W(`query: no input report within ${l}ms`):i?aD(t.bytes,!0):rD(`${nD(t)}\n`)}finally{p!==void 0&&clearTimeout(p),await f()}}async function hD(e,t,n){let{positionals:r,flags:i,bools:a}=KE(e),o=r[0],s=a.has(`--raw`);switch(o){case`list`:return sD(n);case`request`:return cD(i,n);case`open`:case`close`:return uD(o,r,n);case`send`:case`feature-send`:return dD(o,r,t,n);case`feature-get`:return fD(r,n,s);case`watch`:return pD(r,t,n);case`query`:return mD(r,t,i,n,s);default:return W(`unknown subcommand '${o??``}'. Try 'hid --help'.`)}}function gD(){return C(`hid`,async(e,t)=>{if(e.length===0||e.includes(`--help`)||e.includes(`-h`))return rD(iD);let n=fi(be(),b());if(!n)return W(`WebHID is unavailable in this environment`);try{return await hD(e,t,n)}catch(e){let t=e instanceof Error?e.message:String(e);return/cancelled|NotFoundError|No device selected/i.test(t)?W(`user cancelled or no device selected`):W(t)}})}const _D=1e3,vD=`usage: id [-u|-g|-G] [-n] [-r] [USER]`,yD=`${vD}
1229
1229
 
1230
1230
  Print the user and group identity of this SLICC runtime.
1231
1231
 
@@ -1240,22 +1240,22 @@ Options:
1240
1240
  --version Print the SLICC build.
1241
1241
 
1242
1242
  Identity comes from the home directory, which is where the rest of the shell
1243
- gets it too. A cone is the human user (uid ${vD}, one per runtime, since every
1243
+ gets it too. A cone is the human user (uid ${_D}, one per runtime, since every
1244
1244
  cone shares one home); a scoop is a service identity whose uid is derived from
1245
1245
  its folder name, so it is stable across reloads and distinct per scoop.
1246
1246
  Every user is in a user-private group of the same name, plus the role group
1247
1247
  \`cone\` (10) or \`scoop\` (20).
1248
- `,xD=`/scoops/`;function SD(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 CD(e,t){return{name:e,uid:t===`cone`?vD:SD(e),role:t}}function wD(e){return[{gid:e.uid,name:e.name},e.role===`cone`?{gid:10,name:`cone`}:{gid:20,name:`scoop`}]}function TD(e,t){return`${e}(${t})`}function ED(e){let t=wD(e),n=t[0];return`uid=${TD(e.uid,e.name)} gid=${TD(n.gid,n.name)} groups=${t.map(e=>TD(e.gid,e.name)).join(`,`)}\n`}async function DD(e){let t=e.env.get(`HOME`)??``,n=t.startsWith(xD)?`scoop`:`cone`,r=e.env.get(`USER`)||OD(t,n);return r?CD(r,n):CD(um(await lm(kD(e.fs))),`cone`)}function OD(e,t){return e===``?``:t===`cone`?um(e):e.slice(8).split(`/`)[0]??``}function kD(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 AD(e,t){return await e.fs.exists(`/home/${t}`).catch(()=>!1)?CD(t,`cone`):await e.fs.exists(`${xD}${t}`).catch(()=>!1)?CD(t,`scoop`):null}function jD(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=ND[r];if(e){e(t);continue}if(r.length>1&&r.startsWith(`-`)){for(let e of r.slice(1)){let n=MD[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 MD={u:e=>{e.select=`user`},g:e=>{e.select=`group`},G:e=>{e.select=`groups`},n:e=>{e.names=!0},r:()=>void 0},ND={"--user":MD.u,"--group":MD.g,"--groups":MD.G,"--name":MD.n,"--real":MD.r};function PD(e,t){let n=wD(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 ED(e)}}function FD(){return C(`id`,async(e,t)=>{let n=jD(e);if(`error`in n)return{stdout:``,stderr:`id: ${n.error}\n${yD}\n`,exitCode:1};if(n.mode===`help`)return LD(bD);if(n.mode===`version`)return LD(`id (SLICC) ${ct().version}\n`);let r=n.operand===void 0?await DD(t):await AD(t,n.operand);return r?LD(PD(r,n)):{stdout:``,stderr:`id: '${n.operand}': no such user\n`,exitCode:1}})}function ID(){return C(`whoami`,async(e,t)=>LD(`${(await DD(t)).name}\n`))}function LD(e){return{stdout:e,stderr:``,exitCode:0}}function RD(){return{stdout:`imgcat - preview image and video files in the preview tab
1248
+ `,bD=`/scoops/`;function xD(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 SD(e,t){return{name:e,uid:t===`cone`?_D:xD(e),role:t}}function CD(e){return[{gid:e.uid,name:e.name},e.role===`cone`?{gid:10,name:`cone`}:{gid:20,name:`scoop`}]}function wD(e,t){return`${e}(${t})`}function TD(e){let t=CD(e),n=t[0];return`uid=${wD(e.uid,e.name)} gid=${wD(n.gid,n.name)} groups=${t.map(e=>wD(e.gid,e.name)).join(`,`)}\n`}async function ED(e){let t=e.env.get(`HOME`)??``,n=t.startsWith(bD)?`scoop`:`cone`,r=e.env.get(`USER`)||DD(t,n);return r?SD(r,n):SD(lm(await cm(OD(e.fs))),`cone`)}function DD(e,t){return e===``?``:t===`cone`?lm(e):e.slice(8).split(`/`)[0]??``}function OD(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 kD(e,t){return await e.fs.exists(`/home/${t}`).catch(()=>!1)?SD(t,`cone`):await e.fs.exists(`${bD}${t}`).catch(()=>!1)?SD(t,`scoop`):null}function AD(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=MD[r];if(e){e(t);continue}if(r.length>1&&r.startsWith(`-`)){for(let e of r.slice(1)){let n=jD[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 jD={u:e=>{e.select=`user`},g:e=>{e.select=`group`},G:e=>{e.select=`groups`},n:e=>{e.names=!0},r:()=>void 0},MD={"--user":jD.u,"--group":jD.g,"--groups":jD.G,"--name":jD.n,"--real":jD.r};function ND(e,t){let n=CD(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 TD(e)}}function PD(){return C(`id`,async(e,t)=>{let n=AD(e);if(`error`in n)return{stdout:``,stderr:`id: ${n.error}\n${vD}\n`,exitCode:1};if(n.mode===`help`)return ID(yD);if(n.mode===`version`)return ID(`id (SLICC) ${lt().version}\n`);let r=n.operand===void 0?await ED(t):await kD(t,n.operand);return r?ID(ND(r,n)):{stdout:``,stderr:`id: '${n.operand}': no such user\n`,exitCode:1}})}function FD(){return C(`whoami`,async(e,t)=>ID(`${(await ED(t)).name}\n`))}function ID(e){return{stdout:e,stderr:``,exitCode:0}}function LD(){return{stdout:`imgcat - preview image and video files in the preview tab
1249
1249
 
1250
1250
  Usage: imgcat <path> [path...]
1251
1251
 
1252
1252
  Options:
1253
1253
  -h, --help Show this help message
1254
- `,stderr:``,exitCode:0}}function zD(e={}){return C(`imgcat`,async(t,n)=>{if(t.length===0||T(t))return RD();let r=w(t);if(`error`in r)return{stdout:``,stderr:`imgcat: ${r.error}\n`,exitCode:1};if(r.positionals.length===0)return RD();if(!e.onMediaPreview)return{stdout:``,stderr:`imgcat: terminal preview is unavailable
1255
- `,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=Ie(t);if(!Fe(r))return{stdout:``,stderr:`imgcat: unsupported media type: ${e}\n`,exitCode:1};let a=await n.fs.readFileBuffer(t),o=new Uint8Array(a.byteLength);o.set(a),i.push({path:t,mimeType:r,bytes:o})}try{return await e.onMediaPreview(i),{stdout:``,stderr:``,exitCode:0}}catch(e){return{stdout:``,stderr:`imgcat: ${e instanceof Error?e.message:String(e)}\n`,exitCode:1}}})}const BD=new Set([`run`,`run-script`]),VD=new Set([`test`,`start`,`stop`,`restart`]),HD=new Set([` `,` `,`
1256
- `,`;`,`|`,`&`,`(`,`)`,`{`,`}`,`<`,`>`]),UD=new Set([`;`,`|`,`&`,`(`,`)`,`{`,`
1257
- `]),WD=/^[A-Za-z_][A-Za-z0-9_]*=/,GD=/^[@A-Za-z0-9._-]+$/,KD=new Set([`if`,`then`,`else`,`elif`,`fi`,`for`,`while`,`until`,`do`,`done`,`case`,`in`,`esac`,`function`,`time`,`!`]),qD=new Set([`if`,`then`,`else`,`elif`,`while`,`until`,`do`,`time`,`!`]),JD=new Set([`ipx`,`npx`]);function YD(e){return`'${e.replace(/'/g,`'\\''`)}'`}async function XD(e,t){let n=await e.readFile(t);return typeof n==`string`?n:new TextDecoder().decode(n)}function*ZD(e){let t=x(e);for(;yield t,t!==`/`;)t=We(t).dir}function QD(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 $D(e){return typeof e==`string`?e:void 0}async function eO(e,t){for(let n of ZD(t)){let t=S(n,`package.json`);if(!await e.exists(t))continue;let r;try{r=JSON.parse(await XD(e,t))}catch(e){throw Error(`${t} is not valid JSON: ${e instanceof Error?e.message:String(e)}`)}return{dir:n,name:$D(r.name),version:$D(r.version),scripts:QD(r.scripts)}}return null}function tO(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(HD.has(t))break;n++}return{start:t,end:n,text:e.slice(t,n)}}function nO(e){let t=[],n=0,r=!0;for(;n<e.length;){let i=e[n];if(i===` `||i===` `){n++;continue}if(UD.has(i)){r=!0,n++;continue}let a=tO(e,n);if(a.end===a.start){n++;continue}if(r&&!WD.test(a.text)){if(qD.has(a.text)){n=a.end;continue}t.push(a),r=!1}n=a.end}return t}function rO(e,t){return!GD.test(e)||KD.has(e)||JD.has(e)?!1:!t.isRegistered(e)}async function iO(e,t){let n=nO(e).filter(e=>rO(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 aO(e){let t=[];for(let n of ZD(e))t.push(S(n,`node_modules`,`.bin`));return t}function oO(e,t,n,r){let i=r.env.get(`PATH`)??``,a={PATH:[...aO(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 sO(e){return e.name===void 0?e.dir:e.version===void 0?e.name:`${e.name}@${e.version}`}function cO(e,t){let n=Object.entries(t.scripts);if(n.length===0)return`${e}: no scripts defined in ${S(t.dir,`package.json`)}\n`;let r=[`Scripts available in ${sO(t)} via \`${e} run\`:`];for(let[e,t]of n)r.push(` ${e}`),r.push(` ${t}`);return`${r.join(`
1258
- `)}\n`}function lO(e,t){return t===`--silent`||t===`-s`?(e.silent=!0,!0):t===`--if-present`&&(e.ifPresent=!0,!0)}function uO(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}lO(t,a)||(r===void 0?r=a:n.push(a))}return{flags:t,script:r,extraArgs:n}}function dO(e,t){return{stdout:``,stderr:`${e}: ${t}\n`,exitCode:1}}function fO(e,t,n,r){let i=r.length>0?` ${r.map(YD).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 pO(e,t,n,r){if(n===`start`&&await r.exists(S(t.dir,`server.js`)))return`node server.js`;if(n===`restart`)return`${e} stop --if-present && ${e} start`}function mO(e,t,n){let r=new Set(n.getRegisteredCommands?.()??[]);return{isRegistered:e=>r.has(e),hasLocalBin:async n=>{for(let r of aO(t.dir))if(await e.exists(S(r,n)))return!0;return!1}}}async function hO(e,t,n,r,i,a){let o=i.exec;if(!o)return dO(e,`run requires shell exec support, which this context does not provide`);let s=mO(a.fs,t,i),c=sO(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 iO(a.body,s),{cwd:t.dir,env:oO(t,a.event,a.body,i),stdin:cr(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 gO(e,t,n,r){let i;try{i=await eO(r.fs,n.cwd)}catch(t){return dO(e,t instanceof Error?t.message:String(t))}if(!i)return dO(e,`no package.json found in ${n.cwd} or any parent directory — nothing to run`);let{flags:a,script:o,extraArgs:s}=uO(t);if(o===void 0)return{stdout:cO(e,i),stderr:``,exitCode:0};let c=i.scripts[o]??await pO(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 dO(e,`missing script: ${o}${t.length>0?` (available: ${t.join(`, `)})`:` (${S(i.dir,`package.json`)} defines no scripts)`}`)}return hO(e,i,fO(i,o,c,s),a,n,r)}const _O=()=>import(`./installer-iQBJzSUD.js`),vO=new Set([`install`,`i`,`add`]),yO=new Set([`uninstall`,`remove`,`rm`,`un`]),bO=new Set([`list`,`ls`]),xO=new Set([`-g`,`--global`,`--location=global`]),SO=[`-g`,`--global`,`-D`,`--save-dev`];function CO(e){return`${e} - install packages from the npm registry into node_modules
1254
+ `,stderr:``,exitCode:0}}function RD(e={}){return C(`imgcat`,async(t,n)=>{if(t.length===0||T(t))return LD();let r=w(t);if(`error`in r)return{stdout:``,stderr:`imgcat: ${r.error}\n`,exitCode:1};if(r.positionals.length===0)return LD();if(!e.onMediaPreview)return{stdout:``,stderr:`imgcat: terminal preview is unavailable
1255
+ `,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=Le(t);if(!Ie(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 zD=new Set([`run`,`run-script`]),BD=new Set([`test`,`start`,`stop`,`restart`]),VD=new Set([` `,` `,`
1256
+ `,`;`,`|`,`&`,`(`,`)`,`{`,`}`,`<`,`>`]),HD=new Set([`;`,`|`,`&`,`(`,`)`,`{`,`
1257
+ `]),UD=/^[A-Za-z_][A-Za-z0-9_]*=/,WD=/^[@A-Za-z0-9._-]+$/,GD=new Set([`if`,`then`,`else`,`elif`,`fi`,`for`,`while`,`until`,`do`,`done`,`case`,`in`,`esac`,`function`,`time`,`!`]),KD=new Set([`if`,`then`,`else`,`elif`,`while`,`until`,`do`,`time`,`!`]),qD=new Set([`ipx`,`npx`]);function JD(e){return`'${e.replace(/'/g,`'\\''`)}'`}async function YD(e,t){let n=await e.readFile(t);return typeof n==`string`?n:new TextDecoder().decode(n)}function*XD(e){let t=x(e);for(;yield t,t!==`/`;)t=Ge(t).dir}function ZD(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 QD(e){return typeof e==`string`?e:void 0}async function $D(e,t){for(let n of XD(t)){let t=S(n,`package.json`);if(!await e.exists(t))continue;let r;try{r=JSON.parse(await YD(e,t))}catch(e){throw Error(`${t} is not valid JSON: ${e instanceof Error?e.message:String(e)}`)}return{dir:n,name:QD(r.name),version:QD(r.version),scripts:ZD(r.scripts)}}return null}function eO(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(VD.has(t))break;n++}return{start:t,end:n,text:e.slice(t,n)}}function tO(e){let t=[],n=0,r=!0;for(;n<e.length;){let i=e[n];if(i===` `||i===` `){n++;continue}if(HD.has(i)){r=!0,n++;continue}let a=eO(e,n);if(a.end===a.start){n++;continue}if(r&&!UD.test(a.text)){if(KD.has(a.text)){n=a.end;continue}t.push(a),r=!1}n=a.end}return t}function nO(e,t){return!WD.test(e)||GD.has(e)||qD.has(e)?!1:!t.isRegistered(e)}async function rO(e,t){let n=tO(e).filter(e=>nO(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 iO(e){let t=[];for(let n of XD(e))t.push(S(n,`node_modules`,`.bin`));return t}function aO(e,t,n,r){let i=r.env.get(`PATH`)??``,a={PATH:[...iO(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 oO(e){return e.name===void 0?e.dir:e.version===void 0?e.name:`${e.name}@${e.version}`}function sO(e,t){let n=Object.entries(t.scripts);if(n.length===0)return`${e}: no scripts defined in ${S(t.dir,`package.json`)}\n`;let r=[`Scripts available in ${oO(t)} via \`${e} run\`:`];for(let[e,t]of n)r.push(` ${e}`),r.push(` ${t}`);return`${r.join(`
1258
+ `)}\n`}function cO(e,t){return t===`--silent`||t===`-s`?(e.silent=!0,!0):t===`--if-present`&&(e.ifPresent=!0,!0)}function lO(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}cO(t,a)||(r===void 0?r=a:n.push(a))}return{flags:t,script:r,extraArgs:n}}function uO(e,t){return{stdout:``,stderr:`${e}: ${t}\n`,exitCode:1}}function dO(e,t,n,r){let i=r.length>0?` ${r.map(JD).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 fO(e,t,n,r){if(n===`start`&&await r.exists(S(t.dir,`server.js`)))return`node server.js`;if(n===`restart`)return`${e} stop --if-present && ${e} start`}function pO(e,t,n){let r=new Set(n.getRegisteredCommands?.()??[]);return{isRegistered:e=>r.has(e),hasLocalBin:async n=>{for(let r of iO(t.dir))if(await e.exists(S(r,n)))return!0;return!1}}}async function mO(e,t,n,r,i,a){let o=i.exec;if(!o)return uO(e,`run requires shell exec support, which this context does not provide`);let s=pO(a.fs,t,i),c=oO(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 rO(a.body,s),{cwd:t.dir,env:aO(t,a.event,a.body,i),stdin:lr(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 hO(e,t,n,r){let i;try{i=await $D(r.fs,n.cwd)}catch(t){return uO(e,t instanceof Error?t.message:String(t))}if(!i)return uO(e,`no package.json found in ${n.cwd} or any parent directory — nothing to run`);let{flags:a,script:o,extraArgs:s}=lO(t);if(o===void 0)return{stdout:sO(e,i),stderr:``,exitCode:0};let c=i.scripts[o]??await fO(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 uO(e,`missing script: ${o}${t.length>0?` (available: ${t.join(`, `)})`:` (${S(i.dir,`package.json`)} defines no scripts)`}`)}return mO(e,i,dO(i,o,c,s),a,n,r)}const gO=()=>import(`./installer-iQBJzSUD.js`),_O=new Set([`install`,`i`,`add`]),vO=new Set([`uninstall`,`remove`,`rm`,`un`]),yO=new Set([`list`,`ls`]),bO=new Set([`-g`,`--global`,`--location=global`]),xO=[`-g`,`--global`,`-D`,`--save-dev`];function SO(e){return`${e} - install packages from the npm registry into node_modules
1259
1259
  and run package.json scripts; also install conda/emscripten-forge
1260
1260
  packages via '${e} mamba'
1261
1261
 
@@ -1331,15 +1331,15 @@ manifest without rewriting it. With -g, packages go to /shared/lib/node_modules
1331
1331
  and deps are recorded in /shared/lib/package.json. Existing fields are
1332
1332
  preserved. Idempotent: re-installing an already-satisfied package is a clean
1333
1333
  no-op.
1334
- `}function wO(e){let t=w(e,{bool:SO,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 TO(e){let t=!1,n=[];for(let r of e){if(xO.has(r)){t=!0;continue}r.startsWith(`-`)||n.push(r)}return{global:t,specs:n}}function EO(e){return T(e)}function DO(e){return e instanceof Error?e.message:String(e)}async function OO(e){e.scriptCatalog?.invalidateJsh(),await e.syncScriptCommands?.()}function kO(e,t){let n=e===`i`;return C(e,async(r,i)=>{if(n)return EO(r)?{stdout:CO(e),stderr:``,exitCode:0}:jO(e,r,i,t);if(r[0]===`mamba`){let{runIpkMamba:n}=await import(`./ipk-mamba-CRjKH0VV.js`);return n(e,r.slice(1),i,t)}if(EO(r))return{stdout:CO(e),stderr:``,exitCode:0};if(r.length===0)return{stdout:CO(e),stderr:`${e}: missing subcommand\n`,exitCode:1};let a=r[0],o=r.slice(1);return vO.has(a)?jO(e,o,i,t):yO.has(a)?NO(e,o,i,t):bO.has(a)?PO(e,o,i,t):a===`root`?FO(e,o,i,t):BD.has(a)?gO(e,o,i,{fs:t.fs}):VD.has(a)?gO(e,r,i,{fs:t.fs}):{stdout:``,stderr:`${e}: unknown subcommand '${a}' (supported: install, uninstall, list, root, run, mamba)\n`,exitCode:1}})}async function AO(e,t,n){let{installFromManifest:r,ManifestNotFoundError:i}=await _O(),a;try{a=await r({fs:n.fs,fetch:n.fetch,cwd:t.cwd})}catch(t){return t instanceof i?{stdout:``,stderr:`${e}: ${t.message}\n`,exitCode:1}:{stdout:``,stderr:`${e}: install failed: ${DO(t)}\n`,exitCode:1}}if(a.empty&&a.errors.length===0)return{stdout:`${e}: nothing to install (package.json declares no dependencies)\n`,stderr:``,exitCode:0};let o=a.results.map(t=>`${e}: installed ${t.name}@${t.version} -> ${t.installPath}`),s=[...(a.notes??[]).map(t=>`${e}: ${t}`),...a.errors.map(t=>`${e}: failed to install ${t.spec}: ${DO(t.error)}`)];return{stdout:o.length>0?`${o.join(`
1334
+ `}function CO(e){let t=w(e,{bool:xO,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 wO(e){let t=!1,n=[];for(let r of e){if(bO.has(r)){t=!0;continue}r.startsWith(`-`)||n.push(r)}return{global:t,specs:n}}function TO(e){return T(e)}function EO(e){return e instanceof Error?e.message:String(e)}async function DO(e){e.scriptCatalog?.invalidateJsh(),await e.syncScriptCommands?.()}function OO(e,t){let n=e===`i`;return C(e,async(r,i)=>{if(n)return TO(r)?{stdout:SO(e),stderr:``,exitCode:0}:AO(e,r,i,t);if(r[0]===`mamba`){let{runIpkMamba:n}=await import(`./ipk-mamba-CRjKH0VV.js`);return n(e,r.slice(1),i,t)}if(TO(r))return{stdout:SO(e),stderr:``,exitCode:0};if(r.length===0)return{stdout:SO(e),stderr:`${e}: missing subcommand\n`,exitCode:1};let a=r[0],o=r.slice(1);return _O.has(a)?AO(e,o,i,t):vO.has(a)?MO(e,o,i,t):yO.has(a)?NO(e,o,i,t):a===`root`?PO(e,o,i,t):zD.has(a)?hO(e,o,i,{fs:t.fs}):BD.has(a)?hO(e,r,i,{fs:t.fs}):{stdout:``,stderr:`${e}: unknown subcommand '${a}' (supported: install, uninstall, list, root, run, mamba)\n`,exitCode:1}})}async function kO(e,t,n){let{installFromManifest:r,ManifestNotFoundError:i}=await gO(),a;try{a=await r({fs:n.fs,fetch:n.fetch,cwd:t.cwd})}catch(t){return t instanceof i?{stdout:``,stderr:`${e}: ${t.message}\n`,exitCode:1}:{stdout:``,stderr:`${e}: install failed: ${EO(t)}\n`,exitCode:1}}if(a.empty&&a.errors.length===0)return{stdout:`${e}: nothing to install (package.json declares no dependencies)\n`,stderr:``,exitCode:0};let o=a.results.map(t=>`${e}: installed ${t.name}@${t.version} -> ${t.installPath}`),s=[...(a.notes??[]).map(t=>`${e}: ${t}`),...a.errors.map(t=>`${e}: failed to install ${t.spec}: ${EO(t.error)}`)];return{stdout:o.length>0?`${o.join(`
1335
1335
  `)}\n`:``,stderr:s.length>0?`${s.join(`
1336
- `)}\n`:``,exitCode:a.errors.length===0?0:1}}async function jO(e,t,n,r){let i=wO(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 AO(e,n,r);let{installPackages:c}=await _O(),l;try{l=await c(s,{fs:r.fs,fetch:r.fetch,cwd:n.cwd,global:a,saveDev:o})}catch(t){return{stdout:``,stderr:`${e}: install failed: ${DO(t)}\n`,exitCode:1}}let u=l.results.map(t=>`${e}: installed ${t.name}@${t.version} -> ${t.installPath}`),d=[...(l.notes??[]).map(t=>`${e}: ${t}`),...l.errors.map(t=>`${e}: failed to install ${t.spec}: ${DO(t.error)}`)];return a&&l.results.length>0&&await OO(r),{stdout:u.length>0?`${u.join(`
1336
+ `)}\n`:``,exitCode:a.errors.length===0?0:1}}async function AO(e,t,n,r){let i=CO(t);if(`error`in i)return{stdout:``,stderr:`${e}: ${i.error}\n`,exitCode:1};let{global:a,saveDev:o,specs:s}=i;if(a&&s.length===0)return{stdout:``,stderr:`${e}: global install requires at least one package name\n`,exitCode:1};if(s.length===0)return kO(e,n,r);let{installPackages:c}=await gO(),l;try{l=await c(s,{fs:r.fs,fetch:r.fetch,cwd:n.cwd,global:a,saveDev:o})}catch(t){return{stdout:``,stderr:`${e}: install failed: ${EO(t)}\n`,exitCode:1}}let u=l.results.map(t=>`${e}: installed ${t.name}@${t.version} -> ${t.installPath}`),d=[...(l.notes??[]).map(t=>`${e}: ${t}`),...l.errors.map(t=>`${e}: failed to install ${t.spec}: ${EO(t.error)}`)];return a&&l.results.length>0&&await DO(r),{stdout:u.length>0?`${u.join(`
1337
1337
  `)}\n`:``,stderr:d.length>0?`${d.join(`
1338
- `)}\n`:``,exitCode:l.errors.length===0?0:1}}function MO(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(`
1339
- `)}\n`}async function NO(e,t,n,r){let{global:i,specs:a}=TO(t);if(a.length===0)return{stdout:``,stderr:`${e}: uninstall requires at least one package name\n`,exitCode:1};let{uninstallPackages:o}=await _O(),s;try{s=await o(a,{fs:r.fs,fetch:r.fetch,cwd:n.cwd,global:i})}catch(t){return{stdout:``,stderr:`${e}: uninstall failed: ${DO(t)}\n`,exitCode:1}}let c=s.results.filter(e=>e.removed).map(t=>`${e}: removed ${t.name}`),l=s.results.filter(e=>!e.removed).map(e=>e.name),u=s.errors.map(t=>`${e}: failed to uninstall ${t.spec}: ${DO(t.error)}`);l.length>0&&u.push(`${e}: ${l.join(`, `)} not installed${i?` globally`:``}`);let d=s.errors.length>0;return i&&await OO(r),{stdout:c.length>0?`${c.join(`
1338
+ `)}\n`:``,exitCode:l.errors.length===0?0:1}}function jO(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(`
1339
+ `)}\n`}async function MO(e,t,n,r){let{global:i,specs:a}=wO(t);if(a.length===0)return{stdout:``,stderr:`${e}: uninstall requires at least one package name\n`,exitCode:1};let{uninstallPackages:o}=await gO(),s;try{s=await o(a,{fs:r.fs,fetch:r.fetch,cwd:n.cwd,global:i})}catch(t){return{stdout:``,stderr:`${e}: uninstall failed: ${EO(t)}\n`,exitCode:1}}let c=s.results.filter(e=>e.removed).map(t=>`${e}: removed ${t.name}`),l=s.results.filter(e=>!e.removed).map(e=>e.name),u=s.errors.map(t=>`${e}: failed to uninstall ${t.spec}: ${EO(t.error)}`);l.length>0&&u.push(`${e}: ${l.join(`, `)} not installed${i?` globally`:``}`);let d=s.errors.length>0;return i&&await DO(r),{stdout:c.length>0?`${c.join(`
1340
1340
  `)}\n`:``,stderr:u.length>0?`${u.join(`
1341
- `)}\n`:``,exitCode:+!!d}}async function PO(e,t,n,r){let{global:i}=TO(t);try{let{listGlobalPackages:e,listLocalPackages:t}=await _O(),a=i?await e(r.fs):await t(r.fs,n.cwd);return{stdout:MO(i?mr:n.cwd,a),stderr:``,exitCode:0}}catch(t){return{stdout:``,stderr:`${e}: list failed: ${DO(t)}\n`,exitCode:1}}}async function FO(e,t,n,r){let{global:i}=TO(t);return{stdout:`${i?hr:`${n.cwd.replace(/\/$/,``)}/node_modules`}\n`,stderr:``,exitCode:0}}const IO=`0.5.462`,LO=`v86 is not installed in node_modules: run \`${F} v86@${IO}\` (no network fallback)`;let RO=null;async function zO(e={}){return RO||=UO(e.ipk).catch(e=>{throw RO=null,e}),RO}const BO=[{js:`build/libv86.mjs`,wasm:`build/v86.wasm`}];async function VO(e,t){for(let{js:n,wasm:r}of BO){let i=`${e}/${n}`,a=`${e}/${r}`;if(await t.exists(i)&&await t.exists(a))return{jsPath:i,wasmPath:a}}return null}async function HO(e){let t;try{t=await Sr(`v86/package.json`,e.fromDir,e.reader)}catch{return null}if(t.type!==`file`)return null;let n=await VO(We(t.path).dir,e.reader);if(!n)return null;try{let r=await e.reader.readFile(t.path),i=String(JSON.parse(r).version??`0.5.462`);return{jsSource:await e.reader.readFile(n.jsPath),wasmBytes:await e.readBytes(n.wasmPath),version:i}}catch{return null}}async function UO(e){if(Pr())throw Error(`v86 is not available in Node runtime`);if(!e)throw Error(LO);let t=await HO(e);if(!t)throw Error(LO);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 Si(t.wasmBytes),version:t.version}}function WO(e){return async t=>(await WebAssembly.instantiate(e,t)).exports}const GO={command:`biome`,example:`biome check foo.js`,bootstrap:`${F} ${W_}`},KO={command:`playwright-cli`,example:`playwright-cli open https://example.com`},qO={command:`puppeteer`,example:`puppeteer open https://example.com`},JO={command:`convert`,example:`convert input.png output.jpg`,bootstrap:`${F} @imagemagick/magick-wasm@${ra}`},YO={...JO,command:`magick`,example:`magick input.png output.jpg`},XO={command:`pdftoppm`,example:`pdftoppm -png -r 150 doc.pdf page`},ZO={"@biomejs/biome":GO,biome:GO,esbuild:{command:`esbuild`,example:`esbuild --bundle src/index.js --outfile=dist/bundle.js`,bootstrap:`${F} esbuild-wasm@${xi}`},playwright:KO,"@playwright/test":KO,"playwright-core":KO,puppeteer:qO,"puppeteer-core":qO,typescript:{command:`tsc`,example:`tsc --noEmit`,bootstrap:Fr},"pdf-poppler":XO,"pdf-to-img":XO,pdf2pic:XO,"pdf-img-convert":XO,poppler:XO,"poppler-utils":XO,imagemagick:JO,"imagemagick-cli":JO,"imagemagick-convert":JO,"magick-cli":YO,"@imagemagick/magick-wasm":YO,ffmpeg:{command:`ffmpeg`,example:`ffmpeg -i input.mp4 output.webm`,bootstrap:`${F} @ffmpeg/core@${ma}`},"@ffmpeg/ffmpeg":{command:`ffmpeg`,example:`ffmpeg -i input.mp4 output.webm`,bootstrap:`${F} @ffmpeg/core@${ma}`},ffprobe:{command:`ffprobe`,example:`ffprobe -v error -show_format -of json input.mp4`,bootstrap:`${F} @ffmpeg/core@${ma}`},"@ffprobe-installer/ffprobe":{command:`ffprobe`,example:`ffprobe -v error -show_format -of json input.mp4`,bootstrap:`${F} @ffmpeg/core@${ma}`},sqlite3:{command:`sqlite3`,example:`sqlite3 database.db "SELECT 1"`},v86:{command:`v86`,example:`v86 start -cdrom alpine.iso`,bootstrap:`${F} v86@${IO}`}};function QO(e){return Object.hasOwn(ZO,e)?ZO[e]:void 0}function $O(e){return/^[A-Za-z0-9_./:=@%+-]+$/.test(e)?e:`'${e.replace(/'/g,`'\\''`)}'`}function ek(e,t,n,r){let i=n.length?[r.command,...n].map($O).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($O).join(` `)}`),`${a.join(`
1342
- `)}\n`}const tk=/require\(\s*["']([^"']+)["']\s*\)/;function nk(e){return`${e} - run an installed package's executable bin
1341
+ `)}\n`:``,exitCode:+!!d}}async function NO(e,t,n,r){let{global:i}=wO(t);try{let{listGlobalPackages:e,listLocalPackages:t}=await gO(),a=i?await e(r.fs):await t(r.fs,n.cwd);return{stdout:jO(i?hr:n.cwd,a),stderr:``,exitCode:0}}catch(t){return{stdout:``,stderr:`${e}: list failed: ${EO(t)}\n`,exitCode:1}}}async function PO(e,t,n,r){let{global:i}=wO(t);return{stdout:`${i?gr:`${n.cwd.replace(/\/$/,``)}/node_modules`}\n`,stderr:``,exitCode:0}}const FO=`0.5.462`,IO=`v86 is not installed in node_modules: run \`${F} v86@${FO}\` (no network fallback)`;let LO=null;async function RO(e={}){return LO||=HO(e.ipk).catch(e=>{throw LO=null,e}),LO}const zO=[{js:`build/libv86.mjs`,wasm:`build/v86.wasm`}];async function BO(e,t){for(let{js:n,wasm:r}of zO){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 VO(e){let t;try{t=await Cr(`v86/package.json`,e.fromDir,e.reader)}catch{return null}if(t.type!==`file`)return null;let n=await BO(Ge(t.path).dir,e.reader);if(!n)return null;try{let r=await e.reader.readFile(t.path),i=String(JSON.parse(r).version??`0.5.462`);return{jsSource:await e.reader.readFile(n.jsPath),wasmBytes:await e.readBytes(n.wasmPath),version:i}}catch{return null}}async function HO(e){if(Fr())throw Error(`v86 is not available in Node runtime`);if(!e)throw Error(IO);let t=await VO(e);if(!t)throw Error(IO);let n=URL.createObjectURL(new Blob([t.jsSource],{type:`text/javascript`})),r;try{r=await import(n)}finally{URL.revokeObjectURL(n)}let i=r.V86??r.default;if(typeof i!=`function`)throw Error(`v86: installed package did not export a V86 constructor`);return{V86:i,wasmModule:await Ci(t.wasmBytes),version:t.version}}function UO(e){return async t=>(await WebAssembly.instantiate(e,t)).exports}const WO={command:`biome`,example:`biome check foo.js`,bootstrap:`${F} ${U_}`},GO={command:`playwright-cli`,example:`playwright-cli open https://example.com`},KO={command:`puppeteer`,example:`puppeteer open https://example.com`},qO={command:`convert`,example:`convert input.png output.jpg`,bootstrap:`${F} @imagemagick/magick-wasm@${ia}`},JO={...qO,command:`magick`,example:`magick input.png output.jpg`},YO={command:`pdftoppm`,example:`pdftoppm -png -r 150 doc.pdf page`},XO={"@biomejs/biome":WO,biome:WO,esbuild:{command:`esbuild`,example:`esbuild --bundle src/index.js --outfile=dist/bundle.js`,bootstrap:`${F} esbuild-wasm@${Si}`},playwright:GO,"@playwright/test":GO,"playwright-core":GO,puppeteer:KO,"puppeteer-core":KO,typescript:{command:`tsc`,example:`tsc --noEmit`,bootstrap:Ir},"pdf-poppler":YO,"pdf-to-img":YO,pdf2pic:YO,"pdf-img-convert":YO,poppler:YO,"poppler-utils":YO,imagemagick:qO,"imagemagick-cli":qO,"imagemagick-convert":qO,"magick-cli":JO,"@imagemagick/magick-wasm":JO,ffmpeg:{command:`ffmpeg`,example:`ffmpeg -i input.mp4 output.webm`,bootstrap:`${F} @ffmpeg/core@${ha}`},"@ffmpeg/ffmpeg":{command:`ffmpeg`,example:`ffmpeg -i input.mp4 output.webm`,bootstrap:`${F} @ffmpeg/core@${ha}`},ffprobe:{command:`ffprobe`,example:`ffprobe -v error -show_format -of json input.mp4`,bootstrap:`${F} @ffmpeg/core@${ha}`},"@ffprobe-installer/ffprobe":{command:`ffprobe`,example:`ffprobe -v error -show_format -of json input.mp4`,bootstrap:`${F} @ffmpeg/core@${ha}`},sqlite3:{command:`sqlite3`,example:`sqlite3 database.db "SELECT 1"`},v86:{command:`v86`,example:`v86 start -cdrom alpine.iso`,bootstrap:`${F} v86@${FO}`}};function ZO(e){return Object.hasOwn(XO,e)?XO[e]:void 0}function QO(e){return/^[A-Za-z0-9_./:=@%+-]+$/.test(e)?e:`'${e.replace(/'/g,`'\\''`)}'`}function $O(e,t,n,r){let i=n.length?[r.command,...n].map(QO).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(QO).join(` `)}`),`${a.join(`
1342
+ `)}\n`}const ek=/require\(\s*["']([^"']+)["']\s*\)/;function tk(e){return`${e} - run an installed package's executable bin
1343
1343
 
1344
1344
  Usage:
1345
1345
  ${e} [--force] [--global] <pkg-or-bin> [args...]
@@ -1352,12 +1352,12 @@ Options:
1352
1352
  --force Install a package even when a SLICC built-in shadows it
1353
1353
  --global Resolve only from the shared global prefix (/shared/lib/node_modules)
1354
1354
  -h, --help Show this help message
1355
- `}async function rk(e,t){let n=await e.readFile(t);return typeof n==`string`?n:new TextDecoder().decode(n)}async function ik(e,t){try{return(await e.stat(t)).type===`file`}catch{return!1}}async function ak(e,t){try{return(await e.stat(t)).type===`directory`}catch{return!1}}function*ok(e,t=!1){if(t){yield hr;return}let n=x(e);for(;yield S(n,`node_modules`),n!==`/`;)n=We(n).dir;yield hr}async function sk(e,t,n,r=!1){for(let i of ok(t,r)){let t=S(i,`.bin`,n);if(!await ik(e,t))continue;let r=await rk(e,t),a=tk.exec(r),o=We(t).dir;return{binFilePath:a?S(o,a[1]):t,argvName:t}}return null}function ck(e){if(e.startsWith(`@`)){let t=e.indexOf(`/`);if(t!==-1)return e.slice(t+1)}return e}function lk(e,t){if(typeof e==`string`)return{binName:ck(t),binPath:e};if(typeof e!=`object`||!e)return null;let n=[t,ck(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 uk(e,t,n,r=!1){for(let i of ok(t,r)){let t=S(i,n),r=S(t,`package.json`);if(!await ik(e,r))continue;let a;try{a=JSON.parse(await rk(e,r))}catch{return null}let o=lk(a.bin,n);if(!o)return null;let s=o.binPath.replace(/^\.\//,``);return{binFilePath:S(t,s),argvName:S(i,`.bin`,o.binName)}}return null}async function dk(e,t,n,r=!1){return await sk(e,t,n,r)??await uk(e,t,n,r)}async function fk(e,t,n){for(let r of ok(t))if(await ik(e,S(r,n,`package.json`)))return!0;return!1}function pk(e){return e instanceof Error?e.message:String(e)}function mk(e,t){return{stdout:``,stderr:`${e}: ${t}\n`,exitCode:1}}async function hk(e,t,n,r){try{let{installPackages:i}=await import(`./installer-iQBJzSUD.js`),a=await i([t],{fs:r.fs,fetch:r.fetch,cwd:n.cwd});if(a.errors.length>0)return{error:mk(e,`failed to install '${t}': ${pk(a.errors[0].error)}`)};let o=a.results.map(t=>`${e}: installed ${t.name}@${t.version}`);return{progress:o.length>0?`${o.join(`
1356
- `)}\n`:``}}catch(n){return{error:mk(e,`failed to install '${t}': ${pk(n)}`)}}}async function gk(e,t,n,r){return await ik(r,n)?null:await ak(r,n)?mk(e,`bin target '${n}' is a directory, not a file`):mk(e,`bin file '${n}' for '${t}' does not exist`)}async function _k(e,t,n,r,i,a){if(await fk(a.fs,i.cwd,t))return{error:mk(e,`package '${t}' does not expose an executable bin`)};let o=r?void 0:QO(t);if(o)return{error:{stdout:``,stderr:ek(e,t,n,o),exitCode:1}};let s=await hk(e,t,i,a);if(`error`in s)return s;let c=await dk(a.fs,i.cwd,t);return c?{resolved:c,installProgress:s.progress}:{error:mk(e,`package '${t}' was installed but does not expose an executable bin`)}}function vk(e,t){return{name:e,trusted:!0,async execute(n,r){if(n.length===0||n[0]===`--help`||n[0]===`-h`)return{stdout:nk(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:nk(e),stderr:``,exitCode:1};let c=s[0],l=s.slice(1),u;try{u=await dk(t.fs,r.cwd,c,o)}catch(t){return mk(e,pk(t))}let d=``;if(!u){if(o)return mk(e,`no global bin '${c}' found in ${hr}`);let n=await _k(e,c,l,i,r,t);if(`error`in n)return n.error;u=n.resolved,d=n.installProgress}let f=await gk(e,c,u.binFilePath,t.fs);if(f)return f;let p=_i(await rk(t.fs,u.binFilePath)),m=[`node`,u.argvName,...l],h=await hi(p,m,r,void 0,{filename:u.binFilePath});return{stdout:h.stdout,stderr:d+h.stderr,exitCode:h.exitCode}}}}function yk(e={}){return C(`jshd`,async(t,n)=>{let{runJshd:r}=await import(`./run-C3Hy4SBY.js`);return r(t,n,e)})}const bk=new Set([`SIGINT`,`SIGTERM`,`SIGKILL`,`SIGSTOP`,`SIGCONT`]);function xk(e={}){return C(`kill`,async t=>{if(t.length===0||t.includes(`--help`)||t.includes(`-h`))return Dk();let n=e.processManager??Sk();if(!n)return{stdout:``,stderr:`kill: no process manager available in this runtime
1357
- `,exitCode:1};let r=Ck(t);if(!r.ok)return{stdout:``,stderr:r.stderr,exitCode:r.exitCode};let{allDelivered:i,errors:a}=wk(n,r.pids,r.signal);return{stdout:``,stderr:a.length?`${a.join(`
1358
- `)}\n`:``,exitCode:+!i}})}function Sk(){let e=globalThis.__slicc_pm;return e instanceof Object&&typeof e.signal==`function`?e:null}function Ck(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
1359
- `,exitCode:2};let i=Tk(n);if(i instanceof Error)return{ok:!1,stderr:`kill: ${i.message}\n`,exitCode:2};t=i;continue}if(i.startsWith(`-`)){let e=Ek(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
1360
- `,exitCode:2}:bk.has(t)?{ok:!0,signal:t,pids:n}:{ok:!1,stderr:`kill: signal ${t} not supported\n`,exitCode:2}}function wk(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 Tk(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 Ek(e){return e===`-9`?`SIGKILL`:Tk(e.slice(1))}function Dk(){return{stdout:`Usage: kill [-s SIGNAL | -INT | -TERM | -KILL | -STOP | -CONT | -9] PID [PID …]
1355
+ `}async function nk(e,t){let n=await e.readFile(t);return typeof n==`string`?n:new TextDecoder().decode(n)}async function rk(e,t){try{return(await e.stat(t)).type===`file`}catch{return!1}}async function ik(e,t){try{return(await e.stat(t)).type===`directory`}catch{return!1}}function*ak(e,t=!1){if(t){yield gr;return}let n=x(e);for(;yield S(n,`node_modules`),n!==`/`;)n=Ge(n).dir;yield gr}async function ok(e,t,n,r=!1){for(let i of ak(t,r)){let t=S(i,`.bin`,n);if(!await rk(e,t))continue;let r=await nk(e,t),a=ek.exec(r),o=Ge(t).dir;return{binFilePath:a?S(o,a[1]):t,argvName:t}}return null}function sk(e){if(e.startsWith(`@`)){let t=e.indexOf(`/`);if(t!==-1)return e.slice(t+1)}return e}function ck(e,t){if(typeof e==`string`)return{binName:sk(t),binPath:e};if(typeof e!=`object`||!e)return null;let n=[t,sk(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 lk(e,t,n,r=!1){for(let i of ak(t,r)){let t=S(i,n),r=S(t,`package.json`);if(!await rk(e,r))continue;let a;try{a=JSON.parse(await nk(e,r))}catch{return null}let o=ck(a.bin,n);if(!o)return null;let s=o.binPath.replace(/^\.\//,``);return{binFilePath:S(t,s),argvName:S(i,`.bin`,o.binName)}}return null}async function uk(e,t,n,r=!1){return await ok(e,t,n,r)??await lk(e,t,n,r)}async function dk(e,t,n){for(let r of ak(t))if(await rk(e,S(r,n,`package.json`)))return!0;return!1}function fk(e){return e instanceof Error?e.message:String(e)}function pk(e,t){return{stdout:``,stderr:`${e}: ${t}\n`,exitCode:1}}async function mk(e,t,n,r){try{let{installPackages:i}=await import(`./installer-iQBJzSUD.js`),a=await i([t],{fs:r.fs,fetch:r.fetch,cwd:n.cwd});if(a.errors.length>0)return{error:pk(e,`failed to install '${t}': ${fk(a.errors[0].error)}`)};let o=a.results.map(t=>`${e}: installed ${t.name}@${t.version}`);return{progress:o.length>0?`${o.join(`
1356
+ `)}\n`:``}}catch(n){return{error:pk(e,`failed to install '${t}': ${fk(n)}`)}}}async function hk(e,t,n,r){return await rk(r,n)?null:await ik(r,n)?pk(e,`bin target '${n}' is a directory, not a file`):pk(e,`bin file '${n}' for '${t}' does not exist`)}async function gk(e,t,n,r,i,a){if(await dk(a.fs,i.cwd,t))return{error:pk(e,`package '${t}' does not expose an executable bin`)};let o=r?void 0:ZO(t);if(o)return{error:{stdout:``,stderr:$O(e,t,n,o),exitCode:1}};let s=await mk(e,t,i,a);if(`error`in s)return s;let c=await uk(a.fs,i.cwd,t);return c?{resolved:c,installProgress:s.progress}:{error:pk(e,`package '${t}' was installed but does not expose an executable bin`)}}function _k(e,t){return{name:e,trusted:!0,async execute(n,r){if(n.length===0||n[0]===`--help`||n[0]===`-h`)return{stdout:tk(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:tk(e),stderr:``,exitCode:1};let c=s[0],l=s.slice(1),u;try{u=await uk(t.fs,r.cwd,c,o)}catch(t){return pk(e,fk(t))}let d=``;if(!u){if(o)return pk(e,`no global bin '${c}' found in ${gr}`);let n=await gk(e,c,l,i,r,t);if(`error`in n)return n.error;u=n.resolved,d=n.installProgress}let f=await hk(e,c,u.binFilePath,t.fs);if(f)return f;let p=vi(await nk(t.fs,u.binFilePath)),m=[`node`,u.argvName,...l],h=await gi(p,m,r,void 0,{filename:u.binFilePath});return{stdout:h.stdout,stderr:d+h.stderr,exitCode:h.exitCode}}}}function vk(e={}){return C(`jshd`,async(t,n)=>{let{runJshd:r}=await import(`./run-D1iXNNpZ.js`);return r(t,n,e)})}const yk=new Set([`SIGINT`,`SIGTERM`,`SIGKILL`,`SIGSTOP`,`SIGCONT`]);function bk(e={}){return C(`kill`,async t=>{if(t.length===0||t.includes(`--help`)||t.includes(`-h`))return Ek();let n=e.processManager??xk();if(!n)return{stdout:``,stderr:`kill: no process manager available in this runtime
1357
+ `,exitCode:1};let r=Sk(t);if(!r.ok)return{stdout:``,stderr:r.stderr,exitCode:r.exitCode};let{allDelivered:i,errors:a}=Ck(n,r.pids,r.signal);return{stdout:``,stderr:a.length?`${a.join(`
1358
+ `)}\n`:``,exitCode:+!i}})}function xk(){let e=globalThis.__slicc_pm;return e instanceof Object&&typeof e.signal==`function`?e:null}function Sk(e){let t=`SIGTERM`,n=[];for(let r=0;r<e.length;r++){let i=e[r];if(i===`-s`||i===`--signal`){let n=e[++r];if(!n)return{ok:!1,stderr:`kill: -s requires a signal name
1359
+ `,exitCode:2};let i=wk(n);if(i instanceof Error)return{ok:!1,stderr:`kill: ${i.message}\n`,exitCode:2};t=i;continue}if(i.startsWith(`-`)){let e=Tk(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
1360
+ `,exitCode:2}:yk.has(t)?{ok:!0,signal:t,pids:n}:{ok:!1,stderr:`kill: signal ${t} not supported\n`,exitCode:2}}function Ck(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 wk(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 Tk(e){return e===`-9`?`SIGKILL`:wk(e.slice(1))}function Ek(){return{stdout:`Usage: kill [-s SIGNAL | -INT | -TERM | -KILL | -STOP | -CONT | -9] PID [PID …]
1361
1361
 
1362
1362
  Send a signal to one or more processes tracked by the kernel.
1363
1363
 
@@ -1379,7 +1379,7 @@ Examples:
1379
1379
  kill -INT 1024 1025 SIGINT both
1380
1380
  kill -STOP 1024 pause; \`kill -CONT 1024\` resumes
1381
1381
  kill -s SIGKILL 1024 explicit signal name
1382
- `,stderr:``,exitCode:0}}const Ok=[`top`,`left`,`middle`,`right`,`bottom`],kk=`usage: layout <verb> [args]
1382
+ `,stderr:``,exitCode:0}}const Dk=[`top`,`left`,`middle`,`right`,`bottom`],Ok=`usage: layout <verb> [args]
1383
1383
 
1384
1384
  list List the built-in presets
1385
1385
  set <preset> Switch to a built-in preset
@@ -1395,13 +1395,13 @@ Examples:
1395
1395
  load <name> Restore a saved arrangement
1396
1396
  delete <name> Delete a saved arrangement
1397
1397
  reset Restore the default arrangement
1398
- edit Alias for \`layout set ${ks}\` (there is no edit mode)
1398
+ edit Alias for \`layout set ${Os}\` (there is no edit mode)
1399
1399
  docs Describe the layout surfaces
1400
1400
  panels List the registered panel ids
1401
1401
 
1402
- Zones: ${Ok.join(`, `)}
1403
- `,Ak=new Set([`files`,`term`,`memory`,`monitor`]),jk=`sprinkle:`;function Mk(e){return e===`chat`||Ak.has(e)||e.startsWith(jk)?e:`${jk}${e}`}function Nk(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 Pk=`usage: layout size <surfaceId> [--width <px|percent>] [--height <px|percent>]`;function Fk(e){let t=e[0],n=t?Ns(t):null;return n?{kind:`set`,tree:n.tree}:{error:`unknown layout: ${t??`(none)`}`}}function Ik(e){let t=e[0];return Ok.includes(t)?{kind:`chat`,zone:t}:{error:`usage: layout chat <${Ok.join(`|`)}>`}}function Lk(e){let[t,n]=e;return!t||!Ok.includes(n)?{error:`usage: layout open <surfaceId> <${Ok.join(`|`)}>`}:{kind:`open`,surfaceId:Mk(t),zone:n}}function Rk(e){let t=e[0];return t?{kind:`close`,surfaceId:Mk(t)}:{error:`usage: layout close <surfaceId>`}}function zk(e){let[t,n]=e;return!t||!Ok.includes(n)?{error:`usage: layout move <surfaceId> <${Ok.join(`|`)}>`}:{kind:`move`,surfaceId:Mk(t),zone:n}}function Bk(e,t,n){if(t!==`--width`&&t!==`--height`)return{error:`layout size: unknown flag "${t}"`};if(!n)return{error:`layout size: missing value for ${t}`};let r=Nk(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 Vk(e){let t=e[0];if(!t)return{error:Pk};let n={};for(let t=1;t<e.length;t+=2){let r=Bk(n,e[t],e[t+1]);if(r)return r}return n.widthPx==null&&n.widthPercent==null&&n.heightPx==null&&n.heightPercent==null?{error:Pk}:{kind:`size`,surfaceId:Mk(t),size:n}}function Hk(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 Uk(e,t){let n=t[0];return n?e===`load`?{kind:`load`,name:n}:{kind:`delete`,name:n}:{error:`usage: layout ${e} <name>`}}function Wk(e,t){let n=t[0];return n?e===`show`?{kind:`show`,panelId:Mk(n)}:{kind:`hide`,panelId:Mk(n)}:{error:`usage: layout ${e} <panelId>`}}function Gk(){let e=Ns(ks);return e?{kind:`set`,tree:e.tree}:{error:`default layout unavailable`}}function Kk(e){let[t,...n]=e;switch(t){case`set`:return Fk(n);case`chat`:return Ik(n);case`open`:return Lk(n);case`close`:return Rk(n);case`move`:return zk(n);case`size`:return Vk(n);case`reset`:return{kind:`reset`};case`edit`:return Gk();case`load`:return Uk(`load`,n);case`save`:return Hk(n);case`delete`:return Uk(`delete`,n);case`docs`:return{kind:`docs`};case`panels`:return{kind:`panels`};case`show`:return Wk(`show`,n);case`hide`:return Wk(`hide`,n);default:return{error:`usage: layout <set|edit|chat|open|close|move|size|show|hide|load|save|delete|docs|panels|list|reset>`}}}function qk(){return C(`layout`,async e=>{if(T(e))return{stdout:e[0]?.startsWith(`-`)?kk:ht(`layout`,e[0],kk),stderr:``,exitCode:0};if(e[0]===`list`||e.length===0)return{stdout:`layouts: ${Object.keys(Ms).join(`, `)}\ndefault: ${ks}\n`,stderr:``,exitCode:0};let t=Kk(e);if(`error`in t)return{stdout:``,stderr:`layout: ${t.error}\n`,exitCode:1};let n=b();if(!n)return{stdout:``,stderr:`layout: UI is unavailable in this environment
1404
- `,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 Jk=ha.id;function Yk(){return`local-llm — inspect and configure the Local LLM provider
1402
+ Zones: ${Dk.join(`, `)}
1403
+ `,kk=new Set([`files`,`term`,`memory`,`monitor`]),Ak=`sprinkle:`;function jk(e){return e===`chat`||kk.has(e)||e.startsWith(Ak)?e:`${Ak}${e}`}function Mk(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 Nk=`usage: layout size <surfaceId> [--width <px|percent>] [--height <px|percent>]`;function Pk(e){let t=e[0],n=t?Ms(t):null;return n?{kind:`set`,tree:n.tree}:{error:`unknown layout: ${t??`(none)`}`}}function Fk(e){let t=e[0];return Dk.includes(t)?{kind:`chat`,zone:t}:{error:`usage: layout chat <${Dk.join(`|`)}>`}}function Ik(e){let[t,n]=e;return!t||!Dk.includes(n)?{error:`usage: layout open <surfaceId> <${Dk.join(`|`)}>`}:{kind:`open`,surfaceId:jk(t),zone:n}}function Lk(e){let t=e[0];return t?{kind:`close`,surfaceId:jk(t)}:{error:`usage: layout close <surfaceId>`}}function Rk(e){let[t,n]=e;return!t||!Dk.includes(n)?{error:`usage: layout move <surfaceId> <${Dk.join(`|`)}>`}:{kind:`move`,surfaceId:jk(t),zone:n}}function zk(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=Mk(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 Bk(e){let t=e[0];if(!t)return{error:Nk};let n={};for(let t=1;t<e.length;t+=2){let r=zk(n,e[t],e[t+1]);if(r)return r}return n.widthPx==null&&n.widthPercent==null&&n.heightPx==null&&n.heightPercent==null?{error:Nk}:{kind:`size`,surfaceId:jk(t),size:n}}function Vk(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 Hk(e,t){let n=t[0];return n?e===`load`?{kind:`load`,name:n}:{kind:`delete`,name:n}:{error:`usage: layout ${e} <name>`}}function Uk(e,t){let n=t[0];return n?e===`show`?{kind:`show`,panelId:jk(n)}:{kind:`hide`,panelId:jk(n)}:{error:`usage: layout ${e} <panelId>`}}function Wk(){let e=Ms(Os);return e?{kind:`set`,tree:e.tree}:{error:`default layout unavailable`}}function Gk(e){let[t,...n]=e;switch(t){case`set`:return Pk(n);case`chat`:return Fk(n);case`open`:return Ik(n);case`close`:return Lk(n);case`move`:return Rk(n);case`size`:return Bk(n);case`reset`:return{kind:`reset`};case`edit`:return Wk();case`load`:return Hk(`load`,n);case`save`:return Vk(n);case`delete`:return Hk(`delete`,n);case`docs`:return{kind:`docs`};case`panels`:return{kind:`panels`};case`show`:return Uk(`show`,n);case`hide`:return Uk(`hide`,n);default:return{error:`usage: layout <set|edit|chat|open|close|move|size|show|hide|load|save|delete|docs|panels|list|reset>`}}}function Kk(){return C(`layout`,async e=>{if(T(e))return{stdout:e[0]?.startsWith(`-`)?Ok:gt(`layout`,e[0],Ok),stderr:``,exitCode:0};if(e[0]===`list`||e.length===0)return{stdout:`layouts: ${Object.keys(js).join(`, `)}\ndefault: ${Os}\n`,stderr:``,exitCode:0};let t=Gk(e);if(`error`in t)return{stdout:``,stderr:`layout: ${t.error}\n`,exitCode:1};let n=b();if(!n)return{stdout:``,stderr:`layout: UI is unavailable in this environment
1404
+ `,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 qk=ga.id;function Jk(){return`local-llm — inspect and configure the Local LLM provider
1405
1405
 
1406
1406
  Usage:
1407
1407
  local-llm Show current config + verify connection
@@ -1420,21 +1420,21 @@ Common base URLs:
1420
1420
  llama.cpp http://localhost:8080/v1
1421
1421
  vLLM http://localhost:8000/v1
1422
1422
  Jan http://localhost:1337/v1
1423
- `}function Xk(e,t){return e.version?t?`${e.kind} (${e.version})`:`${e.kind} ${e.version}`:e.kind}function Zk(e){return e.map(e=>` • ${e}`)}function Qk(e,t){let n=[`✗ Could not reach ${e}`,` runtime: ${Xk(t.runtime,!0)}`,` error: ${t.error?.message??`unknown`}`];return t.error?.hint&&n.push(` hint: ${t.error.hint}`),{stdout:``,stderr:n.join(`
1423
+ `}function Yk(e,t){return e.version?t?`${e.kind} (${e.version})`:`${e.kind} ${e.version}`:e.kind}function Xk(e){return e.map(e=>` • ${e}`)}function Zk(e,t){let n=[`✗ Could not reach ${e}`,` runtime: ${Yk(t.runtime,!0)}`,` error: ${t.error?.message??`unknown`}`];return t.error?.hint&&n.push(` hint: ${t.error.hint}`),{stdout:``,stderr:n.join(`
1424
1424
  `)+`
1425
- `,exitCode:1}}function $k(e,t){return{stdout:[`✓ ${e}`,` runtime: ${Xk(t.runtime,!0)}`,` models: ${t.models.length}`,...Zk(t.models)].join(`
1425
+ `,exitCode:1}}function Qk(e,t){return{stdout:[`✓ ${e}`,` runtime: ${Yk(t.runtime,!0)}`,` models: ${t.models.length}`,...Xk(t.models)].join(`
1426
1426
  `)+`
1427
- `,stderr:``,exitCode:0}}function eA(e,t){let n=t.models.length;return{stdout:[`✓ ${e} (${Xk(t.runtime,!1)})`,` Saved ${n} model${n===1?``:`s`} to Settings:`,...Zk(t.models)].join(`
1427
+ `,stderr:``,exitCode:0}}function $k(e,t){let n=t.models.length;return{stdout:[`✓ ${e} (${Yk(t.runtime,!1)})`,` Saved ${n} model${n===1?``:`s`} to Settings:`,...Xk(t.models)].join(`
1428
1428
  `)+`
1429
- `,stderr:``,exitCode:0}}function tA(){return C(Jk,async e=>{if(e.includes(`--help`)||e.includes(`-h`))return{stdout:Yk(),stderr:``,exitCode:0};let{getApiKeyForProvider:t,getRawApiKeyForProvider:n,getBaseUrlForProvider:r,addAccount:i}=await import(`./account-store-BspEP7gu.js`).then(e=>e.t),{verifyConnection:a}=await import(`./local-llm-_r9oESrG.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(Jk);if(!s)return{stdout:``,stderr:`Local LLM is not configured. Open Settings → Providers → Local LLM and set a base URL.
1430
- `,exitCode:1};let c=await a(s,t(Jk)??void 0);if(!c.ok)return Qk(s,c);if(o===`discover`){let e=n(Jk)??``;return i(Jk,e,s,c.models.join(`, `)),eA(s,c)}return $k(s,c)})}function nA(){return{stdout:`usage: man <topic>
1429
+ `,stderr:``,exitCode:0}}function eA(){return C(qk,async e=>{if(e.includes(`--help`)||e.includes(`-h`))return{stdout:Jk(),stderr:``,exitCode:0};let{getApiKeyForProvider:t,getRawApiKeyForProvider:n,getBaseUrlForProvider:r,addAccount:i}=await import(`./account-store-C-NiHHQY.js`).then(e=>e.t),{verifyConnection:a}=await import(`./local-llm-C5Mw5oib.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(qk);if(!s)return{stdout:``,stderr:`Local LLM is not configured. Open Settings → Providers → Local LLM and set a base URL.
1430
+ `,exitCode:1};let c=await a(s,t(qk)??void 0);if(!c.ok)return Zk(s,c);if(o===`discover`){let e=n(qk)??``;return i(qk,e,s,c.models.join(`, `)),$k(s,c)}return Qk(s,c)})}function tA(){return{stdout:`usage: man <topic>
1431
1431
 
1432
1432
  Fetches documentation for a given topic from sliccy.com.
1433
- `,stderr:``,exitCode:0}}function rA(e){return e.replace(/<[^>]*>/g,``).replace(/&lt;/g,`<`).replace(/&gt;/g,`>`).replace(/&quot;/g,`"`).replace(/&#39;/g,`'`).replace(/&nbsp;/g,` `).replace(/&amp;/g,`&`).trimEnd()}function iA(){let e=g();return C(`man`,async t=>{if(t.includes(`--help`)||t.includes(`-h`))return nA();if(t.length===0)return{stdout:``,stderr:`What manual page do you want?
1433
+ `,stderr:``,exitCode:0}}function nA(e){return e.replace(/<[^>]*>/g,``).replace(/&lt;/g,`<`).replace(/&gt;/g,`>`).replace(/&quot;/g,`"`).replace(/&#39;/g,`'`).replace(/&nbsp;/g,` `).replace(/&amp;/g,`&`).trimEnd()}function rA(){let e=g();return C(`man`,async t=>{if(t.includes(`--help`)||t.includes(`-h`))return tA();if(t.length===0)return{stdout:``,stderr:`What manual page do you want?
1434
1434
  For example, try 'man commands'.
1435
- `,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:rA(new TextDecoder(`utf-8`).decode(t.body))+`
1436
- `,stderr:``,exitCode:0}}catch(e){return{stdout:``,stderr:`man: ${e instanceof Error?e.message:String(e)}\n`,exitCode:1}}})}function aA(e){return{stdout:``,stderr:`meminfo: ${e}\n`,exitCode:1}}function oA(e){return e.attribution.length===0?`(shared)`:e.attribution.map(e=>{let t=e.container?.src??e.container?.id??e.url??`?`;return e.scope?`${e.scope} ${t}`:t}).join(`, `)}function sA(){let e=globalThis.performance,t=e?.measureUserAgentSpecificMemory;return t?t.bind(e):null}function cA(e){if(e[0]===`--help`||e[0]===`-h`||e[0]===`help`)return{help:!0};let t=!1;for(let n of e){if(n!==`--json`)return{error:`unknown option '${n}' — see \`meminfo --help\``};t=!0}return{help:!1,json:t}}function lA(e){let t=[`total: ${Hy(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(`${Hy(e.bytes).padEnd(10)} ${e.types.join(`,`).padEnd(20)} ${oA(e)}`)}return`${t.join(`
1437
- `)}\n`}function uA(e={}){return C(`meminfo`,async t=>{let n=cA(t);if(`error`in n)return aA(n.error);if(n.help)return{stdout:`meminfo - agent-cluster memory diagnostics
1435
+ `,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:nA(new TextDecoder(`utf-8`).decode(t.body))+`
1436
+ `,stderr:``,exitCode:0}}catch(e){return{stdout:``,stderr:`man: ${e instanceof Error?e.message:String(e)}\n`,exitCode:1}}})}function iA(e){return{stdout:``,stderr:`meminfo: ${e}\n`,exitCode:1}}function aA(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 oA(){let e=globalThis.performance,t=e?.measureUserAgentSpecificMemory;return t?t.bind(e):null}function sA(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 cA(e){let t=[`total: ${Vy(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(`${Vy(e.bytes).padEnd(10)} ${e.types.join(`,`).padEnd(20)} ${aA(e)}`)}return`${t.join(`
1437
+ `)}\n`}function lA(e={}){return C(`meminfo`,async t=>{let n=sA(t);if(`error`in n)return iA(n.error);if(n.help)return{stdout:`meminfo - agent-cluster memory diagnostics
1438
1438
 
1439
1439
  Usage:
1440
1440
  meminfo Human-readable breakdown (bytes, scope, types, url)
@@ -1445,8 +1445,8 @@ Notes:
1445
1445
  Document-Isolation-Policy). Embedded floats cannot be isolated and
1446
1446
  report why instead.
1447
1447
  - The browser randomizes measurement timing — expect a short delay.
1448
- `,stderr:``,exitCode:0};let r=e.isIsolated?e.isIsolated():globalThis.crossOriginIsolated===!0,i=e.measure??sA();if(!r&&!e.measure)return aA(`memory measurement requires a cross-origin-isolated runtime (Document-Isolation-Policy) — this runtime is not isolated`);if(!i)return aA(`performance.measureUserAgentSpecificMemory is not available in this browser`);let a;try{a=await i()}catch(e){return aA(e instanceof Error?e.message:String(e))}return n.json?{stdout:`${JSON.stringify(a,null,2)}\n`,stderr:``,exitCode:0}:{stdout:lA(a),stderr:``,exitCode:0}})}function dA(e){return C(`memory`,async t=>{let{runMemory:n}=await import(`./run-E8fkhkYA.js`);return n(t,e)})}function fA(){return C(`mktemp`,async(e,t)=>{let{runMktemp:n}=await import(`./run-dAJe7sKp.js`);return n(e,t)})}const pA=`/.cache/artificial-analysis.json`,mA=[`--all`,`--all-versions`,`--json`,`--refresh`,`--no-benchmarks`,`--help`,`-h`],hA=[`--provider`];function gA(e){return{stdout:``,stderr:e.endsWith(`
1449
- `)?e:`${e}\n`,exitCode:1}}async function _A(e){try{let t=await e.readFile(pA),n=JSON.parse(t);if(Date.now()-n.fetchedAt<864e5)return n.models}catch{}return null}function vA(){try{return localStorage.getItem(`aa_api_key`)}catch{return null}}function yA(e){return e.map(e=>{let t=e;return{slug:t.slug??``,name:t.name??``,creator_slug:t.model_creator?.slug??``,intelligence_index:t.evaluations?.artificial_analysis_intelligence_index??null,coding_index:t.evaluations?.artificial_analysis_coding_index??null,speed_tps:t.median_output_tokens_per_second??null}})}async function bA(e,t){let n={fetchedAt:Date.now(),models:t};try{await e.mkdir(`/.cache`,{recursive:!0}),await e.writeFile(pA,JSON.stringify(n))}catch{}}async function xA(e,t=!1){if(e&&!t){let t=await _A(e);if(t)return t}let n={Accept:`application/json`},r=vA();r&&(n[`x-api-key`]=r);let i=g(),a;try{a=await i(`https://artificialanalysis.ai/api/v2/data/llms/models`,{method:`GET`,headers:n})}catch{return[]}if(a.status===401||a.status<200||a.status>=300)return[];let o;try{o=JSON.parse(new TextDecoder().decode(a.body))}catch{return[]}if(typeof o!=`object`||!o)return[];let s=o,c=yA(Array.isArray(s)?s:s.data??s.models??[]);return e&&c.length>0&&await bA(e,c),c}function SA(e){return e.toLowerCase().replace(/\./g,`-`).replace(/-\d{8}$/,``).replace(/-\d{4}$/,``)}function CA(e,t){let n=e.toLowerCase(),r=t.find(e=>e.slug===n);if(r)return r;let i=SA(e),a=t.find(e=>SA(e.slug)===i);if(a)return a;let o=t.filter(e=>n.includes(e.slug)||e.slug.includes(n));if(o.length!==0)return o.sort((e,t)=>t.slug.length-e.slug.length),o[0]}function wA(){return`models - list available LLM models
1448
+ `,stderr:``,exitCode:0};let r=e.isIsolated?e.isIsolated():globalThis.crossOriginIsolated===!0,i=e.measure??oA();if(!r&&!e.measure)return iA(`memory measurement requires a cross-origin-isolated runtime (Document-Isolation-Policy) — this runtime is not isolated`);if(!i)return iA(`performance.measureUserAgentSpecificMemory is not available in this browser`);let a;try{a=await i()}catch(e){return iA(e instanceof Error?e.message:String(e))}return n.json?{stdout:`${JSON.stringify(a,null,2)}\n`,stderr:``,exitCode:0}:{stdout:cA(a),stderr:``,exitCode:0}})}function uA(e){return C(`memory`,async t=>{let{runMemory:n}=await import(`./run-0TklT6x-.js`);return n(t,e)})}function dA(){return C(`mktemp`,async(e,t)=>{let{runMktemp:n}=await import(`./run-dAJe7sKp.js`);return n(e,t)})}const fA=`/.cache/artificial-analysis.json`,pA=[`--all`,`--all-versions`,`--json`,`--refresh`,`--no-benchmarks`,`--help`,`-h`],mA=[`--provider`];function hA(e){return{stdout:``,stderr:e.endsWith(`
1449
+ `)?e:`${e}\n`,exitCode:1}}async function gA(e){try{let t=await e.readFile(fA),n=JSON.parse(t);if(Date.now()-n.fetchedAt<864e5)return n.models}catch{}return null}function _A(){try{return localStorage.getItem(`aa_api_key`)}catch{return null}}function vA(e){return e.map(e=>{let t=e;return{slug:t.slug??``,name:t.name??``,creator_slug:t.model_creator?.slug??``,intelligence_index:t.evaluations?.artificial_analysis_intelligence_index??null,coding_index:t.evaluations?.artificial_analysis_coding_index??null,speed_tps:t.median_output_tokens_per_second??null}})}async function yA(e,t){let n={fetchedAt:Date.now(),models:t};try{await e.mkdir(`/.cache`,{recursive:!0}),await e.writeFile(fA,JSON.stringify(n))}catch{}}async function bA(e,t=!1){if(e&&!t){let t=await gA(e);if(t)return t}let n={Accept:`application/json`},r=_A();r&&(n[`x-api-key`]=r);let i=g(),a;try{a=await i(`https://artificialanalysis.ai/api/v2/data/llms/models`,{method:`GET`,headers:n})}catch{return[]}if(a.status===401||a.status<200||a.status>=300)return[];let o;try{o=JSON.parse(new TextDecoder().decode(a.body))}catch{return[]}if(typeof o!=`object`||!o)return[];let s=o,c=vA(Array.isArray(s)?s:s.data??s.models??[]);return e&&c.length>0&&await yA(e,c),c}function xA(e){return e.toLowerCase().replace(/\./g,`-`).replace(/-\d{8}$/,``).replace(/-\d{4}$/,``)}function SA(e,t){let n=e.toLowerCase(),r=t.find(e=>e.slug===n);if(r)return r;let i=xA(e),a=t.find(e=>xA(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 CA(){return`models - list available LLM models
1450
1450
 
1451
1451
  Usage: models [options]
1452
1452
 
@@ -1458,14 +1458,14 @@ Options:
1458
1458
  --refresh Force re-fetch benchmark data from Artificial Analysis
1459
1459
  --no-benchmarks Skip benchmark data enrichment (faster, works offline)
1460
1460
  -h, --help Show this help message
1461
- `}function TA(e){return e>=1e6?`${(e/1e6).toFixed(1)}M`.replace(`.0M`,`M`):e>=1e3?`${(e/1e3).toFixed(0)}K`:`${e}`}function EA(e){return`$${e.toFixed(2)}`}const DA=/\b(embedding|embed|tts|whisper|dall-e|image-gen|audio|vision-preview)\b/i;function OA(e){let t=`${e.id} ${e.name??``}`;return!DA.test(t)}function kA(e){let t=e.match(/^(claude-(?:opus|sonnet|haiku))/);if(t)return t[1];let n=e.match(/^(gpt-\d+)(?:\.\d+)?(-[a-z][-a-z]*)?$/);if(n)return n[1]+(n[2]??``);let r=e.match(/^gemini-[\d.]+-(.+)$/);if(r)return`gemini-${r[1]}`;let i=e.match(/^gemini-(\d+)-(.+)$/);if(i)return`gemini-${i[2]}`;let a=e.match(/^grok-[\d.]+-([\w-]+)$/);if(a)return`grok-${a[1]}`;if(e.match(/^(grok)-[\d.]+$/))return`grok`;let o=e.match(/^(o\d+(?:-[a-z]+)?)(?:-\d.*)?$/);if(o)return o[1]}function AA(e){let t=e.toLowerCase();return t=t.replace(/-\d{8}$/,``),t=t.replace(/-\d{4}$/,``),t=t.replace(/-(preview|latest)$/,``),kA(t)??t.replace(/-[\d.]+$/,``)}function jA(e){let t=new Map;for(let n of e){let e=AA(n.id);(!t.has(e)||n.selected)&&t.set(e,n)}return[...t.values()]}function MA(e,t,n,r,i){let a=i?CA(e.id,i):void 0,o={id:e.id,name:e.name,provider:t,cost:e.cost??{input:0,output:0,cacheRead:0,cacheWrite:0},contextWindow:e.contextWindow??0,maxTokens:e.maxTokens??0,reasoning:!!e.reasoning,input:e.input??[`text`],selected:e.id===n&&t===r};return a?.intelligence_index!=null&&(o.intelligence=a.intelligence_index),a?.coding_index!=null&&(o.codingScore=a.coding_index),a?.speed_tps!=null&&(o.speed=a.speed_tps),o}function NA(e,t,n,r){let i=[];i.push(`Models for "${e}" (${t}):\n`);for(let e of n){let t=e.selected?` ► `:` `,n=e.id.padEnd(30),r=`${EA(e.cost.input)} / ${EA(e.cost.output)}`,a=`${TA(e.contextWindow)} ctx`,o=e.intelligence==null?``:`IQ:${e.intelligence}`,s=e.speed==null?``:`${Math.round(e.speed)} t/s`,c=e.reasoning?`reasoning`:``,l=o||s?`${o.padEnd(6)} ${s.padEnd(8)}`:``;i.push(`${t}${n} ${r.padEnd(16)} ${a.padEnd(10)} ${l} ${c}`)}return i.push(`\n ${n.length} model${n.length===1?``:`s`} available.`),r&&i.push(` Intelligence data: artificialanalysis.ai`),i.join(`
1461
+ `}function wA(e){return e>=1e6?`${(e/1e6).toFixed(1)}M`.replace(`.0M`,`M`):e>=1e3?`${(e/1e3).toFixed(0)}K`:`${e}`}function TA(e){return`$${e.toFixed(2)}`}const EA=/\b(embedding|embed|tts|whisper|dall-e|image-gen|audio|vision-preview)\b/i;function DA(e){let t=`${e.id} ${e.name??``}`;return!EA.test(t)}function OA(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 kA(e){let t=e.toLowerCase();return t=t.replace(/-\d{8}$/,``),t=t.replace(/-\d{4}$/,``),t=t.replace(/-(preview|latest)$/,``),OA(t)??t.replace(/-[\d.]+$/,``)}function AA(e){let t=new Map;for(let n of e){let e=kA(n.id);(!t.has(e)||n.selected)&&t.set(e,n)}return[...t.values()]}function jA(e,t,n,r,i){let a=i?SA(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 MA(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=`${TA(e.cost.input)} / ${TA(e.cost.output)}`,a=`${wA(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(`
1462
1462
  `)+`
1463
- `}function PA(e){let t=w(e,{bool:mA,value:hA});return`error`in t?t:{jsonMode:t.bools.has(`--json`),allMode:t.bools.has(`--all`),allVersions:t.bools.has(`--all-versions`),forceRefresh:t.bools.has(`--refresh`),noBenchmarks:t.bools.has(`--no-benchmarks`),explicitProvider:t.values.get(`--provider`)}}function FA(e,t,n){if(t.explicitProvider){let n=e.getAvailableProviders();return n.includes(t.explicitProvider)?[t.explicitProvider]:{error:`Unknown provider: ${t.explicitProvider}. Available: ${n.join(`, `)}\n`}}return t.allMode?[...new Set(e.getAccounts().map(e=>e.providerId))]:[n]}function IA(e,t,n,r,i,a){let o=e.getProviderModels(t).filter(OA);if(o.length===0)return[];let s=o.map(e=>MA(e,t,n,r,i)).sort((e,t)=>t.cost.input-e.cost.input);return a||(s=jA(s)),s}function LA(e,t,n,r){let i=`${e}:${t}`,a=`${n}:${r}`;return i===a?`Currently using: ${i}\n`:`Currently using: ${i} (selected ${a} — resolved to a different model)\n`}async function RA(e,t){if(T(e,{valueFlags:hA}))return{stdout:wA(),stderr:``,exitCode:0};let n=PA(e);if(`error`in n)return gA(`models: ${n.error}`);let r=await import(`./account-store-BspEP7gu.js`).then(e=>e.t);if(r.getAccounts().length===0)return gA(`No provider accounts configured. Run the provider settings to add one.
1464
- `);let i=r.resolveCurrentModel(),a=i.id,o=i.provider,s=r.getSelectedProvider(),c=r.getSelectedModelId(),l;if(!n.noBenchmarks){let e=await xA(t,n.forceRefresh);e.length>0&&(l=e)}let u=FA(r,n,s);if(`error`in u)return gA(u.error);let d=[],f=[];for(let e of u){let t=IA(r,e,a,o,l,n.allVersions);if(t.length===0){if(!n.allMode)return gA(`No models available for provider ${e}.\n`);continue}if(d.push(...t),!n.jsonMode){let n=r.getProviderConfig(e);f.push(NA(n.name,e,t,!!l))}}return n.jsonMode?{stdout:JSON.stringify(d,null,2)+`
1463
+ `}function NA(e){let t=w(e,{bool:pA,value:mA});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 PA(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 FA(e,t,n,r,i,a){let o=e.getProviderModels(t).filter(DA);if(o.length===0)return[];let s=o.map(e=>jA(e,t,n,r,i)).sort((e,t)=>t.cost.input-e.cost.input);return a||(s=AA(s)),s}function IA(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 LA(e,t){if(T(e,{valueFlags:mA}))return{stdout:CA(),stderr:``,exitCode:0};let n=NA(e);if(`error`in n)return hA(`models: ${n.error}`);let r=await import(`./account-store-C-NiHHQY.js`).then(e=>e.t);if(r.getAccounts().length===0)return hA(`No provider accounts configured. Run the provider settings to add one.
1464
+ `);let i=r.resolveCurrentModel(),a=i.id,o=i.provider,s=r.getSelectedProvider(),c=r.getSelectedModelId(),l;if(!n.noBenchmarks){let e=await bA(t,n.forceRefresh);e.length>0&&(l=e)}let u=PA(r,n,s);if(`error`in u)return hA(u.error);let d=[],f=[];for(let e of u){let t=FA(r,e,a,o,l,n.allVersions);if(t.length===0){if(!n.allMode)return hA(`No models available for provider ${e}.\n`);continue}if(d.push(...t),!n.jsonMode){let n=r.getProviderConfig(e);f.push(MA(n.name,e,t,!!l))}}return n.jsonMode?{stdout:JSON.stringify(d,null,2)+`
1465
1465
  `,stderr:``,exitCode:0}:(n.allVersions||f.push(`Showing latest versions only. Use --all-versions to see all.
1466
- `),f.push(LA(o,a,s,c)),{stdout:f.join(`
1467
- `),stderr:``,exitCode:0})}function zA(e){return C(`models`,async t=>RA(t,e))}const BA=new Set([`-`,`/dev/stdin`,`/dev/fd/0`,`/proc/self/fd/0`]);function VA(e){return e===`-e`||e===`--eval`||BA.has(e)||!e.startsWith(`-`)}function HA(e){return{stdout:``,stderr:`node: ${e} is not a valid value for --input-type. Valid values are: 'commonjs' or 'module'.\n`,exitCode:9}}function UA(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
1468
- `,exitCode:9}}:i!==`module`&&i!==`commonjs`?{nextIndex:a,error:HA(i)}:{inputType:i,nextIndex:a}}function WA(e){let t=!1,n=!1,r=!1,i,a=0;for(;a<e.length;){let o=e[a];if(VA(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=UA(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 GA(){return{stdout:`usage: node [options] [script.js] [args...]
1466
+ `),f.push(IA(o,a,s,c)),{stdout:f.join(`
1467
+ `),stderr:``,exitCode:0})}function RA(e){return C(`models`,async t=>LA(t,e))}const zA=new Set([`-`,`/dev/stdin`,`/dev/fd/0`,`/proc/self/fd/0`]);function BA(e){return e===`-e`||e===`--eval`||zA.has(e)||!e.startsWith(`-`)}function VA(e){return{stdout:``,stderr:`node: ${e} is not a valid value for --input-type. Valid values are: 'commonjs' or 'module'.\n`,exitCode:9}}function HA(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
1468
+ `,exitCode:9}}:i!==`module`&&i!==`commonjs`?{nextIndex:a,error:VA(i)}:{inputType:i,nextIndex:a}}function UA(e){let t=!1,n=!1,r=!1,i,a=0;for(;a<e.length;){let o=e[a];if(BA(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=HA(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 WA(){return{stdout:`usage: node [options] [script.js] [args...]
1469
1469
  node [options] -e <code> [args...]
1470
1470
 
1471
1471
  Options:
@@ -1474,20 +1474,20 @@ Options:
1474
1474
  --input-type=TYPE module or commonjs (stdin / -e / .js)
1475
1475
  -h, --help print this help
1476
1476
  -v, --version print Node shim version
1477
- `,stderr:``,exitCode:0}}function KA(){return{stdout:`${Mr}\n`,stderr:``,exitCode:0}}function qA(e,t){if(t){if(e.endsWith(`.mjs`)&&t===`commonjs`)return{stdout:``,stderr:`node: cannot set --input-type=commonjs for a .mjs file
1477
+ `,stderr:``,exitCode:0}}function GA(){return{stdout:`${Nr}\n`,stderr:``,exitCode:0}}function KA(e,t){if(t){if(e.endsWith(`.mjs`)&&t===`commonjs`)return{stdout:``,stderr:`node: cannot set --input-type=commonjs for a .mjs file
1478
1478
  `,exitCode:9};if(e.endsWith(`.cjs`)&&t===`module`)return{stdout:``,stderr:`node: cannot set --input-type=module for a .cjs file
1479
- `,exitCode:9}}}function JA(e,t){if(!e.startsWith(`/`))return t;let n=e.lastIndexOf(`/`);return n<=0?`/`:e.slice(0,n)}function YA(e){return e instanceof Error?e.stack??e.message:String(e)}async function XA(e,t,n){if(!(wr(e)||zr(e)||t.endsWith(`.mjs`)))return e;try{return(await(await bi()).transform(e,{loader:`js`,format:`cjs`,sourcefile:`${t.replace(/\.[^./]+$/,``)}.js`,supported:{"dynamic-import":!1}})).code}catch(r){if(!/top-level await/i.test(YA(r)))throw r;return yi()({source:e,filename:t,fromDir:JA(t,n)})}}async function ZA(e,t,n){let r=e;try{r=await XA(e,t,n)}catch(e){return{stdout:``,stderr:`${YA(e)}\n`,exitCode:1}}try{let e=Object.getPrototypeOf(async function(){}).constructor;return new e(r),{stdout:``,stderr:``,exitCode:0}}catch(e){return{stdout:``,stderr:`${YA(e)}\n`,exitCode:1}}}async function QA(e,t){if(e.length>0&&(e[0]===`-e`||e[0]===`--eval`))return e[1]?{kind:`ok`,code:e[1],filename:`[eval]`,argv:[`node`,...e.slice(2)],innerCtx:t}:{kind:`result`,result:{stdout:``,stderr:`node: option requires an argument -- eval
1480
- `,exitCode:9}};if(e.length>0&&BA.has(e[0]))return{kind:`ok`,code:P(t.stdin),filename:`<stdin>`,argv:[`node`,e[0],...e.slice(1)],innerCtx:{...t,stdin:``}};if(e.length>0&&!e[0].startsWith(`-`)){let n=e[0],r=t.fs.resolvePath(t.cwd,n);return await t.fs.exists(r)?{kind:`ok`,code:await t.fs.readFile(r),filename:r,argv:[`node`,r,...e.slice(1)],innerCtx:t}:{kind:`result`,result:{stdout:``,stderr:`node: cannot find module '${n}'\n`,exitCode:1}}}return P(t.stdin).trim().length>0?{kind:`ok`,code:P(t.stdin),filename:`<stdin>`,argv:[`node`],innerCtx:{...t,stdin:``}}:e.length>0?{kind:`result`,result:{stdout:``,stderr:`node: unsupported option '${e[0]}'\n`,exitCode:9}}:{kind:`result`,result:{stdout:``,stderr:`node: REPL mode is not supported in this environment; use node -e "code"
1481
- `,exitCode:9}}}function $A(e={},t=`node`){return{name:t,trusted:!0,async execute(t,n){let r=WA(t);if(r.error)return r.error;if(r.help)return GA();if(r.version)return KA();let i=await QA(t.slice(r.sourceIndex),n);if(i.kind===`result`)return r.check&&i.result.exitCode===9&&t.slice(r.sourceIndex).length===0?{stdout:``,stderr:`node: -c/--check requires a filename or -e CODE
1482
- `,exitCode:9}:i.result;let{code:a,filename:o,argv:s,innerCtx:c}=i,l=qA(o,r.inputType);if(l)return l;let u=_i(a);return r.check?ZA(u,o,n.cwd):hi(u,s,c,e.buildProcessConfig?.(n.env),{filename:o})}}}const ej=[`slicc:welcome-flow-fired`,`slicc.trayJoinUrl`,`slicc.trayWorkerBaseUrl`];async function tj(){try{let e=await navigator.serviceWorker?.getRegistrations?.();e&&await Promise.all(e.map(e=>e.unregister().catch(()=>!1)))}catch{}try{let e=await indexedDB.databases();await Promise.all(e.filter(e=>!!e.name).map(e=>new Promise(t=>{let n=indexedDB.deleteDatabase(e.name);n.onsuccess=()=>t(),n.onerror=()=>t(),n.onblocked=()=>t()})))}catch{}try{let e=navigator.storage;if(typeof e?.getDirectory==`function`){let t=await e.getDirectory(),n=[];for await(let e of t.keys())n.push(e);await Promise.all(n.map(e=>t.removeEntry(e,{recursive:!0}).catch(()=>{})))}}catch{}}const nj=[],rj=[`--yes`];function ij(){return C(`nuke`,async e=>{if(T(e,{valueFlags:nj}))return{stdout:`Usage: nuke <launch-code>
1479
+ `,exitCode:9}}}function qA(e,t){if(!e.startsWith(`/`))return t;let n=e.lastIndexOf(`/`);return n<=0?`/`:e.slice(0,n)}function JA(e){return e instanceof Error?e.stack??e.message:String(e)}async function YA(e,t,n){if(!(Tr(e)||Br(e)||t.endsWith(`.mjs`)))return e;try{return(await(await xi()).transform(e,{loader:`js`,format:`cjs`,sourcefile:`${t.replace(/\.[^./]+$/,``)}.js`,supported:{"dynamic-import":!1}})).code}catch(r){if(!/top-level await/i.test(JA(r)))throw r;return bi()({source:e,filename:t,fromDir:qA(t,n)})}}async function XA(e,t,n){let r=e;try{r=await YA(e,t,n)}catch(e){return{stdout:``,stderr:`${JA(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:`${JA(e)}\n`,exitCode:1}}}async function ZA(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
1480
+ `,exitCode:9}};if(e.length>0&&zA.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"
1481
+ `,exitCode:9}}}function QA(e={},t=`node`){return{name:t,trusted:!0,async execute(t,n){let r=UA(t);if(r.error)return r.error;if(r.help)return WA();if(r.version)return GA();let i=await ZA(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
1482
+ `,exitCode:9}:i.result;let{code:a,filename:o,argv:s,innerCtx:c}=i,l=KA(o,r.inputType);if(l)return l;let u=vi(a);return r.check?XA(u,o,n.cwd):gi(u,s,c,e.buildProcessConfig?.(n.env),{filename:o})}}}const $A=[`slicc:welcome-flow-fired`,`slicc.trayJoinUrl`,`slicc.trayWorkerBaseUrl`];async function ej(){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 tj=[],nj=[`--yes`];function rj(){return C(`nuke`,async e=>{if(T(e,{valueFlags:tj}))return{stdout:`Usage: nuke <launch-code>
1483
1483
 
1484
1484
  Completely reset the environment by deleting all local data and reloading.
1485
1485
  Destroys the file system, chat history, and scoops database.
1486
1486
  Requires the secret launch code to proceed.
1487
- `,stderr:``,exitCode:0};let t=w(e,{value:nj,bool:rj});return`error`in t?{stdout:``,stderr:`nuke: ${t.error}\n`,exitCode:1}:t.positionals.join(``).includes(`1234`)?((async()=>{await tj(),aj(ej)})(),{stdout:`Nuking everything…
1487
+ `,stderr:``,exitCode:0};let t=w(e,{value:tj,bool:nj});return`error`in t?{stdout:``,stderr:`nuke: ${t.error}\n`,exitCode:1}:t.positionals.join(``).includes(`1234`)?((async()=>{await ej(),ij($A)})(),{stdout:`Nuking everything…
1488
1488
  `,stderr:``,exitCode:0}):{stdout:``,stderr:`⚠️ WARNING: this will reset the entire environment, file system, chats, and scoops.
1489
1489
  Run nuke again with the secret launch code to proceed.
1490
- `,exitCode:1}})}function aj(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 oj(){return`oauth-domain — manage extra allowed domains for OAuth-issued tokens
1490
+ `,exitCode:1}})}function ij(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 aj(){return`oauth-domain — manage extra allowed domains for OAuth-issued tokens
1491
1491
 
1492
1492
  Usage:
1493
1493
  oauth-domain list List extra domains for every provider
@@ -1512,13 +1512,13 @@ Examples:
1512
1512
  oauth-domain add adobe '*.da.live'
1513
1513
  oauth-domain list adobe
1514
1514
  oauth-domain remove adobe admin.da.live
1515
- `}function sj(e){return{stdout:``,stderr:`oauth-domain: ${e}\n`,exitCode:1}}function cj(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(`
1515
+ `}function oj(e){return{stdout:``,stderr:`oauth-domain: ${e}\n`,exitCode:1}}function sj(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(`
1516
1516
  `)}\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)
1517
1517
  `,stderr:``,exitCode:0}:{stdout:`${n.map(([e,t])=>`${e}: ${t.join(`, `)}`).join(`
1518
- `)}\n`,stderr:``,exitCode:0}}async function lj(e,t,n){if(!t||!n)return{stdout:``,stderr:`oauth-domain add: requires <providerId> and <domain>
1519
- `,exitCode:1};let r=e.getExtraOAuthDomains(t),i=n.toLowerCase();return r.some(e=>e.toLowerCase()===i)?{stdout:`(${n} already in ${t} extras)\n`,stderr:``,exitCode:0}:(await e.setExtraOAuthDomainsAsync(t,[...r,n]),{stdout:`Added ${n} to ${t}. Reload the page to apply.\n`,stderr:``,exitCode:0})}async function uj(e,t,n){if(!t||!n)return{stdout:``,stderr:`oauth-domain remove: requires <providerId> and <domain>
1520
- `,exitCode:1};let r=e.getExtraOAuthDomains(t),i=n.toLowerCase(),a=r.filter(e=>e.toLowerCase()!==i);return a.length===r.length?{stdout:`(${n} not found in ${t} extras)\n`,stderr:``,exitCode:0}:(await e.setExtraOAuthDomainsAsync(t,a),{stdout:`Removed ${n} from ${t}. Reload the page to apply.\n`,stderr:``,exitCode:0})}async function dj(e,t){return t?(await e.setExtraOAuthDomainsAsync(t,[]),{stdout:`Cleared extra domains for ${t}. Reload the page to apply.\n`,stderr:``,exitCode:0}):{stdout:``,stderr:`oauth-domain clear: requires <providerId>
1521
- `,exitCode:1}}async function fj(e,t,n,r){switch(t){case`list`:return cj(e,n);case`add`:return lj(e,n,r);case`remove`:return uj(e,n,r);case`clear`:return dj(e,n);default:return{stdout:``,stderr:`oauth-domain: unknown subcommand "${t}"\n${oj()}`,exitCode:1}}}function pj(){return C(`oauth-domain`,async e=>{if(e.length===0||T(e))return{stdout:oj(),stderr:``,exitCode:0};let t=w(e);if(`error`in t)return sj(t.error);let[n,r,i]=t.positionals,a=await import(`./account-store-BspEP7gu.js`).then(e=>e.t);try{return await fj(a,n,r,i)}catch(e){return sj(e instanceof Error?e.message:String(e))}})}function mj(){return C(`oauth-token`,async(e,t)=>{let{runOAuthToken:n}=await import(`./run-x2hyttPz.js`);return n(e,t)})}const hj=[`--download`,`-d`,`--view`,`-v`],gj=[`--size`],_j={low:256,medium:768,high:1536};function vj(){return{stdout:`usage: open [--download|-d] [--view|-v [--size <spec>]] <url|path> [url|path...]
1518
+ `)}\n`,stderr:``,exitCode:0}}async function cj(e,t,n){if(!t||!n)return{stdout:``,stderr:`oauth-domain add: requires <providerId> and <domain>
1519
+ `,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 lj(e,t,n){if(!t||!n)return{stdout:``,stderr:`oauth-domain remove: requires <providerId> and <domain>
1520
+ `,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 uj(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>
1521
+ `,exitCode:1}}async function dj(e,t,n,r){switch(t){case`list`:return sj(e,n);case`add`:return cj(e,n,r);case`remove`:return lj(e,n,r);case`clear`:return uj(e,n);default:return{stdout:``,stderr:`oauth-domain: unknown subcommand "${t}"\n${aj()}`,exitCode:1}}}function fj(){return C(`oauth-domain`,async e=>{if(e.length===0||T(e))return{stdout:aj(),stderr:``,exitCode:0};let t=w(e);if(`error`in t)return oj(t.error);let[n,r,i]=t.positionals,a=await import(`./account-store-C-NiHHQY.js`).then(e=>e.t);try{return await dj(a,n,r,i)}catch(e){return oj(e instanceof Error?e.message:String(e))}})}function pj(){return C(`oauth-token`,async(e,t)=>{let{runOAuthToken:n}=await import(`./run-BYqCvTd8.js`);return n(e,t)})}const mj=[`--download`,`-d`,`--view`,`-v`],hj=[`--size`],gj={low:256,medium:768,high:1536};function _j(){return{stdout:`usage: open [--download|-d] [--view|-v [--size <spec>]] <url|path> [url|path...]
1522
1522
 
1523
1523
  VFS paths are served in a new browser tab via the preview service worker.
1524
1524
  URLs (http/https/etc.) are opened directly in a new tab.
@@ -1532,19 +1532,19 @@ Examples:
1532
1532
  medium (768x768), high (1536x1536), or a custom WxH
1533
1533
  box like 512x512. The image is fit inside the box
1534
1534
  with aspect ratio preserved and is never upscaled.
1535
- `,stderr:``,exitCode:0}}function yj(e){if(e in _j){let t=_j[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 bj(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 xj(){return`open --view requires --size to bound the inlined image. Use one of:
1535
+ `,stderr:``,exitCode:0}}function vj(e){if(e in gj){let t=gj[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 yj(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 bj(){return`open --view requires --size to bound the inlined image. Use one of:
1536
1536
  --size low (256x256)
1537
1537
  --size medium (768x768)
1538
1538
  --size high (1536x1536)
1539
1539
  --size WxH (custom box, e.g. 512x512)
1540
- `}const Sj=new Set([`image/png`,`image/webp`]);function Cj(e){let t=new ArrayBuffer(e.byteLength),n=new Uint8Array(t);return n.set(e),n}async function wj(e,t){let n=Cj(e),r=new Blob([n],{type:t}),i=await createImageBitmap(r);try{return{width:i.width,height:i.height}}finally{i.close?.()}}async function Tj(e,t,n,r){let i=Cj(e),a=new Blob([i],{type:t}),o=await createImageBitmap(a);try{let i=o.width,a=o.height,s=Math.min(n/i,r/a,1),c=Math.max(1,Math.round(i*s)),l=Math.max(1,Math.round(a*s)),u=new OffscreenCanvas(c,l),d=u.getContext(`2d`);if(!d)throw Error(`failed to acquire 2d context for resize`);d.drawImage(o,0,0,c,l);let f=bj(e,t)?Sj.has(t)?t:`image/png`:`image/jpeg`,p=await u.convertToBlob(f===`image/jpeg`?{type:`image/jpeg`,quality:.85}:{type:f});return{bytes:new Uint8Array(await p.arrayBuffer()),mime:f,width:c,height:l,nativeWidth:i,nativeHeight:a}}finally{o.close?.()}}function Ej(e){let t=w(e,{bool:hj,value:gj});if(`error`in t)return{error:`open: ${t.error}`};let n=t.values.get(`--size`);return n?.startsWith(`-`)&&n!==`-`?{error:`open: unknown flag: ${n}`}:{download:t.bools.has(`--download`)||t.bools.has(`-d`),view:t.bools.has(`--view`)||t.bools.has(`-v`),sizeSpec:n,targets:t.positionals}}function Dj(e){return{ok:!0,message:e}}function G(e){return{ok:!1,result:{stdout:``,stderr:e,exitCode:1}}}function Oj(e){return e?` (targetId: ${e})`:``}function kj(e,t,n){return async r=>{if(e)return e.createPage(r);if(t){window.open(r,`_blank`,`noopener,noreferrer`);return}try{await n.call(`window-open`,{url:r,target:`_blank`,features:`noopener,noreferrer`})}catch(e){throw Error(`open: ${e instanceof Error?e.message:String(e)}`)}}}async function Aj(e,t,n,r,i){let a=t.fs.resolvePath(t.cwd,e);if(n){let e=(a.split(`/`).pop()??``).replace(/\.shtml$/,``);try{return await n.open(e),Dj(`opened sprinkle ${e} from ${a}`)}catch(e){return G(`open: ${e instanceof Error?e.message:String(e)}\n`)}}if(r){let e=await Tr(t.fs,Nr(a)),n=Hr(a,e),r;try{r=await i(n)}catch(e){return G(`${e instanceof Error?e.message:String(e)}\n`)}return Dj(`opened ${a} → ${n}${Oj(r)}`)}return G(`open: sprinkle manager not initialized
1541
- `)}async function jj(e,t,n){if(!t)return G(`open: browser APIs are unavailable in this environment
1542
- `);let r;try{r=await n(e)}catch(e){return G(`${e instanceof Error?e.message:String(e)}\n`)}return Dj(`opened ${e}${Oj(r)}`)}async function Mj(e,n,r,i){let a;try{a=await r.fs.stat(n)}catch{return 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=Cr(n),c=new Uint8Array(o),l=null;if(i!==void 0&&(l=yj(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 wj(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`+xj())}let u;try{u=await Tj(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 Dj(`${n} (${u.nativeWidth}x${u.nativeHeight} → ${u.width}x${u.height}, ${f} KB, ${u.mime})\n<img:data:${u.mime};base64,${d}>`)}async function Nj(e,t,n,r){if(!r)return G(`open: --download requires the in-panel terminal (DOM-only)
1543
- `);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:Cr(t)}),c=URL.createObjectURL(s),l=document.createElement(`a`);return l.href=c,l.download=kr(t)||`download`,l.style.display=`none`,document.body.appendChild(l),l.click(),document.body.removeChild(l),setTimeout(()=>URL.revokeObjectURL(c),0),Dj(`downloaded ${t}`)}async function Pj(e,t,n,r){if(!n)return G(`open: browser APIs are unavailable in this environment
1544
- `);let i=!1;try{i=(await t.fs.stat(e)).isDirectory}catch{}let a=await Tr(t.fs,i?e:Nr(e)),o=Hr(e,a),s;try{s=await r(o)}catch(e){return G(`${e instanceof Error?e.message:String(e)}\n`)}return Dj(`opened ${e} → ${o}${Oj(s)}`)}async function Fj(e,t,n,r){if(!Dr(e)&&e.endsWith(`.shtml`)&&t.fs)return Aj(e,t,r.sprinkleManager,r.canOpenWindow,r.openExternal);if(!n.view&&!r.canOpenWindow)return G(`open: browser APIs are unavailable in this environment
1545
- `);if(Dr(e))return jj(e,r.canOpenWindow,r.openExternal);let i=t.fs.resolvePath(t.cwd,e);return n.view?Mj(e,i,t,n.sizeSpec):n.download?Nj(e,i,t,r.hasDom):Pj(i,t,r.canOpenWindow,r.openExternal)}function Ij(e){return C(`open`,async(t,n)=>{if(t.length===0||T(t,{valueFlags:gj}))return vj();let r=Ej(t);if(`error`in r)return{stdout:``,stderr:`${r.error}\n`,exitCode:1};let{download:i,view:a,sizeSpec:o,targets:s}=r;if(s.length===0)return vj();let c=globalThis.__slicc_sprinkleManager,l=typeof window<`u`&&typeof document<`u`,u=l?null:b(),d={canOpenWindow:!!e||l||!!u,hasDom:l,sprinkleManager:c,openExternal:kj(e,l,u)},f=[];for(let e of s){let t=await Fj(e,n,{view:a,download:i,sizeSpec:o},d);if(!t.ok)return t.result;f.push(t.message)}return{stdout:f.join(`
1540
+ `}const xj=new Set([`image/png`,`image/webp`]);function Sj(e){let t=new ArrayBuffer(e.byteLength),n=new Uint8Array(t);return n.set(e),n}async function Cj(e,t){let n=Sj(e),r=new Blob([n],{type:t}),i=await createImageBitmap(r);try{return{width:i.width,height:i.height}}finally{i.close?.()}}async function wj(e,t,n,r){let i=Sj(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=yj(e,t)?xj.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 Tj(e){let t=w(e,{bool:mj,value:hj});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 Ej(e){return{ok:!0,message:e}}function G(e){return{ok:!1,result:{stdout:``,stderr:e,exitCode:1}}}function Dj(e){return e?` (targetId: ${e})`:``}function Oj(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 kj(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),Ej(`opened sprinkle ${e} from ${a}`)}catch(e){return G(`open: ${e instanceof Error?e.message:String(e)}\n`)}}if(r){let e=await Er(t.fs,Pr(a)),n=Ur(a,e),r;try{r=await i(n)}catch(e){return G(`${e instanceof Error?e.message:String(e)}\n`)}return Ej(`opened ${a} → ${n}${Dj(r)}`)}return G(`open: sprinkle manager not initialized
1541
+ `)}async function Aj(e,t,n){if(!t)return G(`open: browser APIs are unavailable in this environment
1542
+ `);let r;try{r=await n(e)}catch(e){return G(`${e instanceof Error?e.message:String(e)}\n`)}return Ej(`opened ${e}${Dj(r)}`)}async function jj(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=wr(n),c=new Uint8Array(o),l=null;if(i!==void 0&&(l=vj(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 Cj(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`+bj())}let u;try{u=await wj(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 Ej(`${n} (${u.nativeWidth}x${u.nativeHeight} → ${u.width}x${u.height}, ${f} KB, ${u.mime})\n<img:data:${u.mime};base64,${d}>`)}async function Mj(e,t,n,r){if(!r)return G(`open: --download requires the in-panel terminal (DOM-only)
1543
+ `);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:wr(t)}),c=URL.createObjectURL(s),l=document.createElement(`a`);return l.href=c,l.download=Ar(t)||`download`,l.style.display=`none`,document.body.appendChild(l),l.click(),document.body.removeChild(l),setTimeout(()=>URL.revokeObjectURL(c),0),Ej(`downloaded ${t}`)}async function Nj(e,t,n,r){if(!n)return G(`open: browser APIs are unavailable in this environment
1544
+ `);let i=!1;try{i=(await t.fs.stat(e)).isDirectory}catch{}let a=await Er(t.fs,i?e:Pr(e)),o=Ur(e,a),s;try{s=await r(o)}catch(e){return G(`${e instanceof Error?e.message:String(e)}\n`)}return Ej(`opened ${e} → ${o}${Dj(s)}`)}async function Pj(e,t,n,r){if(!Or(e)&&e.endsWith(`.shtml`)&&t.fs)return kj(e,t,r.sprinkleManager,r.canOpenWindow,r.openExternal);if(!n.view&&!r.canOpenWindow)return G(`open: browser APIs are unavailable in this environment
1545
+ `);if(Or(e))return Aj(e,r.canOpenWindow,r.openExternal);let i=t.fs.resolvePath(t.cwd,e);return n.view?jj(e,i,t,n.sizeSpec):n.download?Mj(e,i,t,r.hasDom):Nj(i,t,r.canOpenWindow,r.openExternal)}function Fj(e){return C(`open`,async(t,n)=>{if(t.length===0||T(t,{valueFlags:hj}))return _j();let r=Tj(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 _j();let c=globalThis.__slicc_sprinkleManager,l=typeof window<`u`&&typeof document<`u`,u=l?null:b(),d={canOpenWindow:!!e||l||!!u,hasDom:l,sprinkleManager:c,openExternal:Oj(e,l,u)},f=[];for(let e of s){let t=await Pj(e,n,{view:a,download:i,sizeSpec:o},d);if(!t.ok)return t.result;f.push(t.message)}return{stdout:f.join(`
1546
1546
  `)+`
1547
- `,stderr:``,exitCode:0}})}function Lj(){return C(`patch`,async(e,t)=>{let{runPatch:n}=await import(`./run-yIEzBr4M.js`);return n(e,t)})}function Rj(e=`pdftk`){return C(e,async(t,n)=>{let{runPdftk:r}=await import(`./run-BEs473Sp.js`);return r(e,t,n)})}function zj(){return{stdout:`usage: pdftoppm [options] <input.pdf> [output-prefix]
1547
+ `,stderr:``,exitCode:0}})}function Ij(){return C(`patch`,async(e,t)=>{let{runPatch:n}=await import(`./run-BnVYcWap.js`);return n(e,t)})}function Lj(e=`pdftk`){return C(e,async(t,n)=>{let{runPdftk:r}=await import(`./run-BEs473Sp.js`);return r(e,t,n)})}function Rj(){return{stdout:`usage: pdftoppm [options] <input.pdf> [output-prefix]
1548
1548
 
1549
1549
  Rasterize PDF pages to images. Writes <prefix>-<n>.<ext> per page, where <n>
1550
1550
  is zero-padded to the digit width of the last page (out-1.png for a 9-page
@@ -1571,8 +1571,8 @@ Examples:
1571
1571
  pdftoppm -png -r 150 doc.pdf page
1572
1572
  pdftoppm -jpeg -jpegopt quality=80 -f 1 -l 3 doc.pdf out
1573
1573
  pdftoppm -png -singlefile -scale-to 1024 doc.pdf cover
1574
- `,stderr:``,exitCode:0}}function Bj(e,t){if(e===void 0)throw Error(`missing argument for ${t}`);let n=Number(e);if(!Number.isFinite(n)||!Number.isInteger(n)||n<=0)throw Error(`invalid ${t} value: ${e}`);return n}function Vj(e){if(e===void 0)throw Error(`missing argument for -jpegopt`);for(let t of e.split(`,`)){let[e,n]=t.split(`=`);if(e?.trim()!==`quality`)continue;let r=Number(n);if(!Number.isFinite(r)||r<0||r>100)throw Error(`invalid -jpegopt quality: ${n}`);return r}throw Error(`unsupported -jpegopt: ${e}`)}function Hj(e){let t=`png`,n=150,r,i,a,o,s,c,l=!1,u=[];for(let d=0;d<e.length;d++){let f=e[d];switch(f){case`-png`:t=`png`;break;case`-jpeg`:t=`jpeg`;break;case`-jpegopt`:c=Vj(e[++d]),t=`jpeg`;break;case`-r`:n=Bj(e[++d],`-r`);break;case`-f`:r=Bj(e[++d],`-f`);break;case`-l`:i=Bj(e[++d],`-l`);break;case`-scale-to`:a=Bj(e[++d],`-scale-to`);break;case`-scale-to-x`:o=Bj(e[++d],`-scale-to-x`);break;case`-scale-to-y`:s=Bj(e[++d],`-scale-to-y`);break;case`-singlefile`:l=!0;break;default:if(f.startsWith(`-`))throw Error(`unsupported option ${f}`);u.push(f)}}if(u.length===0)throw Error(`expected an input PDF`);if(u.length>2)throw Error(`expected at most one input PDF and one output prefix`);if(r!==void 0&&i!==void 0&&r>i)throw Error(`invalid page range: ${r}-${i}`);return{inputPath:u[0],outputRoot:u[1],format:t,dpi:n,firstPage:r,lastPage:i,scaleTo:a,scaleToX:o,scaleToY:s,quality:c,singleFile:l}}function Uj(e){let t=e.lastIndexOf(`.`);return t>0?e.slice(0,t):e}function Wj(e,t,n,r){let i=String(n).length;return`${e}-${String(t).padStart(i,`0`)}.${r}`}function Gj(e){return e===`jpeg`?`jpg`:`png`}function Kj(e){return e.scaleToX===void 0?e.scaleToY===void 0?e.scaleTo===void 0?{scale:sa(e.dpi)}:{longEdge:e.scaleTo}:{height:e.scaleToY}:{width:e.scaleToX}}async function qj(e,t){let n=e.fs.resolvePath(e.cwd,t),r=await e.fs.readFileBuffer(n);if(!aa(r))throw Error(`${t}: not a PDF file`);return r}function Jj(e=`pdftoppm`){return C(e,async(t,n)=>{if(t.length===0||t.includes(`--help`)||t.includes(`-h`))return zj();let r;try{r=Hj(t)}catch(t){return{stdout:``,stderr:`${e}: ${t instanceof Error?t.message:String(t)}\n`,exitCode:1}}try{let t=await qj(n,r.inputPath),i=Gj(r.format),a=r.outputRoot??Uj(kr(r.inputPath)),o=[];return await ia(t,{firstPage:r.firstPage,lastPage:r.singleFile?r.firstPage??1:r.lastPage,format:r.format,quality:r.quality,...Kj(r)},async(e,t)=>{let s=r.singleFile?`${a}.${i}`:Wj(a,e.pageNumber,t.lastPage,i);await n.fs.writeFile(n.fs.resolvePath(n.cwd,s),e.bytes),o.push(s)}),o.length===0?{stdout:``,stderr:`${e}: no pages to render\n`,exitCode:1}:{stdout:`${o.join(`
1575
- `)}\n`,stderr:``,exitCode:0}}catch(t){return{stdout:``,stderr:`${e}: ${t instanceof Error?t.message:String(t)}\n`,exitCode:1}}})}function Yj(e=`pdftotext`){return C(e,async(t,n)=>{let{runPdftotext:r}=await import(`./run-BVzzZSqz.js`);return r(e,t,n)})}function Xj(e){let t=e.filter(e=>e.teleportEligible===!0&&e.bootstrapId&&e.floatType);if(t.length===0)return null;let n=t.filter(e=>e.floatType===`standalone`),r=n.length>0?n:t;r.sort((e,t)=>(t.lastActivity??0)-(e.lastActivity??0));let i=r[0];return{runtimeId:i.runtimeId,bootstrapId:i.bootstrapId,floatType:i.floatType}}function Zj(){Yw(()=>()=>ie()),Jw(()=>()=>Xj(ie()))}const Qj=`/workspace/.plugins/sources`;function $j(e){return{stdout:e,stderr:``,exitCode:0}}function K(e,t=1){return{stdout:``,stderr:`${e}\n`,exitCode:t}}function eM(e,t){let n=w(t,{});return`error`in n?K(`plugin ${e}: ${n.error}`):{ok:!0,positionals:n.positionals}}function tM(){return`usage: plugin <command> [args]
1574
+ `,stderr:``,exitCode:0}}function zj(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 Bj(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 Vj(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=Bj(e[++d]),t=`jpeg`;break;case`-r`:n=zj(e[++d],`-r`);break;case`-f`:r=zj(e[++d],`-f`);break;case`-l`:i=zj(e[++d],`-l`);break;case`-scale-to`:a=zj(e[++d],`-scale-to`);break;case`-scale-to-x`:o=zj(e[++d],`-scale-to-x`);break;case`-scale-to-y`:s=zj(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 Hj(e){let t=e.lastIndexOf(`.`);return t>0?e.slice(0,t):e}function Uj(e,t,n,r){let i=String(n).length;return`${e}-${String(t).padStart(i,`0`)}.${r}`}function Wj(e){return e===`jpeg`?`jpg`:`png`}function Gj(e){return e.scaleToX===void 0?e.scaleToY===void 0?e.scaleTo===void 0?{scale:ca(e.dpi)}:{longEdge:e.scaleTo}:{height:e.scaleToY}:{width:e.scaleToX}}async function Kj(e,t){let n=e.fs.resolvePath(e.cwd,t),r=await e.fs.readFileBuffer(n);if(!oa(r))throw Error(`${t}: not a PDF file`);return r}function qj(e=`pdftoppm`){return C(e,async(t,n)=>{if(t.length===0||t.includes(`--help`)||t.includes(`-h`))return Rj();let r;try{r=Vj(t)}catch(t){return{stdout:``,stderr:`${e}: ${t instanceof Error?t.message:String(t)}\n`,exitCode:1}}try{let t=await Kj(n,r.inputPath),i=Wj(r.format),a=r.outputRoot??Hj(Ar(r.inputPath)),o=[];return await aa(t,{firstPage:r.firstPage,lastPage:r.singleFile?r.firstPage??1:r.lastPage,format:r.format,quality:r.quality,...Gj(r)},async(e,t)=>{let s=r.singleFile?`${a}.${i}`:Uj(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(`
1575
+ `)}\n`,stderr:``,exitCode:0}}catch(t){return{stdout:``,stderr:`${e}: ${t instanceof Error?t.message:String(t)}\n`,exitCode:1}}})}function Jj(e=`pdftotext`){return C(e,async(t,n)=>{let{runPdftotext:r}=await import(`./run-BVzzZSqz.js`);return r(e,t,n)})}function Yj(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 Xj(){Jw(()=>()=>ie()),qw(()=>()=>Yj(ie()))}const Zj=`/workspace/.plugins/sources`;function Qj(e){return{stdout:e,stderr:``,exitCode:0}}function K(e,t=1){return{stdout:``,stderr:`${e}\n`,exitCode:t}}function $j(e,t){let n=w(t,{});return`error`in n?K(`plugin ${e}: ${n.error}`):{ok:!0,positionals:n.positionals}}function eM(){return`usage: plugin <command> [args]
1576
1576
 
1577
1577
  Load Agent Plugins packages (agent-plugins.org spec v1.0.0): portable
1578
1578
  directories bundling Agent Skills (skills/*/SKILL.md) and MCP servers
@@ -1582,7 +1582,7 @@ Commands:
1582
1582
  install <path|repo> Validate the plugin and register it. <repo> is a
1583
1583
  GitHub reference (owner/repo, owner/repo@branch, or
1584
1584
  https://github.com/owner/repo[/tree/branch[/dir]]),
1585
- downloaded into ${Qj}/.
1585
+ downloaded into ${Zj}/.
1586
1586
  Skills surface through the standard skills discovery;
1587
1587
  streamable-http MCP servers are added to the MCP
1588
1588
  store as "<plugin>:<server>".
@@ -1604,36 +1604,36 @@ Examples:
1604
1604
  plugin list
1605
1605
  plugin info my-plugin
1606
1606
  plugin remove my-plugin
1607
- `}function nM(e={}){return C(`plugin`,async(t,n)=>{if(t.length===0||t[0]===`--help`||t[0]===`-h`)return $j(tM());let r=t[0],i=t.slice(1),a=n?.cwd??`/`;try{switch(r){case`install`:case`add`:return await lM(i,a,e);case`list`:case`ls`:return await pM(i,e);case`info`:return await mM(i,e);case`validate`:return await hM(i,a,e,la(n?.env));case`remove`:case`rm`:case`delete`:return await gM(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 rM(e){if(e.fs)return e.fs;let{VirtualFS:t}=await import(`./fs-D_cFUSir.js`).then(e=>e.t),{GLOBAL_FS_DB_NAME:n}=await import(`./global-db-DJXlpNui.js`).then(e=>e.n);return t.create({dbName:n})}async function iM(e,t,n){let r=_M(t,e);if(await n.exists(r))return{kind:`local`,root:r};let{parseGitHubRef:i}=await import(`./github-install-NHKpL-_w.js`).then(e=>e.t),a=i(e);if(a){let e=`${a.owner}/${a.repo}${a.branch?`@${a.branch}`:``}${a.path?`/${a.path}`:``}`;return{kind:`github`,ref:{...a,display:e}}}return{kind:`error`,message:`${r} does not exist and "${e}" is not a GitHub reference (owner/repo[@branch] or https://github.com/owner/repo[/tree/branch[/dir]])`}}function aM(e){let t=e.replace(/[^A-Za-z0-9._-]+/g,`-`);return/^\.+$/.test(t)?t.replace(/\./g,`_`):t}function oM(e){let t=[e.owner,e.repo,...e.path?[e.path]:[]];return`${Qj}/${t.map(aM).join(`--`)}`}async function sM(e,t,n,r){let{fetchRepoZip:i,stripZipPrefix:a,writeZipFilesToDir:o}=await import(`./github-zip-CMSbKC3q.js`).then(e=>e.i),s=await i(e.owner,e.repo,r,e.branch);if(s.status===`error`)return`failed to download ${e.display}: ${s.message}`;let c=a(s.files),l=e.path?e.path.replace(/^\/|\/$/g,``)+`/`:``;if(!c[`${l}plugin.json`])return`no plugin.json found at ${e.display} — not an Agent Plugins package`;try{await n.rm(t,{recursive:!0})}catch{}return await n.mkdir(t,{recursive:!0}),(await o(c,l,t,n,!1)).length===0?`no files found at ${e.display}`:null}async function cM(e,t){try{await e.rm(t,{recursive:!0})}catch{}}async function lM(e,t,n){if(T(e))return $j(`usage: plugin install <path|repo>
1607
+ `}function tM(e={}){return C(`plugin`,async(t,n)=>{if(t.length===0||t[0]===`--help`||t[0]===`-h`)return Qj(eM());let r=t[0],i=t.slice(1),a=n?.cwd??`/`;try{switch(r){case`install`:case`add`:return await cM(i,a,e);case`list`:case`ls`:return await fM(i,e);case`info`:return await pM(i,e);case`validate`:return await mM(i,a,e,ua(n?.env));case`remove`:case`rm`:case`delete`:return await hM(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 nM(e){if(e.fs)return e.fs;let{VirtualFS:t}=await import(`./fs-D_cFUSir.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 rM(e,t,n){let r=gM(t,e);if(await n.exists(r))return{kind:`local`,root:r};let{parseGitHubRef:i}=await import(`./github-install-NHKpL-_w.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 iM(e){let t=e.replace(/[^A-Za-z0-9._-]+/g,`-`);return/^\.+$/.test(t)?t.replace(/\./g,`_`):t}function aM(e){let t=[e.owner,e.repo,...e.path?[e.path]:[]];return`${Zj}/${t.map(iM).join(`--`)}`}async function oM(e,t,n,r){let{fetchRepoZip:i,stripZipPrefix:a,writeZipFilesToDir:o}=await import(`./github-zip-CMSbKC3q.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 sM(e,t){try{await e.rm(t,{recursive:!0})}catch{}}async function cM(e,t,n){if(T(e))return Qj(`usage: plugin install <path|repo>
1608
1608
 
1609
1609
  Loads the Agent Plugins package at <path>, or downloads it from a GitHub
1610
1610
  reference (owner/repo, owner/repo@branch, or
1611
1611
  https://github.com/owner/repo[/tree/branch[/dir]]) into
1612
- ${Qj}/ first. Validates plugin.json (closed
1612
+ ${Zj}/ first. Validates plugin.json (closed
1613
1613
  schema, name constraints), discovers skills/*/SKILL.md, and validates
1614
1614
  mcp.json. On success the plugin is recorded in
1615
1615
  /workspace/.plugins/plugins.json — its skills then surface through the
1616
1616
  standard skills discovery, and each supported streamable-http MCP server
1617
1617
  is registered in the MCP store as "<plugin>:<server>".
1618
- `);let r=eM(`install`,e);if(!(`ok`in r))return r;if(r.positionals.length<1)return K(`plugin install: expected <path|repo>`);let i=await rM(n),a=await iM(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=oM(a.ref),s=a.ref.display;let e=await sM(a.ref,o,i,n.fetch);if(e)return K(`plugin install: ${e}`)}else o=a.root;let{loadPluginFromDirectory:c}=await import(`./loader-D4Fuki1u.js`),l=await c(i,o);if(!l.ok)return a.kind===`github`&&await cM(i,o),K(`plugin install: plugin at ${s??o} was rejected:\n${vM(l.diagnostics)}`);let{plugin:u}=l,d=u.manifest.name,{getInstalledPlugin:f,setInstalledPlugin:p}=await import(`./store-Cset-yBv.js`),m=await f(d,n.fs);if(m&&m.root!==o)return a.kind===`github`&&await cM(i,o),K(`plugin install: a plugin named "${d}" is already installed from ${m.root} (remove it first)`);let h=await fM(u,n),g=await dM(d,m?.mcpServerNames,h.registered,n);return await p(d,{root:o,version:u.manifest.version,description:u.manifest.description,installedAt:new Date().toISOString(),mcpServerNames:h.registered,...s?{source:s}:{}},n.fs),$j(uM(u,h,g,s??o,l.diagnostics))}function uM(e,t,n,r,i){let a=e.manifest.name,o=t.registered,s=e.mcp.servers.filter(e=>e.status!==`supported`),c=[`Installed agent plugin "${a}"${e.manifest.version?` v${e.manifest.version}`:``} from ${r}`,` skills: ${e.skills.length}${e.skills.length>0?` (${e.skills.map(e=>e.name).join(`, `)})`:``}`,` mcp: ${o.length} registered${o.length>0?` (${o.join(`, `)})`:``}${s.length>0?`, ${s.length} skipped`:``}${n>0?`, ${n} removed from previous install`:``}`];return t.conflicts.length>0&&c.push(` warning: not bridged — MCP server name(s) already in use and not owned by this plugin: ${t.conflicts.join(`, `)} (remove them with \`mcp remove\` first)`),i.length>0&&c.push(`Diagnostics:`,vM(i)),c.join(`
1618
+ `);let r=$j(`install`,e);if(!(`ok`in r))return r;if(r.positionals.length<1)return K(`plugin install: expected <path|repo>`);let i=await nM(n),a=await rM(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=aM(a.ref),s=a.ref.display;let e=await oM(a.ref,o,i,n.fetch);if(e)return K(`plugin install: ${e}`)}else o=a.root;let{loadPluginFromDirectory:c}=await import(`./loader-D4Fuki1u.js`),l=await c(i,o);if(!l.ok)return a.kind===`github`&&await sM(i,o),K(`plugin install: plugin at ${s??o} was rejected:\n${_M(l.diagnostics)}`);let{plugin:u}=l,d=u.manifest.name,{getInstalledPlugin:f,setInstalledPlugin:p}=await import(`./store-Cset-yBv.js`),m=await f(d,n.fs);if(m&&m.root!==o)return a.kind===`github`&&await sM(i,o),K(`plugin install: a plugin named "${d}" is already installed from ${m.root} (remove it first)`);let h=await dM(u,n),g=await uM(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),Qj(lM(u,h,g,s??o,l.diagnostics))}function lM(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:`,_M(i)),c.join(`
1619
1619
  `)+`
1620
- `}async function dM(e,t,n,r){let i=(t??[]).filter(e=>!n.includes(e));if(i.length===0)return 0;let{deleteServer:a,getServer:o}=await import(`./store-tvt1tIjf.js`).then(e=>e.r),s=0;for(let t of i)(await o(t,r.fs))?.pluginOrigin===e&&await a(t,r.fs)&&(s+=1);return s}async function fM(e,t){let n=e.mcp.servers.filter(e=>e.status===`supported`);if(n.length===0)return{registered:[],conflicts:[]};let{getServer:r,setServer:i}=await import(`./store-tvt1tIjf.js`).then(e=>e.r),{McpClient:a}=await import(`./client-D5zdJCVT.js`),o=[],s=[];for(let c of n){let n=c.config,l=`${e.manifest.name}:${c.name}`,u=await r(l,t.fs);if(u&&u.pluginOrigin!==e.manifest.name){s.push(l);continue}let d=[];try{let e=new a({url:n.url,headers:n.headers});await e.initialize(),d=await e.toolsList()}catch{}await i(l,{url:n.url,...n.headers?{headers:n.headers}:{},tools:d,addedAt:new Date().toISOString(),pluginOrigin:e.manifest.name},t.fs),o.push(l)}return{registered:o,conflicts:s}}async function pM(e,t){if(T(e))return $j(`usage: plugin list
1621
- `);let n=eM(`list`,e);if(!(`ok`in n))return n;let{listInstalledPlugins:r}=await import(`./store-Cset-yBv.js`),i=await r(t.fs),a=Object.keys(i).sort();if(a.length===0)return $j("No agent plugins installed. Use `plugin install <path>`.\n");let o=[[`NAME`,`VERSION`,`ROOT`,`MCP`]];for(let e of a){let t=i[e];o.push([e,t.version??`-`,t.root,String(t.mcpServerNames?.length??0)])}let s=o[0].map((e,t)=>Math.max(...o.map(e=>e[t].length)));return $j(o.map(e=>e.map((e,t)=>e.padEnd(s[t])).join(` `)).join(`
1620
+ `}async function uM(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-tvt1tIjf.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 dM(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-tvt1tIjf.js`).then(e=>e.r),{McpClient:a}=await import(`./client-D5zdJCVT.js`),o=[],s=[];for(let c of n){let n=c.config,l=`${e.manifest.name}:${c.name}`,u=await r(l,t.fs);if(u&&u.pluginOrigin!==e.manifest.name){s.push(l);continue}let d=[];try{let e=new a({url:n.url,headers:n.headers});await e.initialize(),d=await e.toolsList()}catch{}await i(l,{url:n.url,...n.headers?{headers:n.headers}:{},tools:d,addedAt:new Date().toISOString(),pluginOrigin:e.manifest.name},t.fs),o.push(l)}return{registered:o,conflicts:s}}async function fM(e,t){if(T(e))return Qj(`usage: plugin list
1621
+ `);let n=$j(`list`,e);if(!(`ok`in n))return n;let{listInstalledPlugins:r}=await import(`./store-Cset-yBv.js`),i=await r(t.fs),a=Object.keys(i).sort();if(a.length===0)return Qj("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 Qj(o.map(e=>e.map((e,t)=>e.padEnd(s[t])).join(` `)).join(`
1622
1622
  `)+`
1623
- `)}async function mM(e,t){if(T(e))return $j(`usage: plugin info <name>
1624
- `);let n=eM(`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-Cset-yBv.js`),a=await i(r,t.fs);if(!a)return K(`plugin info: no installed plugin named "${r}"`);let o=await rM(t),{loadPluginFromDirectory:s}=await import(`./loader-D4Fuki1u.js`),c=await s(o,a.root);if(!c.ok)return K(`plugin info: plugin at ${a.root} no longer loads:\n${vM(c.diagnostics)}`);let{plugin:l}=c,u=l.manifest,d=[`${u.name}${u.version?` v${u.version}`:``}`,...u.description?[` ${u.description}`]:[],` root: ${l.root}`,...u.license?[` license: ${u.license}`]:[],...u.homepage?[` home: ${u.homepage}`]:[],``,`Skills (${l.skills.length}):`,...l.skills.map(e=>` ${e.name} ${e.description}`),``,`MCP servers (${l.mcp.servers.length}):`,...l.mcp.servers.map(e=>e.status===`supported`?` ${e.name} ${e.config.type} ${e.config.url}`:` ${e.name} [skipped: ${e.reason}]`)];return c.diagnostics.length>0&&d.push(``,`Diagnostics:`,vM(c.diagnostics)),$j(d.join(`
1623
+ `)}async function pM(e,t){if(T(e))return Qj(`usage: plugin info <name>
1624
+ `);let n=$j(`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-Cset-yBv.js`),a=await i(r,t.fs);if(!a)return K(`plugin info: no installed plugin named "${r}"`);let o=await nM(t),{loadPluginFromDirectory:s}=await import(`./loader-D4Fuki1u.js`),c=await s(o,a.root);if(!c.ok)return K(`plugin info: plugin at ${a.root} no longer loads:\n${_M(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:`,_M(c.diagnostics)),Qj(d.join(`
1625
1625
  `)+`
1626
- `)}async function hM(e,t,n,r){if(T(e))return $j(`usage: plugin validate <path|repo>
1627
- `);let i=eM(`validate`,e);if(!(`ok`in i))return i;if(i.positionals.length<1)return K(`plugin validate: expected <path|repo>`);let a=await rM(n),o=await iM(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/${oM(o.ref).split(`/`).pop()}`;let e=await sM(o.ref,c,a,n.fetch);if(e)return K(`plugin validate: ${e}`);s=c}else s=o.root;let{loadPluginFromDirectory:l}=await import(`./loader-D4Fuki1u.js`),u;try{u=await l(a,s)}finally{c&&await cM(a,c)}if(!u.ok)return{stdout:``,stderr:`plugin validate: REJECTED\n${vM(u.diagnostics)}\n`,exitCode:1};let{plugin:d}=u,f=d.mcp.servers.filter(e=>e.status===`supported`).length,p=[`plugin validate: OK — "${d.manifest.name}"${d.manifest.version?` v${d.manifest.version}`:``}`,` skills: ${d.skills.length}`,` mcp servers: ${f} supported, ${d.mcp.servers.length-f} skipped (mcp.json ${d.mcp.status})`];return u.diagnostics.length>0&&p.push(`Diagnostics:`,vM(u.diagnostics)),$j(p.join(`
1626
+ `)}async function mM(e,t,n,r){if(T(e))return Qj(`usage: plugin validate <path|repo>
1627
+ `);let i=$j(`validate`,e);if(!(`ok`in i))return i;if(i.positionals.length<1)return K(`plugin validate: expected <path|repo>`);let a=await nM(n),o=await rM(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/${aM(o.ref).split(`/`).pop()}`;let e=await oM(o.ref,c,a,n.fetch);if(e)return K(`plugin validate: ${e}`);s=c}else s=o.root;let{loadPluginFromDirectory:l}=await import(`./loader-D4Fuki1u.js`),u;try{u=await l(a,s)}finally{c&&await sM(a,c)}if(!u.ok)return{stdout:``,stderr:`plugin validate: REJECTED\n${_M(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:`,_M(u.diagnostics)),Qj(p.join(`
1628
1628
  `)+`
1629
- `)}async function gM(e,t){if(T(e))return $j(`usage: plugin remove <name>
1630
- `);let n=eM(`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-Cset-yBv.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-tvt1tIjf.js`).then(e=>e.r);for(let i of o.mcpServerNames)(await n(i,t.fs))?.pluginOrigin===r&&await e(i,t.fs)&&(s+=1)}await a(r,t.fs);let c=o.root.startsWith(`${Qj}/`);return c&&await cM(await rM(t),o.root),$j([`Removed agent plugin "${r}"`,` registry: removed`,` mcp servers: ${s} removed`,c?` files: removed (${o.root})`:` files: left in place (${o.root})`].join(`
1629
+ `)}async function hM(e,t){if(T(e))return Qj(`usage: plugin remove <name>
1630
+ `);let n=$j(`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-Cset-yBv.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-tvt1tIjf.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(`${Zj}/`);return c&&await sM(await nM(t),o.root),Qj([`Removed agent plugin "${r}"`,` registry: removed`,` mcp servers: ${s} removed`,c?` files: removed (${o.root})`:` files: left in place (${o.root})`].join(`
1631
1631
  `)+`
1632
- `)}function _M(e,t){let n=t.startsWith(`/`)?t:`${e.replace(/\/$/,``)}/${t}`,r=[];for(let e of n.split(`/`))e!==``&&e!==`.`&&(e===`..`?r.pop():r.push(e));return`/${r.join(`/`)}`}function vM(e){return e.map(e=>` ${e.level===`error`?`error`:`warn `} [${e.component}] ${e.message}`).join(`
1633
- `)}const yM=[`pid`,`ppid`,`kind`,`stat`,`start`,`scoop`,`command`],bM=[`pid`,`ppid`,`stat`,`start`,`scoop`,`command`],xM={running:`R`,pending:`S`,exited:`Z`,killed:`K`},SM=[`-a`,`-A`,`-e`,`--all`,`-T`,`--tree`],CM=[`-o`,`--columns`];function wM(e={}){return C(`ps`,async t=>{if(T(t,{valueFlags:CM}))return RM();let n=e.processManager??TM();if(!n)return{stdout:``,stderr:`ps: no process manager available in this runtime
1634
- `,exitCode:1};let r=w(t,{bool:SM,value:CM});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=bM,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=EM(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?LM(l):l.map(e=>({proc:e,depth:0})),d=DM(i,u.map(({proc:e})=>e),s!==void 0),f=u.map(({proc:e,depth:t})=>AM(e,i,t,a,d));return{stdout:[OM(i,d),...f].join(`
1632
+ `)}function gM(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 _M(e){return e.map(e=>` ${e.level===`error`?`error`:`warn `} [${e.component}] ${e.message}`).join(`
1633
+ `)}const vM=[`pid`,`ppid`,`kind`,`stat`,`start`,`scoop`,`command`],yM=[`pid`,`ppid`,`stat`,`start`,`scoop`,`command`],bM={running:`R`,pending:`S`,exited:`Z`,killed:`K`},xM=[`-a`,`-A`,`-e`,`--all`,`-T`,`--tree`],SM=[`-o`,`--columns`];function CM(e={}){return C(`ps`,async t=>{if(T(t,{valueFlags:SM}))return LM();let n=e.processManager??wM();if(!n)return{stdout:``,stderr:`ps: no process manager available in this runtime
1634
+ `,exitCode:1};let r=w(t,{bool:xM,value:SM});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=yM,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=TM(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?IM(l):l.map(e=>({proc:e,depth:0})),d=EM(i,u.map(({proc:e})=>e),s!==void 0),f=u.map(({proc:e,depth:t})=>kM(e,i,t,a,d));return{stdout:[DM(i,d),...f].join(`
1635
1635
  `)+`
1636
- `,stderr:``,exitCode:0}})}function TM(){let e=globalThis.__slicc_pm;return e instanceof Object&&typeof e.list==`function`?e:null}function EM(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(!yM.includes(e))return Error(`unknown column '${e}'; supported: ${yM.join(`, `)}`);n.push(e)}return n}function DM(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,NM(e).length);return{full:!0,width:r}}function OM(e,t){return e.map(e=>kM(e,t)).join(` `)}function kM(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 AM(e,t,n,r,i){return t.map(t=>jM(e,t,n,r,i)).join(` `)}function jM(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 xM[e.status];case`start`:return MM(e.startedAt);case`scoop`:return PM(e,i);case`command`:return FM(e,n,r)}}function MM(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 NM(e){return e.owner.kind===`cone`?`cone`:e.owner.kind===`system`?`system`:e.owner.kind===`jshd`?`jshd`:e.owner.scoopJid??`scoop`}function PM(e,t){let n=NM(e);return(t.full?n:n.slice(0,t.width)).padEnd(t.width)}function FM(e,t,n){let r=n&&t>0?` `.repeat(t-1)+`└─ `:``,i=e.argv.length===0?`[${e.kind}]`:e.argv.map(IM).join(` `);return r+(i.length>80?i.slice(0,79)+`…`:i)}function IM(e){return e===``?`''`:/^[A-Za-z0-9_./:=@%+-]+$/.test(e)?e:e.includes(`"`)&&!e.includes(`'`)?`'${e}'`:`"${e.replace(/\\/g,`\\\\`).replace(/"/g,`\\"`)}"`}function LM(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 RM(){return{stdout:`Usage: ps [-a] [-T] [-o col[,col…]]
1636
+ `,stderr:``,exitCode:0}})}function wM(){let e=globalThis.__slicc_pm;return e instanceof Object&&typeof e.list==`function`?e:null}function TM(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(!vM.includes(e))return Error(`unknown column '${e}'; supported: ${vM.join(`, `)}`);n.push(e)}return n}function EM(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,MM(e).length);return{full:!0,width:r}}function DM(e,t){return e.map(e=>OM(e,t)).join(` `)}function OM(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 kM(e,t,n,r,i){return t.map(t=>AM(e,t,n,r,i)).join(` `)}function AM(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 bM[e.status];case`start`:return jM(e.startedAt);case`scoop`:return NM(e,i);case`command`:return PM(e,n,r)}}function jM(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 MM(e){return e.owner.kind===`cone`?`cone`:e.owner.kind===`system`?`system`:e.owner.kind===`jshd`?`jshd`:e.owner.scoopJid??`scoop`}function NM(e,t){let n=MM(e);return(t.full?n:n.slice(0,t.width)).padEnd(t.width)}function PM(e,t,n){let r=n&&t>0?` `.repeat(t-1)+`└─ `:``,i=e.argv.length===0?`[${e.kind}]`:e.argv.map(FM).join(` `);return r+(i.length>80?i.slice(0,79)+`…`:i)}function FM(e){return e===``?`''`:/^[A-Za-z0-9_./:=@%+-]+$/.test(e)?e:e.includes(`"`)&&!e.includes(`'`)?`'${e}'`:`"${e.replace(/\\/g,`\\\\`).replace(/"/g,`\\"`)}"`}function IM(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 LM(){return{stdout:`Usage: ps [-a] [-T] [-o col[,col…]]
1637
1637
 
1638
1638
  List processes tracked by the kernel.
1639
1639
 
@@ -1666,9 +1666,9 @@ Examples:
1666
1666
  ps -a -T full tree
1667
1667
  ps -o pid,kind,stat just three columns
1668
1668
  ps -o scoop,stat,pid full scoop jid, with STAT and PID
1669
- `,stderr:``,exitCode:0}}const zM=new Set([`dev`,`proc`,`lib`,`bin`,`usr`,`etc`,`home`,`tmp`]);async function BM(e,t=zM){let n=[],r=new Set;try{let i=await e.readdir(`/`);for(let a of i){if(!a||a.includes(`/`)||t.has(a))continue;let i=`/${a}`,o=!1;try{o=!!(await e.stat(i)).isDirectory}catch{continue}o&&(r.has(i)||(r.add(i),n.push(i)))}}catch{}return r.has(`/tmp`)||(r.add(`/tmp`),n.push(`/tmp`)),n}function VM(e,t){let n=e;if(typeof n.listMountPoints!=`function`)return[];let r=e=>{for(let n of t)if(e===n||e.startsWith(n===`/`?`/`:n+`/`)||n.startsWith(e+`/`))return!0;return!1},i=[];for(let e of n.listMountPoints())e.kind!==`proc`&&r(e.path)&&i.push({path:e.path,kind:e.kind});return i}function HM(){try{if(typeof globalThis.navigator?.storage?.getDirectory==`function`)return`slicc-fs`}catch{}}function UM(e){return{reader:{exists:t=>e.fs.exists(t),isDirectory:async t=>{try{return(await e.fs.stat(t)).isDirectory}catch{return!1}},readFile:t=>e.fs.readFile(t)},fromDir:e.cwd}}async function WM(e,t){try{let n=await e.readFile(`${t}/package.json`),r=JSON.parse(n);return typeof r.version==`string`?r.version:null}catch{return null}}function GM(e,t){return`installed pyodide ${e} is not the supported version ${t}: run \`ipk uninstall pyodide\` then \`ipk add pyodide@${t}\``}function KM(){return{stdout:`usage: python3 [-c code | script.py] [args...]
1670
- `,stderr:``,exitCode:0}}function qM(){return{stdout:`Python 3.14 (Pyodide)
1671
- `,stderr:``,exitCode:0}}async function JM(e,t,n){if(t[0]===`-c`){if(!t[1])return{kind:`result`,result:{stdout:``,stderr:`${e}: option requires an argument -- 'c'\n`,exitCode:2}};let n=t[1];return{kind:`ok`,code:n,filename:`-c`,sysArgv:[`-c`,...t.slice(2)],procArgv:[e,`-c`,n,...t.slice(2)]}}if(t.length>0&&!t[0].startsWith(`-`)){let r=t[0],i=n.fs.resolvePath(n.cwd,r);return await n.fs.exists(i)?{kind:`ok`,code:await n.fs.readFile(i),filename:r,sysArgv:[r,...t.slice(1)],procArgv:[e,r,...t.slice(1)]}:{kind:`result`,result:{stdout:``,stderr:`${e}: can't open file '${r}': [Errno 2] No such file or directory\n`,exitCode:2}}}return P(n.stdin).trim().length>0?{kind:`ok`,code:P(n.stdin),filename:`<stdin>`,sysArgv:[`<stdin>`],procArgv:[e]}:t.length>0?{kind:`result`,result:{stdout:``,stderr:`${e}: unsupported option '${t[0]}'\n`,exitCode:2}}:{kind:`result`,result:{stdout:``,stderr:`${e}: no input provided (use -c CODE, script path, or stdin)\n`,exitCode:2}}}async function YM(e){let t=UM(e),n=await Qr(t);if(!n)return{kind:`result`,result:{stdout:``,stderr:`${Zr}\n`,exitCode:1}};let r=await WM(t.reader,n);return r?r===Vr?{kind:`ok`,assetRoot:n}:{kind:`result`,result:{stdout:``,stderr:`${GM(r,Vr)}\n`,exitCode:1}}:{kind:`result`,result:{stdout:``,stderr:`${Zr}\n`,exitCode:1}}}const XM=new Set(`EsSuBIPqObdR`);function ZM(e){let t=0;for(;t<e.length&&/^-[A-Za-z]+$/.test(e[t]);){let n=e[t].slice(1);if(n===`W`||n===`X`){t+=2;continue}if(![...n].every(e=>XM.has(e)))break;t++}return t===0?e:e.slice(t)}function QM(e,t={}){return C(e,async(n,r)=>{let i=ZM(n),a=i[0];if(a===`--help`||a===`-h`)return KM();if(a===`--version`||a===`-V`)return qM();let o=await JM(e,i,r);if(o.kind===`result`)return o.result;let{code:s,filename:c,sysArgv:l,procArgv:u}=o,d=await BM(r.fs),f=VM(r.fs,d),p=t.buildProcessConfig?.(r.env),m=p?.processManager??$M(),h=p?.owner??{kind:`system`},g=p?.getParentPid?.(),_=t.realmFactory??ii(),v=t.pyodideIndexURL??vi(),ee=t.pyodideAssetRoot;if(!ee&&v===void 0){let e=await YM(r);if(e.kind===`result`)return e.result;ee=e.assetRoot}let te=c===`<stdin>`?``:P(r.stdin),ne=HM();return m?mi({pm:m,realmFactory:_,owner:h,kind:`py`,code:s,argv:u,realmArgv:l,env:Object.fromEntries(r.env.entries()),cwd:r.cwd,filename:c,ctx:r,stdin:te,pyodideIndexURL:v,pyodideAssetRoot:ee,pyodideMountDirs:d,opfsMountDbName:ne,mountPoints:f,procKind:`py`,ppid:g,syncFsBridgeEnabled:ri()}):tN({realmFactory:_,owner:h,code:s,argv:u,realmArgv:l,env:Object.fromEntries(r.env.entries()),cwd:r.cwd,filename:c,ctx:r,stdin:te,pyodideIndexURL:v,pyodideAssetRoot:ee,pyodideMountDirs:d,opfsMountDbName:ne,mountPoints:f})})}function $M(){let e=globalThis.__slicc_pm;return e&&typeof e==`object`&&typeof e.spawn==`function`&&typeof e.onSignal==`function`?e:null}let eN=null;async function tN(e){if(!eN){let{ProcessManager:e}=await import(`./process-manager-BkhAohXT.js`).then(e=>e.n);eN=new e}return mi({pm:eN,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:ri()})}function nN(){return C(`rg`,async(e,t)=>{let{runRg:n}=await import(`./run-DniTiLYn.js`);return n(e,t)})}function rN(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 iN(){return null}function aN(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=oN(r),o=oN(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 oN(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 sN(){return{stdout:`rsync — sync files between local VFS and a remote tray runtime
1669
+ `,stderr:``,exitCode:0}}const RM=new Set([`dev`,`proc`,`lib`,`bin`,`usr`,`etc`,`home`,`tmp`]);async function zM(e,t=RM){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 BM(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 VM(){try{if(typeof globalThis.navigator?.storage?.getDirectory==`function`)return`slicc-fs`}catch{}}function HM(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 UM(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 WM(e,t){return`installed pyodide ${e} is not the supported version ${t}: run \`ipk uninstall pyodide\` then \`ipk add pyodide@${t}\``}function GM(){return{stdout:`usage: python3 [-c code | script.py] [args...]
1670
+ `,stderr:``,exitCode:0}}function KM(){return{stdout:`Python 3.14 (Pyodide)
1671
+ `,stderr:``,exitCode:0}}async function qM(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 JM(e){let t=HM(e),n=await $r(t);if(!n)return{kind:`result`,result:{stdout:``,stderr:`${Qr}\n`,exitCode:1}};let r=await UM(t.reader,n);return r?r===Hr?{kind:`ok`,assetRoot:n}:{kind:`result`,result:{stdout:``,stderr:`${WM(r,Hr)}\n`,exitCode:1}}:{kind:`result`,result:{stdout:``,stderr:`${Qr}\n`,exitCode:1}}}const YM=new Set(`EsSuBIPqObdR`);function XM(e){let t=0;for(;t<e.length&&/^-[A-Za-z]+$/.test(e[t]);){let n=e[t].slice(1);if(n===`W`||n===`X`){t+=2;continue}if(![...n].every(e=>YM.has(e)))break;t++}return t===0?e:e.slice(t)}function ZM(e,t={}){return C(e,async(n,r)=>{let i=XM(n),a=i[0];if(a===`--help`||a===`-h`)return GM();if(a===`--version`||a===`-V`)return KM();let o=await qM(e,i,r);if(o.kind===`result`)return o.result;let{code:s,filename:c,sysArgv:l,procArgv:u}=o,d=await zM(r.fs),f=BM(r.fs,d),p=t.buildProcessConfig?.(r.env),m=p?.processManager??QM(),h=p?.owner??{kind:`system`},g=p?.getParentPid?.(),_=t.realmFactory??ai(),v=t.pyodideIndexURL??yi(),ee=t.pyodideAssetRoot;if(!ee&&v===void 0){let e=await JM(r);if(e.kind===`result`)return e.result;ee=e.assetRoot}let te=c===`<stdin>`?``:P(r.stdin),ne=VM();return m?hi({pm:m,realmFactory:_,owner:h,kind:`py`,code:s,argv:u,realmArgv:l,env:Object.fromEntries(r.env.entries()),cwd:r.cwd,filename:c,ctx:r,stdin:te,pyodideIndexURL:v,pyodideAssetRoot:ee,pyodideMountDirs:d,opfsMountDbName:ne,mountPoints:f,procKind:`py`,ppid:g,syncFsBridgeEnabled:ii()}):eN({realmFactory:_,owner:h,code:s,argv:u,realmArgv:l,env:Object.fromEntries(r.env.entries()),cwd:r.cwd,filename:c,ctx:r,stdin:te,pyodideIndexURL:v,pyodideAssetRoot:ee,pyodideMountDirs:d,opfsMountDbName:ne,mountPoints:f})})}function QM(){let e=globalThis.__slicc_pm;return e&&typeof e==`object`&&typeof e.spawn==`function`&&typeof e.onSignal==`function`?e:null}let $M=null;async function eN(e){if(!$M){let{ProcessManager:e}=await import(`./process-manager-BkhAohXT.js`).then(e=>e.n);$M=new e}return hi({pm:$M,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:ii()})}function tN(){return C(`rg`,async(e,t)=>{let{runRg:n}=await import(`./run-DniTiLYn.js`);return n(e,t)})}function nN(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 rN(){return null}function iN(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=aN(r),o=aN(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 aN(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 oN(){return{stdout:`rsync — sync files between local VFS and a remote tray runtime
1672
1672
 
1673
1673
  Usage:
1674
1674
  rsync [flags] <local-path> <runtime-id>:<remote-path> # push
@@ -1684,21 +1684,21 @@ Examples:
1684
1684
  rsync /workspace follower-abc123:/workspace
1685
1685
  rsync --delete /shared leader:/shared
1686
1686
  rsync follower-abc123:/workspace/project /workspace/project
1687
- `,stderr:``,exitCode:0}}async function cN(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 lN(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 uN(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 dN(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 fN(e){let t=e.lastIndexOf(`/`);return t<=0?`/`:e.slice(0,t)}async function pN(e,n,r){let i=[],{localPath:a,remotePath:o,runtimeId:s,verbose:c,dryRun:l}=r,u=rN(await cN(e,a),await lN(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(`
1687
+ `,stderr:``,exitCode:0}}async function sN(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 cN(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 lN(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 uN(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 dN(e){let t=e.lastIndexOf(`/`);return t<=0?`/`:e.slice(0,t)}async function fN(e,n,r){let i=[],{localPath:a,remotePath:o,runtimeId:s,verbose:c,dryRun:l}=r,u=nN(await sN(e,a),await cN(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(`
1688
1688
  `)+`
1689
- `,stderr:``,exitCode:0};for(let r of[...u.toAdd,...u.toUpdate]){let c=a+`/`+r,l=o+`/`+r;await dN(n,s,fN(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(`
1689
+ `,stderr:``,exitCode:0};for(let r of[...u.toAdd,...u.toUpdate]){let c=a+`/`+r,l=o+`/`+r;await uN(n,s,dN(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(`
1690
1690
  `)+`
1691
1691
  `,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(`
1692
1692
  `)+`
1693
1693
  `,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(`
1694
1694
  `)+`
1695
- `,stderr:``,exitCode:0}}async function mN(e,t,r){let i=[],{localPath:a,remotePath:o,runtimeId:s,verbose:c,dryRun:l}=r,u=rN(await lN(t,s,o),await cN(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(`
1695
+ `,stderr:``,exitCode:0}}async function pN(e,t,r){let i=[],{localPath:a,remotePath:o,runtimeId:s,verbose:c,dryRun:l}=r,u=nN(await cN(t,s,o),await sN(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(`
1696
1696
  `)+`
1697
- `,stderr:``,exitCode:0};for(let r of[...u.toAdd,...u.toUpdate]){let i=o+`/`+r,c=a+`/`+r,l=fN(c);await e.exists(l)||await e.mkdir(l,{recursive:!0});let u=await uN(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(`
1697
+ `,stderr:``,exitCode:0};for(let r of[...u.toAdd,...u.toUpdate]){let i=o+`/`+r,c=a+`/`+r,l=dN(c);await e.exists(l)||await e.mkdir(l,{recursive:!0});let u=await lN(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(`
1698
1698
  `)+`
1699
- `,stderr:``,exitCode:0}}function hN(e={}){let t=e.fs,n=e.getSendFsRequest??iN;return C(`rsync`,async e=>{if(e.includes(`--help`)||e.includes(`-h`)||e.length===0)return sN();if(!t)return{stdout:``,stderr:`rsync: no filesystem available
1699
+ `,stderr:``,exitCode:0}}function mN(e={}){let t=e.fs,n=e.getSendFsRequest??rN;return C(`rsync`,async e=>{if(e.includes(`--help`)||e.includes(`-h`)||e.length===0)return oN();if(!t)return{stdout:``,stderr:`rsync: no filesystem available
1700
1700
  `,exitCode:1};let r=n();if(!r)return{stdout:``,stderr:`rsync: not connected to a tray — rsync requires a tray connection
1701
- `,exitCode:1};let i=aN(e);if(`error`in i)return i.error===`__help__`?sN():{stdout:``,stderr:`rsync: ${i.error}\n`,exitCode:1};try{return i.direction===`push`?await pN(t,r,i):await mN(t,r,i)}catch(e){return{stdout:``,stderr:`rsync: ${e instanceof Error?e.message:String(e)}\n`,exitCode:1}}})}function gN(){return{stdout:`usage: say [-v voice] [-r rate] [-l lang] [-o file] [--list] <text>
1701
+ `,exitCode:1};let i=iN(e);if(`error`in i)return i.error===`__help__`?oN():{stdout:``,stderr:`rsync: ${i.error}\n`,exitCode:1};try{return i.direction===`push`?await fN(t,r,i):await pN(t,r,i)}catch(e){return{stdout:``,stderr:`rsync: ${e instanceof Error?e.message:String(e)}\n`,exitCode:1}}})}function hN(){return{stdout:`usage: say [-v voice] [-r rate] [-l lang] [-o file] [--list] <text>
1702
1702
  say --status | --warmup
1703
1703
 
1704
1704
  Speaks the given text. Uses on-device Kokoro voices when the model
@@ -1717,14 +1717,14 @@ Examples:
1717
1717
  [web speech] otherwise); kokoro voices lead when ready
1718
1718
  --status Show the on-device voice state (downloading/ready + ETA)
1719
1719
  --warmup Stage + start the on-device voice download in the background
1720
- `,stderr:``,exitCode:0}}function _N(e){switch(e.state){case`ready`:return`voice engine: ready
1720
+ `,stderr:``,exitCode:0}}function gN(e){switch(e.state){case`ready`:return`voice engine: ready
1721
1721
  `;case`failed`:return`voice engine: failed (re-run say --warmup to retry)
1722
1722
  `;case`idle`:return`voice engine: not downloaded (run say --warmup)
1723
- `;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 vN(e){return e instanceof Error?e.message:String(e)}let yN=!1,bN=null;function xN(){return yN?Promise.resolve(speechSynthesis.getVoices()):(bN||=new Promise(e=>{let t=speechSynthesis.getVoices();if(t.length>0){yN=!0,e(t);return}let n=()=>{yN=!0,speechSynthesis.removeEventListener(`voiceschanged`,n),e(speechSynthesis.getVoices())};speechSynthesis.addEventListener(`voiceschanged`,n),setTimeout(()=>{speechSynthesis.removeEventListener(`voiceschanged`,n),yN=!0,e(speechSynthesis.getVoices())},1e3)}),bN)}const SN={"-v":`a voice name`,"-r":`a rate value`,"-l":`a language tag`,"-o":`an output file path`,"--out":`an output file path`};function CN(e){return e!=null&&(!e.startsWith(`-`)||e===`-`)}function wN(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 TN(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 SN){let n=CN(r+1<e.length?e[r+1]:void 0)?e[++r]:null;if(n==null)return q(`${i} requires ${SN[i]}`);let a=wN(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 EN(e){let t=e.onDevice?`[kokoro]`:`[web speech]`;return`${e.name} (${e.lang}) ${t}${e.default?` [default]`:``}`}async function DN(e){if(e.local){let{kokoroVoicesIfReady:e}=await import(`./speech-page-realm-stub-C7EPKrHd.js`),t=e().map(e=>EN({name:e.id,lang:e.lang,onDevice:e.onDevice})),n=(await xN()).map(e=>EN({name:e.name,lang:e.lang,onDevice:!1,default:e.default}));return{stdout:[...t,...n].join(`
1723
+ `;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 _N(e){return e instanceof Error?e.message:String(e)}let vN=!1,yN=null;function bN(){return vN?Promise.resolve(speechSynthesis.getVoices()):(yN||=new Promise(e=>{let t=speechSynthesis.getVoices();if(t.length>0){vN=!0,e(t);return}let n=()=>{vN=!0,speechSynthesis.removeEventListener(`voiceschanged`,n),e(speechSynthesis.getVoices())};speechSynthesis.addEventListener(`voiceschanged`,n),setTimeout(()=>{speechSynthesis.removeEventListener(`voiceschanged`,n),vN=!0,e(speechSynthesis.getVoices())},1e3)}),yN)}const xN={"-v":`a voice name`,"-r":`a rate value`,"-l":`a language tag`,"-o":`an output file path`,"--out":`an output file path`};function SN(e){return e!=null&&(!e.startsWith(`-`)||e===`-`)}function CN(e,t,n){switch(t){case`-v`:return e.voiceName=n,null;case`-l`:return e.lang=n,null;case`-o`:case`--out`:return e.outFile=n,null;case`-r`:{let t=parseFloat(n);return Number.isNaN(t)||t<.1||t>10?`rate must be between 0.1 and 10`:(e.rate=t,null)}default:return`unknown option: ${t}`}}function wN(e){let t={voiceName:null,rate:1,lang:null,outFile:null,text:``},n=[];for(let r=0;r<e.length;r++){let i=e[r];if(i in xN){let n=SN(r+1<e.length?e[r+1]:void 0)?e[++r]:null;if(n==null)return q(`${i} requires ${xN[i]}`);let a=CN(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 TN(e){let t=e.onDevice?`[kokoro]`:`[web speech]`;return`${e.name} (${e.lang}) ${t}${e.default?` [default]`:``}`}async function EN(e){if(e.local){let{kokoroVoicesIfReady:e}=await import(`./speech-page-realm-stub-C7EPKrHd.js`),t=e().map(e=>TN({name:e.id,lang:e.lang,onDevice:e.onDevice})),n=(await bN()).map(e=>TN({name:e.name,lang:e.lang,onDevice:!1,default:e.default}));return{stdout:[...t,...n].join(`
1724
1724
  `)+`
1725
- `,stderr:``,exitCode:0}}try{return{stdout:(await e.panelRpc.call(`list-voices`,void 0)).voices.map(e=>EN(e)).join(`
1725
+ `,stderr:``,exitCode:0}}try{return{stdout:(await e.panelRpc.call(`list-voices`,void 0)).voices.map(e=>TN(e)).join(`
1726
1726
  `)+`
1727
- `,stderr:``,exitCode:0}}catch(e){return q(vN(e))}}async function ON(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 xN()).map(e=>({name:e.name}));return[...n,...r]}async function kN(e,t){let n=(await ON(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 AN(e,t){try{if(e.local){let{kokoroStatus:e,kokoroWarmup:n}=await import(`./speech-page-realm-stub-C7EPKrHd.js`);return{stdout:_N(t?n():e()),stderr:``,exitCode:0}}return{stdout:_N(t?await e.panelRpc.call(`speak-warmup`,void 0):await e.panelRpc.call(`speak-status`,void 0)),stderr:``,exitCode:0}}catch(e){return q(vN(e))}}async function jN(e,t){return t.includes(`--list`)?DN(e):t.includes(`--status`)?AN(e,!1):t.includes(`--warmup`)?AN(e,!0):null}async function MN(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: ${vN(e)}`)}}async function NN(e,t){try{return await e.panelRpc.call(`speak-text`,t,{timeoutMs:3e5}),{stdout:``,stderr:``,exitCode:0}}catch(e){return q(vN(e))}}async function PN(e){let{synthesizeToWav:t}=await import(`./speech-page-realm-stub-C7EPKrHd.js`);try{return{bytes:await t(e)}}catch(e){return q(vN(e))}}async function FN(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(vN(e))}}async function IN(e,t){return e.local?PN(t):FN(e,t)}async function LN(e,t){let n=await IN(e,t);return`exitCode`in n?n:{...ur(n.bytes),stderr:``,exitCode:0}}async function RN(e,t,n,r){let i=await IN(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}: ${vN(e)}`)}return{stdout:`wrote ${Math.max(1,Math.round(i.bytes.byteLength/1024))} KB to ${a}\n`,stderr:``,exitCode:0}}async function zN(e,t,n){let r;if(n.voiceName){let{resolved:t,error:i}=await kN(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&&!fr(t)?LN(e,i):n.outFile?RN(e,t,n.outFile,i):e.local?MN(i):NN(e,i)}function BN(){return C(`say`,async(e,t)=>{if(e.includes(`--help`)||e.includes(`-h`))return gN();let n={local:typeof window<`u`&&typeof speechSynthesis<`u`,panelRpc:b()};if(!n.local&&!n.panelRpc)return q(`Web Speech API unavailable in this environment`);let r=await jN(n,e);if(r)return r;let i=TN(e);return`exitCode`in i?i:i.text?i.lang?zN(n,t,{...i,lang:i.lang}):q(`-l language tag is required`):gN()})}function VN(){return C(`screencapture`,async(e,t)=>{let{runScreencapture:n}=await import(`./screencapture-run-DXkhPPQJ.js`);return n(e,t)})}const HN=[`--domain`],UN=[`--persist`];function WN(){return`secret — manage secrets for the fetch proxy and mount backends
1727
+ `,stderr:``,exitCode:0}}catch(e){return q(_N(e))}}async function DN(e){if(!e.local)return(await e.panelRpc.call(`list-voices`,void 0)).voices;let{kokoroVoicesIfReady:t}=await import(`./speech-page-realm-stub-C7EPKrHd.js`),n=t().map(e=>({name:e.id})),r=(await bN()).map(e=>({name:e.name}));return[...n,...r]}async function ON(e,t){let n=(await DN(e)).find(e=>e.name.toLowerCase().includes(t.toLowerCase()));return n?{resolved:n.name}:{error:q(`voice "${t}" not found. Use --list to see available voices.`)}}async function kN(e,t){try{if(e.local){let{kokoroStatus:e,kokoroWarmup:n}=await import(`./speech-page-realm-stub-C7EPKrHd.js`);return{stdout:gN(t?n():e()),stderr:``,exitCode:0}}return{stdout:gN(t?await e.panelRpc.call(`speak-warmup`,void 0):await e.panelRpc.call(`speak-status`,void 0)),stderr:``,exitCode:0}}catch(e){return q(_N(e))}}async function AN(e,t){return t.includes(`--list`)?EN(e):t.includes(`--status`)?kN(e,!1):t.includes(`--warmup`)?kN(e,!0):null}async function jN(e){try{let{speak:t}=await import(`./speech-page-realm-stub-C7EPKrHd.js`);return await t(e),{stdout:``,stderr:``,exitCode:0}}catch(e){return q(`speech synthesis error: ${_N(e)}`)}}async function MN(e,t){try{return await e.panelRpc.call(`speak-text`,t,{timeoutMs:3e5}),{stdout:``,stderr:``,exitCode:0}}catch(e){return q(_N(e))}}async function NN(e){let{synthesizeToWav:t}=await import(`./speech-page-realm-stub-C7EPKrHd.js`);try{return{bytes:await t(e)}}catch(e){return q(_N(e))}}async function PN(e,t){try{let n=await e.panelRpc.call(`synthesize-to-wav`,{text:t.text,lang:t.lang,...t.voice?{voice:t.voice}:{},rate:t.rate},{timeoutMs:3e5});return{bytes:new Uint8Array(n.bytes)}}catch(e){return q(_N(e))}}async function FN(e,t){return e.local?NN(t):PN(e,t)}async function IN(e,t){let n=await FN(e,t);return`exitCode`in n?n:{...dr(n.bytes),stderr:``,exitCode:0}}async function LN(e,t,n,r){let i=await FN(e,r);if(`exitCode`in i)return i;let a=t.fs.resolvePath(t.cwd,n);try{await t.fs.writeFile(a,i.bytes)}catch(e){return q(`failed to write ${n}: ${_N(e)}`)}return{stdout:`wrote ${Math.max(1,Math.round(i.bytes.byteLength/1024))} KB to ${a}\n`,stderr:``,exitCode:0}}async function RN(e,t,n){let r;if(n.voiceName){let{resolved:t,error:i}=await ON(e,n.voiceName);if(i)return i;r=t}let i={text:n.text,lang:n.lang,voice:r,rate:n.rate};return n.outFile===`-`||!n.outFile&&!pr(t)?IN(e,i):n.outFile?LN(e,t,n.outFile,i):e.local?jN(i):MN(e,i)}function zN(){return C(`say`,async(e,t)=>{if(e.includes(`--help`)||e.includes(`-h`))return hN();let n={local:typeof window<`u`&&typeof speechSynthesis<`u`,panelRpc:b()};if(!n.local&&!n.panelRpc)return q(`Web Speech API unavailable in this environment`);let r=await AN(n,e);if(r)return r;let i=wN(e);return`exitCode`in i?i:i.text?i.lang?RN(n,t,{...i,lang:i.lang}):q(`-l language tag is required`):hN()})}function BN(){return C(`screencapture`,async(e,t)=>{let{runScreencapture:n}=await import(`./screencapture-run-DXkhPPQJ.js`);return n(e,t)})}const VN=[`--domain`],HN=[`--persist`];function UN(){return`secret — manage secrets for the fetch proxy and mount backends
1728
1728
 
1729
1729
  No approval (session-only, in-memory, never persisted):
1730
1730
  secret set <name> <value> --domain <pat> Set a session secret. Free for a
@@ -1766,23 +1766,23 @@ Examples:
1766
1766
  secret peek OPENAI_KEY
1767
1767
  secret set GITHUB_TOKEN ghp_… --domain "api.github.com" --persist # prompts
1768
1768
  secret scope GITHUB_TOKEN --domain "api.github.com,*.github.com" # prompts
1769
- `}function GN(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 KN(e){return{stdout:``,stderr:`secret: ${e}\n`,exitCode:1}}const qN={persist:`persist secret`,scope:`edit secret scope`,value:`change secret value`},JN=new Set;function YN(e,t){if(e===t)return!0;try{return xt(e).test(t)}catch{return!1}}function XN(e,t){for(let n of e)if(YN(n,t))return!0;return!1}function ZN(e){return{stdout:``,stderr:`${St(`secret`,e)}\n`,exitCode:1}}function QN(e){let t=Le(),n=e.isExtension??(t===`extension-direct`||t===`extension-delegate`),r=e.backend??Op(t),i=e.grants??JN,a=e.broker,o=()=>(a??=ws(null),a);return{backend:r,inExtension:n,gate:async(e,t)=>{let n=`secret:${e}:${t}`;if(XN(i,n))return`ok`;let r=await o().requestApproval({kind:`secret`,detail:`${qN[e]}: ${t}`,suggestedPattern:n});if(r.decision===`deny`)return r;if(r.decision===`always`){let e=r.pattern?.trim();i.add(e&&YN(e,n)?e:n)}return`ok`},injectMaskedEnv:async t=>{if(e.setEnv&&zt(t))try{let n=await r.getMasked(t);n&&e.setEnv(t,n.maskedValue)}catch{}},clearMaskedEnv:t=>{e.unsetEnv&&zt(t)&&e.unsetEnv(t)}}}function $N(e){let t=P(e);if(t.length!==0)return t.endsWith(`\r
1769
+ `}function WN(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 GN(e){return{stdout:``,stderr:`secret: ${e}\n`,exitCode:1}}const KN={persist:`persist secret`,scope:`edit secret scope`,value:`change secret value`},qN=new Set;function JN(e,t){if(e===t)return!0;try{return St(e).test(t)}catch{return!1}}function YN(e,t){for(let n of e)if(JN(n,t))return!0;return!1}function XN(e){return{stdout:``,stderr:`${Ct(`secret`,e)}\n`,exitCode:1}}function ZN(e){let t=Re(),n=e.isExtension??(t===`extension-direct`||t===`extension-delegate`),r=e.backend??Dp(t),i=e.grants??qN,a=e.broker,o=()=>(a??=Cs(null),a);return{backend:r,inExtension:n,gate:async(e,t)=>{let n=`secret:${e}:${t}`;if(YN(i,n))return`ok`;let r=await o().requestApproval({kind:`secret`,detail:`${KN[e]}: ${t}`,suggestedPattern:n});if(r.decision===`deny`)return r;if(r.decision===`always`){let e=r.pattern?.trim();i.add(e&&JN(e,n)?e:n)}return`ok`},injectMaskedEnv:async t=>{if(e.setEnv&&Bt(t))try{let n=await r.getMasked(t);n&&e.setEnv(t,n.maskedValue)}catch{}},clearMaskedEnv:t=>{e.unsetEnv&&Bt(t)&&e.unsetEnv(t)}}}function QN(e){let t=P(e);if(t.length!==0)return t.endsWith(`\r
1770
1770
  `)?t.slice(0,-2):t.endsWith(`
1771
- `)?t.slice(0,-1):t}async function eP(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}):ZN(i)}async function tP(e,t,n,r){if(await r.backend.getInfo(e)){let t=await r.gate(`value`,e);if(t!==`ok`)return ZN(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 nP(e,t,n){let r=w(e.slice(1),{value:HN,bool:UN});if(`error`in r)return KN(r.error);let i=r.positionals[0];if(!i||i.startsWith(`-`))return{stdout:``,stderr:`secret: set requires a <name>
1772
- `,exitCode:1};let a=r.positionals[1],o=$N(t.stdin);if(a!==void 0&&o!==void 0)return{stdout:``,stderr:`secret: provide <value> as an argument OR via stdin, not both
1771
+ `)?t.slice(0,-1):t}async function $N(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}):XN(i)}async function eP(e,t,n,r){if(await r.backend.getInfo(e)){let t=await r.gate(`value`,e);if(t!==`ok`)return XN(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 tP(e,t,n){let r=w(e.slice(1),{value:VN,bool:HN});if(`error`in r)return GN(r.error);let i=r.positionals[0];if(!i||i.startsWith(`-`))return{stdout:``,stderr:`secret: set requires a <name>
1772
+ `,exitCode:1};let a=r.positionals[1],o=QN(t.stdin);if(a!==void 0&&o!==void 0)return{stdout:``,stderr:`secret: provide <value> as an argument OR via stdin, not both
1773
1773
  `,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]
1774
1774
  or pipe the value on stdin: echo "$TOKEN" | secret set <name> --domain <patterns>
1775
- `,exitCode:1};let c=GN(r.values.get(`--domain`));return c?r.bools.has(`--persist`)?eP(i,s,c,n):tP(i,s,c,n):{stdout:``,stderr:`secret: set requires --domain <patterns>
1776
- `,exitCode:1}}function rP(e){return`'${e.replaceAll(`'`,`'\\''`)}'`}async function iP(e,t){let[n,...r]=e.slice(1),i=e=>({stdout:e,stderr:``,exitCode:0});if(n===`set`){let e=w(r,{value:HN,bool:UN}),n=`error`in e?void 0:e.positionals[0];if(!n||!zt(n))return i(``);let a=await t.backend.getMasked(n).catch(()=>null);return i(a?`export ${n}=${rP(a.maskedValue)}\n`:``)}if(n===`delete`||n===`rm`){let e=w(r,{}),t=`error`in e?void 0:e.positionals[0];return i(t&&zt(t)?`unset ${t}\n`:``)}return i(``)}async function aP(e,t){let n=w(e.slice(1),{});if(`error`in n)return KN(n.error);let r=n.positionals[0];if(!r)return{stdout:``,stderr:`secret: get requires a <name>
1777
- `,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 oP(e,t){let n=w(e.slice(1),{});if(`error`in n)return KN(n.error);let r=n.positionals[0];if(!r)return{stdout:``,stderr:`secret: peek requires a <name>
1778
- `,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=w(e.slice(1),{value:HN});if(`error`in n)return KN(n.error);let r=n.positionals[0];if(!r||r.startsWith(`-`))return{stdout:``,stderr:`secret: scope requires a <name>
1779
- `,exitCode:1};let i=GN(n.values.get(`--domain`));if(!i)return{stdout:``,stderr:`secret: scope requires --domain <patterns>
1780
- `,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}):ZN(a)}async function cP(e,t){let n=w(e.slice(1),{});if(`error`in n)return KN(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
1781
- `,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 lP(e,t,n){let r=w(e.slice(1),{});if(`error`in r)return KN(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 uP(e,t){let n=w(e.slice(1),{});if(`error`in n)return KN(n.error);let r=n.positionals[0],i=n.positionals[1];if(!r||!i)return{stdout:``,stderr:`secret: test requires <name> <url>
1782
- `,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?Pa(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 dP(e,t){let n=w(e.slice(1),{});if(`error`in n)return KN(n.error);if(!t.inExtension)return{stdout:`secret: in CLI mode, edit ~/.slicc/secrets.env directly with your text editor.
1775
+ `,exitCode:1};let c=WN(r.values.get(`--domain`));return c?r.bools.has(`--persist`)?$N(i,s,c,n):eP(i,s,c,n):{stdout:``,stderr:`secret: set requires --domain <patterns>
1776
+ `,exitCode:1}}function nP(e){return`'${e.replaceAll(`'`,`'\\''`)}'`}async function rP(e,t){let[n,...r]=e.slice(1),i=e=>({stdout:e,stderr:``,exitCode:0});if(n===`set`){let e=w(r,{value:VN,bool:HN}),n=`error`in e?void 0:e.positionals[0];if(!n||!Bt(n))return i(``);let a=await t.backend.getMasked(n).catch(()=>null);return i(a?`export ${n}=${nP(a.maskedValue)}\n`:``)}if(n===`delete`||n===`rm`){let e=w(r,{}),t=`error`in e?void 0:e.positionals[0];return i(t&&Bt(t)?`unset ${t}\n`:``)}return i(``)}async function iP(e,t){let n=w(e.slice(1),{});if(`error`in n)return GN(n.error);let r=n.positionals[0];if(!r)return{stdout:``,stderr:`secret: get requires a <name>
1777
+ `,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 aP(e,t){let n=w(e.slice(1),{});if(`error`in n)return GN(n.error);let r=n.positionals[0];if(!r)return{stdout:``,stderr:`secret: peek requires a <name>
1778
+ `,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 oP(e,t){let n=w(e.slice(1),{value:VN});if(`error`in n)return GN(n.error);let r=n.positionals[0];if(!r||r.startsWith(`-`))return{stdout:``,stderr:`secret: scope requires a <name>
1779
+ `,exitCode:1};let i=WN(n.values.get(`--domain`));if(!i)return{stdout:``,stderr:`secret: scope requires --domain <patterns>
1780
+ `,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}):XN(a)}async function sP(e,t){let n=w(e.slice(1),{});if(`error`in n)return GN(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
1781
+ `,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 cP(e,t,n){let r=w(e.slice(1),{});if(`error`in r)return GN(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 lP(e,t){let n=w(e.slice(1),{});if(`error`in n)return GN(n.error);let r=n.positionals[0],i=n.positionals[1];if(!r||!i)return{stdout:``,stderr:`secret: test requires <name> <url>
1782
+ `,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?Fa(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 uP(e,t){let n=w(e.slice(1),{});if(`error`in n)return GN(n.error);if(!t.inExtension)return{stdout:`secret: in CLI mode, edit ~/.slicc/secrets.env directly with your text editor.
1783
1783
  (changes are picked up on the next request — no restart needed)
1784
1784
  `,stderr:``,exitCode:0};try{return await chrome.runtime.openOptionsPage(),{stdout:`Opened Mount Secrets options page in a new tab.
1785
- `,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 fP(e,t,n){let r=e[0];switch(r){case`set`:return nP(e,t,n);case`get`:case`read`:return aP(e,n);case`shell-env`:return iP(e,n);case`peek`:return oP(e,n);case`scope`:return sP(e,n);case`list`:return cP(e,n);case`delete`:case`rm`:return lP(e,r,n);case`test`:return uP(e,n);case`edit`:return dP(e,n);default:return{stdout:``,stderr:`secret: unknown command "${r}"\n`,exitCode:1}}}function pP(e={}){let t=QN(e);return C(`secret`,async(e,n)=>{if(e.length===0||T(e,{valueFlags:HN}))return{stdout:WN(),stderr:``,exitCode:0};try{return await fP(e,n,t)}catch(e){return{stdout:``,stderr:`secret: ${e instanceof Error?e.message:String(e)}\n`,exitCode:1}}})}function mP(){return null}function hP(){return null}function gP(){return{stdout:`usage: serve [--entry <relative-path>] [--ttl <duration>] [--bridge | --no-bridge] [--max-tabs <n>] [--quiet] [--stop <token>] [--list] <directory>
1785
+ `,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 tP(e,t,n);case`get`:case`read`:return iP(e,n);case`shell-env`:return rP(e,n);case`peek`:return aP(e,n);case`scope`:return oP(e,n);case`list`:return sP(e,n);case`delete`:case`rm`:return cP(e,r,n);case`test`:return lP(e,n);case`edit`:return uP(e,n);default:return{stdout:``,stderr:`secret: unknown command "${r}"\n`,exitCode:1}}}function fP(e={}){let t=ZN(e);return C(`secret`,async(e,n)=>{if(e.length===0||T(e,{valueFlags:VN}))return{stdout:UN(),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 pP(){return null}function mP(){return null}function hP(){return{stdout:`usage: serve [--entry <relative-path>] [--ttl <duration>] [--bridge | --no-bridge] [--max-tabs <n>] [--quiet] [--stop <token>] [--list] <directory>
1786
1786
  serve --logs [<token>] [--lines <n>]
1787
1787
  serve --truncate [<token>]
1788
1788
 
@@ -1818,28 +1818,28 @@ Limits and lifetime:
1818
1818
  its TTL. Either can be removed sooner with \`serve --stop\`.
1819
1819
  - <token> is the "Preview token" printed at mint time or the TOKEN column
1820
1820
  of \`serve --list\`; \`--stop\` also accepts the preview URL.
1821
- `,stderr:``,exitCode:0}}function _P(e){return`error`in e}function vP(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
1822
- `}:(n.lines=i,{skip:+(e===`--lines`)})}}function yP(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
1821
+ `,stderr:``,exitCode:0}}function gP(e){return`error`in e}function _P(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
1822
+ `}:(n.lines=i,{skip:+(e===`--lines`)})}}function vP(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
1823
1823
  `};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)
1824
1824
  `};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.
1825
1825
  `}:(n.ttlMs=a,{skip:+(e===`--ttl`)}):{error:`serve: --ttl must be a positive whole duration (m, h, d, or w)
1826
- `}}function bP(e,t){let n={"--bridge":`bridge`,"--no-bridge":`noBridge`,"--project":`project`,"--quiet":`quiet`}[e];if(n)return t[n]=!0,{skip:0}}function xP(e,t,n){let r=yP(e,t,n);if(r)return r;let i=bP(e,n);if(i)return i;if(e===`--entry`)return t?(n.entry=t,{skip:1}):{error:`serve: missing value for --entry
1826
+ `}}function yP(e,t){let n={"--bridge":`bridge`,"--no-bridge":`noBridge`,"--project":`project`,"--quiet":`quiet`}[e];if(n)return t[n]=!0,{skip:0}}function bP(e,t,n){let r=vP(e,t,n);if(r)return r;let i=yP(e,n);if(i)return i;if(e===`--entry`)return t?(n.entry=t,{skip:1}):{error:`serve: missing value for --entry
1827
1827
  `};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
1828
- `};if(e.startsWith(`--stop=`))return n.stop=e.slice(7),{skip:0};let a=vP(e,t,n);if(a)return a;if(e===`--max-tabs`){if(!t)return{error:`serve: missing value for --max-tabs
1828
+ `};if(e.startsWith(`--stop=`))return n.stop=e.slice(7),{skip:0};let a=_P(e,t,n);if(a)return a;if(e===`--max-tabs`){if(!t)return{error:`serve: missing value for --max-tabs
1829
1829
  `};let e=Number.parseInt(t,10);return!Number.isFinite(e)||e<=0?{error:`serve: --max-tabs must be a positive integer
1830
1830
  `}:(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
1831
1831
  `}:(n.maxTabs=t,{skip:0})}return e.startsWith(`-`)?{error:`serve: unknown option: ${e}\n`}:n.directory?{error:`serve: expected a single directory argument
1832
- `}:(n.directory=e,{skip:0})}function SP(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=xP(e[n],e[n+1],t);if(_P(r))return{...t,error:r.error};n+=r.skip}return t}async function CP(e,t,n,r){if(!jr(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=Rr(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 wP(e){return`exitCode`in e}async function TP(e){let t=Ma(e)??e,n,r=hP();if(r)n=await r({type:`stop`,previewToken:t});else{let e=b();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
1833
- `,exitCode:1};if(n.webhookId){let e=await Dy();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 EP(){let e=hP();if(e){let t=(await e({type:`list`})).previews??[];return t.length===0?{stdout:`No active previews
1834
- `,stderr:``,exitCode:0}:{stdout:OP(t),stderr:``,exitCode:0}}let t=b();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
1835
- `,stderr:``,exitCode:0}:{stdout:OP(n),stderr:``,exitCode:0}}function DP(e){return e.mode===`persistent`?e.state===`pending`?`uploading`:`persistent`:`live`}function OP(e){return`Active previews:\n TOKEN MODE EXPIRES URL ROOT CREATED\n${e.map(e=>` ${e.previewToken} ${DP(e)} ${e.expiresAt??`-`} ${e.url} ${e.servedRoot} ${e.createdAt}\n`).join(``)}`}function kP(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 AP(e){let t,n=hP();if(n)t=(await n({type:`logs`,previewToken:e.previewToken})).lifecycleRecords??[];else{let n=b();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.
1836
- `,stderr:``,exitCode:0}:{stdout:`Preview lifecycle records (oldest to newest):\n${t.map(kP).join(``)}`,stderr:``,exitCode:0}}async function jP(e){let t,n,r=hP();if(r){let i=await r({type:`truncate`,previewToken:e});t=i.cleared??0,n=i.rearmed??0}else{let r=b();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 MP(e,t){let n=[],r=0;for await(let i of e.walk(t)){if(n.length>=1e3)throw Error(`persistent preview exceeds 1000 file limit`);let a=await e.readFile(i,{encoding:`binary`}),o=typeof a==`string`?new TextEncoder().encode(a):a,s=i.slice(t===`/`?1:t.length+1);if(o.byteLength>26214400)throw Error(`preview file exceeds 25 MiB limit: ${s}`);if(r+=o.byteLength,r>52428800)throw Error(`persistent preview exceeds 50 MiB total limit`);n.push({path:s,content:o,mime:Cr(s)})}return n}function NP(e){return e().catch(e=>({stdout:``,stderr:`serve: ${e instanceof Error?e.message:String(e)}\n`,exitCode:1}))}async function PP(e){let t=mP();if(t)return t(e);let n=b();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 FP(e,t){if(t)return t.createPage(e);typeof window<`u`&&typeof window.open==`function`&&window.open(e,`_blank`,`noopener,noreferrer`)}async function IP(e,t){if(!e)return{ok:!0};let n=await Dy();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 LP(e,t,n,r,i,a,o){let s;try{s=await PP({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 Dy();e&&await e.deleteWebhook(r).catch(()=>{})}return{stdout:``,stderr:`${i}serve: ${e instanceof Error?e.message:String(e)}\n`,exitCode:1}}let c=await FP(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 RP(e){if(e.stop){let t=e.stop;return NP(()=>TP(t))}if(e.list)return NP(()=>EP());if(e.logs&&e.truncate)return{stdout:``,stderr:`serve: --logs and --truncate are mutually exclusive
1832
+ `}:(n.directory=e,{skip:0})}function xP(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=bP(e[n],e[n+1],t);if(gP(r))return{...t,error:r.error};n+=r.skip}return t}async function SP(e,t,n,r){if(!Mr(t))return{stdout:``,stderr:`serve: invalid entry file: ${t}\n`,exitCode:1};let i=n.resolvePath(r,e),a;try{a=await n.stat(i)}catch{return{stdout:``,stderr:`serve: no such directory: ${e}\n`,exitCode:1}}if(!a.isDirectory)return{stdout:``,stderr:`serve: not a directory: ${e}\n`,exitCode:1};let o=zr(i,t),s;try{s=await n.stat(o)}catch{return{stdout:``,stderr:`serve: entry file not found: ${o}\n`,exitCode:1}}return s.isFile?{fullDirectory:i,entryPath:o}:{stdout:``,stderr:`serve: entry is not a file: ${o}\n`,exitCode:1}}function CP(e){return`exitCode`in e}async function wP(e){let t=Na(e)??e,n,r=mP();if(r)n=await r({type:`stop`,previewToken:t});else{let e=b();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
1833
+ `,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 TP(){let e=mP();if(e){let t=(await e({type:`list`})).previews??[];return t.length===0?{stdout:`No active previews
1834
+ `,stderr:``,exitCode:0}:{stdout:DP(t),stderr:``,exitCode:0}}let t=b();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
1835
+ `,stderr:``,exitCode:0}:{stdout:DP(n),stderr:``,exitCode:0}}function EP(e){return e.mode===`persistent`?e.state===`pending`?`uploading`:`persistent`:`live`}function DP(e){return`Active previews:\n TOKEN MODE EXPIRES URL ROOT CREATED\n${e.map(e=>` ${e.previewToken} ${EP(e)} ${e.expiresAt??`-`} ${e.url} ${e.servedRoot} ${e.createdAt}\n`).join(``)}`}function OP(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 kP(e){let t,n=mP();if(n)t=(await n({type:`logs`,previewToken:e.previewToken})).lifecycleRecords??[];else{let n=b();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.
1836
+ `,stderr:``,exitCode:0}:{stdout:`Preview lifecycle records (oldest to newest):\n${t.map(OP).join(``)}`,stderr:``,exitCode:0}}async function AP(e){let t,n,r=mP();if(r){let i=await r({type:`truncate`,previewToken:e});t=i.cleared??0,n=i.rearmed??0}else{let r=b();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 jP(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:wr(s)})}return n}function MP(e){return e().catch(e=>({stdout:``,stderr:`serve: ${e instanceof Error?e.message:String(e)}\n`,exitCode:1}))}async function NP(e){let t=pP();if(t)return t(e);let n=b();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 PP(e,t){if(t)return t.createPage(e);typeof window<`u`&&typeof window.open==`function`&&window.open(e,`_blank`,`noopener,noreferrer`)}async function FP(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 IP(e,t,n,r,i,a,o){let s;try{s=await NP({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 PP(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 LP(e){if(e.stop){let t=e.stop;return MP(()=>wP(t))}if(e.list)return MP(()=>TP());if(e.logs&&e.truncate)return{stdout:``,stderr:`serve: --logs and --truncate are mutually exclusive
1837
1837
  `,exitCode:1};if(e.lines!==void 0&&!e.logs)return{stdout:``,stderr:`serve: --lines requires --logs
1838
- `,exitCode:1};if(e.logs){let t=typeof e.logs==`string`?e.logs:void 0;return NP(()=>AP({previewToken:t,lines:e.lines}))}if(e.truncate){let t=typeof e.truncate==`string`?e.truncate:void 0;return NP(()=>jP(t))}}function zP(e){if(e.ttlMs!==void 0&&e.bridge)return{stdout:``,stderr:`serve: --ttl cannot be combined with --bridge
1838
+ `,exitCode:1};if(e.logs){let t=typeof e.logs==`string`?e.logs:void 0;return MP(()=>kP({previewToken:t,lines:e.lines}))}if(e.truncate){let t=typeof e.truncate==`string`?e.truncate:void 0;return MP(()=>AP(t))}}function RP(e){if(e.ttlMs!==void 0&&e.bridge)return{stdout:``,stderr:`serve: --ttl cannot be combined with --bridge
1839
1839
  `,exitCode:1};if(e.ttlMs!==void 0&&e.maxTabs!==void 0)return{stdout:``,stderr:`serve: --ttl cannot be combined with --max-tabs
1840
- `,exitCode:1}}async function BP(e,t,n){if(e.ttlMs!==void 0){if(!t)throw Error(`persistent snapshot filesystem unavailable`);return MP(t,n)}}async function VP(e,t,n,r){if(e.length===0||e.includes(`--help`)||e.includes(`-h`))return gP();let i=SP(e);if(i.error)return{stdout:``,stderr:i.error,exitCode:1};let a=await RP(i);if(a)return a;if(!i.directory)return gP();let o=zP(i);if(o)return o;let s=await CP(i.directory,i.entry,t.fs,t.cwd);if(wP(s))return s;let{fullDirectory:c,entryPath:l}=s,u;try{u=await BP(i,r,c)}catch(e){return{stdout:``,stderr:`serve: ${e instanceof Error?e.message:String(e)}\n`,exitCode:1}}let d=i.project?`serve: --project is obsolete; ignored (root-absolute paths work natively under unified preview)
1841
- `:``,f=await IP(!i.noBridge&&i.bridge,d);return f.ok?LP(i,c,l,f.webhookId,d,u,n):f.result}function HP(e,t){return C(`serve`,(n,r)=>VP(n,r,e,t))}const UP=`usage: session export [--id <id>] [--output <path>]
1842
- `;function WP(e){if(e.includes(`\0`))return{ok:!1,reason:`path must not contain NUL bytes`};if(e.includes(`\\`))return{ok:!1,reason:`path must not contain backslashes`};let t=e.split(`/`);for(let e of t)if(e===`..`)return{ok:!1,reason:`path must not contain ".."/traversal segments`};return{ok:!0}}function GP(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${UP}`};let n=r[e+1];if(!n||n.startsWith(`-`))return{ok:!1,stderr:`session export: --id requires a value\n${UP}`};t=n,e++}else if(i===`--output`){if(n!==null)return{ok:!1,stderr:`session export: duplicate flag --output\n${UP}`};let t=r[e+1];if(!t||t.startsWith(`-`))return{ok:!1,stderr:`session export: --output requires a path\n${UP}`};n=t,e++}else if(i.startsWith(`-`))return{ok:!1,stderr:`session export: unknown flag ${i}\n${UP}`};else return{ok:!1,stderr:`session export: unexpected argument ${JSON.stringify(i)}\n${UP}`}}return{ok:!0,args:{sessionId:t,outputPath:n}}}async function KP(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||Ft(r)!==a.sha256)throw new za(`transfer-corrupt`);return r}async function qP(e,t){let n=GP(e);if(!n.ok)return{stdout:``,stderr:n.stderr,exitCode:1};let{sessionId:r,outputPath:i}=n.args;if(i!==null){let e=WP(i);if(!e.ok)return{stdout:``,stderr:`session export: --output ${e.reason}\n${UP}`,exitCode:1}}let a=r==null?{kind:`active`}:{kind:`frozen`,sessionId:r};try{let e=await Os().export(a,{}),n=await KP(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 za?e.code:e instanceof Error?e.message:String(e)}\n`,exitCode:1}}}function JP(){return C(`session`,async(e,t)=>{if(e[0]===`export`&&!T(e))return qP(e,t);let{dispatchSessionMemoryAware:n}=await import(`./session-command-memory-LPNx4Ykm.js`);return n(e,t,UP)})}function YP(){return C(`slicc`,async(e,t)=>{let{runSlicc:n}=await import(`./run-BRFnmkzR.js`);return await n(e,t)})}const XP=`leader`;function ZP(){try{let e=globalThis.localStorage?.getItem(`slicc.leaderSprinkleInstances`);if(e)return JSON.parse(e)}catch{}return[]}function QP(e){return+!!e.leader+e.followers.length}function $P(){return{stdout:`usage: sprinkle <subcommand> [args]
1840
+ `,exitCode:1}}async function zP(e,t,n){if(e.ttlMs!==void 0){if(!t)throw Error(`persistent snapshot filesystem unavailable`);return jP(t,n)}}async function BP(e,t,n,r){if(e.length===0||e.includes(`--help`)||e.includes(`-h`))return hP();let i=xP(e);if(i.error)return{stdout:``,stderr:i.error,exitCode:1};let a=await LP(i);if(a)return a;if(!i.directory)return hP();let o=RP(i);if(o)return o;let s=await SP(i.directory,i.entry,t.fs,t.cwd);if(CP(s))return s;let{fullDirectory:c,entryPath:l}=s,u;try{u=await zP(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)
1841
+ `:``,f=await FP(!i.noBridge&&i.bridge,d);return f.ok?IP(i,c,l,f.webhookId,d,u,n):f.result}function VP(e,t){return C(`serve`,(n,r)=>BP(n,r,e,t))}const HP=`usage: session export [--id <id>] [--output <path>]
1842
+ `;function UP(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 WP(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${HP}`};let n=r[e+1];if(!n||n.startsWith(`-`))return{ok:!1,stderr:`session export: --id requires a value\n${HP}`};t=n,e++}else if(i===`--output`){if(n!==null)return{ok:!1,stderr:`session export: duplicate flag --output\n${HP}`};let t=r[e+1];if(!t||t.startsWith(`-`))return{ok:!1,stderr:`session export: --output requires a path\n${HP}`};n=t,e++}else if(i.startsWith(`-`))return{ok:!1,stderr:`session export: unknown flag ${i}\n${HP}`};else return{ok:!1,stderr:`session export: unexpected argument ${JSON.stringify(i)}\n${HP}`}}return{ok:!0,args:{sessionId:t,outputPath:n}}}async function GP(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||It(r)!==a.sha256)throw new Ba(`transfer-corrupt`);return r}async function KP(e,t){let n=WP(e);if(!n.ok)return{stdout:``,stderr:n.stderr,exitCode:1};let{sessionId:r,outputPath:i}=n.args;if(i!==null){let e=UP(i);if(!e.ok)return{stdout:``,stderr:`session export: --output ${e.reason}\n${HP}`,exitCode:1}}let a=r==null?{kind:`active`}:{kind:`frozen`,sessionId:r};try{let e=await Ds().export(a,{}),n=await GP(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 Ba?e.code:e instanceof Error?e.message:String(e)}\n`,exitCode:1}}}function qP(){return C(`session`,async(e,t)=>{if(e[0]===`export`&&!T(e))return KP(e,t);let{dispatchSessionMemoryAware:n}=await import(`./session-command-memory-nk61yZd5.js`);return n(e,t,HP)})}function JP(){return C(`slicc`,async(e,t)=>{let{runSlicc:n}=await import(`./run-BRFnmkzR.js`);return await n(e,t)})}const YP=`leader`;function XP(){try{let e=globalThis.localStorage?.getItem(`slicc.leaderSprinkleInstances`);if(e)return JSON.parse(e)}catch{}return[]}function ZP(e){return+!!e.leader+e.followers.length}function QP(){return{stdout:`usage: sprinkle <subcommand> [args]
1843
1843
 
1844
1844
  list [--runtime <id>] List sprinkles + an instance line per runtime
1845
1845
  open <name> Open a sprinkle by name
@@ -1857,22 +1857,22 @@ Limits and lifetime:
1857
1857
  chat <html> Show inline HTML in chat (Tool UI)
1858
1858
  Use data-action="name" on buttons for callbacks
1859
1859
  Pipe HTML: echo "<div>...</div>" | sprinkle chat
1860
- `,stderr:``,exitCode:0}}function eF(){return globalThis.__slicc_sprinkleManager??null}function J(e,t){return{stdout:``,stderr:`sprinkle ${e}: ${t}\n`,exitCode:1}}function tF(){return[XP,...ie().map(e=>e.runtimeId)]}function nF(e){return`unknown runtime "${e}"\nknown runtimes: ${tF().join(`, `)}\nRun \`host\` to see connected followers.`}async function rF(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
1861
- `,exitCode:1};let r=await Ue({html:n,onAction:async(e,t)=>({action:e,data:t})});return r===null?{stdout:``,stderr:`sprinkle chat: not in tool execution context
1860
+ `,stderr:``,exitCode:0}}function $P(){return globalThis.__slicc_sprinkleManager??null}function J(e,t){return{stdout:``,stderr:`sprinkle ${e}: ${t}\n`,exitCode:1}}function eF(){return[YP,...ie().map(e=>e.runtimeId)]}function tF(e){return`unknown runtime "${e}"\nknown runtimes: ${eF().join(`, `)}\nRun \`host\` to see connected followers.`}async function nF(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
1861
+ `,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
1862
1862
  `,exitCode:1}:{stdout:JSON.stringify(r)+`
1863
- `,stderr:``,exitCode:0}}function iF(e){return e.map(e=>{let t=e.runtime?` (${e.runtime})`:``;return` instance: ${e.runtimeId}${t}`})}function aF(e){return[...e.map(e=>({name:e,runtimeId:XP})),...ZP()]}async function oF(e,t){let n=w(t.slice(1),{value:[`--runtime`]});if(`error`in n)return J(`list`,n.error);let r=n.values.get(`--runtime`);if(r!==void 0&&!tF().includes(r))return J(`list`,nF(r));await e.refresh();let i=e.available();if(i.length===0)return{stdout:`No .shtml sprinkles found.
1864
- `,stderr:``,exitCode:0};let a=new Set(e.opened()),o=aF([...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(...iF(t))}return s.length===0?{stdout:`No sprinkles are open on runtime "${r}".\n`,stderr:``,exitCode:0}:{stdout:s.join(`
1863
+ `,stderr:``,exitCode:0}}function rF(e){return e.map(e=>{let t=e.runtime?` (${e.runtime})`:``;return` instance: ${e.runtimeId}${t}`})}function iF(e){return[...e.map(e=>({name:e,runtimeId:YP})),...XP()]}async function aF(e,t){let n=w(t.slice(1),{value:[`--runtime`]});if(`error`in n)return J(`list`,n.error);let r=n.values.get(`--runtime`);if(r!==void 0&&!eF().includes(r))return J(`list`,tF(r));await e.refresh();let i=e.available();if(i.length===0)return{stdout:`No .shtml sprinkles found.
1864
+ `,stderr:``,exitCode:0};let a=new Set(e.opened()),o=iF([...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(...rF(t))}return s.length===0?{stdout:`No sprinkles are open on runtime "${r}".\n`,stderr:``,exitCode:0}:{stdout:s.join(`
1865
1865
  `)+`
1866
- `,stderr:``,exitCode:0}}function sF(e,t){return!t||Wo(e)?null:(Go(e,t),Wo(e)===t?t:null)}async function cF(e,t,n){let r=w(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=ca(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&&Ko(i),J(`open`,e instanceof Error?e.message:String(e))}return{stdout:`Sprinkle "${i}" opened${o?`; licks route to "${o}"`:``}.\n`,stderr:``,exitCode:0}}function lF(e,t){let n=w(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 uF(e,t){let n=w(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 dF(e,t){let n=w(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 fF(e){let t=w(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=qo(),t=Object.entries(e);return t.length===0?{stdout:`No sprinkle routes configured (all licks go to cone).
1866
+ `,stderr:``,exitCode:0}}function oF(e,t){return!t||Go(e)?null:(Ko(e,t),Go(e)===t?t:null)}async function sF(e,t,n){let r=w(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=la(void 0,n),o=oF(i,a);try{a?await e.open(i,void 0,{lickOriginTarget:a}):await e.open(i)}catch(e){return o&&qo(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 cF(e,t){let n=w(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 lF(e,t){let n=w(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 uF(e,t){let n=w(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=w(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=Jo(),t=Object.entries(e);return t.length===0?{stdout:`No sprinkle routes configured (all licks go to cone).
1867
1867
  `,stderr:``,exitCode:0}:{stdout:`Sprinkle routes (applied to every runtime — the leader resolves the
1868
1868
  route for follower-forwarded licks too):
1869
1869
  `+t.map(([e,t])=>` ${e} -> ${t}`).join(`
1870
1870
  `)+`
1871
- `,stderr:``,exitCode:0}}if(t.bools.has(`--clear`))return Ko(n),{stdout:`Route cleared for sprinkle "${n}" (licks will go to cone).\n`,stderr:``,exitCode:0};let r=t.values.get(`--scoop`);if(!r){let e=Wo(n);return e?{stdout:`${n} -> ${e}\n`,stderr:``,exitCode:0}:{stdout:`${n} -> cone (default)\n`,stderr:``,exitCode:0}}return Go(n,r),{stdout:`Sprinkle "${n}" lick events will route to scoop "${r}".\n`,stderr:``,exitCode:0}}function pF(e){let t=[];return e.leader&&t.push(XP),t.push(...e.followers),t.join(`, `)}async function mF(e,t){let n=w(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&&!tF().includes(o))return J(`send`,nF(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`,nF(s.unknownRuntime));let c=QP(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`} (${pF(s)}).\n`,stderr:``,exitCode:0}}function hF(){return C(`sprinkle`,async(e,t)=>{if(e.length===0||e[0]===`--help`||e[0]===`-h`)return $P();let n=e[0];if(T(e.slice(1),{valueFlags:[`--scoop`,`--runtime`]}))return{stdout:ht(`sprinkle`,n,$P().stdout),stderr:``,exitCode:0};if(n===`chat`)return rF(mt(e),t);let r=eF();if(!r)return{stdout:``,stderr:`sprinkle: sprinkle manager not initialized
1872
- `,exitCode:1};switch(n){case`list`:return oF(r,e);case`open`:return cF(r,e,t.env);case`close`:return lF(r,e);case`reload`:return uF(r,e);case`refresh`:return dF(r,e);case`route`:return fF(e);case`send`:return mF(r,e);default:return{stdout:``,stderr:`sprinkle: unknown subcommand "${n}"\n`,exitCode:1}}})}function gF(){return{stdout:`usage: sqlite3 [database] [sql]
1873
- `,stderr:``,exitCode:0}}function _F(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 vF(e,t){return e===`:memory:`?e:t.fs.resolvePath(t.cwd,e)}async function yF(e,t,n){return t===`:memory:`||!await n.fs.exists(t)?new e.Database:new e.Database(await n.fs.readFileBuffer(t))}async function bF(e,t,n){t!==`:memory:`&&await n.fs.writeFile(t,e.export())}function xF(e){let t=e.flatMap(e=>e.values.map(e=>e.map(Ar).join(`|`)));return t.length>0?`${t.join(`
1874
- `)}\n`:``}async function SF(e,t,n){let r=await Lr(),i=vF(e,n),a=await yF(r,i,n),o=a.exec(t);return await bF(a,i,n),a.close(),xF(o)}function CF(e,t){return{stdout:``,stderr:`${e}: ${t instanceof Error?t.message:String(t)}\n`,exitCode:1}}function wF(e=`sqlite3`){return C(e,async(t,n)=>{if(t.includes(`--help`)||t.includes(`-h`))return gF();let{database:r,sql:i}=_F(t,n);if(!i)return CF(e,`interactive mode is not supported; provide SQL as argument or stdin`);try{return{stdout:await SF(r,i,n),stderr:``,exitCode:0}}catch(t){return CF(e,t)}})}function TF(e){return{stdout:``,stderr:e.endsWith(`
1875
- `)?e:`${e}\n`,exitCode:1}}function EF(){return{stdout:`ssh - run a command on a connected tray follower
1871
+ `,stderr:``,exitCode:0}}if(t.bools.has(`--clear`))return qo(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=Go(n);return e?{stdout:`${n} -> ${e}\n`,stderr:``,exitCode:0}:{stdout:`${n} -> cone (default)\n`,stderr:``,exitCode:0}}return Ko(n,r),{stdout:`Sprinkle "${n}" lick events will route to scoop "${r}".\n`,stderr:``,exitCode:0}}function fF(e){let t=[];return e.leader&&t.push(YP),t.push(...e.followers),t.join(`, `)}async function pF(e,t){let n=w(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&&!eF().includes(o))return J(`send`,tF(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`,tF(s.unknownRuntime));let c=ZP(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`} (${fF(s)}).\n`,stderr:``,exitCode:0}}function mF(){return C(`sprinkle`,async(e,t)=>{if(e.length===0||e[0]===`--help`||e[0]===`-h`)return QP();let n=e[0];if(T(e.slice(1),{valueFlags:[`--scoop`,`--runtime`]}))return{stdout:gt(`sprinkle`,n,QP().stdout),stderr:``,exitCode:0};if(n===`chat`)return nF(ht(e),t);let r=$P();if(!r)return{stdout:``,stderr:`sprinkle: sprinkle manager not initialized
1872
+ `,exitCode:1};switch(n){case`list`:return aF(r,e);case`open`:return sF(r,e,t.env);case`close`:return cF(r,e);case`reload`:return lF(r,e);case`refresh`:return uF(r,e);case`route`:return dF(e);case`send`:return pF(r,e);default:return{stdout:``,stderr:`sprinkle: unknown subcommand "${n}"\n`,exitCode:1}}})}function hF(){return{stdout:`usage: sqlite3 [database] [sql]
1873
+ `,stderr:``,exitCode:0}}function gF(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 _F(e,t){return e===`:memory:`?e:t.fs.resolvePath(t.cwd,e)}async function vF(e,t,n){return t===`:memory:`||!await n.fs.exists(t)?new e.Database:new e.Database(await n.fs.readFileBuffer(t))}async function yF(e,t,n){t!==`:memory:`&&await n.fs.writeFile(t,e.export())}function bF(e){let t=e.flatMap(e=>e.values.map(e=>e.map(jr).join(`|`)));return t.length>0?`${t.join(`
1874
+ `)}\n`:``}async function xF(e,t,n){let r=await Rr(),i=_F(e,n),a=await vF(r,i,n),o=a.exec(t);return await yF(a,i,n),a.close(),bF(o)}function SF(e,t){return{stdout:``,stderr:`${e}: ${t instanceof Error?t.message:String(t)}\n`,exitCode:1}}function CF(e=`sqlite3`){return C(e,async(t,n)=>{if(t.includes(`--help`)||t.includes(`-h`))return hF();let{database:r,sql:i}=gF(t,n);if(!i)return SF(e,`interactive mode is not supported; provide SQL as argument or stdin`);try{return{stdout:await xF(r,i,n),stderr:``,exitCode:0}}catch(t){return SF(e,t)}})}function wF(e){return{stdout:``,stderr:e.endsWith(`
1875
+ `)?e:`${e}\n`,exitCode:1}}function TF(){return{stdout:`ssh - run a command on a connected tray follower
1876
1876
 
1877
1877
  Usage: ssh [--cwd <dir>] [--timeout <seconds>] <runtime-id> <command...>
1878
1878
  ssh --list
@@ -1895,11 +1895,11 @@ Examples:
1895
1895
  ssh --list
1896
1896
  ssh follower-abc123 "uname -a"
1897
1897
  ssh --cwd /tmp follower-abc123 "ls -la"
1898
- `,stderr:``,exitCode:0}}function DF(e){let t=e.filter(e=>e.exec);if(t.length===0)return`No exec-capable followers connected.
1898
+ `,stderr:``,exitCode:0}}function EF(e){let t=e.filter(e=>e.exec);if(t.length===0)return`No exec-capable followers connected.
1899
1899
  Start one with: slicc <join-url> follow sh -c
1900
1900
  `;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(`
1901
- `)}\n`}function OF(e){if(e.stdin===void 0)return;let n=cr(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 kF(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 AF(){return C(`ssh`,async(e,t)=>{let n=kF(e);if(`help`in n)return EF();if(`error`in n)return TF(n.error);if(n.list||n.runtimeId===void 0)return{stdout:DF(ie()),stderr:``,exitCode:0};if(!n.command)return TF(`ssh: missing command
1902
- Usage: ssh <runtime-id> <command...>`);let r=b();if(!r)return TF(`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:OF(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 TF(`ssh: ${e instanceof Error?e.message:String(e)}`)}finally{t.signal?.removeEventListener(`abort`,a)}})}function jF(e){return{stdout:``,stderr:`${St(`sudo`,e)}\n`,exitCode:77}}function MF(e={}){let{broker:t,persistGrant:n,suppressNextGate:r}=e;return C(`sudo`,async(e,i)=>{if(e.length===0)return{stdout:``,stderr:`sudo: usage: sudo <command> [args...]
1901
+ `)}\n`}function DF(e){if(e.stdin===void 0)return;let n=lr(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 OF(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 kF(){return C(`ssh`,async(e,t)=>{let n=OF(e);if(`help`in n)return TF();if(`error`in n)return wF(n.error);if(n.list||n.runtimeId===void 0)return{stdout:EF(ie()),stderr:``,exitCode:0};if(!n.command)return wF(`ssh: missing command
1902
+ Usage: ssh <runtime-id> <command...>`);let r=b();if(!r)return wF(`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:DF(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 wF(`ssh: ${e instanceof Error?e.message:String(e)}`)}finally{t.signal?.removeEventListener(`abort`,a)}})}function AF(e){return{stdout:``,stderr:`${Ct(`sudo`,e)}\n`,exitCode:77}}function jF(e={}){let{broker:t,persistGrant:n,suppressNextGate:r}=e;return C(`sudo`,async(e,i)=>{if(e.length===0)return{stdout:``,stderr:`sudo: usage: sudo <command> [args...]
1903
1903
  `,exitCode:1};if(e[0]===`--help`||e[0]===`-h`)return{stdout:`usage: sudo <command> [args...]
1904
1904
 
1905
1905
  Request human approval to run <command> with elevation. If approved, the
@@ -1916,14 +1916,14 @@ Options:
1916
1916
  -h, --help Show this help message and exit.
1917
1917
  `,stderr:``,exitCode:0};if(!t)return{stdout:``,stderr:`sudo: command-level approval is not configured
1918
1918
  `,exitCode:1};if(!i.exec)return{stdout:``,stderr:`sudo: cannot dispatch inner command in this context
1919
- `,exitCode:1};let a=Wp(e[0],e.slice(1)),o=i.env?.get(qp),s=await t.requestApproval({kind:`command`,detail:a,...o?{reason:o}:{}});if(s.decision===`deny`)return jF(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 NF(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 PF(e,t){return e.fs.lstat?e.fs.lstat(t):e.fs.stat(t)}function FF(e,t){return e.some(e=>/^-[^-]/.test(e)&&e.slice(1).includes(t))}async function IF(e,t,n){let r=e.fs.resolvePath(e.cwd,t);try{let i=await PF(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}': ${NF(e)}\n`}}}function LF(){return C(`rm`,async(e,t)=>{let n={recursive:FF(e,`r`)||FF(e,`R`)||e.includes(`--recursive`),force:FF(e,`f`)||e.includes(`--force`),verbose:FF(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
1920
- `,exitCode:1};let i=await Promise.all(r.map(e=>IF(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 RF(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 zF(e){let t={follow:!1,paths:[]};for(let n=0;n<e.length;n++){let r=e[n];r===`-L`||r===`--dereference`?t.follow=!0:r===`-c`&&e[n+1]?t.format=e[++n]:r.startsWith(`--format=`)?t.format=r.slice(9):r.startsWith(`-`)||t.paths.push(r)}return t}async function BF(e,t,n){try{let r=e.fs.resolvePath(e.cwd,t),i=n.follow?await e.fs.stat(r):await PF(e,r);return{stdout:n.format?`${RF(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 VF(){return C(`stat`,async(e,t)=>{let n=zF(e);if(n.paths.length===0)return{stdout:``,stderr:`stat: missing operand
1921
- `,exitCode:1};let r=await Promise.all(n.paths.map(e=>BF(t,e,n))),i=r.map(e=>e.stdout).join(``),a=r.map(e=>e.stderr).join(``);return{stdout:i,stderr:a,exitCode:+!!a}})}function HF(e){let t=e.replace(/\/+$/,``),n=t.lastIndexOf(`/`);return n<=0?`/`:t.slice(0,n)}async function UF(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 PF(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}': ${NF(e)}\n`}}if(!n||s===i.length-1)return{stdout:o,stderr:``};a=HF(a)}return{stdout:o,stderr:``}}function WF(){return C(`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
1922
- `,exitCode:1};let a=await Promise.all(i.map(e=>UF(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 GF(){return{stdout:`usage: tar (-c|-x|-t) [-zv] -f <archive> [-C <dir>] [paths...]
1923
- `,stderr:``,exitCode:0}}function KF(e){return{stdout:``,stderr:`tar: ${e}\n`,exitCode:1}}function qF(e,t){if(e.mode)return KF(`exactly one of -c, -x, or -t is required`);e.mode=t}function JF(e,t,n){if(n)return[n,t];let r=e[t+1];return r===void 0?void 0:[r,t+1]}const YF={c:`create`,x:`extract`,t:`list`};function XF(e,t,n,r,i){let a=YF[e];if(a)return{nextIndex:r,error:qF(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:KF(`unsupported option -${e}`)};let o=JF(n,r,t);return o?(e===`f`?i.archive=o[0]:i.directory=o[0],{nextIndex:o[1],consumedValue:!0}):{nextIndex:r,error:KF(`option -${e} requires an argument`)}}function ZF(e,t,n){let r=e[t];for(let i=1;i<r.length;i++){let a=XF(r[i],r.slice(i+1),e,t,n);if(a.error||a.consumedValue)return a}return{nextIndex:t}}const QF=/^[cxtzvfC]+$/;function $F(e){let t=e.length>0&&QF.test(e[0])?[`-${e[0]}`,...e.slice(1)]:e,n={gzip:!1,verbose:!1,directory:`.`,paths:[]};for(let e=0;e<t.length;e++){let r=t[e];if(!r.startsWith(`-`)||r===`-`){n.paths.push(r);continue}if(r.startsWith(`--`))return KF(`unsupported option ${r}`);let i=ZF(t,e,n);if(i.error)return i.error;e=i.nextIndex}return n}function eI(e,t){let n=e.replace(/\\/g,`/`).replace(/^\/+/,``).replace(/^(?:\.\/)+/,``);return n?n===`.`?`.`:n.replace(/\/+$/,``):kr(t)}function tI(e){let t=e.mtime?.getTime();return t===void 0||Number.isNaN(t)?{}:{mtime:Math.floor(t/1e3)}}async function nI(e,t,n,r){let i=await e.fs.stat(t);if(i.isFile){let a=await e.fs.readFileBuffer(t),o=typeof i.mode==`number`?i.mode&511:void 0;r.push({path:n,bytes:a,...o===void 0?{}:{mode:o},...tI(i)});return}if(!i.isDirectory)throw Error(`unsupported file type: ${t}`);let a=n.endsWith(`/`)?n:`${n}/`,o=typeof i.mode==`number`?i.mode&511:void 0;r.push({path:a,bytes:new Uint8Array,directory:!0,...o===void 0?{}:{mode:o},...tI(i)});for(let n of await e.fs.readdir(t))await nI(e,Or(t,n),`${a}${n}`,r)}function rI(e,t){let n=e.length>=2&&e[0]===31&&e[1]===139,r=t||n?ya(e):e;return va(r,{stripNpmPrefix:!1,includeDirectories:!0,preserveRawPaths:!0})}function iI(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 Ir(t,i)?i:void 0}async function aI(e){try{await e()}catch(e){let t=e?.code;if(t===`ENOSYS`||t===`ENOTSUP`||t===`EOPNOTSUPP`)return;throw e}}async function oI(e,t,n,r){let i=new Map(t),a=new Map(n),o=[...new Set([...i.keys(),...a.keys()])];if(o.length===0)return;let s=o.map(e=>{let t=i.get(e),n=a.get(e),r=n===void 0?void 0:new Date(n*1e3);return{path:e,...t===void 0?{}:{mode:t},...r===void 0?{}:{atime:r,mtime:r}}});if(typeof r?.updateMetadataBatch==`function`){await aI(()=>r.updateMetadataBatch(s));return}let c=e.fs;if(typeof c.updateMetadataBatch==`function`){await aI(()=>c.updateMetadataBatch(s));return}for(let[e,n]of t)await aI(()=>c.chmod(e,n));for(let[e,t]of n){let n=new Date(t*1e3);await aI(()=>c.utimes(e,n,n))}}async function sI(e,t,n,r,i){let a=n.directory?493:420,o=n.mode===a&&await e.fs.exists(t),s=n.mode!==void 0&&(n.mode!==a||o);if(n.directory){await e.fs.mkdir(t,{recursive:!0}),s&&r.push([t,n.mode]);return}let c=Nr(t);c!==`/`&&await e.fs.mkdir(c,{recursive:!0}),await e.fs.writeFile(t,n.bytes),s&&i.push([t,n.mode])}async function cI(e,t){if(e.paths.length===0)return KF(`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 nI(t,e,eI(i,e),n)}let i=t.fs.resolvePath(t.cwd,e.archive),a=ga(n);return await t.fs.writeFile(i,e.gzip?_a(a):a),{stdout:e.verbose?`${n.map(e=>e.path).join(`
1924
- `)}\n`:``,stderr:``,exitCode:0}}function lI(e){let t=new Set,n=[];for(let r=e.length-1;r>=0;r--){let[i,a]=e[r];t.has(i)||(t.add(i),n.push([i,a]))}return n}async function uI(e,t,n){if(e.paths.length>0)return KF(`${e.mode} mode does not accept input paths`);let r=t.fs.resolvePath(t.cwd,e.archive),i=rI(await t.fs.readFileBuffer(r),e.gzip);if(e.mode===`list`){let e=i.map(e=>e.path).join(`
1925
- `);return{stdout:e?`${e}\n`:``,stderr:``,exitCode:0}}let a=t.fs.resolvePath(t.cwd,e.directory);await t.fs.mkdir(a,{recursive:!0});let o=[],s=[],c=[],l=[];for(let e of i){let n=iI(t,a,e.path);if(!n)return KF(`blocked suspicious path ${e.path}`);await sI(t,n,e,c,s),e.mtime!==void 0&&l.push([n,e.mtime]),o.push(e.path)}return await oI(t,[...lI(s),...lI(c)],lI(l),n),{stdout:e.verbose?`${o.join(`
1926
- `)}\n`:``,stderr:``,exitCode:0}}function dI(e={}){return C(`tar`,async(t,n)=>{if(t.length===0||t.includes(`--help`)||t.includes(`-h`))return GF();let r=$F(t);return`exitCode`in r?r:r.mode?r.archive?r.mode===`list`&&r.directory!==`.`?KF(`-C is only supported in create or extract mode`):r.mode===`create`?cI(r,n):uI(r,n,e.fs):KF(`option -f requires an archive path`):KF(`exactly one of -c, -x, or -t is required`)})}var fI=`/**
1919
+ `,exitCode:1};let a=Up(e[0],e.slice(1)),o=i.env?.get(Kp),s=await t.requestApproval({kind:`command`,detail:a,...o?{reason:o}:{}});if(s.decision===`deny`)return AF(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 MF(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 NF(e,t){return e.fs.lstat?e.fs.lstat(t):e.fs.stat(t)}function PF(e,t){return e.some(e=>/^-[^-]/.test(e)&&e.slice(1).includes(t))}async function FF(e,t,n){let r=e.fs.resolvePath(e.cwd,t);try{let i=await NF(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}': ${MF(e)}\n`}}}function IF(){return C(`rm`,async(e,t)=>{let n={recursive:PF(e,`r`)||PF(e,`R`)||e.includes(`--recursive`),force:PF(e,`f`)||e.includes(`--force`),verbose:PF(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
1920
+ `,exitCode:1};let i=await Promise.all(r.map(e=>FF(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 LF(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 RF(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 zF(e,t,n){try{let r=e.fs.resolvePath(e.cwd,t),i=n.follow?await e.fs.stat(r):await NF(e,r);return{stdout:n.format?`${LF(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 BF(){return C(`stat`,async(e,t)=>{let n=RF(e);if(n.paths.length===0)return{stdout:``,stderr:`stat: missing operand
1921
+ `,exitCode:1};let r=await Promise.all(n.paths.map(e=>zF(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 VF(e){let t=e.replace(/\/+$/,``),n=t.lastIndexOf(`/`);return n<=0?`/`:t.slice(0,n)}async function HF(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 NF(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}': ${MF(e)}\n`}}if(!n||s===i.length-1)return{stdout:o,stderr:``};a=VF(a)}return{stdout:o,stderr:``}}function UF(){return C(`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
1922
+ `,exitCode:1};let a=await Promise.all(i.map(e=>HF(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 WF(){return{stdout:`usage: tar (-c|-x|-t) [-zv] -f <archive> [-C <dir>] [paths...]
1923
+ `,stderr:``,exitCode:0}}function GF(e){return{stdout:``,stderr:`tar: ${e}\n`,exitCode:1}}function KF(e,t){if(e.mode)return GF(`exactly one of -c, -x, or -t is required`);e.mode=t}function qF(e,t,n){if(n)return[n,t];let r=e[t+1];return r===void 0?void 0:[r,t+1]}const JF={c:`create`,x:`extract`,t:`list`};function YF(e,t,n,r,i){let a=JF[e];if(a)return{nextIndex:r,error:KF(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:GF(`unsupported option -${e}`)};let o=qF(n,r,t);return o?(e===`f`?i.archive=o[0]:i.directory=o[0],{nextIndex:o[1],consumedValue:!0}):{nextIndex:r,error:GF(`option -${e} requires an argument`)}}function XF(e,t,n){let r=e[t];for(let i=1;i<r.length;i++){let a=YF(r[i],r.slice(i+1),e,t,n);if(a.error||a.consumedValue)return a}return{nextIndex:t}}const ZF=/^[cxtzvfC]+$/;function QF(e){let t=e.length>0&&ZF.test(e[0])?[`-${e[0]}`,...e.slice(1)]:e,n={gzip:!1,verbose:!1,directory:`.`,paths:[]};for(let e=0;e<t.length;e++){let r=t[e];if(!r.startsWith(`-`)||r===`-`){n.paths.push(r);continue}if(r.startsWith(`--`))return GF(`unsupported option ${r}`);let i=XF(t,e,n);if(i.error)return i.error;e=i.nextIndex}return n}function $F(e,t){let n=e.replace(/\\/g,`/`).replace(/^\/+/,``).replace(/^(?:\.\/)+/,``);return n?n===`.`?`.`:n.replace(/\/+$/,``):Ar(t)}function eI(e){let t=e.mtime?.getTime();return t===void 0||Number.isNaN(t)?{}:{mtime:Math.floor(t/1e3)}}async function tI(e,t,n,r){let i=await e.fs.stat(t);if(i.isFile){let a=await e.fs.readFileBuffer(t),o=typeof i.mode==`number`?i.mode&511:void 0;r.push({path:n,bytes:a,...o===void 0?{}:{mode:o},...eI(i)});return}if(!i.isDirectory)throw Error(`unsupported file type: ${t}`);let a=n.endsWith(`/`)?n:`${n}/`,o=typeof i.mode==`number`?i.mode&511:void 0;r.push({path:a,bytes:new Uint8Array,directory:!0,...o===void 0?{}:{mode:o},...eI(i)});for(let n of await e.fs.readdir(t))await tI(e,kr(t,n),`${a}${n}`,r)}function nI(e,t){let n=e.length>=2&&e[0]===31&&e[1]===139,r=t||n?ba(e):e;return ya(r,{stripNpmPrefix:!1,includeDirectories:!0,preserveRawPaths:!0})}function rI(e,t,n){let r=n.replace(/\\/g,`/`);if(!r||r.startsWith(`/`)||/^[a-zA-Z]:\//.test(r)||r.split(`/`).includes(`..`))return;let i=e.fs.resolvePath(t,r);return Lr(t,i)?i:void 0}async function iI(e){try{await e()}catch(e){let t=e?.code;if(t===`ENOSYS`||t===`ENOTSUP`||t===`EOPNOTSUPP`)return;throw e}}async function aI(e,t,n,r){let i=new Map(t),a=new Map(n),o=[...new Set([...i.keys(),...a.keys()])];if(o.length===0)return;let s=o.map(e=>{let t=i.get(e),n=a.get(e),r=n===void 0?void 0:new Date(n*1e3);return{path:e,...t===void 0?{}:{mode:t},...r===void 0?{}:{atime:r,mtime:r}}});if(typeof r?.updateMetadataBatch==`function`){await iI(()=>r.updateMetadataBatch(s));return}let c=e.fs;if(typeof c.updateMetadataBatch==`function`){await iI(()=>c.updateMetadataBatch(s));return}for(let[e,n]of t)await iI(()=>c.chmod(e,n));for(let[e,t]of n){let n=new Date(t*1e3);await iI(()=>c.utimes(e,n,n))}}async function oI(e,t,n,r,i){let a=n.directory?493:420,o=n.mode===a&&await e.fs.exists(t),s=n.mode!==void 0&&(n.mode!==a||o);if(n.directory){await e.fs.mkdir(t,{recursive:!0}),s&&r.push([t,n.mode]);return}let c=Pr(t);c!==`/`&&await e.fs.mkdir(c,{recursive:!0}),await e.fs.writeFile(t,n.bytes),s&&i.push([t,n.mode])}async function sI(e,t){if(e.paths.length===0)return GF(`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 tI(t,e,$F(i,e),n)}let i=t.fs.resolvePath(t.cwd,e.archive),a=_a(n);return await t.fs.writeFile(i,e.gzip?va(a):a),{stdout:e.verbose?`${n.map(e=>e.path).join(`
1924
+ `)}\n`:``,stderr:``,exitCode:0}}function cI(e){let t=new Set,n=[];for(let r=e.length-1;r>=0;r--){let[i,a]=e[r];t.has(i)||(t.add(i),n.push([i,a]))}return n}async function lI(e,t,n){if(e.paths.length>0)return GF(`${e.mode} mode does not accept input paths`);let r=t.fs.resolvePath(t.cwd,e.archive),i=nI(await t.fs.readFileBuffer(r),e.gzip);if(e.mode===`list`){let e=i.map(e=>e.path).join(`
1925
+ `);return{stdout:e?`${e}\n`:``,stderr:``,exitCode:0}}let a=t.fs.resolvePath(t.cwd,e.directory);await t.fs.mkdir(a,{recursive:!0});let o=[],s=[],c=[],l=[];for(let e of i){let n=rI(t,a,e.path);if(!n)return GF(`blocked suspicious path ${e.path}`);await oI(t,n,e,c,s),e.mtime!==void 0&&l.push([n,e.mtime]),o.push(e.path)}return await aI(t,[...cI(s),...cI(c)],cI(l),n),{stdout:e.verbose?`${o.join(`
1926
+ `)}\n`:``,stderr:``,exitCode:0}}function uI(e={}){return C(`tar`,async(t,n)=>{if(t.length===0||t.includes(`--help`)||t.includes(`-h`))return WF();let r=QF(t);return`exitCode`in r?r:r.mode?r.archive?r.mode===`list`&&r.directory!==`.`?GF(`-C is only supported in create or extract mode`):r.mode===`create`?sI(r,n):lI(r,n,e.fs):GF(`option -f requires an archive path`):GF(`exactly one of -c, -x, or -t is required`)})}var dI=`/**
1927
1927
  * Standalone assertions - no dependency on test runner
1928
1928
  *
1929
1929
  * Each assertion:
@@ -2111,7 +2111,7 @@ function sameMembers(a, b) {
2111
2111
  }
2112
2112
 
2113
2113
  const slice = a => (isPrimitive(a) ? a : a.slice ? a.slice() : Object.assign({}, a))
2114
- `,pI=`/**
2114
+ `,fI=`/**
2115
2115
  * tst - minimal test runner
2116
2116
  *
2117
2117
  * - Standalone assertions (assert.js works anywhere)
@@ -2741,7 +2741,7 @@ function scheduleAutoRun() {
2741
2741
  scheduleAutoRun()
2742
2742
 
2743
2743
  export * from './assert.js'
2744
- `;function mI(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 hI=`tsc - thin wrapper over the ipk-loaded TypeScript 6 package
2744
+ `;function pI(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 mI=`tsc - thin wrapper over the ipk-loaded TypeScript 6 package
2745
2745
 
2746
2746
  Usage:
2747
2747
  tsc [options] [files...]
@@ -2761,32 +2761,32 @@ Notes:
2761
2761
 
2762
2762
  Install:
2763
2763
  Inert until the backing package is installed in node_modules:
2764
- ${Fr}
2764
+ ${Ir}
2765
2765
  Then \`tsc --version\` and the transpile commands above. There is no
2766
2766
  bundled binary, no CDN fallback; a missing package exits non-zero
2767
2767
  with a clear \`ipk add\` hint.
2768
- `;function gI(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 _I(e,t){let n=`${kr(e).replace(/\.(ts|tsx|mts|cts)$/i,``)}.js`;return t?`${t.endsWith(`/`)?t.slice(0,-1):t}/${n}`:`${Nr(e)}/${n}`}async function vI(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=Nr(n)}return null}function yI(e){return{target:e.ScriptTarget.ES2022,module:e.ModuleKind.ESNext,moduleResolution:e.ModuleResolutionKind.Bundler,esModuleInterop:!0,allowSyntheticDefaultImports:!0,isolatedModules:!0}}function bI(e){if(typeof e!=`object`||!e)return{};let{compilerOptions:t}=e;return t??{}}async function xI(e,t,n){let r=yI(t),i=await vI(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,...bI(o)}}}function SI(e,t){let n=e.flattenDiagnosticMessageText(t.messageText,`
2769
- `);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 CI(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 wI(e,t,n,r,i){let a=e.transpileModule(t,{compilerOptions:r,fileName:n,reportDiagnostics:i});return{outputText:a.outputText,diagnostics:a.diagnostics??[]}}function TI(e,t,n,r){let{outputText:i,diagnostics:a}=wI(e,r,`<stdin>.ts`,n.compilerOptions,!0),o=a.map(t=>SI(e,t)),s=o.length>0?`${o.join(`
2770
- `)}\n`:``;return{stdout:t.noEmit?``:i,stderr:s,exitCode:+(a.length>0)}}async function EI(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}}CI(e,a);let{outputText:s,diagnostics:c}=wI(e,o,a,i.compilerOptions,!0),l=[];for(let t of c)l.push(`${SI(e,t)}\n`);let u=c.length>0;if(r.noEmit)return{stderr:l.join(``),hadError:u};let d=t.fs.resolvePath(t.cwd,_I(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 DI(e,t){let n;try{n=gI(e)}catch(e){return{done:{stdout:``,stderr:`${e instanceof Error?e.message:String(e)}\n`,exitCode:2}}}if(n.showHelp)return{done:{stdout:hI,stderr:``,exitCode:0}};let r;try{r=await Er(mI(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 OI(){return C(`tsc`,async(e,t)=>{let n=await DI(e,t);if(`done`in n)return n.done;let{parsed:r,ts:i}=n,a=await xI(t.fs,i,t.cwd);if(r.files.length===0){let e=P(t.stdin);return e?TI(i,r,a,e):{stdout:hI,stderr:``,exitCode:0}}let o=[],s=!1;for(let e of r.files){let n=await EI(i,t,e,r,a);n.stderr&&o.push(n.stderr),n.hadError&&(s=!0)}return{stdout:``,stderr:o.join(``),exitCode:+!!s}})}const kI=[`**/*.test.{js,ts}`];function AI(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 jI(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 MI(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=AI(s,e[o+1]);if(c){n=c.reporter,c.consumed===2&&(o+=1);continue}let l=jI(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:[...kI],reporter:n,showHelp:r,coverage:i,coverageDir:a}}function NI(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 NI(`${r}${e}${i}`))o.push(t);return o}function PI(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 FI(e,t,n){let r=n.flatMap(NI).map(PI),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 II=null;async function LI(e){if(II)return II;let t={module:e.ModuleKind.CommonJS,target:e.ScriptTarget.ES2022,esModuleInterop:!0,isolatedModules:!1};return II=`
2768
+ `;function hI(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 gI(e,t){let n=`${Ar(e).replace(/\.(ts|tsx|mts|cts)$/i,``)}.js`;return t?`${t.endsWith(`/`)?t.slice(0,-1):t}/${n}`:`${Pr(e)}/${n}`}async function _I(e,t){let n=t||`/`,r=``;for(;n&&n!==r;){let t=n===`/`?`/tsconfig.json`:`${n}/tsconfig.json`;if(await e.exists(t))return t;r=n,n=Pr(n)}return null}function vI(e){return{target:e.ScriptTarget.ES2022,module:e.ModuleKind.ESNext,moduleResolution:e.ModuleResolutionKind.Bundler,esModuleInterop:!0,allowSyntheticDefaultImports:!0,isolatedModules:!0}}function yI(e){if(typeof e!=`object`||!e)return{};let{compilerOptions:t}=e;return t??{}}async function bI(e,t,n){let r=vI(t),i=await _I(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,...yI(o)}}}function xI(e,t){let n=e.flattenDiagnosticMessageText(t.messageText,`
2769
+ `);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 SI(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 CI(e,t,n,r,i){let a=e.transpileModule(t,{compilerOptions:r,fileName:n,reportDiagnostics:i});return{outputText:a.outputText,diagnostics:a.diagnostics??[]}}function wI(e,t,n,r){let{outputText:i,diagnostics:a}=CI(e,r,`<stdin>.ts`,n.compilerOptions,!0),o=a.map(t=>xI(e,t)),s=o.length>0?`${o.join(`
2770
+ `)}\n`:``;return{stdout:t.noEmit?``:i,stderr:s,exitCode:+(a.length>0)}}async function TI(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}}SI(e,a);let{outputText:s,diagnostics:c}=CI(e,o,a,i.compilerOptions,!0),l=[];for(let t of c)l.push(`${xI(e,t)}\n`);let u=c.length>0;if(r.noEmit)return{stderr:l.join(``),hadError:u};let d=t.fs.resolvePath(t.cwd,gI(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 EI(e,t){let n;try{n=hI(e)}catch(e){return{done:{stdout:``,stderr:`${e instanceof Error?e.message:String(e)}\n`,exitCode:2}}}if(n.showHelp)return{done:{stdout:mI,stderr:``,exitCode:0}};let r;try{r=await Dr(pI(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 DI(){return C(`tsc`,async(e,t)=>{let n=await EI(e,t);if(`done`in n)return n.done;let{parsed:r,ts:i}=n,a=await bI(t.fs,i,t.cwd);if(r.files.length===0){let e=P(t.stdin);return e?wI(i,r,a,e):{stdout:mI,stderr:``,exitCode:0}}let o=[],s=!1;for(let e of r.files){let n=await TI(i,t,e,r,a);n.stderr&&o.push(n.stderr),n.hadError&&(s=!0)}return{stdout:``,stderr:o.join(``),exitCode:+!!s}})}const OI=[`**/*.test.{js,ts}`];function kI(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 AI(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 jI(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=kI(s,e[o+1]);if(c){n=c.reporter,c.consumed===2&&(o+=1);continue}let l=AI(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:[...OI],reporter:n,showHelp:r,coverage:i,coverageDir:a}}function MI(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 MI(`${r}${e}${i}`))o.push(t);return o}function NI(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 PI(e,t,n){let r=n.flatMap(MI).map(NI),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 FI=null;async function II(e){if(FI)return FI;let t={module:e.ModuleKind.CommonJS,target:e.ScriptTarget.ES2022,esModuleInterop:!0,isolatedModules:!1};return FI=`
2771
2771
  if (typeof process !== 'undefined' && !process.versions) {
2772
2772
  try { process.versions = { node: '20.0.0' }; } catch (_) { /* readonly process.versions is fine */ }
2773
2773
  }
2774
2774
  const __tst_assert_exports = (function () {
2775
2775
  const module = { exports: {} };
2776
2776
  const exports = module.exports;
2777
- ${e.transpileModule(fI,{compilerOptions:t,fileName:`assert.js`}).outputText}
2777
+ ${e.transpileModule(dI,{compilerOptions:t,fileName:`assert.js`}).outputText}
2778
2778
  return module.exports;
2779
2779
  })();
2780
2780
  const __tst_module_exports = (function () {
2781
2781
  const module = { exports: {} };
2782
2782
  const exports = module.exports;
2783
- ${e.transpileModule(pI,{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"))`)}
2783
+ ${e.transpileModule(fI,{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"))`)}
2784
2784
  return module.exports;
2785
2785
  })();
2786
2786
  const __tst = __tst_module_exports.default || __tst_module_exports;
2787
2787
  __tst.manual = true;
2788
- `.trim(),II}function RI(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 zI(e){let t=new Set,n=/(?:^|[^\w$.])require\(\s*(["'`])([^"'`]+)\1\s*\)/g,r;for(;(r=n.exec(e))!==null;)t.add(r[2]);return[...t]}async function BI(e,t,n){let r=x(`${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 VI(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=Nr(n),u=new Map;for(let n of zI(r)){if(!n.startsWith(`./`)&&!n.startsWith(`../`))continue;let r=await BI(e,l,n);if(!r||(u.set(n,r),o.has(r)))continue;let s=await e.readFile(r);a&&(s=a(s,r));let d=t.transpileModule(s,{compilerOptions:i,fileName:r}).outputText;o.set(r,d),c.push({path:r,cjs:d})}s.set(n,u)}return{modules:o,edgeRewrites:s}}function HI(e,t,n,r,i,a,o=``,s=``){let c=r===`spec`?`pretty`:`tap`,l=[];for(let[e,t]of i.entries()){let n=RI(t,a.get(e)??new Map);l.push(`${JSON.stringify(e)}: function (module, exports, require) {\n${n}\n}`)}let u=`{${l.join(`,
2789
- `)}}`,d=RI(n,a.get(t)??new Map),f=o,p=s;return`"use strict";
2788
+ `.trim(),FI}function LI(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 RI(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 zI(e,t,n){let r=x(`${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 BI(e,t,n,r,i,a){let o=new Map,s=new Map,c=[{path:n,cjs:r}];for(;c.length>0;){let{path:n,cjs:r}=c.shift(),l=Pr(n),u=new Map;for(let n of RI(r)){if(!n.startsWith(`./`)&&!n.startsWith(`../`))continue;let r=await zI(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 VI(e,t,n,r,i,a,o=``,s=``){let c=r===`spec`?`pretty`:`tap`,l=[];for(let[e,t]of i.entries()){let n=LI(t,a.get(e)??new Map);l.push(`${JSON.stringify(e)}: function (module, exports, require) {\n${n}\n}`)}let u=`{${l.join(`,
2789
+ `)}}`,d=LI(n,a.get(t)??new Map),f=o,p=s;return`"use strict";
2790
2790
  ${f}${e}
2791
2791
  const __realmRequire = require;
2792
2792
  const { createRequire: __createRequire } = __realmRequire("module");
@@ -2829,7 +2829,7 @@ await Promise.resolve();
2829
2829
  await new Promise((resolve) => setTimeout(resolve));
2830
2830
  ${p}
2831
2831
  if (__state && __state.failed && __state.failed.length > 0) process.exit(1);
2832
- `}const UI={esModuleInterop:!0,allowJs:!0,isolatedModules:!1};function WI(e){return{module:e.ModuleKind.CommonJS,target:e.ScriptTarget.ES2022,...UI}}async function GI(e,t){let n;try{n=MI(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
2832
+ `}const HI={esModuleInterop:!0,allowJs:!0,isolatedModules:!1};function UI(e){return{module:e.ModuleKind.CommonJS,target:e.ScriptTarget.ES2022,...HI}}async function WI(e,t){let n;try{n=jI(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
2833
2833
 
2834
2834
  Usage:
2835
2835
  tst [options] [glob...]
@@ -2851,7 +2851,7 @@ Notes:
2851
2851
  with statement counters. nyc/c8 cannot wrap this runner: it is not a
2852
2852
  Node child. Istanbul/Babel are not bundled (webapp size-limit); the
2853
2853
  TypeScript AST already in process does the rewrite.
2854
- `,stderr:``,exitCode:0}};let r=await FI(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 Er(mI(t))}catch(e){return{done:{stdout:``,stderr:`tst: ${e instanceof Error?e.message:String(e)}\n`,exitCode:1}}}let a=await LI(i),o=n.coverage?await import(`./coverage-instrument-CjoHgKzK.js`):null;return{parsed:n,files:r,ts:i,harness:a,userOpts:WI(i),coverageMaps:{},coverageCounts:{},coverageMod:o}}function KI(e){return e.includes(`# fail `)||/(^|\n)not ok /.test(e)}async function qI(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 VI(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=HI(a,n,d,s.reporter,f,p,c?`${c.coverageRuntimeSource()}\n`:``,c?`\n${c.coverageDumpSource()}`:``),h=await hi(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||KI(g)}}function JI(){return C(`tst`,async(e,t)=>{let n=await GI(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 qI(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 YI=[],XI=`usage: theme <subcommand> [args]
2854
+ `,stderr:``,exitCode:0}};let r=await PI(t.fs,t.cwd,n.globs);if(r.length===0)return{done:{stdout:``,stderr:`tst: no test files matched ${n.globs.join(` `)}\n`,exitCode:1}};let i;try{i=await Dr(pI(t))}catch(e){return{done:{stdout:``,stderr:`tst: ${e instanceof Error?e.message:String(e)}\n`,exitCode:1}}}let a=await II(i),o=n.coverage?await import(`./coverage-instrument-CjoHgKzK.js`):null;return{parsed:n,files:r,ts:i,harness:a,userOpts:UI(i),coverageMaps:{},coverageCounts:{},coverageMod:o}}function GI(e){return e.includes(`# fail `)||/(^|\n)not ok /.test(e)}async function KI(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 BI(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=VI(a,n,d,s.reporter,f,p,c?`${c.coverageRuntimeSource()}\n`:``,c?`\n${c.coverageDumpSource()}`:``),h=await gi(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||GI(g)}}function qI(){return C(`tst`,async(e,t)=>{let n=await WI(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 KI(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 JI=[],YI=`usage: theme <subcommand> [args]
2855
2855
 
2856
2856
  Subcommands:
2857
2857
  list List available preset and custom themes
@@ -2860,23 +2860,23 @@ Subcommands:
2860
2860
  reset Reset to the default theme
2861
2861
  current Show the currently active theme
2862
2862
  export <id> <path> Export a theme to a VFS path
2863
- `;function ZI(e,t){return{stdout:``,stderr:`theme ${e}: ${t}\n`,exitCode:1}}function QI(){return C(`theme`,async(e,t)=>{if(e.length===0||e[0]===`--help`||e[0]===`-h`)return{stdout:XI,stderr:``,exitCode:0};let n=e[0];return T(e.slice(1),{valueFlags:YI})?{stdout:ht(`theme`,n,XI),stderr:``,exitCode:0}:n===`list`?$I(e):n===`current`?eL(e):n===`reset`?tL(e):n===`apply`?nL(e.slice(1),t):n===`export`?rL(e.slice(1),t):{stdout:``,stderr:`theme: unknown subcommand "${n}"\n${XI}`,exitCode:1}})}async function $I(e){let t=w(e.slice(1),{value:YI});if(`error`in t)return ZI(`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(`
2864
- `),stderr:``,exitCode:0}}async function eL(e){let t=w(e.slice(1),{value:YI});return`error`in t?ZI(`current`,t.error):{stdout:`Check the Theme settings dialog for the active theme.
2865
- `,stderr:``,exitCode:0}}async function tL(e){let t=w(e.slice(1),{value:YI});if(`error`in t)return ZI(`reset`,t.error);let n=b();return n?(await n.call(`theme-apply`,{action:`reset`}),{stdout:`Theme reset to default.
2863
+ `;function XI(e,t){return{stdout:``,stderr:`theme ${e}: ${t}\n`,exitCode:1}}function ZI(){return C(`theme`,async(e,t)=>{if(e.length===0||e[0]===`--help`||e[0]===`-h`)return{stdout:YI,stderr:``,exitCode:0};let n=e[0];return T(e.slice(1),{valueFlags:JI})?{stdout:gt(`theme`,n,YI),stderr:``,exitCode:0}:n===`list`?QI(e):n===`current`?$I(e):n===`reset`?eL(e):n===`apply`?tL(e.slice(1),t):n===`export`?nL(e.slice(1),t):{stdout:``,stderr:`theme: unknown subcommand "${n}"\n${YI}`,exitCode:1}})}async function QI(e){let t=w(e.slice(1),{value:JI});if(`error`in t)return XI(`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(`
2864
+ `),stderr:``,exitCode:0}}async function $I(e){let t=w(e.slice(1),{value:JI});return`error`in t?XI(`current`,t.error):{stdout:`Check the Theme settings dialog for the active theme.
2865
+ `,stderr:``,exitCode:0}}async function eL(e){let t=w(e.slice(1),{value:JI});if(`error`in t)return XI(`reset`,t.error);let n=b();return n?(await n.call(`theme-apply`,{action:`reset`}),{stdout:`Theme reset to default.
2866
2866
  `,stderr:``,exitCode:0}):{stdout:``,stderr:`theme: no panel-RPC connection available
2867
- `,exitCode:1}}async function nL(e,t){let n=w(e,{value:YI});if(`error`in n)return ZI(`apply`,n.error);if(n.positionals.length===0)return{stdout:``,stderr:`theme apply: missing theme id or path
2867
+ `,exitCode:1}}async function tL(e,t){let n=w(e,{value:JI});if(`error`in n)return XI(`apply`,n.error);if(n.positionals.length===0)return{stdout:``,stderr:`theme apply: missing theme id or path
2868
2868
  `,exitCode:1};let r=b();if(!r)return{stdout:``,stderr:`theme: no panel-RPC connection available
2869
2869
  `,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)
2870
2870
  `,exitCode:1}}catch{return{stdout:``,stderr:`theme apply: file is not valid JSON
2871
- `,exitCode:1}}return{stdout:`Applied theme: ${(await r.call(`theme-apply`,{themeJson:c,action:`apply`})).applied}\n`,stderr:``,exitCode:0}}async function rL(e,t){let n=w(e,{value:YI});if(`error`in n)return ZI(`export`,n.error);if(n.positionals.length<2)return{stdout:``,stderr:`theme export: usage: theme export <id> <path>
2872
- `,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 iL=`unknown`,aL=`usage: uname [-amnorsv]`,oL=[`s`,`n`,`r`,`v`,`m`,`o`];function sL(){return{stdout:[aL,` -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(`
2873
- `),stderr:``,exitCode:0}}function cL(){let{releasedAt:e,buildId:t}=ct();return e?`${t} (${e})`:t}function lL(){let e=globalThis.navigator,t=e?.userAgentData?.platform||e?.platform;return typeof t==`string`&&t.length>0?t:iL}function uL(){let e=globalThis.navigator?.userAgent;return typeof e==`string`&&e.length>0?e:iL}function dL(e){switch(e){case`s`:return`SLICC`;case`n`:return st();case`r`:return ct().version;case`v`:return cL();case`m`:return lL();case`o`:return uL()}}function fL(e){return{stdout:``,stderr:`uname: ${e}\n${aL}\n`,exitCode:1}}function pL(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 oL)t.add(e);continue}if(!oL.includes(e))return{error:`unrecognized option '-${e}'`};t.add(e)}}return t}function mL(){return C(`uname`,async e=>{if(e.includes(`--help`)||e.includes(`-h`))return sL();let t=pL(e);return`error`in t?fL(t.error):{stdout:`${(t.size>0?oL.filter(e=>t.has(e)):[`s`]).map(dL).join(` `)}\n`,stderr:``,exitCode:0}})}function hL(){return C(`unlink`,async(e,t)=>{if(e.includes(`--help`))return{stdout:`Usage: unlink FILE
2871
+ `,exitCode:1}}return{stdout:`Applied theme: ${(await r.call(`theme-apply`,{themeJson:c,action:`apply`})).applied}\n`,stderr:``,exitCode:0}}async function nL(e,t){let n=w(e,{value:JI});if(`error`in n)return XI(`export`,n.error);if(n.positionals.length<2)return{stdout:``,stderr:`theme export: usage: theme export <id> <path>
2872
+ `,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 rL=`unknown`,iL=`usage: uname [-amnorsv]`,aL=[`s`,`n`,`r`,`v`,`m`,`o`];function oL(){return{stdout:[iL,` -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(`
2873
+ `),stderr:``,exitCode:0}}function sL(){let{releasedAt:e,buildId:t}=lt();return e?`${t} (${e})`:t}function cL(){let e=globalThis.navigator,t=e?.userAgentData?.platform||e?.platform;return typeof t==`string`&&t.length>0?t:rL}function lL(){let e=globalThis.navigator?.userAgent;return typeof e==`string`&&e.length>0?e:rL}function uL(e){switch(e){case`s`:return`SLICC`;case`n`:return ct();case`r`:return lt().version;case`v`:return sL();case`m`:return cL();case`o`:return lL()}}function dL(e){return{stdout:``,stderr:`uname: ${e}\n${iL}\n`,exitCode:1}}function fL(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 aL)t.add(e);continue}if(!aL.includes(e))return{error:`unrecognized option '-${e}'`};t.add(e)}}return t}function pL(){return C(`uname`,async e=>{if(e.includes(`--help`)||e.includes(`-h`))return oL();let t=fL(e);return`error`in t?dL(t.error):{stdout:`${(t.size>0?aL.filter(e=>t.has(e)):[`s`]).map(uL).join(` `)}\n`,stderr:``,exitCode:0}})}function mL(){return C(`unlink`,async(e,t)=>{if(e.includes(`--help`))return{stdout:`Usage: unlink FILE
2874
2874
  Remove FILE. Symbolic links are removed without following their target.
2875
2875
  `,stderr:``,exitCode:0};if(e.length!==1||e[0].startsWith(`-`))return{stdout:``,stderr:e.length===0?`unlink: missing operand
2876
2876
  `:`unlink: extra operand
2877
- `,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 gL(){return{stdout:`usage: unzip <archive.zip> [-d <destination>]
2878
- `,stderr:``,exitCode:0}}function _L(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
2879
- `,exitCode:1}}:{kind:`ok`,archive:n[0],destination:t||`.`}}async function vL(e,t,n,r){let i=n.replace(/\\/g,`/`);if(!i||i.endsWith(`/`))return!1;let a=e.fs.resolvePath(t,i);if(!Ir(t,a))return{stdout:``,stderr:`unzip: blocked suspicious path ${n}\n`,exitCode:1};let o=Nr(a);return o!==`/`&&await e.fs.mkdir(o,{recursive:!0}),await e.fs.writeFile(a,r),!0}function yL(){return C(`unzip`,async(e,t)=>{if(e.length===0||e.includes(`--help`)||e.includes(`-h`))return gL();let n=_L(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=It(a),s=0;for(let[e,n]of Object.entries(o)){let r=await vL(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 bL=`ai-ecoverse/slicc`,xL=`usage: upgrade status | upgrade apply --from=<version> --to=<version>`,SL=`packages/vfs-root`,CL=3e4,wL=[`${SL}/workspace/skills/`,`${SL}/shared/sprinkles/`,`${SL}/shared/sounds/`,`${SL}/shared/GELATIERE.md`,`${SL}/shared/wiki/WIKI.md`,`${SL}/etc/`],TL=[`auto-applied`,`merged-clean`,`kept-local`,`needs-review`,`unchanged`,`added-new`];function EL(){return Object.fromEntries(TL.map(e=>[e,0]))}function DL(e,t,n,r){let i=EL();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 OL(e){if(e[0]!==`apply`)throw Error(xL);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 kL(e){return e.startsWith(`v`)?e:`v${e}`}function AL(e){if(!wL.some(t=>e.startsWith(t)))return null;let t=e.slice(17);return!t||t.split(`/`).some(e=>e===`.`||e===`..`)||t.startsWith(`/workspace/skills/`)&&we()?null:t}async function jL(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 ${CL}ms`)),CL)})])}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 ML(e,t){let n=await jL(t,`https://api.github.com/repos/${bL}/git/trees/${encodeURIComponent(e)}?recursive=1`),r=ke(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=AL(e.path);t&&i.set(t,e.path)}return i}function NL(e,t){let n=t.split(`/`).map(encodeURIComponent).join(`/`);return`https://raw.githubusercontent.com/${bL}/${encodeURIComponent(e)}/${n}`}function PL(e,t){return!e||!t||e.byteLength!==t.byteLength?!1:e.every((e,n)=>e===t[n])}function FL(e){try{return new TextDecoder(`utf-8`,{fatal:!0}).decode(e)}catch{return null}}async function IL(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 LL(e,t,n,r,i){let a=`${t}.upgrade-${kL(n)}-to-${kL(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 RL(e,t,n,r,i,a,o){let s=await IL(e.fs,t);if(!a)return{path:t,classification:s?`kept-local`:`unchanged`};if(!i)return s?{path:t,classification:PL(s,a)?`unchanged`:`kept-local`}:{path:t,classification:`added-new`,content:a};if(PL(i,a)||PL(s,a))return{path:t,classification:`unchanged`};if(!s)return{path:t,classification:`kept-local`};if(PL(s,i))return{path:t,classification:`auto-applied`,content:a};let[c,l,u]=[s,i,a].map(FL);if(c!==null&&l!==null&&u!==null){let i=Je(c,l,u,{diff3:!0,labels:{current:`local:${t}`,base:`${kL(n)}:${t}`,other:`${kL(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 LL(e.fs,t,n,r,o)}}return{path:t,classification:`needs-review`,content:a,sidecar:await LL(e.fs,t,n,r,o)}}async function zL(e,t){t.content?await e.writeFile(t.path,t.content):await e.exists(t.path)&&await e.rm(t.path)}async function BL(e,t){let n=t.filter(e=>e.content!==void 0),r=await Promise.all(n.map(async t=>{let n=t.sidecar??t.path;return{path:n,content:await IL(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 zL(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 VL(e,t,n){let r=kL(t),i=kL(n),[a,o]=await Promise.all([ML(r,e.fetch),ML(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)?jL(e.fetch,NL(r,a.get(t))).then(e=>je(e.body)):void 0,o.has(t)?jL(e.fetch,NL(i,o.get(t))).then(e=>je(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 RL(e,r,t,n,i,a,l));return await BL(e.fs,u),u}async function HL(e){let{version:t,releasedAt:n,buildId:r}=ct(),i=[],a=null,o=e.getLastSeen??lt();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 UL(e){return C(`upgrade`,async t=>{if(t.includes(`--help`)||t.includes(`-h`))return{stdout:`${xL}\n`,stderr:``,exitCode:0};if(t[0]===`status`)return t.length>1?{stdout:DL(``,``,[],[`unsupported argument: ${t[1]}`]),stderr:``,exitCode:1}:{stdout:await HL(e),stderr:``,exitCode:0};let n=``,r=``;try{({from:n,to:r}=OL(t));let i=await VL(e,n,r),a=i.some(e=>e.classification===`needs-review`);return{stdout:DL(n,r,i,[]),stderr:``,exitCode:+!!a}}catch(e){let t=e instanceof Error?e.message:String(e);return{stdout:DL(n,r,[],[t]),stderr:``,exitCode:1}}})}const WL=`usage: uptime [-p|--pretty] [-s|--since]`,GL=`${WL}
2877
+ `,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 hL(){return{stdout:`usage: unzip <archive.zip> [-d <destination>]
2878
+ `,stderr:``,exitCode:0}}function gL(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
2879
+ `,exitCode:1}}:{kind:`ok`,archive:n[0],destination:t||`.`}}async function _L(e,t,n,r){let i=n.replace(/\\/g,`/`);if(!i||i.endsWith(`/`))return!1;let a=e.fs.resolvePath(t,i);if(!Lr(t,a))return{stdout:``,stderr:`unzip: blocked suspicious path ${n}\n`,exitCode:1};let o=Pr(a);return o!==`/`&&await e.fs.mkdir(o,{recursive:!0}),await e.fs.writeFile(a,r),!0}function vL(){return C(`unzip`,async(e,t)=>{if(e.length===0||e.includes(`--help`)||e.includes(`-h`))return hL();let n=gL(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=Lt(a),s=0;for(let[e,n]of Object.entries(o)){let r=await _L(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 yL=`ai-ecoverse/slicc`,bL=`usage: upgrade status | upgrade apply --from=<version> --to=<version>`,xL=`packages/vfs-root`,SL=3e4,CL=[`${xL}/workspace/skills/`,`${xL}/shared/sprinkles/`,`${xL}/shared/sounds/`,`${xL}/shared/GELATIERE.md`,`${xL}/shared/wiki/WIKI.md`,`${xL}/etc/`],wL=[`auto-applied`,`merged-clean`,`kept-local`,`needs-review`,`unchanged`,`added-new`];function TL(){return Object.fromEntries(wL.map(e=>[e,0]))}function EL(e,t,n,r){let i=TL();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 DL(e){if(e[0]!==`apply`)throw Error(bL);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 OL(e){return e.startsWith(`v`)?e:`v${e}`}function kL(e){if(!CL.some(t=>e.startsWith(t)))return null;let t=e.slice(17);return!t||t.split(`/`).some(e=>e===`.`||e===`..`)||t.startsWith(`/workspace/skills/`)&&we()?null:t}async function AL(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 ${SL}ms`)),SL)})])}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 jL(e,t){let n=await AL(t,`https://api.github.com/repos/${yL}/git/trees/${encodeURIComponent(e)}?recursive=1`),r=ke(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=kL(e.path);t&&i.set(t,e.path)}return i}function ML(e,t){let n=t.split(`/`).map(encodeURIComponent).join(`/`);return`https://raw.githubusercontent.com/${yL}/${encodeURIComponent(e)}/${n}`}function NL(e,t){return!e||!t||e.byteLength!==t.byteLength?!1:e.every((e,n)=>e===t[n])}function PL(e){try{return new TextDecoder(`utf-8`,{fatal:!0}).decode(e)}catch{return null}}async function FL(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 IL(e,t,n,r,i){let a=`${t}.upgrade-${OL(n)}-to-${OL(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 LL(e,t,n,r,i,a,o){let s=await FL(e.fs,t);if(!a)return{path:t,classification:s?`kept-local`:`unchanged`};if(!i)return s?{path:t,classification:NL(s,a)?`unchanged`:`kept-local`}:{path:t,classification:`added-new`,content:a};if(NL(i,a)||NL(s,a))return{path:t,classification:`unchanged`};if(!s)return{path:t,classification:`kept-local`};if(NL(s,i))return{path:t,classification:`auto-applied`,content:a};let[c,l,u]=[s,i,a].map(PL);if(c!==null&&l!==null&&u!==null){let i=Ye(c,l,u,{diff3:!0,labels:{current:`local:${t}`,base:`${OL(n)}:${t}`,other:`${OL(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 IL(e.fs,t,n,r,o)}}return{path:t,classification:`needs-review`,content:a,sidecar:await IL(e.fs,t,n,r,o)}}async function RL(e,t){t.content?await e.writeFile(t.path,t.content):await e.exists(t.path)&&await e.rm(t.path)}async function zL(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 FL(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 RL(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 BL(e,t,n){let r=OL(t),i=OL(n),[a,o]=await Promise.all([jL(r,e.fetch),jL(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)?AL(e.fetch,ML(r,a.get(t))).then(e=>je(e.body)):void 0,o.has(t)?AL(e.fetch,ML(i,o.get(t))).then(e=>je(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 LL(e,r,t,n,i,a,l));return await zL(e.fs,u),u}async function VL(e){let{version:t,releasedAt:n,buildId:r}=lt(),i=[],a=null,o=e.getLastSeen??ut();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 HL(e){return C(`upgrade`,async t=>{if(t.includes(`--help`)||t.includes(`-h`))return{stdout:`${bL}\n`,stderr:``,exitCode:0};if(t[0]===`status`)return t.length>1?{stdout:EL(``,``,[],[`unsupported argument: ${t[1]}`]),stderr:``,exitCode:1}:{stdout:await VL(e),stderr:``,exitCode:0};let n=``,r=``;try{({from:n,to:r}=DL(t));let i=await BL(e,n,r),a=i.some(e=>e.classification===`needs-review`);return{stdout:EL(n,r,i,[]),stderr:``,exitCode:+!!a}}catch(e){let t=e instanceof Error?e.message:String(e);return{stdout:EL(n,r,[],[t]),stderr:``,exitCode:1}}})}const UL=`usage: uptime [-p|--pretty] [-s|--since]`,WL=`${UL}
2880
2880
 
2881
2881
  Print how long this SLICC has been running. The clock starts when the browser
2882
2882
  window was last loaded — a reload is a reboot.
@@ -2892,7 +2892,7 @@ The load average is the average number of live kernel processes over the last
2892
2892
  processes are retained in bounded numbers, so a long burst of short commands
2893
2893
  can under-report the older windows. The user count is always 1: a SLICC
2894
2894
  runtime has one user identity (see \`id\`).
2895
- `,KL=[1,5,15],qL=6e4,JL=60*qL,YL=24*JL;function XL(){let e=globalThis.__slicc_pm;return e instanceof Object&&typeof e.list==`function`?e:null}function ZL(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 QL(e){let t=Math.max(0,e),n=Math.floor(t/YL),r=Math.floor(t%YL/JL),i=Math.floor(t%JL/qL),a=r>0?`${r}:${String(i).padStart(2,`0`)}`:`${i} min`;return n===0?a:`${n} ${n===1?`day`:`days`}, ${a}`}function $L(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/YL),`day`),r(Math.floor(t%YL/JL),`hour`),r(Math.floor(t%JL/qL),`minute`),n.length===0?`up ${Math.floor(t/1e3)} seconds`:`up ${n.join(`, `)}`}function eR(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 tR(e){let t=new Date(e),n=e=>String(e).padStart(2,`0`);return`${n(t.getHours())}:${n(t.getMinutes())}:${n(t.getSeconds())}`}function nR(e,t,n){let r=KL.map(r=>ZL(e,t,r*qL,n).toFixed(2));return` ${tR(t)} up ${QL(t-n)}, 1 user, load average: ${r.join(`, `)}\n`}function rR(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 iR(e={}){return C(`uptime`,async t=>{let n=rR(t);if(typeof n!=`string`)return{stdout:``,stderr:`uptime: ${n.error}\n${WL}\n`,exitCode:1};if(n===`help`)return{stdout:GL,stderr:``,exitCode:0};if(n===`version`)return{stdout:`uptime (SLICC) ${ct().version}\n`,stderr:``,exitCode:0};let r=e.now?e.now():Date.now(),i=e.bootedAt?e.bootedAt():Aa();if(n===`since`)return aR(`${eR(i)}\n`);if(n===`pretty`)return aR(`${$L(r-i)}\n`);let a=e.processManager??XL();return aR(nR(a?a.list():[],r,i))})}function aR(e){return{stdout:e,stderr:``,exitCode:0}}const oR=new Set([`--vid`,`--pid`,`--class`,`--subclass`,`--protocol`,`--serial`,`--request-type`,`--recipient`,`--request`,`--value`,`--index`,`--__resolved`]);function sR(e){return Bn(e,oR)}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 cR(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 lR=new Set([`standard`,`class`,`vendor`]),uR=new Set([`device`,`interface`,`endpoint`,`other`]);function dR(e){let t=e.get(`--request-type`)??`vendor`,n=e.get(`--recipient`)??`device`;if(!lR.has(t))throw Error(`invalid --request-type: '${t}'`);if(!uR.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 fR(e){let t=cr(e.stdin),n=new Uint8Array(t.length);for(let e=0;e<t.length;e++)n[e]=t.charCodeAt(e)&255;return n}function pR(e){return Array.from(e,e=>e.toString(16).padStart(2,`0`)).join(` `)}function mR(e){return`0x${e.toString(16).padStart(4,`0`)}`}function hR(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${mR(e.vendorId)}:${mR(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 gR=`usb - access USB devices via WebUSB
2895
+ `,GL=[1,5,15],KL=6e4,qL=60*KL,JL=24*qL;function YL(){let e=globalThis.__slicc_pm;return e instanceof Object&&typeof e.list==`function`?e:null}function XL(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 ZL(e){let t=Math.max(0,e),n=Math.floor(t/JL),r=Math.floor(t%JL/qL),i=Math.floor(t%qL/KL),a=r>0?`${r}:${String(i).padStart(2,`0`)}`:`${i} min`;return n===0?a:`${n} ${n===1?`day`:`days`}, ${a}`}function QL(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/JL),`day`),r(Math.floor(t%JL/qL),`hour`),r(Math.floor(t%qL/KL),`minute`),n.length===0?`up ${Math.floor(t/1e3)} seconds`:`up ${n.join(`, `)}`}function $L(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 eR(e){let t=new Date(e),n=e=>String(e).padStart(2,`0`);return`${n(t.getHours())}:${n(t.getMinutes())}:${n(t.getSeconds())}`}function tR(e,t,n){let r=GL.map(r=>XL(e,t,r*KL,n).toFixed(2));return` ${eR(t)} up ${ZL(t-n)}, 1 user, load average: ${r.join(`, `)}\n`}function nR(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 rR(e={}){return C(`uptime`,async t=>{let n=nR(t);if(typeof n!=`string`)return{stdout:``,stderr:`uptime: ${n.error}\n${UL}\n`,exitCode:1};if(n===`help`)return{stdout:WL,stderr:``,exitCode:0};if(n===`version`)return{stdout:`uptime (SLICC) ${lt().version}\n`,stderr:``,exitCode:0};let r=e.now?e.now():Date.now(),i=e.bootedAt?e.bootedAt():ja();if(n===`since`)return iR(`${$L(i)}\n`);if(n===`pretty`)return iR(`${QL(r-i)}\n`);let a=e.processManager??YL();return iR(tR(a?a.list():[],r,i))})}function iR(e){return{stdout:e,stderr:``,exitCode:0}}const aR=new Set([`--vid`,`--pid`,`--class`,`--subclass`,`--protocol`,`--serial`,`--request-type`,`--recipient`,`--request`,`--value`,`--index`,`--__resolved`]);function oR(e){return Vn(e,aR)}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 sR(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 cR=new Set([`standard`,`class`,`vendor`]),lR=new Set([`device`,`interface`,`endpoint`,`other`]);function uR(e){let t=e.get(`--request-type`)??`vendor`,n=e.get(`--recipient`)??`device`;if(!cR.has(t))throw Error(`invalid --request-type: '${t}'`);if(!lR.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 dR(e){let t=lr(e.stdin),n=new Uint8Array(t.length);for(let e=0;e<t.length;e++)n[e]=t.charCodeAt(e)&255;return n}function fR(e){return Array.from(e,e=>e.toString(16).padStart(2,`0`)).join(` `)}function pR(e){return`0x${e.toString(16).padStart(4,`0`)}`}function mR(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${pR(e.vendorId)}:${pR(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 hR=`usb - access USB devices via WebUSB
2896
2896
 
2897
2897
  Usage: usb <subcommand> [options]
2898
2898
 
@@ -2930,12 +2930,12 @@ Options:
2930
2930
  (bridged waits time out after 5 minutes and drop the waiter)
2931
2931
  -h, --help
2932
2932
 
2933
- Transfers are capped at ${Ei} bytes (4 MiB).
2934
- `;function _R(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?`${pR(e)}\n`:``)}async function vR(e){let t=await e.list();return t.length===0?X(`no granted USB devices
2935
- `):X(`${t.map(hR).join(`
2936
- `)}\n`)}async function yR(e,t){let n=e.get(`--__resolved`);if(n)return X(`${hR(await t.info(n))}\n`);let r=cR(e),i=Be();if(i){let e=await Xx(`usb-device`,r,i);if(e.handle)return X(`${hR(await t.info(e.handle))}\n`);let n=e.info,a=wi();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=Ti().register(o);return X(`${hR(Ci(s,o))}\n`)}return X(`${hR(await t.request(r))}\n`)}async function bR(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 xR(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 SR(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 CR(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 wR(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`):_R((await n.controlIn(i,dR(t),o)).bytes,r)}async function TR(e,t,n,r){let i=e[1];if(!i)return Z(`control-out: handle required`);let a=fR(t);return a.length>4194304?Z(`control-out payload exceeds 4 MiB limit`):X(`${(await r.controlOut(i,dR(n),a)).bytesWritten} bytes written\n`)}async function ER(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`):_R((await n.transferIn(i,Y(a,`endpoint`),s)).bytes,r)}async function DR(e,t,n,r){let[,i,a]=e;if(!i||a===void 0)return Z(`transfer-out: handle and endpoint required`);let o=fR(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 OR(e,t,n){let{positionals:r,flags:i,bools:a}=sR(e),o=r[0],s=a.has(`--raw`);switch(o){case`list`:return vR(n);case`request`:return yR(i,n);case`open`:case`close`:case`reset`:return bR(o,r,n,a);case`clear-halt`:return xR(r,n);case`select-config`:return SR(r,n);case`claim`:case`release`:return CR(o,r,n,a);case`control-in`:return wR(r,i,n,s);case`control-out`:return TR(r,t,i,n);case`transfer-in`:return ER(r,i,n,s);case`transfer-out`:return DR(r,t,i,n);default:return Z(`unknown subcommand '${o??``}'. Try 'usb --help'.`)}}function kR(){return C(`usb`,async(e,t)=>{if(e.length===0||e.includes(`--help`)||e.includes(`-h`))return X(gR);let n=ai(be(),b());if(!n)return Z(`WebUSB is unavailable in this environment`);try{return await OR(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 AR=`/workspace/.v86`,jR=`v86 - run an x86 virtual machine (v86 wasm engine)
2933
+ Transfers are capped at ${Di} bytes (4 MiB).
2934
+ `;function gR(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?`${fR(e)}\n`:``)}async function _R(e){let t=await e.list();return t.length===0?X(`no granted USB devices
2935
+ `):X(`${t.map(mR).join(`
2936
+ `)}\n`)}async function vR(e,t){let n=e.get(`--__resolved`);if(n)return X(`${mR(await t.info(n))}\n`);let r=sR(e),i=Ve();if(i){let e=await Yx(`usb-device`,r,i);if(e.handle)return X(`${mR(await t.info(e.handle))}\n`);let n=e.info,a=Ti();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=Ei().register(o);return X(`${mR(wi(s,o))}\n`)}return X(`${mR(await t.request(r))}\n`)}async function yR(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 bR(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 xR(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 SR(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 CR(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`):gR((await n.controlIn(i,uR(t),o)).bytes,r)}async function wR(e,t,n,r){let i=e[1];if(!i)return Z(`control-out: handle required`);let a=dR(t);return a.length>4194304?Z(`control-out payload exceeds 4 MiB limit`):X(`${(await r.controlOut(i,uR(n),a)).bytesWritten} bytes written\n`)}async function TR(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`):gR((await n.transferIn(i,Y(a,`endpoint`),s)).bytes,r)}async function ER(e,t,n,r){let[,i,a]=e;if(!i||a===void 0)return Z(`transfer-out: handle and endpoint required`);let o=dR(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 DR(e,t,n){let{positionals:r,flags:i,bools:a}=oR(e),o=r[0],s=a.has(`--raw`);switch(o){case`list`:return _R(n);case`request`:return vR(i,n);case`open`:case`close`:case`reset`:return yR(o,r,n,a);case`clear-halt`:return bR(r,n);case`select-config`:return xR(r,n);case`claim`:case`release`:return SR(o,r,n,a);case`control-in`:return CR(r,i,n,s);case`control-out`:return wR(r,t,i,n);case`transfer-in`:return TR(r,i,n,s);case`transfer-out`:return ER(r,t,i,n);default:return Z(`unknown subcommand '${o??``}'. Try 'usb --help'.`)}}function OR(){return C(`usb`,async(e,t)=>{if(e.length===0||e.includes(`--help`)||e.includes(`-h`))return X(hR);let n=oi(be(),b());if(!n)return Z(`WebUSB is unavailable in this environment`);try{return await DR(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 kR=`/workspace/.v86`,AR=`v86 - run an x86 virtual machine (v86 wasm engine)
2937
2937
 
2938
- Requires: ${F} v86@${IO}
2938
+ Requires: ${F} v86@${FO}
2939
2939
 
2940
2940
  Usage:
2941
2941
  v86 start [boot options] Boot a VM in the background (prints pid)
@@ -2969,7 +2969,7 @@ Boot options (QEMU-flavored):
2969
2969
  proxy — no gateway needed, https upstream via the proxy
2970
2970
  -vga <MiB> SVGA/VBE video memory (default 8, max 64) —
2971
2971
  raise for high-res VESA modes (1080p32 needs ~9)
2972
- -bios <path> -vgabios <path> BIOS blobs (default ${AR}/{seabios,vgabios}.bin)
2972
+ -bios <path> -vgabios <path> BIOS blobs (default ${kR}/{seabios,vgabios}.bin)
2973
2973
  -nographic Serial-only guest (skip VGA)
2974
2974
 
2975
2975
  Notes:
@@ -2977,19 +2977,19 @@ Notes:
2977
2977
  (Alpine, FreeDOS, Buildroot Linux) work best.
2978
2978
  - The copy.sh Arch Linux image boots via -state + -fs9p; see the v86 skill.
2979
2979
  - BIOS blobs are not bundled; download once:
2980
- mkdir -p ${AR}
2981
- curl -o ${AR}/seabios.bin https://raw.githubusercontent.com/copy/v86/master/bios/seabios.bin
2982
- curl -o ${AR}/vgabios.bin https://raw.githubusercontent.com/copy/v86/master/bios/vgabios.bin
2983
- `,MR=`v86: BIOS images not found. Download them once:
2984
- mkdir -p ${AR}
2985
- curl -o ${AR}/seabios.bin https://raw.githubusercontent.com/copy/v86/master/bios/seabios.bin
2986
- curl -o ${AR}/vgabios.bin https://raw.githubusercontent.com/copy/v86/master/bios/vgabios.bin
2987
- or pass -bios / -vgabios with explicit VFS paths.`,NR={"-n":PR,"-name":PR,"--name":PR,"-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)=>FR(e,`cdrom`,t),"-hda":(e,t)=>FR(e,`hda`,t),"-fda":(e,t)=>FR(e,`fda`,t),"-kernel":(e,t)=>FR(e,`kernel`,t),"-initrd":(e,t)=>FR(e,`initrd`,t),"-append":(e,t)=>FR(e,`append`,t),"-bios":(e,t)=>FR(e,`bios`,t),"-vgabios":(e,t)=>FR(e,`vgabios`,t),"-state":(e,t)=>FR(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 PR(e,t){return/^[A-Za-z0-9_-]+$/.test(t)?(e.name=t,null):`invalid VM name '${t}'`}function FR(e,t,n){return e[t]=n,null}const IR=[...Object.keys(NR),`--fps`,`--tail`,`--send`,`--to`];function LR(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(NR,r)?NR[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 RR(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 zR(e){let t=[],n=`vm0`;for(let r=0;r<e.length;r++){if(e[r]===`-n`||e[r]===`-name`||e[r]===`--name`){let t=e[r+1];if(t){n=t,r++;continue}}t.push(e[r])}return{name:n,rest:t}}function BR(e){return wa(e)||Q(`no VM named '${e}' — boot one with \`v86 start -n ${e} ...\``)}function VR(e){return`exitCode`in e}async function HR(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 UR={a:801,c:306,d:531};function WR(){let e=globalThis.__slicc_pm;return e instanceof Object&&typeof e.signal==`function`?e:null}function GR(e={}){return C(`v86`,async(t,n)=>{if(t.length===0||t[0]===`--help`||t[0]===`-h`||t[0]===`help`)return $(jR);if(t[0]===`--version`)return KR(n,e);let r=t[0];if(T(t.slice(1),{valueFlags:IR}))return $(ht(`v86`,r,jR,{prefix:`v86`}));let i=mt(t.slice(1));try{switch(r){case`start`:return await QR(i,n,e);case`ls`:return ez();case`type`:return await iz(i,n);case`key`:return await az(i,n);case`mouse`:return await sz(i,n);case`screenshot`:return await cz(i,n);case`text`:return await lz(i,n);case`serve`:return uz(i);case`serial`:return dz(i);case`state`:return await fz(i,n);case`stop`:return await pz(i,e);default:return Q(`unknown subcommand '${r}' — see \`v86 --help\``)}}catch(e){return Q(e instanceof Error?e.message:String(e))}})}async function KR(e,t){if(t.loadEngine)return $(`v86 ${(await t.loadEngine(RR(e))).version} (qemu-flavored CLI)\n`);let n=await HO(RR(e));return n?$(`v86 ${n.version} (qemu-flavored CLI)\n`):Q(LO)}async function qR(e,t,n){if(e.state&&!e.bios&&!e.vgabios)return null;let r=await HR(t,e.bios??`${AR}/seabios.bin`,`-bios`);if(`exitCode`in r)return e.bios?r:Q(MR.replace(/^v86: /u,``));if(n.bios=r,e.nographic)return null;let i=await HR(t,e.vgabios??`${AR}/vgabios.bin`,`-vgabios`);return`exitCode`in i?e.vgabios?i:Q(MR.replace(/^v86: /u,``)):(n.vga_bios=i,null)}async function JR(e,t,n){let r=await qR(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 HR(t,a,`-${r}`);if(`exitCode`in o)return o;n[i]=o}if(e.append&&(n.cmdline=e.append),e.boot&&(n.boot_order=UR[e.boot]),e.state){let r=await HR(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 YR=6e4;function XR(e){return e.v86?Promise.resolve():new Promise((t,n)=>{let r=setTimeout(()=>n(Error(`engine init timed out after ${YR/1e3}s`)),YR);e.add_listener(`emulator-loaded`,()=>{clearTimeout(r),t()})})}function ZR(e,t){let n=e.network_adapter;if(!n||typeof n.fetch!=`function`)return Q(`relay=fetch: engine exposed no fetch-relay network adapter`);let r=t.proxiedFetch??g();return n.fetch=async(e,t)=>{let n=e.replace(/^http:\/\/(?!localhost[:/]|127\.0\.0\.1[:/])/u,`https://`),i={};t?.headers?.forEach((e,t)=>{i[t]=e});let a;if(t?.body){let e=``;for(let n of t.body)e+=String.fromCharCode(n);a=e}let o=await r(n,{method:t?.method,headers:i,body:a}),s=o.body,c=s.buffer.slice(s.byteOffset,s.byteOffset+s.byteLength);return{status:o.status,statusText:o.statusText,headers:new Headers(o.headers),redirected:!1,url:o.url,arrayBuffer:async()=>c}},null}async function QR(e,t,n){let r=LR(e);if(!r.ok)return Q(r.error);let i=r.parsed;if(wa(i.name))return Q(`VM '${i.name}' already running — stop it first or pick another -n name`);let a=RR(t),o=n.loadEngine?await n.loadEngine(a):await zO({ipk:a}),s={wasm_fn:WO(o.wasmModule),memory_size:i.memoryMib*1024*1024,vga_memory_size:i.vgaMemoryMib*1024*1024,autostart:!1,disable_speaker:!0,fastboot:!0},c=await JR(i,t,s);if(c)return c;let l=new o.V86(s),u={name:i.name,emulator:l,engineVersion:o.version,pid:null,startedAt:Date.now(),bootArgv:[`v86`,`start`,...e],serial:{buffer:``},screen:{mode:`text`,width:0,height:0,frame:null},serve:null},d=n.processManager??WR();if(d){let e=d.spawn({kind:`net`,argv:u.bootArgv,cwd:t.cwd,owner:{kind:`system`}});u.pid=e.pid,e.abort.signal.addEventListener(`abort`,()=>{$R(u,d)})}Ca(u);try{if(await XR(l),i.netRelay===`fetch`){let e=ZR(l,n);if(e)return await $R(u,d),e}Sa(u),await l.run()}catch(e){return await $R(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-16ZWsI-9.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 $R(e,t){Ta(e),xa(e.name),import(`./v86-16ZWsI-9.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 ez(){let e=ba();if(e.length===0)return $(`no VMs running
2980
+ mkdir -p ${kR}
2981
+ curl -o ${kR}/seabios.bin https://raw.githubusercontent.com/copy/v86/master/bios/seabios.bin
2982
+ curl -o ${kR}/vgabios.bin https://raw.githubusercontent.com/copy/v86/master/bios/vgabios.bin
2983
+ `,jR=`v86: BIOS images not found. Download them once:
2984
+ mkdir -p ${kR}
2985
+ curl -o ${kR}/seabios.bin https://raw.githubusercontent.com/copy/v86/master/bios/seabios.bin
2986
+ curl -o ${kR}/vgabios.bin https://raw.githubusercontent.com/copy/v86/master/bios/vgabios.bin
2987
+ or pass -bios / -vgabios with explicit VFS paths.`,MR={"-n":NR,"-name":NR,"--name":NR,"-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)=>PR(e,`cdrom`,t),"-hda":(e,t)=>PR(e,`hda`,t),"-fda":(e,t)=>PR(e,`fda`,t),"-kernel":(e,t)=>PR(e,`kernel`,t),"-initrd":(e,t)=>PR(e,`initrd`,t),"-append":(e,t)=>PR(e,`append`,t),"-bios":(e,t)=>PR(e,`bios`,t),"-vgabios":(e,t)=>PR(e,`vgabios`,t),"-state":(e,t)=>PR(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 NR(e,t){return/^[A-Za-z0-9_-]+$/.test(t)?(e.name=t,null):`invalid VM name '${t}'`}function PR(e,t,n){return e[t]=n,null}const FR=[...Object.keys(MR),`--fps`,`--tail`,`--send`,`--to`];function IR(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(MR,r)?MR[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 LR(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 RR(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 zR(e){return Ta(e)||Q(`no VM named '${e}' — boot one with \`v86 start -n ${e} ...\``)}function BR(e){return`exitCode`in e}async function VR(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 HR={a:801,c:306,d:531};function UR(){let e=globalThis.__slicc_pm;return e instanceof Object&&typeof e.signal==`function`?e:null}function WR(e={}){return C(`v86`,async(t,n)=>{if(t.length===0||t[0]===`--help`||t[0]===`-h`||t[0]===`help`)return $(AR);if(t[0]===`--version`)return GR(n,e);let r=t[0];if(T(t.slice(1),{valueFlags:FR}))return $(gt(`v86`,r,AR,{prefix:`v86`}));let i=ht(t.slice(1));try{switch(r){case`start`:return await ZR(i,n,e);case`ls`:return $R();case`type`:return await rz(i,n);case`key`:return await iz(i,n);case`mouse`:return await oz(i,n);case`screenshot`:return await sz(i,n);case`text`:return await cz(i,n);case`serve`:return lz(i);case`serial`:return uz(i);case`state`:return await dz(i,n);case`stop`:return await fz(i,e);default:return Q(`unknown subcommand '${r}' — see \`v86 --help\``)}}catch(e){return Q(e instanceof Error?e.message:String(e))}})}async function GR(e,t){if(t.loadEngine)return $(`v86 ${(await t.loadEngine(LR(e))).version} (qemu-flavored CLI)\n`);let n=await VO(LR(e));return n?$(`v86 ${n.version} (qemu-flavored CLI)\n`):Q(IO)}async function KR(e,t,n){if(e.state&&!e.bios&&!e.vgabios)return null;let r=await VR(t,e.bios??`${kR}/seabios.bin`,`-bios`);if(`exitCode`in r)return e.bios?r:Q(jR.replace(/^v86: /u,``));if(n.bios=r,e.nographic)return null;let i=await VR(t,e.vgabios??`${kR}/vgabios.bin`,`-vgabios`);return`exitCode`in i?e.vgabios?i:Q(jR.replace(/^v86: /u,``)):(n.vga_bios=i,null)}async function qR(e,t,n){let r=await KR(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 VR(t,a,`-${r}`);if(`exitCode`in o)return o;n[i]=o}if(e.append&&(n.cmdline=e.append),e.boot&&(n.boot_order=HR[e.boot]),e.state){let r=await VR(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 JR=6e4;function YR(e){return e.v86?Promise.resolve():new Promise((t,n)=>{let r=setTimeout(()=>n(Error(`engine init timed out after ${JR/1e3}s`)),JR);e.add_listener(`emulator-loaded`,()=>{clearTimeout(r),t()})})}function XR(e,t){let n=e.network_adapter;if(!n||typeof n.fetch!=`function`)return Q(`relay=fetch: engine exposed no fetch-relay network adapter`);let r=t.proxiedFetch??g();return n.fetch=async(e,t)=>{let n=e.replace(/^http:\/\/(?!localhost[:/]|127\.0\.0\.1[:/])/u,`https://`),i={};t?.headers?.forEach((e,t)=>{i[t]=e});let a;if(t?.body){let e=``;for(let n of t.body)e+=String.fromCharCode(n);a=e}let o=await r(n,{method:t?.method,headers:i,body:a}),s=o.body,c=s.buffer.slice(s.byteOffset,s.byteOffset+s.byteLength);return{status:o.status,statusText:o.statusText,headers:new Headers(o.headers),redirected:!1,url:o.url,arrayBuffer:async()=>c}},null}async function ZR(e,t,n){let r=IR(e);if(!r.ok)return Q(r.error);let i=r.parsed;if(Ta(i.name))return Q(`VM '${i.name}' already running — stop it first or pick another -n name`);let a=LR(t),o=n.loadEngine?await n.loadEngine(a):await RO({ipk:a}),s={wasm_fn:UO(o.wasmModule),memory_size:i.memoryMib*1024*1024,vga_memory_size:i.vgaMemoryMib*1024*1024,autostart:!1,disable_speaker:!0,fastboot:!0},c=await qR(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??UR();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`,()=>{QR(u,d)})}wa(u);try{if(await YR(l),i.netRelay===`fetch`){let e=XR(l,n);if(e)return await QR(u,d),e}Ca(u),await l.run()}catch(e){return await QR(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-16ZWsI-9.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 QR(e,t){Ea(e),Sa(e.name),import(`./v86-16ZWsI-9.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 $R(){let e=xa();if(e.length===0)return $(`no VMs running
2988
2988
  `);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(`
2989
- `)}\n`)}function tz(e,t){return`prefer: computer ${e} -c ${t}\n`}async function nz(e,t,n,r){let i=BR(t);if(VR(i))return i;let[{runComputer:a},{getComputerRegistry:o,installComputerRegistry:s},c]=await Promise.all([import(`./run-BJGzDxyk.js`).then(e=>e.t),import(`./registry-DfuJBCKY.js`),import(`./v86-16ZWsI-9.js`)]),l=c.v86ComputerId(t),u=o()??s(null);return u.get(l)||c.registerV86Computer(i,u),rz(await a([`-c`,l,...n],e,{registry:u}),r,l)}function rz(e,t,n){let r=tz(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 iz(e,t){let{name:n,rest:r}=zR(e);if(r.length===0){let e=BR(n);return VR(e)?e:Q(`type: no text supplied`)}return nz(t,n,[`type`,`--`,...r],`type`)}async function az(e,t){let{name:n,rest:r}=zR(e);if(r.length===0){let e=BR(n);return VR(e)?e:Q(`key: no chord supplied`)}return nz(t,n,[`key`,...r],`key`)}const oz=[`left`,`middle`,`right`];async function sz(e,t){let{name:n,rest:r}=zR(e),i=BR(n);if(VR(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?nz(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>`):nz(t,n,[`--native`,`mousemove`,e,i,`--relative`],`mousemove`)}if(o===`click`){let e=r[1]??`left`;if(!oz.includes(e))return Q(`mouse: unknown button '${r[1]}'`);let i=[`click`,e];return r.includes(`--double`)&&i.push(`--repeat`,`2`),nz(t,n,i,`click`)}return Q(`mouse: expected move <dx> <dy>, click [button], or --to <x>,<y>`)}async function cz(e,t){let{name:n,rest:r}=zR(e);return nz(t,n,[`screenshot`,...r],`screenshot`)}async function lz(e,t){let{name:n}=zR(e);return nz(t,n,[`text`],`text`)}function uz(e){let{name:t}=zR(e);return $(`v86 serve is retired.\nUse: computer watch -c v86:${t}\nLive frames go to the overlay, lightbox, and bash rows.\n`)}function dz(e){let{name:t,rest:n}=zR(e),r=BR(t);if(VR(r))return r;let i=n.indexOf(`--send`);if(i!==-1){let e=n.slice(i+1).join(` `).replace(/\\n/gu,`
2989
+ `)}\n`)}function ez(e,t){return`prefer: computer ${e} -c ${t}\n`}async function tz(e,t,n,r){let i=zR(t);if(BR(i))return i;let[{runComputer:a},{getComputerRegistry:o,installComputerRegistry:s},c]=await Promise.all([import(`./run-BJGzDxyk.js`).then(e=>e.t),import(`./registry-DfuJBCKY.js`),import(`./v86-16ZWsI-9.js`)]),l=c.v86ComputerId(t),u=o()??s(null);return u.get(l)||c.registerV86Computer(i,u),nz(await a([`-c`,l,...n],e,{registry:u}),r,l)}function nz(e,t,n){let r=ez(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 rz(e,t){let{name:n,rest:r}=RR(e);if(r.length===0){let e=zR(n);return BR(e)?e:Q(`type: no text supplied`)}return tz(t,n,[`type`,`--`,...r],`type`)}async function iz(e,t){let{name:n,rest:r}=RR(e);if(r.length===0){let e=zR(n);return BR(e)?e:Q(`key: no chord supplied`)}return tz(t,n,[`key`,...r],`key`)}const az=[`left`,`middle`,`right`];async function oz(e,t){let{name:n,rest:r}=RR(e),i=zR(n);if(BR(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?tz(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>`):tz(t,n,[`--native`,`mousemove`,e,i,`--relative`],`mousemove`)}if(o===`click`){let e=r[1]??`left`;if(!az.includes(e))return Q(`mouse: unknown button '${r[1]}'`);let i=[`click`,e];return r.includes(`--double`)&&i.push(`--repeat`,`2`),tz(t,n,i,`click`)}return Q(`mouse: expected move <dx> <dy>, click [button], or --to <x>,<y>`)}async function sz(e,t){let{name:n,rest:r}=RR(e);return tz(t,n,[`screenshot`,...r],`screenshot`)}async function cz(e,t){let{name:n}=RR(e);return tz(t,n,[`text`],`text`)}function lz(e){let{name:t}=RR(e);return $(`v86 serve is retired.\nUse: computer watch -c v86:${t}\nLive frames go to the overlay, lightbox, and bash rows.\n`)}function uz(e){let{name:t,rest:n}=RR(e),r=zR(t);if(BR(r))return r;let i=n.indexOf(`--send`);if(i!==-1){let e=n.slice(i+1).join(` `).replace(/\\n/gu,`
2990
2990
  `);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(`
2991
2991
  `).slice(-Math.max(1,e)).join(`
2992
- `)}\n`)}return $(r.serial.buffer?`${r.serial.buffer}\n`:``)}async function fz(e,t){let{name:n,rest:r}=zR(e),i=BR(n);if(VR(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 pz(e,t){let{name:n,rest:r}=zR(e),i=BR(n);if(VR(i))return i;let a=t.processManager??WR();return r.includes(`--force`)&&a&&i.pid!==null?(a.signal(i.pid,`SIGKILL`),$(`VM '${n}' killed\n`)):(await $R(i,a),$(`VM '${n}' stopped\n`))}function mz(e={}){return C(`wasm`,async(t,n)=>{let{runWasmCommand:r}=await import(`./run-DKWaudm_.js`);return r(t,n,{processConfig:e.buildProcessConfig?.(n.env),terminal:e.terminal,gate:e.gate,commands:e.commands,gitIdentity:e.gitIdentity})})}const hz=[`--name`,`--filter`,`--scoop`],gz={state:`inactive`,session:null};function _z(){return{stdout:`usage: webhook <command> [options]
2992
+ `)}\n`)}return $(r.serial.buffer?`${r.serial.buffer}\n`:``)}async function dz(e,t){let{name:n,rest:r}=RR(e),i=zR(n);if(BR(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 fz(e,t){let{name:n,rest:r}=RR(e),i=zR(n);if(BR(i))return i;let a=t.processManager??UR();return r.includes(`--force`)&&a&&i.pid!==null?(a.signal(i.pid,`SIGKILL`),$(`VM '${n}' killed\n`)):(await QR(i,a),$(`VM '${n}' stopped\n`))}function pz(e={}){return C(`wasm`,async(t,n)=>{let{runWasmCommand:r}=await import(`./run-DW65sPip.js`);return r(t,n,{processConfig:e.buildProcessConfig?.(n.env),terminal:e.terminal,gate:e.gate,commands:e.commands,gitIdentity:e.gitIdentity})})}const mz=[`--name`,`--filter`,`--scoop`],hz={state:`inactive`,session:null};function gz(){return{stdout:`usage: webhook <command> [options]
2993
2993
 
2994
2994
  Commands:
2995
2995
  create [--scoop <name>] [--name <name>] [--filter <code>] Create a new webhook endpoint
@@ -3009,21 +3009,21 @@ Examples:
3009
3009
  webhook create --scoop slack-relay --name slack --filter "(e) => ({ text: e.body.text, user: e.body.user })"
3010
3010
  webhook list
3011
3011
  webhook delete abc123
3012
- `,stderr:``,exitCode:0}}function vz(e){return e().session?.webhookUrl??null}function yz(e,t,n){return t?Ea(t,e):n()?Da(self.location.href,e):`(URL unavailable — connect a leader tray)`}function bz(e){return{stdout:``,stderr:`webhook ${e}: kernel host has not booted yet — try again in a moment\n`,exitCode:1}}async function xz(e){if(e.length!==1)return{stdout:``,stderr:`webhook rotate: takes no arguments
3012
+ `,stderr:``,exitCode:0}}function _z(e){return e().session?.webhookUrl??null}function vz(e,t,n){return t?Da(t,e):n()?Oa(self.location.href,e):`(URL unavailable — connect a leader tray)`}function yz(e){return{stdout:``,stderr:`webhook ${e}: kernel host has not booted yet — try again in a moment\n`,exitCode:1}}async function bz(e){if(e.length!==1)return{stdout:``,stderr:`webhook rotate: takes no arguments
3013
3013
  `,exitCode:1};let t=b();if(!t)return{stdout:``,stderr:`webhook rotate: no leader panel connected
3014
3014
  `,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.
3015
3015
  `,stderr:``,exitCode:0}}catch{return{stdout:``,stderr:`webhook rotate: rotation failed; reconnect the leader and retry
3016
- `,exitCode:1}}}async function Sz(e,t,n){let r=w(e.slice(1),{value:hz});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=ca(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
3017
- `,exitCode:1};let s=Tz(t);if(s)return s;let c=await Dy();if(!c)return bz(`create`);let l=await ky(c,`webhook create`,r.values.get(`--scoop`));if(l)return{stdout:``,stderr:l,exitCode:1};let u=await c.createWebhook(i,o,a),d=Ez(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 Cz(e,t){let n=w(e.slice(1),{});if(`error`in n)return{stdout:``,stderr:`webhook list: ${n.error}\n`,exitCode:1};let r=await Dy();if(!r)return bz(`list`);let i=await r.listWebhooks();if(i.length===0)return{stdout:`No active webhooks
3018
- `,stderr:``,exitCode:0};let{trayUrlBase:a,urlResolutionError:o}=Dz(t);return{stdout:Oz(i.map(e=>({id:e.id,name:e.name,url:yz(e.id,a,t.hasLocalNodeServer),createdAt:e.createdAt,filter:e.filter,scoop:e.scoop})),a,o,t.hasLocalNodeServer),stderr:``,exitCode:0}}async function wz(e,t){let n=w(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
3016
+ `,exitCode:1}}}async function xz(e,t,n){let r=w(e.slice(1),{value:mz});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=la(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
3017
+ `,exitCode:1};let s=wz(t);if(s)return s;let c=await Ey();if(!c)return yz(`create`);let l=await Oy(c,`webhook create`,r.values.get(`--scoop`));if(l)return{stdout:``,stderr:l,exitCode:1};let u=await c.createWebhook(i,o,a),d=Tz(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 Sz(e,t){let n=w(e.slice(1),{});if(`error`in n)return{stdout:``,stderr:`webhook list: ${n.error}\n`,exitCode:1};let r=await Ey();if(!r)return yz(`list`);let i=await r.listWebhooks();if(i.length===0)return{stdout:`No active webhooks
3018
+ `,stderr:``,exitCode:0};let{trayUrlBase:a,urlResolutionError:o}=Ez(t);return{stdout:Dz(i.map(e=>({id:e.id,name:e.name,url:vz(e.id,a,t.hasLocalNodeServer),createdAt:e.createdAt,filter:e.filter,scoop:e.scoop})),a,o,t.hasLocalNodeServer),stderr:``,exitCode:0}}async function Cz(e,t){let n=w(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
3019
3019
  `,exitCode:1};if(!r)return{stdout:``,stderr:`webhook delete: requires an ID
3020
- `,exitCode:1};let i=await Dy();if(!i)return bz(`delete`);let a=b();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
3021
- `,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 Tz(e){if(e.hasLocalNodeServer())return null;if(!vz(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}")`)+`
3022
- `,exitCode:1}}return null}function Ez(e,t){try{return yz(e,vz(t.getLeaderStatus),t.hasLocalNodeServer)}catch(e){return`(URL resolution failed: ${e instanceof Error?e.message:String(e)})`}}function Dz(e){try{return{trayUrlBase:vz(e.getLeaderStatus),urlResolutionError:null}}catch(e){return{trayUrlBase:null,urlResolutionError:e instanceof Error?e.message:String(e)}}}function Oz(e,t,n,r){let i=`Active webhooks:
3020
+ `,exitCode:1};let i=await Ey();if(!i)return yz(`delete`);let a=b();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
3021
+ `,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 wz(e){if(e.hasLocalNodeServer())return null;if(!_z(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}")`)+`
3022
+ `,exitCode:1}}return null}function Tz(e,t){try{return vz(e,_z(t.getLeaderStatus),t.hasLocalNodeServer)}catch(e){return`(URL resolution failed: ${e instanceof Error?e.message:String(e)})`}}function Ez(e){try{return{trayUrlBase:_z(e.getLeaderStatus),urlResolutionError:null}}catch(e){return{trayUrlBase:null,urlResolutionError:e instanceof Error?e.message:String(e)}}}function Dz(e,t,n,r){let i=`Active webhooks:
3023
3023
  `;for(let t of e)i+=` ${t.id} ${t.name.padEnd(20)} ${t.url}`,t.scoop&&(i+=` -> ${t.scoop}`),t.filter&&(i+=` [filtered]`),i+=`
3024
3024
  `;return n?i+=`\nNote: webhook URL resolution failed (${n}). Try again once the tray is connected.\n`:!r()&&!t&&(i+=`
3025
3025
  Note: webhook URLs require a leader tray. Configure one in Settings to expose POST endpoints.
3026
- `),i}function kz(e={}){let t={hasLocalNodeServer:e.hasLocalNodeServer??(()=>!0),getLeaderStatus:e.getLeaderStatus??(()=>gz)};return C(`webhook`,async(e,n)=>{if(e.length===0)return _z();let r=e[0];if(T(e,{valueFlags:r===`create`?hz:void 0}))return _z();try{switch(r){case`create`:return await Sz(e,t,n.env);case`list`:return await Cz(e,t);case`delete`:return await wz(e,t);case`rotate`:return await xz(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 Az(){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 jz(){return{stdout:`usage: websocat [FLAGS] [OPTIONS] <ws://URL | wss://URL>
3026
+ `),i}function Oz(e={}){let t={hasLocalNodeServer:e.hasLocalNodeServer??(()=>!0),getLeaderStatus:e.getLeaderStatus??(()=>hz)};return C(`webhook`,async(e,n)=>{if(e.length===0)return gz();let r=e[0];if(T(e,{valueFlags:r===`create`?mz:void 0}))return gz();try{switch(r){case`create`:return await xz(e,t,n.env);case`list`:return await Sz(e,t);case`delete`:return await Cz(e,t);case`rotate`:return await bz(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 kz(){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 Az(){return{stdout:`usage: websocat [FLAGS] [OPTIONS] <ws://URL | wss://URL>
3027
3027
 
3028
3028
  Minimal websocat client. Sends stdin lines as WebSocket messages and prints
3029
3029
  received messages to stdout. Server mode and advanced specifiers (exec:, tcp:,
@@ -3065,14 +3065,14 @@ EXAMPLES:
3065
3065
  echo 'Page.navigate {"url":"https://example.com"}' \\
3066
3066
  | websocat -1 --jsonrpc --jsonrpc-omit-jsonrpc \\
3067
3067
  ws://127.0.0.1:9222/devtools/page/<id>
3068
- `,stderr:``,exitCode:0}}const Mz=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 Nz(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 Pz(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 Fz(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 Iz(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 Lz(e,t){return t===`-v`?(e.verbose+=1,!0):t===`-vv`&&(e.verbose+=2,!0)}function Rz(e,t,n,r,i){let a=Nz(t,n,r,e);return a?(i(a.value),{nextIndex:a.next}):{stop:!0}}function zz(e,t,n,r,i,a,o){let s=Nz(t,n,r,e);if(!s)return{stop:!0};let c=Pz(e,s.value,i,o);return c===null?{stop:!0}:(a(c),{nextIndex:s.next})}function Bz(e,t){return t.some(t=>e===t||e.startsWith(`${t}=`))}const Vz=[(e,t,n,r)=>{if(!Bz(r,[`--close-status-code`]))return null;let i=Nz(t,n,`--close-status-code`,e);if(!i)return{stop:!0};let a=Fz(e,i.value);return a===null?{stop:!0}:(e.closeStatus=a,{nextIndex:i.next})},(e,t,n,r)=>Bz(r,[`--close-reason`])?Rz(e,t,n,`--close-reason`,t=>{e.closeReason=t}):null,(e,t,n,r)=>Bz(r,[`-B`,`--buffer-size`])?zz(e,t,n,r===`-B`?`-B`:`--buffer-size`,`--buffer-size`,t=>{e.bufferSize=t}):null,(e,t,n,r)=>Bz(r,[`--max-messages`])?zz(e,t,n,`--max-messages`,`--max-messages`,t=>{e.maxMessages=t}):null,(e,t,n,r)=>Bz(r,[`--protocol`])?Rz(e,t,n,`--protocol`,t=>{e.protocol=t}):null,(e,t,n,r)=>{if(!Bz(r,[`--ping-interval`]))return null;let i=Nz(t,n,`--ping-interval`,e);return i?(e.pingInterval=Number(i.value),{nextIndex:i.next}):{stop:!0}},(e,t,n,r)=>Bz(r,[`--conn-timeout`])?zz(e,t,n,`--conn-timeout`,`--conn-timeout`,t=>{e.connTimeoutMs=Math.round(t*1e3)},`positive seconds`):null,(e,t,n,r)=>Bz(r,[`-H`,`--header`])?Rz(e,t,n,r===`-H`?`-H`:`--header`,t=>{e.customHeaders.push(t)}):null];function Hz(e,t,n,r){for(let i of Vz){let a=i(e,t,n,r);if(a)return a}return null}function Uz(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)
3069
- `)}function Wz(e){let t=Az();for(let n=0;n<e.length;n+=1){let r=e[n];if(r===`-h`||r===`--help`)return t.showHelp=!0,t;if(Mz.has(r)||Mz.has(r.split(`=`)[0]))return t.error=`websocat: flag '${r}' is not supported in slicc's minimal client\n`,t;if(Iz(t,r)||Lz(t,r))continue;let i=Hz(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 Uz(t),t}function Gz(e,t){if(!e)return[];let n=t?`\0`:`
3070
- `,r=e.split(n);return r.length>0&&r[r.length-1]===``&&r.pop(),r}function Kz(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 qz(e){try{return new TextDecoder(`utf-8`,{fatal:!1}).decode(e)}catch{return t(e)}}function Jz(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 Yz=1e4;function Xz(){let e,t;return{promise:new Promise((n,r)=>{e=n,t=r}),resolve:e,reject:t}}function Zz(){let e=!1,t=Xz();return{...t,settle:n=>{e||(e=!0,t.resolve(n))}}}function Qz(e,t){return e.length?e.join(t)+t:``}function $z(e){return e.length?e.join(`
3068
+ `,stderr:``,exitCode:0}}const jz=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 Mz(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 Nz(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 Pz(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 Fz(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 Iz(e,t){return t===`-v`?(e.verbose+=1,!0):t===`-vv`&&(e.verbose+=2,!0)}function Lz(e,t,n,r,i){let a=Mz(t,n,r,e);return a?(i(a.value),{nextIndex:a.next}):{stop:!0}}function Rz(e,t,n,r,i,a,o){let s=Mz(t,n,r,e);if(!s)return{stop:!0};let c=Nz(e,s.value,i,o);return c===null?{stop:!0}:(a(c),{nextIndex:s.next})}function zz(e,t){return t.some(t=>e===t||e.startsWith(`${t}=`))}const Bz=[(e,t,n,r)=>{if(!zz(r,[`--close-status-code`]))return null;let i=Mz(t,n,`--close-status-code`,e);if(!i)return{stop:!0};let a=Pz(e,i.value);return a===null?{stop:!0}:(e.closeStatus=a,{nextIndex:i.next})},(e,t,n,r)=>zz(r,[`--close-reason`])?Lz(e,t,n,`--close-reason`,t=>{e.closeReason=t}):null,(e,t,n,r)=>zz(r,[`-B`,`--buffer-size`])?Rz(e,t,n,r===`-B`?`-B`:`--buffer-size`,`--buffer-size`,t=>{e.bufferSize=t}):null,(e,t,n,r)=>zz(r,[`--max-messages`])?Rz(e,t,n,`--max-messages`,`--max-messages`,t=>{e.maxMessages=t}):null,(e,t,n,r)=>zz(r,[`--protocol`])?Lz(e,t,n,`--protocol`,t=>{e.protocol=t}):null,(e,t,n,r)=>{if(!zz(r,[`--ping-interval`]))return null;let i=Mz(t,n,`--ping-interval`,e);return i?(e.pingInterval=Number(i.value),{nextIndex:i.next}):{stop:!0}},(e,t,n,r)=>zz(r,[`--conn-timeout`])?Rz(e,t,n,`--conn-timeout`,`--conn-timeout`,t=>{e.connTimeoutMs=Math.round(t*1e3)},`positive seconds`):null,(e,t,n,r)=>zz(r,[`-H`,`--header`])?Lz(e,t,n,r===`-H`?`-H`:`--header`,t=>{e.customHeaders.push(t)}):null];function Vz(e,t,n,r){for(let i of Bz){let a=i(e,t,n,r);if(a)return a}return null}function Hz(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)
3069
+ `)}function Uz(e){let t=kz();for(let n=0;n<e.length;n+=1){let r=e[n];if(r===`-h`||r===`--help`)return t.showHelp=!0,t;if(jz.has(r)||jz.has(r.split(`=`)[0]))return t.error=`websocat: flag '${r}' is not supported in slicc's minimal client\n`,t;if(Fz(t,r)||Iz(t,r))continue;let i=Vz(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 Hz(t),t}function Wz(e,t){if(!e)return[];let n=t?`\0`:`
3070
+ `,r=e.split(n);return r.length>0&&r[r.length-1]===``&&r.pop(),r}function Gz(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 Kz(e){try{return new TextDecoder(`utf-8`,{fatal:!1}).decode(e)}catch{return t(e)}}function qz(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 Jz=1e4;function Yz(){let e,t;return{promise:new Promise((n,r)=>{e=n,t=r}),resolve:e,reject:t}}function Xz(){let e=!1,t=Yz();return{...t,settle:n=>{e||(e=!0,t.resolve(n))}}}function Zz(e,t){return e.length?e.join(t)+t:``}function Qz(e){return e.length?e.join(`
3071
3071
  `)+`
3072
- `:``}function eB(e,t,n){e.quiet||t.push(`websocat: ${n}`)}function tB(e,t){e.verbose<1||(e.customHeaders.length>0&&eB(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&&eB(e,t,`--ping-interval has no effect in browsers (no ping API exposed)`),e.insecure&&eB(e,t,`-k/--insecure has no effect in browsers`))}function nB(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 rB(e,t,n,r){if(n.outLines.length<Yz){n.outLines.push(r);return}n.droppedForOverflow===0&&eB(e,t,`output buffer reached ${Yz} 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 iB(e,n,r){let{bytes:i,isBinary:a}=Jz(r);return i.length>e.bufferSize&&(eB(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):qz(i)}function aB(e,t){return e.maxMessages!==void 0&&t>=e.maxMessages||e.oneMessage}function oB(e,t,n){try{n===void 0?e.close(t):e.close(t,n)}catch{}}function sB(e,t){setTimeout(()=>{oB(t,e.closeStatus??1e3,e.closeReason)},0)}function cB(e,t,n){let r=Gz(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=Kz(n,i,t.jsonrpcOmit),i+=1),t.binary?e.send(new TextEncoder().encode(r).buffer):e.send(r),a+=1}return a}function lB(e,t,n){!t.oneMessage&&!t.noClose&&(t.exitOnEof||n===0)&&sB(t,e)}async function uB(e,t,n){let r=[];tB(e,r);let i=e.nullTerminated?`\0`:`
3073
- `,a=nB(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=Xz(),u=Zz(),d=0,f=!1,p=setTimeout(()=>{f=!0,oB(o,1e3),c||l.reject(Error(`connect timeout`))},e.connTimeoutMs),m=()=>{if(e.noClose){u.settle(d);return}oB(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=iB(e,r,t.data);rB(e,r,s,n)}s.received+=1,aB(e,s.received)&&(s.finishing=!0,m())}},o.onerror=()=>{f||(eB(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&&eB(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:Qz(s.outLines,i),stderr:$z(r.concat([`websocat: ${t}`])),exitCode:t===`connect timeout`?124:1}}e.unidirectionalReverse?!e.noClose&&e.exitOnEof&&!e.oneMessage&&sB(e,o):lB(o,e,cB(o,e,t));let h=await u.promise;return s.droppedForOverflow>0&&eB(e,r,`dropped ${s.droppedForOverflow} inbound message(s) due to output buffer cap`),{stdout:Qz(s.outLines,i),stderr:$z(r),exitCode:h}}function dB(e){return{stdout:``,stderr:e,exitCode:2}}function fB(e){return e.WebSocketCtor??(typeof WebSocket<`u`?WebSocket:void 0)}async function pB(e,t,n={}){let r=Wz(e);if(r.showHelp)return jz();if(r.error)return dB(r.error);if(!r.url)return dB(`websocat: missing ws:// or wss:// URL (use --help for usage)
3074
- `);if(!/^wss?:\/\//i.test(r.url))return dB(`websocat: URL must start with ws:// or wss://, got '${r.url}'\n`);let i=fB(n);return i?uB(r,t.stdin,i):{stdout:``,stderr:`websocat: no WebSocket implementation available in this runtime
3075
- `,exitCode:1}}function mB(){return C(`websocat`,async(e,t)=>pB(e,{stdin:P(t.stdin)}))}function hB(){return C(`__wf_progress`,async()=>({stdout:``,stderr:``,exitCode:0}))}const gB={commands:new Map,collisions:[]};async function _B(e,t){let n=_r(t);return e.scriptCatalog?e.scriptCatalog.getJshIndex(n):e.fs?br(e.fs,n):gB}async function vB(e){return e.scriptCatalog?e.scriptCatalog.getWorkflowCommands():e.fs?Di(e.fs):new Map}async function yB(e){return e.scriptCatalog?e.scriptCatalog.getWasmCommands():new Map}function bB(e,t){let n=e.script?`script`:`wasm`;return`${e.glue} (${n}, ${e.pkg}${t?`, ${t}`:``})`}function xB(e,{jshPath:t,collision:n,wasm:r,wf:i}){let a=[`/usr/bin/${e}`];if((t||r||i)&&a.push(` (shadowed by built-in ${e})`),r&&a.push(` (shadowed ${bB(r)})`),t){let e=n?[t,...n.shadowedPaths]:[t];for(let t of e)a.push(` (shadowed ${t})`)}return a}function SB(e,{collision:t,wasm:n,wf:r}){let i=[e];for(let e of t?.shadowedPaths??[])i.push(` (shadowed ${e})`);return n&&i.push(` ${bB(n,`shadowed by .jsh`)}`),r&&i.push(` ${r.path} (workflow, shadowed by .jsh)`),i}function CB(e,t,n,r,i){let{jshPath:a,wasm:o,wf:s}=t;if(n.has(e))return{lines:xB(e,t),found:!0};if(a)return{lines:SB(a,t),found:!0};if(o){let e=[bB(o)];return s&&e.push(` ${s.path} (workflow, shadowed by wasm)`),{lines:e,found:!0}}return s?{lines:[`${s.path} (workflow)`],found:!0}:r.has(e)&&!i.has(e)?{lines:[`/usr/bin/${e}`],found:!0}:{lines:[],found:!1}}function wB(e={}){let t=e.scriptCatalog!==void 0||e.fs!==void 0?e:typeof e.walk==`function`&&typeof e.exists==`function`?{fs:e}:{};return C(`which`,async(e,n)=>{if(T(e))return{stdout:`which - locate a command
3072
+ `:``}function $z(e,t,n){e.quiet||t.push(`websocat: ${n}`)}function eB(e,t){e.verbose<1||(e.customHeaders.length>0&&$z(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&&$z(e,t,`--ping-interval has no effect in browsers (no ping API exposed)`),e.insecure&&$z(e,t,`-k/--insecure has no effect in browsers`))}function tB(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 nB(e,t,n,r){if(n.outLines.length<Jz){n.outLines.push(r);return}n.droppedForOverflow===0&&$z(e,t,`output buffer reached ${Jz} 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 rB(e,n,r){let{bytes:i,isBinary:a}=qz(r);return i.length>e.bufferSize&&($z(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):Kz(i)}function iB(e,t){return e.maxMessages!==void 0&&t>=e.maxMessages||e.oneMessage}function aB(e,t,n){try{n===void 0?e.close(t):e.close(t,n)}catch{}}function oB(e,t){setTimeout(()=>{aB(t,e.closeStatus??1e3,e.closeReason)},0)}function sB(e,t,n){let r=Wz(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=Gz(n,i,t.jsonrpcOmit),i+=1),t.binary?e.send(new TextEncoder().encode(r).buffer):e.send(r),a+=1}return a}function cB(e,t,n){!t.oneMessage&&!t.noClose&&(t.exitOnEof||n===0)&&oB(t,e)}async function lB(e,t,n){let r=[];eB(e,r);let i=e.nullTerminated?`\0`:`
3073
+ `,a=tB(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=Yz(),u=Xz(),d=0,f=!1,p=setTimeout(()=>{f=!0,aB(o,1e3),c||l.reject(Error(`connect timeout`))},e.connTimeoutMs),m=()=>{if(e.noClose){u.settle(d);return}aB(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=rB(e,r,t.data);nB(e,r,s,n)}s.received+=1,iB(e,s.received)&&(s.finishing=!0,m())}},o.onerror=()=>{f||($z(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&&$z(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:Zz(s.outLines,i),stderr:Qz(r.concat([`websocat: ${t}`])),exitCode:t===`connect timeout`?124:1}}e.unidirectionalReverse?!e.noClose&&e.exitOnEof&&!e.oneMessage&&oB(e,o):cB(o,e,sB(o,e,t));let h=await u.promise;return s.droppedForOverflow>0&&$z(e,r,`dropped ${s.droppedForOverflow} inbound message(s) due to output buffer cap`),{stdout:Zz(s.outLines,i),stderr:Qz(r),exitCode:h}}function uB(e){return{stdout:``,stderr:e,exitCode:2}}function dB(e){return e.WebSocketCtor??(typeof WebSocket<`u`?WebSocket:void 0)}async function fB(e,t,n={}){let r=Uz(e);if(r.showHelp)return Az();if(r.error)return uB(r.error);if(!r.url)return uB(`websocat: missing ws:// or wss:// URL (use --help for usage)
3074
+ `);if(!/^wss?:\/\//i.test(r.url))return uB(`websocat: URL must start with ws:// or wss://, got '${r.url}'\n`);let i=dB(n);return i?lB(r,t.stdin,i):{stdout:``,stderr:`websocat: no WebSocket implementation available in this runtime
3075
+ `,exitCode:1}}function pB(){return C(`websocat`,async(e,t)=>fB(e,{stdin:P(t.stdin)}))}function mB(){return C(`__wf_progress`,async()=>({stdout:``,stderr:``,exitCode:0}))}const hB={commands:new Map,collisions:[]};async function gB(e,t){let n=vr(t);return e.scriptCatalog?e.scriptCatalog.getJshIndex(n):e.fs?xr(e.fs,n):hB}async function _B(e){return e.scriptCatalog?e.scriptCatalog.getWorkflowCommands():e.fs?Oi(e.fs):new Map}async function vB(e){return e.scriptCatalog?e.scriptCatalog.getWasmCommands():new Map}function yB(e,t){let n=e.script?`script`:`wasm`;return`${e.glue} (${n}, ${e.pkg}${t?`, ${t}`:``})`}function bB(e,{jshPath:t,collision:n,wasm:r,wf:i}){let a=[`/usr/bin/${e}`];if((t||r||i)&&a.push(` (shadowed by built-in ${e})`),r&&a.push(` (shadowed ${yB(r)})`),t){let e=n?[t,...n.shadowedPaths]:[t];for(let t of e)a.push(` (shadowed ${t})`)}return a}function xB(e,{collision:t,wasm:n,wf:r}){let i=[e];for(let e of t?.shadowedPaths??[])i.push(` (shadowed ${e})`);return n&&i.push(` ${yB(n,`shadowed by .jsh`)}`),r&&i.push(` ${r.path} (workflow, shadowed by .jsh)`),i}function SB(e,t,n,r,i){let{jshPath:a,wasm:o,wf:s}=t;if(n.has(e))return{lines:bB(e,t),found:!0};if(a)return{lines:xB(a,t),found:!0};if(o){let e=[yB(o)];return s&&e.push(` ${s.path} (workflow, shadowed by wasm)`),{lines:e,found:!0}}return s?{lines:[`${s.path} (workflow)`],found:!0}:r.has(e)&&!i.has(e)?{lines:[`/usr/bin/${e}`],found:!0}:{lines:[],found:!1}}function CB(e={}){let t=e.scriptCatalog!==void 0||e.fs!==void 0?e:typeof e.walk==`function`&&typeof e.exists==`function`?{fs:e}:{};return C(`which`,async(e,n)=>{if(T(e))return{stdout:`which - locate a command
3076
3076
 
3077
3077
  Usage: which <command> [command...]
3078
3078
 
@@ -3084,9 +3084,9 @@ Prints the path of the given command(s).
3084
3084
 
3085
3085
  Exit code 0 if all commands found, 1 if any not found.
3086
3086
  `,stderr:``,exitCode:0};let r=w(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
3087
- `,exitCode:1};let i=n.getRegisteredCommands?.()??[],a=new Set(i),o=await _B(t,n.env.get(`PATH`)),s=o.commands,c=new Map(o.collisions.map(e=>[e.name,e])),l=await vB(t),u=await yB(t),d=typeof t.getStaticBuiltins==`function`?new Set(t.getStaticBuiltins()):a,f=new Set(t.getScriptRegisteredNames?.()??[]),p=[],m=!0;for(let e of r.positionals){let t=CB(e,{jshPath:s.get(e),collision:c.get(e),wasm:u.get(e),wf:l.get(e)},d,a,f);p.push(...t.lines),t.found||(m=!1)}return{stdout:p.length>0?p.join(`
3087
+ `,exitCode:1};let i=n.getRegisteredCommands?.()??[],a=new Set(i),o=await gB(t,n.env.get(`PATH`)),s=o.commands,c=new Map(o.collisions.map(e=>[e.name,e])),l=await _B(t),u=await vB(t),d=typeof t.getStaticBuiltins==`function`?new Set(t.getStaticBuiltins()):a,f=new Set(t.getScriptRegisteredNames?.()??[]),p=[],m=!0;for(let e of r.positionals){let t=SB(e,{jshPath:s.get(e),collision:c.get(e),wasm:u.get(e),wf:l.get(e)},d,a,f);p.push(...t.lines),t.found||(m=!1)}return{stdout:p.length>0?p.join(`
3088
3088
  `)+`
3089
- `:``,stderr:``,exitCode:+!m}})}const TB=`__slicc_workflows`,EB=String.raw`
3089
+ `:``,stderr:``,exitCode:+!m}})}const wB=`__slicc_workflows`,TB=String.raw`
3090
3090
  class WorkflowError extends Error {}
3091
3091
  class WorkflowDeterminismError extends WorkflowError {}
3092
3092
  class WorkflowAgentCapError extends WorkflowError {}
@@ -3205,40 +3205,40 @@ function log(message) {
3205
3205
  }
3206
3206
  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()); } };
3207
3207
  function workflow() { throw new WorkflowNestingUnsupportedError('nested workflow() unsupported in SP1'); }
3208
- `;function DB(){return`WF_RESULT_${globalThis.crypto?.randomUUID?.()??`${Date.now().toString(36)}${Math.random().toString(36).slice(2)}`}`}function OB(e){let t=MB(e);return t===null?{name:null,description:null}:{name:NB(t,`name`),description:NB(t,`description`)}}function kB(e){return e.replace(/\bexport\s+(const|let|var|function|async\s+function|class)\b/g,`$1`)}function AB(e){return`const __emit = console.log.bind(console);
3208
+ `;function EB(){return`WF_RESULT_${globalThis.crypto?.randomUUID?.()??`${Date.now().toString(36)}${Math.random().toString(36).slice(2)}`}`}function DB(e){let t=jB(e);return t===null?{name:null,description:null}:{name:MB(t,`name`),description:MB(t,`description`)}}function OB(e){return e.replace(/\bexport\s+(const|let|var|function|async\s+function|class)\b/g,`$1`)}function kB(e){return`const __emit = console.log.bind(console);
3209
3209
  const __stringify = JSON.stringify.bind(JSON);
3210
- const __WF = ${JSON.stringify(e.config)};\n${e.prelude}\nconst __r = await (async () => {\n${kB(e.body)}\n})();\n__emit(${JSON.stringify(e.sentinel)} + __stringify(__r ?? null));\n`}function jB(e,t){let n=e.split(`
3210
+ const __WF = ${JSON.stringify(e.config)};\n${e.prelude}\nconst __r = await (async () => {\n${OB(e.body)}\n})();\n__emit(${JSON.stringify(e.sentinel)} + __stringify(__r ?? null));\n`}function AB(e,t){let n=e.split(`
3211
3211
  `);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(`
3212
- `).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 MB(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 NB(e,t){let n=RegExp(`\\b${t}\\s*:\\s*(['"\\\`])((?:\\\\.|(?!\\1).)*)\\1`).exec(e);return n?n[2]:null}const PB=e(`workflow-command`),FB=`usage: workflow run <file.js> [--args <json>] [--budget <n>] [--concurrency <n>] [--wait]
3212
+ `).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 jB(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 MB(e,t){let n=RegExp(`\\b${t}\\s*:\\s*(['"\\\`])((?:\\\\.|(?!\\1).)*)\\1`).exec(e);return n?n[2]:null}const NB=e(`workflow-command`),PB=`usage: workflow run <file.js> [--args <json>] [--budget <n>] [--concurrency <n>] [--wait]
3213
3213
  workflow run --script '<inline js>' [...]
3214
3214
  workflow list
3215
3215
  workflow status <runId>
3216
3216
  workflow stop <runId>
3217
3217
  workflow save <runId> <name> [--force]
3218
3218
  Runs a Claude-Code-format dynamic workflow. Default is non-blocking (returns a run id);
3219
- pass --wait to block and print the full result.`,IB=new Set([`list`,`status`,`stop`,`save`]);function LB(){return globalThis[TB]}function RB(){let e=globalThis.navigator?.hardwareConcurrency??8;return Math.min(16,Math.max(8,e*4))}function zB(e,t,n,r){let i=t[n];switch(i){case`-h`:case`--help`:return{i:n,help:!0};case`--script`:return e.script=t[++n],{i:n};case`--wait`:return e.wait=!0,{i:n};case`--args`:try{e.args=JSON.parse(t[++n]??``),e.hasArgs=!0}catch{return{i:n,error:`workflow: --args must be valid JSON`}}return{i:n};case`--budget`:{let r=Number(t[++n]);return Number.isFinite(r)?(e.budget=r,{i:n}):{i:n,error:`workflow: --budget must be a number`}}case`--concurrency`:{let i=Number(t[++n]);return Number.isFinite(i)?(e.cap=Math.min(r,Math.max(1,Math.trunc(i))),{i:n}):{i:n,error:`workflow: --concurrency must be a number`}}default:return i.startsWith(`-`)?{i:n,error:`workflow: unknown flag '${i}'`}:e.file===void 0?(e.file=i,{i:n}):{i:n,error:`workflow: too many arguments`}}}function BB(e){if(e[0]!==`run`)return e.length===0||e.includes(`-h`)||e.includes(`--help`)?{help:!0}:{error:`workflow: unknown subcommand '${e[0]}' (only 'run' in SP1)`};let t=RB(),n={budget:null,cap:Math.min(8,t)};for(let r=1;r<e.length;r++){let i=zB(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 VB(e={}){return C(`workflow`,async(t,n)=>{if(IB.has(t[0])&&T(t.slice(1)))return{stdout:FB+`
3220
- `,stderr:``,exitCode:0};if(t[0]===`list`||t[0]===`status`||t[0]===`stop`)return qB(t,n);if(t[0]===`save`)return KB(t,n,e);let r=BB(t);if(r.help)return{stdout:FB+`
3219
+ pass --wait to block and print the full result.`,FB=new Set([`list`,`status`,`stop`,`save`]);function IB(){return globalThis[wB]}function LB(){let e=globalThis.navigator?.hardwareConcurrency??8;return Math.min(16,Math.max(8,e*4))}function RB(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 zB(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=LB(),n={budget:null,cap:Math.min(8,t)};for(let r=1;r<e.length;r++){let i=RB(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 BB(e={}){return C(`workflow`,async(t,n)=>{if(FB.has(t[0])&&T(t.slice(1)))return{stdout:PB+`
3220
+ `,stderr:``,exitCode:0};if(t[0]===`list`||t[0]===`status`||t[0]===`stop`)return KB(t,n);if(t[0]===`save`)return GB(t,n,e);let r=zB(t);if(r.help)return{stdout:PB+`
3221
3221
  `,stderr:``,exitCode:0};if(r.error)return{stdout:``,stderr:r.error+`
3222
- `,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=OB(i);if(!o.name)return{stdout:``,stderr:`workflow: script must define a meta block with a name (description optional)
3223
- `,exitCode:1};let s=DB().slice(10,22),c=`/shared/workflow-runs/${s}/scratch/`;await n.fs.mkdir(c,{recursive:!0});let l=DB(),u=AB({prelude:EB,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?HB(u,a,l,o,n):UB({code:u,source:i,name:o.name,filename:a,sentinel:l,runId:s,ctx:n,options:e})})}async function HB(e,t,n,r,i){let a;try{a=await hi(e,[`workflow`,t],i,void 0,{filename:t})}catch(e){return PB.error(`workflow run failed`,e),{stdout:``,stderr:`workflow: ${e instanceof Error?e.message:String(e)}\n`,exitCode:1}}return JB(r,a,n)}async function UB(e){let t=LB();if(!t)return{stdout:``,stderr:`workflow: run manager not available
3224
- `,exitCode:1};let n=e.options.getParentJid?.(),{runId:r}=await t.start({code:e.code,source:e.source,name:e.name,filename:e.filename,parentJid:n,ctx:e.ctx,sentinel:e.sentinel,runId:e.runId});return{stdout:`▶ workflow '${e.name}' started (run ${r}). Watch: workflow status ${r}\n`,stderr:``,exitCode:0}}const WB=/^[a-z0-9][a-z0-9-]*$/,GB=`/workspace/.workflows`;async function KB(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]
3225
- `,exitCode:1};if(!WB.test(o))return{stdout:``,stderr:`workflow: invalid name '${o}' (use [a-z0-9][a-z0-9-]*)\n`,exitCode:1};let c=LB()?.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=`${GB}/${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(GB,{recursive:!0}),await t.fs.writeFile(l,c.source);try{await n.syncScriptCommands?.()}catch(e){PB.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 qB(e,t){let n=LB();if(e[0]===`list`){if(!n)return{stdout:``,stderr:`workflow: run manager not available
3222
+ `,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=DB(i);if(!o.name)return{stdout:``,stderr:`workflow: script must define a meta block with a name (description optional)
3223
+ `,exitCode:1};let s=EB().slice(10,22),c=`/shared/workflow-runs/${s}/scratch/`;await n.fs.mkdir(c,{recursive:!0});let l=EB(),u=kB({prelude:TB,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?VB(u,a,l,o,n):HB({code:u,source:i,name:o.name,filename:a,sentinel:l,runId:s,ctx:n,options:e})})}async function VB(e,t,n,r,i){let a;try{a=await gi(e,[`workflow`,t],i,void 0,{filename:t})}catch(e){return NB.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 HB(e){let t=IB();if(!t)return{stdout:``,stderr:`workflow: run manager not available
3224
+ `,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 UB=/^[a-z0-9][a-z0-9-]*$/,WB=`/workspace/.workflows`;async function GB(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]
3225
+ `,exitCode:1};if(!UB.test(o))return{stdout:``,stderr:`workflow: invalid name '${o}' (use [a-z0-9][a-z0-9-]*)\n`,exitCode:1};let c=IB()?.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=`${WB}/${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(WB,{recursive:!0}),await t.fs.writeFile(l,c.source);try{await n.syncScriptCommands?.()}catch(e){NB.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 KB(e,t){let n=IB();if(e[0]===`list`){if(!n)return{stdout:``,stderr:`workflow: run manager not available
3226
3226
  `,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(`
3227
3227
  `):`(no runs)`)+`
3228
3228
  `,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(`
3229
3229
  `)+`
3230
- `,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 JB(e,t,n){let{result:r,log:i,hadResult:a}=jB(t.stdout,n),o=e.name?`workflow: ${e.name}${e.description?` — `+e.description:``}\n`:``,s=i?YB(i)+`
3230
+ `,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}=AB(t.stdout,n),o=e.name?`workflow: ${e.name}${e.description?` — `+e.description:``}\n`:``,s=i?JB(i)+`
3231
3231
  `:``;return t.exitCode!==0||!a?{stdout:o+s,stderr:t.stderr||(a?``:`workflow: script produced no result
3232
3232
  `),exitCode:t.exitCode||1}:{stdout:o+s+(typeof r==`string`?r:JSON.stringify(r))+`
3233
- `,stderr:t.stderr,exitCode:0}}function YB(e){return e.split(`
3233
+ `,stderr:t.stderr,exitCode:0}}function JB(e){return e.split(`
3234
3234
  `).map(e=>e.replace(/^WFPHASE/,`▸ `).replace(/^WFLOG/,`· `)).join(`
3235
- `)}function XB(e){return{stdout:``,stderr:`xxd: ${e}\n`,exitCode:1}}function ZB(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 QB(e,t){let n=e.toString(16).padStart(2,`0`);return t?n.toUpperCase():n}function $B(e){let t=``;for(let n=0;n<e.length;n++)t+=String.fromCharCode(e[n]);return t}function eV(e){return e.replace(/[^0-9a-zA-Z]/g,`_`)}function tV(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?QB(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(`
3235
+ `)}function YB(e){return{stdout:``,stderr:`xxd: ${e}\n`,exitCode:1}}function XB(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 ZB(e,t){let n=e.toString(16).padStart(2,`0`);return t?n.toUpperCase():n}function QB(e){let t=``;for(let n=0;n<e.length;n++)t+=String.fromCharCode(e[n]);return t}function $B(e){return e.replace(/[^0-9a-zA-Z]/g,`_`)}function eV(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?ZB(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(`
3236
3236
  `)+`
3237
- `:``}function nV(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+=QB(e[i+r],n);r+=a+`
3238
- `}return r}function rV(e,t,n,r){let i=Array.from(e,e=>`0x${QB(e,n)}`),a=[];for(let e=0;e<i.length;e+=t)a.push(` `+i.slice(e,e+t).join(`, `));let o=a.join(`,
3237
+ `:``}function tV(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+=ZB(e[i+r],n);r+=a+`
3238
+ `}return r}function nV(e,t,n,r){let i=Array.from(e,e=>`0x${ZB(e,n)}`),a=[];for(let e=0;e<i.length;e+=t)a.push(` `+i.slice(e,e+t).join(`, `));let o=a.join(`,
3239
3239
  `);return r===null?i.length?o+`
3240
- `:``:`unsigned char ${r}[] = {\n${o}\n};\nunsigned int ${r}_len = ${e.length};\n`}function iV(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 aV(e){let t=[],n=0;for(let r of e.split(`
3241
- `)){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 oV={"-u":`upper`,"-p":`plain`,"-ps":`plain`,"-postscript":`plain`,"-i":`include`,"-include":`include`,"-r":`revert`,"-revert":`revert`},sV=[{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 cV(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=oV[r];if(i){t[i]=!0;continue}let a=sV.find(e=>e.exact.includes(r)||e.attached.test(r));if(a){t[a.key]=ZB(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 lV(e){return e.includes(`-h`)||e.includes(`--help`)||e.includes(`-help`)}async function uV(e,t,n){if(!n&&t)return e.fs.readFileBuffer(e.fs.resolvePath(e.cwd,t));let r=cr(e.stdin),i=new Uint8Array(r.length);for(let e=0;e<r.length;e++)i[e]=r.charCodeAt(e)&255;return i}function dV(e,t,n,r,i){let a=e.cols&&e.cols>0?e.cols:e.plain?30:e.include?12:16;return e.plain?nV(t,a,e.upper):e.include?rV(t,a,e.upper,i?null:eV(r??``)):tV(t,a,e.group!=null&&e.group>=0?e.group:2,e.upper,n)}function fV(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 pV(){return C(`xxd`,async(e,t)=>{if(lV(e))return{stdout:`usage: xxd [options] [infile [outfile]]
3240
+ `:``:`unsigned char ${r}[] = {\n${o}\n};\nunsigned int ${r}_len = ${e.length};\n`}function rV(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 iV(e){let t=[],n=0;for(let r of e.split(`
3241
+ `)){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 aV={"-u":`upper`,"-p":`plain`,"-ps":`plain`,"-postscript":`plain`,"-i":`include`,"-include":`include`,"-r":`revert`,"-revert":`revert`},oV=[{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 sV(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=aV[r];if(i){t[i]=!0;continue}let a=oV.find(e=>e.exact.includes(r)||e.attached.test(r));if(a){t[a.key]=XB(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 cV(e){return e.includes(`-h`)||e.includes(`--help`)||e.includes(`-help`)}async function lV(e,t,n){if(!n&&t)return e.fs.readFileBuffer(e.fs.resolvePath(e.cwd,t));let r=lr(e.stdin),i=new Uint8Array(r.length);for(let e=0;e<r.length;e++)i[e]=r.charCodeAt(e)&255;return i}function uV(e,t,n,r,i){let a=e.cols&&e.cols>0?e.cols:e.plain?30:e.include?12:16;return e.plain?tV(t,a,e.upper):e.include?nV(t,a,e.upper,i?null:$B(r??``)):eV(t,a,e.group!=null&&e.group>=0?e.group:2,e.upper,n)}function dV(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 fV(){return C(`xxd`,async(e,t)=>{if(cV(e))return{stdout:`usage: xxd [options] [infile [outfile]]
3242
3242
  -c cols number of octets per line (default 16; 30 for -p; 12 for -i)
3243
3243
  -g bytes number of octets per group (default 2; 0 disables grouping)
3244
3244
  -l len stop after len octets
@@ -3248,9 +3248,9 @@ pass --wait to block and print the full result.`,IB=new Set([`list`,`status`,`st
3248
3248
  -i output in C include style
3249
3249
  -r reverse: convert a hex dump back to binary (-r -p for plain)
3250
3250
  -h show this help
3251
- `,stderr:``,exitCode:0};let n;try{n=cV(e)}catch(e){return XB(e.message)}let r=n.positional[0],i=n.positional[1],a=!r||r===`-`,o;try{o=await uV(t,r,a)}catch{return XB(`${r}: No such file or directory`)}if(n.revert){let e=$B(o),r=n.plain?iV(e):aV(e);return i?(await t.fs.writeFile(t.fs.resolvePath(t.cwd,i),r),{stdout:``,stderr:``,exitCode:0}):{stdout:$B(r),stderr:``,exitCode:0}}let{data:s,base:c}=fV(n,o),l=dV(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 mV(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=Or(t,o),s=n?`${n}/${o}`:o;a+=await mV(e,i,s,r)}return a}function hV(){return{stdout:`usage: zip [-r] <archive.zip> <path> [path...]
3252
- `,stderr:``,exitCode:0}}function gV(){return C(`zip`,async(e,t)=>{if(e.length===0||e.includes(`--help`)||e.includes(`-h`))return hV();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
3253
- `,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(/^\.\//,``))||kr(r);if(i.isDirectory&&!n)return{stdout:``,stderr:`zip: ${e} is a directory (use -r)\n`,exitCode:1};s+=await mV(t,r,a,o)}if(s===0)return{stdout:``,stderr:`zip: nothing to do
3254
- `,exitCode:1};let c=Lt(o);return await t.fs.writeFile(i,c),{stdout:`created ${i} (${s} file(s))\n`,stderr:``,exitCode:0}})}function _V(e){let t;return C(`mcp`,async(n,r)=>{if(!t){let{createMcpCommand:n}=await import(`./mcp-command-Br5ePgQj.js`);t=n({fs:e.fs,scriptCatalog:e.scriptCatalog,connectionManager:e.mcpConnectionManager})}return t.execute(n,r)})}function vV(e){return{setEnv:e.setEnv,unsetEnv:e.unsetEnv,broker:e.sudoCommand?.broker}}function yV(e){let{fs:t,fetch:n}=e;if(!t||!n)return[];let r={fs:t,fetch:n,scriptCatalog:e.scriptCatalog,syncScriptCommands:e.syncScriptCommands};return[kO(`ipk`,r),kO(`npm`,r),kO(`i`,r),vk(`ipx`,{fs:t,fetch:n}),vk(`npx`,{fs:t,fetch:n}),Tb(`di`,{fs:t,fetch:n}),Tb(`uv`,{fs:t,fetch:n}),UL({fs:t,fetch:n})]}function bV(e){let t={buildProcessConfig:e.buildProcessConfig};return[`python3`,`python`,`pyodide`].map(e=>QM(e,t))}function xV(e){let t=e.scriptCatalog;return{buildProcessConfig:e.buildProcessConfig,terminal:e.terminal,gate:e.gateNativeCommand,commands:t&&(()=>t.getWasmCommands()),gitIdentity:e.gitIdentity}}function SV(e={}){let t=[PE({getJshCommands:e.getJshCommands,getWorkflowCommands:e.getWorkflowCommands}),oe(),AF(),YP(),HP(e.browserAPI,e.fs),Ij(e.browserAPI),By(e.browserAPI),zD(e),gV(),yL(),dI(e.fs?{fs:e.fs}:{}),LF(),WF(),VF(),Fv(),mz(xV(e)),oC(xV(e)),pV(),wF(`sqlite3`),wF(`sqllite`),OI(),JI(),Vx(),_v(),$A({buildProcessConfig:e.buildProcessConfig}),$A({buildProcessConfig:e.buildProcessConfig},`jsh`),...bV(e),...yV(e),...e.fs?[aC({fs:e.fs})]:[],...e.fs?[dA({fs:e.fs})]:[],...e.fetch?[GE({fetch:e.fetch,streamFetch:e.streamFetch})]:[],PS(),FS(),qS(),kz(e.webhook),mB(),zy(e.crontask),_V(e),nM({fs:e.fs,fetch:e.fetch}),iC(),hF(),Lj(),Rj(`pdftk`),Rj(`pdf`),vv(`biscotto`,{getParentJid:e.getParentJid,isScoop:e.isScoop}),vv(`biscotti`,{getParentJid:e.getParentJid,isScoop:e.isScoop}),Jj(`pdftoppm`),Jj(`pdftocairo`),Yj(`pdftotext`),Cy(`convert`),Cy(`magick`),wB({fs:e.fs,scriptCatalog:e.scriptCatalog,getStaticBuiltins:e.getStaticBuiltins,getScriptRegisteredNames:e.getScriptRegisteredNames}),QI(),mL(),FD(),ID(),hL(),fA(),nN(),iA(),fx(),mj(),pj(),tA(),pP(vV(e)),Bp(e.gitCredential),hN({fs:e.fs}),VN(),Mv(),Nv(),Pv(`xclip`),Pv(`xsel`),BN(),SC(),l_(),u_(),zA(e.fs),gt(),ij(),d_({getParentJid:e.getParentJid}),bx(),wM({processManager:e.processManager}),iR({processManager:e.processManager}),xk({processManager:e.processManager}),yk({processManager:e.processManager,scriptCatalog:e.scriptCatalog}),...p_(),uA(),qk(),kR(),_D(),SS(),GR({processManager:e.processManager}),Rv({processManager:e.processManager,browser:e.browserAPI,sudoBroker:e.sudoCommand?.broker}),NS(),Tv({registry:e.cherryRuntimeRegistry}),Yy(),tb({fs:e.fs}),nb({fs:e.fs}),MF(e.sudoCommand),VB({getParentJid:e.getParentJid,syncScriptCommands:e.syncScriptCommands}),hB(),JP()];return e.fs&&(Zj(),t.push(...$n.map(t=>jE(t,e.browserAPI,e.fs,{isScoop:e.isScoop})))),t}let CV=null;function wV(e){CV=e}function TV(e){CV?.(e)}var EV=Jt();const DV={user:`user`,home:cm},OV=new Set([`root`,`nobody`,`nogroup`]),kV=/^[A-Za-z_][A-Za-z0-9_.-]*$/;function AV(e){return{user:kV.test(e.user)&&!OV.has(e.user)?e.user:DV.user,home:e.home.startsWith(`/`)&&!/[:\n]/.test(e.home)?e.home:DV.home}}function jV(e,t){let{user:n,home:r}=AV(t);if(e===`/etc/passwd`)return[`root:x:0:0:root:/root:/bin/bash`,`${n}:x:1000:1000:SLICC user:${r}:/bin/bash`,`nobody:x:65534:65534:nobody:/nonexistent:/usr/sbin/nologin`,``].join(`
3251
+ `,stderr:``,exitCode:0};let n;try{n=sV(e)}catch(e){return YB(e.message)}let r=n.positional[0],i=n.positional[1],a=!r||r===`-`,o;try{o=await lV(t,r,a)}catch{return YB(`${r}: No such file or directory`)}if(n.revert){let e=QB(o),r=n.plain?rV(e):iV(e);return i?(await t.fs.writeFile(t.fs.resolvePath(t.cwd,i),r),{stdout:``,stderr:``,exitCode:0}):{stdout:QB(r),stderr:``,exitCode:0}}let{data:s,base:c}=dV(n,o),l=uV(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 pV(e,t,n,r){if((await e.fs.stat(t)).isFile)return r[n]=await e.fs.readFileBuffer(t),1;let i=await e.fs.readdir(t),a=0;for(let o of i){let i=kr(t,o),s=n?`${n}/${o}`:o;a+=await pV(e,i,s,r)}return a}function mV(){return{stdout:`usage: zip [-r] <archive.zip> <path> [path...]
3252
+ `,stderr:``,exitCode:0}}function hV(){return C(`zip`,async(e,t)=>{if(e.length===0||e.includes(`--help`)||e.includes(`-h`))return mV();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
3253
+ `,exitCode:1};let i=t.fs.resolvePath(t.cwd,r[0]),a=r.slice(1),o={},s=0;for(let e of a){let r=t.fs.resolvePath(t.cwd,e),i=await t.fs.stat(r),a=(e.startsWith(`/`)?e.slice(1):e.replace(/^\.\//,``))||Ar(r);if(i.isDirectory&&!n)return{stdout:``,stderr:`zip: ${e} is a directory (use -r)\n`,exitCode:1};s+=await pV(t,r,a,o)}if(s===0)return{stdout:``,stderr:`zip: nothing to do
3254
+ `,exitCode:1};let c=Rt(o);return await t.fs.writeFile(i,c),{stdout:`created ${i} (${s} file(s))\n`,stderr:``,exitCode:0}})}function gV(e){let t;return C(`mcp`,async(n,r)=>{if(!t){let{createMcpCommand:n}=await import(`./mcp-command-CZ0dP9jt.js`);t=n({fs:e.fs,scriptCatalog:e.scriptCatalog,connectionManager:e.mcpConnectionManager})}return t.execute(n,r)})}function _V(e){return{setEnv:e.setEnv,unsetEnv:e.unsetEnv,broker:e.sudoCommand?.broker}}function vV(e){let{fs:t,fetch:n}=e;if(!t||!n)return[];let r={fs:t,fetch:n,scriptCatalog:e.scriptCatalog,syncScriptCommands:e.syncScriptCommands};return[OO(`ipk`,r),OO(`npm`,r),OO(`i`,r),_k(`ipx`,{fs:t,fetch:n}),_k(`npx`,{fs:t,fetch:n}),wb(`di`,{fs:t,fetch:n}),wb(`uv`,{fs:t,fetch:n}),HL({fs:t,fetch:n})]}function yV(e){let t={buildProcessConfig:e.buildProcessConfig};return[`python3`,`python`,`pyodide`].map(e=>ZM(e,t))}function bV(e){let t=e.scriptCatalog;return{buildProcessConfig:e.buildProcessConfig,terminal:e.terminal,gate:e.gateNativeCommand,commands:t&&(()=>t.getWasmCommands()),gitIdentity:e.gitIdentity}}function xV(e={}){let t=[NE({getJshCommands:e.getJshCommands,getWorkflowCommands:e.getWorkflowCommands}),oe(),kF(),JP(),VP(e.browserAPI,e.fs),Fj(e.browserAPI),zy(e.browserAPI),RD(e),hV(),vL(),uI(e.fs?{fs:e.fs}:{}),IF(),UF(),BF(),Pv(),pz(bV(e)),aC(bV(e)),fV(),CF(`sqlite3`),CF(`sqllite`),DI(),qI(),Bx(),gv(),QA({buildProcessConfig:e.buildProcessConfig}),QA({buildProcessConfig:e.buildProcessConfig},`jsh`),...yV(e),...vV(e),...e.fs?[iC({fs:e.fs})]:[],...e.fs?[uA({fs:e.fs})]:[],...e.fetch?[WE({fetch:e.fetch,streamFetch:e.streamFetch})]:[],NS(),PS(),KS(),Oz(e.webhook),pB(),Ry(e.crontask),gV(e),tM({fs:e.fs,fetch:e.fetch}),rC(),mF(),Ij(),Lj(`pdftk`),Lj(`pdf`),_v(`biscotto`,{getParentJid:e.getParentJid,isScoop:e.isScoop}),_v(`biscotti`,{getParentJid:e.getParentJid,isScoop:e.isScoop}),qj(`pdftoppm`),qj(`pdftocairo`),Jj(`pdftotext`),Sy(`convert`),Sy(`magick`),CB({fs:e.fs,scriptCatalog:e.scriptCatalog,getStaticBuiltins:e.getStaticBuiltins,getScriptRegisteredNames:e.getScriptRegisteredNames}),ZI(),pL(),PD(),FD(),mL(),dA(),tN(),rA(),dx(),pj(),fj(),eA(),fP(_V(e)),zp(e.gitCredential),mN({fs:e.fs}),BN(),jv(),Mv(),Nv(`xclip`),Nv(`xsel`),zN(),xC(),c_(),l_(),RA(e.fs),_t(),rj(),u_({getParentJid:e.getParentJid}),yx(),CM({processManager:e.processManager}),rR({processManager:e.processManager}),bk({processManager:e.processManager}),vk({processManager:e.processManager,scriptCatalog:e.scriptCatalog}),...f_(),lA(),Kk(),OR(),gD(),xS(),WR({processManager:e.processManager}),Lv({processManager:e.processManager,browser:e.browserAPI,sudoBroker:e.sudoCommand?.broker}),MS(),wv({registry:e.cherryRuntimeRegistry}),Jy(),eb({fs:e.fs}),tb({fs:e.fs}),jF(e.sudoCommand),BB({getParentJid:e.getParentJid,syncScriptCommands:e.syncScriptCommands}),mB(),qP()];return e.fs&&(Xj(),t.push(...er.map(t=>AE(t,e.browserAPI,e.fs,{isScoop:e.isScoop})))),t}let SV=null;function CV(e){SV=e}function wV(e){SV?.(e)}var TV=Yt();const EV={user:`user`,home:sm},DV=new Set([`root`,`nobody`,`nogroup`]),OV=/^[A-Za-z_][A-Za-z0-9_.-]*$/;function kV(e){return{user:OV.test(e.user)&&!DV.has(e.user)?e.user:EV.user,home:e.home.startsWith(`/`)&&!/[:\n]/.test(e.home)?e.home:EV.home}}function AV(e,t){let{user:n,home:r}=kV(t);if(e===`/etc/passwd`)return[`root:x:0:0:root:/root:/bin/bash`,`${n}:x:1000:1000:SLICC user:${r}:/bin/bash`,`nobody:x:65534:65534:nobody:/nonexistent:/usr/sbin/nologin`,``].join(`
3255
3255
  `);if(e===`/etc/group`)return[`root:x:0:`,`${n}:x:1000:`,`nogroup:x:65534:`,``].join(`
3256
- `)}function MV(e,t=DV){let n=jV(e,t);return n===void 0?void 0:new TextEncoder().encode(n)}function NV(e){return e===`/etc`?[`group`,`passwd`]:[]}function PV(e){return e?.code===`ENOENT`}const FV=Reflect.get(ut,`DefenseInDepthBox`);function IV(e){return(typeof e==`string`?e:e?.encoding)??`utf8`}function LV(e,t){if(typeof e!=`string`)return e;let n=IV(t);if(n===`binary`||n===`latin1`){let t=Oe(e);if(t)return t}return EV.Buffer.from(e,n)}function RV(e){return e===`/bin`?`/usr/bin`:e.startsWith(`/bin/`)?`/usr${e}`:e}function zV(e){let t=/^[A-Za-z0-9._+-]+$/.test(e)?e:`'${e.replace(/'/g,`'\\''`)}'`;return new TextEncoder().encode(`#!/bin/sh\n# SLICC command\nexec ${t} "$@"\n`)}function BV(e,t){let n=NV(e).filter(e=>!t.includes(e));return n.length?[...t,...n].sort():t}function VV(e,t){let n=NV(e).filter(e=>!t.some(t=>t.name===e));if(!n.length)return t;let r=n.map(e=>({name:e,isFile:!0,isDirectory:!1,isSymbolicLink:!1}));return[...t,...r].sort((e,t)=>e.name.localeCompare(t.name))}var HV=class{vfs;registeredCommandsFn=null;identityFn=null;listingStats=new Map;listingStatsMax;listingStatsTtlMs;constructor(e,t){this.vfs=e,this.listingStatsMax=Math.max(1,t?.listingStatsMax??2e4),this.listingStatsTtlMs=t?.listingStatsTtlMs??1e3,this.updateMetadataBatch=this.updateMetadataBatch.bind(this),this.symlinkBatch=this.symlinkBatch.bind(this)}get listingStatsSize(){return this.listingStats.size}primeListingStats(e,t){let n=Date.now();if(t.length>this.listingStatsMax){this.listingStats.clear();return}this.sweepExpiredListingStats(n),this.listingStats.size+t.length>this.listingStatsMax&&this.listingStats.clear();let r=e===`/`?`/`:`${e}/`;for(let e of t){let t=Ye(e),i=`${r}${e.name}`;this.listingStats.delete(i),t&&this.listingStats.set(i,{stats:t,at:n})}}sweepExpiredListingStats(e){for(let[t,n]of this.listingStats){if(e-n.at<=this.listingStatsTtlMs)break;this.listingStats.delete(t)}}primedStats(e){let t=this.listingStats.get(e);if(t){if(Date.now()-t.at>this.listingStatsTtlMs){this.listingStats.delete(e);return}return t.stats}}dropListingStats(){this.listingStats.clear()}setRegisteredCommandsFn(e){this.registeredCommandsFn=e}setIdentityFn(e){this.identityFn=e}identityFile(e){return MV(e,this.identityFn?.()??DV)}isVirtualBinCommand(e){return e.length>0&&!e.includes(`/`)&&this.getVirtualBinCommands().includes(e)}getVirtualBinCommands(){return this.registeredCommandsFn?.()??[]}virtualUsrStat(e){let t=RV(e);if(t===`/usr`||t===`/usr/bin`)return{isFile:!1,isDirectory:!0,isSymbolicLink:!1,mode:493,size:0,mtime:new Date(0)};if(t.startsWith(`/usr/bin/`)){let e=t.slice(9);if(this.isVirtualBinCommand(e))return{isFile:!0,isDirectory:!1,isSymbolicLink:!1,mode:493,size:zV(e).length,mtime:new Date(0)}}return null}canWrite(e){let t=this.vfs;return typeof t.canWrite!=`function`||t.canWrite(e)}listMountPoints(){let e=this.vfs;return typeof e.listMountPoints==`function`?e.listMountPoints():[]}trusted(e){let t=FV?.runTrustedAsync;return t?t(e):Promise.resolve().then(e)}async readFile(e,t){return this.trusted(async()=>{let n=x(e),r=await this.readRaw(n),i=IV(t),a=EV.Buffer.from(r.buffer,r.byteOffset,r.byteLength).toString(i);return i!==`hex`&&i!==`base64`&&m(a,r),a})}async readFileBuffer(e){return this.trusted(()=>this.readRaw(x(e)))}async readRaw(e){let t=RV(e);if(t.startsWith(`/usr/bin/`)&&this.isVirtualBinCommand(t.slice(9)))return zV(t.slice(9));let n;try{n=await this.vfs.readFile(e,{encoding:`binary`})}catch(t){let n=this.identityFile(e);if(n&&PV(t))return n;throw t}return n instanceof Uint8Array?n:new TextEncoder().encode(n)}identityStat(e,t){let n=this.identityFile(e);if(!(!n||!PV(t)))return{isFile:!0,isDirectory:!1,isSymbolicLink:!1,mode:420,size:n.length,mtime:new Date(0)}}async readFileBytes(e){let t=await this.readFileBuffer(e);return EV.Buffer.from(t.buffer,t.byteOffset,t.byteLength).toString(`latin1`)}async getNativeFile(e){return this.trusted(()=>this.vfs.getNativeFile(x(e)))}async readFileRange(e,t,n){return this.trusted(()=>this.vfs.readFileRange(x(e),t,n))}async writeFile(e,t,n){return this.dropListingStats(),this.trusted(async()=>{let r=x(e);await this.vfs.writeFile(r,LV(t,n))})}async appendFile(e,t,n){return this.dropListingStats(),this.trusted(()=>this.vfs.appendFile(x(e),LV(t,n)))}async exists(e){return this.trusted(async()=>{let t=x(e);return this.virtualUsrStat(t)?!0:await this.vfs.exists(t)||this.identityFile(t)!==void 0})}async stat(e){return this.trusted(async()=>{let t=x(e);try{return await this.statVfs(t)}catch(e){let n=this.identityStat(t,e);if(n)return n;throw e}})}async statVfs(e){let t=this.virtualUsrStat(e);if(t)return t;let n=this.vfs.statSync(e);if(n)return{isFile:n.type===`file`,isDirectory:n.type===`directory`,isSymbolicLink:!!n.isSymlink,mode:n.mode??(n.type===`directory`?493:420),size:n.size,mtime:new Date(n.mtime),identity:n.identity,dev:n.dev,ino:n.identity===void 0?void 0:n.ino};let r=this.primedStats(e)??await this.vfs.stat(e);return{isFile:r.type===`file`,isDirectory:r.type===`directory`,isSymbolicLink:!!r.isSymlink,mode:r.mode??(r.type===`directory`?493:420),size:r.size,mtime:new Date(r.mtime),identity:r.identity,dev:r.dev,ino:r.identity===void 0?void 0:r.ino}}async lstat(e){return this.trusted(async()=>{let t=x(e);try{return await this.lstatVfs(t)}catch(e){let n=this.identityStat(t,e);if(n)return n;throw e}})}async lstatVfs(e){let t=this.virtualUsrStat(e);if(t)return t;let n=this.vfs.lstatSync(e);if(n)return{isFile:n.type===`file`,isDirectory:n.type===`directory`,isSymbolicLink:n.type===`symlink`,mode:n.mode??(n.type===`directory`?493:n.type===`symlink`?511:420),size:n.size,mtime:new Date(n.mtime),identity:n.identity,dev:n.dev,ino:n.identity===void 0?void 0:n.ino};let r=this.primedStats(e)??await this.vfs.lstat(e);return{isFile:r.type===`file`,isDirectory:r.type===`directory`,isSymbolicLink:r.type===`symlink`,mode:r.mode??(r.type===`directory`?493:r.type===`symlink`?511:420),size:r.size,mtime:new Date(r.mtime),identity:r.identity,dev:r.dev,ino:r.identity===void 0?void 0:r.ino}}async mkdir(e,t){return this.dropListingStats(),this.trusted(async()=>{await this.vfs.mkdir(x(e),t)})}async readdir(e){return this.trusted(async()=>{let t=x(e);if(t===`/usr`)return[`bin`];if(RV(t)===`/usr/bin`)return this.getVirtualBinCommands().slice().sort();let n=this.vfs.readDirSync(t);if(n!==null)return BV(t,n.map(e=>e.name));let r=await this.vfs.readDir(t,{includeStats:!0});return this.primeListingStats(t,r),BV(t,r.map(e=>e.name))})}async readdirWithFileTypes(e){return this.trusted(async()=>{let t=x(e);if(t===`/usr`)return[{name:`bin`,isFile:!1,isDirectory:!0,isSymbolicLink:!1}];if(RV(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 VV(t,this.mapFastEntriesToDirents(n));let r=await this.vfs.readDir(t,{includeStats:!0});return this.primeListingStats(t,r),VV(t,this.mapAsyncEntriesToDirents(r))})}mapFastEntriesToDirents(e){return e.map(e=>this.entryToDirent(e))}mapAsyncEntriesToDirents(e){return e.map(e=>this.entryToDirent(e))}entryToDirent(e){return e.type===`symlink`?{name:e.name,isFile:!1,isDirectory:!1,isSymbolicLink:!0}:{name:e.name,isFile:e.type===`file`,isDirectory:e.type===`directory`,isSymbolicLink:!1}}async rm(e,t){return this.dropListingStats(),this.trusted(async()=>{await this.vfs.rm(x(e),t)})}async cp(e,t,n){return this.dropListingStats(),this.trusted(async()=>{let r=x(e),i=x(t),a;try{a=await this.vfs.stat(r)}catch(e){let t=this.identityFile(r);if(!t||!PV(e))throw e;await this.vfs.writeFile(i,t);return}if(a.type===`directory`){if(!n?.recursive)throw new Xe(`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=S(e,r.name),i=S(t,r.name);r.type===`directory`?await this.cpDir(n,i):await this.vfs.copyFile(n,i)}let r=new Set(n.map(e=>e.name));for(let n of NV(e)){let i=r.has(n)?void 0:this.identityFile(S(e,n));i&&await this.vfs.writeFile(S(t,n),i)}}async mv(e,t){return this.dropListingStats(),this.trusted(async()=>{await this.vfs.rename(x(e),x(t))})}async rename(e,t){return this.mv(e,t)}resolvePath(e,t){return t.startsWith(`/`)?x(t):x(S(e,t))}getAllPaths(){return[]}async chmod(e,t){return this.dropListingStats(),this.trusted(()=>this.vfs.chmod(x(e),t))}async updateMetadataBatch(e){return this.dropListingStats(),this.trusted(()=>this.vfs.updateMetadataBatch(e.map(e=>({...e,path:x(e.path)}))))}async symlinkBatch(e){return this.dropListingStats(),this.trusted(()=>this.vfs.symlinkBatch(e.map(e=>({target:e.target,path:x(e.path)}))))}async symlink(e,t){return this.dropListingStats(),this.trusted(async()=>{await this.vfs.symlink(e,x(t))})}async link(e,t){throw Error(`Hard links not supported in VirtualFS`)}async readlink(e){return this.trusted(async()=>this.vfs.readlink(x(e)))}async realpath(e){return this.trusted(async()=>this.vfs.realpath(x(e)))}async utimes(e,t,n){return this.dropListingStats(),this.trusted(()=>this.vfs.utimes(x(e),t,n))}invalidatePaths(e){this.dropListingStats();let t=this.vfs;t.invalidatePaths&&t.invalidatePaths(e)}async forgetSidecarConsistency(){await this.vfs.forgetSidecarConsistency?.()}};function UV(e){return e&&typeof e.getWatcher==`function`?e.getWatcher?.()??null:e&&typeof e.getUnderlyingFS==`function`?UV(e.getUnderlyingFS?.()):null}const WV=e(`almost-bash-shell`);function GV(e){if(!(`__SLICC_RUN_PID`in e)&&!(`__SLICC_OUTPUT_TEE__`in e)&&!(`__SLICC_SUDO_REASON`in e)&&!(`__SLICC_PIPESTATUS`in e)&&!(`__SLICC_PIPESTATUS_EX`in e))return{...e};let{[im]:t,[am]:n,[qp]:r,[Wt]:i,[Vt]:a,...o}=e;return o}function KV(e){let t=new AbortController,n=e.filter(e=>e!==void 0),r=()=>t.abort();for(let e of n)e.aborted?t.abort():e.addEventListener(`abort`,r,{once:!0});return{signal:t.signal,release(){for(let e of n)e.removeEventListener(`abort`,r)}}}var qV=class e{options;bash;vfsAdapter;gitCommands;mountCommands;lastEnv;cwd;umask=18;builtinCommandNames;staticBuiltinNames;allowedCommands;scriptCatalog;initialJshSync=null;ownsScriptCatalog;commandGate;jshRegistry;gnuBashFallback;pendingEnvWrites=new Map;activeShellPid;progress;activeRunSignal;commandAbort=new AbortController;scriptRun=null;scriptRunsActive=0;registryNames=new Set;outputTees=new Map;nextOutputTeeId=0;resolveJshProcessConfig=e=>this.buildJshProcessConfig(om(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:cm,PATH:vr,USER:`user`,SHELL:`/bin/bash`,TMPDIR:`/tmp`,PWD:t,...e.env}}buildSupplementalCommands(e,t,n){return SV({onMediaPreview:async e=>this.renderMediaPreview(e),getJshCommands:()=>this.getJshCommandNames(),getWorkflowCommands:()=>this.getWorkflowCommandNames(),syncScriptCommands:()=>this.syncJshCommands(),getStaticBuiltins:()=>[...this.staticBuiltinNames],getScriptRegisteredNames:()=>this.jshRegistry.scriptRegisteredNames(),fs:e.fs,fetch:t,streamFetch:n,scriptCatalog:this.scriptCatalog,browserAPI:e.browserAPI,webhook:e.webhook,crontask:e.crontask,getParentJid:e.getParentJid,isScoop:e.isScoop,buildProcessConfig:this.resolveJshProcessConfig,terminal:e.terminal,gateNativeCommand:this.gateNativeCommand,processManager:e.processManager,sudoCommand:e.sudo?{broker:e.sudo.broker,persistGrant:async e=>{this.commandGate.queueGrant(e)},suppressNextGate:e=>this.commandGate.registerSudoBypass(e)}:void 0,setEnv:(e,t)=>{this.pendingEnvWrites.set(e,t),this.lastEnv[e]=t},unsetEnv:e=>{this.pendingEnvWrites.set(e,null),delete this.lastEnv[e]},gitCredential:{githubToken:(e,t)=>this.gitCommands.githubCredential(e,t),githubDomains:Hp},gitIdentity:()=>this.gitCommands.identity(),mcpConnectionManager:e.mcpConnectionManager})}constructor(t){this.options=t,this.vfsAdapter=new HV(t.fs),this.progress=new mm({scrubLabel:t.scrubProgressLabel}),this.allowedCommands=e.buildAllowedCommandSet(t),this.commandGate=new Xp({getSudo:()=>this.options.sudo,fs:t.fs});let n=t.cwd??`/`,r=e.buildInitialEnv(t,n);this.gitCommands=new gp({fs:t.fs,authorName:r.GIT_AUTHOR_NAME??`User`,authorEmail:r.GIT_AUTHOR_EMAIL??`user@example.com`,ensureFreshGithubToken:Vp}),this.mountCommands=new Us({fs:t.fs,isScoop:t.isScoop,acquireLocalMountViaToolUI:$m});let i=t.jshDiscoveryFs??t.fs,a=t.bshDiscoveryFs??t.fs,o=UV(i)??UV(a);this.scriptCatalog=t.scriptCatalog??new ki({jshFs:i,bshFs:a,watcher:o}),this.ownsScriptCatalog=!t.scriptCatalog,o&&o.watch(`/`,e=>e.endsWith(`.jsh`)||e.endsWith(`.workflow.js`)||gr(e),()=>{this.syncJshCommands().catch(()=>void 0)});let s=this.createGitCustomCommand(),c=g({progress:ym(this.progress)}),l=_({progress:ym(this.progress)}),u=this.buildSupplementalCommands(t,c,l),d=[s,this.createMountCustomCommand(),this.createUmountCustomCommand(),qh(t.fs),Wg(t.fs,c,t.browserAPI),...u].filter(e=>this.isCommandAllowed(e.name)),f=[...ft(),...dt()],p=this.allowedCommands?f.filter(e=>this.isCommandAllowed(e)):void 0;if(this.bash=new pt({fs:this.vfsAdapter,cwd:n,env:{},fetch:c,commands:p,customCommands:d,sleep:Bm(this.progress,{isAborted:()=>this.activeRunSignal?.aborted??!1}),executionLimitProfile:t.executionLimitProfile,executionLimits:Qp(t.isScoop?.()??!1,t.executionLimits)}),this.bash.registerTransformPlugin(sh),this.allowedCommands!==null){let e=this.bash;for(let t of dt())this.isCommandAllowed(t)||e.commands.delete(t)}{let e=this.bash;for(let[t,n]of e.commands)e.commands.set(t,this.wrapCommandForDispatch(n));this.registryNames=new Set(e.commands.keys())}let m=d.map(e=>e.name),h=p??[...ft(),...dt()];this.builtinCommandNames=new Set([...h,...m]),this.staticBuiltinNames=new Set(this.builtinCommandNames),this.vfsAdapter.setRegisteredCommandsFn(()=>[...this.builtinCommandNames]),this.vfsAdapter.setIdentityFn(()=>({user:this.lastEnv.USER??`user`,home:this.lastEnv.HOME??`/home/user`})),this.lastEnv={...r},this.cwd=n,this.bindCollaborators(t),this.startInitialJshSync()}bindCollaborators(e){let t=this;this.jshRegistry=new pm({get bash(){return t.bash},scriptCatalog:this.scriptCatalog,discoveryFs:e.jshDiscoveryFs??e.fs,vfsAdapter:this.vfsAdapter,get cwd(){return t.cwd},get lastEnv(){return t.lastEnv},get umask(){return t.umask},builtinCommandNames:this.builtinCommandNames,isCommandAllowed:e=>this.isCommandAllowed(e),wrapCommandForDispatch:e=>this.wrapCommandForDispatch(e),path:()=>this.lastEnv.PATH,buildJshProcessConfig:e=>this.buildJshProcessConfig(e),gateNativeCommand:this.gateNativeCommand,gitIdentity:()=>this.gitCommands.identity()}),this.gnuBashFallback=new sm({gnuBash:e.gnuBash===!0,get lastEnv(){return t.lastEnv},get cwd(){return t.cwd},get umask(){return t.umask},vfsAdapter:this.vfsAdapter,get bash(){return t.bash},scriptCatalog:this.scriptCatalog,outputTees:this.outputTees,gateNativeCommand:this.gateNativeCommand,buildJshProcessConfig:e=>this.buildJshProcessConfig(e),gitIdentity:()=>this.gitCommands.identity(),flushPendingCommandGrants:()=>this.commandGate.flushPendingCommandGrants(),applyPendingEnvWrites:()=>this.applyPendingEnvWrites(),syncJshCommands:()=>this.syncJshCommands(),adoptCwd:e=>{this.cwd=e},adoptEnv:e=>{this.lastEnv=e}})}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 this.jshRegistry.getJshCommandNames()}async syncJshCommands(){return this.jshRegistry.syncJshCommands()}cancelActiveCommand(){this.commandAbort.abort(),this.commandAbort=new AbortController}async executeCommand(e,t,n,r=``,i){let a=this.activeShellPid;n!==void 0&&(this.activeShellPid=n);let o=i?.onOutput?`tee-${this.nextOutputTeeId+=1}`:void 0;o&&i?.onOutput&&this.outputTees.set(o,i.onOutput);try{let a=await this.runCommand(e,t,n,r,o,i?.capturePipeStatus);return{stdout:a.stdout,stderr:a.stderr,exitCode:a.exitCode,...a.pipeStatus===void 0?{}:{pipeStatus:a.pipeStatus}}}finally{this.activeShellPid=a,o&&this.outputTees.delete(o)}}async executeScriptFile(e,t=[]){return fi(e,t,{fs:this.vfsAdapter,cwd:this.cwd,env:new Map(Object.entries(this.lastEnv)),stdin:``,exec:(e,t)=>this.bash.exec(e,{env:t?.env??this.lastEnv,cwd:t?.cwd??this.cwd,umask:this.umask,...t?.env===void 0?{}:{replaceEnv:!0}})},this.buildJshProcessConfig())}dispose(){this.ownsScriptCatalog&&this.scriptCatalog.dispose()}async renderMediaPreview(e){throw Error(`terminal preview is unavailable in headless mode`)}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 lm(e);this.lastEnv.HOME=t,this.options.env?.USER||(this.lastEnv.USER=um(t));let n=`${t.replace(/\/+$/,``)}/.profile`;if(!await e.exists(n).catch(()=>!1))return;let r=await this.bash.exec(`. "$HOME/.profile"`,{env:this.lastEnv,cwd:this.cwd,umask:this.umask});if(typeof r.umask==`number`&&(this.umask=r.umask),r.env){let{PWD:e,...t}=r.env;this.lastEnv={...t,PWD:this.lastEnv.PWD??this.cwd}}}catch(e){WV.warn(`HOME/profile init failed; continuing with defaults`,e)}}async waitForInitialJshSync(e){let t=this.initialJshSync;if(t===null)return;if(!e){await t;return}if(e.aborted)return;let n;try{await new Promise(r=>{n=()=>r(),e.addEventListener(`abort`,n,{once:!0}),t.then(()=>r(),()=>r())})}finally{n&&e.removeEventListener(`abort`,n)}}async runCommand(e,t,n,r=``,i,a=!1){if(TV(e.trim().split(/\s+/)[0]||`unknown`),v(),await this.waitForInitialJshSync(t),await this.gnuBashFallback.usesGnuBash())return this.gnuBashFallback.runOnGnuBash(e,t,n,r,i,a);let o=Yp(e),s={env:{...this.lastEnv,...n===void 0?{}:{[im]:String(n)},...i===void 0?{}:{[am]:i},...o?{[qp]:o}:{}},cwd:this.cwd,umask:this.umask,signal:t,...r===``?{}:{stdin:r,stdinKind:`bytes`}},c=this.lastEnv.PATH,l=KV([t,this.commandAbort.signal]);s.signal=l.signal,this.activeRunSignal=l.signal;let u=this.beginScriptRun(e),d;try{d=await this.bash.exec(Ht(e,a),s)}finally{l.release(),this.activeRunSignal===l.signal&&(this.activeRunSignal=void 0),this.endScriptRun(u)}if(await this.commandGate.flushPendingCommandGrants(),d=Bt(d,a),typeof d.umask==`number`&&(this.umask=d.umask),d.env&&(this.lastEnv=GV(d.env)),d.env&&this.lastEnv.PATH!==c&&await this.syncJshCommands().catch(()=>void 0),this.applyPendingEnvWrites(),d.env?.PWD&&(this.cwd=d.env.PWD),d.exitCode===127){let t=await this.jshRegistry.tryJshFallback(e,n);if(t)return this.syncJshCommands().catch(()=>void 0),t}if(d.exitCode!==0&&d.stderr.includes(`Permission denied`)){let{withShebangExecHint:e}=await import(`./shebang-exec-hint-CSwess-H.js`).then(e=>e.n);return Rt(await e(d,this.cwd,this.vfsAdapter),d.pipeStatus)}return d}applyPendingEnvWrites(){for(let[e,t]of this.pendingEnvWrites)t===null?delete this.lastEnv[e]:this.lastEnv[e]=t;this.pendingEnvWrites.clear()}gateNativeCommand=async(e,t,n)=>{if(this.allowedCommands!==null&&!this.isCommandAllowed(e))return{stderr:`bash: ${e}: command not found\n`,exitCode:127};if(!this.commandGate.isTransparentGatingEnabled()||Ap.has(e))return null;let r=await this.commandGate.gateCommandDispatch(e,t,n[qp]);return r?{stderr:r.stderr,exitCode:r.exitCode}:null};wrapCommandForDispatch(e){let t=this.commandGate.wrapCommandForSudo(e),n=e.name===`timeout`?Wm(t,this.progress):Km(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(am),s=o?a.get(o):void 0;s&&(t.writeStdout=s);try{let r=await Jm(()=>n.execute(e,t),t.signal);return i(t.env,r),r}finally{r()}}}}teeCommandOutput(e,t){let n=e?.get(am);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=Fm(this.bash.transform(e).ast,this.registryNames)}catch{t={totalSteps:null}}return this.scriptRun=new Lm(t,this.progress,Im(e)),this.scriptRun}endScriptRun(e){this.scriptRunsActive=Math.max(0,this.scriptRunsActive-1),e&&(e.end(),this.scriptRun===e&&(this.scriptRun=null))}isCommandAllowed(e){return this.allowedCommands===null||this.allowedCommands.has(Ap.get(e)??e)}createGitCustomCommand(){let e=this.gitCommands;return C(`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 C(`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 C(`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 getWorkflowCommandNames(){return this.jshRegistry.getWorkflowCommandNames()}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{za as _,jB as a,ka as b,Ps as c,Cs as d,xs as f,Fa as g,Wo as h,DB as i,Ds as l,$o as m,HV as n,TB as o,es as p,wV as r,cm as s,qV as t,ws as u,Ra as v,Ro as y};
3256
+ `)}function jV(e,t=EV){let n=AV(e,t);return n===void 0?void 0:new TextEncoder().encode(n)}function MV(e){return e===`/etc`?[`group`,`passwd`]:[]}function NV(e){return e?.code===`ENOENT`}const PV=Reflect.get(dt,`DefenseInDepthBox`);function FV(e){return(typeof e==`string`?e:e?.encoding)??`utf8`}function IV(e,t){if(typeof e!=`string`)return e;let n=FV(t);if(n===`binary`||n===`latin1`){let t=Oe(e);if(t)return t}return TV.Buffer.from(e,n)}function LV(e){return e===`/bin`?`/usr/bin`:e.startsWith(`/bin/`)?`/usr${e}`:e}function RV(e){let t=/^[A-Za-z0-9._+-]+$/.test(e)?e:`'${e.replace(/'/g,`'\\''`)}'`;return new TextEncoder().encode(`#!/bin/sh\n# SLICC command\nexec ${t} "$@"\n`)}function zV(e,t){let n=MV(e).filter(e=>!t.includes(e));return n.length?[...t,...n].sort():t}function BV(e,t){let n=MV(e).filter(e=>!t.some(t=>t.name===e));if(!n.length)return t;let r=n.map(e=>({name:e,isFile:!0,isDirectory:!1,isSymbolicLink:!1}));return[...t,...r].sort((e,t)=>e.name.localeCompare(t.name))}var VV=class{vfs;registeredCommandsFn=null;identityFn=null;listingStats=new Map;listingStatsMax;listingStatsTtlMs;constructor(e,t){this.vfs=e,this.listingStatsMax=Math.max(1,t?.listingStatsMax??2e4),this.listingStatsTtlMs=t?.listingStatsTtlMs??1e3,this.updateMetadataBatch=this.updateMetadataBatch.bind(this),this.symlinkBatch=this.symlinkBatch.bind(this)}get listingStatsSize(){return this.listingStats.size}primeListingStats(e,t){let n=Date.now();if(t.length>this.listingStatsMax){this.listingStats.clear();return}this.sweepExpiredListingStats(n),this.listingStats.size+t.length>this.listingStatsMax&&this.listingStats.clear();let r=e===`/`?`/`:`${e}/`;for(let e of t){let t=Xe(e),i=`${r}${e.name}`;this.listingStats.delete(i),t&&this.listingStats.set(i,{stats:t,at:n})}}sweepExpiredListingStats(e){for(let[t,n]of this.listingStats){if(e-n.at<=this.listingStatsTtlMs)break;this.listingStats.delete(t)}}primedStats(e){let t=this.listingStats.get(e);if(t){if(Date.now()-t.at>this.listingStatsTtlMs){this.listingStats.delete(e);return}return t.stats}}dropListingStats(){this.listingStats.clear()}setRegisteredCommandsFn(e){this.registeredCommandsFn=e}setIdentityFn(e){this.identityFn=e}identityFile(e){return jV(e,this.identityFn?.()??EV)}isVirtualBinCommand(e){return e.length>0&&!e.includes(`/`)&&this.getVirtualBinCommands().includes(e)}getVirtualBinCommands(){return this.registeredCommandsFn?.()??[]}virtualUsrStat(e){let t=LV(e);if(t===`/usr`||t===`/usr/bin`)return{isFile:!1,isDirectory:!0,isSymbolicLink:!1,mode:493,size:0,mtime:new Date(0)};if(t.startsWith(`/usr/bin/`)){let e=t.slice(9);if(this.isVirtualBinCommand(e))return{isFile:!0,isDirectory:!1,isSymbolicLink:!1,mode:493,size:RV(e).length,mtime:new Date(0)}}return null}canWrite(e){let t=this.vfs;return typeof t.canWrite!=`function`||t.canWrite(e)}listMountPoints(){let e=this.vfs;return typeof e.listMountPoints==`function`?e.listMountPoints():[]}trusted(e){let t=PV?.runTrustedAsync;return t?t(e):Promise.resolve().then(e)}async readFile(e,t){return this.trusted(async()=>{let n=x(e),r=await this.readRaw(n),i=FV(t),a=TV.Buffer.from(r.buffer,r.byteOffset,r.byteLength).toString(i);return i!==`hex`&&i!==`base64`&&m(a,r),a})}async readFileBuffer(e){return this.trusted(()=>this.readRaw(x(e)))}async readRaw(e){let t=LV(e);if(t.startsWith(`/usr/bin/`)&&this.isVirtualBinCommand(t.slice(9)))return RV(t.slice(9));let n;try{n=await this.vfs.readFile(e,{encoding:`binary`})}catch(t){let n=this.identityFile(e);if(n&&NV(t))return n;throw t}return n instanceof Uint8Array?n:new TextEncoder().encode(n)}identityStat(e,t){let n=this.identityFile(e);if(!(!n||!NV(t)))return{isFile:!0,isDirectory:!1,isSymbolicLink:!1,mode:420,size:n.length,mtime:new Date(0)}}async readFileBytes(e){let t=await this.readFileBuffer(e);return TV.Buffer.from(t.buffer,t.byteOffset,t.byteLength).toString(`latin1`)}async getNativeFile(e){return this.trusted(()=>this.vfs.getNativeFile(x(e)))}async readFileRange(e,t,n){return this.trusted(()=>this.vfs.readFileRange(x(e),t,n))}async writeFile(e,t,n){return this.dropListingStats(),this.trusted(async()=>{let r=x(e);await this.vfs.writeFile(r,IV(t,n))})}async appendFile(e,t,n){return this.dropListingStats(),this.trusted(()=>this.vfs.appendFile(x(e),IV(t,n)))}async exists(e){return this.trusted(async()=>{let t=x(e);return this.virtualUsrStat(t)?!0:await this.vfs.exists(t)||this.identityFile(t)!==void 0})}async stat(e){return this.trusted(async()=>{let t=x(e);try{return await this.statVfs(t)}catch(e){let n=this.identityStat(t,e);if(n)return n;throw e}})}async statVfs(e){let t=this.virtualUsrStat(e);if(t)return t;let n=this.vfs.statSync(e);if(n)return{isFile:n.type===`file`,isDirectory:n.type===`directory`,isSymbolicLink:!!n.isSymlink,mode:n.mode??(n.type===`directory`?493:420),size:n.size,mtime:new Date(n.mtime),identity:n.identity,dev:n.dev,ino:n.identity===void 0?void 0:n.ino};let r=this.primedStats(e)??await this.vfs.stat(e);return{isFile:r.type===`file`,isDirectory:r.type===`directory`,isSymbolicLink:!!r.isSymlink,mode:r.mode??(r.type===`directory`?493:420),size:r.size,mtime:new Date(r.mtime),identity:r.identity,dev:r.dev,ino:r.identity===void 0?void 0:r.ino}}async lstat(e){return this.trusted(async()=>{let t=x(e);try{return await this.lstatVfs(t)}catch(e){let n=this.identityStat(t,e);if(n)return n;throw e}})}async lstatVfs(e){let t=this.virtualUsrStat(e);if(t)return t;let n=this.vfs.lstatSync(e);if(n)return{isFile:n.type===`file`,isDirectory:n.type===`directory`,isSymbolicLink:n.type===`symlink`,mode:n.mode??(n.type===`directory`?493:n.type===`symlink`?511:420),size:n.size,mtime:new Date(n.mtime),identity:n.identity,dev:n.dev,ino:n.identity===void 0?void 0:n.ino};let r=this.primedStats(e)??await this.vfs.lstat(e);return{isFile:r.type===`file`,isDirectory:r.type===`directory`,isSymbolicLink:r.type===`symlink`,mode:r.mode??(r.type===`directory`?493:r.type===`symlink`?511:420),size:r.size,mtime:new Date(r.mtime),identity:r.identity,dev:r.dev,ino:r.identity===void 0?void 0:r.ino}}async mkdir(e,t){return this.dropListingStats(),this.trusted(async()=>{await this.vfs.mkdir(x(e),t)})}async readdir(e){return this.trusted(async()=>{let t=x(e);if(t===`/usr`)return[`bin`];if(LV(t)===`/usr/bin`)return this.getVirtualBinCommands().slice().sort();let n=this.vfs.readDirSync(t);if(n!==null)return zV(t,n.map(e=>e.name));let r=await this.vfs.readDir(t,{includeStats:!0});return this.primeListingStats(t,r),zV(t,r.map(e=>e.name))})}async readdirWithFileTypes(e){return this.trusted(async()=>{let t=x(e);if(t===`/usr`)return[{name:`bin`,isFile:!1,isDirectory:!0,isSymbolicLink:!1}];if(LV(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 BV(t,this.mapFastEntriesToDirents(n));let r=await this.vfs.readDir(t,{includeStats:!0});return this.primeListingStats(t,r),BV(t,this.mapAsyncEntriesToDirents(r))})}mapFastEntriesToDirents(e){return e.map(e=>this.entryToDirent(e))}mapAsyncEntriesToDirents(e){return e.map(e=>this.entryToDirent(e))}entryToDirent(e){return e.type===`symlink`?{name:e.name,isFile:!1,isDirectory:!1,isSymbolicLink:!0}:{name:e.name,isFile:e.type===`file`,isDirectory:e.type===`directory`,isSymbolicLink:!1}}async rm(e,t){return this.dropListingStats(),this.trusted(async()=>{await this.vfs.rm(x(e),t)})}async cp(e,t,n){return this.dropListingStats(),this.trusted(async()=>{let r=x(e),i=x(t),a;try{a=await this.vfs.stat(r)}catch(e){let t=this.identityFile(r);if(!t||!NV(e))throw e;await this.vfs.writeFile(i,t);return}if(a.type===`directory`){if(!n?.recursive)throw new Ze(`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=S(e,r.name),i=S(t,r.name);r.type===`directory`?await this.cpDir(n,i):await this.vfs.copyFile(n,i)}let r=new Set(n.map(e=>e.name));for(let n of MV(e)){let i=r.has(n)?void 0:this.identityFile(S(e,n));i&&await this.vfs.writeFile(S(t,n),i)}}async mv(e,t){return this.dropListingStats(),this.trusted(async()=>{await this.vfs.rename(x(e),x(t))})}async rename(e,t){return this.mv(e,t)}resolvePath(e,t){return t.startsWith(`/`)?x(t):x(S(e,t))}getAllPaths(){return[]}async chmod(e,t){return this.dropListingStats(),this.trusted(()=>this.vfs.chmod(x(e),t))}async updateMetadataBatch(e){return this.dropListingStats(),this.trusted(()=>this.vfs.updateMetadataBatch(e.map(e=>({...e,path:x(e.path)}))))}async symlinkBatch(e){return this.dropListingStats(),this.trusted(()=>this.vfs.symlinkBatch(e.map(e=>({target:e.target,path:x(e.path)}))))}async symlink(e,t){return this.dropListingStats(),this.trusted(async()=>{await this.vfs.symlink(e,x(t))})}async link(e,t){throw Error(`Hard links not supported in VirtualFS`)}async readlink(e){return this.trusted(async()=>this.vfs.readlink(x(e)))}async realpath(e){return this.trusted(async()=>this.vfs.realpath(x(e)))}async utimes(e,t,n){return this.dropListingStats(),this.trusted(()=>this.vfs.utimes(x(e),t,n))}invalidatePaths(e){this.dropListingStats();let t=this.vfs;t.invalidatePaths&&t.invalidatePaths(e)}async forgetSidecarConsistency(){await this.vfs.forgetSidecarConsistency?.()}};function HV(e){return e&&typeof e.getWatcher==`function`?e.getWatcher?.()??null:e&&typeof e.getUnderlyingFS==`function`?HV(e.getUnderlyingFS?.()):null}const UV=e(`almost-bash-shell`);function WV(e){if(!(`__SLICC_RUN_PID`in e)&&!(`__SLICC_OUTPUT_TEE__`in e)&&!(`__SLICC_SUDO_REASON`in e)&&!(`__SLICC_PIPESTATUS`in e)&&!(`__SLICC_PIPESTATUS_EX`in e))return{...e};let{[rm]:t,[im]:n,[Kp]:r,[Gt]:i,[Ht]:a,...o}=e;return o}function GV(e){let t=new AbortController,n=e.filter(e=>e!==void 0),r=()=>t.abort();for(let e of n)e.aborted?t.abort():e.addEventListener(`abort`,r,{once:!0});return{signal:t.signal,release(){for(let e of n)e.removeEventListener(`abort`,r)}}}var KV=class e{options;bash;vfsAdapter;gitCommands;mountCommands;lastEnv;cwd;umask=18;builtinCommandNames;staticBuiltinNames;allowedCommands;scriptCatalog;initialJshSync=null;ownsScriptCatalog;commandGate;jshRegistry;gnuBashFallback;pendingEnvWrites=new Map;activeShellPid;progress;activeRunSignal;commandAbort=new AbortController;scriptRun=null;scriptRunsActive=0;registryNames=new Set;outputTees=new Map;nextOutputTeeId=0;resolveJshProcessConfig=e=>this.buildJshProcessConfig(am(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:sm,PATH:yr,USER:`user`,SHELL:`/bin/bash`,TMPDIR:`/tmp`,PWD:t,...e.env}}buildSupplementalCommands(e,t,n){return xV({onMediaPreview:async e=>this.renderMediaPreview(e),getJshCommands:()=>this.getJshCommandNames(),getWorkflowCommands:()=>this.getWorkflowCommandNames(),syncScriptCommands:()=>this.syncJshCommands(),getStaticBuiltins:()=>[...this.staticBuiltinNames],getScriptRegisteredNames:()=>this.jshRegistry.scriptRegisteredNames(),fs:e.fs,fetch:t,streamFetch:n,scriptCatalog:this.scriptCatalog,browserAPI:e.browserAPI,webhook:e.webhook,crontask:e.crontask,getParentJid:e.getParentJid,isScoop:e.isScoop,buildProcessConfig:this.resolveJshProcessConfig,terminal:e.terminal,gateNativeCommand:this.gateNativeCommand,processManager:e.processManager,sudoCommand:e.sudo?{broker:e.sudo.broker,persistGrant:async e=>{this.commandGate.queueGrant(e)},suppressNextGate:e=>this.commandGate.registerSudoBypass(e)}:void 0,setEnv:(e,t)=>{this.pendingEnvWrites.set(e,t),this.lastEnv[e]=t},unsetEnv:e=>{this.pendingEnvWrites.set(e,null),delete this.lastEnv[e]},gitCredential:{githubToken:(e,t)=>this.gitCommands.githubCredential(e,t),githubDomains:Vp},gitIdentity:()=>this.gitCommands.identity(),mcpConnectionManager:e.mcpConnectionManager})}constructor(t){this.options=t,this.vfsAdapter=new VV(t.fs),this.progress=new pm({scrubLabel:t.scrubProgressLabel}),this.allowedCommands=e.buildAllowedCommandSet(t),this.commandGate=new Yp({getSudo:()=>this.options.sudo,fs:t.fs});let n=t.cwd??`/`,r=e.buildInitialEnv(t,n);this.gitCommands=new hp({fs:t.fs,authorName:r.GIT_AUTHOR_NAME??`User`,authorEmail:r.GIT_AUTHOR_EMAIL??`user@example.com`,ensureFreshGithubToken:Bp}),this.mountCommands=new Hs({fs:t.fs,isScoop:t.isScoop,acquireLocalMountViaToolUI:Qm});let i=t.jshDiscoveryFs??t.fs,a=t.bshDiscoveryFs??t.fs,o=HV(i)??HV(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`)||_r(e),()=>{this.syncJshCommands().catch(()=>void 0)});let s=this.createGitCustomCommand(),c=g({progress:vm(this.progress)}),l=_({progress:vm(this.progress)}),u=this.buildSupplementalCommands(t,c,l),d=[s,this.createMountCustomCommand(),this.createUmountCustomCommand(),Kh(t.fs),Ug(t.fs,c,t.browserAPI),...u].filter(e=>this.isCommandAllowed(e.name)),f=[...pt(),...ft()],p=this.allowedCommands?f.filter(e=>this.isCommandAllowed(e)):void 0;if(this.bash=new mt({fs:this.vfsAdapter,cwd:n,env:{},fetch:c,commands:p,customCommands:d,sleep:zm(this.progress,{isAborted:()=>this.activeRunSignal?.aborted??!1}),executionLimitProfile:t.executionLimitProfile,executionLimits:Zp(t.isScoop?.()??!1,t.executionLimits)}),this.bash.registerTransformPlugin(oh),this.allowedCommands!==null){let e=this.bash;for(let t of ft())this.isCommandAllowed(t)||e.commands.delete(t)}{let e=this.bash;for(let[t,n]of e.commands)e.commands.set(t,this.wrapCommandForDispatch(n));this.registryNames=new Set(e.commands.keys())}let m=d.map(e=>e.name),h=p??[...pt(),...ft()];this.builtinCommandNames=new Set([...h,...m]),this.staticBuiltinNames=new Set(this.builtinCommandNames),this.vfsAdapter.setRegisteredCommandsFn(()=>[...this.builtinCommandNames]),this.vfsAdapter.setIdentityFn(()=>({user:this.lastEnv.USER??`user`,home:this.lastEnv.HOME??`/home/user`})),this.lastEnv={...r},this.cwd=n,this.bindCollaborators(t),this.startInitialJshSync()}bindCollaborators(e){let t=this;this.jshRegistry=new fm({get bash(){return t.bash},scriptCatalog:this.scriptCatalog,discoveryFs:e.jshDiscoveryFs??e.fs,vfsAdapter:this.vfsAdapter,get cwd(){return t.cwd},get lastEnv(){return t.lastEnv},get umask(){return t.umask},builtinCommandNames:this.builtinCommandNames,isCommandAllowed:e=>this.isCommandAllowed(e),wrapCommandForDispatch:e=>this.wrapCommandForDispatch(e),path:()=>this.lastEnv.PATH,buildJshProcessConfig:e=>this.buildJshProcessConfig(e),gateNativeCommand:this.gateNativeCommand,gitIdentity:()=>this.gitCommands.identity()}),this.gnuBashFallback=new om({gnuBash:e.gnuBash===!0,get lastEnv(){return t.lastEnv},get cwd(){return t.cwd},get umask(){return t.umask},vfsAdapter:this.vfsAdapter,get bash(){return t.bash},scriptCatalog:this.scriptCatalog,outputTees:this.outputTees,gateNativeCommand:this.gateNativeCommand,buildJshProcessConfig:e=>this.buildJshProcessConfig(e),gitIdentity:()=>this.gitCommands.identity(),flushPendingCommandGrants:()=>this.commandGate.flushPendingCommandGrants(),applyPendingEnvWrites:()=>this.applyPendingEnvWrites(),syncJshCommands:()=>this.syncJshCommands(),adoptCwd:e=>{this.cwd=e},adoptEnv:e=>{this.lastEnv=e}})}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 this.jshRegistry.getJshCommandNames()}async syncJshCommands(){return this.jshRegistry.syncJshCommands()}cancelActiveCommand(){this.commandAbort.abort(),this.commandAbort=new AbortController}async executeCommand(e,t,n,r=``,i){let a=this.activeShellPid;n!==void 0&&(this.activeShellPid=n);let o=i?.onOutput?`tee-${this.nextOutputTeeId+=1}`:void 0;o&&i?.onOutput&&this.outputTees.set(o,i.onOutput);try{let a=await this.runCommand(e,t,n,r,o,i?.capturePipeStatus);return{stdout:a.stdout,stderr:a.stderr,exitCode:a.exitCode,...a.pipeStatus===void 0?{}:{pipeStatus:a.pipeStatus}}}finally{this.activeShellPid=a,o&&this.outputTees.delete(o)}}async executeScriptFile(e,t=[]){return pi(e,t,{fs:this.vfsAdapter,cwd:this.cwd,env:new Map(Object.entries(this.lastEnv)),stdin:``,exec:(e,t)=>this.bash.exec(e,{env:t?.env??this.lastEnv,cwd:t?.cwd??this.cwd,umask:this.umask,...t?.env===void 0?{}:{replaceEnv:!0}})},this.buildJshProcessConfig())}dispose(){this.ownsScriptCatalog&&this.scriptCatalog.dispose()}async renderMediaPreview(e){throw Error(`terminal preview is unavailable in headless mode`)}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 cm(e);this.lastEnv.HOME=t,this.options.env?.USER||(this.lastEnv.USER=lm(t));let n=`${t.replace(/\/+$/,``)}/.profile`;if(!await e.exists(n).catch(()=>!1))return;let r=await this.bash.exec(`. "$HOME/.profile"`,{env:this.lastEnv,cwd:this.cwd,umask:this.umask});if(typeof r.umask==`number`&&(this.umask=r.umask),r.env){let{PWD:e,...t}=r.env;this.lastEnv={...t,PWD:this.lastEnv.PWD??this.cwd}}}catch(e){UV.warn(`HOME/profile init failed; continuing with defaults`,e)}}async waitForInitialJshSync(e){let t=this.initialJshSync;if(t===null)return;if(!e){await t;return}if(e.aborted)return;let n;try{await new Promise(r=>{n=()=>r(),e.addEventListener(`abort`,n,{once:!0}),t.then(()=>r(),()=>r())})}finally{n&&e.removeEventListener(`abort`,n)}}async runCommand(e,t,n,r=``,i,a=!1){if(wV(e.trim().split(/\s+/)[0]||`unknown`),v(),await this.waitForInitialJshSync(t),await this.gnuBashFallback.usesGnuBash())return this.gnuBashFallback.runOnGnuBash(e,t,n,r,i,a);let o=Jp(e),s={env:{...this.lastEnv,...n===void 0?{}:{[rm]:String(n)},...i===void 0?{}:{[im]:i},...o?{[Kp]:o}:{}},cwd:this.cwd,umask:this.umask,signal:t,...r===``?{}:{stdin:r,stdinKind:`bytes`}},c=this.lastEnv.PATH,l=GV([t,this.commandAbort.signal]);s.signal=l.signal,this.activeRunSignal=l.signal;let u=this.beginScriptRun(e),d;try{d=await this.bash.exec(Ut(e,a),s)}finally{l.release(),this.activeRunSignal===l.signal&&(this.activeRunSignal=void 0),this.endScriptRun(u)}if(await this.commandGate.flushPendingCommandGrants(),d=Vt(d,a),typeof d.umask==`number`&&(this.umask=d.umask),d.env&&(this.lastEnv=WV(d.env)),d.env&&this.lastEnv.PATH!==c&&await this.syncJshCommands().catch(()=>void 0),this.applyPendingEnvWrites(),d.env?.PWD&&(this.cwd=d.env.PWD),d.exitCode===127){let t=await this.jshRegistry.tryJshFallback(e,n);if(t)return this.syncJshCommands().catch(()=>void 0),t}if(d.exitCode!==0&&d.stderr.includes(`Permission denied`)){let{withShebangExecHint:e}=await import(`./shebang-exec-hint-CSwess-H.js`).then(e=>e.n);return zt(await e(d,this.cwd,this.vfsAdapter),d.pipeStatus)}return d}applyPendingEnvWrites(){for(let[e,t]of this.pendingEnvWrites)t===null?delete this.lastEnv[e]:this.lastEnv[e]=t;this.pendingEnvWrites.clear()}gateNativeCommand=async(e,t,n)=>{if(this.allowedCommands!==null&&!this.isCommandAllowed(e))return{stderr:`bash: ${e}: command not found\n`,exitCode:127};if(!this.commandGate.isTransparentGatingEnabled()||kp.has(e))return null;let r=await this.commandGate.gateCommandDispatch(e,t,n[Kp]);return r?{stderr:r.stderr,exitCode:r.exitCode}:null};wrapCommandForDispatch(e){let t=this.commandGate.wrapCommandForSudo(e),n=e.name===`timeout`?Um(t,this.progress):Gm(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(im),s=o?a.get(o):void 0;s&&(t.writeStdout=s);try{let r=await qm(()=>n.execute(e,t),t.signal);return i(t.env,r),r}finally{r()}}}}teeCommandOutput(e,t){let n=e?.get(im);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=Pm(this.bash.transform(e).ast,this.registryNames)}catch{t={totalSteps:null}}return this.scriptRun=new Im(t,this.progress,Fm(e)),this.scriptRun}endScriptRun(e){this.scriptRunsActive=Math.max(0,this.scriptRunsActive-1),e&&(e.end(),this.scriptRun===e&&(this.scriptRun=null))}isCommandAllowed(e){return this.allowedCommands===null||this.allowedCommands.has(kp.get(e)??e)}createGitCustomCommand(){let e=this.gitCommands;return C(`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 C(`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 C(`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 getWorkflowCommandNames(){return this.jshRegistry.getWorkflowCommandNames()}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{Ba as _,AB as a,Aa as b,Ns as c,Ss as d,bs as f,Ia as g,Go as h,EB as i,Es as l,es as m,VV as n,wB as o,ts as p,CV as r,sm as s,KV as t,Cs as u,za as v,zo as y};