sliccy 6.174.0 → 6.174.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 (142) hide show
  1. package/dist/ui/.vite/manifest.json +180 -180
  2. package/dist/ui/assets/{account-store-CDXeAYze.js → account-store-D0IR3DBZ.js} +1 -1
  3. package/dist/ui/assets/{account-store-DSPpsyER.js → account-store-DX0yNPWs.js} +1 -1
  4. package/dist/ui/assets/{adobe-B3aAAtCn.js → adobe-B_zFuuV1.js} +1 -1
  5. package/dist/ui/assets/{adobe-BXnbK_bW.js → adobe-CnBGtTkA.js} +1 -1
  6. package/dist/ui/assets/{agent-panels-DFPv3ZaM.js → agent-panels-DmwsKoM-.js} +1 -1
  7. package/dist/ui/assets/{almost-bash-shell-headless-DZEyLKy6.js → almost-bash-shell-headless-DRJgE95s.js} +431 -427
  8. package/dist/ui/assets/{apply-layout-BKBn5ifk.js → apply-layout-DiplElOW.js} +1 -1
  9. package/dist/ui/assets/{apps-CrxAbeAz.js → apps-C78b94Fy.js} +1 -1
  10. package/dist/ui/assets/{azure-openai-DvKSXXxQ.js → azure-openai-BPSjOaVl.js} +1 -1
  11. package/dist/ui/assets/{azure-openai-BgGWZh7o.js → azure-openai-CITfS84J.js} +1 -1
  12. package/dist/ui/assets/{backend-hostfs-CBKo87g2.js → backend-hostfs-BOqf2KHB.js} +1 -1
  13. package/dist/ui/assets/{cdp-BZ5hqgkH.js → cdp-gglY_XMX.js} +1 -1
  14. package/dist/ui/assets/{cerebras-B52Lw-RW.js → cerebras-d45jZ8v0.js} +1 -1
  15. package/dist/ui/assets/{cerebras-3lMC5DMW.js → cerebras-hcd3_W57.js} +1 -1
  16. package/dist/ui/assets/{composer-speech-CwdSXfak.js → composer-speech-ClR1rRFd.js} +1 -1
  17. package/dist/ui/assets/{connect-surface-xGyfavSn.js → connect-surface-evM6SZMV.js} +1 -1
  18. package/dist/ui/assets/{directed-approval-BdVTU42Z.js → directed-approval-D9E5vuJw.js} +1 -1
  19. package/dist/ui/assets/{ensure-speech-assets-BtFktw9h.js → ensure-speech-assets-DIH-5aW8.js} +1 -1
  20. package/dist/ui/assets/{frozen-archive-writer-Dkh2oIdl.js → frozen-archive-writer-Bz2URa-V.js} +1 -1
  21. package/dist/ui/assets/{fs-BjjYK9VY.js → fs-C2ijOZal.js} +1 -1
  22. package/dist/ui/assets/{fs-Cw_2bYAM.js → fs-CeaGS99b.js} +2 -2
  23. package/dist/ui/assets/{gelatiere-store-BPbm7LbJ.js → gelatiere-store-Abb7o_H9.js} +1 -1
  24. package/dist/ui/assets/{gelatiere-unit-B7kSBWVP.js → gelatiere-unit-BP04TH99.js} +1 -1
  25. package/dist/ui/assets/{github-Dp2gtGvR.js → github-2PN8gyEh.js} +1 -1
  26. package/dist/ui/assets/{github-ggCJDb9L.js → github-a7kxmWyP.js} +2 -2
  27. package/dist/ui/assets/{github-auth-B7p5l36m.js → github-auth-ClvLnsKk.js} +1 -1
  28. package/dist/ui/assets/{github-copilot-Cl8XllPb.js → github-copilot-Df855Bt5.js} +1 -1
  29. package/dist/ui/assets/{github-copilot-jhyDV7Lg.js → github-copilot-y9IC3aec.js} +1 -1
  30. package/dist/ui/assets/{github-install-DTmIqVHt.js → github-install-ES8l_Aiw.js} +1 -1
  31. package/dist/ui/assets/{github-zip-BhnRGzD6.js → github-zip-zELTjFGS.js} +1 -1
  32. package/dist/ui/assets/{hear-BvYOLsdb.js → hear-D60onkwE.js} +1 -1
  33. package/dist/ui/assets/{help-Byyp6Pcv.js → help-B-ws2y3j.js} +1 -1
  34. package/dist/ui/assets/{installer-CAPOWOiB.js → installer-DeySe9k4.js} +1 -1
  35. package/dist/ui/assets/{js-realm-worker-X2VIj-Na.js → js-realm-worker-ZMcm4E8F.js} +1 -1
  36. package/dist/ui/assets/{jsh-executor-DbpfbKzV.js → jsh-executor-DBGdDoKS.js} +2 -2
  37. package/dist/ui/assets/{kernel-worker-DVDNaQZZ.js → kernel-worker-BLB9CoLQ.js} +69 -69
  38. package/dist/ui/assets/{lick-ws-bridge-Y0GH_wJq.js → lick-ws-bridge-BbvofVr0.js} +1 -1
  39. package/dist/ui/assets/{lick-ws-bridge-CqmNMdGO.js → lick-ws-bridge-CDcvHLmd.js} +1 -1
  40. package/dist/ui/assets/{live-session-snapshot-5FWkefDU.js → live-session-snapshot-DBxXsZme.js} +1 -1
  41. package/dist/ui/assets/{local-llm-CED8ADMA.js → local-llm-B0o4QSub.js} +1 -1
  42. package/dist/ui/assets/{local-llm-B6veJ_ef.js → local-llm-_wo-fuir.js} +1 -1
  43. package/dist/ui/assets/{main-2iTv-J5c.js → main-CZtas7Eg.js} +3 -3
  44. package/dist/ui/assets/{main-cherry-C7l1nuXL.js → main-cherry-Cy01613u.js} +1 -1
  45. package/dist/ui/assets/{memory-curation-seam-DQ5obo1q.js → memory-curation-seam-BptU7wRe.js} +1 -1
  46. package/dist/ui/assets/{memory-health-DWog3bzV.js → memory-health-CoSpSsYN.js} +1 -1
  47. package/dist/ui/assets/memory-v2-flag-BEEqN2J4.js +1 -0
  48. package/dist/ui/assets/{memory-write-execute-emoQbf9q.js → memory-write-execute-DwtMxeO3.js} +1 -1
  49. package/dist/ui/assets/{mount-CaX4-s5m.js → mount-DdoR7RBc.js} +1 -1
  50. package/dist/ui/assets/{mount-C948i4KJ.js → mount-TNgXnOHm.js} +3 -3
  51. package/dist/ui/assets/{new-session-BZEGrhPF.js → new-session-DrcRZd5X.js} +2 -2
  52. package/dist/ui/assets/{oauth-bootstrap-wCbMfvXb.js → oauth-bootstrap-BV0DARHX.js} +2 -2
  53. package/dist/ui/assets/{onboarding-orchestrator-B30-qpNm.js → onboarding-orchestrator-D0pD3BHw.js} +1 -1
  54. package/dist/ui/assets/{openai-codex-BkPZlmwD.js → openai-codex-BVef8_iF.js} +1 -1
  55. package/dist/ui/assets/{openai-codex-DUSNBnHV.js → openai-codex-DUynQau4.js} +1 -1
  56. package/dist/ui/assets/{openrouter-WvoH761e.js → openrouter-DX_3Ajy_.js} +1 -1
  57. package/dist/ui/assets/{openrouter-BqJT2iaF.js → openrouter-H_me8QZc.js} +1 -1
  58. package/dist/ui/assets/{openrouter-free-fFdXDN5u.js → openrouter-free-0KrZ4hly.js} +1 -1
  59. package/dist/ui/assets/{openrouter-free-FwYHT08L.js → openrouter-free-NtSM64Kz.js} +1 -1
  60. package/dist/ui/assets/{openrouter-oauth-BXAfL40-.js → openrouter-oauth-ByxtJjBF.js} +1 -1
  61. package/dist/ui/assets/{openrouter-oauth-BVogmvFn.js → openrouter-oauth-DtnUq1tt.js} +1 -1
  62. package/dist/ui/assets/{opfs-mount-mwDa35fW.js → opfs-mount-3kLU65I9.js} +1 -1
  63. package/dist/ui/assets/{panel-rpc-handlers-1PDaTKzV.js → panel-rpc-handlers-BOFmXM0t.js} +2 -2
  64. package/dist/ui/assets/{panelize-shell-B05YN5rd.js → panelize-shell-CxpvUI6v.js} +1 -1
  65. package/dist/ui/assets/{pi-edit-execution-DW6yaKJo.js → pi-edit-execution-D578CFq_.js} +1 -1
  66. package/dist/ui/assets/{provider-CP2FrBD1.js → provider-CXhkDb-S.js} +1 -1
  67. package/dist/ui/assets/{provider-CyUQmCNr.js → provider-DFA1E6x6.js} +2 -2
  68. package/dist/ui/assets/{provider-settings-eD9-CdTW.js → provider-settings-BSSYKJ7E.js} +1 -1
  69. package/dist/ui/assets/provider-store-access-BT3gJZ-O.js +1 -0
  70. package/dist/ui/assets/provider-store-access-DFf3jBC2.js +1 -0
  71. package/dist/ui/assets/{providers-CRB366Q3.js → providers-B50acS9Z.js} +2 -2
  72. package/dist/ui/assets/{providers-XoHqlC-q.js → providers-C0Qe0odK.js} +1 -1
  73. package/dist/ui/assets/{quick-llm-D8yJ5aCy.js → quick-llm-CwG0ZBXv.js} +1 -1
  74. package/dist/ui/assets/{realm-inprocess-vrLSOBJx.js → realm-inprocess-BPzQPLgT.js} +1 -1
  75. package/dist/ui/assets/{recovery-screen-BNmxwA3-.js → recovery-screen-Cwq_zuqO.js} +1 -1
  76. package/dist/ui/assets/{remote-terminal-view-CyWEIsvq.js → remote-terminal-view-Dxog9MnQ.js} +1 -1
  77. package/dist/ui/assets/{restore-CL9_UXh6.js → restore-AYeDtL9R.js} +1 -1
  78. package/dist/ui/assets/{run-CMIBcXTS.js → run-6TnylQzV.js} +1 -1
  79. package/dist/ui/assets/{run-BFBGwUPV.js → run-BHPq7q_4.js} +2 -2
  80. package/dist/ui/assets/{run-AEc54ckO.js → run-BdKGAVS2.js} +2 -2
  81. package/dist/ui/assets/{run-C7DSv_4z.js → run-BnLaTZQJ.js} +2 -2
  82. package/dist/ui/assets/{run-BDv7ZbKM.js → run-C278z8CG.js} +1 -1
  83. package/dist/ui/assets/{run-BzjnYE1_.js → run-DavG4eNi.js} +2 -2
  84. package/dist/ui/assets/{session-command-memory-CkGlqxMy.js → session-command-memory-BKQM-Ttv.js} +2 -2
  85. package/dist/ui/assets/{session-jsonl-BLFP_6Ii.js → session-jsonl-8uIRFe3D.js} +1 -1
  86. package/dist/ui/assets/{session-jsonl-BF-5_KrL.js → session-jsonl-DNQHzzvJ.js} +1 -1
  87. package/dist/ui/assets/{session-search-index-xg5DvCwK.js → session-search-index-BKocgaxp.js} +1 -1
  88. package/dist/ui/assets/{setup-feature-flags-remote-Buvq9-IJ.js → setup-feature-flags-remote-BOk325mJ.js} +1 -1
  89. package/dist/ui/assets/{signed-fetch-BVSCXSzZ.js → signed-fetch-C2f16RX9.js} +1 -1
  90. package/dist/ui/assets/{silent-renew-backoff-DW5hzrBT.js → silent-renew-backoff-BTWT1m1s.js} +1 -1
  91. package/dist/ui/assets/slicc-version-Cf8AZtzj.js +1 -0
  92. package/dist/ui/assets/{snapshot-Br4Fps5z.js → snapshot-B1bXrciz.js} +1 -1
  93. package/dist/ui/assets/{snapshot-features-B_aMougo.js → snapshot-features-DBC3Pni8.js} +1 -1
  94. package/dist/ui/assets/{soundscape-jhHin1Xo.js → soundscape-CPUTrLvM.js} +1 -1
  95. package/dist/ui/assets/{speak-tgqwR-dQ.js → speak-CAui9DIa.js} +1 -1
  96. package/dist/ui/assets/{sprinkle-manager-xLrk-JV0.js → sprinkle-manager-RIIGediA.js} +1 -1
  97. package/dist/ui/assets/{sprinkle-renderer-CU17tlEP.js → sprinkle-renderer-48UHbtlh.js} +1 -1
  98. package/dist/ui/assets/{state-DK8S4qLC.js → state-BUW3I2MY.js} +1 -1
  99. package/dist/ui/assets/{store-BuVY3ZgP.js → store-CKVmFL1z.js} +1 -1
  100. package/dist/ui/assets/{store-BaPEf7w5.js → store-DUXsSwvf.js} +1 -1
  101. package/dist/ui/assets/{sudo-D0k_0Iiy.js → sudo-D_E8kq2T.js} +1 -1
  102. package/dist/ui/assets/{supervisor-DP0ZHn5z.js → supervisor-76Srusib.js} +1 -1
  103. package/dist/ui/assets/{sync-dialog-D3862EzR.js → sync-dialog-IN69_zfY.js} +1 -1
  104. package/dist/ui/assets/{transformers-env-IZuYOmBX.js → transformers-env-CvOK1s4z.js} +1 -1
  105. package/dist/ui/assets/{tray-leader-azxIi7rJ.js → tray-leader-C5YEYQ9j.js} +1 -1
  106. package/dist/ui/assets/{tray-leave-runtime-CoDtxQV7.js → tray-leave-runtime-DZWAGq8Y.js} +1 -1
  107. package/dist/ui/assets/{tray-sidecar-C0-hqQur.js → tray-sidecar-CtiTEKYE.js} +1 -1
  108. package/dist/ui/assets/{upgrade-detection-CNAzDDet.js → upgrade-detection-f93wt9_W.js} +1 -1
  109. package/dist/ui/assets/{upskill-lick-skip-DAgLwgHG.js → upskill-lick-skip-DGBt27D0.js} +1 -1
  110. package/dist/ui/assets/{voice-reply-OZtT_11b.js → voice-reply-Dg0Yjv-1.js} +1 -1
  111. package/dist/ui/assets/{wc-attach-CQRK5HfC.js → wc-attach-C2bt4-mu.js} +2 -2
  112. package/dist/ui/assets/{wc-browser-U_xxltEH.js → wc-browser-BKB-xK75.js} +1 -1
  113. package/dist/ui/assets/{wc-computers-UgD3jpnJ.js → wc-computers-B9mepLnP.js} +1 -1
  114. package/dist/ui/assets/{wc-detached-CRhnTzGv.js → wc-detached-BIvm5aUp.js} +1 -1
  115. package/dist/ui/assets/{wc-extension-BPNoDlrO.js → wc-extension-DFy4vXEU.js} +2 -2
  116. package/dist/ui/assets/{wc-follower-BMjuwmaH.js → wc-follower-BBRYRzNL.js} +3 -3
  117. package/dist/ui/assets/{wc-follower-oauth-CA_WM7zP.js → wc-follower-oauth-Bn49kKKi.js} +1 -1
  118. package/dist/ui/assets/{wc-gelatiere-DUTgXME6.js → wc-gelatiere-DfCR8zr5.js} +1 -1
  119. package/dist/ui/assets/{wc-live-BAQ7D2zb.js → wc-live-BU8-Sb13.js} +5 -5
  120. package/dist/ui/assets/{wc-nav-CCMyp5Zb.js → wc-nav-B7Gg1D5E.js} +2 -2
  121. package/dist/ui/assets/{wc-onboarding-DO-CCOxL.js → wc-onboarding-DhKs5mrd.js} +2 -2
  122. package/dist/ui/assets/{wc-permissions-CfY4qZeE.js → wc-permissions-hJwfDhNV.js} +2 -2
  123. package/dist/ui/assets/{wc-placeholder-DBYMq9N6.js → wc-placeholder-JMHmbTso.js} +3 -3
  124. package/dist/ui/assets/{wc-secret-request-BPaxBjDh.js → wc-secret-request-tojue2Mz.js} +1 -1
  125. package/dist/ui/assets/{wc-settings-BEPacGf0.js → wc-settings-ZwiZwt5O.js} +3 -3
  126. package/dist/ui/assets/{wc-shell-C5v9tSwt.js → wc-shell-LElrSlxV.js} +3 -3
  127. package/dist/ui/assets/{wc-shortcut-config-BfWjijii.js → wc-shortcut-config-9qCIKtQ1.js} +1 -1
  128. package/dist/ui/assets/{wc-sprinkles-CilQw7jr.js → wc-sprinkles-mtatcDzE.js} +2 -2
  129. package/dist/ui/assets/{wc-transcript-export-BwNsBIr6.js → wc-transcript-export-y8-OqMt0.js} +2 -2
  130. package/dist/ui/assets/{wc-tray-BW6eaWfx.js → wc-tray-DwQ0H-yh.js} +4 -4
  131. package/dist/ui/assets/welcome-detection-D_RjveHL.js +1 -0
  132. package/dist/ui/assets/{whisper-session-BXq1fTR6.js → whisper-session-D5F4GKC9.js} +2 -2
  133. package/dist/ui/assets/{xai-grok-CskrH1tU.js → xai-grok-Cah1pfKK.js} +1 -1
  134. package/dist/ui/assets/{xai-grok-Cq3J9Wgd.js → xai-grok-DOaUmzYU.js} +1 -1
  135. package/dist/ui/index.html +3 -3
  136. package/dist/ui/packages/webapp/index.html +3 -3
  137. package/package.json +1 -1
  138. package/dist/ui/assets/memory-v2-flag-bEVVkrvI.js +0 -1
  139. package/dist/ui/assets/provider-store-access-HGzRhSvy.js +0 -1
  140. package/dist/ui/assets/provider-store-access-VH16-Et2.js +0 -1
  141. package/dist/ui/assets/slicc-version-Doo30hXa.js +0 -1
  142. package/dist/ui/assets/welcome-detection-CQPo-8Su.js +0 -1
@@ -1,4 +1,4 @@
1
- import{t as e}from"./logger-LESFN7Hj.js";import{a as t,i as n,n as r,r as i,t as a}from"./snapshot-Br4Fps5z.js";import{n as o,r as s}from"./panel-rpc-DVS1uJpt.js";import{t as c}from"./providers-XoHqlC-q.js";import{r as l,t as u}from"./base64-BPBW1Gzr.js";import{n as d}from"./bridge-protocol-31SWTdS5.js";import{a as f,n as p,o as m,s as h,t as g}from"./handoff-link-B3It6xQY.js";import{d as _,f as v,i as ee,u as te}from"./account-store-CDXeAYze.js";import{a as ne,l as re,n as ie,o as ae}from"./proxied-fetch-D6EBne5P.js";import{t as oe}from"./runtime-env-DadgceZk.js";import{t as se}from"./slugify-BYJ6QVAt.js";import{n as ce,t as le}from"./host-command-5ESITqj8.js";import{r as ue}from"./binary-cache-bSOhqXB1.js";import{i as de,n as fe,r as pe}from"./fetch-body-CuwTaJC_.js";import{o as me,t as he}from"./api-endpoint-3qEcn7BY.js";import{t as ge}from"./compat-uEPf6-XW.js";import{a as _e,i as ve}from"./core-NCt3m1n7.js";import{n as ye,t as be}from"./mime-types-D7IV6i7k.js";import{t as xe}from"./secrets-bridge-client-nOf1jubu.js";import{a as Se,i as Ce,n as we,r as Te}from"./tool-ui-DRnUkp2g.js";import{a as Ee,i as De,n as y,t as b}from"./path-utils-DNJG-zQf.js";import{n as Oe,r as ke,t as Ae}from"./merge-file-core-VJlzucJY.js";import{r as je}from"./workspace-mode-D0kUKBVS.js";import{n as Me,t as Ne}from"./thinking-level-5x0UAu9N.js";import{n as Pe,t as Fe}from"./types-D8gIX-W-.js";import{i as Ie}from"./mount-index-CQfmUPuZ.js";import{a as Le,i as Re,n as ze,o as Be,s as Ve,t as He}from"./signed-fetch-BVSCXSzZ.js";import{o as Ue}from"./mount-table-store-DrF_Ifaz.js";import{t as We}from"./remote-cache-BE5T1-53.js";import{n as Ge}from"./fs-BjjYK9VY.js";import{a as Ke}from"./tray-leader-status-CpkFr6n7.js";import{n as qe,t as Je}from"./slicc-version-Doo30hXa.js";import{a as Ye,i as Xe,o as Ze,r as x,t as Qe}from"./browser-DG5MjvHF.js";import{t as S}from"./subcommand-flags-BZi7j78Q.js";import{n as $e,r as et,t as C}from"./subcommand-help-CgO7wRS5.js";import{n as tt}from"./cost-command-DZQVtgRS.js";import{d as nt,g as rt,i as it,n as at,o as ot}from"./sudoers-BdBYQPUn.js";import{n as st,r as ct,t as lt}from"./approval-timeout-BQ29Z0gf.js";import{a as ut,c as dt,i as ft,l as pt,n as mt,o as ht,r as gt,t as _t}from"./types-BfwydWt7.js";import{n as w,t as vt}from"./boundary-Cp9c_bPu.js";import"./rest-paths-Dia19u9P.js";import{t as yt}from"./html-B_Hg2WOy.js";import{n as bt}from"./llm-session-id-BZyXP_j2.js";import{t as xt}from"./buffer-polyfill-BccMjOKj.js";import{i as St,o as Ct}from"./browser-DuyhpHbR.js";import{_ as wt,b as Tt,c as Et,d as Dt,f as Ot,g as kt,h as At,l as jt,m as Mt,n as Nt,o as Pt,p as Ft,s as It,t as Lt,u as Rt,v as zt,x as Bt,y as Vt}from"./jsh-executor-DbpfbKzV.js";import{t as Ht}from"./buffer-B5d1xHaH.js";import{A as Ut,B as T,C as Wt,D as E,E as Gt,F as Kt,G as qt,H as D,I as O,J as Jt,K as Yt,L as Xt,M as Zt,N as Qt,O as $t,P as en,R as tn,S as nn,T as rn,U as an,V as on,W as sn,Y as cn,_ as ln,a as un,b as dn,c as fn,d as pn,f as mn,g as hn,h as gn,i as _n,j as vn,k as yn,l as bn,m as xn,n as Sn,o as Cn,p as k,q as wn,r as Tn,s as En,t as Dn,u as On,v as kn,w as An,x as jn,y as Mn,z as Nn}from"./isomorphic-git-r9mnHMnp.js";import"./global-db-DJXlpNui.js";import{S as Pn,_ as Fn,a as In,b as Ln,c as Rn,d as zn,f as Bn,g as Vn,h as Hn,i as Un,l as Wn,n as Gn,o as Kn,p as qn,r as Jn,s as Yn,t as Xn,u as Zn,v as A,x as j,y as Qn}from"./state-DK8S4qLC.js";import{a as $n,i as er,r as tr,t as nr}from"./git-config-Bdgu8kD2.js";import{a as rr,n as ir,o as ar,r as or,s as sr}from"./jsh-discovery-CnvNKojr.js";import{A as cr,C as lr,a as ur,b as dr,c as fr,d as pr,f as mr,h as hr,i as gr,j as _r,l as vr,m as yr,n as br,o as xr,p as Sr,r as Cr,s as wr,t as M,u as Tr,v as Er,y as Dr}from"./shared-C_68vn79.js";import{B as Or,F as kr,G as Ar,H as jr,J as Mr,K as Nr,L as Pr,N as Fr,P as Ir,U as Lr,V as Rr,W as zr,X as Br,Y as Vr,Z as Hr,q as Ur,z as Wr}from"./sync-sab-wire-CC30v4TL.js";import{n as Gr,t as Kr}from"./esbuild-wasm-DS_YG2EY.js";import{n as qr}from"./wasm-compiler-Ct7QZURL.js";import{a as Jr,o as Yr,s as Xr,t as Zr}from"./usb-device-registry-DFzxaOky.js";import{a as N,i as Qr,r as $r,t as ei}from"./just-bash-compat-B-SPHuh_.js";import{i as ti,r as ni,t as ri}from"./script-catalog-DZtOMxvi.js";import{a as ii,c as ai,o as oi,s as si,t as ci}from"./types-Dzr0qYl3.js";import{a as li,c as ui,d as di,f as fi,n as pi,r as mi,u as hi}from"./github-zip-BhnRGzD6.js";import{i as gi,t as _i}from"./github-auth-B7p5l36m.js";import{a as vi,i as yi,o as bi,r as xi,t as Si}from"./provenance-DdmsQ3Nr.js";import{a as Ci,c as wi,i as Ti,n as Ei,o as Di,r as Oi,s as ki}from"./github-install-DTmIqVHt.js";import{n as Ai,t as ji}from"./magick-wasm-DCNZhAyd.js";import{i as Mi,n as Ni,r as Pi,t as Fi}from"./pdf-raster-BWk6ezTX.js";import{n as Ii}from"./lick-target-env-8JxfVcIV.js";import{t as Li}from"./tmpdir-env-ate4iNcK.js";import{a as Ri,c as zi,d as Bi,f as Vi,i as Hi,l as Ui,n as Wi,o as Gi,p as Ki,r as qi,s as Ji,t as Yi,u as Xi}from"./installer-CAPOWOiB.js";import{t as Zi}from"./ffmpeg-wasm-B77gfnB_.js";import{t as Qi}from"./local-llm-B6veJ_ef.js";import{t as $i}from"./client-GY8xUpw7.js";import{t as ea}from"./redirect-uri-C-c6wFfz.js";import{a as ta,c as na,i as ra,o as ia,r as aa,s as oa}from"./v86-vm-DCm7zA2r.js";import{n as sa,r as ca}from"./lick-urls-CgPiVwD-.js";let la=null;function ua(e){la=e!==null&&Number.isFinite(e)&&e>0?e:null}function da(){if(la!==null)return la;let e=globalThis.performance?.timeOrigin;return typeof e==`number`&&Number.isFinite(e)&&e>0?e:Date.now()}new URL(d).hostname;const fa=/^([0-9a-f]{32})--(?:[0-9a-f]{8}-)?([0-9a-f]+)$/i;function pa(e){let t;try{t=new URL(e.includes(`://`)?e:`https://${e}`).hostname}catch{return null}let n=fa.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 ma(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 ha(e,t){return e.some(e=>ma(e,t))}const ga=`slicc-transcript`,_a=[`canonical-agent-history-unavailable`,`tool-data-may-be-truncated`,`model-metadata-unavailable`,`scoop-history-unavailable`,`attachment-file-missing`,`attachment-association-unavailable`,`complete-snapshot-unavailable`],va=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 ya(e){return va.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 xa=new Set(_a),Sa=/^[0-9a-fA-F]{64}$/,Ca=/^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}/;function P(e){return typeof e==`object`&&!!e&&!Array.isArray(e)}function wa(e){return typeof e==`string`&&Sa.test(e)}function Ta(e){return Ca.test(e)&&Number.isFinite(Date.parse(e))}function Ea(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 Da(e,t,n){return typeof e!=`string`||!t.includes(e)?{ok:!1,error:Ea(n,t)}:{ok:!0}}function Oa(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 ka(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 Aa(e,t){if(!P(e))return{ok:!1,error:`${t} must be a non-null object`};let n=Da(e.type,[`text`,`tool-call`,`attachment-ref`],`${t}.type`);return n.ok?ka(e,t):n}function ja(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 Ma(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 Na(e,t){let n=ja(e,t);if(!n.ok)return n;let r=e.cost;return P(r)?Ma(r,`${t}.cost`):{ok:!1,error:`${t}.cost must be a non-null object`}}function Pa(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`?Ta(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 Fa(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 Ia(e,t){let n=e.usage;return n===void 0?{ok:!0}:P(n)?Na(n,`${t}.usage`):{ok:!1,error:`${t}.usage must be a non-null object`}}function La(e,t){if(!P(e))return{ok:!1,error:`${t} must be a non-null object`};let n=Da(e.role,[`user`,`assistant`,`tool-result`],`${t}.role`);if(!n.ok)return n;if(e.role===`tool-result`){let n=Fa(e,t);if(!n.ok)return n}let r=Pa(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=Oa(i,Aa,`${t}.content`);return a.ok?Ia(e,t):a}function Ra(e,t){if(!P(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=Da(e.kind,[`cone`,`scoop`],`${t}.kind`);if(!n.ok)return n;let r=e.messages;return Array.isArray(r)?Oa(r,La,`${t}.messages`):{ok:!1,error:`${t}.messages must be an array`}}function za(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 Ba(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 Va=[`attachment-file-missing`,`attachment-association-unavailable`];function Ha(e,t){let n=e.path,r=e.sha256,i=e.byteLength;return n===``?r===``?i===0?Da(e.missingReason,Va,`${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 Ua(e,t){return e.present?Ba(e,t):Ha(e,t)}function Wa(e,t){if(!P(e))return{ok:!1,error:`${t} must be a non-null object`};let n=za(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=Da(e.handling,[`text-redacted`,`binary-unchanged`],`${t}.handling`);return r.ok?Ua(e,t):r}function Ga(e,t){let n=Da(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 Ka(e,t){if(!P(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=Da(e.detector,[`known-secret`,`credential-pattern`,`pre-obfuscated`],`${t}.detector`);if(!n.ok)return n;let r=e.target;return P(r)?Ga(r,`${t}.target`):{ok:!1,error:`${t}.target must be a non-null object`}}function qa(e,t){return P(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 Ja(e,t){return typeof e!=`string`||!xa.has(e)?{ok:!1,error:`${t} is not a valid completeness reason`}:{ok:!0}}function Ya(e){if(!P(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 P(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 Xa(e){if(!P(e))return{ok:!1,error:`session.completeness must be a non-null object`};let t=Da(e.status,[`complete`,`partial`],`session.completeness.status`);return t.ok?Array.isArray(e.missing)?Oa(e.missing,Ja,`session.completeness.missing`):{ok:!1,error:`session.completeness.missing must be an array`}:t}function Za(e){if(!P(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=Da(e.state,[`active`,`frozen`],`session.state`);return t.ok?Xa(e.completeness):t}function Qa(e){if(!P(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(!P(e.redactionCounts))return{ok:!1,error:`privacy.redactionCounts must be a non-null object`};let n=e.redactions;return Array.isArray(n)?Oa(n,Ka,`privacy.redactions`):{ok:!1,error:`privacy.redactions must be an array`}}function $a(e){let t=e.conversations;if(!Array.isArray(t))return{ok:!1,error:`conversations must be an array`};let n=Oa(t,Ra,`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=Oa(r,qa,`delegations`);if(!i.ok)return i;let a=e.attachments;return Array.isArray(a)?Oa(a,Wa,`attachments`):{ok:!1,error:`attachments must be an array`}}function eo(e){let t=new Set,n=new Set;for(let r of e){if(!P(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(!(!P(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 to(e){for(let t of e){if(!P(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(!P(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 no(e){let t=[];for(let n of e){if(!P(n))continue;let e=n.content;if(Array.isArray(e))for(let n of e)P(n)&&n.type===`tool-call`&&typeof n.id==`string`&&t.push(n.id)}return t}function ro(e){let t=new Set;for(let n of e){if(!P(n))continue;let e=n.messages;if(Array.isArray(e))for(let n of no(e))t.add(n)}return t}function io(e,t){for(let n of e){if(!P(n))continue;let e=n.messages;if(Array.isArray(e))for(let n of e){if(!P(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 ao(e){return io(e,ro(e))}function oo(e,t){for(let n of e){if(!P(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 so(e,t){for(let n of e){if(!P(n))continue;let e=n.messages;if(Array.isArray(e))for(let n of e){if(!P(n))continue;let e=n.content;if(!Array.isArray(e))continue;let r=oo(e,t);if(!r.ok)return r}}return{ok:!0}}function co(e,t){let n=new Set;for(let e of t)P(e)&&typeof e.id==`string`&&n.add(e.id);return so(e,n)}function lo(e){let t=new Map;for(let n of e){if(!P(n)||typeof n.id!=`string`)continue;let e=new Set,r=n.messages;if(Array.isArray(r))for(let t of r)P(t)&&typeof t.id==`string`&&e.add(t.id);t.set(n.id,e)}return t}function uo(e,t){let n=lo(t);for(let t=0;t<e.length;t++){let r=e[t];if(!P(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 fo(e){let t=new Map;for(let n of e){if(!P(n)||typeof n.id!=`string`)continue;let e=Array.isArray(n.messages)?n.messages:[];t.set(n.id,new Set(no(e)))}return t}function po(e,t,n){for(let r=0;r<e.length;r++){let i=e[r];if(!P(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 mo(e,t){let n=new Set;for(let e of t)P(e)&&typeof e.id==`string`&&n.add(e.id);return po(e,n,fo(t))}function ho(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 go(e,t){let n=new Set;for(let e of t)P(e)&&typeof e.id==`string`&&n.add(e.id);for(let t=0;t<e.length;t++){let r=e[t];if(!P(r))continue;let i=r.target;if(!P(i))continue;let a=ho(i,n,`privacy.redactions[${t}].target`);if(!a.ok)return a}return{ok:!0}}function _o(e){let t=e.conversations,n=e.attachments,r=e.delegations,i=e.privacy,a=Array.isArray(i?.redactions)?i.redactions:[],o=eo(t);if(!o.ok)return o;let s=to(t);if(!s.ok)return s;let c=ao(t);if(!c.ok)return c;let l=co(t,n);if(!l.ok)return l;let u=uo(n,t);if(!u.ok)return u;let d=mo(r,t);return d.ok?go(a,n):d}function vo(e){let t=$a(e);return t.ok?_o(e):t}function yo(e){if(!P(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=Ya(e.export);if(!t.ok)return t;let n=Za(e.session);if(!n.ok)return n;let r=Qa(e.privacy);return r.ok?vo(e):r}async function bo(e,t,n){let r=await n({method:`GET`,path:`/${e}/sites/${t}/config.json`,origin:Be});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:xo(a),sourceUrl:a}}function xo(e){if(!e)return`da`;let t;try{t=new URL(e).host}catch{return`da`}return t===`api.aem.live`?`aem`:`da`}const So=`slicc-sprinkle-routes`;function Co(){try{let e=localStorage.getItem(So);return e?JSON.parse(e):{}}catch{return{}}}function wo(e){try{localStorage.setItem(So,JSON.stringify(e))}catch{}}function To(e){return Co()[e]}function Eo(e,t){let n=Co();n[e]=t,wo(n)}function Do(e){let t=Co();delete t[e],wo(t)}function Oo(){return Co()}function ko(e,t,n){return dt(t,n,`${e} adapter does not implement ${t}.${n}`)}function Ao(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(ko(e,t,n))]});return{...Object.fromEntries(a),allowlist:i,supports:e=>i.includes(e)}}function jo(e){let{adapter:t,pageGestures:n}=e,r=n??{};return{adapter:t,browser:Ao(t,`browser`,mt,e.browser),network:Ao(t,`network`,ut,e.network),secrets:Ao(t,`secrets`,ht,e.secrets),devices:Ao(t,`devices`,gt,{usbRequest:r.usbRequest,serialRequest:r.serialRequest,hidRequest:r.hidRequest,...e.devices}),mounts:Ao(t,`mounts`,ft,{pickDirectory:r.pickDirectory,...e.mounts}),approvals:Ao(t,`approvals`,_t,e.approvals)}}function Mo(e={}){return jo({adapter:`connect`,pageGestures:e.pageGestures})}function No(e){let t=vt(()=>import(`./extension-ops-2LnlLuXD.js`).then(t=>t.createExtensionOps(e)));return jo({adapter:e.adapter,pageGestures:e.pageGestures,network:{crossOriginFetch:e=>w(`network`,`crossOriginFetch`,async()=>(await t()).crossOriginFetch(e))},secrets:{listMaskedEnv:()=>w(`secrets`,`listMaskedEnv`,async()=>(await t()).secrets.listMaskedEnv()),getMasked:e=>w(`secrets`,`getMasked`,async()=>(await t()).secrets.getMasked(e)),set:e=>w(`secrets`,`set`,async()=>(await t()).secrets.set(e)),delete:e=>w(`secrets`,`delete`,async()=>(await t()).secrets.delete(e))},mounts:{signRequest:e=>w(`mounts`,`signRequest`,async()=>(await t()).signRequest(e))},approvals:{request:e=>w(`approvals`,`request`,async()=>(await t()).requestApproval(e))}})}function Po(e={}){let t=vt(()=>import(`./rest-ops-DBG2rYMP.js`).then(t=>t.createRestOps(e)),e.controlTimeoutMs??1e4);return jo({adapter:`node-rest`,pageGestures:e.pageGestures,network:{localNodeServer:()=>Promise.resolve({ok:!0,value:{available:!0}}),crossOriginFetch:e=>w(`network`,`crossOriginFetch`,async()=>(await t()).crossOriginFetch(e))},secrets:{listMaskedEnv:()=>w(`secrets`,`listMaskedEnv`,async()=>(await t()).secrets.listMaskedEnv()),getMasked:e=>w(`secrets`,`getMasked`,async()=>(await t()).secrets.getMasked(e)),set:e=>w(`secrets`,`set`,async()=>(await t()).secrets.set(e)),delete:e=>w(`secrets`,`delete`,async()=>(await t()).secrets.delete(e))},mounts:{signRequest:e=>w(`mounts`,`signRequest`,async()=>(await t()).signRequest(e))},approvals:{request:e=>w(`approvals`,`request`,async()=>(await t()).requestApproval(e))}})}function Fo(e,t={}){let{pageGestures:n}=t;switch(e){case`node-rest`:return Po({pageGestures:n});case`extension-direct`:case`extension-delegate`:return No({adapter:e,pageGestures:n});case`connect`:return Mo({pageGestures:n})}}const Io=e(`quick-llm`);async function Lo(e){let t=ee();if(!t)return Io.debug(`No API key for active provider — skipping`),null;let n=v(),r=_(),i;if(i=e.modelId?Vo(n,e.modelId)??Vo(n,r):Ro(n,r),!i)return Io.debug(`No model available for provider`,{providerId:n}),null;let a={role:`user`,content:e.prompt,timestamp:Date.now()},o={};i.provider===`adobe`&&(o[`X-Session-Id`]=Ho());try{let n=(await ge(i,{systemPrompt:e.system,messages:[a]},{apiKey:t,maxTokens:e.maxTokens??60,temperature:e.temperature??.3,signal:e.signal,headers:Object.keys(o).length>0?o:void 0})).content.filter(e=>e.type===`text`).map(e=>e.text).join(``).trim();return n.length>0?n:null}catch(e){return Io.debug(`Quick label call failed`,{error:e instanceof Error?e.message:String(e)}),null}}function Ro(e,t){let n=te(e);if(n.length===0)return;let r=n.find(e=>e.id===t)??n[0],i=Bo(r.id),a=n.filter(e=>zo(e,r,i));return a.length===0?r:(a.sort((e,t)=>(e.cost?.input??0)-(t.cost?.input??0)),a[0])}function zo(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 Bo(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 Vo(e,t){return te(e).find(e=>e.id===t)}function Ho(){return bt(`ui-quick-llm`)}const Uo=e(`sudo-suggest`),Wo=[`You generalize a single shell command into a minimal glob pattern for an`,`allow-list rule. Output ONLY the pattern on one line — no prose, no quotes,`,`no backticks. Keep the leading command/sub-command verbatim and replace only`,`the volatile tail (args, paths, refs) with a single trailing "*".`,`Examples:`,` git push origin main -> git push*`,` rm -rf build/cache -> rm -rf*`,` npm install left-pad -> npm install*`].join(`
1
+ import{t as e}from"./logger-LESFN7Hj.js";import{a as t,i as n,n as r,r as i,t as a}from"./snapshot-B1bXrciz.js";import{n as o,r as s}from"./panel-rpc-DVS1uJpt.js";import{t as c}from"./providers-C0Qe0odK.js";import{r as l,t as u}from"./base64-BPBW1Gzr.js";import{n as d}from"./bridge-protocol-31SWTdS5.js";import{a as f,n as p,o as m,s as h,t as g}from"./handoff-link-B3It6xQY.js";import{d as _,f as v,i as ee,u as te}from"./account-store-D0IR3DBZ.js";import{a as ne,l as re,n as ie,o as ae}from"./proxied-fetch-D6EBne5P.js";import{t as oe}from"./runtime-env-DadgceZk.js";import{t as se}from"./slugify-BYJ6QVAt.js";import{n as ce,t as le}from"./host-command-5ESITqj8.js";import{r as ue}from"./binary-cache-bSOhqXB1.js";import{i as de,n as fe,r as pe}from"./fetch-body-CuwTaJC_.js";import{o as me,t as he}from"./api-endpoint-3qEcn7BY.js";import{t as ge}from"./compat-uEPf6-XW.js";import{a as _e,i as ve}from"./core-NCt3m1n7.js";import{n as ye,t as be}from"./mime-types-D7IV6i7k.js";import{t as xe}from"./secrets-bridge-client-nOf1jubu.js";import{a as Se,i as Ce,n as we,r as Te}from"./tool-ui-DRnUkp2g.js";import{a as Ee,i as De,n as y,t as b}from"./path-utils-DNJG-zQf.js";import{n as Oe,r as ke,t as Ae}from"./merge-file-core-VJlzucJY.js";import{r as je}from"./workspace-mode-D0kUKBVS.js";import{n as Me,t as Ne}from"./thinking-level-5x0UAu9N.js";import{n as Pe,t as Fe}from"./types-D8gIX-W-.js";import{i as Ie}from"./mount-index-CQfmUPuZ.js";import{a as Le,i as Re,n as ze,o as Be,s as Ve,t as He}from"./signed-fetch-C2f16RX9.js";import{o as Ue}from"./mount-table-store-DrF_Ifaz.js";import{t as We}from"./remote-cache-BE5T1-53.js";import{n as Ge}from"./fs-C2ijOZal.js";import{a as Ke}from"./tray-leader-status-CpkFr6n7.js";import{n as qe,t as Je}from"./slicc-version-Cf8AZtzj.js";import{a as Ye,i as Xe,o as Ze,r as x,t as Qe}from"./browser-DG5MjvHF.js";import{t as S}from"./subcommand-flags-BZi7j78Q.js";import{n as $e,r as et,t as C}from"./subcommand-help-CgO7wRS5.js";import{n as tt}from"./cost-command-DZQVtgRS.js";import{d as nt,g as rt,i as it,n as at,o as ot}from"./sudoers-BdBYQPUn.js";import{n as st,r as ct,t as lt}from"./approval-timeout-BQ29Z0gf.js";import{a as ut,c as dt,i as ft,l as pt,n as mt,o as ht,r as gt,t as _t}from"./types-BfwydWt7.js";import{n as w,t as vt}from"./boundary-Cp9c_bPu.js";import"./rest-paths-Dia19u9P.js";import{t as yt}from"./html-B_Hg2WOy.js";import{n as bt}from"./llm-session-id-BZyXP_j2.js";import{t as xt}from"./buffer-polyfill-BccMjOKj.js";import{i as St,o as Ct}from"./browser-DuyhpHbR.js";import{_ as wt,b as Tt,c as Et,d as Dt,f as Ot,g as kt,h as At,l as jt,m as Mt,n as Nt,o as Pt,p as Ft,s as It,t as Lt,u as Rt,v as zt,x as Bt,y as Vt}from"./jsh-executor-DBGdDoKS.js";import{t as Ht}from"./buffer-B5d1xHaH.js";import{A as Ut,B as T,C as Wt,D as E,E as Gt,F as Kt,G as qt,H as D,I as O,J as Jt,K as Yt,L as Xt,M as Zt,N as Qt,O as $t,P as en,R as tn,S as nn,T as rn,U as an,V as on,W as sn,Y as cn,_ as ln,a as un,b as dn,c as fn,d as pn,f as mn,g as hn,h as gn,i as _n,j as vn,k as yn,l as bn,m as xn,n as Sn,o as Cn,p as k,q as wn,r as Tn,s as En,t as Dn,u as On,v as kn,w as An,x as jn,y as Mn,z as Nn}from"./isomorphic-git-r9mnHMnp.js";import"./global-db-DJXlpNui.js";import{S as Pn,_ as Fn,a as In,b as Ln,c as Rn,d as zn,f as Bn,g as Vn,h as Hn,i as Un,l as Wn,n as Gn,o as Kn,p as qn,r as Jn,s as Yn,t as Xn,u as Zn,v as A,x as j,y as Qn}from"./state-BUW3I2MY.js";import{a as $n,i as er,r as tr,t as nr}from"./git-config-Bdgu8kD2.js";import{a as rr,n as ir,o as ar,r as or,s as sr}from"./jsh-discovery-CnvNKojr.js";import{A as cr,C as lr,a as ur,b as dr,c as fr,d as pr,f as mr,h as hr,i as gr,j as _r,l as vr,m as yr,n as br,o as xr,p as Sr,r as Cr,s as wr,t as M,u as Tr,v as Er,y as Dr}from"./shared-C_68vn79.js";import{B as Or,F as kr,G as Ar,H as jr,J as Mr,K as Nr,L as Pr,N as Fr,P as Ir,U as Lr,V as Rr,W as zr,X as Br,Y as Vr,Z as Hr,q as Ur,z as Wr}from"./sync-sab-wire-CC30v4TL.js";import{n as Gr,t as Kr}from"./esbuild-wasm-DS_YG2EY.js";import{n as qr}from"./wasm-compiler-Ct7QZURL.js";import{a as Jr,o as Yr,s as Xr,t as Zr}from"./usb-device-registry-DFzxaOky.js";import{a as N,i as Qr,r as $r,t as ei}from"./just-bash-compat-B-SPHuh_.js";import{i as ti,r as ni,t as ri}from"./script-catalog-DZtOMxvi.js";import{a as ii,c as ai,o as oi,s as si,t as ci}from"./types-Dzr0qYl3.js";import{a as li,c as ui,d as di,f as fi,n as pi,r as mi,u as hi}from"./github-zip-zELTjFGS.js";import{i as gi,t as _i}from"./github-auth-ClvLnsKk.js";import{a as vi,i as yi,o as bi,r as xi,t as Si}from"./provenance-DdmsQ3Nr.js";import{a as Ci,c as wi,i as Ti,n as Ei,o as Di,r as Oi,s as ki}from"./github-install-ES8l_Aiw.js";import{n as Ai,t as ji}from"./magick-wasm-DCNZhAyd.js";import{i as Mi,n as Ni,r as Pi,t as Fi}from"./pdf-raster-BWk6ezTX.js";import{n as Ii}from"./lick-target-env-8JxfVcIV.js";import{t as Li}from"./tmpdir-env-ate4iNcK.js";import{a as Ri,c as zi,d as Bi,f as Vi,i as Hi,l as Ui,n as Wi,o as Gi,p as Ki,r as qi,s as Ji,t as Yi,u as Xi}from"./installer-DeySe9k4.js";import{t as Zi}from"./ffmpeg-wasm-B77gfnB_.js";import{t as Qi}from"./local-llm-_wo-fuir.js";import{t as $i}from"./client-GY8xUpw7.js";import{t as ea}from"./redirect-uri-C-c6wFfz.js";import{a as ta,c as na,i as ra,o as ia,r as aa,s as oa}from"./v86-vm-DCm7zA2r.js";import{n as sa,r as ca}from"./lick-urls-CgPiVwD-.js";let la=null;function ua(e){la=e!==null&&Number.isFinite(e)&&e>0?e:null}function da(){if(la!==null)return la;let e=globalThis.performance?.timeOrigin;return typeof e==`number`&&Number.isFinite(e)&&e>0?e:Date.now()}new URL(d).hostname;const fa=/^([0-9a-f]{32})--(?:[0-9a-f]{8}-)?([0-9a-f]+)$/i;function pa(e){let t;try{t=new URL(e.includes(`://`)?e:`https://${e}`).hostname}catch{return null}let n=fa.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 ma(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 ha(e,t){return e.some(e=>ma(e,t))}const ga=`slicc-transcript`,_a=[`canonical-agent-history-unavailable`,`tool-data-may-be-truncated`,`model-metadata-unavailable`,`scoop-history-unavailable`,`attachment-file-missing`,`attachment-association-unavailable`,`complete-snapshot-unavailable`],va=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 ya(e){return va.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 xa=new Set(_a),Sa=/^[0-9a-fA-F]{64}$/,Ca=/^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}/;function P(e){return typeof e==`object`&&!!e&&!Array.isArray(e)}function wa(e){return typeof e==`string`&&Sa.test(e)}function Ta(e){return Ca.test(e)&&Number.isFinite(Date.parse(e))}function Ea(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 Da(e,t,n){return typeof e!=`string`||!t.includes(e)?{ok:!1,error:Ea(n,t)}:{ok:!0}}function Oa(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 ka(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 Aa(e,t){if(!P(e))return{ok:!1,error:`${t} must be a non-null object`};let n=Da(e.type,[`text`,`tool-call`,`attachment-ref`],`${t}.type`);return n.ok?ka(e,t):n}function ja(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 Ma(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 Na(e,t){let n=ja(e,t);if(!n.ok)return n;let r=e.cost;return P(r)?Ma(r,`${t}.cost`):{ok:!1,error:`${t}.cost must be a non-null object`}}function Pa(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`?Ta(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 Fa(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 Ia(e,t){let n=e.usage;return n===void 0?{ok:!0}:P(n)?Na(n,`${t}.usage`):{ok:!1,error:`${t}.usage must be a non-null object`}}function La(e,t){if(!P(e))return{ok:!1,error:`${t} must be a non-null object`};let n=Da(e.role,[`user`,`assistant`,`tool-result`],`${t}.role`);if(!n.ok)return n;if(e.role===`tool-result`){let n=Fa(e,t);if(!n.ok)return n}let r=Pa(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=Oa(i,Aa,`${t}.content`);return a.ok?Ia(e,t):a}function Ra(e,t){if(!P(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=Da(e.kind,[`cone`,`scoop`],`${t}.kind`);if(!n.ok)return n;let r=e.messages;return Array.isArray(r)?Oa(r,La,`${t}.messages`):{ok:!1,error:`${t}.messages must be an array`}}function za(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 Ba(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 Va=[`attachment-file-missing`,`attachment-association-unavailable`];function Ha(e,t){let n=e.path,r=e.sha256,i=e.byteLength;return n===``?r===``?i===0?Da(e.missingReason,Va,`${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 Ua(e,t){return e.present?Ba(e,t):Ha(e,t)}function Wa(e,t){if(!P(e))return{ok:!1,error:`${t} must be a non-null object`};let n=za(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=Da(e.handling,[`text-redacted`,`binary-unchanged`],`${t}.handling`);return r.ok?Ua(e,t):r}function Ga(e,t){let n=Da(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 Ka(e,t){if(!P(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=Da(e.detector,[`known-secret`,`credential-pattern`,`pre-obfuscated`],`${t}.detector`);if(!n.ok)return n;let r=e.target;return P(r)?Ga(r,`${t}.target`):{ok:!1,error:`${t}.target must be a non-null object`}}function qa(e,t){return P(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 Ja(e,t){return typeof e!=`string`||!xa.has(e)?{ok:!1,error:`${t} is not a valid completeness reason`}:{ok:!0}}function Ya(e){if(!P(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 P(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 Xa(e){if(!P(e))return{ok:!1,error:`session.completeness must be a non-null object`};let t=Da(e.status,[`complete`,`partial`],`session.completeness.status`);return t.ok?Array.isArray(e.missing)?Oa(e.missing,Ja,`session.completeness.missing`):{ok:!1,error:`session.completeness.missing must be an array`}:t}function Za(e){if(!P(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=Da(e.state,[`active`,`frozen`],`session.state`);return t.ok?Xa(e.completeness):t}function Qa(e){if(!P(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(!P(e.redactionCounts))return{ok:!1,error:`privacy.redactionCounts must be a non-null object`};let n=e.redactions;return Array.isArray(n)?Oa(n,Ka,`privacy.redactions`):{ok:!1,error:`privacy.redactions must be an array`}}function $a(e){let t=e.conversations;if(!Array.isArray(t))return{ok:!1,error:`conversations must be an array`};let n=Oa(t,Ra,`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=Oa(r,qa,`delegations`);if(!i.ok)return i;let a=e.attachments;return Array.isArray(a)?Oa(a,Wa,`attachments`):{ok:!1,error:`attachments must be an array`}}function eo(e){let t=new Set,n=new Set;for(let r of e){if(!P(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(!(!P(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 to(e){for(let t of e){if(!P(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(!P(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 no(e){let t=[];for(let n of e){if(!P(n))continue;let e=n.content;if(Array.isArray(e))for(let n of e)P(n)&&n.type===`tool-call`&&typeof n.id==`string`&&t.push(n.id)}return t}function ro(e){let t=new Set;for(let n of e){if(!P(n))continue;let e=n.messages;if(Array.isArray(e))for(let n of no(e))t.add(n)}return t}function io(e,t){for(let n of e){if(!P(n))continue;let e=n.messages;if(Array.isArray(e))for(let n of e){if(!P(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 ao(e){return io(e,ro(e))}function oo(e,t){for(let n of e){if(!P(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 so(e,t){for(let n of e){if(!P(n))continue;let e=n.messages;if(Array.isArray(e))for(let n of e){if(!P(n))continue;let e=n.content;if(!Array.isArray(e))continue;let r=oo(e,t);if(!r.ok)return r}}return{ok:!0}}function co(e,t){let n=new Set;for(let e of t)P(e)&&typeof e.id==`string`&&n.add(e.id);return so(e,n)}function lo(e){let t=new Map;for(let n of e){if(!P(n)||typeof n.id!=`string`)continue;let e=new Set,r=n.messages;if(Array.isArray(r))for(let t of r)P(t)&&typeof t.id==`string`&&e.add(t.id);t.set(n.id,e)}return t}function uo(e,t){let n=lo(t);for(let t=0;t<e.length;t++){let r=e[t];if(!P(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 fo(e){let t=new Map;for(let n of e){if(!P(n)||typeof n.id!=`string`)continue;let e=Array.isArray(n.messages)?n.messages:[];t.set(n.id,new Set(no(e)))}return t}function po(e,t,n){for(let r=0;r<e.length;r++){let i=e[r];if(!P(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 mo(e,t){let n=new Set;for(let e of t)P(e)&&typeof e.id==`string`&&n.add(e.id);return po(e,n,fo(t))}function ho(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 go(e,t){let n=new Set;for(let e of t)P(e)&&typeof e.id==`string`&&n.add(e.id);for(let t=0;t<e.length;t++){let r=e[t];if(!P(r))continue;let i=r.target;if(!P(i))continue;let a=ho(i,n,`privacy.redactions[${t}].target`);if(!a.ok)return a}return{ok:!0}}function _o(e){let t=e.conversations,n=e.attachments,r=e.delegations,i=e.privacy,a=Array.isArray(i?.redactions)?i.redactions:[],o=eo(t);if(!o.ok)return o;let s=to(t);if(!s.ok)return s;let c=ao(t);if(!c.ok)return c;let l=co(t,n);if(!l.ok)return l;let u=uo(n,t);if(!u.ok)return u;let d=mo(r,t);return d.ok?go(a,n):d}function vo(e){let t=$a(e);return t.ok?_o(e):t}function yo(e){if(!P(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=Ya(e.export);if(!t.ok)return t;let n=Za(e.session);if(!n.ok)return n;let r=Qa(e.privacy);return r.ok?vo(e):r}async function bo(e,t,n){let r=await n({method:`GET`,path:`/${e}/sites/${t}/config.json`,origin:Be});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:xo(a),sourceUrl:a}}function xo(e){if(!e)return`da`;let t;try{t=new URL(e).host}catch{return`da`}return t===`api.aem.live`?`aem`:`da`}const So=`slicc-sprinkle-routes`;function Co(){try{let e=localStorage.getItem(So);return e?JSON.parse(e):{}}catch{return{}}}function wo(e){try{localStorage.setItem(So,JSON.stringify(e))}catch{}}function To(e){return Co()[e]}function Eo(e,t){let n=Co();n[e]=t,wo(n)}function Do(e){let t=Co();delete t[e],wo(t)}function Oo(){return Co()}function ko(e,t,n){return dt(t,n,`${e} adapter does not implement ${t}.${n}`)}function Ao(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(ko(e,t,n))]});return{...Object.fromEntries(a),allowlist:i,supports:e=>i.includes(e)}}function jo(e){let{adapter:t,pageGestures:n}=e,r=n??{};return{adapter:t,browser:Ao(t,`browser`,mt,e.browser),network:Ao(t,`network`,ut,e.network),secrets:Ao(t,`secrets`,ht,e.secrets),devices:Ao(t,`devices`,gt,{usbRequest:r.usbRequest,serialRequest:r.serialRequest,hidRequest:r.hidRequest,...e.devices}),mounts:Ao(t,`mounts`,ft,{pickDirectory:r.pickDirectory,...e.mounts}),approvals:Ao(t,`approvals`,_t,e.approvals)}}function Mo(e={}){return jo({adapter:`connect`,pageGestures:e.pageGestures})}function No(e){let t=vt(()=>import(`./extension-ops-2LnlLuXD.js`).then(t=>t.createExtensionOps(e)));return jo({adapter:e.adapter,pageGestures:e.pageGestures,network:{crossOriginFetch:e=>w(`network`,`crossOriginFetch`,async()=>(await t()).crossOriginFetch(e))},secrets:{listMaskedEnv:()=>w(`secrets`,`listMaskedEnv`,async()=>(await t()).secrets.listMaskedEnv()),getMasked:e=>w(`secrets`,`getMasked`,async()=>(await t()).secrets.getMasked(e)),set:e=>w(`secrets`,`set`,async()=>(await t()).secrets.set(e)),delete:e=>w(`secrets`,`delete`,async()=>(await t()).secrets.delete(e))},mounts:{signRequest:e=>w(`mounts`,`signRequest`,async()=>(await t()).signRequest(e))},approvals:{request:e=>w(`approvals`,`request`,async()=>(await t()).requestApproval(e))}})}function Po(e={}){let t=vt(()=>import(`./rest-ops-DBG2rYMP.js`).then(t=>t.createRestOps(e)),e.controlTimeoutMs??1e4);return jo({adapter:`node-rest`,pageGestures:e.pageGestures,network:{localNodeServer:()=>Promise.resolve({ok:!0,value:{available:!0}}),crossOriginFetch:e=>w(`network`,`crossOriginFetch`,async()=>(await t()).crossOriginFetch(e))},secrets:{listMaskedEnv:()=>w(`secrets`,`listMaskedEnv`,async()=>(await t()).secrets.listMaskedEnv()),getMasked:e=>w(`secrets`,`getMasked`,async()=>(await t()).secrets.getMasked(e)),set:e=>w(`secrets`,`set`,async()=>(await t()).secrets.set(e)),delete:e=>w(`secrets`,`delete`,async()=>(await t()).secrets.delete(e))},mounts:{signRequest:e=>w(`mounts`,`signRequest`,async()=>(await t()).signRequest(e))},approvals:{request:e=>w(`approvals`,`request`,async()=>(await t()).requestApproval(e))}})}function Fo(e,t={}){let{pageGestures:n}=t;switch(e){case`node-rest`:return Po({pageGestures:n});case`extension-direct`:case`extension-delegate`:return No({adapter:e,pageGestures:n});case`connect`:return Mo({pageGestures:n})}}const Io=e(`quick-llm`);async function Lo(e){let t=ee();if(!t)return Io.debug(`No API key for active provider — skipping`),null;let n=v(),r=_(),i;if(i=e.modelId?Vo(n,e.modelId)??Vo(n,r):Ro(n,r),!i)return Io.debug(`No model available for provider`,{providerId:n}),null;let a={role:`user`,content:e.prompt,timestamp:Date.now()},o={};i.provider===`adobe`&&(o[`X-Session-Id`]=Ho());try{let n=(await ge(i,{systemPrompt:e.system,messages:[a]},{apiKey:t,maxTokens:e.maxTokens??60,temperature:e.temperature??.3,signal:e.signal,headers:Object.keys(o).length>0?o:void 0})).content.filter(e=>e.type===`text`).map(e=>e.text).join(``).trim();return n.length>0?n:null}catch(e){return Io.debug(`Quick label call failed`,{error:e instanceof Error?e.message:String(e)}),null}}function Ro(e,t){let n=te(e);if(n.length===0)return;let r=n.find(e=>e.id===t)??n[0],i=Bo(r.id),a=n.filter(e=>zo(e,r,i));return a.length===0?r:(a.sort((e,t)=>(e.cost?.input??0)-(t.cost?.input??0)),a[0])}function zo(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 Bo(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 Vo(e,t){return te(e).find(e=>e.id===t)}function Ho(){return bt(`ui-quick-llm`)}const Uo=e(`sudo-suggest`),Wo=[`You generalize a single shell command into a minimal glob pattern for an`,`allow-list rule. Output ONLY the pattern on one line — no prose, no quotes,`,`no backticks. Keep the leading command/sub-command verbatim and replace only`,`the volatile tail (args, paths, refs) with a single trailing "*".`,`Examples:`,` git push origin main -> git push*`,` rm -rf build/cache -> rm -rf*`,` npm install left-pad -> npm install*`].join(`
2
2
  `),Go=[`You generalize a single filesystem path into a minimal glob pattern for an`,`allow-list rule. Output ONLY the pattern on one line — no prose, no quotes,`,`no backticks. Keep the meaningful directory prefix and replace the volatile`,`leaf (and below) with "**". Examples:`,` /workspace/.git/config -> /workspace/.git/**`,` /shared/secrets/openai.key -> /shared/secrets/**`,` /workspace/src/app/main.ts -> /workspace/src/**`].join(`
3
3
  `);async function Ko(e,t){if(e.suggestedPattern&&e.suggestedPattern.trim().length>0)return e.suggestedPattern.trim();let n=e.detail.trim(),r=e.kind===`command`?Wo:Go,i=null;try{i=await Lo({prompt:n,system:r,maxTokens:40,temperature:0,signal:t})}catch(e){Uo.debug(`suggestPattern: quickLabel threw`,{error:e instanceof Error?e.message:String(e)}),i=null}return qo(i)||n}function qo(e){if(!e)return null;let t=(e.split(`
4
4
  `,1)[0]?.trim()??``).replace(/^`+/,``).replace(/`+$/,``).replace(/^["']/,``).replace(/["']$/,``).trim();return t.length===0?null:t}const Jo=e(`sudo:capability-gesture`);function Yo(e,t={}){let n=t.suggest??Ko;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 Jo.warn(`sudo approval aborted before prompting — denying`,{detail:t.detail}),{decision:`deny`};if(!e)return Jo.warn(`no CapabilityBroker injected for the sudo gesture hop — denying (composition bug, never a guessed transport)`,{detail:t.detail}),{decision:`deny`};let o=await e.approvals.request({kind:t.kind,detail:t.detail,suggestedPattern:a,...t.requester?{requester:t.requester}:{},...t.reason?{reason:t.reason}:{},...t.approver?{approver:t.approver}:{},...i?{signal:i}:{}});return o.ok?pt(o.value,a):(Jo.warn(`capability broker approvals.request failed — denying`,{message:o.message}),{decision:`deny`})}}}const Xo=e(`sudo:tray-first`);function Zo(e,t={}){let n=t.suggest??Ko,r=t.timeoutMs??6e5,i=t.getClient??(async()=>{let{getPanelRpcClient:e}=await import(`./panel-rpc-DVS1uJpt.js`).then(e=>e.i);return e()});return{async requestApproval(t,a){if(a?.signal?.aborted)return{decision:`deny`};let o=t.suggestedPattern;if(!o)try{o=await n(t,a?.signal)}catch{o=t.detail}let s={...t,suggestedPattern:o},c=null;try{c=await i()}catch(e){Xo.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 Qo(e?.decision,o)}catch(e){Xo.warn(`tray-first sudo probe failed — using native broker`,{error:e instanceof Error?e.message:String(e)})}return e.requestApproval(s,a)}}}function Qo(e,t){if(!e||typeof e!=`object`)return{decision:`deny`};let n=e,r=n.attestation===`biometric`||n.attestation===`passcode`||n.attestation===`none`?n.attestation:void 0;return n.decision===`allow`?{decision:`allow`,...r?{attestation:r}:{}}:n.decision===`always`?{decision:`always`,pattern:typeof n.pattern==`string`&&n.pattern.trim().length>0?n.pattern.trim():t,...r?{attestation:r}:{}}:{decision:`deny`}}function $o(e,t){return{requestApproval(n){return t.enqueueSudoRequest(e,n)}}}function es(){return`lick-${Date.now()}-${Math.random().toString(36).slice(2,10)}`}var ts=class{pending=new Map;timeoutMs;newId;setTimer;clearTimer;onAutoSettle;constructor(e={}){this.timeoutMs=e.timeoutMs??3e5,this.newId=e.newId??es,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(st(`cone-timeout`)),this.notifyAutoSettle(r,`expired`,e.scoopJid))},this.timeoutMs)),this.pending.set(r,{scoopJid:e,request:t,resolve:i,timerHandle:a,approverJid:n})})}}resolve(e,t){let n=this.pending.get(e);return n?(this.pending.delete(e),n.timerHandle!=null&&this.clearTimer(n.timerHandle),n.resolve(t),!0):!1}failScoop(e){let t=0;for(let[n,r]of this.pending)r.scoopJid===e&&(this.pending.delete(n),r.timerHandle!=null&&this.clearTimer(r.timerHandle),r.resolve({decision:`deny`}),this.notifyAutoSettle(n,`scoop-dropped`,r.scoopJid),t++);return t}failAll(){let e=0;for(let[t,n]of this.pending)n.timerHandle!=null&&this.clearTimer(n.timerHandle),n.resolve({decision:`deny`}),this.notifyAutoSettle(t,`shutdown`,n.scoopJid),e++;return this.pending.clear(),e}get(e){let t=this.pending.get(e);return t?{id:e,scoopJid:t.scoopJid,request:t.request,...t.approverJid?{approverJid:t.approverJid}:{}}:null}list(){let e=[];for(let[t,n]of this.pending)e.push({id:t,scoopJid:n.scoopJid,request:n.request,...n.approverJid?{approverJid:n.approverJid}:{}});return e}size(){return this.pending.size}};e(`sudo-panel`),typeof globalThis.confirm==`function`&&globalThis.confirm.bind(globalThis),typeof globalThis.prompt==`function`&&globalThis.prompt.bind(globalThis),e(`sudo:page`),e(`sudo`);function ns(e){return ct(rs(e))}function rs(e){let t=Yo(e);return e?.adapter===`extension-direct`||e?.adapter===`extension-delegate`?t:Zo(t)}let is=null;function as(e){return is=e,()=>{is===e&&(is=null)}}function os(){if(!is)throw new ba(`session-not-found`);return is}const ss=`focus`,cs={type:`leaf`,surfaceId:`chat`};function ls(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 us={focus:{name:`focus`,tree:ls({left:cs},{left:3,middle:1})}};function ds(e){return us[e]??null}const fs=`progress`;function ps(e){return/^[A-Za-z_][A-Za-z0-9_]*$/.test(e)}const ms=e(`mount-picker-popup`),hs=6e4;function gs(e){let t=e??`mount-${Date.now().toString(36)}`;return new Promise(e=>{let n=!1,r=t=>{n||(n=!0,clearTimeout(i),e(t))},i=setTimeout(()=>r({cancelled:!0}),hs);Bt(`directory`,[],t,{timeoutMs:hs}).then(e=>{let n=e;if(n.error){ms.error(`picker popup launch failed for directory kind`,{requestId:t,error:n.error}),r({error:`Failed to open directory picker window`});return}r(n)}).catch(e=>{ms.error(`picker popup launch threw for directory kind`,{requestId:t,error:e instanceof Error?e.message:String(e),name:e instanceof Error?e.name:void 0}),r({error:`Failed to open directory picker window`})})})}async function _s(e){let t=await new Promise((e,t)=>{let n=indexedDB.open(`slicc-pending-mount`,1);n.onupgradeneeded=()=>{n.result.objectStoreNames.contains(`handles`)||n.result.createObjectStore(`handles`)},n.onsuccess=()=>e(n.result),n.onerror=()=>t(n.error)}),n=t.transaction(`handles`,`readwrite`),r=n.objectStore(`handles`),i=r.get(e),a=r.delete(e);a.onerror=()=>{ms.warn(`Failed to delete pending handle from IDB`,{idbKey:e,error:a.error})};let o=await new Promise((e,t)=>{n.oncomplete=()=>e(i.result??null),i.onerror=()=>t(i.error??Error(`IDB get failed`)),n.onerror=()=>t(n.error??Error(`IDB transaction failed`)),n.onabort=()=>t(n.error??Error(`IDB transaction aborted`))});return t.close(),o}async function vs(e){let t=e;if(t.requestPermission){let n=await t.requestPermission({mode:`readwrite`});if(n!==`granted`)throw Error(`Permission denied for "${e.name}" (${n})`)}}async function ys(){try{let e=await gs();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 _s(e.idbKey);if(!t)throw Error(`mount: no directory handle found in storage`);return await vs(t),t}throw Error(`mount: unexpected popup result`)}catch(e){throw Error(`mount: ${e instanceof Error?e.message:String(e)}`)}}async function bs(){if(typeof window>`u`||!(`showDirectoryPicker`in window))throw Error(`mount: local picker requires a user gesture in the panel (unavailable in this runtime). Ask the agent to mount it instead.`);try{return await window.showDirectoryPicker({mode:`readwrite`})}catch(e){throw e instanceof Error&&e.name===`AbortError`?Error(`mount: cancelled`):Error(`mount: ${e instanceof Error?e.message:String(e)}`)}}function xs(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 Ss(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 Cs=new Set([`--source`,`--profile`,`--backend`,`--max-body-mb`]);function ws(e){for(let t=0;t<e.length;t++){let n=e[t];if(n===`--`)return!1;if(n===`--help`||n===`-h`)return!0;Cs.has(n)&&t++}return!1}function Ts(e){return`aem://${e.org}/${e.name}${e.path?`/${e.path}`:``}`}var Es=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=xs(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=Se();if(!n){let n=await Ds(e);if(n)return await this.options.fs.mount(e,n,{env:t}),{stdout:`Mounted '${n.describe().displayName}' → ${e}\nIndexing in background for fast file discovery.\nNote: External changes are not auto-detected — use 'mount refresh ${e}' after modifying files outside the browser.\n`,stderr:``,exitCode:0}}let r;if(n){let t=this.options.acquireLocalMountViaToolUI;if(!t)throw Error(`mount: tool UI not available in this runtime`);r=await t(n,e)}else r=oe()?await ys():await bs();let i=Ie.fromHandle(r,{mountId:Ue()});return await this.options.fs.mount(e,i,{env:t}),{stdout:`Mounted '${i.describe().displayName}' → ${e}\nIndexing in background for fast file discovery.\nNote: External changes are not auto-detected — use 'mount refresh ${e}' after modifying files outside the browser.\n`,stderr:``,exitCode:0}}catch(e){return{stdout:``,stderr:`mount: ${e instanceof Error?e.message:String(e)}\n`,exitCode:1}}}async mountS3(e,t){if(!t.source)return this.usageError(`mount: --source required`);let n=t.profile??`default`,r=Ue(),i=new We({mountId:r,ttlMs:3e4}),a=new Re({source:t.source,profile:n,cache:i,maxBodyBytes:t.maxBodyMb?t.maxBodyMb*1024*1024:void 0,mountId:r,signedFetch:this.signedFetchS3??ze(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??He(),i=Ss(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=Ue(),c=new We({mountId:s,ttlMs:3e4}),l={source:a===`aem`?Ts(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 Ve(l):new Le(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(ws(e))return n===`umount`?this.umountHelp():this.help();let r=xs(e);if(r.positional.length===0)return{stdout:``,stderr:`${n}: path required\n`,exitCode:1};let i=this.resolvePath(r.positional[0],t);try{let e,t;if(r.clearCache){let{getAllMountEntries:n}=await import(`./mount-table-store-DrF_Ifaz.js`).then(e=>e.r),r=(await n()).find(e=>e.targetPath===i),a=r?.descriptor.kind;r&&(a===`s3`||a===`da`||a===`aem`)&&(e=r.descriptor.mountId,t=r.descriptor.kind)}await this.options.fs.unmount(i);let n=``;if(r.clearCache&&e&&t){let{RemoteMountCache:t}=await import(`./remote-cache-BE5T1-53.js`).then(e=>e.n);await new t({mountId:e,ttlMs:3e4}).clearMount(),n=` (cache cleared)`}else r.clearCache&&(n=` (no remote cache to clear)`);return{stdout:`Unmounted ${i}${n}\n`,stderr:``,exitCode:0}}catch(e){return{stdout:``,stderr:`${n}: ${e instanceof Error?e.message:String(e)}\n`,exitCode:1}}}async handleList(){try{let e=this.options.fs.listMounts();if(e.length===0)return{stdout:`No active mounts
@@ -151,9 +151,13 @@ Available commands:
151
151
  config Get and set repository options
152
152
  rev-parse Pick out and massage parameters
153
153
 
154
- `,stderr:``,exitCode:0}}};const ep={maxTraversalEntries:1e5,maxTraversalDepth:256,maxTraversalWork:1e5,maxGlobOperations:1e5,maxLiveBytes:67108864,maxInputBytes:33554432,maxArchiveBytes:134217728,maxArchiveCompressedBytes:67108864,maxArchiveEntryBytes:67108864,maxArchiveEntries:1e5};function tp(e,t){return e?{...ep,...t}:t}const np=`/home/user`;async function rp(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}`:np}catch{return np}}function ip(e){return e.replace(/\/+$/,``).split(`/`).pop()||`user`}function ap(e){let t=[],n=``,r=0;for(;r<e.length;){let i=e[r];if(i===`"`){for(r++;r<e.length&&e[r]!==`"`;)n+=e[r],r++;r++}else if(i===`'`){for(r++;r<e.length&&e[r]!==`'`;)n+=e[r],r++;r++}else i===`\\`&&r+1<e.length&&e[r+1]===` `?(n+=` `,r+=2):/\s/.test(i)?(n.length>0&&(t.push(n),n=``),r++):(n+=i,r++)}return n.length>0&&t.push(n),t}var op=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=Se();if(!e)return null;let t=e.onUpdate;return e=>{t({content:[{type:fs,progress:e}]})}}scrubbed(e){return this.scrubLabel?sp(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=cp(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:cp(i)})})}};async function sp(e,t){if(!t)return t;try{return await e(t)}catch{return`[label withheld: secret scrub unavailable]`}}function cp(e,t=80){return e.length>t?`${e.slice(0,t-1)}…`:e}function lp(e,t){return t.length?`${e} ${t.join(` `)}`:e}function up(e){try{let t=new URL(e);return`↓ ${t.host}${t.pathname===`/`?``:t.pathname}`}catch{return`↓ ${e}`}}function dp(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:up(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 fp={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}},pp=new Set([`xargs`,`watch`,`parallel`,`bash`,`sh`,`eval`,`source`,`.`]);function mp(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 hp(e,t){switch(e.type){case`CommandSubstitution`:return Ep(e.body,t);case`DoubleQuoted`:{let n=0;for(let r of e.parts){let e=hp(r,t);if(e===null)return null;n+=e}return n}case`ProcessSubstitution`:return null;default:return 0}}function gp(e,t){let n=0;for(let r of e.parts){let e=hp(r,t);if(e===null)return null;n+=e}return n}function _p(e,t){let n=0;for(let r of e.assignments){if(!r.value)continue;let e=gp(r.value,t);if(e===null)return null;n+=e}for(let r of e.args){let e=gp(r,t);if(e===null)return null;n+=e}if(!e.name)return n;let r=mp(e.name);if(r===null||pp.has(r))return null;if(!t.has(r))return n;n+=1;let i=fp[r];if(i){let r=e.args.map(mp);if(r.some(e=>e===null))return null;let a=r[i(r)];if(a===void 0)return n;if(pp.has(a))return null;t.has(a)&&(n+=1)}return n}function vp(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 yp(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||mp(r.name)!==`seq`)return null;let i=r.args.map(e=>{let t=mp(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 bp(e){let t=0;for(let n of e){let e=n.type===`Word`?xp(n.word):vp(n);if(e===null)return null;t+=e}return t}function xp(e){let t=yp(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=bp(t.items);if(e===null)return null;n*=e;break}default:return null}return n}function Sp(e){let t=0;for(let n of e){let e=xp(n);if(e===null)return null;t+=e}return t}function Cp(e,t){let n=0;for(let r of e){let e=Tp(r,t);if(e===null)return null;n+=e}return n}function wp(e,t){switch(e.type){case`SimpleCommand`:return _p(e,t);case`For`:{if(!e.words)return null;let n=Sp(e.words),r=Cp(e.body,t);return n===null||r===null?null:e.words.filter(e=>yp(e)!==null&&t.has(`seq`)).length+n*r}case`Subshell`:case`Group`:return Cp(e.body,t);case`FunctionDef`:return 0;default:return null}}function Tp(e,t){let n=0;for(let r of e.pipelines)for(let e of r.commands){let r=wp(e,t);if(r===null)return null;n+=r}return n}function Ep(e,t){return Cp(e.statements,t)}function Dp(e,t){let n=Ep(e,t);return{totalSteps:n!==null&&n>0?n:null}}function Op(e){return e.split(`
155
- `).map(e=>e.trim()).find(e=>e.length>0&&!e.startsWith(`#`))||`bash`}var kp=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 Ap=globalThis.setTimeout.bind(globalThis);function jp(e){let t=e/1e3;return`sleep ${Number.isInteger(t)?t:t.toFixed(1)}`}function Mp(e,t={}){let n=t.now??Date.now,r=t.setTimeout??Ap,i=t.isAborted??(()=>!1),a=t.label??jp,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 Np=globalThis.setTimeout.bind(globalThis);function Pp(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 Fp(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 Ip(e,t,n={}){let r=n.now??Date.now,i=n.setTimeout??Np;return{...e,async execute(n,a){let o=Fp(n),s=o>=0?Pp(n[o]):null;if(!t.hasSink()||s===null||s<=0)return e.execute(n,a);let c=t.allocateId(`timeout`),l=lp(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 Lp=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 Rp(e,t,n={}){if((n.skip??Lp).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=lp(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 zp=new Map([[`jsh`,`node`]]);function Bp(e,t){return`${zp.get(e)??e} ${t.join(` `)}`.trim()}function Vp(e){return lt(`sudo`,e)}async function Hp(e,t){let n=e.trim();if(!n||it(nt(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:Vp(r)};if(r.decision===`always`){let e=r.pattern?.trim()||n;await t.persistGrant(e)}return{allowed:!0}}function Up(e){let t=e.replace(/\s+/g,` `).trim();if(t.length<=300)return t;let n=Array.from(t);return n.length<=300?t:`${n.slice(0,299).join(``).trimEnd()}…`}const Wp=`__SLICC_SUDO_REASON`,Gp=/^#!/;function Kp(e){let t=[];for(let n of e.split(`
156
- `)){let e=n.trim();if(e.length===0){if(t.length>0)break;continue}if(!e.startsWith(`#`))break;if(Gp.test(e))continue;let r=e.replace(/^#+/,``).trim();r&&t.push(r)}return Up(t.join(` `))}const qp={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 Jp(e,t=[],n){let r=qp[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: ${yt(n)}</div>`:``;return`
154
+ `,stderr:``,exitCode:0}}};const ep={maxTraversalEntries:1e5,maxTraversalDepth:256,maxTraversalWork:1e5,maxGlobOperations:1e5,maxLiveBytes:67108864,maxInputBytes:33554432,maxArchiveBytes:134217728,maxArchiveCompressedBytes:67108864,maxArchiveEntryBytes:67108864,maxArchiveEntries:1e5};function tp(e,t){return e?{...ep,...t}:t}const np=`/home/user`;async function rp(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}`:np}catch{return np}}function ip(e){return e.replace(/\/+$/,``).split(`/`).pop()||`user`}function ap(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 op=`__SLICC_PIPESTATUS`,sp=`__SLICC_PIPESTATUS_EX`,cp=/^(0|[1-9]\d*)$/;function lp(e){let t=up(e.trimEnd());return t?`{
155
+ ${t}
156
+ }
157
+ ${sp}=$? ${op}="\${PIPESTATUS[*]}"`:e}function up(e){let t=0;for(let n=e.length-1;n>=0&&e[n]===`\\`;n--)t+=1;return t%2==0?e:`${e}\\`}function dp(e){if(!e)return[];let t=e.trim().split(/\s+/).filter(Boolean);if(t.length===0)return[];let n=[];for(let e of t){if(!cp.test(e))return[];let t=Number(e);if(t>255)return[];n.push(t)}return n}function fp(e,t){return t?lp(e):e}function pp(e,t){if(!t||!e.env)return e;let n=hp(e.env),r=n.exitCode===void 0?e:{...e,exitCode:n.exitCode};return n.pipeStatus.length===0?r:{...r,pipeStatus:n.pipeStatus}}function mp(e,t){return t===void 0?e:{...e,pipeStatus:t}}function hp(e){let t=e[op],n=e[sp];delete e[op],delete e[sp];let r;if(n!==void 0&&cp.test(n)){let e=Number(n);e<=255&&(r=e)}return{pipeStatus:dp(t),exitCode:r}}function gp(e){return e.length<2||e.every(e=>e===0)||!e.every(e=>Number.isInteger(e)&&e>=0&&e<=255)?null:`pipeline: ${e.join(` `)}`}function _p(e,t){let n=t?gp(t):null;return n?e?e.endsWith(`
158
+ `)?`${e}${n}`:`${e}\n${n}`:n:e}var vp=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=Se();if(!e)return null;let t=e.onUpdate;return e=>{t({content:[{type:fs,progress:e}]})}}scrubbed(e){return this.scrubLabel?yp(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=bp(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:bp(i)})})}};async function yp(e,t){if(!t)return t;try{return await e(t)}catch{return`[label withheld: secret scrub unavailable]`}}function bp(e,t=80){return e.length>t?`${e.slice(0,t-1)}…`:e}function xp(e,t){return t.length?`${e} ${t.join(` `)}`:e}function Sp(e){try{let t=new URL(e);return`↓ ${t.host}${t.pathname===`/`?``:t.pathname}`}catch{return`↓ ${e}`}}function Cp(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:Sp(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 wp={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}},Tp=new Set([`xargs`,`watch`,`parallel`,`bash`,`sh`,`eval`,`source`,`.`]);function Ep(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 Dp(e,t){switch(e.type){case`CommandSubstitution`:return Rp(e.body,t);case`DoubleQuoted`:{let n=0;for(let r of e.parts){let e=Dp(r,t);if(e===null)return null;n+=e}return n}case`ProcessSubstitution`:return null;default:return 0}}function Op(e,t){let n=0;for(let r of e.parts){let e=Dp(r,t);if(e===null)return null;n+=e}return n}function kp(e,t){let n=0;for(let r of e.assignments){if(!r.value)continue;let e=Op(r.value,t);if(e===null)return null;n+=e}for(let r of e.args){let e=Op(r,t);if(e===null)return null;n+=e}if(!e.name)return n;let r=Ep(e.name);if(r===null||Tp.has(r))return null;if(!t.has(r))return n;n+=1;let i=wp[r];if(i){let r=e.args.map(Ep);if(r.some(e=>e===null))return null;let a=r[i(r)];if(a===void 0)return n;if(Tp.has(a))return null;t.has(a)&&(n+=1)}return n}function Ap(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 jp(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||Ep(r.name)!==`seq`)return null;let i=r.args.map(e=>{let t=Ep(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 Mp(e){let t=0;for(let n of e){let e=n.type===`Word`?Np(n.word):Ap(n);if(e===null)return null;t+=e}return t}function Np(e){let t=jp(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=Mp(t.items);if(e===null)return null;n*=e;break}default:return null}return n}function Pp(e){let t=0;for(let n of e){let e=Np(n);if(e===null)return null;t+=e}return t}function Fp(e,t){let n=0;for(let r of e){let e=Lp(r,t);if(e===null)return null;n+=e}return n}function Ip(e,t){switch(e.type){case`SimpleCommand`:return kp(e,t);case`For`:{if(!e.words)return null;let n=Pp(e.words),r=Fp(e.body,t);return n===null||r===null?null:e.words.filter(e=>jp(e)!==null&&t.has(`seq`)).length+n*r}case`Subshell`:case`Group`:return Fp(e.body,t);case`FunctionDef`:return 0;default:return null}}function Lp(e,t){let n=0;for(let r of e.pipelines)for(let e of r.commands){let r=Ip(e,t);if(r===null)return null;n+=r}return n}function Rp(e,t){return Fp(e.statements,t)}function zp(e,t){let n=Rp(e,t);return{totalSteps:n!==null&&n>0?n:null}}function Bp(e){return e.split(`
159
+ `).map(e=>e.trim()).find(e=>e.length>0&&!e.startsWith(`#`))||`bash`}var Vp=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 Hp=globalThis.setTimeout.bind(globalThis);function Up(e){let t=e/1e3;return`sleep ${Number.isInteger(t)?t:t.toFixed(1)}`}function Wp(e,t={}){let n=t.now??Date.now,r=t.setTimeout??Hp,i=t.isAborted??(()=>!1),a=t.label??Up,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 Gp=globalThis.setTimeout.bind(globalThis);function Kp(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 qp(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 Jp(e,t,n={}){let r=n.now??Date.now,i=n.setTimeout??Gp;return{...e,async execute(n,a){let o=qp(n),s=o>=0?Kp(n[o]):null;if(!t.hasSink()||s===null||s<=0)return e.execute(n,a);let c=t.allocateId(`timeout`),l=xp(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 Yp=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 Xp(e,t,n={}){if((n.skip??Yp).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=xp(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 Zp=new Map([[`jsh`,`node`]]);function Qp(e,t){return`${Zp.get(e)??e} ${t.join(` `)}`.trim()}function $p(e){return lt(`sudo`,e)}async function em(e,t){let n=e.trim();if(!n||it(nt(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:$p(r)};if(r.decision===`always`){let e=r.pattern?.trim()||n;await t.persistGrant(e)}return{allowed:!0}}function tm(e){let t=e.replace(/\s+/g,` `).trim();if(t.length<=300)return t;let n=Array.from(t);return n.length<=300?t:`${n.slice(0,299).join(``).trimEnd()}…`}const nm=`__SLICC_SUDO_REASON`,rm=/^#!/;function im(e){let t=[];for(let n of e.split(`
160
+ `)){let e=n.trim();if(e.length===0){if(t.length>0)break;continue}if(!e.startsWith(`#`))break;if(rm.test(e))continue;let r=e.replace(/^#+/,``).trim();r&&t.push(r)}return tm(t.join(` `))}const am={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 om(e,t=[],n){let r=am[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: ${yt(n)}</div>`:``;return`
157
161
  <div class="sprinkle-action-card">
158
162
  <div class="sprinkle-action-card__header">
159
163
  <div class="sprinkle-action-card__title-group">${r.title}${a}</div>
@@ -164,11 +168,11 @@ Available commands:
164
168
  <button class="sprinkle-btn sprinkle-btn--primary" data-action="approve" data-picker="${e}"${i}>${r.approve}</button>
165
169
  </div>
166
170
  </div>
167
- `}const Yp=Symbol(`mount:timeout`),Xp=Symbol(`mount:no-panel`);async function Zp(e,t){let n=Ce.generateId(),r=!1,i=!1,a=we({id:n,html:Jp(`directory`,[],t),onAction:(e,t)=>Qp(e,t)},e.onUpdate).catch(e=>{if(r)return Yp;if(i)return Xp;throw e}),o,s=new Promise(e=>{o=setTimeout(()=>{r=!0,Ce.cancel(n,`mount: timed out`),e(Yp)},3e5)}),c=new Promise(e=>{Ce.waitForMount(n,5e3).then(()=>{},()=>{r||(i=!0,Ce.cancel(n,`mount: panel did not render the approval card`),e(Xp))})}),l=await Promise.race([a,s,c]);if(o&&clearTimeout(o),l===Yp)throw Error(`mount: timed out after 5 minute(s) waiting for user approval`);if(l===Xp)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 Qp(e,t){if(e!==`approve`)return{denied:!0};let n=t;if(n?.handleInIdb&&typeof n.idbKey==`string`)try{let e=await _s(n.idbKey);return e?(await vs(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 $p(e){let t=e?.parts;return t?.length!==1||t[0]?.type!==`Literal`?null:t[0].value??null}function em(e){return{type:`Word`,parts:[{type:`Literal`,value:e}]}}function tm(e){for(let t of e.args){let e=$p(t);if(e===`-o`||e===`--out`)return!0}return!1}function nm(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 rm(e){$p(e.name)!==`say`||tm(e)||(e.args=[em(`-o`),em(`-`),...e.args])}function im(e,t){if(Array.isArray(e)){for(let n of e)im(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`&&nm(r);r?.type===`SimpleCommand`&&a&&rm(r),im(r,a)}return}if(n.type===`CommandSubstitution`||n.type===`ProcessSubstitution`){im(n.body,!0);return}for(let e of Object.values(n))im(e,t)}const am={name:`say-stdio`,transform(e){return im(e.ast,!1),{ast:e.ast}}};function om(e){if(e?.trim())return e.split(`,`).map(e=>e.trim()).filter(Boolean)}function sm(e){if(!e)return!1;let t=e.trim().toLowerCase();return t===`true`||t===`1`||t===`yes`}function cm(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:sm(e.installAll)},affinity:{apps:om(e.apps),tasks:om(e.tasks),role:om(e.role),purpose:om(e.purpose)},priority:n}})}const lm={apps:3,tasks:2,role:1,purpose:1};function um(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*lm.apps,r.push(`apps(${i.join(`, `)})`));let a=(e.affinity.tasks??[]).filter(e=>t.tasks.includes(e));return a.length&&(n+=a.length*lm.tasks,r.push(`tasks(${a.join(`, `)})`)),(e.affinity.role??[]).includes(t.role)&&(n+=lm.role,r.push(`role(${t.role})`)),(e.affinity.purpose??[]).includes(t.purpose)&&(n+=lm.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 dm(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 fm(e){let t=new Set;try{let n=await e.readDir(ii);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 pm(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 mm(e){return typeof e!=`string`||!e?null:se(e)||null}function hm(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 gm(e,t){try{let n=mm(t);if(!n)return[];let r=await e(`${oi}${n}.json`,{headers:{Accept:`application/json`}});return r.status===200?cm(de(r.body).data):[]}catch{return[]}}async function _m(e){let t;try{t=await e(si,{headers:{Accept:`application/json`}})}catch(e){throw Error(gi(e,si))}if(t.status!==200)throw Error(`HTTP ${t.status}`);return cm(de(t.body).data)}function vm(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 ym(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 Di(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 bm(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 Oi(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 Ei(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 xm(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 ym(d,e,n,c,o,s,r.count,i,a);l.push(...t.results),u+=t.line;continue}let f=vm(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 Di(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 Sm(e,t,n,r,i,a,o,s,c,l){let u=await _i(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 bm(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 Ei(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 Cm(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 wm(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=pm(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=pm(JSON.parse(t));break}catch{}}catch{}if(!a)return i(`no-profile`);let o,s;try{let[n,r,i]=await Promise.all([_m(t),gm(t,a.company),fm(e)]);o=hm(n,r),s=i}catch(e){return i(`catalog-fetch`,[`upskill: failed to fetch skill catalog from ${si}: ${e instanceof Error?e.message:String(e)}`])}let c=um(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=Cm(await Promise.allSettled(Array.from(l.entries()).map(async([n,i])=>{let[a,o]=n.split(`/`),c=await mi(a,o,t);return c.status===`error`?Sm(n,i,a,o,d,u,r,s,t,e):xm(n,i,li(c.files),d,u,r,s,e)})),f,p);let h=(Date.now()-r)/1e3;return p.length>0&&(await wi(),m+=`\nInstalled ${p.length} recommended skill(s) in ${h.toFixed(1)}s\n`),{installedNames:p,errors:f,skipped:null,log:m,elapsedSeconds:h}}function Tm(e){let t=e.toLowerCase();return t.startsWith(`www.`)?t.slice(4):t}let Em,Dm;async function Om(e){if(Em)return Em;if(Dm!==void 0)return Dm;Dm=(async()=>{let t;try{t=await e(ci,{headers:{Accept:`application/json`}})}catch(e){throw Error(gi(e,ci))}if(t.status!==200)throw Error(`browse.sh returned HTTP ${t.status}`);let n=de(t.body),r=Array.isArray(n)?n:n.skills??[];return Em=r,r})();try{return await Dm}catch(e){throw Dm=void 0,e}}async function km(e,t){let n=await Om(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 Am=/^[A-Za-z0-9._-]+$/;function jm(e){return!e||e===`.`||e===`..`?!1:Am.test(e)}function Mm(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(`/`)||!jm(r)||!jm(i))return null;let a=Tm(r);return jm(a)?{hostname:a,task:i}:null}function Nm(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 Pm(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(`
168
- `)}function Fm(e){return e.replace(/(?:^|\n)> \[!NOTE\] \*\*Imported from browse\.sh\*\*[\s\S]*?(?:\n\n|$)/,`
169
- `)}function Im(e,t){let n=e.match(/^(---\r?\n[\s\S]*?\r?\n---)(\r?\n|$)/);return n?`${n[1]}${n[2]||`
170
- `}\n${t}\n\n${e.slice(n[0].length)}`:`${t}\n\n${e}`}async function Lm(e,t,n){let r=`${e}/${t}`,i=`${ci}/${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=de(e.body)}catch(e){return{ok:!1,error:`failed to fetch browse.sh skill "${r}": ${gi(e,i)}`}}let o;if(a.skillMdUrl)try{let e=await n(a.skillMdUrl,{headers:{Accept:`text/plain`}});e.status===200&&(o=fe(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=Nm(o,`name`),c=t.replace(/-[A-Za-z0-9]{4,8}$/,``),l=s||c||t;if(!jm(l)||l.length>64)return{ok:!1,error:`refusing to install browse.sh skill with unsafe name "${l}"`};if(!jm(e))return{ok:!1,error:`refusing to install browse.sh skill with unsafe hostname "${e}"`};let u=Pm(a,r);return{ok:!0,dirName:`browse-${e}-${l}`,slug:r,content:Im(o,u)}}async function Rm(e,t,n,r,i=!1){let a=await Lm(e,t,r);if(!a.ok)return{stdout:``,stderr:`upskill: ${a.error}\n`,exitCode:1};let{dirName:o,slug:s,content:c}=a,l=`${ii}/${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 ki(n,o))}catch{}return await n.mkdir(l,{recursive:!0}),await n.writeFile(`${l}/SKILL.md`,c),await bi(n,o,{kind:`browse.sh`,source:s,skill:o,files:[`SKILL.md`]}),await wi(),{stdout:`Installed skill "${o}" from browse.sh (${s})\n`,stderr:``,exitCode:0}}function zm(){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 Bm(e){switch(e){case`native`:return`native`;case`agents`:return`.agents`;case`claude`:return`.claude`;case`marketplace`:return`marketplace`;case`plugin`:return`plugin`}}function Vm(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)} ${Bm(t.source).padEnd(11)} ${i}\n`}return o+=`\n${zm()}`,o}function Hm(e){let t=`Skill: ${e.name}\n`;if(t+=`Description: ${e.description||`(none)`}\n`,t+=`Source: ${Bm(e.source)}\n`,t+=`Source root: ${e.sourceRoot}\n`,e.skillFilePath&&(t+=`Instructions: ${e.skillFilePath}\n`),e.shadowedPaths?.length){t+=`Shadowed paths:
171
- `;for(let n of e.shadowedPaths)t+=` - ${n}\n`}return t}function Um(){return{stdout:`usage: upskill <command> [options]
171
+ `}const sm=Symbol(`mount:timeout`),cm=Symbol(`mount:no-panel`);async function lm(e,t){let n=Ce.generateId(),r=!1,i=!1,a=we({id:n,html:om(`directory`,[],t),onAction:(e,t)=>um(e,t)},e.onUpdate).catch(e=>{if(r)return sm;if(i)return cm;throw e}),o,s=new Promise(e=>{o=setTimeout(()=>{r=!0,Ce.cancel(n,`mount: timed out`),e(sm)},3e5)}),c=new Promise(e=>{Ce.waitForMount(n,5e3).then(()=>{},()=>{r||(i=!0,Ce.cancel(n,`mount: panel did not render the approval card`),e(cm))})}),l=await Promise.race([a,s,c]);if(o&&clearTimeout(o),l===sm)throw Error(`mount: timed out after 5 minute(s) waiting for user approval`);if(l===cm)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 um(e,t){if(e!==`approve`)return{denied:!0};let n=t;if(n?.handleInIdb&&typeof n.idbKey==`string`)try{let e=await _s(n.idbKey);return e?(await vs(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 dm(e){let t=e?.parts;return t?.length!==1||t[0]?.type!==`Literal`?null:t[0].value??null}function fm(e){return{type:`Word`,parts:[{type:`Literal`,value:e}]}}function pm(e){for(let t of e.args){let e=dm(t);if(e===`-o`||e===`--out`)return!0}return!1}function mm(e){for(let t of e.redirections){let e=t.operator,n=t.fd;if(e===`&>`||e===`&>>`||(e===`>`||e===`>>`||e===`>|`)&&(n==null||n===1))return!0}return!1}function hm(e){dm(e.name)!==`say`||pm(e)||(e.args=[fm(`-o`),fm(`-`),...e.args])}function gm(e,t){if(Array.isArray(e)){for(let n of e)gm(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`&&mm(r);r?.type===`SimpleCommand`&&a&&hm(r),gm(r,a)}return}if(n.type===`CommandSubstitution`||n.type===`ProcessSubstitution`){gm(n.body,!0);return}for(let e of Object.values(n))gm(e,t)}const _m={name:`say-stdio`,transform(e){return gm(e.ast,!1),{ast:e.ast}}};function vm(e){if(e?.trim())return e.split(`,`).map(e=>e.trim()).filter(Boolean)}function ym(e){if(!e)return!1;let t=e.trim().toLowerCase();return t===`true`||t===`1`||t===`yes`}function bm(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:ym(e.installAll)},affinity:{apps:vm(e.apps),tasks:vm(e.tasks),role:vm(e.role),purpose:vm(e.purpose)},priority:n}})}const xm={apps:3,tasks:2,role:1,purpose:1};function Sm(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*xm.apps,r.push(`apps(${i.join(`, `)})`));let a=(e.affinity.tasks??[]).filter(e=>t.tasks.includes(e));return a.length&&(n+=a.length*xm.tasks,r.push(`tasks(${a.join(`, `)})`)),(e.affinity.role??[]).includes(t.role)&&(n+=xm.role,r.push(`role(${t.role})`)),(e.affinity.purpose??[]).includes(t.purpose)&&(n+=xm.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 Cm(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 wm(e){let t=new Set;try{let n=await e.readDir(ii);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 Tm(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 Em(e){return typeof e!=`string`||!e?null:se(e)||null}function Dm(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 Om(e,t){try{let n=Em(t);if(!n)return[];let r=await e(`${oi}${n}.json`,{headers:{Accept:`application/json`}});return r.status===200?bm(de(r.body).data):[]}catch{return[]}}async function km(e){let t;try{t=await e(si,{headers:{Accept:`application/json`}})}catch(e){throw Error(gi(e,si))}if(t.status!==200)throw Error(`HTTP ${t.status}`);return bm(de(t.body).data)}function Am(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 jm(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 Di(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 Mm(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 Oi(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 Ei(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 Nm(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 jm(d,e,n,c,o,s,r.count,i,a);l.push(...t.results),u+=t.line;continue}let f=Am(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 Di(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 Pm(e,t,n,r,i,a,o,s,c,l){let u=await _i(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 Mm(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 Ei(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 Fm(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 Im(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=Tm(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=Tm(JSON.parse(t));break}catch{}}catch{}if(!a)return i(`no-profile`);let o,s;try{let[n,r,i]=await Promise.all([km(t),Om(t,a.company),wm(e)]);o=Dm(n,r),s=i}catch(e){return i(`catalog-fetch`,[`upskill: failed to fetch skill catalog from ${si}: ${e instanceof Error?e.message:String(e)}`])}let c=Sm(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=Fm(await Promise.allSettled(Array.from(l.entries()).map(async([n,i])=>{let[a,o]=n.split(`/`),c=await mi(a,o,t);return c.status===`error`?Pm(n,i,a,o,d,u,r,s,t,e):Nm(n,i,li(c.files),d,u,r,s,e)})),f,p);let h=(Date.now()-r)/1e3;return p.length>0&&(await wi(),m+=`\nInstalled ${p.length} recommended skill(s) in ${h.toFixed(1)}s\n`),{installedNames:p,errors:f,skipped:null,log:m,elapsedSeconds:h}}function Lm(e){let t=e.toLowerCase();return t.startsWith(`www.`)?t.slice(4):t}let Rm,zm;async function Bm(e){if(Rm)return Rm;if(zm!==void 0)return zm;zm=(async()=>{let t;try{t=await e(ci,{headers:{Accept:`application/json`}})}catch(e){throw Error(gi(e,ci))}if(t.status!==200)throw Error(`browse.sh returned HTTP ${t.status}`);let n=de(t.body),r=Array.isArray(n)?n:n.skills??[];return Rm=r,r})();try{return await zm}catch(e){throw zm=void 0,e}}async function Vm(e,t){let n=await Bm(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 Hm=/^[A-Za-z0-9._-]+$/;function Um(e){return!e||e===`.`||e===`..`?!1:Hm.test(e)}function Wm(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(`/`)||!Um(r)||!Um(i))return null;let a=Lm(r);return Um(a)?{hostname:a,task:i}:null}function Gm(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 Km(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(`
172
+ `)}function qm(e){return e.replace(/(?:^|\n)> \[!NOTE\] \*\*Imported from browse\.sh\*\*[\s\S]*?(?:\n\n|$)/,`
173
+ `)}function Jm(e,t){let n=e.match(/^(---\r?\n[\s\S]*?\r?\n---)(\r?\n|$)/);return n?`${n[1]}${n[2]||`
174
+ `}\n${t}\n\n${e.slice(n[0].length)}`:`${t}\n\n${e}`}async function Ym(e,t,n){let r=`${e}/${t}`,i=`${ci}/${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=de(e.body)}catch(e){return{ok:!1,error:`failed to fetch browse.sh skill "${r}": ${gi(e,i)}`}}let o;if(a.skillMdUrl)try{let e=await n(a.skillMdUrl,{headers:{Accept:`text/plain`}});e.status===200&&(o=fe(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=Gm(o,`name`),c=t.replace(/-[A-Za-z0-9]{4,8}$/,``),l=s||c||t;if(!Um(l)||l.length>64)return{ok:!1,error:`refusing to install browse.sh skill with unsafe name "${l}"`};if(!Um(e))return{ok:!1,error:`refusing to install browse.sh skill with unsafe hostname "${e}"`};let u=Km(a,r);return{ok:!0,dirName:`browse-${e}-${l}`,slug:r,content:Jm(o,u)}}async function Xm(e,t,n,r,i=!1){let a=await Ym(e,t,r);if(!a.ok)return{stdout:``,stderr:`upskill: ${a.error}\n`,exitCode:1};let{dirName:o,slug:s,content:c}=a,l=`${ii}/${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 ki(n,o))}catch{}return await n.mkdir(l,{recursive:!0}),await n.writeFile(`${l}/SKILL.md`,c),await bi(n,o,{kind:`browse.sh`,source:s,skill:o,files:[`SKILL.md`]}),await wi(),{stdout:`Installed skill "${o}" from browse.sh (${s})\n`,stderr:``,exitCode:0}}function Zm(){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 Qm(e){switch(e){case`native`:return`native`;case`agents`:return`.agents`;case`claude`:return`.claude`;case`marketplace`:return`marketplace`;case`plugin`:return`plugin`}}function $m(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)} ${Qm(t.source).padEnd(11)} ${i}\n`}return o+=`\n${Zm()}`,o}function eh(e){let t=`Skill: ${e.name}\n`;if(t+=`Description: ${e.description||`(none)`}\n`,t+=`Source: ${Qm(e.source)}\n`,t+=`Source root: ${e.sourceRoot}\n`,e.skillFilePath&&(t+=`Instructions: ${e.skillFilePath}\n`),e.shadowedPaths?.length){t+=`Shadowed paths:
175
+ `;for(let n of e.shadowedPaths)t+=` - ${n}\n`}return t}function th(){return{stdout:`usage: upskill <command> [options]
172
176
 
173
177
  Install skills from GitHub repositories, the Tessl registry, or browse.sh.
174
178
 
@@ -184,7 +188,7 @@ Commands:
184
188
  tessl:<name> Install skill from Tessl registry
185
189
  browse:<hostname>/<task> Install site-specific skill from browse.sh
186
190
 
187
- ${zm()}
191
+ ${Zm()}
188
192
  GitHub Installation:
189
193
  upskill owner/repo List available skills in repo
190
194
  upskill owner/repo --skill name Install specific skill
@@ -256,14 +260,14 @@ Examples:
256
260
  upskill browse:weather.gov/get-forecast-1uezib
257
261
  upskill list --outdated
258
262
  upskill update --dry-run
259
- `,stderr:``,exitCode:0}}async function Wm(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${zm()}Install skills with: upskill owner/repo --all\n`,stderr:``,exitCode:0};let{collisions:o}=await or(t,rr(r));return{...sr(`skill`,Vm(a,`Discoverable skills`),o,{builtinNames:new Set(Ze())}),exitCode:0}}function Gm(e){return x(`skill`,async(t,n)=>{if(t.length===0||t.includes(`--help`)||t.includes(`-h`))return{stdout:`usage: skill <command> [options]
263
+ `,stderr:``,exitCode:0}}async function nh(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${Zm()}Install skills with: upskill owner/repo --all\n`,stderr:``,exitCode:0};let{collisions:o}=await or(t,rr(r));return{...sr(`skill`,$m(a,`Discoverable skills`),o,{builtinNames:new Set(Ze())}),exitCode:0}}function rh(e){return x(`skill`,async(t,n)=>{if(t.length===0||t.includes(`--help`)||t.includes(`-h`))return{stdout:`usage: skill <command> [options]
260
264
 
261
265
  Commands:
262
266
  list List discoverable skills
263
267
  info <name> Show details about a skill
264
268
  read <name> Read the SKILL.md instructions
265
269
 
266
- ${zm()}
270
+ ${Zm()}
267
271
  For installing skills from registries or GitHub, use 'upskill':
268
272
  upskill search "query" Search registries (Tessl + browse.sh)
269
273
  upskill owner/repo --list List skills in GitHub repo
@@ -275,55 +279,55 @@ Examples:
275
279
  skill list
276
280
  skill info bluebubbles
277
281
  skill read bluebubbles
278
- `,stderr:``,exitCode:0};let r=t[0],i=await import(`./kernel-worker-DVDNaQZZ.js`).then(e=>e.n);try{switch(r){case`list`:return Wm(t,e,i,n.env.get(`PATH`));case`info`:{let n=t[1];if(!n)return{stdout:``,stderr:`skill: info requires a skill name
279
- `,exitCode:1};let r=await i.getSkillInfo(e,n);return r?{stdout:Hm(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
282
+ `,stderr:``,exitCode:0};let r=t[0],i=await import(`./kernel-worker-BLB9CoLQ.js`).then(e=>e.n);try{switch(r){case`list`:return nh(t,e,i,n.env.get(`PATH`));case`info`:{let n=t[1];if(!n)return{stdout:``,stderr:`skill: info requires a skill name
283
+ `,exitCode:1};let r=await i.getSkillInfo(e,n);return r?{stdout:eh(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
280
284
  `,exitCode:1};let r=await i.readSkillInstructions(e,n);return r===null?{stdout:``,stderr:`skill: no SKILL.md found for "${n}"\n`,exitCode:1}:{stdout:r+`
281
- `,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 Km=[{names:[`--branch`,`-b`],validate:e=>!e.startsWith(`-`)&&f(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=>Ti(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=>m(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 qm(e){let t={skills:[],dryRun:!1,json:!1};for(let n=0;n<e.length;n++){let r=e[n],i=Km.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 Jm(e,t){return!e||!t||e.byteLength!==t.byteLength?!1:e.every((e,n)=>e===t[n])}async function Ym(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 Xm(e,t,n,r){let i=await Ym(e,t);return di(n)?i?{status:`kept-local`,write:!1}:{status:`added`,write:!0}:i?Jm(i,r)?{status:`unchanged`,write:!1}:{status:`updated`,write:!0}:{status:`added`,write:!0}}async function Zm(e,t,n,r){let i={changes:[],writes:[],removals:[]};for(let[r,a]of n){let n=`${t}/${r}`,{status:o,write:s}=await Xm(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 fi(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 Qm(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 _i(t),d=await yi(s,c,o.ref,u,!0,l||void 0);if(d&&r.sha===d&&await $m(e,n,r))return{...o,to:d,outcome:`current`,changes:[]};let f=await eh(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 Zm(e,`${ii}/${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 ah(e,{changes:h,writes:g,removals:_}),await bi(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 $m(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 eh(e,t,n,r,i,a,o){let s=await mi(e,t,a,i??`main`);if(s.status===`ok`){let i=li(s.files),a=n||th(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:ih(i,a),path:a}}try{return{files:rh(nh(await pi(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 th(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 nh(e){return new Map([...e].filter(([e])=>ui(e)))}function rh(e){return new Map([...e].sort(([e],[t])=>e.localeCompare(t)))}function ih(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);ui(e)&&r.set(e,i)}return rh(r)}async function ah(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 oh(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 Lm(o,s,t);if(!c.ok)return{...a,outcome:`error`,error:c.error};let l=`${ii}/${n}/SKILL.md`,u=await Ym(e,l),d=new TextEncoder().encode(c.content),f=u!==void 0&&Fm(new TextDecoder().decode(u))===Fm(c.content);if(Jm(u,d)||f)return{...a,changes:[{path:`SKILL.md`,status:`unchanged`}]};let p=u?`updated`:`added`;return i||(await e.mkdir(`${ii}/${n}`,{recursive:!0}),await e.writeFile(l,d),await bi(e,n,{...r,files:[`SKILL.md`]})),{...a,outcome:`updated`,changes:[{path:`SKILL.md`,status:p}]}}function sh(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 ch(e,t,n,r){let i=Ti(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 lh(e,t,n){if(t.length===0){let t=await vi(e);return{targets:t.provenanced,missing:[],skipped:t.unattributed}}let r=[],i=[];for(let a of t){let t=await xi(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?ch(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 uh(e){return e.reason===`not-installed`?`upskill: no skill named "${e.name}" is installed — check \`upskill list\`
285
+ `,stderr:``,exitCode:0}}default:return{stdout:``,stderr:`skill: unknown command "${r}"\n`,exitCode:1}}}catch(e){return{stdout:``,stderr:`skill: ${e instanceof Error?e.message:String(e)}\n`,exitCode:1}}})}const ih=[{names:[`--branch`,`-b`],validate:e=>!e.startsWith(`-`)&&f(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=>Ti(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=>m(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 ah(e){let t={skills:[],dryRun:!1,json:!1};for(let n=0;n<e.length;n++){let r=e[n],i=ih.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 oh(e,t){return!e||!t||e.byteLength!==t.byteLength?!1:e.every((e,n)=>e===t[n])}async function sh(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 ch(e,t,n,r){let i=await sh(e,t);return di(n)?i?{status:`kept-local`,write:!1}:{status:`added`,write:!0}:i?oh(i,r)?{status:`unchanged`,write:!1}:{status:`updated`,write:!0}:{status:`added`,write:!0}}async function lh(e,t,n,r){let i={changes:[],writes:[],removals:[]};for(let[r,a]of n){let n=`${t}/${r}`,{status:o,write:s}=await ch(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 fi(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 uh(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 _i(t),d=await yi(s,c,o.ref,u,!0,l||void 0);if(d&&r.sha===d&&await dh(e,n,r))return{...o,to:d,outcome:`current`,changes:[]};let f=await fh(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 lh(e,`${ii}/${n}`,p,r),v=g.length>0||_.length>0;if(a)return{...o,outcome:v?`updated`:`current`,changes:h};let ee=d??r.sha;return v&&await _h(e,{changes:h,writes:g,removals:_}),await bi(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 dh(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 fh(e,t,n,r,i,a,o){let s=await mi(e,t,a,i??`main`);if(s.status===`ok`){let i=li(s.files),a=n||ph(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:gh(i,a),path:a}}try{return{files:hh(mh(await pi(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 ph(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 mh(e){return new Map([...e].filter(([e])=>ui(e)))}function hh(e){return new Map([...e].sort(([e],[t])=>e.localeCompare(t)))}function gh(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);ui(e)&&r.set(e,i)}return hh(r)}async function _h(e,t){for(let n of t.writes){let t=n.path.slice(0,n.path.lastIndexOf(`/`));await e.mkdir(t,{recursive:!0}),await e.writeFile(n.path,n.content)}for(let n of t.removals)await e.rm(n).catch(()=>{})}async function vh(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 Ym(o,s,t);if(!c.ok)return{...a,outcome:`error`,error:c.error};let l=`${ii}/${n}/SKILL.md`,u=await sh(e,l),d=new TextEncoder().encode(c.content),f=u!==void 0&&qm(new TextDecoder().decode(u))===qm(c.content);if(oh(u,d)||f)return{...a,changes:[{path:`SKILL.md`,status:`unchanged`}]};let p=u?`updated`:`added`;return i||(await e.mkdir(`${ii}/${n}`,{recursive:!0}),await e.writeFile(l,d),await bi(e,n,{...r,files:[`SKILL.md`]})),{...a,outcome:`updated`,changes:[{path:`SKILL.md`,status:p}]}}function yh(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 bh(e,t,n,r){let i=Ti(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 xh(e,t,n){if(t.length===0){let t=await vi(e);return{targets:t.provenanced,missing:[],skipped:t.unattributed}}let r=[],i=[];for(let a of t){let t=await xi(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?bh(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 Sh(e){return e.reason===`not-installed`?`upskill: no skill named "${e.name}" is installed — check \`upskill list\`
282
286
  `:`upskill: no install provenance for "${e.name}" — re-run with --from <owner>/<repo> (optionally --path <dir>) to record its source, or reinstall it once
283
- `}function dh(e,t){return`${e} ${t}${e===1?``:`s`}`}function fh(e){return`\nSkipped ${dh(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.
287
+ `}function Ch(e,t){return`${e} ${t}${e===1?``:`s`}`}function wh(e){return`\nSkipped ${Ch(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.
284
288
  For the rest, record a source once with \`upskill update <skill> --from <owner>/<repo> --dry-run\`,
285
289
  after which a bare \`upskill update\` sweeps them too.
286
- `}function ph(e,t,n,r,i){let a=t?`Skill update (dry run — nothing written):
290
+ `}function Th(e,t,n,r,i){let a=t?`Skill update (dry run — nothing written):
287
291
  `:`Skill update:
288
- `;for(let n of e)a+=sh(n,t);if(i.length>0&&(a+=fh(i)),!n&&r&&e.length>0){let n=i.length>0?`all ${dh(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 mh(e,t,n){let{targets:r,missing:i,skipped:a}=await lh(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 oh(e,t,i.name,i.provenance,n.dryRun):await Qm(e,t,i.name,i.provenance,n.branch,n.dryRun));return{results:o,skipped:a,missing:i}}async function hh(e,t,n){let r=qm(e);if(r.error)return{stdout:``,stderr:`${r.error}\n`,exitCode:1};let{results:i,missing:a,skipped:o}=await mh(t,n,r);if(i.length===0)return a.length===0&&o.length>0?{stdout:r.json?`${JSON.stringify({ok:!0,dryRun:r.dryRun,results:[],skipped:o})}\n`:ph([],r.dryRun,!1,!0,o),stderr:``,exitCode:0}:{stdout:``,stderr:a.length?a.map(uh).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 wi();let l=a.map(uh).join(``)+s.map(e=>`upskill: ${e.skill}: ${e.error}\n`).join(``),u=s.length===0&&a.length===0;return r.json?{stdout:`${JSON.stringify({ok:u,dryRun:r.dryRun,results:i,skipped:o})}\n`,stderr:l,exitCode:+!u}:{stdout:ph(i,r.dryRun,c,u,o),stderr:l,exitCode:+!u}}function gh(e){let t={outdated:!1,json:!1};for(let n of e)if(n===`--outdated`)t.outdated=!0;else if(n===`--json`)t.json=!0;else if(n.startsWith(`-`))return t.error=`upskill: unknown option "${n}" for list`,t;else return t.error=`upskill: unexpected argument "${n}" for list`,t;return t}function _h(e){return e.to&&e.from&&e.to!==e.from?` ${e.from.slice(0,7)} → ${e.to.slice(0,7)}`:e.to?` ${e.to.slice(0,7)}`:``}function vh(e,t){let n=e.filter(e=>e.outcome===`updated`),r=[];if(n.length===0)r.push(`No outdated skills.`);else{r.push(`Outdated skills:`,``);for(let e of n)r.push(` ${e.skill} ${e.source}${_h(e)}`)}if(t.length>0){let e=t.length===1?`skill`:`skills`;r.push(``,`Skipped ${t.length} ${e} with no install provenance — not checked.`)}let i=e.filter(e=>e.outcome===`error`);if(i.length>0){let e=i.length===1?`skill`:`skills`;r.push(``,`Could not check ${i.length} ${e}:`);for(let e of i)r.push(` ${e.skill}: failed — ${e.error}`)}return`${r.join(`
289
- `)}\n`}async function yh(e,t,n){let r=await(await import(`./kernel-worker-DVDNaQZZ.js`).then(e=>e.n)).discoverSkills(e),{collisions:i}=await or(e,rr(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${zm()}`,stderr:``,exitCode:0}:{...sr(`upskill`,Vm(r,`Discoverable local skills`),i,{builtinNames:new Set(Ze())}),exitCode:0}}async function bh(e,t,n){let{results:r,skipped:i}=await mh(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:vh(r,i),stderr:c,exitCode:+!s}}async function xh(e,t,n,r){let i=gh(e);return i.error?{stdout:``,stderr:`${i.error}\n`,exitCode:1}:i.outdated?bh(t,n,i.json):yh(t,i.json,r)}async function Sh(e,t){let n=`${ai}/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(gi(e,n))}if(r.status!==200)throw Error(`Tessl returned HTTP ${r.status}`);let i=de(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=Ci(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 Ch(e,t){let n=`${ai}/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: ${gi(e,n)}`}}if(r.status!==200)return{error:`Tessl search failed (HTTP ${r.status})`};let i=de(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=Ci(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 wh=[{label:`Tessl`,host:new URL(ai).host,fetch:Sh},{label:`browse.sh`,host:new URL(ci).host,fetch:km}];function Th(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 Eh(e,t,n=1){let r=await Promise.allSettled(wh.map(n=>n.fetch(e,t))),i=r.map(e=>e.status===`fulfilled`?e.value:[]),a=r.every(e=>e.status===`rejected`),o=Th(i),s=``;for(let e=0;e<r.length;e++){let t=r[e];if(t.status===`rejected`){let n=wh[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+=`
292
+ `;for(let n of e)a+=yh(n,t);if(i.length>0&&(a+=wh(i)),!n&&r&&e.length>0){let n=i.length>0?`all ${Ch(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 Eh(e,t,n){let{targets:r,missing:i,skipped:a}=await xh(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 vh(e,t,i.name,i.provenance,n.dryRun):await uh(e,t,i.name,i.provenance,n.branch,n.dryRun));return{results:o,skipped:a,missing:i}}async function Dh(e,t,n){let r=ah(e);if(r.error)return{stdout:``,stderr:`${r.error}\n`,exitCode:1};let{results:i,missing:a,skipped:o}=await Eh(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`:Th([],r.dryRun,!1,!0,o),stderr:``,exitCode:0}:{stdout:``,stderr:a.length?a.map(Sh).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 wi();let l=a.map(Sh).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:Th(i,r.dryRun,c,u,o),stderr:l,exitCode:+!u}}function Oh(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 kh(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 Ah(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}${kh(e)}`)}if(t.length>0){let e=t.length===1?`skill`:`skills`;r.push(``,`Skipped ${t.length} ${e} with no install provenance — not checked.`)}let i=e.filter(e=>e.outcome===`error`);if(i.length>0){let e=i.length===1?`skill`:`skills`;r.push(``,`Could not check ${i.length} ${e}:`);for(let e of i)r.push(` ${e.skill}: failed — ${e.error}`)}return`${r.join(`
293
+ `)}\n`}async function jh(e,t,n){let r=await(await import(`./kernel-worker-BLB9CoLQ.js`).then(e=>e.n)).discoverSkills(e),{collisions:i}=await or(e,rr(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${Zm()}`,stderr:``,exitCode:0}:{...sr(`upskill`,$m(r,`Discoverable local skills`),i,{builtinNames:new Set(Ze())}),exitCode:0}}async function Mh(e,t,n){let{results:r,skipped:i}=await Eh(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:Ah(r,i),stderr:c,exitCode:+!s}}async function Nh(e,t,n,r){let i=Oh(e);return i.error?{stdout:``,stderr:`${i.error}\n`,exitCode:1}:i.outdated?Mh(t,n,i.json):jh(t,i.json,r)}async function Ph(e,t){let n=`${ai}/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(gi(e,n))}if(r.status!==200)throw Error(`Tessl returned HTTP ${r.status}`);let i=de(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=Ci(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 Fh(e,t){let n=`${ai}/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: ${gi(e,n)}`}}if(r.status!==200)return{error:`Tessl search failed (HTTP ${r.status})`};let i=de(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=Ci(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 Ih=[{label:`Tessl`,host:new URL(ai).host,fetch:Ph},{label:`browse.sh`,host:new URL(ci).host,fetch:Vm}];function Lh(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 Rh(e,t,n=1){let r=await Promise.allSettled(Ih.map(n=>n.fetch(e,t))),i=r.map(e=>e.status===`fulfilled`?e.value:[]),a=r.every(e=>e.status===`rejected`),o=Lh(i),s=``;for(let e=0;e<r.length;e++){let t=r[e];if(t.status===`rejected`){let n=Ih[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+=`
290
294
  `}return u<l&&(p+=`Showing ${d+1}-${d+f.length} of ${c}. `,p+=`Next page: upskill search ${e} --page ${u+1}\n\n`),p+=`To install:
291
295
  `,p+=` From Tessl: upskill <owner/repo> --skill <name>
292
296
  `,p+=` From browse.sh: upskill browse:<hostname>/<task>
293
- `,{stdout:p,stderr:``,exitCode:0}}function Dh(e,t,n){let r=`upskill ${e}`;return t&&(r+=` --branch ${t}`),n&&(r+=` --path ${n}`),r}async function Oh(e,t){let n=[],r;try{r=await t(e,{method:`GET`})}catch(t){return n.push({rel:g,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 a=h(i,e),o=[];for(let e of a){if(!e.rel.includes(g))continue;let t=p([e]);t?.verb===`upskill`&&o.push({target:t.target,branch:t.branch,path:t.path,instruction:t.instruction,installHint:Dh(t.target,t.branch,t.path)})}return{links:o,failures:n}}function kh(e,t,n){if(!e||t.length===0)return[];let r=[];for(let i of t){if(!i.hostname||Tm(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 Ah(e){let t=e.active?` [active]`:``,n=`${e.title||`(untitled)`}${t}\n`;if(n+=` ${e.url}\n`,e.origin.length>0){n+=` Origin-advertised:
297
+ `,{stdout:p,stderr:``,exitCode:0}}function zh(e,t,n){let r=`upskill ${e}`;return t&&(r+=` --branch ${t}`),n&&(r+=` --path ${n}`),r}async function Bh(e,t){let n=[],r;try{r=await t(e,{method:`GET`})}catch(t){return n.push({rel:g,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 a=h(i,e),o=[];for(let e of a){if(!e.rel.includes(g))continue;let t=p([e]);t?.verb===`upskill`&&o.push({target:t.target,branch:t.branch,path:t.path,instruction:t.instruction,installHint:zh(t.target,t.branch,t.path)})}return{links:o,failures:n}}function Vh(e,t,n){if(!e||t.length===0)return[];let r=[];for(let i of t){if(!i.hostname||Lm(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 Hh(e){let t=e.active?` [active]`:``,n=`${e.title||`(untitled)`}${t}\n`;if(n+=` ${e.url}\n`,e.origin.length>0){n+=` Origin-advertised:
294
298
  `;for(let t of e.origin)n+=` ${t.installHint}`,t.instruction&&(n+=` # ${t.instruction}`),n+=`
295
299
  `}if(e.catalog.length>0){n+=` Browse.sh catalog:
296
300
  `;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.
297
301
  `);for(let t of e.failures)n+=` (discovery failed: ${t.error})\n`;return n+=`
298
- `,n}async function jh(e,t,n,r){if(!n)return{stdout:``,stderr:`upskill: browser APIs unavailable in this environment
302
+ `,n}async function Uh(e,t,n,r){if(!n)return{stdout:``,stderr:`upskill: browser APIs unavailable in this environment
299
303
  `,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)+`
300
304
  `,stderr:``,exitCode:0}:{stdout:`No open browser tabs.
301
- `,stderr:``,exitCode:0};let a=[],o=``;try{a=await Om(t)}catch(e){o=`upskill: warning: browse.sh catalog unavailable: ${e instanceof Error?e.message:String(e)}\n`}let s=await fm(e),c=[];for(let e of i){let n=``;try{n=new URL(e.url).hostname}catch{}let r=n?Tm(n):``,i=[],o=[];if(n&&/^https?:/i.test(e.url)){let n=await Oh(e.url,t);i=n.links,o=n.failures}let l=kh(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)+`
302
- `,stderr:o,exitCode:0};let l=``;for(let e of c)l+=Ah(e);return{stdout:l,stderr:o,exitCode:0}}async function Mh(e,t,n){if(n){let n=await wm(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.
305
+ `,stderr:``,exitCode:0};let a=[],o=``;try{a=await Bm(t)}catch(e){o=`upskill: warning: browse.sh catalog unavailable: ${e instanceof Error?e.message:String(e)}\n`}let s=await wm(e),c=[];for(let e of i){let n=``;try{n=new URL(e.url).hostname}catch{}let r=n?Lm(n):``,i=[],o=[];if(n&&/^https?:/i.test(e.url)){let n=await Bh(e.url,t);i=n.links,o=n.failures}let l=Vh(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)+`
306
+ `,stderr:o,exitCode:0};let l=``;for(let e of c)l+=Hh(e);return{stdout:l,stderr:o,exitCode:0}}async function Wh(e,t,n){if(n){let n=await Im(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.
303
307
  `,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.
304
308
  `,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.
305
- `,exitCode:1};let i,a;try{let[n,o,s]=await Promise.all([(async()=>{let e=await t(si,{headers:{Accept:`application/json`}});if(e.status!==200)throw Error(`HTTP ${e.status}`);return cm(de(e.body).data)})(),gm(t,r.company),fm(e)]);i=hm(n,o),a=s}catch(e){return{stdout:``,stderr:`upskill: failed to fetch skill catalog from ${si}: ${e instanceof Error?e.message:String(e)}\n`,exitCode:1}}let o=um(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.
309
+ `,exitCode:1};let i,a;try{let[n,o,s]=await Promise.all([(async()=>{let e=await t(si,{headers:{Accept:`application/json`}});if(e.status!==200)throw Error(`HTTP ${e.status}`);return bm(de(e.body).data)})(),Om(t,r.company),wm(e)]);i=Dm(n,o),a=s}catch(e){return{stdout:``,stderr:`upskill: failed to fetch skill catalog from ${si}: ${e instanceof Error?e.message:String(e)}\n`,exitCode:1}}let o=Sm(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.
306
310
  `,stderr:``,exitCode:0};let s=`Recommended skills for you:
307
311
 
308
- `,c=0;for(let e of o){c++;let t=dm(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
309
- `,{stdout:s,stderr:``,exitCode:0}}function Nh(e){return!e||e.startsWith(`-`)?{stdout:``,stderr:`upskill: --branch requires a value
312
+ `,c=0;for(let e of o){c++;let t=Cm(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
313
+ `,{stdout:s,stderr:``,exitCode:0}}function Gh(e){return!e||e.startsWith(`-`)?{stdout:``,stderr:`upskill: --branch requires a value
310
314
  `,exitCode:1}:f(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
311
- `,exitCode:1}}function Ph(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`||!m(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
312
- `,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=Nh(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 Fh(e,t,n){if(!t)return{stdout:``,stderr:`upskill: ${e} requires a skill name\n`,exitCode:1};let r=await import(`./kernel-worker-DVDNaQZZ.js`).then(e=>e.n);if(e===`info`){let e=await r.getSkillInfo(n,t);if(!e)return{stdout:``,stderr:`upskill: skill "${t}" not found\n`,exitCode:1};let i=await xi(n,t),a=i?Si(i):"Installed from: (no provenance recorded — reinstall to enable `upskill update`)\n";return{stdout:Hm(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+`
313
- `,stderr:``,exitCode:0}}async function Ih(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 Di(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 Lh(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 Ei(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 Rh(e,t,n,r,i,a,o,s){let c=``,l=``,u=0;for(let d of e){let e=await Ei(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 zh(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 Bh(e,t,n,r){let{owner:i,repo:a}=e,o=t.branch??e.branch,s=t.subPath??e.path,c=await _i(r),l=await Oi(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:zh(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:zh(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 mi(i,a,r,o);if(e.status===`ok`){let r=await yi(i,a,o,c,!0,s),l=await Ih(u,i,a,li(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 Lh(u,i,a,c,n,t.force,o,f);({output:p,errors:m,successCount:h}=e)}}else({output:p,errors:m,successCount:h}=await Rh(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 wi()),{stdout:p,stderr:m,exitCode:+!!m}}async function Vh(e,t,n,r,i){switch(e[0]){case`tabs`:return jh(t,n,r,e.includes(`--json`));case`recommendations`:return Mh(t,n,e.includes(`--install`));case`update`:case`upgrade`:return hh(e.slice(1),t,n);case`list`:return xh(e.slice(1),t,n,i);case`info`:case`read`:return Fh(e[0],e[1],t);case`search`:return Uh(e,n);default:return null}}function Hh(e,t,n){return x(`upskill`,async(r,i)=>{if(r.length===0||r.includes(`--help`)||r.includes(`-h`))return Um();let a=await Vh(r,e,t,n,i.env.get(`PATH`));if(a)return a;let o=Ph(r);if(o.earlyReturn)return o.earlyReturn;if(!o.sourceRef)return Um();if(o.sourceRef.startsWith(`tessl:`))return Wh(o.sourceRef,o.force,e,t);let s=Mm(o.sourceRef);if(s)return Rm(s.hostname,s.task,e,t,o.force);let c=Ti(o.sourceRef);return c?Bh(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 Uh(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?Eh(a,t,i):Um()}async function Wh(e,t,n,r){let i=e.slice(6);if(!i)return{stdout:``,stderr:`upskill: tessl: requires a skill name
314
- `,exitCode:1};let a=await Ch(i,r);if(`error`in a)return{stdout:``,stderr:`upskill: ${a.error}\n`,exitCode:1};let o=await _i(r);return Ei(a.owner,a.repo,a.skillPath,a.skillName,n,o,t,r)}function Gh(){return{stdout:`usage: afplay [-v volume] [-r rate] <file>
315
+ `,exitCode:1}}function Kh(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`||!m(r))return t.earlyReturn={stdout:``,stderr:`upskill: --path must be a repo-relative sub-path of [A-Za-z0-9._/-]+ with no "..", leading "-"/"/", or shell metacharacters
316
+ `,exitCode:1},t;t.subPath=r}else if(r===`--list`)t.listOnly=!0;else if(r===`--all`)t.installAll=!0;else if(r===`--force`)t.force=!0;else if(r===`--branch`||r===`-b`){let r=Gh(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 qh(e,t,n){if(!t)return{stdout:``,stderr:`upskill: ${e} requires a skill name\n`,exitCode:1};let r=await import(`./kernel-worker-BLB9CoLQ.js`).then(e=>e.n);if(e===`info`){let e=await r.getSkillInfo(n,t);if(!e)return{stdout:``,stderr:`upskill: skill "${t}" not found\n`,exitCode:1};let i=await xi(n,t),a=i?Si(i):"Installed from: (no provenance recorded — reinstall to enable `upskill update`)\n";return{stdout:eh(e)+a,stderr:``,exitCode:0}}let i=await r.readSkillInstructions(n,t);return i===null?{stdout:``,stderr:`upskill: no SKILL.md found for "${t}"\n`,exitCode:1}:{stdout:i+`
317
+ `,stderr:``,exitCode:0}}async function Jh(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 Di(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 Yh(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 Ei(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 Xh(e,t,n,r,i,a,o,s){let c=``,l=``,u=0;for(let d of e){let e=await Ei(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 Zh(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 Qh(e,t,n,r){let{owner:i,repo:a}=e,o=t.branch??e.branch,s=t.subPath??e.path,c=await _i(r),l=await Oi(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:Zh(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:Zh(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 mi(i,a,r,o);if(e.status===`ok`){let r=await yi(i,a,o,c,!0,s),l=await Jh(u,i,a,li(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 Yh(u,i,a,c,n,t.force,o,f);({output:p,errors:m,successCount:h}=e)}}else({output:p,errors:m,successCount:h}=await Xh(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 wi()),{stdout:p,stderr:m,exitCode:+!!m}}async function $h(e,t,n,r,i){switch(e[0]){case`tabs`:return Uh(t,n,r,e.includes(`--json`));case`recommendations`:return Wh(t,n,e.includes(`--install`));case`update`:case`upgrade`:return Dh(e.slice(1),t,n);case`list`:return Nh(e.slice(1),t,n,i);case`info`:case`read`:return qh(e[0],e[1],t);case`search`:return tg(e,n);default:return null}}function eg(e,t,n){return x(`upskill`,async(r,i)=>{if(r.length===0||r.includes(`--help`)||r.includes(`-h`))return th();let a=await $h(r,e,t,n,i.env.get(`PATH`));if(a)return a;let o=Kh(r);if(o.earlyReturn)return o.earlyReturn;if(!o.sourceRef)return th();if(o.sourceRef.startsWith(`tessl:`))return ng(o.sourceRef,o.force,e,t);let s=Wm(o.sourceRef);if(s)return Xm(s.hostname,s.task,e,t,o.force);let c=Ti(o.sourceRef);return c?Qh(c,o,e,t):{stdout:``,stderr:`upskill: unrecognized source "${o.sourceRef}"\n\nExpected: owner/repo, tessl:<name>, or browse:<hostname>/<task>\n`,exitCode:1}})}async function tg(e,t){let n=[...e.slice(1)],r=n.indexOf(`--page`),i=1;r>=0&&(i=parseInt(n[r+1],10)||1,n.splice(r,2));let a=n.join(` `);return a?Rh(a,t,i):th()}async function ng(e,t,n,r){let i=e.slice(6);if(!i)return{stdout:``,stderr:`upskill: tessl: requires a skill name
318
+ `,exitCode:1};let a=await Fh(i,r);if(`error`in a)return{stdout:``,stderr:`upskill: ${a.error}\n`,exitCode:1};let o=await _i(r);return Ei(a.owner,a.repo,a.skillPath,a.skillName,n,o,t,r)}function rg(){return{stdout:`usage: afplay [-v volume] [-r rate] <file>
315
319
 
316
320
  Plays an audio file using the Web Audio API.
317
321
  -v volume Volume level (0 to 1, default 1)
318
322
  -r rate Playback rate (0.25 to 4, default 1)
319
- `,stderr:``,exitCode:0}}function Kh(e){return{stdout:``,stderr:`afplay: ${e}\n`,exitCode:1}}function qh(e){return e instanceof Error?e.message:String(e)}const Jh={"-v":`a volume value`,"-r":`a rate value`};function Yh(e){let t=Number.parseFloat(e);return Number.isNaN(t)||t<0||t>1?`volume must be between 0 and 1`:null}function Xh(e){let t=Number.parseFloat(e);return Number.isNaN(t)||t<.25||t>4?`rate must be between 0.25 and 4`:null}function Zh(e,t,n){switch(t){case`-v`:return Yh(n)||(e.volume=Number.parseFloat(n),null);case`-r`:return Xh(n)||(e.rate=Number.parseFloat(n),null);default:return`unknown option: ${t}`}}function Qh(e){let t={volume:1,rate:1,filePath:null};for(let n=0;n<e.length;n++){let r=e[n];if(Object.hasOwn(Jh,r)){let i=n+1<e.length&&!e[n+1].startsWith(`-`)?e[++n]:null;if(i==null)return Kh(`${r} requires ${Jh[r]}`);let a=Zh(t,r,i);if(a)return Kh(a);continue}if(r.startsWith(`-`))return Kh(`unknown option: ${r}`);if(t.filePath!==null)return Kh(`only one file can be specified`);t.filePath=r}return t}let $h=null;function eg(){return(!$h||$h.state===`closed`)&&($h=new AudioContext),$h}function tg(e){let t=new ArrayBuffer(e.byteLength);return new Uint8Array(t).set(e),t}async function ng(e,t){let n=t.fs.resolvePath(t.cwd,e);try{return{bytes:new Uint8Array(await t.fs.readFileBuffer(n)),fullPath:n}}catch{return Kh(`cannot open ${e}: No such file`)}}function rg(e,t){return ur(e).startsWith(`audio/`)?null:Kh(`${t} is not an audio file`)}async function ig(e,t,n,r,i){try{let n=ur(t);return await i.call(`play-audio`,{bytes:tg(e),mimeType:n,volume:r},{timeoutMs:3e5}),{stdout:``,stderr:``,exitCode:0}}catch(e){return Kh(`failed to play ${n}: ${qh(e)}`)}}async function ag(e,t,n,r){try{let t=eg();t.state===`suspended`&&await t.resume();let i=await t.decodeAudioData(tg(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 Kh(`failed to play ${t}: ${qh(e)}`)}}async function og(e,t,n,r){let i=s()&&typeof AudioContext<`u`,a=o();if(!i&&!a)return Kh(`Web Audio API unavailable in this environment`);let c=await ng(e,r);return`exitCode`in c?c:rg(c.fullPath,e)||(i?ag(c.bytes,e,t,n):ig(c.bytes,c.fullPath,e,t,a))}function sg(){return x(`afplay`,async(e,t)=>{if(e.length===0||e.includes(`--help`)||e.includes(`-h`))return Gh();let n=Qh(e);return`exitCode`in n?n:n.filePath?og(n.filePath,n.volume,n.rate,t):Gh()})}function cg(){return x(`chime`,async(e,t)=>e.includes(`--help`)||e.includes(`-h`)?{stdout:`usage: chime
323
+ `,stderr:``,exitCode:0}}function ig(e){return{stdout:``,stderr:`afplay: ${e}\n`,exitCode:1}}function ag(e){return e instanceof Error?e.message:String(e)}const og={"-v":`a volume value`,"-r":`a rate value`};function sg(e){let t=Number.parseFloat(e);return Number.isNaN(t)||t<0||t>1?`volume must be between 0 and 1`:null}function cg(e){let t=Number.parseFloat(e);return Number.isNaN(t)||t<.25||t>4?`rate must be between 0.25 and 4`:null}function lg(e,t,n){switch(t){case`-v`:return sg(n)||(e.volume=Number.parseFloat(n),null);case`-r`:return cg(n)||(e.rate=Number.parseFloat(n),null);default:return`unknown option: ${t}`}}function ug(e){let t={volume:1,rate:1,filePath:null};for(let n=0;n<e.length;n++){let r=e[n];if(Object.hasOwn(og,r)){let i=n+1<e.length&&!e[n+1].startsWith(`-`)?e[++n]:null;if(i==null)return ig(`${r} requires ${og[r]}`);let a=lg(t,r,i);if(a)return ig(a);continue}if(r.startsWith(`-`))return ig(`unknown option: ${r}`);if(t.filePath!==null)return ig(`only one file can be specified`);t.filePath=r}return t}let dg=null;function fg(){return(!dg||dg.state===`closed`)&&(dg=new AudioContext),dg}function pg(e){let t=new ArrayBuffer(e.byteLength);return new Uint8Array(t).set(e),t}async function mg(e,t){let n=t.fs.resolvePath(t.cwd,e);try{return{bytes:new Uint8Array(await t.fs.readFileBuffer(n)),fullPath:n}}catch{return ig(`cannot open ${e}: No such file`)}}function hg(e,t){return ur(e).startsWith(`audio/`)?null:ig(`${t} is not an audio file`)}async function gg(e,t,n,r,i){try{let n=ur(t);return await i.call(`play-audio`,{bytes:pg(e),mimeType:n,volume:r},{timeoutMs:3e5}),{stdout:``,stderr:``,exitCode:0}}catch(e){return ig(`failed to play ${n}: ${ag(e)}`)}}async function _g(e,t,n,r){try{let t=fg();t.state===`suspended`&&await t.resume();let i=await t.decodeAudioData(pg(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 ig(`failed to play ${t}: ${ag(e)}`)}}async function vg(e,t,n,r){let i=s()&&typeof AudioContext<`u`,a=o();if(!i&&!a)return ig(`Web Audio API unavailable in this environment`);let c=await mg(e,r);return`exitCode`in c?c:hg(c.fullPath,e)||(i?_g(c.bytes,e,t,n):gg(c.bytes,c.fullPath,e,t,a))}function yg(){return x(`afplay`,async(e,t)=>{if(e.length===0||e.includes(`--help`)||e.includes(`-h`))return rg();let n=ug(e);return`exitCode`in n?n:n.filePath?vg(n.filePath,n.volume,n.rate,t):rg()})}function bg(){return x(`chime`,async(e,t)=>e.includes(`--help`)||e.includes(`-h`)?{stdout:`usage: chime
320
324
 
321
325
  Plays a notification chime sound.
322
326
  Alias for: afplay /shared/sounds/chime.mp3
323
- `,stderr:``,exitCode:0}:og(`/shared/sounds/chime.mp3`,1,1,t))}const lg=e(`agent-command`);function ug(e,t,n){let r=t[n+1];return r===void 0||r.length>0&&r.startsWith(`-`)?{error:`agent: ${e} requires a value`}:r===``?{error:`agent: ${e} requires a non-empty value`}:{value:r,consumed:2}}function dg(e,t,n){let r=ug(e,t,n);return`error`in r?{error:r.error,consumed:0}:Me(r.value)?{value:r.value,consumed:r.consumed}:{error:`agent: ${e} must be one of: ${Ne.join(`, `)}`,consumed:0}}function fg(e,t){let n=ug(`--background-after`,e,t);if(`error`in n)return{error:n.error,consumed:0};let r=Number(n.value);return!Number.isFinite(r)||r<0?{error:`agent: --background-after must be a number of seconds >= 0`,consumed:0}:{value:r,consumed:n.consumed}}function pg(e,t){let n=ug(`--read-only`,e,t);if(`error`in n)return{error:n.error,consumed:0};let r=yg(n.value);return r.length===0?{error:`agent: --read-only requires a non-empty value`,consumed:0}:{value:r,consumed:n.consumed}}function mg(e,t){let n=e[t+1];if(n===void 0||n===``||n.length>0&&n.startsWith(`-`))return{error:`agent: --schema-b64 requires a value`,consumed:0};try{let e=atob(n),t=JSON.parse(new TextDecoder().decode(Uint8Array.from(e,e=>e.charCodeAt(0))));return typeof t!=`object`||!t?{error:`agent: --schema-b64 must decode to a JSON object`,consumed:0}:{value:t,consumed:2}}catch{return{error:`agent: --schema-b64 must be valid base64-encoded JSON`,consumed:0}}}const hg={"-h":(e,t,n,r)=>(r.help=!0,{consumed:1}),"--help":(e,t,n,r)=>(r.help=!0,{consumed:1}),"--model":(e,t,n,r)=>{let i=ug(e,t,n);return`error`in i?{error:i.error,consumed:0}:(r.modelId=i.value,{consumed:i.consumed})},"--thinking":(e,t,n,r)=>{let i=dg(e,t,n);return i.error?{error:i.error,consumed:0}:(r.thinkingLevel=i.value,{consumed:i.consumed})},"--effort":(e,t,n,r)=>{let i=dg(e,t,n);return i.error?{error:i.error,consumed:0}:(r.thinkingLevel=i.value,{consumed:i.consumed})},"--background-after":(e,t,n,r)=>{let i=fg(t,n);return i.error?{error:i.error,consumed:0}:(r.backgroundAfterSeconds=i.value,{consumed:i.consumed})},"--workspace-mode":(e,t,n,r)=>{let i=ug(e,t,n);if(`error`in i)return{error:i.error,consumed:0};let a=je(i.value);return a.ok?(r.workspaceMode=a.mode,{consumed:i.consumed}):{error:`agent: ${a.error}`,consumed:0}},"--read-only":(e,t,n,r)=>{let i=pg(t,n);return i.error?{error:i.error,consumed:0}:(r.visiblePaths=i.value,{consumed:i.consumed})},"--schema-b64":(e,t,n,r)=>{let i=mg(t,n);return i.error?{error:i.error,consumed:0}:(r.schemaOut=i.value,{consumed:i.consumed})},"--persist-session":(e,t,n,r)=>(r.persistSession=!0,{consumed:1}),"--no-persist-session":(e,t,n,r)=>(r.persistSession=!1,{consumed:1})};function gg(e,t,n,r){if(r.positionals.length===2)return r.positionals.push(e),{consumed:1};if(e.length>0&&e.startsWith(`-`)){let i=hg[e];return i?i(e,t,n,r):{error:`agent: unknown flag '${e}'`,consumed:0}}return r.positionals.push(e),{consumed:1}}function _g(e){if(e.help)return{help:!0};if(e.positionals.length<3)return{error:`agent: missing required argument ${[`<cwd>`,`<allowed-commands>`,`<prompt>`][e.positionals.length]}`};if(e.positionals.length>3)return{error:`agent: too many arguments`};let[t,n,r]=e.positionals;return{cwd:t,allowedCommandsRaw:n,prompt:r}}function vg(e){let t={positionals:[],help:!1},n=0;for(;n<e.length;){let r=gg(e[n],e,n,t);if(r.error)return{help:!1,error:r.error};n+=r.consumed}let r=_g(t);if(`help`in r)return{help:!0};if(`error`in r)return{help:!1,error:r.error};let i=r;return{help:!1,cwd:i.cwd,allowedCommandsRaw:i.allowedCommandsRaw,prompt:i.prompt,modelId:t.modelId,visiblePaths:t.visiblePaths,thinkingLevel:t.thinkingLevel,backgroundAfterSeconds:t.backgroundAfterSeconds,structuredOutputSchema:t.schemaOut,persistSession:t.persistSession,workspaceMode:t.workspaceMode}}function yg(e){return e.split(`,`).map(e=>e.trim()).filter(e=>e.length>0)}function bg(e,t){if(e.startsWith(`/`))return y(e);let n=t.length>0?t:`/`;return y(`${n}/${e}`)}function xg(e){return e.split(`,`).map(e=>e.trim()).filter(e=>e.length>0)}function Sg(e){return e==null?`
327
+ `,stderr:``,exitCode:0}:vg(`/shared/sounds/chime.mp3`,1,1,t))}const xg=e(`agent-command`);function Sg(e,t,n){let r=t[n+1];return r===void 0||r.length>0&&r.startsWith(`-`)?{error:`agent: ${e} requires a value`}:r===``?{error:`agent: ${e} requires a non-empty value`}:{value:r,consumed:2}}function Cg(e,t,n){let r=Sg(e,t,n);return`error`in r?{error:r.error,consumed:0}:Me(r.value)?{value:r.value,consumed:r.consumed}:{error:`agent: ${e} must be one of: ${Ne.join(`, `)}`,consumed:0}}function wg(e,t){let n=Sg(`--background-after`,e,t);if(`error`in n)return{error:n.error,consumed:0};let r=Number(n.value);return!Number.isFinite(r)||r<0?{error:`agent: --background-after must be a number of seconds >= 0`,consumed:0}:{value:r,consumed:n.consumed}}function Tg(e,t){let n=Sg(`--read-only`,e,t);if(`error`in n)return{error:n.error,consumed:0};let r=jg(n.value);return r.length===0?{error:`agent: --read-only requires a non-empty value`,consumed:0}:{value:r,consumed:n.consumed}}function Eg(e,t){let n=e[t+1];if(n===void 0||n===``||n.length>0&&n.startsWith(`-`))return{error:`agent: --schema-b64 requires a value`,consumed:0};try{let e=atob(n),t=JSON.parse(new TextDecoder().decode(Uint8Array.from(e,e=>e.charCodeAt(0))));return typeof t!=`object`||!t?{error:`agent: --schema-b64 must decode to a JSON object`,consumed:0}:{value:t,consumed:2}}catch{return{error:`agent: --schema-b64 must be valid base64-encoded JSON`,consumed:0}}}const Dg={"-h":(e,t,n,r)=>(r.help=!0,{consumed:1}),"--help":(e,t,n,r)=>(r.help=!0,{consumed:1}),"--model":(e,t,n,r)=>{let i=Sg(e,t,n);return`error`in i?{error:i.error,consumed:0}:(r.modelId=i.value,{consumed:i.consumed})},"--thinking":(e,t,n,r)=>{let i=Cg(e,t,n);return i.error?{error:i.error,consumed:0}:(r.thinkingLevel=i.value,{consumed:i.consumed})},"--effort":(e,t,n,r)=>{let i=Cg(e,t,n);return i.error?{error:i.error,consumed:0}:(r.thinkingLevel=i.value,{consumed:i.consumed})},"--background-after":(e,t,n,r)=>{let i=wg(t,n);return i.error?{error:i.error,consumed:0}:(r.backgroundAfterSeconds=i.value,{consumed:i.consumed})},"--workspace-mode":(e,t,n,r)=>{let i=Sg(e,t,n);if(`error`in i)return{error:i.error,consumed:0};let a=je(i.value);return a.ok?(r.workspaceMode=a.mode,{consumed:i.consumed}):{error:`agent: ${a.error}`,consumed:0}},"--read-only":(e,t,n,r)=>{let i=Tg(t,n);return i.error?{error:i.error,consumed:0}:(r.visiblePaths=i.value,{consumed:i.consumed})},"--schema-b64":(e,t,n,r)=>{let i=Eg(t,n);return i.error?{error:i.error,consumed:0}:(r.schemaOut=i.value,{consumed:i.consumed})},"--persist-session":(e,t,n,r)=>(r.persistSession=!0,{consumed:1}),"--no-persist-session":(e,t,n,r)=>(r.persistSession=!1,{consumed:1})};function Og(e,t,n,r){if(r.positionals.length===2)return r.positionals.push(e),{consumed:1};if(e.length>0&&e.startsWith(`-`)){let i=Dg[e];return i?i(e,t,n,r):{error:`agent: unknown flag '${e}'`,consumed:0}}return r.positionals.push(e),{consumed:1}}function kg(e){if(e.help)return{help:!0};if(e.positionals.length<3)return{error:`agent: missing required argument ${[`<cwd>`,`<allowed-commands>`,`<prompt>`][e.positionals.length]}`};if(e.positionals.length>3)return{error:`agent: too many arguments`};let[t,n,r]=e.positionals;return{cwd:t,allowedCommandsRaw:n,prompt:r}}function Ag(e){let t={positionals:[],help:!1},n=0;for(;n<e.length;){let r=Og(e[n],e,n,t);if(r.error)return{help:!1,error:r.error};n+=r.consumed}let r=kg(t);if(`help`in r)return{help:!0};if(`error`in r)return{help:!1,error:r.error};let i=r;return{help:!1,cwd:i.cwd,allowedCommandsRaw:i.allowedCommandsRaw,prompt:i.prompt,modelId:t.modelId,visiblePaths:t.visiblePaths,thinkingLevel:t.thinkingLevel,backgroundAfterSeconds:t.backgroundAfterSeconds,structuredOutputSchema:t.schemaOut,persistSession:t.persistSession,workspaceMode:t.workspaceMode}}function jg(e){return e.split(`,`).map(e=>e.trim()).filter(e=>e.length>0)}function Mg(e,t){if(e.startsWith(`/`))return y(e);let n=t.length>0?t:`/`;return y(`${n}/${e}`)}function Ng(e){return e.split(`,`).map(e=>e.trim()).filter(e=>e.length>0)}function Pg(e){return e==null?`
324
328
  `:e.replace(/\n+$/,``)+`
325
- `}function Cg(e){return e==null||e===``?``:e.replace(/\n+$/,``)+`
326
- `}function wg(){let e=globalThis.__slicc_agent;if(!(!e||typeof e.spawn!=`function`))return e}function Tg(e,t,n){return t?`agent: cwd not found: ${n}\n`:e&&!e.isDirectory?`agent: cwd not a directory: ${n}\n`:null}function Eg(e,t,n){let r=e;return typeof r.canWrite==`function`&&!r.canWrite(t)?`agent: cwd not writable: ${n}\n`:null}function Dg(e,t,n,r,i,a){let o={cwd:t,allowedCommands:n,prompt:r};e.modelId!==void 0&&(o.modelId=e.modelId),e.visiblePaths!==void 0&&(o.visiblePaths=e.visiblePaths),e.thinkingLevel!==void 0&&(o.thinkingLevel=e.thinkingLevel),e.backgroundAfterSeconds!==void 0&&(o.backgroundAfterSeconds=e.backgroundAfterSeconds),e.structuredOutputSchema!==void 0&&(o.structuredOutputSchema=e.structuredOutputSchema),e.persistSession!==void 0&&(o.persistSession=e.persistSession),e.workspaceMode!==void 0&&(o.workspaceMode=e.workspaceMode),i.cwd&&i.cwd.length>0&&(o.invokingCwd=i.cwd),i.signal!==void 0&&(o.signal=i.signal);let s=a?.();return s!==void 0&&s.length>0&&(o.parentJid=s),o}function Og(e={}){let{getParentJid:t}=e;return x(`agent`,async(e,n)=>{let r=vg(e);if(r.help)return{stdout:`usage: agent <cwd> <allowed-commands> <prompt>
329
+ `}function Fg(e){return e==null||e===``?``:e.replace(/\n+$/,``)+`
330
+ `}function Ig(){let e=globalThis.__slicc_agent;if(!(!e||typeof e.spawn!=`function`))return e}function Lg(e,t,n){return t?`agent: cwd not found: ${n}\n`:e&&!e.isDirectory?`agent: cwd not a directory: ${n}\n`:null}function Rg(e,t,n){let r=e;return typeof r.canWrite==`function`&&!r.canWrite(t)?`agent: cwd not writable: ${n}\n`:null}function zg(e,t,n,r,i,a){let o={cwd:t,allowedCommands:n,prompt:r};e.modelId!==void 0&&(o.modelId=e.modelId),e.visiblePaths!==void 0&&(o.visiblePaths=e.visiblePaths),e.thinkingLevel!==void 0&&(o.thinkingLevel=e.thinkingLevel),e.backgroundAfterSeconds!==void 0&&(o.backgroundAfterSeconds=e.backgroundAfterSeconds),e.structuredOutputSchema!==void 0&&(o.structuredOutputSchema=e.structuredOutputSchema),e.persistSession!==void 0&&(o.persistSession=e.persistSession),e.workspaceMode!==void 0&&(o.workspaceMode=e.workspaceMode),i.cwd&&i.cwd.length>0&&(o.invokingCwd=i.cwd),i.signal!==void 0&&(o.signal=i.signal);let s=a?.();return s!==void 0&&s.length>0&&(o.parentJid=s),o}function Bg(e={}){let{getParentJid:t}=e;return x(`agent`,async(e,n)=>{let r=Ag(e);if(r.help)return{stdout:`usage: agent <cwd> <allowed-commands> <prompt>
327
331
 
328
332
  Spawns a sub-scoop, feeds it a task, blocks until the agent loop completes,
329
333
  then prints the scoop's final message on stdout.
@@ -410,20 +414,20 @@ Examples:
410
414
  agent --workspace-mode private . "*" "work only in this directory"
411
415
  agent --background-after 60 . "*" "run the slow build and report"
412
416
  `,stderr:``,exitCode:0};if(r.error)return{stdout:``,stderr:`${r.error}\n`,exitCode:1};let i=r.cwd??``;if(i===``)return{stdout:``,stderr:`agent: <cwd> must not be empty
413
- `,exitCode:1};let a=bg(i,n.cwd),o=xg(r.allowedCommandsRaw??``),s=r.prompt??``,c=null,l=!1;try{c=await n.fs.stat(a)}catch{l=!0}let u=Tg(c,l,i);if(u)return{stdout:``,stderr:u,exitCode:1};let d=Eg(n.fs,a,i);if(d)return{stdout:``,stderr:d,exitCode:1};let f=wg();return f?kg(f,Dg(r,a,o,s,n,t)):{stdout:``,stderr:`agent: orchestrator bridge not available
414
- `,exitCode:1}})}async function kg(e,t){try{let n=await e.spawn(t),r=typeof n?.exitCode==`number`?n.exitCode:0,i=n?.finalText;return r===0?{stdout:Sg(i),stderr:``,exitCode:0}:{stdout:``,stderr:Cg(i),exitCode:r}}catch(e){let t=e instanceof Error?e.message:String(e);return lg.error(`agent bridge threw`,e),{stdout:``,stderr:`${t}\n`,exitCode:1}}}const Ag=[`bg`,`caller`,`disown`,`enable`,`fc`,`fg`,`jobs`,`logout`,`suspend`,`times`,`trap`,`ulimit`,`umask`];function jg(){return Ag.map(e=>x(e,async(t,n)=>{let{runBashBuiltin:r}=await import(`./run-C-OJvA2b.js`);return r(e,t,n)}))}function Mg(e,t){e.escaped?e.escaped=!1:t===`\\`?e.escaped=!0:t===`"`&&(e.inString=!1)}function Ng(e,t){let n=t+2;for(;n<e.length&&e[n]!==`
415
- `&&e[n]!==`\r`;)n++;return{text:` `.repeat(n-t),end:n-1}}function Pg(e,t){let n=` `,r=t+2;for(;r<e.length&&(e[r]!==`*`||e[r+1]!==`/`);)n+=e[r]===`
416
- `||e[r]===`\r`?e[r]:` `,r++;return r<e.length&&(n+=` `,r++),{text:n,end:r}}function Fg(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,Mg(n,i);continue}if(i===`"`){n.inString=!0,t+=i;continue}if(i===`/`&&a===`/`){let n=Ng(e,r);t+=n.text,r=n.end;continue}if(i===`/`&&a===`*`){let n=Pg(e,r);t+=n.text,r=n.end;continue}t+=i}return t}function Ig(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 Lg(e){return typeof e==`object`&&!!e&&!Array.isArray(e)}function Rg(e){let t=e.charCodeAt(0)===65279?e.slice(1):e,n=JSON.parse(Ig(Fg(t)));if(!Lg(n))throw Error(`configuration must contain a JSON object`);return n}function zg(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 Bg(e){let t=e.plugins;if(!Array.isArray(t))return null;for(let e of t){let t=zg(e);if(t!==null)return t}return null}async function Vg(e,t){let n=y(t);for(;;){if(!n.split(`/`).includes(`node_modules`))for(let t of[`biome.json`,`biome.jsonc`]){let r=b(n,t);if(await e.exists(r))return r}if(n===`/`)return null;n=Ee(n).dir}}async function Hg(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=Rg(r),i=Bg(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 Ug(e,t,n,r){if(r!==null){let n=y(e.resolvePath(t,r));return await e.exists(n)?Hg(e,n,2):{ok:!1,error:`biome: configuration file not found: ${n}`,exitCode:2}}let i=await Vg(e,n);return i===null?{ok:!0,resolved:null}:Hg(e,i,1)}const Wg=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(`.`)),Gg={amp:`&`,apos:`'`,gt:`>`,lt:`<`,nbsp:` `,quot:`"`};function Kg(e){let t=e.slice(1,-1);if(!t.startsWith(`#`))return Gg[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 qg(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+=`
417
- `,r=!1):s&&Wg.has(s)&&t.length>0&&!t.endsWith(`
417
+ `,exitCode:1};let a=Mg(i,n.cwd),o=Ng(r.allowedCommandsRaw??``),s=r.prompt??``,c=null,l=!1;try{c=await n.fs.stat(a)}catch{l=!0}let u=Lg(c,l,i);if(u)return{stdout:``,stderr:u,exitCode:1};let d=Rg(n.fs,a,i);if(d)return{stdout:``,stderr:d,exitCode:1};let f=Ig();return f?Vg(f,zg(r,a,o,s,n,t)):{stdout:``,stderr:`agent: orchestrator bridge not available
418
+ `,exitCode:1}})}async function Vg(e,t){try{let n=await e.spawn(t),r=typeof n?.exitCode==`number`?n.exitCode:0,i=n?.finalText;return r===0?{stdout:Pg(i),stderr:``,exitCode:0}:{stdout:``,stderr:Fg(i),exitCode:r}}catch(e){let t=e instanceof Error?e.message:String(e);return xg.error(`agent bridge threw`,e),{stdout:``,stderr:`${t}\n`,exitCode:1}}}const Hg=[`bg`,`caller`,`disown`,`enable`,`fc`,`fg`,`jobs`,`logout`,`suspend`,`times`,`trap`,`ulimit`,`umask`];function Ug(){return Hg.map(e=>x(e,async(t,n)=>{let{runBashBuiltin:r}=await import(`./run-C-OJvA2b.js`);return r(e,t,n)}))}function Wg(e,t){e.escaped?e.escaped=!1:t===`\\`?e.escaped=!0:t===`"`&&(e.inString=!1)}function Gg(e,t){let n=t+2;for(;n<e.length&&e[n]!==`
419
+ `&&e[n]!==`\r`;)n++;return{text:` `.repeat(n-t),end:n-1}}function Kg(e,t){let n=` `,r=t+2;for(;r<e.length&&(e[r]!==`*`||e[r+1]!==`/`);)n+=e[r]===`
420
+ `||e[r]===`\r`?e[r]:` `,r++;return r<e.length&&(n+=` `,r++),{text:n,end:r}}function qg(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,Wg(n,i);continue}if(i===`"`){n.inString=!0,t+=i;continue}if(i===`/`&&a===`/`){let n=Gg(e,r);t+=n.text,r=n.end;continue}if(i===`/`&&a===`*`){let n=Kg(e,r);t+=n.text,r=n.end;continue}t+=i}return t}function Jg(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 Yg(e){return typeof e==`object`&&!!e&&!Array.isArray(e)}function Xg(e){let t=e.charCodeAt(0)===65279?e.slice(1):e,n=JSON.parse(Jg(qg(t)));if(!Yg(n))throw Error(`configuration must contain a JSON object`);return n}function Zg(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 Qg(e){let t=e.plugins;if(!Array.isArray(t))return null;for(let e of t){let t=Zg(e);if(t!==null)return t}return null}async function $g(e,t){let n=y(t);for(;;){if(!n.split(`/`).includes(`node_modules`))for(let t of[`biome.json`,`biome.jsonc`]){let r=b(n,t);if(await e.exists(r))return r}if(n===`/`)return null;n=Ee(n).dir}}async function e_(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=Xg(r),i=Qg(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=y(e.resolvePath(t,r));return await e.exists(n)?e_(e,n,2):{ok:!1,error:`biome: configuration file not found: ${n}`,exitCode:2}}let i=await $g(e,n);return i===null?{ok:!0,resolved:null}:e_(e,i,1)}const n_=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(`.`)),r_={amp:`&`,apos:`'`,gt:`>`,lt:`<`,nbsp:` `,quot:`"`};function i_(e){let t=e.slice(1,-1);if(!t.startsWith(`#`))return r_[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 a_(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+=`
421
+ `,r=!1):s&&n_.has(s)&&t.length>0&&!t.endsWith(`
418
422
  `)&&(t+=`
419
- `,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,Kg)}const Jg=new Set([`js`,`mjs`,`cjs`,`jsx`,`ts`,`mts`,`cts`,`tsx`,`json`,`jsonc`,`css`,`graphql`,`gql`,`html`,`svelte`,`vue`,`astro`,`jsh`,`bsh`]);function Yg(e){let t=e.lastIndexOf(`.`);return t<0?!1:Jg.has(e.slice(t+1).toLowerCase())}function Xg(e){return e.endsWith(`.jsh`)||e.endsWith(`.bsh`)?`${e.slice(0,-4)}.js`:e}const Zg=`async function __slicc() {
420
- `,Qg=new TextEncoder().encode(Zg).length;function $g(e){return e.endsWith(`.jsh`)||e.endsWith(`.bsh`)}function e_(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 t_(e){let t=(e.endsWith(`
423
+ `,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,i_)}const o_=new Set([`js`,`mjs`,`cjs`,`jsx`,`ts`,`mts`,`cts`,`tsx`,`json`,`jsonc`,`css`,`graphql`,`gql`,`html`,`svelte`,`vue`,`astro`,`jsh`,`bsh`]);function s_(e){let t=e.lastIndexOf(`.`);return t<0?!1:o_.has(e.slice(t+1).toLowerCase())}function c_(e){return e.endsWith(`.jsh`)||e.endsWith(`.bsh`)?`${e.slice(0,-4)}.js`:e}const l_=`async function __slicc() {
424
+ `,u_=new TextEncoder().encode(l_).length;function d_(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 p_(e){let t=(e.endsWith(`
421
425
  `)?e.slice(0,-1):e).split(`
422
426
  `);return t.shift(),t.pop(),t.map(e=>e.startsWith(` `)?e.slice(1):e).join(`
423
427
  `)+`
424
- `}function n_(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 i_(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===`
428
+ `}function m_(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 h_=new Set([`check`,`lint`,`format`]);function g_(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===`
425
429
  `&&l++;let u=c.lastIndexOf(`
426
- `),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 a_=`2.5.13`,o_=`6.0.0`,s_=Kr,c_=`@biomejs/wasm-web@${a_} @biomejs/js-api@${o_} esbuild-wasm@${s_}`,l_={"@biomejs/wasm-web":`@biomejs/wasm-web@${a_}`,"@biomejs/js-api":`@biomejs/js-api@${o_}`,"esbuild-wasm":`esbuild-wasm@${s_}`},u_=`run: ${M} ${c_} (no network fallback)`,d_=`biome - thin wrapper over the ipk-loaded @biomejs/wasm-web
430
+ `),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 __=`2.5.13`,v_=`6.0.0`,y_=Kr,b_=`@biomejs/wasm-web@${__} @biomejs/js-api@${v_} esbuild-wasm@${y_}`,x_={"@biomejs/wasm-web":`@biomejs/wasm-web@${__}`,"@biomejs/js-api":`@biomejs/js-api@${v_}`,"esbuild-wasm":`esbuild-wasm@${y_}`},S_=`run: ${M} ${b_} (no network fallback)`,C_=`biome - thin wrapper over the ipk-loaded @biomejs/wasm-web
427
431
 
428
432
  Usage:
429
433
  biome <subcommand> [options] [files...]
@@ -465,20 +469,20 @@ Exit codes:
465
469
 
466
470
  Install:
467
471
  Inert until the backing packages are installed in node_modules:
468
- ${M} ${c_}
472
+ ${M} ${b_}
469
473
  All three packages must be present in the VFS \`node_modules\` for
470
474
  lint/format to run (loading the wasm-web ESM glue also needs the
471
475
  esbuild-wasm transpiler). There is no bundled binary, no CDN
472
476
  fallback; a missing package exits non-zero with a clear \`ipk add\` hint.
473
- `;function f_(e,t,n){let r=e[t+1];if(typeof r!=`string`||r.startsWith(`-`))throw Error(`biome: ${n} requires a value`);return r}function p_(e){if(!e)throw Error(`biome: --reporter requires a value`);if(e!==`plain`&&e!==`json`)throw Error(`biome: unknown reporter: ${e}`);return e}function m_(e){return e.some((t,n)=>t===`--json`||t===`--reporter=json`||t===`--reporter`&&e[n+1]===`json`)}function h_(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=f_(t,n,r),n+1;case`--config-path`:return e.configPath=f_(t,n,r),n+1;case`--reporter`:return e.reporter=p_(f_(t,n,r)),n+1}return r.startsWith(`--stdin-file-path=`)?(e.stdinFilePath=g_(r,`--stdin-file-path`),n):r.startsWith(`--config-path=`)?(e.configPath=g_(r,`--config-path`),n):r.startsWith(`--reporter=`)?(e.reporter=p_(r.slice(11)),n):null}function g_(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=h_(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 v_(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 y_(e,n,r):Yg(n)&&r.push(n)}return{files:r,missing:i}}async function y_(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 y_(e,r,n):Yg(r)&&n.push(r)}}async function b_(e){let t;try{t=await lr(`@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 x_(e){let t;try{t=await lr(`@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 lr(`@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 lr(`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:Ee(t.path).dir}}function S_(e,t){let n=Xg(y(e));if(t===null)return n;let r=De(t),i=De(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 C_=`
477
+ `;function w_(e,t,n){let r=e[t+1];if(typeof r!=`string`||r.startsWith(`-`))throw Error(`biome: ${n} requires a value`);return r}function T_(e){if(!e)throw Error(`biome: --reporter requires a value`);if(e!==`plain`&&e!==`json`)throw Error(`biome: unknown reporter: ${e}`);return e}function E_(e){return e.some((t,n)=>t===`--json`||t===`--reporter=json`||t===`--reporter`&&e[n+1]===`json`)}function D_(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=w_(t,n,r),n+1;case`--config-path`:return e.configPath=w_(t,n,r),n+1;case`--reporter`:return e.reporter=T_(w_(t,n,r)),n+1}return r.startsWith(`--stdin-file-path=`)?(e.stdinFilePath=O_(r,`--stdin-file-path`),n):r.startsWith(`--config-path=`)?(e.configPath=O_(r,`--config-path`),n):r.startsWith(`--reporter=`)?(e.reporter=T_(r.slice(11)),n):null}function O_(e,t){let n=e.slice(t.length+1);if(!n)throw Error(`biome: ${t} requires a value`);return n}function k_(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=D_(t,e,n);if(i!==null){n=i;continue}if(t.subcommand===null&&h_.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 A_(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 j_(e,n,r):s_(n)&&r.push(n)}return{files:r,missing:i}}async function j_(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 j_(e,r,n):s_(r)&&n.push(r)}}async function M_(e){let t;try{t=await lr(`@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 N_(e){let t;try{t=await lr(`@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 lr(`@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 lr(`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:Ee(t.path).dir}}function P_(e,t){let n=c_(y(e));if(t===null)return n;let r=De(t),i=De(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 F_=`
474
478
  const fs = require('fs');
475
- const JSH_WRAP_PREFIX = ${JSON.stringify(Zg)};
479
+ const JSH_WRAP_PREFIX = ${JSON.stringify(l_)};
476
480
  const JSH_WRAP_SUFFIX = ${JSON.stringify(`
477
481
  }`)};
478
- const JSH_WRAP_PREFIX_BYTES = ${Qg};
479
- const shiftBiomeSpans = ${e_.toString()};
480
- const unwrapFormattedJsh = ${t_.toString()};
481
- const biomeDiagnosticToJson = ${i_.toString()};
482
+ const JSH_WRAP_PREFIX_BYTES = ${u_};
483
+ const shiftBiomeSpans = ${f_.toString()};
484
+ const unwrapFormattedJsh = ${p_.toString()};
485
+ const biomeDiagnosticToJson = ${g_.toString()};
482
486
  function supportsFeature(biome, projectKey, path, feature) {
483
487
  const workspace = biome.workspace;
484
488
  if (!workspace || typeof workspace.fileFeatures !== 'function') {
@@ -602,28 +606,28 @@ async function main() {
602
606
  process.stdout.write(JSON.stringify(results));
603
607
  }
604
608
  main().catch((err) => { process.stderr.write(String(err && err.message || err) + '\\n'); process.exit(1); });
605
- `;function w_(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: ${M} ${l_[n]??n}); ${u_}\n`}async function T_(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:S_(e.path,a),source:e.source,wrap:$g(e.path)}))},u=[`node`,`[biome-helper]`,JSON.stringify(l),c];return E_(await Lt(C_,u,e,void 0,{filename:`[biome-helper]`}))}function E_(e){if(e.exitCode!==0)return{results:[],stderr:w_(e.stderr)??e.stderr,exitCode:e.exitCode};if(e.stdout.trim()===``){let t=w_(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)
606
- `,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 D_(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 O_(e,t){let n=await x_(t);if(!n.ok)return{stdout:``,stderr:`biome: ${n.missing} is not installed (run: ${M} ${l_[n.missing]??n.missing}); ${u_}\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: ${M} ${l_[`@biomejs/wasm-web`]})\n`,exitCode:1}}async function k_(e,t){if(t.paths.length===0&&e.stdin)return{inputs:[{path:t.stdinFilePath??`/stdin.ts`,source:N(e.stdin)}],missingErrText:``};if(t.paths.length===0)return{stdout:``,stderr:`biome: no files or directories specified
607
- `,exitCode:2};let n=await v_(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 A_(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(qg(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 j_(e){let t=await b_(e);return t?{stdout:`${t}\n`,stderr:``,exitCode:0}:{stdout:``,stderr:`biome: @biomejs/wasm-web is not installed (run: ${M} @biomejs/wasm-web@${a_}); ${u_}\n`,exitCode:1}}async function M_(e,t){return e.showHelp?D_(e.reporter,{stdout:d_,stderr:``,exitCode:0},`usage`):e.showVersion?D_(e.reporter,await j_(t),`runtime`):null}function N_(e,t){let n=e.paths[0];if(!n)return``;try{return t.fs.resolvePath(t.cwd,n)}catch{return``}}async function P_(e,t){let n=n_(t),r=await M_(e,n);if(r)return r;if(e.subcommand===null)return D_(e.reporter,{stdout:``,stderr:`biome: missing subcommand (expected check, lint, or format)
608
- `,exitCode:2},`usage`);let i=await k_(t,e);if(`exitCode`in i)return D_(e.reporter,i,`io`);let a=e.paths.length===0&&t.stdin?t.cwd:Ee(i.inputs[0].path).dir,o=await Ug(t.fs,t.cwd,a,e.configPath);if(!o.ok)return D_(e.reporter,{stdout:``,stderr:`${o.error}\n`,exitCode:o.exitCode},`configuration`,i.inputs[0].path);let s=await O_(t,n);if(`exitCode`in s)return D_(e.reporter,s,`runtime`,i.inputs[0].path);let c=await T_(t,e.subcommand,e.write,e.check,o.resolved?.configuration??null,o.resolved===null?null:Ee(o.resolved.path).dir,e.reporter,i.inputs,s.wasmPath);return c.exitCode===0?A_(t,e,i.inputs,c,i.missingErrText):D_(e.reporter,{stdout:``,stderr:i.missingErrText+c.stderr,exitCode:c.exitCode},`runtime`,i.inputs[0].path)}function F_(){return x(`biome`,async(e,t)=>{let n;try{n=__(e)}catch(t){return D_(m_(e)?`json`:`plain`,{stdout:``,stderr:`${t instanceof Error?t.message:String(t)}\n`,exitCode:2},`usage`)}try{return await P_(n,t)}catch(e){if(n.reporter===`plain`)throw e;return D_(`json`,{stdout:``,stderr:`biome: ${e instanceof Error?e.message:String(e)}\n`,exitCode:1},`runtime`,N_(n,t))}})}function I_(e=`biscotto`){return x(e,async(t,n)=>{let{runBiscotto:r}=await import(`./run-BkjrFIPc.js`);return r(e,t,n)})}function L_(e={}){let t=e.getFollowers??ce,n=e.getPanelRpc??o,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 R_=[`--detail`,`--runtime`];function z_(e){return{stdout:``,stderr:`cherry-emit: ${e}\n`,exitCode:1}}function B_(e){let t=S(e,{value:R_});return`error`in t?z_(t.error):{positionals:t.positionals,detailJson:t.values.get(`--detail`),runtime:t.values.get(`--runtime`)}}function V_(e,t){return e.length===0?z_(`no cherry follower runtime is connected`):t?e.includes(t)?t:z_(`runtime '${t}' not connected. Available: ${e.join(`, `)}`):e.length>1?z_(`multiple runtimes connected, pass --runtime <id>. Available: ${e.join(`, `)}`):e[0]}function H_(e){if(e===void 0)return{detail:void 0};try{return{detail:JSON.parse(e)}}catch{return z_(`--detail must be valid JSON`)}}function U_(e={}){let t=e.registry??L_();return x(`cherry-emit`,async e=>{if(C(e,{valueFlags:R_}))return{stdout:`cherry-emit - push a slicc.event to a cherry host page through a follower runtime
609
+ `;function I_(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: ${M} ${x_[n]??n}); ${S_}\n`}async function L_(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:P_(e.path,a),source:e.source,wrap:d_(e.path)}))},u=[`node`,`[biome-helper]`,JSON.stringify(l),c];return R_(await Lt(F_,u,e,void 0,{filename:`[biome-helper]`}))}function R_(e){if(e.exitCode!==0)return{results:[],stderr:I_(e.stderr)??e.stderr,exitCode:e.exitCode};if(e.stdout.trim()===``){let t=I_(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)
610
+ `,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 z_(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 B_(e,t){let n=await N_(t);if(!n.ok)return{stdout:``,stderr:`biome: ${n.missing} is not installed (run: ${M} ${x_[n.missing]??n.missing}); ${S_}\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: ${M} ${x_[`@biomejs/wasm-web`]})\n`,exitCode:1}}async function V_(e,t){if(t.paths.length===0&&e.stdin)return{inputs:[{path:t.stdinFilePath??`/stdin.ts`,source:N(e.stdin)}],missingErrText:``};if(t.paths.length===0)return{stdout:``,stderr:`biome: no files or directories specified
611
+ `,exitCode:2};let n=await A_(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 H_(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(a_(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 U_(e){let t=await M_(e);return t?{stdout:`${t}\n`,stderr:``,exitCode:0}:{stdout:``,stderr:`biome: @biomejs/wasm-web is not installed (run: ${M} @biomejs/wasm-web@${__}); ${S_}\n`,exitCode:1}}async function W_(e,t){return e.showHelp?z_(e.reporter,{stdout:C_,stderr:``,exitCode:0},`usage`):e.showVersion?z_(e.reporter,await U_(t),`runtime`):null}function G_(e,t){let n=e.paths[0];if(!n)return``;try{return t.fs.resolvePath(t.cwd,n)}catch{return``}}async function K_(e,t){let n=m_(t),r=await W_(e,n);if(r)return r;if(e.subcommand===null)return z_(e.reporter,{stdout:``,stderr:`biome: missing subcommand (expected check, lint, or format)
612
+ `,exitCode:2},`usage`);let i=await V_(t,e);if(`exitCode`in i)return z_(e.reporter,i,`io`);let a=e.paths.length===0&&t.stdin?t.cwd:Ee(i.inputs[0].path).dir,o=await t_(t.fs,t.cwd,a,e.configPath);if(!o.ok)return z_(e.reporter,{stdout:``,stderr:`${o.error}\n`,exitCode:o.exitCode},`configuration`,i.inputs[0].path);let s=await B_(t,n);if(`exitCode`in s)return z_(e.reporter,s,`runtime`,i.inputs[0].path);let c=await L_(t,e.subcommand,e.write,e.check,o.resolved?.configuration??null,o.resolved===null?null:Ee(o.resolved.path).dir,e.reporter,i.inputs,s.wasmPath);return c.exitCode===0?H_(t,e,i.inputs,c,i.missingErrText):z_(e.reporter,{stdout:``,stderr:i.missingErrText+c.stderr,exitCode:c.exitCode},`runtime`,i.inputs[0].path)}function q_(){return x(`biome`,async(e,t)=>{let n;try{n=k_(e)}catch(t){return z_(E_(e)?`json`:`plain`,{stdout:``,stderr:`${t instanceof Error?t.message:String(t)}\n`,exitCode:2},`usage`)}try{return await K_(n,t)}catch(e){if(n.reporter===`plain`)throw e;return z_(`json`,{stdout:``,stderr:`biome: ${e instanceof Error?e.message:String(e)}\n`,exitCode:1},`runtime`,G_(n,t))}})}function J_(e=`biscotto`){return x(e,async(t,n)=>{let{runBiscotto:r}=await import(`./run-BkjrFIPc.js`);return r(e,t,n)})}function Y_(e={}){let t=e.getFollowers??ce,n=e.getPanelRpc??o,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 X_=[`--detail`,`--runtime`];function Z_(e){return{stdout:``,stderr:`cherry-emit: ${e}\n`,exitCode:1}}function Q_(e){let t=S(e,{value:X_});return`error`in t?Z_(t.error):{positionals:t.positionals,detailJson:t.values.get(`--detail`),runtime:t.values.get(`--runtime`)}}function $_(e,t){return e.length===0?Z_(`no cherry follower runtime is connected`):t?e.includes(t)?t:Z_(`runtime '${t}' not connected. Available: ${e.join(`, `)}`):e.length>1?Z_(`multiple runtimes connected, pass --runtime <id>. Available: ${e.join(`, `)}`):e[0]}function ev(e){if(e===void 0)return{detail:void 0};try{return{detail:JSON.parse(e)}}catch{return Z_(`--detail must be valid JSON`)}}function tv(e={}){let t=e.registry??Y_();return x(`cherry-emit`,async e=>{if(C(e,{valueFlags:X_}))return{stdout:`cherry-emit - push a slicc.event to a cherry host page through a follower runtime
609
613
 
610
614
  Usage: cherry-emit <name> [--detail <json>] [--runtime <id>]
611
615
 
612
616
  --detail <json> JSON payload delivered as the event detail
613
617
  --runtime <id> Target a specific follower runtime (canonical id, e.g. follower-abc).
614
618
  Defaults to the sole connected runtime; required when more than one.
615
- `,stderr:``,exitCode:0};let n=B_(e);if(`exitCode`in n)return n;let r=n.positionals[0];if(!r)return z_(`event name is required`);let i=V_(t.listRuntimeIds(),n.runtime);if(typeof i!=`string`)return i;let a=H_(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}:z_(`failed to deliver '${r}' to ${i}: ${o.reason}`)})}function W_(e){return e instanceof Error?e.message:String(e)}function G_(){return{stdout:`usage: pbcopy
619
+ `,stderr:``,exitCode:0};let n=Q_(e);if(`exitCode`in n)return n;let r=n.positionals[0];if(!r)return Z_(`event name is required`);let i=$_(t.listRuntimeIds(),n.runtime);if(typeof i!=`string`)return i;let a=ev(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}:Z_(`failed to deliver '${r}' to ${i}: ${o.reason}`)})}function nv(e){return e instanceof Error?e.message:String(e)}function rv(){return{stdout:`usage: pbcopy
616
620
 
617
621
  Copy stdin to the clipboard.
618
622
  Example: echo hello | pbcopy
619
- `,stderr:``,exitCode:0}}function K_(){return{stdout:`usage: pbpaste
623
+ `,stderr:``,exitCode:0}}function iv(){return{stdout:`usage: pbpaste
620
624
 
621
625
  Paste clipboard contents to stdout.
622
- `,stderr:``,exitCode:0}}function q_(e){return{stdout:`usage: ${e} [-i|-o]\n\n -i Force copy mode (read from stdin)
626
+ `,stderr:``,exitCode:0}}function av(e){return{stdout:`usage: ${e} [-i|-o]\n\n -i Force copy mode (read from stdin)
623
627
  -o Force paste mode (write to stdout)
624
628
  (default) Auto-detect: stdin present = copy, no stdin = paste
625
- Example: echo hello | ${e}\n Example: ${e} -o > file.txt\n`,stderr:``,exitCode:0}}async function J_(e,t){let n=!!globalThis.navigator?.clipboard,r=n?null:o();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: ${W_(e)}\n`,exitCode:1}}}async function Y_(e){let t=!!globalThis.navigator?.clipboard,n=t?null:o();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: ${W_(t)}\n`,exitCode:1}}}function X_(){return x(`pbcopy`,async(e,t)=>e.includes(`--help`)||e.includes(`-h`)?G_():J_(N(t.stdin),`pbcopy`))}function Z_(){return x(`pbpaste`,async e=>e.includes(`--help`)||e.includes(`-h`)?K_():Y_(`pbpaste`))}function Q_(e){return x(e,async(t,n)=>{if(t.includes(`--help`)||t.includes(`-h`))return q_(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 Y_(e);let a=N(n.stdin);return r||a.length>0?J_(a,e):Y_(e)})}function $_(){return x(`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
626
- `,exitCode:2};let i=await ev(t,r[0]);if(`error`in i)return n?{...i.error,stderr:``}:i.error;let a=await ev(t,r[1]);if(`error`in a)return n?{...a.error,stderr:``}:a.error;let o=tv(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 ev(e,t){if(t===`-`){let t=Qr(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 tv(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 nv(e={}){return x(`computer`,async(t,n)=>{let{runComputer:r}=await import(`./run-BI7sTnua.js`).then(e=>e.t);return r(t,n,e)})}var rv=`/assets/AdobeClean-Regular-CVsq5gF7.otf`;function iv(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 av(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 ov=`AdobeClean-Regular.otf`,sv=new WeakSet;let cv=null;function lv(){return{stdout:`usage: convert [input ...] [operations...] [output]
629
+ Example: echo hello | ${e}\n Example: ${e} -o > file.txt\n`,stderr:``,exitCode:0}}async function ov(e,t){let n=!!globalThis.navigator?.clipboard,r=n?null:o();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: ${nv(e)}\n`,exitCode:1}}}async function sv(e){let t=!!globalThis.navigator?.clipboard,n=t?null:o();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: ${nv(t)}\n`,exitCode:1}}}function cv(){return x(`pbcopy`,async(e,t)=>e.includes(`--help`)||e.includes(`-h`)?rv():ov(N(t.stdin),`pbcopy`))}function lv(){return x(`pbpaste`,async e=>e.includes(`--help`)||e.includes(`-h`)?iv():sv(`pbpaste`))}function uv(e){return x(e,async(t,n)=>{if(t.includes(`--help`)||t.includes(`-h`))return av(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 sv(e);let a=N(n.stdin);return r||a.length>0?ov(a,e):sv(e)})}function dv(){return x(`cmp`,async(e,t)=>{let n=e.some(e=>e===`-s`||e===`--quiet`||e===`--silent`),r=e.filter(e=>![`-s`,`--quiet`,`--silent`].includes(e));if(r.length!==2||r.some(e=>e.startsWith(`-`)&&e!==`-`))return{stdout:``,stderr:`cmp: usage: cmp [-s|--quiet|--silent] FILE1 FILE2
630
+ `,exitCode:2};let i=await 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=pv(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=Qr(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 pv(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 mv(e={}){return x(`computer`,async(t,n)=>{let{runComputer:r}=await import(`./run-BI7sTnua.js`).then(e=>e.t);return r(t,n,e)})}var hv=`/assets/AdobeClean-Regular-CVsq5gF7.otf`;function gv(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 _v(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`,yv=new WeakSet;let bv=null;function xv(){return{stdout:`usage: convert [input ...] [operations...] [output]
627
631
 
628
632
  Operations:
629
633
  -resize GEOMETRY resize; supports %, !, ^, >, and < modifiers
@@ -664,7 +668,7 @@ suffix (0-based, as ImageMagick does); page 0 is used when none is given:
664
668
  convert -density 150 doc.pdf page0.png
665
669
  convert doc.pdf[2] -resize 800x page3.png
666
670
  Use pdftoppm to rasterize a whole document in one pass.
667
- `,stderr:``,exitCode:0}}const uv=new Map([[`-resize`,1],[`-thumbnail`,1],[`-rotate`,1],[`-crop`,1],[`-quality`,1],[`-auto-orient`,0],[`-auto-gamma`,0],[`-auto-level`,0],[`-flip`,0],[`-flop`,0],[`-strip`,0],[`-trim`,0],[`-negate`,0],[`-normalize`,0],[`-background`,1],[`-extent`,1],[`-alpha`,1],[`-colorspace`,1],[`-transparent`,1],[`-blur`,1],[`-sharpen`,1],[`-gravity`,1],[`-fill`,1],[`-undercolor`,1],[`-pointsize`,1],[`-density`,1],[`-annotate`,2]]);var dv=class{tokens;index=0;density=72;constructor(e){this.tokens=e}parse(){return this.readSequence(!1)}readSequence(e){let t=[],n=[],r=!1;for(;this.index<this.tokens.length;){let i=this.tokens[this.index];if(i===`)`){if(!e)throw Error(`unexpected )`);this.index++,r=!0;break}i===`(`?this.readGroup(t,n):i===`+append`||i===`-append`?this.append(t,i):uv.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:fv(n),operations:[]}),this.index++}readOperation(e,t,n){let r=uv.get(n),i=this.tokens.slice(this.index+1,this.index+1+r);if(i.length!==r||i.some(e=>hv(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=mv(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 fv(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 pv(e){if(e.length<2)throw Error(`expected exactly one input file and one output file`);let t=e.at(-1),n=uv.get(t);if(n!==void 0)throw Error(n>0?`missing argument for ${t}`:`expected an output file`);if(hv(t))throw Error(`expected an output file`);return{expression:new dv(e.slice(0,-1)).parse(),outputPath:t}}function mv(e){let t=Number(e.split(`x`)[0]);if(!Number.isFinite(t)||t<=0)throw Error(`Invalid density: ${e}`);return t}function hv(e){return e===`(`||e===`)`||e===`+append`||e===`-append`||uv.has(e)}const gv=/^(?:\d+(?:x\d*)?|x\d+)(?:[%!^<>@])?$/,_v=/^\d+x\d+(?:[+-]\d+[+-]\d+)?$/;function vv(e,t,n){if(!(n===`resize`||n===`thumbnail`?gv:_v).test(t))throw Error(`Invalid ${n} geometry: ${t}`);return new e.MagickGeometry(t)}function yv(e,t,n){t.resize(vv(e,n,`resize`))}function bv(e,t){let n=parseFloat(t);if(isNaN(n))throw Error(`Invalid rotation degrees: ${t}`);e.rotate(n)}function xv(e,t,n,r){let i=vv(e,n,`crop`);r===void 0?t.crop(i):t.crop(i,r)}function Sv(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 Cv={northwest:`Northwest`,north:`North`,northeast:`Northeast`,west:`West`,center:`Center`,east:`East`,southwest:`Southwest`,south:`South`,southeast:`Southeast`};function wv(e,t){let n=Cv[t.toLowerCase()],r=n?e.Gravity[n]:void 0;if(r===void 0)throw Error(`Invalid gravity: ${t}`);return r}const Tv={"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 Ev(e){return e.toLowerCase().replaceAll(/[-_ ]/g,``)}function Dv(e,t,n){let r=Ev(t),i=Object.entries(e).find(([e])=>Ev(e)===r);if(!i)throw Error(`Invalid ${n}: ${t}`);return i[1]}function Ov(e,t,n,r){let i=vv(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 kv(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 Av(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(ov),r.pointsize!==void 0&&a.fontPointSize(r.pointsize),a.text(Number(i[1]),Number(i[2]),n.text??``).draw(t)}async function jv(e){if(sv.has(e.Magick))return;let t=cv??=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(ov,await t),sv.add(e.Magick)}catch(e){throw cv===t&&(cv=null),e}}function Mv(e){return e.operations.some(e=>e.type===`annotate`)?!0:e.kind===`append`&&e.children.some(Mv)}function Nv(e,t,n,r){let i=Tv[n.type];if(i){i(t);return}switch(n.type){case`density`:return;case`resize`:yv(e,t,n.value);return;case`thumbnail`:t.thumbnail(vv(e,n.value,`thumbnail`));return;case`rotate`:bv(t,n.value);return;case`crop`:xv(e,t,n.value,r.gravity);return;case`quality`:Sv(t,n.value);return;case`background`:r.background=n.value,t.backgroundColor=new e.MagickColor(n.value);return;case`extent`:Ov(e,t,n.value,r);return;case`alpha`:t.alpha(Dv(e.AlphaAction,n.value,`alpha mode`));return;case`colorspace`:t.colorSpace=Dv(e.ColorSpace,n.value,`colorspace`);return;case`transparent`:t.transparent(new e.MagickColor(n.value));return;case`blur`:t.blur(...kv(n.value,`blur`));return;case`sharpen`:t.sharpen(...kv(n.value,`sharpen`));return;case`gravity`:r.gravity=wv(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`:Av(e,t,n,r);return}}function Pv(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:wv(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 Fv(e,t,n){let r={};for(let i of n)Nv(e,t,i,r)}function Iv(e,t){let n=null,r=av(t);return e.write(r,e=>{n=new Uint8Array(e)}),n}async function Lv(e,t,n,r,i=[],a=0){if(a===t.children.length)return r(i);await Rv(e,t.children[a],n,async o=>{i.push(o),await Lv(e,t,n,r,i,a+1),i.pop()})}async function Rv(e,t,n,r){if(t.kind===`input`){await e.ImageMagick.read(n.get(t),async n=>{Fv(e,n,t.operations),await r(n)});return}await Lv(e,t,n,async n=>{Pv(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=>{Fv(e,n,t.operations),await r(n)})}finally{i.length=0,i.dispose()}})}function zv(e){let t=e.match(/^(.*)\[(\d+)\]$/);return t?{path:t[1],scene:Number(t[2])}:{path:e}}async function Bv(e,t,n=new Map,r=new Map){if(e.kind===`input`){let{path:i,scene:a}=zv(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)),Ni(s)){let t=await Pi(s,(a??0)+1,{scale:Fi(e.density),format:`png`});return n.set(e,t.bytes),n}return n.set(e,s),n}for(let i of e.children)await Bv(i,t,n,r);return n}function Vv(e=`convert`){return x(e,async(t,n)=>{if(t.length===0||t.includes(`--help`)||t.includes(`-h`))return lv();let r;try{r=pv(t)}catch(t){return{stdout:``,stderr:`${e}: ${t instanceof Error?t.message:String(t)}\n`,exitCode:1}}try{let e=await Bv(r.expression,n),t=await Ai({ipk:iv(n)});Mv(r.expression)&&await jv(t);let i=null;if(await Rv(t,r.expression,e,async e=>{i=Iv(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 Hv(){return globalThis.__slicc_lickManager??null}let Uv=null;async function Wv(){if(Uv)return Uv;let{createLickManagerProxy:e}=await import(`./lick-manager-proxy-DMaLHm_t.js`);return Uv=e(),Uv}async function Gv(){let e=Hv();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(ve())return null;let t=await Wv(),{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 Kv(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 qv(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 (${Kv(r.candidates)})\n`:null}function Jv(e){return{stdout:``,stderr:`crontask ${e}: kernel host has not booted yet — try again in a moment\n`,exitCode:1}}function Yv(){return{stdout:`usage: crontask <command> [options]
671
+ `,stderr:``,exitCode:0}}const Sv=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 Cv=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):Sv.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:wv(n),operations:[]}),this.index++}readOperation(e,t,n){let r=Sv.get(n),i=this.tokens.slice(this.index+1,this.index+1+r);if(i.length!==r||i.some(e=>Dv(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=Ev(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 wv(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 Tv(e){if(e.length<2)throw Error(`expected exactly one input file and one output file`);let t=e.at(-1),n=Sv.get(t);if(n!==void 0)throw Error(n>0?`missing argument for ${t}`:`expected an output file`);if(Dv(t))throw Error(`expected an output file`);return{expression:new Cv(e.slice(0,-1)).parse(),outputPath:t}}function Ev(e){let t=Number(e.split(`x`)[0]);if(!Number.isFinite(t)||t<=0)throw Error(`Invalid density: ${e}`);return t}function Dv(e){return e===`(`||e===`)`||e===`+append`||e===`-append`||Sv.has(e)}const Ov=/^(?:\d+(?:x\d*)?|x\d+)(?:[%!^<>@])?$/,kv=/^\d+x\d+(?:[+-]\d+[+-]\d+)?$/;function Av(e,t,n){if(!(n===`resize`||n===`thumbnail`?Ov:kv).test(t))throw Error(`Invalid ${n} geometry: ${t}`);return new e.MagickGeometry(t)}function jv(e,t,n){t.resize(Av(e,n,`resize`))}function Mv(e,t){let n=parseFloat(t);if(isNaN(n))throw Error(`Invalid rotation degrees: ${t}`);e.rotate(n)}function Nv(e,t,n,r){let i=Av(e,n,`crop`);r===void 0?t.crop(i):t.crop(i,r)}function Pv(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 Fv={northwest:`Northwest`,north:`North`,northeast:`Northeast`,west:`West`,center:`Center`,east:`East`,southwest:`Southwest`,south:`South`,southeast:`Southeast`};function Iv(e,t){let n=Fv[t.toLowerCase()],r=n?e.Gravity[n]:void 0;if(r===void 0)throw Error(`Invalid gravity: ${t}`);return r}const Lv={"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 Rv(e){return e.toLowerCase().replaceAll(/[-_ ]/g,``)}function zv(e,t,n){let r=Rv(t),i=Object.entries(e).find(([e])=>Rv(e)===r);if(!i)throw Error(`Invalid ${n}: ${t}`);return i[1]}function Bv(e,t,n,r){let i=Av(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 Vv(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 Hv(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 Uv(e){if(yv.has(e.Magick))return;let t=bv??=fetch(hv).then(async e=>{if(!e.ok)throw Error(`Failed to load annotation font (${e.status})`);return new Uint8Array(await e.arrayBuffer())});try{e.Magick.addFont(vv,await t),yv.add(e.Magick)}catch(e){throw bv===t&&(bv=null),e}}function Wv(e){return e.operations.some(e=>e.type===`annotate`)?!0:e.kind===`append`&&e.children.some(Wv)}function Gv(e,t,n,r){let i=Lv[n.type];if(i){i(t);return}switch(n.type){case`density`:return;case`resize`:jv(e,t,n.value);return;case`thumbnail`:t.thumbnail(Av(e,n.value,`thumbnail`));return;case`rotate`:Mv(t,n.value);return;case`crop`:Nv(e,t,n.value,r.gravity);return;case`quality`:Pv(t,n.value);return;case`background`:r.background=n.value,t.backgroundColor=new e.MagickColor(n.value);return;case`extent`:Bv(e,t,n.value,r);return;case`alpha`:t.alpha(zv(e.AlphaAction,n.value,`alpha mode`));return;case`colorspace`:t.colorSpace=zv(e.ColorSpace,n.value,`colorspace`);return;case`transparent`:t.transparent(new e.MagickColor(n.value));return;case`blur`:t.blur(...Vv(n.value,`blur`));return;case`sharpen`:t.sharpen(...Vv(n.value,`sharpen`));return;case`gravity`:r.gravity=Iv(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`:Hv(e,t,n,r);return}}function Kv(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:Iv(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 qv(e,t,n){let r={};for(let i of n)Gv(e,t,i,r)}function Jv(e,t){let n=null,r=_v(t);return e.write(r,e=>{n=new Uint8Array(e)}),n}async function Yv(e,t,n,r,i=[],a=0){if(a===t.children.length)return r(i);await Xv(e,t.children[a],n,async o=>{i.push(o),await Yv(e,t,n,r,i,a+1),i.pop()})}async function Xv(e,t,n,r){if(t.kind===`input`){await e.ImageMagick.read(n.get(t),async n=>{qv(e,n,t.operations),await r(n)});return}await Yv(e,t,n,async n=>{Kv(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=>{qv(e,n,t.operations),await r(n)})}finally{i.length=0,i.dispose()}})}function Zv(e){let t=e.match(/^(.*)\[(\d+)\]$/);return t?{path:t[1],scene:Number(t[2])}:{path:e}}async function Qv(e,t,n=new Map,r=new Map){if(e.kind===`input`){let{path:i,scene:a}=Zv(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)),Ni(s)){let t=await Pi(s,(a??0)+1,{scale:Fi(e.density),format:`png`});return n.set(e,t.bytes),n}return n.set(e,s),n}for(let i of e.children)await Qv(i,t,n,r);return n}function $v(e=`convert`){return x(e,async(t,n)=>{if(t.length===0||t.includes(`--help`)||t.includes(`-h`))return xv();let r;try{r=Tv(t)}catch(t){return{stdout:``,stderr:`${e}: ${t instanceof Error?t.message:String(t)}\n`,exitCode:1}}try{let e=await Qv(r.expression,n),t=await Ai({ipk:gv(n)});Wv(r.expression)&&await Uv(t);let i=null;if(await Xv(t,r.expression,e,async e=>{i=Jv(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 ey(){return globalThis.__slicc_lickManager??null}let ty=null;async function ny(){if(ty)return ty;let{createLickManagerProxy:e}=await import(`./lick-manager-proxy-DMaLHm_t.js`);return ty=e(),ty}async function ry(){let e=ey();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(ve())return null;let t=await ny(),{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 iy(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 ay(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 (${iy(r.candidates)})\n`:null}function oy(e){return{stdout:``,stderr:`crontask ${e}: kernel host has not booted yet — try again in a moment\n`,exitCode:1}}function sy(){return{stdout:`usage: crontask <command> [options]
668
672
 
669
673
  Commands:
670
674
  create [options] Create a new cron task
@@ -696,14 +700,14 @@ Examples:
696
700
  crontask create --name every-5min --scoop poller --cron "*/5 * * * *" --filter "() => ({ time: Date.now() })"
697
701
  crontask list
698
702
  crontask delete abc123
699
- `,stderr:``,exitCode:0}}async function Xv(e,t,n){let r={method:e,headers:he({"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 Zv=[`--name`,`--cron`,`--filter`,`--scoop`];function Qv(e){return{stdout:``,stderr:`crontask: ${e}\n`,exitCode:1}}async function $v(e,t,n){let r=S(e.slice(1),{value:Zv});if(`error`in r)return Qv(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=Ii(s,t),!i)return{stdout:``,stderr:`crontask: --name is required
703
+ `,stderr:``,exitCode:0}}async function cy(e,t,n){let r={method:e,headers:he({"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 ly=[`--name`,`--cron`,`--filter`,`--scoop`];function uy(e){return{stdout:``,stderr:`crontask: ${e}\n`,exitCode:1}}async function dy(e,t,n){let r=S(e.slice(1),{value:ly});if(`error`in r)return uy(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=Ii(s,t),!i)return{stdout:``,stderr:`crontask: --name is required
700
704
  `,exitCode:1};if(!a)return{stdout:``,stderr:`crontask: --cron is required
701
- `,exitCode:1};let c=await qv(await Gv(),`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)
702
- `,exitCode:1};let e=await Gv();if(!e)return Jv(`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 Xv(`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 ey(e){let t=`Active cron tasks:
705
+ `,exitCode:1};let c=await ay(await ry(),`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)
706
+ `,exitCode:1};let e=await ry();if(!e)return oy(`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 cy(`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:
703
707
  `;for(let n of e)t+=` ${n.id} ${n.name.padEnd(20)} ${n.cron.padEnd(15)}`,n.scoop&&(t+=` -> ${n.scoop}`),n.filter&&(t+=` [filtered]`),t+=` (${n.status})`,n.nextRun&&(t+=` next: ${new Date(n.nextRun).toLocaleString()}`),t+=`
704
- `;return t}async function ty(e,t){let n=S(e.slice(1),{});if(`error`in n)return Qv(n.error);if(!t()){let e=await Gv();if(!e)return Jv(`list`);let t=await e.listCronTasks();return t.length===0?{stdout:`No active cron tasks
705
- `,stderr:``,exitCode:0}:{stdout:ey(t),stderr:``,exitCode:0}}let{ok:r,data:i}=await Xv(`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
706
- `,stderr:``,exitCode:0}:{stdout:ey(a),stderr:``,exitCode:0}}async function ny(e,t){let n=e[0],r=S(e.slice(1),{});if(`error`in r)return Qv(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 Gv();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}:Jv(`delete`)}let{ok:a,status:o,data:s}=await Xv(`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 x(`crontask`,async(e,n)=>{let r=e[0];if(!r||C(e,{valueFlags:Zv}))return Yv();try{switch(r){case`create`:return await $v(e,n.env,t);case`list`:return await ty(e,t);case`delete`:case`kill`:return await ny(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 iy(e){return x(`curlwright`,async(t,n)=>{let{runCurlwright:r}=await import(`./run-BDv7ZbKM.js`);return r(e,t,n)})}const ay=`slicc-fs`;async function oy(){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===ay)}catch{return!0}}async function sy(){let e=globalThis.indexedDB;return e?new Promise(t=>{let n;try{n=e.deleteDatabase(ay)}catch{t(`error`);return}n.onsuccess=()=>t(`deleted`),n.onerror=()=>t(`error`),n.onblocked=()=>t(`blocked`)}):`error`}async function cy(){if(!await oy())return{kind:`absent`,message:`legacy slicc-fs IDB not present — nothing to clean`};let e=await sy();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 ly(){return`slicc-fs-cleanup — delete the legacy slicc-fs IndexedDB
708
+ `;return t}async function py(e,t){let n=S(e.slice(1),{});if(`error`in n)return uy(n.error);if(!t()){let e=await ry();if(!e)return oy(`list`);let t=await e.listCronTasks();return t.length===0?{stdout:`No active cron tasks
709
+ `,stderr:``,exitCode:0}:{stdout:fy(t),stderr:``,exitCode:0}}let{ok:r,data:i}=await cy(`GET`,``);if(!r)return{stdout:``,stderr:`crontask: failed to list: ${i.error??`unknown error`}\n`,exitCode:1};let a=i;return a.length===0?{stdout:`No active cron tasks
710
+ `,stderr:``,exitCode:0}:{stdout:fy(a),stderr:``,exitCode:0}}async function my(e,t){let n=e[0],r=S(e.slice(1),{});if(`error`in r)return uy(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 ry();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}:oy(`delete`)}let{ok:a,status:o,data:s}=await cy(`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 hy(e={}){let t=e.hasLocalNodeServer??(()=>!1);return x(`crontask`,async(e,n)=>{let r=e[0];if(!r||C(e,{valueFlags:ly}))return sy();try{switch(r){case`create`:return await dy(e,n.env,t);case`list`:return await py(e,t);case`delete`:case`kill`:return await my(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 gy(e){return x(`curlwright`,async(t,n)=>{let{runCurlwright:r}=await import(`./run-C278z8CG.js`);return r(e,t,n)})}const _y=`slicc-fs`;async function vy(){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===_y)}catch{return!0}}async function yy(){let e=globalThis.indexedDB;return e?new Promise(t=>{let n;try{n=e.deleteDatabase(_y)}catch{t(`error`);return}n.onsuccess=()=>t(`deleted`),n.onerror=()=>t(`error`),n.onblocked=()=>t(`blocked`)}):`error`}async function by(){if(!await vy())return{kind:`absent`,message:`legacy slicc-fs IDB not present — nothing to clean`};let e=await yy();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 xy(){return`slicc-fs-cleanup — delete the legacy slicc-fs IndexedDB
707
711
 
708
712
  Usage:
709
713
  slicc-fs-cleanup Delete the legacy slicc-fs IDB.
@@ -712,7 +716,7 @@ Usage:
712
716
  SLICC's filesystem lives in OPFS; the legacy slicc-fs IndexedDB from
713
717
  the pre-OPFS era is never read anymore. This command deletes it on
714
718
  explicit invocation to reclaim the space.
715
- `}const uy={deleted:0,absent:0,blocked:1,error:1};function dy(e={}){let t=e.runCleanup??cy;return x(`slicc-fs-cleanup`,async e=>{if(e.includes(`--help`)||e.includes(`-h`))return{stdout:ly(),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=uy[n.kind];return r===0?{stdout:`${n.message}\n`,stderr:``,exitCode:r}:{stdout:``,stderr:`slicc-fs-cleanup: ${n.message}\n`,exitCode:r}})}function fy(e){return`${e} — report VFS backend and storage usage/quota
719
+ `}const Sy={deleted:0,absent:0,blocked:1,error:1};function Cy(e={}){let t=e.runCleanup??by;return x(`slicc-fs-cleanup`,async e=>{if(e.includes(`--help`)||e.includes(`-h`))return{stdout:xy(),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=Sy[n.kind];return r===0?{stdout:`${n.message}\n`,stderr:``,exitCode:r}:{stdout:``,stderr:`slicc-fs-cleanup: ${n.message}\n`,exitCode:r}})}function wy(e){return`${e} — report VFS backend and storage usage/quota
716
720
 
717
721
  Usage:
718
722
  ${e} Show diagnostics (raw bytes).
@@ -720,16 +724,16 @@ Usage:
720
724
  ${e} --help Show this help.
721
725
 
722
726
  Read-only. Cleanup of the legacy IndexedDB lives in 'slicc-fs-cleanup'.
723
- `}function py(){return`diskutil — VFS diagnostics alias
727
+ `}function Ty(){return`diskutil — VFS diagnostics alias
724
728
 
725
729
  Usage:
726
730
  diskutil info Show VFS diagnostics (alias for 'df -h').
727
731
  diskutil --help Show this help.
728
732
 
729
733
  Read-only. See 'df --help' for the underlying command.
730
- `}function my(e){if(e<1024)return`${e} B`;let t=[`KB`,`MB`,`GB`,`TB`,`PB`],n=e/1024,r=0;for(;n>=1024&&r<t.length-1;)n/=1024,r++;return`${n>=100?n.toFixed(0):n>=10?n.toFixed(1):n.toFixed(2)} ${t[r]}`}function hy(e,t){return e===null?`unavailable`:t?my(e):`${e}`}async function gy(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??oy;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: ${hy(e.usage,t)}`,`Quota: ${hy(e.quota,t)}`,`Used: ${n}`,`Persisted: ${r}`,`Legacy IDB: ${i}`].join(`
731
- `)}\n`}function vy(e={}){return x(`df`,async t=>{if(t.includes(`--help`))return{stdout:fy(`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 gy(e),i),stderr:``,exitCode:0}})}function yy(e={}){return x(`diskutil`,async t=>{if(t.includes(`--help`))return{stdout:py(),stderr:``,exitCode:0};let n=t[0];return n===`info`?{stdout:_y(await gy(e),!0),stderr:``,exitCode:0}:{stdout:``,stderr:n?`diskutil: unsupported subcommand: ${n} (try 'diskutil info')\n`:`diskutil: missing subcommand (try 'diskutil info')
732
- `,exitCode:1}})}const by=e(`di`),xy=new WeakMap;async function Sy(e,t){let n=xy.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 by.error(`failed to read pyodide-lock.json`,e),null}else{let e=`${Ir}pyodide-lock.json`,n;try{n=await t(e,{method:`GET`,headers:{Accept:`application/json`},timeoutMs:3e4})}catch(e){return by.error(`failed to fetch pyodide-lock.json from CDN`,e),null}if(n.status<200||n.status>=300)return by.error(`pyodide-lock.json CDN fetch returned HTTP ${n.status}`),null;r=fe(n.body)}let i;try{i=JSON.parse(r)}catch(e){return by.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(jr(t.name??e),t);return xy.set(e,a),a}async function Cy(e,t,n,r){let i=await Sy(e,t);if(!i)return null;let a=i.get(jr(n));if(!a?.file_name||!a.version||!a.sha256)return null;if(r&&r!==a.version)throw Error(`di: ${n}==${r} requested but the Pyodide lockfile pins ${a.name??n}==${a.version} (the Pyodide CDN serves only the locked version — omit the version, or use real uv locally)`);return{name:a.name??n,version:a.version,source:`pyodide-cdn`,fileName:a.file_name,sha256:a.sha256,url:`${Ir}${a.file_name}`}}function wy(e,t){let n=`https://pypi.org/pypi/${encodeURIComponent(e)}`;return t?`${n}/${encodeURIComponent(t)}/json`:`${n}/json`}function Ty(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 Ey(e,t,n){let r=`di: PyPI lookup for ${t}${n?`==${n}`:``}`,i=wy(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(fe(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=>Ty(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 Dy=`/workspace/python_wheels`,Oy=/^[A-Za-z0-9][A-Za-z0-9._-]*$/;function ky(e){let t=e.trim();if(!t)throw Error(`di: package spec is required`);let n=t,r,i=t.indexOf(`==`);if(i!==-1)n=t.slice(0,i),r=t.slice(i+2);else{let e=t.indexOf(`@`);e!==-1&&(n=t.slice(0,e),r=t.slice(e+1))}if(n=n.trim(),r=r?.trim(),!Oy.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 Ay(e){return e instanceof Error?e:Error(String(e))}async function jy(e,t,n){return await Cy(e,t,n.name,n.version)||Ey(t,n.name,n.version)}async function My(e,t,n){let r=await jy(e,t,n),i=await Vr(t,{url:r.url,sha256:r.sha256,label:`di: download ${r.name}==${r.version}`});await e.mkdir(Dy,{recursive:!0});let a=b(Dy,r.fileName),o=!0;if(await e.exists(a)){let t=await e.readFile(a,{encoding:`binary`}),n=await Br(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 Ny(e,t,n,r){let i=await Lr(e,n),a=[],o=[];for(let n of r){let r;try{r=ky(n)}catch(e){o.push({spec:n,error:Ay(e)});continue}try{a.push(await My(e,t,r))}catch(e){o.push({spec:n,error:Ay(e)})}}if(a.length>0){let t=await Or(e,i),n=t.dependencies,r=await Rr(e,i);for(let e of a)n=Ur(n,e.name,e.version),r=Mr(r,{name:e.name,version:e.version,source:e.source,fileName:e.fileName,sha256:e.sha256});await zr(e,i,{...t,dependencies:n}),await Ar(e,i,r)}return{results:a,errors:o,manifestDir:i}}async function Py(e,t){let n=await Wr(e,t);if(!n)return null;let r=await Or(e,n),i=await Rr(e,n),a=new Map(i.map(e=>[jr(e.name),e]));return r.dependencies.map(e=>{let{name:t,version:n}=Nr(e),r=a.get(jr(t));return{name:t,version:n||r?.version||`?`,source:r?.source??`unknown`}})}const Fy=[];function Iy(e){return`${e} - minimal Python package manager (pure-Python + Pyodide wheels)
734
+ `}function Ey(e){if(e<1024)return`${e} B`;let t=[`KB`,`MB`,`GB`,`TB`,`PB`],n=e/1024,r=0;for(;n>=1024&&r<t.length-1;)n/=1024,r++;return`${n>=100?n.toFixed(0):n>=10?n.toFixed(1):n.toFixed(2)} ${t[r]}`}function Dy(e,t){return e===null?`unavailable`:t?Ey(e):`${e}`}async function Oy(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??vy;try{o=await s()}catch{o=null}return{backend:t,usage:n,quota:r,persisted:i,legacyIdbPresent:o}}function ky(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: ${Dy(e.usage,t)}`,`Quota: ${Dy(e.quota,t)}`,`Used: ${n}`,`Persisted: ${r}`,`Legacy IDB: ${i}`].join(`
735
+ `)}\n`}function Ay(e={}){return x(`df`,async t=>{if(t.includes(`--help`))return{stdout:wy(`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:ky(await Oy(e),i),stderr:``,exitCode:0}})}function jy(e={}){return x(`diskutil`,async t=>{if(t.includes(`--help`))return{stdout:Ty(),stderr:``,exitCode:0};let n=t[0];return n===`info`?{stdout:ky(await Oy(e),!0),stderr:``,exitCode:0}:{stdout:``,stderr:n?`diskutil: unsupported subcommand: ${n} (try 'diskutil info')\n`:`diskutil: missing subcommand (try 'diskutil info')
736
+ `,exitCode:1}})}const My=e(`di`),Ny=new WeakMap;async function Py(e,t){let n=Ny.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 My.error(`failed to read pyodide-lock.json`,e),null}else{let e=`${Ir}pyodide-lock.json`,n;try{n=await t(e,{method:`GET`,headers:{Accept:`application/json`},timeoutMs:3e4})}catch(e){return My.error(`failed to fetch pyodide-lock.json from CDN`,e),null}if(n.status<200||n.status>=300)return My.error(`pyodide-lock.json CDN fetch returned HTTP ${n.status}`),null;r=fe(n.body)}let i;try{i=JSON.parse(r)}catch(e){return My.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(jr(t.name??e),t);return Ny.set(e,a),a}async function Fy(e,t,n,r){let i=await Py(e,t);if(!i)return null;let a=i.get(jr(n));if(!a?.file_name||!a.version||!a.sha256)return null;if(r&&r!==a.version)throw Error(`di: ${n}==${r} requested but the Pyodide lockfile pins ${a.name??n}==${a.version} (the Pyodide CDN serves only the locked version — omit the version, or use real uv locally)`);return{name:a.name??n,version:a.version,source:`pyodide-cdn`,fileName:a.file_name,sha256:a.sha256,url:`${Ir}${a.file_name}`}}function Iy(e,t){let n=`https://pypi.org/pypi/${encodeURIComponent(e)}`;return t?`${n}/${encodeURIComponent(t)}/json`:`${n}/json`}function Ly(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 Ry(e,t,n){let r=`di: PyPI lookup for ${t}${n?`==${n}`:``}`,i=Iy(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(fe(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=>Ly(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 zy=`/workspace/python_wheels`,By=/^[A-Za-z0-9][A-Za-z0-9._-]*$/;function Vy(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(),!By.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 Hy(e){return e instanceof Error?e:Error(String(e))}async function Uy(e,t,n){return await Fy(e,t,n.name,n.version)||Ry(t,n.name,n.version)}async function Wy(e,t,n){let r=await Uy(e,t,n),i=await Vr(t,{url:r.url,sha256:r.sha256,label:`di: download ${r.name}==${r.version}`});await e.mkdir(zy,{recursive:!0});let a=b(zy,r.fileName),o=!0;if(await e.exists(a)){let t=await e.readFile(a,{encoding:`binary`}),n=await Br(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 Gy(e,t,n,r){let i=await Lr(e,n),a=[],o=[];for(let n of r){let r;try{r=Vy(n)}catch(e){o.push({spec:n,error:Hy(e)});continue}try{a.push(await Wy(e,t,r))}catch(e){o.push({spec:n,error:Hy(e)})}}if(a.length>0){let t=await Or(e,i),n=t.dependencies,r=await Rr(e,i);for(let e of a)n=Ur(n,e.name,e.version),r=Mr(r,{name:e.name,version:e.version,source:e.source,fileName:e.fileName,sha256:e.sha256});await zr(e,i,{...t,dependencies:n}),await Ar(e,i,r)}return{results:a,errors:o,manifestDir:i}}async function Ky(e,t){let n=await Wr(e,t);if(!n)return null;let r=await Or(e,n),i=await Rr(e,n),a=new Map(i.map(e=>[jr(e.name),e]));return r.dependencies.map(e=>{let{name:t,version:n}=Nr(e),r=a.get(jr(t));return{name:t,version:n||r?.version||`?`,source:r?.source??`unknown`}})}const qy=[];function Jy(e){return`${e} - minimal Python package manager (pure-Python + Pyodide wheels)
733
737
 
734
738
  Usage:
735
739
  ${e} add <pkg>[@<version>] [<pkg> ...] resolve, stage, and record wheels
@@ -742,20 +746,20 @@ Resolution:
742
746
  staged under /workspace/python_wheels/ and recorded in pyproject.toml + uv.lock.
743
747
 
744
748
  Anything else is not implemented in SLICC's ${e} subset; use real uv locally.
745
- `}function Ly(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 Ry(e){return e instanceof Error?e.message:String(e)}function zy(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(`
746
- `)}\n`}async function By(e,t,n,r){let i=S(t,{value:Fy});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 Ny(r.fs,r.fetch,n.cwd,a)}catch(t){return{stdout:``,stderr:`${e}: ${Ry(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}: ${Ry(t.error)}`);return{stdout:s.length>0?`${s.join(`
749
+ `}function Yy(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 Xy(e){return e instanceof Error?e.message:String(e)}function Zy(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(`
750
+ `)}\n`}async function Qy(e,t,n,r){let i=S(t,{value:qy});if(`error`in i)return{stdout:``,stderr:`${e}: ${i.error}\n`,exitCode:1};let a=i.positionals;if(a.length===0)return{stdout:``,stderr:`${e}: add requires at least one package\n`,exitCode:1};let o;try{o=await Gy(r.fs,r.fetch,n.cwd,a)}catch(t){return{stdout:``,stderr:`${e}: ${Xy(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}: ${Xy(t.error)}`);return{stdout:s.length>0?`${s.join(`
747
751
  `)}\n`:``,stderr:c.length>0?`${c.join(`
748
- `)}\n`:``,exitCode:o.errors.length===0?0:1}}async function Vy(e,t,n,r){let i=S(t,{value:Fy});if(`error`in i)return{stdout:``,stderr:`${e}: ${i.error}\n`,exitCode:1};let a=await Py(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:zy(a),stderr:``,exitCode:0}}function Hy(e,t){return x(e,async(n,r)=>{if(n.length===0)return{stdout:Iy(e),stderr:`${e}: missing verb\n`,exitCode:1};if(C(n,{valueFlags:Fy}))return{stdout:Iy(e),stderr:``,exitCode:0};let i=n[0],a=n.slice(1);return i===`add`?By(e,a,r,t):i===`list`?Vy(e,a,r,t):Ly(e,i)})}const Uy=`https://cloudflare-dns.com/dns-query`,Wy=`https://dns.quad9.net/dns-query`,Gy=`usage: dig <name> [type] [@server] [+short] [--json]`,Ky=[`A`,`AAAA`,`MX`,`TXT`,`CNAME`,`NS`,`SOA`,`SRV`,`PTR`,`CAA`],qy={"1.1.1.1":Uy,"1.0.0.1":Uy,"cloudflare-dns.com":Uy,"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":Wy,"149.112.112.112":Wy,"dns.quad9.net":Wy};function Jy(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 Yy(e){if(e.includes(`%`))return;let t=e;if(e.includes(`.`)){let n=e.lastIndexOf(`:`),r=n>=0?Jy(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 Xy(e){let t=Jy(e);if(t)return`${t.reverse().join(`.`)}.in-addr.arpa`;let n=Yy(e);if(n)return`${n.map(e=>e.padStart(4,`0`)).join(``).split(``).reverse().join(`.`)}.ip6.arpa`}function Zy(e){return{kind:`error`,message:`dig: '${e}' is not a valid record type; ${Gy}\n`}}function Qy(e,t,n){let r=e[t+1]?.trim();if(!r)return{error:{kind:`error`,message:`dig: -x requires an address
749
- `}};let i=Xy(r);return i?n.name?{error:Zy(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 $y(e,t,n){return n.server?{error:{kind:`error`,message:`dig: multiple @server arguments
752
+ `)}\n`:``,exitCode:o.errors.length===0?0:1}}async function $y(e,t,n,r){let i=S(t,{value:qy});if(`error`in i)return{stdout:``,stderr:`${e}: ${i.error}\n`,exitCode:1};let a=await Ky(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:Zy(a),stderr:``,exitCode:0}}function eb(e,t){return x(e,async(n,r)=>{if(n.length===0)return{stdout:Jy(e),stderr:`${e}: missing verb\n`,exitCode:1};if(C(n,{valueFlags:qy}))return{stdout:Jy(e),stderr:``,exitCode:0};let i=n[0],a=n.slice(1);return i===`add`?Qy(e,a,r,t):i===`list`?$y(e,a,r,t):Yy(e,i)})}const tb=`https://cloudflare-dns.com/dns-query`,nb=`https://dns.quad9.net/dns-query`,rb=`usage: dig <name> [type] [@server] [+short] [--json]`,ib=[`A`,`AAAA`,`MX`,`TXT`,`CNAME`,`NS`,`SOA`,`SRV`,`PTR`,`CAA`],ab={"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":nb,"149.112.112.112":nb,"dns.quad9.net":nb};function ob(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 sb(e){if(e.includes(`%`))return;let t=e;if(e.includes(`.`)){let n=e.lastIndexOf(`:`),r=n>=0?ob(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 cb(e){let t=ob(e);if(t)return`${t.reverse().join(`.`)}.in-addr.arpa`;let n=sb(e);if(n)return`${n.map(e=>e.padStart(4,`0`)).join(``).split(``).reverse().join(`.`)}.ip6.arpa`}function lb(e){return{kind:`error`,message:`dig: '${e}' is not a valid record type; ${rb}\n`}}function ub(e,t,n){let r=e[t+1]?.trim();if(!r)return{error:{kind:`error`,message:`dig: -x requires an address
753
+ `}};let i=cb(r);return i?n.name?{error:lb(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 db(e,t,n){return n.server?{error:{kind:`error`,message:`dig: multiple @server arguments
750
754
  `}}:(n.server=e.slice(1).trim(),n.server?{nextIndex:t}:{error:{kind:`error`,message:`dig: empty @server argument
751
- `}})}function eb(e,t,n){let r=e.trim(),i=r.toUpperCase(),a=n.name?.toUpperCase();if(Ky.includes(i)&&!n.type&&n.name)n.type=i;else if(!n.name)n.name=r;else if(a&&Ky.includes(a)&&!n.type)n.name=r,n.type=a;else return{error:Zy(r)};return{nextIndex:t}}function tb(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`?Qy(e,t,n):r.startsWith(`@`)?$y(r,t,n):r.startsWith(`-`)?{error:{kind:`error`,message:`dig: unknown option: ${r}\n`}}:eb(r,t,n)}function nb(e){if(e.short&&e.json)return{kind:`error`,message:`dig: +short and --json are mutually exclusive
752
- `};if(!e.name)return{kind:`error`,message:`dig: missing domain name\n${Gy}\n`};let t=e.server?.toLowerCase(),n=t?qy[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 rb(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=tb(e,n,t);if(`error`in r)return r.error;n=r.nextIndex}return nb(t)}const ib={A:1,NS:2,CNAME:5,SOA:6,PTR:12,MX:15,TXT:16,AAAA:28,SRV:33,CAA:257},ab=new Set(`#/:<>?@[\\]^|`);function ob(e){return Array.from(e).some(e=>{let t=e.codePointAt(0)??0;return t<=127&&(t<33||t===127||ab.has(e))})}function sb(e){if(ob(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 cb(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(sb).join(`.`)}catch{throw Error(`invalid DNS name: ${e}`)}}function lb(e,t){let n=cb(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=ib[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 ub(e,t,n){return`${e}?dns=${l(lb(t,n)).replaceAll(`+`,`-`).replaceAll(`/`,`_`).replace(/=+$/,``)}`}function db(e,t,n){if(t<0||n<0||t+n>e.length)throw Error(`truncated DNS message`)}function fb(e,t){let n=[],r=new Set,i=t,a=t,o=!1,s=1;for(let t=0;t<=e.length;t+=1){db(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){db(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(db(e,i+1,t),s+=t+1,s>255)throw Error(`DNS name too long`);n.push(new TextDecoder().decode(e.subarray(i+1,i+1+t))),i+=t+1}throw Error(`invalid DNS name`)}function L(e,t){return db(e,t,2),new DataView(e.buffer,e.byteOffset,e.byteLength).getUint16(t)}function pb(e,t){return db(e,t,4),new DataView(e.buffer,e.byteOffset,e.byteLength).getUint32(t)}function mb(e,t){let n=Array.from({length:8},(n,r)=>L(e,t+r*2)),r=-1,i=0;for(let e=0;e<n.length;){if(n[e]!==0){e+=1;continue}let t=e;for(;t<n.length&&n[t]===0;)t+=1;t-e>i&&([r,i]=[e,t-e]),e=t}let a=n.map(e=>e.toString(16));return i<2?a.join(`:`):`${a.slice(0,r).join(`:`)}::${a.slice(r+i).join(`:`)}`}function hb(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 gb(e,t,n){let r=t,i=[];for(;r<n;){let t=e[r];if(db(e,r+1,t),r+t+1>n)throw Error(`invalid TXT record`);i.push(hb(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 vb(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 mb(e,n)}if([2,5,12].includes(t)){let t=fb(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=fb(e,n+2);if(t.nextOffset!==r)throw Error(`invalid MX record`);return`${L(e,n)} ${t.name}`}if(t===16)return gb(e,n,r);if(t===6){let t=fb(e,n),i=fb(e,t.nextOffset);if(i.nextOffset+20!==r)throw Error(`invalid SOA record`);let a=Array.from({length:5},(t,n)=>pb(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=fb(e,n+6);if(t.nextOffset!==r)throw Error(`invalid SRV record`);return`${L(e,n)} ${L(e,n+2)} ${L(e,n+4)} ${t.name}`}if(t===257)return _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 yb(e,t,n,r){let i=[],a=t;for(let t=0;t<n;t+=1){let t=fb(e,a);a=t.nextOffset,db(e,a,10);let n=L(e,a),o=L(e,a+2),s=pb(e,a+4),c=L(e,a+8),l=a+10,u=l+c;db(e,l,c);let d=vb(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 bb(e){return e.replace(/[A-Z]/g,e=>e.toLowerCase())}function xb(e,t,n,r,i){let a=cb(r).split(`.`).filter(Boolean);if(!(e.labels.length===a.length&&e.labels.every((e,t)=>bb(e)===bb(a[t])))||t!==ib[i]||n!==1)throw Error(`unexpected DNS response question`)}function Sb(e,t,n){db(e,0,12);let r=L(e,2);if(L(e,0)!==0||!(r&32768))throw Error(`invalid DNS response`);if(r&512)throw Error(`truncated DNS response`);let i=L(e,4),a=L(e,6),o=L(e,8),s=L(e,10);if(i!==1)throw Error(`invalid DNS question count`);let c=12,l=fb(e,c);c=l.nextOffset,db(e,c,4),xb(l,L(e,c),L(e,c+2),t,n),c+=4;let u=yb(e,c,a,!0);if(yb(e,yb(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 Cb={1:`A`,2:`NS`,5:`CNAME`,6:`SOA`,12:`PTR`,15:`MX`,16:`TXT`,28:`AAAA`,33:`SRV`,257:`CAA`},wb={0:`NOERROR`,1:`FORMERR`,2:`SERVFAIL`,3:`NXDOMAIN`,4:`NOTIMP`,5:`REFUSED`};function Tb(){return{stdout:`usage: dig <name> [type] [@server] [+opts] [--json]
755
+ `}})}function fb(e,t,n){let r=e.trim(),i=r.toUpperCase(),a=n.name?.toUpperCase();if(ib.includes(i)&&!n.type&&n.name)n.type=i;else if(!n.name)n.name=r;else if(a&&ib.includes(a)&&!n.type)n.name=r,n.type=a;else return{error:lb(r)};return{nextIndex:t}}function pb(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`?ub(e,t,n):r.startsWith(`@`)?db(r,t,n):r.startsWith(`-`)?{error:{kind:`error`,message:`dig: unknown option: ${r}\n`}}:fb(r,t,n)}function mb(e){if(e.short&&e.json)return{kind:`error`,message:`dig: +short and --json are mutually exclusive
756
+ `};if(!e.name)return{kind:`error`,message:`dig: missing domain name\n${rb}\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 hb(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=pb(e,n,t);if(`error`in r)return r.error;n=r.nextIndex}return mb(t)}const gb={A:1,NS:2,CNAME:5,SOA:6,PTR:12,MX:15,TXT:16,AAAA:28,SRV:33,CAA:257},_b=new Set(`#/:<>?@[\\]^|`);function vb(e){return Array.from(e).some(e=>{let t=e.codePointAt(0)??0;return t<=127&&(t<33||t===127||_b.has(e))})}function yb(e){if(vb(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 bb(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(yb).join(`.`)}catch{throw Error(`invalid DNS name: ${e}`)}}function xb(e,t){let n=bb(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=gb[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 Sb(e,t,n){return`${e}?dns=${l(xb(t,n)).replaceAll(`+`,`-`).replaceAll(`/`,`_`).replace(/=+$/,``)}`}function Cb(e,t,n){if(t<0||n<0||t+n>e.length)throw Error(`truncated DNS message`)}function wb(e,t){let n=[],r=new Set,i=t,a=t,o=!1,s=1;for(let t=0;t<=e.length;t+=1){Cb(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){Cb(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(Cb(e,i+1,t),s+=t+1,s>255)throw Error(`DNS name too long`);n.push(new TextDecoder().decode(e.subarray(i+1,i+1+t))),i+=t+1}throw Error(`invalid DNS name`)}function L(e,t){return Cb(e,t,2),new DataView(e.buffer,e.byteOffset,e.byteLength).getUint16(t)}function Tb(e,t){return Cb(e,t,4),new DataView(e.buffer,e.byteOffset,e.byteLength).getUint32(t)}function Eb(e,t){let n=Array.from({length:8},(n,r)=>L(e,t+r*2)),r=-1,i=0;for(let e=0;e<n.length;){if(n[e]!==0){e+=1;continue}let t=e;for(;t<n.length&&n[t]===0;)t+=1;t-e>i&&([r,i]=[e,t-e]),e=t}let a=n.map(e=>e.toString(16));return i<2?a.join(`:`):`${a.slice(0,r).join(`:`)}::${a.slice(r+i).join(`:`)}`}function Db(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 Ob(e,t,n){let r=t,i=[];for(;r<n;){let t=e[r];if(Cb(e,r+1,t),r+t+1>n)throw Error(`invalid TXT record`);i.push(Db(e,r+1,r+1+t)),r+=t+1}return i.join(` `)}function kb(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 Ab(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 Eb(e,n)}if([2,5,12].includes(t)){let t=wb(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=wb(e,n+2);if(t.nextOffset!==r)throw Error(`invalid MX record`);return`${L(e,n)} ${t.name}`}if(t===16)return Ob(e,n,r);if(t===6){let t=wb(e,n),i=wb(e,t.nextOffset);if(i.nextOffset+20!==r)throw Error(`invalid SOA record`);let a=Array.from({length:5},(t,n)=>Tb(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=wb(e,n+6);if(t.nextOffset!==r)throw Error(`invalid SRV record`);return`${L(e,n)} ${L(e,n+2)} ${L(e,n+4)} ${t.name}`}if(t===257)return kb(e,n,r);let i=Array.from(e.subarray(n,r),e=>e.toString(16).padStart(2,`0`));return`\\# ${r-n} ${i.join(``)}`}function jb(e,t,n,r){let i=[],a=t;for(let t=0;t<n;t+=1){let t=wb(e,a);a=t.nextOffset,Cb(e,a,10);let n=L(e,a),o=L(e,a+2),s=Tb(e,a+4),c=L(e,a+8),l=a+10,u=l+c;Cb(e,l,c);let d=Ab(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 Mb(e){return e.replace(/[A-Z]/g,e=>e.toLowerCase())}function Nb(e,t,n,r,i){let a=bb(r).split(`.`).filter(Boolean);if(!(e.labels.length===a.length&&e.labels.every((e,t)=>Mb(e)===Mb(a[t])))||t!==gb[i]||n!==1)throw Error(`unexpected DNS response question`)}function Pb(e,t,n){Cb(e,0,12);let r=L(e,2);if(L(e,0)!==0||!(r&32768))throw Error(`invalid DNS response`);if(r&512)throw Error(`truncated DNS response`);let i=L(e,4),a=L(e,6),o=L(e,8),s=L(e,10);if(i!==1)throw Error(`invalid DNS question count`);let c=12,l=wb(e,c);c=l.nextOffset,Cb(e,c,4),Nb(l,L(e,c),L(e,c+2),t,n),c+=4;let u=jb(e,c,a,!0);if(jb(e,jb(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 Fb={1:`A`,2:`NS`,5:`CNAME`,6:`SOA`,12:`PTR`,15:`MX`,16:`TXT`,28:`AAAA`,33:`SRV`,257:`CAA`},Ib={0:`NOERROR`,1:`FORMERR`,2:`SERVFAIL`,3:`NXDOMAIN`,4:`NOTIMP`,5:`REFUSED`};function Lb(){return{stdout:`usage: dig <name> [type] [@server] [+opts] [--json]
753
757
  dig -x <address> [@server] [+opts] [--json]
754
758
  dig -v | --version
755
759
 
756
760
  Resolve DNS records via DNS-over-HTTPS.
757
761
 
758
- Supported types: `+Ky.join(`, `)+` (default: A).
762
+ Supported types: `+ib.join(`, `)+` (default: A).
759
763
 
760
764
  Flags:
761
765
  @server use a supported Cloudflare, Google, or Quad9 resolver
@@ -765,11 +769,11 @@ Flags:
765
769
  +opts other dig +options are accepted as no-ops
766
770
  --json resolver response as pretty-printed JSON
767
771
  -h, --help show this help
768
- `,stderr:``,exitCode:0}}function Eb(e){return Cb[e]??`TYPE${e}`}function Db(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}: ${wb[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
772
+ `,stderr:``,exitCode:0}}function Rb(e){return Fb[e]??`TYPE${e}`}function zb(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}: ${Ib[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
769
773
  `,stderr:n,exitCode:0}:a?{stdout:`${o.map(e=>e.data).join(`
770
- `)}\n`,stderr:n,exitCode:0}:{stdout:`${o.map(e=>`${e.name}\t${e.TTL??0}\tIN\t${Eb(e.type)}\t${e.data}`).join(`
771
- `)}\n`,stderr:n,exitCode:0}}async function Ob(e,t){let n=rb(e);if(n.kind===`version`)return{stdout:`DiG 9.20.0-slicc (DNS-over-HTTPS)
772
- `,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===Wy,c,l;try{c=s?ub(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 Db(s?Sb(l.body,i,o):JSON.parse(new TextDecoder(`utf-8`).decode(l.body)),n)}catch{return{stdout:``,stderr:`${r}dig: invalid response from resolver\n`,exitCode:1}}}function kb(){let e=ie();return x(`dig`,async t=>t.includes(`--help`)||t.includes(`-h`)?Tb():Ob(t,e))}const Ab=[`api-catalog`,`service-desc`,`service-meta`,`status`,`https://llmstxt.org/rel/llms-txt`];async function jb(e,t={}){let n=t.fetchImpl??fetch,r=t.timeoutMs??3e3,i={links:e,failures:[]},a=[],o=new Set;for(let s of e)for(let e of s.rel)Ab.includes(e)&&(o.has(e)||(o.add(e),a.push(Mb(n,s.href,r,t.signal).then(t=>Nb(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 Mb(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 Nb(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 Pb=[`--follow`];function Fb(e){return async(t,n)=>{let r=typeof t==`string`?t:t instanceof URL?t.toString():t.url,i=re(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 Ib(){return`discover — fetch a URL and parse RFC 8288 Link headers
774
+ `)}\n`,stderr:n,exitCode:0}:{stdout:`${o.map(e=>`${e.name}\t${e.TTL??0}\tIN\t${Rb(e.type)}\t${e.data}`).join(`
775
+ `)}\n`,stderr:n,exitCode:0}}async function Bb(e,t){let n=hb(e);if(n.kind===`version`)return{stdout:`DiG 9.20.0-slicc (DNS-over-HTTPS)
776
+ `,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===nb,c,l;try{c=s?Sb(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 zb(s?Pb(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 Vb(){let e=ie();return x(`dig`,async t=>t.includes(`--help`)||t.includes(`-h`)?Lb():Bb(t,e))}const Hb=[`api-catalog`,`service-desc`,`service-meta`,`status`,`https://llmstxt.org/rel/llms-txt`];async function Ub(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)Hb.includes(e)&&(o.has(e)||(o.add(e),a.push(Wb(n,s.href,r,t.signal).then(t=>Gb(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 Wb(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 Gb(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 Kb=[`--follow`];function qb(e){return async(t,n)=>{let r=typeof t==`string`?t:t instanceof URL?t.toString():t.url,i=re(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 Jb(){return`discover — fetch a URL and parse RFC 8288 Link headers
773
777
 
774
778
  Usage:
775
779
  discover <url> Print parsed links (and any SLICC handoff match)
@@ -783,9 +787,9 @@ Output is always JSON.
783
787
  Examples:
784
788
  discover ${d}/handoff?handoff=demo
785
789
  discover --follow ${d}/llms.txt
786
- `}function Lb(){return x(`discover`,async e=>{if(e.length===0||C(e))return{stdout:Ib(),stderr:``,exitCode:0};let t=S(e,{bool:Pb});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
787
- `,exitCode:2};let r=t.positionals[0],i=ie(),a;try{a=await i(r,{method:`GET`})}catch(e){return{stdout:``,stderr:`discover: fetch failed: ${e instanceof Error?e.message:String(e)}\n`,exitCode:1}}let o=[];for(let[e,t]of Object.entries(a.headers))e.toLowerCase()===`link`&&typeof t==`string`&&t.length>0&&o.push(t);let s=h(o,r),c=p(s),l={url:r,status:a.status,links:s,handoff:c};if(n&&s.length>0){let e=await jb(s,{fetchImpl:Fb(i)});l.discovery={catalog:e.catalog,serviceDesc:e.serviceDesc,serviceMeta:e.serviceMeta,status:e.status,llmsTxt:e.llmsTxt,failures:e.failures}}return{stdout:JSON.stringify(l,null,2)+`
788
- `,stderr:``,exitCode:0}})}function Rb(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 zb=`esbuild - thin wrapper over the ipk-loaded esbuild-wasm
790
+ `}function Yb(){return x(`discover`,async e=>{if(e.length===0||C(e))return{stdout:Jb(),stderr:``,exitCode:0};let t=S(e,{bool:Kb});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
791
+ `,exitCode:2};let r=t.positionals[0],i=ie(),a;try{a=await i(r,{method:`GET`})}catch(e){return{stdout:``,stderr:`discover: fetch failed: ${e instanceof Error?e.message:String(e)}\n`,exitCode:1}}let o=[];for(let[e,t]of Object.entries(a.headers))e.toLowerCase()===`link`&&typeof t==`string`&&t.length>0&&o.push(t);let s=h(o,r),c=p(s),l={url:r,status:a.status,links:s,handoff:c};if(n&&s.length>0){let e=await Ub(s,{fetchImpl:qb(i)});l.discovery={catalog:e.catalog,serviceDesc:e.serviceDesc,serviceMeta:e.serviceMeta,status:e.status,llmsTxt:e.llmsTxt,failures:e.failures}}return{stdout:JSON.stringify(l,null,2)+`
792
+ `,stderr:``,exitCode:0}})}function Xb(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 Zb=`esbuild - thin wrapper over the ipk-loaded esbuild-wasm
789
793
 
790
794
  Usage:
791
795
  esbuild [options] <entry> Bundle / transform
@@ -825,10 +829,10 @@ Install:
825
829
  Inert until the backing package is installed:
826
830
  ${M} esbuild-wasm@${Kr}
827
831
  Then \`esbuild --version\` and the bundle/transform commands above.
828
- `,Bb=new Set([`iife`,`cjs`,`esm`]),Vb=new Set([`browser`,`node`,`neutral`]),Hb=new Set([`linked`,`inline`,`external`,`both`]),Ub={"-h":`showHelp`,"--help":`showHelp`,"-v":`showVersion`,"--version":`showVersion`,"--bundle":`bundle`,"--transform":`transform`,"--minify":`minify`};function Wb(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 Gb(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 Kb(e,t,n,r){if(t.inlineValue!==null){if(!Hb.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`&&Hb.has(i)?(e.sourcemap=i,1):(e.sourcemap=!0,0)}function qb(e,t,n,r){if(t.key===`--outfile`){let{value:i,advance:a}=Gb(t,n,r);return e.outfile=i,a}if(t.key===`--format`){let{value:i,advance:a}=Gb(t,n,r);if(!Bb.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}=Gb(t,n,r);if(!Vb.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}=Gb(t,n,r);return e.target=i.split(`,`).map(e=>e.trim()).filter(Boolean),a}if(t.key===`--loader`){let{value:i,advance:a}=Gb(t,n,r);return e.loader=i,a}return-1}function Jb(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 Yb(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=Ub[r];if(i){t[i]=!0;continue}if(r.startsWith(`--external:`)){t.external.push(r.slice(11));continue}if(Jb(r,`--define:`,t.define)||Jb(r,`--banner:`,t.banner)||Jb(r,`--footer:`,t.footer))continue;let a=Wb(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+=Kb(t,a,e,n);continue}let o=qb(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 Xb(e,t,n,r,i){return{name:`slicc-vfs`,setup(a){a.onResolve({filter:/.*/},async a=>{if(a.kind!==`entry-point`&&Zb(a.path,r)||/^[a-z]+:/.test(a.path)&&!a.path.startsWith(`file:`))return{path:a.path,external:!0};if($b(a.path)){let n=a.importer?.startsWith(`/`)?xr(a.importer):t;return{path:await nx(e,e.resolvePath(n,a.path))}}return ex(a.path,a.importer,n,Qb(i,a.kind))}),a.onLoad({filter:/.*/},async t=>t.namespace&&t.namespace!==`file`?null:{contents:await e.readFile(t.path),loader:tx(t.path),resolveDir:xr(t.path)})}}}function Zb(e,t){return t.some(t=>{if(e===t)return!0;if(!t.includes(`*`))return!$b(t)&&e.startsWith(`${t}/`);let n=t.replace(/[.+?^${}()|[\]\\]/g,`\\$&`).replace(`*`,`.*`);return RegExp(`^${n}$`).test(e)})}function Qb(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 $b(e){return e.startsWith(`./`)||e.startsWith(`../`)||e.startsWith(`/`)}async function ex(e,t,n,r){let i=t?.startsWith(`/`)?xr(t):n.fromDir;try{let t=await lr(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 tx(e){let t=gr(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 nx(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=hr(t,`index${r}`);if(await e.exists(n))return n}return t}async function rx(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 ix(){return x(`esbuild`,async(e,t)=>{let n;try{n=Yb(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:zb,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)
829
- `,exitCode:2};let r;try{r=await Gr({ipk:Rb(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?ax(n,t,r):ox(n,t,r)})}async function ax(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=N(t.stdin),!r)return{stdout:zb,stderr:``,exitCode:0};let a={loader:e.loader??tx(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 rx(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 rx(n.formatMessages,t.errors,t.warnings??[]),exitCode:1}:{stdout:``,stderr:`esbuild: ${e instanceof Error?e.message:String(e)}\n`,exitCode:1}}}async function ox(e,t,n){if(e.entries.length===0)return{stdout:``,stderr:`esbuild: --bundle requires at least one entry point
830
- `,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:[Xb(t.fs,t.cwd,Rb(t),e.external,e.platform)],format:e.format??`esm`,...sx(e)};try{let r=await n.build(i),a=await rx(n.formatMessages,r.errors,r.warnings),o=r.outputFiles??[];if(e.outfile){if(o.length===0)return{stdout:``,stderr:`esbuild: build produced no output
831
- `,exitCode:1};let n=t.fs.resolvePath(t.cwd,e.outfile);await t.fs.writeFile(n,o[0].text);let r=xr(n);for(let e=1;e<o.length;e++){let n=o[e],i=hr(r,gr(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 rx(n.formatMessages,t.errors,t.warnings??[]),exitCode:1}:{stdout:``,stderr:`esbuild: ${e instanceof Error?e.message:String(e)}\n`,exitCode:1}}}function sx(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 cx(e){let t=new ArrayBuffer(e.byteLength);return new Uint8Array(t).set(e),t}var lx=class{ops(){return import(`./esptool-operations-h8-8jVn_.js`)}registry(){if(!Dt())throw Error(`Web Serial is unavailable in this browser`);return Ot()}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)}},ux=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:cx(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 dx(e,t){return e&&Dt()?new lx:t?new ux(t):null}const fx=Symbol(`picker-approval-timeout`);async function px(e,t,n){let r=Ce.generateId(),i=!1,a=we({id:r,html:Jp(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 fx;throw e}),o,s=new Promise(t=>{o=setTimeout(()=>{i=!0,Ce.cancel(r,`${e}: timed out`),t(fx)},12e4)}),c=await Promise.race([a,s]);if(o&&clearTimeout(o),c===fx)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 mx=new Set([`--vid`,`--pid`,`--baud`,`--data-bits`,`--stop-bits`,`--parity`,`--flow-control`,`--buffer-size`,`--bytes`,`--until`,`--timeout-ms`,`--dtr`,`--rts`,`--break`,`--__resolved`]);function hx(e){return Pn(e,mx)}function R(e,t){let n=/^0x/i.test(e)?parseInt(e,16):parseInt(e,10);if(!Number.isFinite(n)||Number.isNaN(n))throw Error(`invalid ${t}: '${e}'`);return n}function gx(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=R(e.get(`--vid`),`vid`)),e.has(`--pid`)&&(t.usbProductId=R(e.get(`--pid`),`pid`)),Object.keys(t).length>0?[t]:[]}const vx=new Set([`none`,`even`,`odd`]),yx=new Set([`none`,`hardware`]);function bx(e){let t={baudRate:e.has(`--baud`)?R(e.get(`--baud`),`baud`):9600};if(e.has(`--data-bits`)&&(t.dataBits=R(e.get(`--data-bits`),`data-bits`)),e.has(`--stop-bits`)&&(t.stopBits=R(e.get(`--stop-bits`),`stop-bits`)),e.has(`--parity`)){let n=e.get(`--parity`);if(!vx.has(n))throw Error(`invalid --parity: '${n}'`);t.parity=n}if(e.has(`--flow-control`)){let n=e.get(`--flow-control`);if(!yx.has(n))throw Error(`invalid --flow-control: '${n}'`);t.flowControl=n}return e.has(`--buffer-size`)&&(t.bufferSize=R(e.get(`--buffer-size`),`buffer-size`)),t}function xx(e){let t={};return e.has(`--bytes`)&&(t.maxBytes=R(e.get(`--bytes`),`bytes`)),e.has(`--until`)&&(t.until=gx(e.get(`--until`))),e.has(`--timeout-ms`)&&(t.timeoutMs=R(e.get(`--timeout-ms`),`timeout-ms`)),t}function Sx(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 Cx(e){let t={};return e.has(`--dtr`)&&(t.dataTerminalReady=Sx(e.get(`--dtr`),`dtr`)),e.has(`--rts`)&&(t.requestToSend=Sx(e.get(`--rts`),`rts`)),e.has(`--break`)&&(t.break=Sx(e.get(`--break`),`break`)),t}function wx(e){let t=Qr(e.stdin),n=new Uint8Array(t.length);for(let e=0;e<t.length;e++)n[e]=t.charCodeAt(e)&255;return n}function Tx(e){return Array.from(e,e=>e.toString(16).padStart(2,`0`)).join(` `)}function Ex(e){return`0x${e.toString(16).padStart(4,`0`)}`}function Dx(e){let t=e.usbVendorId!==void 0||e.usbProductId!==void 0?`${Ex(e.usbVendorId??0)}:${Ex(e.usbProductId??0)}`:`(native serial)`,n=e.opened?` [open]`:``;return`${e.handle}\t${t}${n}`}function Ox(e){return`cts=${+!!e.clearToSend} dcd=${+!!e.dataCarrierDetect} dsr=${+!!e.dataSetReady} ri=${+!!e.ringIndicator}\n`}function z(e){return{stdout:e,stderr:``,exitCode:0}}function B(e){return{stdout:``,stderr:`serial: ${e}\n`,exitCode:1}}const kx=`serial - access serial ports via Web Serial
832
+ `,Qb=new Set([`iife`,`cjs`,`esm`]),$b=new Set([`browser`,`node`,`neutral`]),ex=new Set([`linked`,`inline`,`external`,`both`]),tx={"-h":`showHelp`,"--help":`showHelp`,"-v":`showVersion`,"--version":`showVersion`,"--bundle":`bundle`,"--transform":`transform`,"--minify":`minify`};function nx(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 rx(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 ix(e,t,n,r){if(t.inlineValue!==null){if(!ex.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`&&ex.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}=rx(t,n,r);return e.outfile=i,a}if(t.key===`--format`){let{value:i,advance:a}=rx(t,n,r);if(!Qb.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}=rx(t,n,r);if(!$b.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}=rx(t,n,r);return e.target=i.split(`,`).map(e=>e.trim()).filter(Boolean),a}if(t.key===`--loader`){let{value:i,advance:a}=rx(t,n,r);return e.loader=i,a}return-1}function ox(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 sx(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(ox(r,`--define:`,t.define)||ox(r,`--banner:`,t.banner)||ox(r,`--footer:`,t.footer))continue;let a=nx(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+=ix(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 cx(e,t,n,r,i){return{name:`slicc-vfs`,setup(a){a.onResolve({filter:/.*/},async a=>{if(a.kind!==`entry-point`&&lx(a.path,r)||/^[a-z]+:/.test(a.path)&&!a.path.startsWith(`file:`))return{path:a.path,external:!0};if(dx(a.path)){let n=a.importer?.startsWith(`/`)?xr(a.importer):t;return{path:await mx(e,e.resolvePath(n,a.path))}}return fx(a.path,a.importer,n,ux(i,a.kind))}),a.onLoad({filter:/.*/},async t=>t.namespace&&t.namespace!==`file`?null:{contents:await e.readFile(t.path),loader:px(t.path),resolveDir:xr(t.path)})}}}function lx(e,t){return t.some(t=>{if(e===t)return!0;if(!t.includes(`*`))return!dx(t)&&e.startsWith(`${t}/`);let n=t.replace(/[.+?^${}()|[\]\\]/g,`\\$&`).replace(`*`,`.*`);return RegExp(`^${n}$`).test(e)})}function ux(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 dx(e){return e.startsWith(`./`)||e.startsWith(`../`)||e.startsWith(`/`)}async function fx(e,t,n,r){let i=t?.startsWith(`/`)?xr(t):n.fromDir;try{let t=await lr(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 px(e){let t=gr(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 mx(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=hr(t,`index${r}`);if(await e.exists(n))return n}return t}async function hx(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 gx(){return x(`esbuild`,async(e,t)=>{let n;try{n=sx(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:Zb,stderr:``,exitCode:0};if(!n.transform&&!n.bundle&&n.entries.length>1)return{stdout:``,stderr:`esbuild: multiple entry points require --bundle (transform mode accepts at most one entry)
833
+ `,exitCode:2};let r;try{r=await Gr({ipk:Xb(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?_x(n,t,r):vx(n,t,r)})}async function _x(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=N(t.stdin),!r)return{stdout:Zb,stderr:``,exitCode:0};let a={loader:e.loader??px(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 hx(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 hx(n.formatMessages,t.errors,t.warnings??[]),exitCode:1}:{stdout:``,stderr:`esbuild: ${e instanceof Error?e.message:String(e)}\n`,exitCode:1}}}async function vx(e,t,n){if(e.entries.length===0)return{stdout:``,stderr:`esbuild: --bundle requires at least one entry point
834
+ `,exitCode:2};let r=e.entries.map(e=>t.fs.resolvePath(t.cwd,e));for(let e of r)if(!await t.fs.exists(e))return{stdout:``,stderr:`esbuild: ${e}: no such file\n`,exitCode:1};let i={entryPoints:r,bundle:!0,write:!1,plugins:[cx(t.fs,t.cwd,Xb(t),e.external,e.platform)],format:e.format??`esm`,...yx(e)};try{let r=await n.build(i),a=await hx(n.formatMessages,r.errors,r.warnings),o=r.outputFiles??[];if(e.outfile){if(o.length===0)return{stdout:``,stderr:`esbuild: build produced no output
835
+ `,exitCode:1};let n=t.fs.resolvePath(t.cwd,e.outfile);await t.fs.writeFile(n,o[0].text);let r=xr(n);for(let e=1;e<o.length;e++){let n=o[e],i=hr(r,gr(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 hx(n.formatMessages,t.errors,t.warnings??[]),exitCode:1}:{stdout:``,stderr:`esbuild: ${e instanceof Error?e.message:String(e)}\n`,exitCode:1}}}function yx(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 bx(e){let t=new ArrayBuffer(e.byteLength);return new Uint8Array(t).set(e),t}var xx=class{ops(){return import(`./esptool-operations-h8-8jVn_.js`)}registry(){if(!Dt())throw Error(`Web Serial is unavailable in this browser`);return Ot()}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)}},Sx=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:bx(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 Cx(e,t){return e&&Dt()?new xx:t?new Sx(t):null}const wx=Symbol(`picker-approval-timeout`);async function Tx(e,t,n){let r=Ce.generateId(),i=!1,a=we({id:r,html:om(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 wx;throw e}),o,s=new Promise(t=>{o=setTimeout(()=>{i=!0,Ce.cancel(r,`${e}: timed out`),t(wx)},12e4)}),c=await Promise.race([a,s]);if(o&&clearTimeout(o),c===wx)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 Ex=new Set([`--vid`,`--pid`,`--baud`,`--data-bits`,`--stop-bits`,`--parity`,`--flow-control`,`--buffer-size`,`--bytes`,`--until`,`--timeout-ms`,`--dtr`,`--rts`,`--break`,`--__resolved`]);function Dx(e){return Pn(e,Ex)}function R(e,t){let n=/^0x/i.test(e)?parseInt(e,16):parseInt(e,10);if(!Number.isFinite(n)||Number.isNaN(n))throw Error(`invalid ${t}: '${e}'`);return n}function Ox(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 kx(e){let t={};return e.has(`--vid`)&&(t.usbVendorId=R(e.get(`--vid`),`vid`)),e.has(`--pid`)&&(t.usbProductId=R(e.get(`--pid`),`pid`)),Object.keys(t).length>0?[t]:[]}const Ax=new Set([`none`,`even`,`odd`]),jx=new Set([`none`,`hardware`]);function Mx(e){let t={baudRate:e.has(`--baud`)?R(e.get(`--baud`),`baud`):9600};if(e.has(`--data-bits`)&&(t.dataBits=R(e.get(`--data-bits`),`data-bits`)),e.has(`--stop-bits`)&&(t.stopBits=R(e.get(`--stop-bits`),`stop-bits`)),e.has(`--parity`)){let n=e.get(`--parity`);if(!Ax.has(n))throw Error(`invalid --parity: '${n}'`);t.parity=n}if(e.has(`--flow-control`)){let n=e.get(`--flow-control`);if(!jx.has(n))throw Error(`invalid --flow-control: '${n}'`);t.flowControl=n}return e.has(`--buffer-size`)&&(t.bufferSize=R(e.get(`--buffer-size`),`buffer-size`)),t}function Nx(e){let t={};return e.has(`--bytes`)&&(t.maxBytes=R(e.get(`--bytes`),`bytes`)),e.has(`--until`)&&(t.until=Ox(e.get(`--until`))),e.has(`--timeout-ms`)&&(t.timeoutMs=R(e.get(`--timeout-ms`),`timeout-ms`)),t}function Px(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 Fx(e){let t={};return e.has(`--dtr`)&&(t.dataTerminalReady=Px(e.get(`--dtr`),`dtr`)),e.has(`--rts`)&&(t.requestToSend=Px(e.get(`--rts`),`rts`)),e.has(`--break`)&&(t.break=Px(e.get(`--break`),`break`)),t}function Ix(e){let t=Qr(e.stdin),n=new Uint8Array(t.length);for(let e=0;e<t.length;e++)n[e]=t.charCodeAt(e)&255;return n}function Lx(e){return Array.from(e,e=>e.toString(16).padStart(2,`0`)).join(` `)}function Rx(e){return`0x${e.toString(16).padStart(4,`0`)}`}function zx(e){let t=e.usbVendorId!==void 0||e.usbProductId!==void 0?`${Rx(e.usbVendorId??0)}:${Rx(e.usbProductId??0)}`:`(native serial)`,n=e.opened?` [open]`:``;return`${e.handle}\t${t}${n}`}function Bx(e){return`cts=${+!!e.clearToSend} dcd=${+!!e.dataCarrierDetect} dsr=${+!!e.dataSetReady} ri=${+!!e.ringIndicator}\n`}function z(e){return{stdout:e,stderr:``,exitCode:0}}function B(e){return{stdout:``,stderr:`serial: ${e}\n`,exitCode:1}}const Vx=`serial - access serial ports via Web Serial
832
836
 
833
837
  Usage: serial <subcommand> [options]
834
838
 
@@ -859,9 +863,9 @@ Options:
859
863
  -h, --help
860
864
 
861
865
  Reads/writes are capped at ${jt} bytes (4 MiB).
862
- `;function Ax(e,t){if(t)return z(e.length?`${Tx(e)}\n`:``);let n=``;for(let t=0;t<e.length;t++)n+=String.fromCharCode(e[t]);return z(n)}async function jx(e){let t=await e.list();return t.length===0?z(`no granted serial ports
863
- `):z(`${t.map(Dx).join(`
864
- `)}\n`)}async function Mx(e,t){let n=e.get(`--__resolved`);if(n)return z(`${Dx(await t.info(n))}\n`);let r=_x(e),i=Se();if(i){let e=await px(`serial-port`,r,i);if(e.handle)return z(`${Dx(await t.info(e.handle))}\n`);let n=e.info,a=Dt();if(!a)return B(`request: Web Serial unavailable for port re-acquire`);let o=(await a.getPorts()).find(e=>{let t=typeof e.getInfo==`function`?e.getInfo():{};return(n.usbVendorId===void 0||t.usbVendorId===n.usbVendorId)&&(n.usbProductId===void 0||t.usbProductId===n.usbProductId)});if(!o)return B(`request: granted port could not be re-acquired`);let s=Ot(),c=s.register(o),l=s.get(c);return l?z(`${Dx(Rt(c,l))}\n`):B(`request: failed to register granted port`)}return z(`${Dx(await t.request(r))}\n`)}async function Nx(e,t,n){let r=e[1];return r?(await n.open(r,bx(t)),z(``)):B(`open: handle required`)}async function Px(e,t){let n=e[1];return n?(await t.close(n),z(``)):B(`close: handle required`)}async function Fx(e,t,n,r){let i=e[1];if(!i)return B(`read: handle required`);let a=xx(t);return a.maxBytes!==void 0&&a.maxBytes>4194304?B(`read --bytes exceeds 4 MiB limit`):Ax(await r.read(i,a),n.has(`--hex`))}async function Ix(e,t,n){let r=e[1];if(!r)return B(`write: handle required`);let i=wx(t);return i.length>4194304?B(`write payload exceeds 4 MiB limit`):z(`${await n.write(r,i)} bytes written\n`)}async function Lx(e,t,n){let[,r,i]=e;return!r||!i?B(`signals: handle and get|set required`):i===`get`?z(Ox(await n.getSignals(r))):i===`set`?(await n.setSignals(r,Cx(t)),z(``)):B(`signals: unknown action '${i}' (use get|set)`)}async function Rx(e,t,n){let{positionals:r,flags:i,bools:a}=hx(e),o=r[0];switch(o){case`list`:return jx(n);case`request`:return Mx(i,n);case`open`:return Nx(r,i,n);case`close`:return Px(r,n);case`read`:return Fx(r,i,a,n);case`write`:return Ix(r,t,n);case`signals`:return Lx(r,i,n);default:return B(`unknown subcommand '${o??``}'. Try 'serial --help'.`)}}function zx(){return x(`serial`,async(e,t)=>{if(e.length===0||e.includes(`--help`)||e.includes(`-h`))return z(kx);let n=Et(s(),o());if(!n)return B(`Web Serial is unavailable in this environment`);try{return await Rx(e,t,n)}catch(e){let t=e instanceof Error?e.message:String(e);return/cancelled|NotFoundError|No port selected/i.test(t)?B(`user cancelled or no port selected`):B(t)}})}const Bx=new Set([`--port`,`--baud`,`--vid`,`--pid`]),Vx=115200;function Hx(e){return Pn(e,Bx)}function Ux(e){let t=e.replace(/-/g,`_`);return t===`chip_info`||t===`id`?`chip_id`:t}function Wx(e){return{stdout:e,stderr:``,exitCode:0}}function Gx(e){return{stdout:``,stderr:`esptool: ${e}\n`,exitCode:1}}const Kx=`esptool - flash ESP32 / ESP8266 chips via esptool-js
866
+ `;function Hx(e,t){if(t)return z(e.length?`${Lx(e)}\n`:``);let n=``;for(let t=0;t<e.length;t++)n+=String.fromCharCode(e[t]);return z(n)}async function Ux(e){let t=await e.list();return t.length===0?z(`no granted serial ports
867
+ `):z(`${t.map(zx).join(`
868
+ `)}\n`)}async function Wx(e,t){let n=e.get(`--__resolved`);if(n)return z(`${zx(await t.info(n))}\n`);let r=kx(e),i=Se();if(i){let e=await Tx(`serial-port`,r,i);if(e.handle)return z(`${zx(await t.info(e.handle))}\n`);let n=e.info,a=Dt();if(!a)return B(`request: Web Serial unavailable for port re-acquire`);let o=(await a.getPorts()).find(e=>{let t=typeof e.getInfo==`function`?e.getInfo():{};return(n.usbVendorId===void 0||t.usbVendorId===n.usbVendorId)&&(n.usbProductId===void 0||t.usbProductId===n.usbProductId)});if(!o)return B(`request: granted port could not be re-acquired`);let s=Ot(),c=s.register(o),l=s.get(c);return l?z(`${zx(Rt(c,l))}\n`):B(`request: failed to register granted port`)}return z(`${zx(await t.request(r))}\n`)}async function Gx(e,t,n){let r=e[1];return r?(await n.open(r,Mx(t)),z(``)):B(`open: handle required`)}async function Kx(e,t){let n=e[1];return n?(await t.close(n),z(``)):B(`close: handle required`)}async function qx(e,t,n,r){let i=e[1];if(!i)return B(`read: handle required`);let a=Nx(t);return a.maxBytes!==void 0&&a.maxBytes>4194304?B(`read --bytes exceeds 4 MiB limit`):Hx(await r.read(i,a),n.has(`--hex`))}async function Jx(e,t,n){let r=e[1];if(!r)return B(`write: handle required`);let i=Ix(t);return i.length>4194304?B(`write payload exceeds 4 MiB limit`):z(`${await n.write(r,i)} bytes written\n`)}async function Yx(e,t,n){let[,r,i]=e;return!r||!i?B(`signals: handle and get|set required`):i===`get`?z(Bx(await n.getSignals(r))):i===`set`?(await n.setSignals(r,Fx(t)),z(``)):B(`signals: unknown action '${i}' (use get|set)`)}async function Xx(e,t,n){let{positionals:r,flags:i,bools:a}=Dx(e),o=r[0];switch(o){case`list`:return Ux(n);case`request`:return Wx(i,n);case`open`:return Gx(r,i,n);case`close`:return Kx(r,n);case`read`:return qx(r,i,a,n);case`write`:return Jx(r,t,n);case`signals`:return Yx(r,i,n);default:return B(`unknown subcommand '${o??``}'. Try 'serial --help'.`)}}function Zx(){return x(`serial`,async(e,t)=>{if(e.length===0||e.includes(`--help`)||e.includes(`-h`))return z(Vx);let n=Et(s(),o());if(!n)return B(`Web Serial is unavailable in this environment`);try{return await Xx(e,t,n)}catch(e){let t=e instanceof Error?e.message:String(e);return/cancelled|NotFoundError|No port selected/i.test(t)?B(`user cancelled or no port selected`):B(t)}})}const Qx=new Set([`--port`,`--baud`,`--vid`,`--pid`]),$x=115200;function eS(e){return Pn(e,Qx)}function tS(e){let t=e.replace(/-/g,`_`);return t===`chip_info`||t===`id`?`chip_id`:t}function nS(e){return{stdout:e,stderr:``,exitCode:0}}function rS(e){return{stdout:``,stderr:`esptool: ${e}\n`,exitCode:1}}const iS=`esptool - flash ESP32 / ESP8266 chips via esptool-js
865
869
 
866
870
  Usage: esptool [--port H] [--baud N] <subcommand> [args]
867
871
 
@@ -878,28 +882,28 @@ Subcommands:
878
882
 
879
883
  Options:
880
884
  --port H Use an existing serial handle from 'serial request'
881
- --baud N Flash baud rate (default ${Vx})
885
+ --baud N Flash baud rate (default ${$x})
882
886
  --vid 0x.. Picker filter when --port is omitted
883
887
  --pid 0x.. Picker filter when --port is omitted
884
888
  --erase write_flash: erase the whole chip before writing
885
889
  -h, --help
886
890
 
887
891
  Without --port, the Web Serial picker opens (needs a user gesture).
888
- `;async function qx(e,t){return e.get(`--port`)||(await t.request(_x(e))).handle}async function Jx(e,t){let n=e.slice(1);if(n.length===0||n.length%2!=0)throw Error(`write_flash expects <addr> <file> pairs`);let r=[];for(let e=0;e<n.length;e+=2){let i=R(n[e],`address`),a=t.fs.resolvePath(t.cwd,n[e+1]),o=await t.fs.readFileBuffer(a);r.push({address:i,data:o})}return r}async function Yx(e,t,n,r){let{positionals:i,flags:a,bools:o}=Hx(e),s=Ux(i[0]??``),c=a.has(`--baud`)?R(a.get(`--baud`),`baud`):Vx,l=[],u=e=>l.push(e);switch(s){case`chip_id`:{let e=await qx(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}`),Wx(`${l.join(`
889
- `)}\n`)}case`read_mac`:{let e=await qx(a,r),{mac:t}=await n.readMac(e,c,u);return l.push(`MAC: ${t}`),Wx(`${l.join(`
890
- `)}\n`)}case`erase_flash`:{let e=await qx(a,r);return await n.eraseFlash(e,c,u),Wx(l.length?`${l.join(`
892
+ `;async function aS(e,t){return e.get(`--port`)||(await t.request(kx(e))).handle}async function oS(e,t){let n=e.slice(1);if(n.length===0||n.length%2!=0)throw Error(`write_flash expects <addr> <file> pairs`);let r=[];for(let e=0;e<n.length;e+=2){let i=R(n[e],`address`),a=t.fs.resolvePath(t.cwd,n[e+1]),o=await t.fs.readFileBuffer(a);r.push({address:i,data:o})}return r}async function sS(e,t,n,r){let{positionals:i,flags:a,bools:o}=eS(e),s=tS(i[0]??``),c=a.has(`--baud`)?R(a.get(`--baud`),`baud`):$x,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}`),nS(`${l.join(`
893
+ `)}\n`)}case`read_mac`:{let e=await aS(a,r),{mac:t}=await n.readMac(e,c,u);return l.push(`MAC: ${t}`),nS(`${l.join(`
894
+ `)}\n`)}case`erase_flash`:{let e=await aS(a,r);return await n.eraseFlash(e,c,u),nS(l.length?`${l.join(`
891
895
  `)}\n`:`flash erased
892
- `)}case`write_flash`:{let e=await Jx(i,t),s=await qx(a,r);return await n.flash(s,c,o.has(`--erase`),e,u),Wx(l.length?`${l.join(`
896
+ `)}case`write_flash`:{let e=await oS(i,t),s=await aS(a,r);return await n.flash(s,c,o.has(`--erase`),e,u),nS(l.length?`${l.join(`
893
897
  `)}\n`:`flash written
894
- `)}case`read_flash`:{if(i.length<4)return Gx(`read_flash expects <addr> <size> <outfile>`);let e=R(i[1],`address`),o=R(i[2],`size`),s=t.fs.resolvePath(t.cwd,i[3]),d=await qx(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}`),Wx(`${l.join(`
895
- `)}\n`)}case`read_reg`:{if(i.length<2)return Gx(`read_reg expects <addr>`);let e=R(i[1],`address`),t=await qx(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`)}`),Wx(`${l.join(`
896
- `)}\n`)}case`flash_id`:{let e=await qx(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`}`),Wx(`${l.join(`
897
- `)}\n`)}case`erase_region`:{if(i.length<3)return Gx(`erase_region expects <addr> <size>`);let e=R(i[1],`address`),t=R(i[2],`size`),o=await qx(a,r);return await n.eraseRegion(o,c,e,t,u),Wx(l.length?`${l.join(`
898
+ `)}case`read_flash`:{if(i.length<4)return rS(`read_flash expects <addr> <size> <outfile>`);let e=R(i[1],`address`),o=R(i[2],`size`),s=t.fs.resolvePath(t.cwd,i[3]),d=await 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}`),nS(`${l.join(`
899
+ `)}\n`)}case`read_reg`:{if(i.length<2)return rS(`read_reg expects <addr>`);let e=R(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`)}`),nS(`${l.join(`
900
+ `)}\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`}`),nS(`${l.join(`
901
+ `)}\n`)}case`erase_region`:{if(i.length<3)return rS(`erase_region expects <addr> <size>`);let e=R(i[1],`address`),t=R(i[2],`size`),o=await aS(a,r);return await n.eraseRegion(o,c,e,t,u),nS(l.length?`${l.join(`
898
902
  `)}\n`:`region erased
899
- `)}case`run`:{let e=await qx(a,r);return await n.run(e,c,u),Wx(l.length?`${l.join(`
903
+ `)}case`run`:{let e=await aS(a,r);return await n.run(e,c,u),nS(l.length?`${l.join(`
900
904
  `)}\n`:`running app
901
- `)}default:return Gx(`unknown subcommand '${i[0]??``}'. Try 'esptool --help'.`)}}function Xx(){return x(`esptool`,async(e,t)=>{if(e.length===0||e.includes(`--help`)||e.includes(`-h`))return Wx(Kx);let n=s(),r=o(),i=dx(n,r),a=Et(n,r);if(!i||!a)return Gx(`Web Serial is unavailable in this environment`);try{return await Yx(e,t,i,a)}catch(e){let t=e instanceof Error?e.message:String(e);return/cancelled|NotFoundError|No port selected/i.test(t)?Gx(`user cancelled or no port selected`):Gx(t)}})}function Zx(){return x(`ffmpeg`,async(e,t)=>{let{runFfmpeg:n}=await import(`./run-dNFrBZDI.js`);return n(e,t)})}function Qx(){return x(`ffprobe`,async(e,t)=>{let{runFfprobe:n}=await import(`./run-DK8nktud.js`);return n(e,t)})}const $x=new Map;let eS=0;const tS=e=>({stdout:e,stderr:``,exitCode:0}),nS=e=>({stdout:``,stderr:`fswatch: ${e}\n`,exitCode:1}),rS=[`--path`,`--pattern`,`--scoop`,`--name`];function iS(e){let t=S(e.slice(1),{});if(`error`in t)return nS(t.error);if($x.size===0)return tS(`No active file watchers.
902
- `);let n=``;for(let[,e]of $x)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 tS(n)}function aS(e){let t=S(e.slice(1),{});if(`error`in t)return nS(t.error);let n=t.positionals[0];if(!n)return nS(`delete requires an ID`);let r=$x.get(n);return r?(r.unsubscribe(),$x.delete(n),tS(`Deleted watcher "${r.name}" (${n})\n`)):nS(`watcher not found: ${n}`)}function oS(e){let t=S(e.slice(1),{value:rS});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 sS(e){let t=RegExp(`^`+e.replace(/\./g,`\\.`).replace(/\*/g,`.*`)+`$`);return e=>t.test(e.split(`/`).pop()??``)}async function cS(e,t){let n=oS(e);if(`error`in n)return nS(n.error);let r=n,i=r.scoop||void 0;if(r.scoop=Ii(r.scoop,t)??``,!r.basePath||!r.pattern)return nS(`--path and --pattern are required`);let a=await qv(await Gv(),`fswatch create`,i);if(a)return{stdout:``,stderr:a,exitCode:1};let o=globalThis,s=o.__slicc_fs_watcher;if(!s)return nS(`file system watcher not available`);let c=`fsw-${++eS}`,l=r.name||`${r.pattern} in ${r.basePath}`,u=o.__slicc_lick_handler,d=s.watch(r.basePath,sS(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}})});$x.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`),tS(f)}function lS(){return x(`fswatch`,async(e,t)=>{let n=e[0];if(!n||C(e,{valueFlags:rS}))return tS(`usage: fswatch <command> [options]
905
+ `)}default:return rS(`unknown subcommand '${i[0]??``}'. Try 'esptool --help'.`)}}function cS(){return x(`esptool`,async(e,t)=>{if(e.length===0||e.includes(`--help`)||e.includes(`-h`))return nS(iS);let n=s(),r=o(),i=Cx(n,r),a=Et(n,r);if(!i||!a)return rS(`Web Serial is unavailable in this environment`);try{return await sS(e,t,i,a)}catch(e){let t=e instanceof Error?e.message:String(e);return/cancelled|NotFoundError|No port selected/i.test(t)?rS(`user cancelled or no port selected`):rS(t)}})}function lS(){return x(`ffmpeg`,async(e,t)=>{let{runFfmpeg:n}=await import(`./run-dNFrBZDI.js`);return n(e,t)})}function uS(){return x(`ffprobe`,async(e,t)=>{let{runFfprobe:n}=await import(`./run-DK8nktud.js`);return n(e,t)})}const dS=new Map;let fS=0;const pS=e=>({stdout:e,stderr:``,exitCode:0}),mS=e=>({stdout:``,stderr:`fswatch: ${e}\n`,exitCode:1}),hS=[`--path`,`--pattern`,`--scoop`,`--name`];function gS(e){let t=S(e.slice(1),{});if(`error`in t)return mS(t.error);if(dS.size===0)return pS(`No active file watchers.
906
+ `);let n=``;for(let[,e]of dS)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 pS(n)}function _S(e){let t=S(e.slice(1),{});if(`error`in t)return mS(t.error);let n=t.positionals[0];if(!n)return mS(`delete requires an ID`);let r=dS.get(n);return r?(r.unsubscribe(),dS.delete(n),pS(`Deleted watcher "${r.name}" (${n})\n`)):mS(`watcher not found: ${n}`)}function vS(e){let t=S(e.slice(1),{value:hS});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 yS(e){let t=RegExp(`^`+e.replace(/\./g,`\\.`).replace(/\*/g,`.*`)+`$`);return e=>t.test(e.split(`/`).pop()??``)}async function bS(e,t){let n=vS(e);if(`error`in n)return mS(n.error);let r=n,i=r.scoop||void 0;if(r.scoop=Ii(r.scoop,t)??``,!r.basePath||!r.pattern)return mS(`--path and --pattern are required`);let a=await ay(await ry(),`fswatch create`,i);if(a)return{stdout:``,stderr:a,exitCode:1};let o=globalThis,s=o.__slicc_fs_watcher;if(!s)return mS(`file system watcher not available`);let c=`fsw-${++fS}`,l=r.name||`${r.pattern} in ${r.basePath}`,u=o.__slicc_lick_handler,d=s.watch(r.basePath,yS(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}})});dS.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`),pS(f)}function xS(){return x(`fswatch`,async(e,t)=>{let n=e[0];if(!n||C(e,{valueFlags:hS}))return pS(`usage: fswatch <command> [options]
903
907
 
904
908
  Commands:
905
909
  create --path <path> --pattern <glob> [--scoop <name>] [--name <name>] Watch for file changes
@@ -911,7 +915,7 @@ Options:
911
915
  --pattern <glob> File pattern to match, e.g. "*.md", "*.bsh" (required)
912
916
  --scoop <target> Scoop name, cone name, or folder. Omit for your own cone.
913
917
  --name <name> Human-readable name for the watcher
914
- `);switch(n){case`list`:return iS(e);case`delete`:return aS(e);case`create`:return await cS(e,t.env);default:return nS(`unknown command: ${n}`)}})}function uS(e){return x(`gelatiere`,async(t,n)=>{let{runGelatiere:r}=await import(`./run-AEc54ckO.js`);return r(t,n,e)})}function dS(e){return typeof e.stdoutIsTTY!=`boolean`||e.stdoutIsTTY}function fS(e,t){return typeof e.stdinIsTTY==`boolean`?e.stdinIsTTY:t===void 0?Qr(e.stdin).length===0:t===0}function pS(){return{stdout:`usage: hear [-i file] [-l lang] [-T seconds] [-d deviceId] [--engine name]
918
+ `);switch(n){case`list`:return gS(e);case`delete`:return _S(e);case`create`:return await bS(e,t.env);default:return mS(`unknown command: ${n}`)}})}function SS(e){return x(`gelatiere`,async(t,n)=>{let{runGelatiere:r}=await import(`./run-BdKGAVS2.js`);return r(t,n,e)})}function CS(e){return typeof e.stdoutIsTTY!=`boolean`||e.stdoutIsTTY}function wS(e,t){return typeof e.stdinIsTTY==`boolean`?e.stdinIsTTY:t===void 0?Qr(e.stdin).length===0:t===0}function TS(){return{stdout:`usage: hear [-i file] [-l lang] [-T seconds] [-d deviceId] [--engine name]
915
919
  hear --devices | --status | --warmup
916
920
 
917
921
  Speech recognition: listens on the microphone until you pause, then
@@ -930,26 +934,26 @@ Options:
930
934
  --devices List audio input devices
931
935
  --status Show the enhanced model state (downloading/ready + ETA)
932
936
  --warmup Start the enhanced model download in the background
933
- `,stderr:``,exitCode:0}}const mS={"--devices":`devices`,"--status":`status`,"--warmup":`warmup`},hS={"-i":`a file path`,"-l":`a language tag`,"-T":`a timeout in seconds`,"-d":`a device id`,"--engine":`an engine name`};function gS(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 _S(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=mS[r];if(i){t[i]=!0;continue}if(!(r in hS))return yS(`unknown option: ${r}`);let a=n+1<e.length?e[++n]:null;if(a==null)return yS(`${r} requires ${hS[r]}`);let o=gS(t,r,a);if(o)return yS(o)}return t}function vS(e){switch(e.state){case`ready`:return`enhanced engine: ready
937
+ `,stderr:``,exitCode:0}}const ES={"--devices":`devices`,"--status":`status`,"--warmup":`warmup`},DS={"-i":`a file path`,"-l":`a language tag`,"-T":`a timeout in seconds`,"-d":`a device id`,"--engine":`an engine name`};function OS(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 kS(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=ES[r];if(i){t[i]=!0;continue}if(!(r in DS))return jS(`unknown option: ${r}`);let a=n+1<e.length?e[++n]:null;if(a==null)return jS(`${r} requires ${DS[r]}`);let o=OS(t,r,a);if(o)return jS(o)}return t}function AS(e){switch(e.state){case`ready`:return`enhanced engine: ready
934
938
  `;case`failed`:return`enhanced engine: failed (re-run hear --warmup to retry)
935
939
  `;case`idle`:return`enhanced engine: not downloaded (run hear --warmup)
936
- `;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 yS(e){return{stdout:``,stderr:`hear: ${e}\n`,exitCode:1}}function bS(e){return e instanceof Error?e.message:String(e)}function xS(e){let t=e.map((e,t)=>`${e.deviceId}\t${e.label||`Microphone ${t+1}`}`);return t.join(`
940
+ `;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 jS(e){return{stdout:``,stderr:`hear: ${e}\n`,exitCode:1}}function MS(e){return e instanceof Error?e.message:String(e)}function NS(e){let t=e.map((e,t)=>`${e.deviceId}\t${e.label||`Microphone ${t+1}`}`);return t.join(`
937
941
  `)+(t.length?`
938
- `:``)}async function SS(e){try{return e.local?navigator.mediaDevices?.enumerateDevices?{stdout:xS((await navigator.mediaDevices.enumerateDevices()).filter(e=>e.kind===`audioinput`)),stderr:``,exitCode:0}:yS(`device enumeration unavailable`):{stdout:xS((await e.panelRpc.call(`enumerate-media-devices`,void 0)).audioinputs),stderr:``,exitCode:0}}catch(e){return yS(bS(e))}}async function CS(e,t){try{if(e.local){let{hearStatus:e,hearWarmup:n}=await import(`./speech-page-realm-stub-C7EPKrHd.js`);return{stdout:vS(t?n():e()),stderr:``,exitCode:0}}return{stdout:vS(t?await e.panelRpc.call(`hear-warmup`,void 0):await e.panelRpc.call(`hear-status`,void 0)),stderr:``,exitCode:0}}catch(e){return yS(bS(e))}}function wS(e){let t=new ArrayBuffer(e.byteLength);return new Uint8Array(t).set(e),t}async function TS(e,t,n,r){if(n.byteLength===0)return yS(`no audio on ${r}`);let i=wS(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+`
939
- `,stderr:``,exitCode:0}}catch(e){return yS(`transcription failed: ${bS(e)}`)}}async function ES(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 yS(`cannot open ${r}: No such file`)}let o=ur(i);return!o.startsWith(`audio/`)&&!o.startsWith(`video/`)?yS(`${r} is not an audio file`):TS(e,t,a,r)}async function DS(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+`
942
+ `:``)}async function PS(e){try{return e.local?navigator.mediaDevices?.enumerateDevices?{stdout:NS((await navigator.mediaDevices.enumerateDevices()).filter(e=>e.kind===`audioinput`)),stderr:``,exitCode:0}:jS(`device enumeration unavailable`):{stdout:NS((await e.panelRpc.call(`enumerate-media-devices`,void 0)).audioinputs),stderr:``,exitCode:0}}catch(e){return jS(MS(e))}}async function FS(e,t){try{if(e.local){let{hearStatus:e,hearWarmup:n}=await import(`./speech-page-realm-stub-C7EPKrHd.js`);return{stdout:AS(t?n():e()),stderr:``,exitCode:0}}return{stdout:AS(t?await e.panelRpc.call(`hear-warmup`,void 0):await e.panelRpc.call(`hear-status`,void 0)),stderr:``,exitCode:0}}catch(e){return jS(MS(e))}}function IS(e){let t=new ArrayBuffer(e.byteLength);return new Uint8Array(t).set(e),t}async function LS(e,t,n,r){if(n.byteLength===0)return jS(`no audio on ${r}`);let i=IS(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+`
943
+ `,stderr:``,exitCode:0}}catch(e){return jS(`transcription failed: ${MS(e)}`)}}async function RS(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 jS(`cannot open ${r}: No such file`)}let o=ur(i);return!o.startsWith(`audio/`)&&!o.startsWith(`video/`)?jS(`${r} is not an audio file`):LS(e,t,a,r)}async function zS(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+`
940
944
  `,stderr:``,exitCode:0}:{stdout:``,stderr:`hear: no speech detected
941
- `,exitCode:1}}catch(e){return yS(bS(e))}}function OS(){return x(`hear`,async(e,t)=>{if(e.includes(`--help`)||e.includes(`-h`))return pS();let n=_S(e);if(`exitCode`in n)return n;let r={local:s(),panelRpc:o()};if(!r.local&&!r.panelRpc)return yS(`speech recognition unavailable in this environment`);if(n.devices)return SS(r);if(n.status||n.warmup)return CS(r,n.warmup);if(n.inputFile&&n.inputFile!==`-`)return ES(r,n,t);let i=$r(t.stdin);return n.inputFile===`-`||n.deviceId==null&&!fS(t,i.byteLength)?TS(r,n,i,`stdin`):DS(r,n)})}function kS(e,t,n){return typeof e.onSessionReplaced==`function`?e.onSessionReplaced(t,n):()=>void 0}function AS(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=kS(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 jS=[`debug`,`log`,`info`,`warning`,`error`],MS=1e3,NS={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 PS(e,t,n,r,i){if(t.consoleCleanup.has(r))return;t.consoleMessages.set(r,[]);let a=AS({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=NS[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>MS&&c.splice(0,c.length-MS))}]],enable:(e,t)=>e.send(`Runtime.enable`,{},t)});t.consoleCleanup.set(r,()=>a.stop())}const FS=async({browser:e,state:t,positional:n,flags:r,onTab:i})=>{let a=A(r);if(`error`in a)return{stdout:``,stderr:a.error,exitCode:1};let o=n[0]??`log`,s=r.clear===`true`,c=jS.indexOf(o);if(c===-1)return{stdout:``,stderr:`Invalid level "${o}". Valid: ${jS.join(`, `)}\n`,exitCode:1};t.consoleCleanup.has(a.targetId)||await i(a.targetId,async({sessionId:n,transport:r})=>{await r.send(`Runtime.enable`,{},n),PS(e,t,r,a.targetId,n)});let l=(t.consoleMessages.get(a.targetId)??[]).filter(e=>jS.indexOf(e.level)>=c);return s&&t.consoleMessages.set(a.targetId,[]),l.length===0?{stdout:`No console messages
945
+ `,exitCode:1}}catch(e){return jS(MS(e))}}function BS(){return x(`hear`,async(e,t)=>{if(e.includes(`--help`)||e.includes(`-h`))return TS();let n=kS(e);if(`exitCode`in n)return n;let r={local:s(),panelRpc:o()};if(!r.local&&!r.panelRpc)return jS(`speech recognition unavailable in this environment`);if(n.devices)return PS(r);if(n.status||n.warmup)return FS(r,n.warmup);if(n.inputFile&&n.inputFile!==`-`)return RS(r,n,t);let i=$r(t.stdin);return n.inputFile===`-`||n.deviceId==null&&!wS(t,i.byteLength)?LS(r,n,i,`stdin`):zS(r,n)})}function VS(e,t,n){return typeof e.onSessionReplaced==`function`?e.onSessionReplaced(t,n):()=>void 0}function HS(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=VS(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 US=[`debug`,`log`,`info`,`warning`,`error`],WS=1e3,GS={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 KS(e,t,n,r,i){if(t.consoleCleanup.has(r))return;t.consoleMessages.set(r,[]);let a=HS({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=GS[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>WS&&c.splice(0,c.length-WS))}]],enable:(e,t)=>e.send(`Runtime.enable`,{},t)});t.consoleCleanup.set(r,()=>a.stop())}const qS=async({browser:e,state:t,positional:n,flags:r,onTab:i})=>{let a=A(r);if(`error`in a)return{stdout:``,stderr:a.error,exitCode:1};let o=n[0]??`log`,s=r.clear===`true`,c=US.indexOf(o);if(c===-1)return{stdout:``,stderr:`Invalid level "${o}". Valid: ${US.join(`, `)}\n`,exitCode:1};t.consoleCleanup.has(a.targetId)||await i(a.targetId,async({sessionId:n,transport:r})=>{await r.send(`Runtime.enable`,{},n),KS(e,t,r,a.targetId,n)});let l=(t.consoleMessages.get(a.targetId)??[]).filter(e=>US.indexOf(e.level)>=c);return s&&t.consoleMessages.set(a.targetId,[]),l.length===0?{stdout:`No console messages
942
946
  `,stderr:``,exitCode:0}:{stdout:l.map(e=>`[${e.level}] ${e.text}`).join(`
943
947
  `)+`
944
- `,stderr:``,exitCode:0}};function IS(e){return e.cookies??[]}function LS(e){return`${e.name}=${e.value}\tDomain=${e.domain}\tPath=${e.path}\tSecure=${e.secure}\tHttpOnly=${e.httpOnly}\tExpires=${e.expires}`}function RS(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 zS(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 BS=async({browser:e,flags:t,onTab:n})=>{let r=A(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=IS(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(LS).join(`
948
+ `,stderr:``,exitCode:0}};function JS(e){return e.cookies??[]}function YS(e){return`${e.name}=${e.value}\tDomain=${e.domain}\tPath=${e.path}\tSecure=${e.secure}\tHttpOnly=${e.httpOnly}\tExpires=${e.expires}`}function XS(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 ZS(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 QS=async({browser:e,flags:t,onTab:n})=>{let r=A(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=JS(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(YS).join(`
945
949
  `)})+`
946
- `,stderr:``,exitCode:0}},VS=async({browser:e,positional:t,flags:n,onTab:r})=>{if(t.length===0)return{stdout:``,stderr:`cookie-get requires a cookie name
947
- `,exitCode:1};let i=A(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=IS(await e.send(`Network.getCookies`)).filter(e=>e.name===a);if(t.length===0)throw Error(`Cookie "${a}" not found`);return t.map(LS).join(`
950
+ `,stderr:``,exitCode:0}},$S=async({browser:e,positional:t,flags:n,onTab:r})=>{if(t.length===0)return{stdout:``,stderr:`cookie-get requires a cookie name
951
+ `,exitCode:1};let i=A(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=JS(await e.send(`Network.getCookies`)).filter(e=>e.name===a);if(t.length===0)throw Error(`Cookie "${a}" not found`);return t.map(YS).join(`
948
952
  `)})+`
949
- `,stderr:``,exitCode:0}},HS=async({browser:e,positional:t,flags:n,onTab:r})=>{if(t.length<2)return{stdout:``,stderr:`cookie-set requires <name> <value>
950
- `,exitCode:1};let i=A(n);return`error`in i?{stdout:``,stderr:i.error,exitCode:1}:(await r(i.targetId,async e=>{let r=await Zn(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`,RS(i))}),{stdout:`Cookie "${t[0]}" set\n`,stderr:``,exitCode:0})},US=async({browser:e,positional:t,flags:n,onTab:r})=>{if(t.length===0)return{stdout:``,stderr:`cookie-delete requires a cookie name
951
- `,exitCode:1};let i=A(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 Zn(e)).href),await e.send(`Network.deleteCookies`,zS(r))}),{stdout:`Cookie "${t[0]}" deleted\n`,stderr:``,exitCode:0})},WS=async({browser:e,flags:t,onTab:n})=>{let r=A(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
952
- `,stderr:``,exitCode:0})},GS=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)
953
+ `,stderr:``,exitCode:0}},eC=async({browser:e,positional:t,flags:n,onTab:r})=>{if(t.length<2)return{stdout:``,stderr:`cookie-set requires <name> <value>
954
+ `,exitCode:1};let i=A(n);return`error`in i?{stdout:``,stderr:i.error,exitCode:1}:(await r(i.targetId,async e=>{let r=await Zn(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`,XS(i))}),{stdout:`Cookie "${t[0]}" set\n`,stderr:``,exitCode:0})},tC=async({browser:e,positional:t,flags:n,onTab:r})=>{if(t.length===0)return{stdout:``,stderr:`cookie-delete requires a cookie name
955
+ `,exitCode:1};let i=A(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 Zn(e)).href),await e.send(`Network.deleteCookies`,ZS(r))}),{stdout:`Cookie "${t[0]}" deleted\n`,stderr:``,exitCode:0})},nC=async({browser:e,flags:t,onTab:n})=>{let r=A(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
956
+ `,stderr:``,exitCode:0})},rC=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)
953
957
  `,exitCode:1};let a=A(r);if(`error`in a)return{stdout:``,stderr:a.error,exitCode:1};let o=n[0],s=t.snapshots.get(a.targetId);if(!s)return{stdout:``,stderr:`No snapshot available. Run "snapshot" first.
954
958
  `,exitCode:1};let c=s.refToBackendNodeId.get(o);if(!c){let e=s.refToSelector.get(o);return e?{stdout:`page.locator(${JSON.stringify(e.split(`,`)[0].trim())})\n`,stderr:``,exitCode:0}:{stdout:``,stderr:`Unknown ref "${o}"\n`,exitCode:1}}let l=``;return await i(a.targetId,async({sessionId:e,transport:t})=>{await t.send(`DOM.enable`,{},e);let n=(await t.send(`DOM.resolveNode`,{backendNodeId:c},e)).object;if(!n?.objectId){let e=s.refToSelector.get(o)?.split(`,`)[0].trim()??``;l=`page.locator(${JSON.stringify(e)})`;return}let r=await t.send(`Runtime.callFunctionOn`,{objectId:n.objectId,functionDeclaration:`function() {
955
959
  const el = this;
@@ -961,7 +965,7 @@ Options:
961
965
  const id = el.id;
962
966
  return JSON.stringify({ testId, label, placeholder, id });
963
967
  }`,returnByValue:!0},e),i=JSON.parse(r.result?.value??`{}`);if(i.testId)l=`page.getByTestId(${JSON.stringify(i.testId)})`;else if(i.label)l=`page.getByLabel(${JSON.stringify(i.label)})`;else if(i.placeholder)l=`page.getByPlaceholder(${JSON.stringify(i.placeholder)})`;else if(i.id)l=`page.locator(${JSON.stringify(`#${i.id}`)})`;else{let e=s.refToSelector.get(o)?.split(`,`)[0].trim()??``;l=`page.locator(${JSON.stringify(e)})`}}),{stdout:l+`
964
- `,stderr:``,exitCode:0}},KS=async({browser:e,state:t,positional:n,flags:r,onTab:i})=>{let a=A(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 => {
968
+ `,stderr:``,exitCode:0}},iC=async({browser:e,state:t,positional:n,flags:r,onTab:i})=>{let a=A(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 => {
965
969
  el.style.outline = '';
966
970
  el.style.background = '';
967
971
  el.removeAttribute('data-slicc-highlight');
@@ -989,14 +993,14 @@ Options:
989
993
  el.style.cssText += '; ' + styleVal;
990
994
  el.setAttribute('data-slicc-highlight','1');
991
995
  }
992
- })()`;await t.send(`Runtime.evaluate`,{expression:r,returnByValue:!0},e)}}),{stdout:o?`Highlight removed from ${c}\n`:`Highlighted ${c}\n`,stderr:``,exitCode:0}},qS=async({browser:e,positional:t,flags:n,onTab:r})=>{let i=A(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}},JS=async({browser:e,flags:t,onTab:n})=>{let r=A(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
993
- `,stderr:``,exitCode:0})};function YS(e){let t=e instanceof Error?e.message:String(e);return/SyntaxError/.test(t)}function XS(e){return/\bawait\b/.test(e)||/\breturn\b/.test(e)}async function ZS(e,t){try{return await e(t)}catch(n){if(!YS(n)||!XS(t))throw n;try{return await e(`(async () => (\n${t}\n))()`)}catch(r){if(!YS(r))throw r;try{return await e(`(async () => {\n${t}\n})()`)}catch(e){throw YS(e)?n:e}}}}function QS(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 $S=async({browser:e,fs:t,positional:n,flags:r,onTab:i})=>{if(n.length===0)return{stdout:``,stderr:`eval requires an expression
994
- `,exitCode:1};let a=QS(`eval`,r);if(`error`in a)return{stdout:``,stderr:a.error,exitCode:1};let o=A(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 Qn(e,r),n=await ZS(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`)+`
995
- `,stderr:``,exitCode:0}},eC=async({browser:e,fs:t,positional:n,flags:r,onTab:i})=>{if(n.length===0)return{stdout:``,stderr:`eval-file requires a file path
996
- `,exitCode:1};let a=A(r);if(`error`in a)return{stdout:``,stderr:a.error,exitCode:1};let o=n[0],s=QS(`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 Qn(e,r),n=await ZS(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`)+`
997
- `,stderr:``,exitCode:0}};function tC(e){return async(t,n)=>{let r=typeof t==`string`?t:t instanceof URL?t.toString():t.url,i=re(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 nC(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 rC(e,t,n){let r=``;try{r=new URL(e).hostname}catch{return{}}let i=r?Tm(r):``;if(!i)return{};let a;try{a=await Om(n)}catch(e){return{warning:`playwright-cli: warning: browse.sh catalog unavailable: ${e instanceof Error?e.message:String(e)}`}}let o=await nC(t),s=[];for(let e of a){if(!e.hostname||Tm(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 iC(e,t={}){let n=t.fetchImpl??ie(),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 a=h(i,e),o=p(a),s={url:e,status:r.status,links:a,handoff:o};if(t.discover&&a.length>0){let e=await jb(a,{fetchImpl:tC(n)});s.discovery={catalog:e.catalog,serviceDesc:e.serviceDesc,serviceMeta:e.serviceMeta,status:e.status,llmsTxt:e.llmsTxt,failures:e.failures}}else t.discover&&(s.discovery={failures:[]});if(t.discover&&t.fs){let r=await rC(e,t.fs,n);r.warning?s.browseShWarning=r.warning:r.skills&&r.skills.length>0&&(s.discovery={...s.discovery??{failures:[]},browseShSkills:r.skills})}return s}const aC=async({fs:e,positional:t,flags:n})=>{if(t.length===0)return{stdout:``,stderr:`fetch requires a URL
998
- `,exitCode:1};let r=t[0],{browseShWarning:i,...a}=await iC(r,{discover:n.discover===`true`,method:n.method??`GET`,fs:e});return{stdout:JSON.stringify(a,null,2)+`
999
- `,stderr:i?`${i}\n`:``,exitCode:+!!a.error}};function oC(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 sC(e){await e.send(`Input.dispatchKeyEvent`,{type:`keyDown`,key:`Enter`}),await e.send(`Input.dispatchKeyEvent`,{type:`keyUp`,key:`Enter`})}async function cC(e,t,n){((await e.send(`Runtime.callFunctionOn`,{objectId:t,functionDeclaration:Kn,returnByValue:!0})).result?.value??``)!==n&&await e.send(`Runtime.callFunctionOn`,{objectId:t,functionDeclaration:In,arguments:[{value:n}],returnByValue:!0})}async function lC(e,t,n){await e.clickByBackendNodeId(t),await e.send(`DOM.enable`),await e.send(`Runtime.enable`);let r=(await e.send(`DOM.resolveNode`,{backendNodeId:t})).object;r?.objectId&&await e.send(`Runtime.callFunctionOn`,{objectId:r.objectId,functionDeclaration:Gn,returnByValue:!0}),await e.insertText(n),r?.objectId&&await cC(e,r.objectId,n)}async function uC(e,t,n){await e.click(t),await e.evaluate(`(function() {
996
+ })()`;await t.send(`Runtime.evaluate`,{expression:r,returnByValue:!0},e)}}),{stdout:o?`Highlight removed from ${c}\n`:`Highlighted ${c}\n`,stderr:``,exitCode:0}},aC=async({browser:e,positional:t,flags:n,onTab:r})=>{let i=A(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}},oC=async({browser:e,flags:t,onTab:n})=>{let r=A(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
997
+ `,stderr:``,exitCode:0})};function sC(e){let t=e instanceof Error?e.message:String(e);return/SyntaxError/.test(t)}function cC(e){return/\bawait\b/.test(e)||/\breturn\b/.test(e)}async function lC(e,t){try{return await e(t)}catch(n){if(!sC(n)||!cC(t))throw n;try{return await e(`(async () => (\n${t}\n))()`)}catch(r){if(!sC(r))throw r;try{return await e(`(async () => {\n${t}\n})()`)}catch(e){throw sC(e)?n:e}}}}function uC(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 dC=async({browser:e,fs:t,positional:n,flags:r,onTab:i})=>{if(n.length===0)return{stdout:``,stderr:`eval requires an expression
998
+ `,exitCode:1};let a=uC(`eval`,r);if(`error`in a)return{stdout:``,stderr:a.error,exitCode:1};let o=A(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 Qn(e,r),n=await lC(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`)+`
999
+ `,stderr:``,exitCode:0}},fC=async({browser:e,fs:t,positional:n,flags:r,onTab:i})=>{if(n.length===0)return{stdout:``,stderr:`eval-file requires a file path
1000
+ `,exitCode:1};let a=A(r);if(`error`in a)return{stdout:``,stderr:a.error,exitCode:1};let o=n[0],s=uC(`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 Qn(e,r),n=await lC(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`)+`
1001
+ `,stderr:``,exitCode:0}};function pC(e){return async(t,n)=>{let r=typeof t==`string`?t:t instanceof URL?t.toString():t.url,i=re(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 mC(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 hC(e,t,n){let r=``;try{r=new URL(e).hostname}catch{return{}}let i=r?Lm(r):``;if(!i)return{};let a;try{a=await Bm(n)}catch(e){return{warning:`playwright-cli: warning: browse.sh catalog unavailable: ${e instanceof Error?e.message:String(e)}`}}let o=await mC(t),s=[];for(let e of a){if(!e.hostname||Lm(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 gC(e,t={}){let n=t.fetchImpl??ie(),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 a=h(i,e),o=p(a),s={url:e,status:r.status,links:a,handoff:o};if(t.discover&&a.length>0){let e=await Ub(a,{fetchImpl:pC(n)});s.discovery={catalog:e.catalog,serviceDesc:e.serviceDesc,serviceMeta:e.serviceMeta,status:e.status,llmsTxt:e.llmsTxt,failures:e.failures}}else t.discover&&(s.discovery={failures:[]});if(t.discover&&t.fs){let r=await hC(e,t.fs,n);r.warning?s.browseShWarning=r.warning:r.skills&&r.skills.length>0&&(s.discovery={...s.discovery??{failures:[]},browseShSkills:r.skills})}return s}const _C=async({fs:e,positional:t,flags:n})=>{if(t.length===0)return{stdout:``,stderr:`fetch requires a URL
1002
+ `,exitCode:1};let r=t[0],{browseShWarning:i,...a}=await gC(r,{discover:n.discover===`true`,method:n.method??`GET`,fs:e});return{stdout:JSON.stringify(a,null,2)+`
1003
+ `,stderr:i?`${i}\n`:``,exitCode:+!!a.error}};function vC(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 yC(e){await e.send(`Input.dispatchKeyEvent`,{type:`keyDown`,key:`Enter`}),await e.send(`Input.dispatchKeyEvent`,{type:`keyUp`,key:`Enter`})}async function bC(e,t,n){((await e.send(`Runtime.callFunctionOn`,{objectId:t,functionDeclaration:Kn,returnByValue:!0})).result?.value??``)!==n&&await e.send(`Runtime.callFunctionOn`,{objectId:t,functionDeclaration:In,arguments:[{value:n}],returnByValue:!0})}async function xC(e,t,n){await e.clickByBackendNodeId(t),await e.send(`DOM.enable`),await e.send(`Runtime.enable`);let r=(await e.send(`DOM.resolveNode`,{backendNodeId:t})).object;r?.objectId&&await e.send(`Runtime.callFunctionOn`,{objectId:r.objectId,functionDeclaration:Gn,returnByValue:!0}),await e.insertText(n),r?.objectId&&await bC(e,r.objectId,n)}async function SC(e,t,n){await e.click(t),await e.evaluate(`(function() {
1000
1004
  const el = document.querySelector(${JSON.stringify(t)});
1001
1005
  if (el) { return (${Gn}).call(el); }
1002
1006
  return false;
@@ -1008,15 +1012,15 @@ Options:
1008
1012
  const el = document.querySelector(${JSON.stringify(r)});
1009
1013
  if (!el) return;
1010
1014
  (${In}).call(el, ${JSON.stringify(n)});
1011
- })()`)}const dC=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)
1012
- `,exitCode:1};let a=A(r);if(`error`in a)return{stdout:``,stderr:a.error,exitCode:1};let o=n[0],s=oC(r.modifiers);return{stdout:await i(a.targetId,async e=>{let n=t.snapshots.get(a.targetId);if(!n)throw Error(`No snapshot available. Run "snapshot" first.`);let{isIframe:r}=Fn(o),i=n.refToFrameId?.get(o);if(r&&i){let r=n.refToSelector.get(o);if(!r)throw Error(`Unknown ref "${o}" in iframe`);let s=r.split(`,`)[0].trim();return await e.evaluateInFrame(i,`(function() {
1015
+ })()`)}const CC=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)
1016
+ `,exitCode:1};let a=A(r);if(`error`in a)return{stdout:``,stderr:a.error,exitCode:1};let o=n[0],s=vC(r.modifiers);return{stdout:await i(a.targetId,async e=>{let n=t.snapshots.get(a.targetId);if(!n)throw Error(`No snapshot available. Run "snapshot" first.`);let{isIframe:r}=Fn(o),i=n.refToFrameId?.get(o);if(r&&i){let r=n.refToSelector.get(o);if(!r)throw Error(`Unknown ref "${o}" in iframe`);let s=r.split(`,`)[0].trim();return await e.evaluateInFrame(i,`(function() {
1013
1017
  var el = document.querySelector(${JSON.stringify(s)});
1014
1018
  if (!el) throw new Error('Element not found in iframe for ref ${o}');
1015
1019
  el.scrollIntoView({ block: 'center' });
1016
1020
  el.click();
1017
1021
  })()`),t.snapshots.delete(a.targetId),`Clicked ${o} (in iframe)`}let c=n.refToBackendNodeId.get(o);if(c)return await e.clickByBackendNodeId(c,s),t.snapshots.delete(a.targetId),`Clicked ${o}`;let l=n.refToSelector.get(o);if(!l)throw Error(`Unknown ref "${o}". Available: ${[...n.refToSelector.keys()].slice(0,10).join(`, `)}...`);return await e.click(l,s),t.snapshots.delete(a.targetId),`Clicked ${o}`})+`
1018
- `,stderr:``,exitCode:0}},fC=async({browser:e,positional:t,flags:n,onTab:r})=>{if(t.length===0)return{stdout:``,stderr:`type requires text
1019
- `,exitCode:1};let i=A(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 sC(e)}),{stdout:`Typed: ${a}\n`,stderr:``,exitCode:0}},pC=async({browser:e,state:t,positional:n,flags:r,onTab:i})=>{if(n.length<2)return{stdout:``,stderr:`fill requires <ref> <text>
1022
+ `,stderr:``,exitCode:0}},wC=async({browser:e,positional:t,flags:n,onTab:r})=>{if(t.length===0)return{stdout:``,stderr:`type requires text
1023
+ `,exitCode:1};let i=A(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 yC(e)}),{stdout:`Typed: ${a}\n`,stderr:``,exitCode:0}},TC=async({browser:e,state:t,positional:n,flags:r,onTab:i})=>{if(n.length<2)return{stdout:``,stderr:`fill requires <ref> <text>
1020
1024
  `,exitCode:1};let a=A(r);if(`error`in a)return{stdout:``,stderr:a.error,exitCode:1};let o=n[0],s=n.slice(1).join(` `);return{stdout:await i(a.targetId,async e=>{let n=t.snapshots.get(a.targetId);if(!n)throw Error(`No snapshot available. Run "snapshot" first.`);let{isIframe:i}=Fn(o),c=n.refToFrameId?.get(o);if(i&&c){let i=n.refToSelector.get(o);if(!i)throw Error(`Unknown ref "${o}" in iframe`);let l=i.split(`,`)[0].trim();return await e.evaluateInFrame(c,`(function() {
1021
1025
  var el = document.querySelector(${JSON.stringify(l)});
1022
1026
  if (!el) throw new Error('Element not found in iframe for ref ${o}');
@@ -1026,32 +1030,32 @@ Options:
1026
1030
  el.value = ${JSON.stringify(s)};
1027
1031
  el.dispatchEvent(new Event('input', { bubbles: true }));
1028
1032
  el.dispatchEvent(new Event('change', { bubbles: true }));
1029
- })()`),t.snapshots.delete(a.targetId),r.submit===`true`&&await sC(e),`Filled ${o} with: ${s} (in iframe)`}let l=n.refToBackendNodeId.get(o);if(l)return await lC(e,l,s),t.snapshots.delete(a.targetId),r.submit===`true`&&await sC(e),`Filled ${o} with: ${s}`;let u=n.refToSelector.get(o);if(!u)throw Error(`Unknown ref "${o}"`);return await uC(e,u,s),t.snapshots.delete(a.targetId),r.submit===`true`&&await sC(e),`Filled ${o} with: ${s}`})+`
1030
- `,stderr:``,exitCode:0}},mC=async({browser:e,positional:t,flags:n,onTab:r})=>{if(t.length===0)return{stdout:``,stderr:`press requires a key name
1031
- `,exitCode:1};let i=A(n);if(`error`in i)return{stdout:``,stderr:i.error,exitCode:1};let a=t[0];return await r(i.targetId,async({sessionId:e,transport:t})=>{await t.send(`Input.dispatchKeyEvent`,{type:`keyDown`,key:a},e),await t.send(`Input.dispatchKeyEvent`,{type:`keyUp`,key:a},e)}),{stdout:`Pressed ${a}\n`,stderr:``,exitCode:0}},hC=async({browser:e,positional:t,flags:n,onTab:r})=>{if(t.length===0)return{stdout:``,stderr:`keydown requires a key name
1032
- `,exitCode:1};let i=A(n);if(`error`in i)return{stdout:``,stderr:i.error,exitCode:1};let a=t[0];return await r(i.targetId,async({sessionId:e,transport:t})=>{await t.send(`Input.dispatchKeyEvent`,{type:`keyDown`,key:a},e)}),{stdout:`Key ${a} down\n`,stderr:``,exitCode:0}},gC=async({browser:e,positional:t,flags:n,onTab:r})=>{if(t.length===0)return{stdout:``,stderr:`keyup requires a key name
1033
- `,exitCode:1};let i=A(n);if(`error`in i)return{stdout:``,stderr:i.error,exitCode:1};let a=t[0];return await r(i.targetId,async({sessionId:e,transport:t})=>{await t.send(`Input.dispatchKeyEvent`,{type:`keyUp`,key:a},e)}),{stdout:`Key ${a} up\n`,stderr:``,exitCode:0}},_C=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)
1034
- `,exitCode:1};let a=A(r);if(`error`in a)return{stdout:``,stderr:a.error,exitCode:1};let o=n[0],s=n[1]||`left`,c=oC(r.modifiers);return{stdout:await i(a.targetId,async e=>{let n=t.snapshots.get(a.targetId);if(!n)throw Error(`No snapshot available. Run "snapshot" first.`);let{isIframe:r}=Fn(o),i=n.refToFrameId?.get(o);if(r&&i){let r=n.refToSelector.get(o);if(!r)throw Error(`Unknown ref "${o}" in iframe`);let s=r.split(`,`)[0].trim();return await e.evaluateInFrame(i,`(function() {
1033
+ })()`),t.snapshots.delete(a.targetId),r.submit===`true`&&await yC(e),`Filled ${o} with: ${s} (in iframe)`}let l=n.refToBackendNodeId.get(o);if(l)return await xC(e,l,s),t.snapshots.delete(a.targetId),r.submit===`true`&&await yC(e),`Filled ${o} with: ${s}`;let u=n.refToSelector.get(o);if(!u)throw Error(`Unknown ref "${o}"`);return await SC(e,u,s),t.snapshots.delete(a.targetId),r.submit===`true`&&await yC(e),`Filled ${o} with: ${s}`})+`
1034
+ `,stderr:``,exitCode:0}},EC=async({browser:e,positional:t,flags:n,onTab:r})=>{if(t.length===0)return{stdout:``,stderr:`press requires a key name
1035
+ `,exitCode:1};let i=A(n);if(`error`in i)return{stdout:``,stderr:i.error,exitCode:1};let a=t[0];return await r(i.targetId,async({sessionId:e,transport:t})=>{await t.send(`Input.dispatchKeyEvent`,{type:`keyDown`,key:a},e),await t.send(`Input.dispatchKeyEvent`,{type:`keyUp`,key:a},e)}),{stdout:`Pressed ${a}\n`,stderr:``,exitCode:0}},DC=async({browser:e,positional:t,flags:n,onTab:r})=>{if(t.length===0)return{stdout:``,stderr:`keydown requires a key name
1036
+ `,exitCode:1};let i=A(n);if(`error`in i)return{stdout:``,stderr:i.error,exitCode:1};let a=t[0];return await r(i.targetId,async({sessionId:e,transport:t})=>{await t.send(`Input.dispatchKeyEvent`,{type:`keyDown`,key:a},e)}),{stdout:`Key ${a} down\n`,stderr:``,exitCode:0}},OC=async({browser:e,positional:t,flags:n,onTab:r})=>{if(t.length===0)return{stdout:``,stderr:`keyup requires a key name
1037
+ `,exitCode:1};let i=A(n);if(`error`in i)return{stdout:``,stderr:i.error,exitCode:1};let a=t[0];return await r(i.targetId,async({sessionId:e,transport:t})=>{await t.send(`Input.dispatchKeyEvent`,{type:`keyUp`,key:a},e)}),{stdout:`Key ${a} up\n`,stderr:``,exitCode:0}},kC=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)
1038
+ `,exitCode:1};let a=A(r);if(`error`in a)return{stdout:``,stderr:a.error,exitCode:1};let o=n[0],s=n[1]||`left`,c=vC(r.modifiers);return{stdout:await i(a.targetId,async e=>{let n=t.snapshots.get(a.targetId);if(!n)throw Error(`No snapshot available. Run "snapshot" first.`);let{isIframe:r}=Fn(o),i=n.refToFrameId?.get(o);if(r&&i){let r=n.refToSelector.get(o);if(!r)throw Error(`Unknown ref "${o}" in iframe`);let s=r.split(`,`)[0].trim();return await e.evaluateInFrame(i,`(function() {
1035
1039
  var el = document.querySelector(${JSON.stringify(s)});
1036
1040
  if (!el) throw new Error('Element not found in iframe for ref ${o}');
1037
1041
  el.scrollIntoView({ block: 'center' });
1038
1042
  el.dispatchEvent(new MouseEvent('dblclick', { bubbles: true }));
1039
1043
  })()`),t.snapshots.delete(a.targetId),`Double-clicked ${o} (in iframe)`}let l=n.refToBackendNodeId.get(o);if(!l)throw Error(`Unknown ref "${o}"`);return await e.dblclickByBackendNodeId(l,s,c),t.snapshots.delete(a.targetId),`Double-clicked ${o}`})+`
1040
- `,stderr:``,exitCode:0}},vC=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)
1044
+ `,stderr:``,exitCode:0}},AC=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)
1041
1045
  `,exitCode:1};let a=A(r);if(`error`in a)return{stdout:``,stderr:a.error,exitCode:1};let o=n[0];return{stdout:await i(a.targetId,async e=>{let n=t.snapshots.get(a.targetId);if(!n)throw Error(`No snapshot available. Run "snapshot" first.`);let{isIframe:r}=Fn(o),i=n.refToFrameId?.get(o);if(r&&i){let t=n.refToSelector.get(o);if(!t)throw Error(`Unknown ref "${o}" in iframe`);let r=t.split(`,`)[0].trim();return await e.evaluateInFrame(i,`(function() {
1042
1046
  var el = document.querySelector(${JSON.stringify(r)});
1043
1047
  if (!el) throw new Error('Element not found in iframe for ref ${o}');
1044
1048
  el.scrollIntoView({ block: 'center' });
1045
1049
  el.dispatchEvent(new MouseEvent('mouseover', { bubbles: true }));
1046
1050
  })()`),`Hovered ${o} (in iframe)`}let s=n.refToBackendNodeId.get(o);if(!s)throw Error(`Unknown ref "${o}"`);return await e.hoverByBackendNodeId(s),`Hovered ${o}`})+`
1047
- `,stderr:``,exitCode:0}},yC=async({browser:e,state:t,positional:n,flags:r,onTab:i})=>{if(n.length<2)return{stdout:``,stderr:`select requires <ref> <value>
1051
+ `,stderr:``,exitCode:0}},jC=async({browser:e,state:t,positional:n,flags:r,onTab:i})=>{if(n.length<2)return{stdout:``,stderr:`select requires <ref> <value>
1048
1052
  `,exitCode:1};let a=A(r);if(`error`in a)return{stdout:``,stderr:a.error,exitCode:1};let o=n[0],s=n.slice(1).join(` `);return{stdout:await i(a.targetId,async e=>{let n=t.snapshots.get(a.targetId);if(!n)throw Error(`No snapshot available. Run "snapshot" first.`);let{isIframe:r}=Fn(o),i=n.refToFrameId?.get(o);if(r&&i){let r=n.refToSelector.get(o);if(!r)throw Error(`Unknown ref "${o}" in iframe`);let c=r.split(`,`)[0].trim();return await e.evaluateInFrame(i,`(function() {
1049
1053
  var el = document.querySelector(${JSON.stringify(c)});
1050
1054
  if (!el) throw new Error('Element not found in iframe for ref ${o}');
1051
1055
  el.value = ${JSON.stringify(s)};
1052
1056
  el.dispatchEvent(new Event('change', { bubbles: true }));
1053
1057
  })()`),t.snapshots.delete(a.targetId),`Selected "${s}" on ${o} (in iframe)`}let c=n.refToBackendNodeId.get(o);if(!c)throw Error(`Unknown ref "${o}"`);return await e.selectByBackendNodeId(c,s),t.snapshots.delete(a.targetId),`Selected "${s}" on ${o}`})+`
1054
- `,stderr:``,exitCode:0}},bC=async({browser:e,state:t,positional:n,flags:r,onTab:i})=>{if(n.length===0)return{stdout:``,stderr:`check requires a ref (e.g. e5)
1058
+ `,stderr:``,exitCode:0}},MC=async({browser:e,state:t,positional:n,flags:r,onTab:i})=>{if(n.length===0)return{stdout:``,stderr:`check requires a ref (e.g. e5)
1055
1059
  `,exitCode:1};let a=A(r);if(`error`in a)return{stdout:``,stderr:a.error,exitCode:1};let o=n[0];return{stdout:await i(a.targetId,async e=>{let n=t.snapshots.get(a.targetId);if(!n)throw Error(`No snapshot available. Run "snapshot" first.`);let{isIframe:r}=Fn(o),i=n.refToFrameId?.get(o);if(r&&i){let r=n.refToSelector.get(o);if(!r)throw Error(`Unknown ref "${o}" in iframe`);let s=r.split(`,`)[0].trim();return await e.evaluateInFrame(i,`(function() {
1056
1060
  var el = document.querySelector(${JSON.stringify(s)});
1057
1061
  if (!el) throw new Error('Element not found in iframe for ref ${o}');
@@ -1061,7 +1065,7 @@ Options:
1061
1065
  el.dispatchEvent(new MouseEvent('click', { bubbles: true }));
1062
1066
  }
1063
1067
  })()`),t.snapshots.delete(a.targetId),`Checked ${o} (in iframe)`}let s=n.refToBackendNodeId.get(o);if(!s)throw Error(`Unknown ref "${o}"`);let c=await e.setCheckedByBackendNodeId(s,!0);return c===`toggled`&&t.snapshots.delete(a.targetId),c===`already`?`${o} already checked`:`Checked ${o}`})+`
1064
- `,stderr:``,exitCode:0}},xC=async({browser:e,state:t,positional:n,flags:r,onTab:i})=>{if(n.length===0)return{stdout:``,stderr:`uncheck requires a ref (e.g. e5)
1068
+ `,stderr:``,exitCode:0}},NC=async({browser:e,state:t,positional:n,flags:r,onTab:i})=>{if(n.length===0)return{stdout:``,stderr:`uncheck requires a ref (e.g. e5)
1065
1069
  `,exitCode:1};let a=A(r);if(`error`in a)return{stdout:``,stderr:a.error,exitCode:1};let o=n[0];return{stdout:await i(a.targetId,async e=>{let n=t.snapshots.get(a.targetId);if(!n)throw Error(`No snapshot available. Run "snapshot" first.`);let{isIframe:r}=Fn(o),i=n.refToFrameId?.get(o);if(r&&i){let r=n.refToSelector.get(o);if(!r)throw Error(`Unknown ref "${o}" in iframe`);let s=r.split(`,`)[0].trim();return await e.evaluateInFrame(i,`(function() {
1066
1070
  var el = document.querySelector(${JSON.stringify(s)});
1067
1071
  if (!el) throw new Error('Element not found in iframe for ref ${o}');
@@ -1071,14 +1075,14 @@ Options:
1071
1075
  el.dispatchEvent(new MouseEvent('click', { bubbles: true }));
1072
1076
  }
1073
1077
  })()`),t.snapshots.delete(a.targetId),`Unchecked ${o} (in iframe)`}let s=n.refToBackendNodeId.get(o);if(!s)throw Error(`Unknown ref "${o}"`);let c=await e.setCheckedByBackendNodeId(s,!1);return c===`toggled`&&t.snapshots.delete(a.targetId),c===`already`?`${o} already unchecked`:`Unchecked ${o}`})+`
1074
- `,stderr:``,exitCode:0}},SC=async({browser:e,state:t,positional:n,flags:r,onTab:i})=>{if(n.length<2)return{stdout:``,stderr:`drag requires <startRef> <endRef>
1078
+ `,stderr:``,exitCode:0}},PC=async({browser:e,state:t,positional:n,flags:r,onTab:i})=>{if(n.length<2)return{stdout:``,stderr:`drag requires <startRef> <endRef>
1075
1079
  `,exitCode:1};let a=A(r);if(`error`in a)return{stdout:``,stderr:a.error,exitCode:1};let o=n[0],s=n[1];return{stdout:await i(a.targetId,async e=>{let n=t.snapshots.get(a.targetId);if(!n)throw Error(`No snapshot available. Run "snapshot" first.`);let r=n.refToBackendNodeId.get(o),i=n.refToBackendNodeId.get(s);if(!r)throw Error(`Unknown ref "${o}"`);if(!i)throw Error(`Unknown ref "${s}"`);return await e.dragByBackendNodeIds(r,i),t.snapshots.delete(a.targetId),`Dragged ${o} to ${s}`})+`
1076
- `,stderr:``,exitCode:0}};async function CC(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 wC(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 TC={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 EC(e){let t=e.split(`.`).pop()?.toLowerCase()??``;return TC[t]??`application/octet-stream`}const DC=async({browser:e,state:t,positional:n,flags:r,onTab:i})=>{if(n.length<2)return{stdout:``,stderr:`mousemove requires <x> <y>
1080
+ `,stderr:``,exitCode:0}};async function FC(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 IC(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 LC={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 RC(e){let t=e.split(`.`).pop()?.toLowerCase()??``;return LC[t]??`application/octet-stream`}const zC=async({browser:e,state:t,positional:n,flags:r,onTab:i})=>{if(n.length<2)return{stdout:``,stderr:`mousemove requires <x> <y>
1077
1081
  `,exitCode:1};let a=A(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
1078
- `,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})},OC=async({browser:e,state:t,positional:n,flags:r,onTab:i})=>{let a=A(r);if(`error`in a)return{stdout:``,stderr:a.error,exitCode:1};let o=wC(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}},kC=async({browser:e,state:t,positional:n,flags:r,onTab:i})=>{let a=A(r);if(`error`in a)return{stdout:``,stderr:a.error,exitCode:1};let o=wC(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}},AC=async({browser:e,state:t,positional:n,flags:r,onTab:i})=>{if(n.length<2)return{stdout:``,stderr:`mousewheel requires <dx> <dy>
1082
+ `,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})},BC=async({browser:e,state:t,positional:n,flags:r,onTab:i})=>{let a=A(r);if(`error`in a)return{stdout:``,stderr:a.error,exitCode:1};let o=IC(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}},VC=async({browser:e,state:t,positional:n,flags:r,onTab:i})=>{let a=A(r);if(`error`in a)return{stdout:``,stderr:a.error,exitCode:1};let o=IC(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}},HC=async({browser:e,state:t,positional:n,flags:r,onTab:i})=>{if(n.length<2)return{stdout:``,stderr:`mousewheel requires <dx> <dy>
1079
1083
  `,exitCode:1};let a=A(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
1080
- `,exitCode:1};let c=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:`mouseWheel`,deltaX:o,deltaY:s,x:c.x,y:c.y,modifiers:0},e)}),{stdout:`Mouse wheel scrolled (dx=${o}, dy=${s})\n`,stderr:``,exitCode:0}},jC=async({browser:e,fs:t,state:n,positional:r,flags:i,onTab:a})=>{if(r.length===0)return{stdout:``,stderr:`drop requires a ref (e.g. e5)
1081
- `,exitCode:1};let o=A(i);if(`error`in o)return{stdout:``,stderr:o.error,exitCode:1};let s=r[0],c=i.path,u=i.data,d=[];if(c){let e=await CC(t,c),n=c.split(`/`).pop()??c;d.push({name:n,type:EC(n),base64:l(e)})}let f=[];if(u){let e=u.indexOf(`=`);if(e===-1)return{stdout:``,stderr:`--data format must be "mime/type=value"
1084
+ `,exitCode:1};let c=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:`mouseWheel`,deltaX:o,deltaY:s,x:c.x,y:c.y,modifiers:0},e)}),{stdout:`Mouse wheel scrolled (dx=${o}, dy=${s})\n`,stderr:``,exitCode:0}},UC=async({browser:e,fs:t,state:n,positional:r,flags:i,onTab:a})=>{if(r.length===0)return{stdout:``,stderr:`drop requires a ref (e.g. e5)
1085
+ `,exitCode:1};let o=A(i);if(`error`in o)return{stdout:``,stderr:o.error,exitCode:1};let s=r[0],c=i.path,u=i.data,d=[];if(c){let e=await FC(t,c),n=c.split(`/`).pop()??c;d.push({name:n,type:RC(n),base64:l(e)})}let f=[];if(u){let e=u.indexOf(`=`);if(e===-1)return{stdout:``,stderr:`--data format must be "mime/type=value"
1082
1086
  `,exitCode:1};f.push({mimeType:u.slice(0,e),value:u.slice(e+1)})}return{stdout:await a(o.targetId,async({sessionId:e,transport:t})=>{let r=n.snapshots.get(o.targetId);if(!r)throw Error(`No snapshot available. Run "snapshot" first.`);let i=r.refToBackendNodeId.get(s);if(i){await t.send(`DOM.enable`,{},e);let r=await t.send(`DOM.resolveNode`,{backendNodeId:i},e),a=await t.send(`Runtime.callFunctionOn`,{objectId:r.object.objectId,functionDeclaration:`function(filesData, dataItems) {
1083
1087
  var dt = new DataTransfer();
1084
1088
  for (var i = 0; i < filesData.length; i++) {
@@ -1113,7 +1117,7 @@ Options:
1113
1117
  el.dispatchEvent(new DragEvent('drop', { bubbles: true, cancelable: true, dataTransfer: dt }));
1114
1118
  return true;
1115
1119
  })()`,h=await t.send(`Runtime.evaluate`,{expression:m,returnByValue:!0,awaitPromise:!1},e);if(h.exceptionDetails){let e=h.exceptionDetails.exception?.description??h.exceptionDetails.text??`Drop failed`;throw Error(e)}return n.snapshots.delete(o.targetId),`Dropped onto ${s}`})+`
1116
- `,stderr:``,exitCode:0}},MC=e(`playwright-teleport`),NC={origin:``,localStorage:{},sessionStorage:{}};function PC(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 FC(e){return Object.keys(e.localStorage).length+Object.keys(e.sessionStorage).length}function IC(e){if(!e)return null;try{return new URL(e).origin}catch{return null}}function LC(e){try{return new URL(`/favicon.ico`,e).toString()}catch{return e}}function RC(e,t,n){let r=IC(t);if(t&&r===e)return t;let i=IC(n);return n&&i===e?n:e||(t??n)}async function zC(e,t){let n=await e.evaluate(`(() => {
1120
+ `,stderr:``,exitCode:0}},WC=e(`playwright-teleport`),GC={origin:``,localStorage:{},sessionStorage:{}};function KC(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 qC(e){return Object.keys(e.localStorage).length+Object.keys(e.sessionStorage).length}function JC(e){if(!e)return null;try{return new URL(e).origin}catch{return null}}function YC(e){try{return new URL(`/favicon.ico`,e).toString()}catch{return e}}function XC(e,t,n){let r=JC(t);if(t&&r===e)return t;let i=JC(n);return n&&i===e?n:e||(t??n)}async function ZC(e,t){let n=await e.evaluate(`(() => {
1117
1121
  const collect = (storage) => {
1118
1122
  const items = {};
1119
1123
  for (let i = 0; i < storage.length; i++) {
@@ -1127,7 +1131,7 @@ Options:
1127
1131
  localStorage: collect(window.localStorage),
1128
1132
  sessionStorage: collect(window.sessionStorage),
1129
1133
  });
1130
- })()`);if(typeof n!=`string`||n.length===0)return MC.warn(`Teleport storage capture returned non-string result`,{label:t,type:typeof n}),NC;try{let e=JSON.parse(n);return{origin:typeof e.origin==`string`?e.origin:``,localStorage:e.localStorage??{},sessionStorage:e.sessionStorage??{}}}catch(e){return MC.warn(`Could not parse teleport storage snapshot`,{label:t,error:String(e)}),NC}}function BC(e){return`(() => {
1134
+ })()`);if(typeof n!=`string`||n.length===0)return WC.warn(`Teleport storage capture returned non-string result`,{label:t,type:typeof n}),GC;try{let e=JSON.parse(n);return{origin:typeof e.origin==`string`?e.origin:``,localStorage:e.localStorage??{},sessionStorage:e.sessionStorage??{}}}catch(e){return WC.warn(`Could not parse teleport storage snapshot`,{label:t,error:String(e)}),GC}}function QC(e){return`(() => {
1131
1135
  const snapshot = ${JSON.stringify(e)};
1132
1136
  if (!snapshot.origin || window.location.origin !== snapshot.origin) return;
1133
1137
  const markerKey = '__slicc_teleport_storage_applied__:' + snapshot.origin;
@@ -1143,7 +1147,7 @@ Options:
1143
1147
  apply(window.localStorage, snapshot.localStorage || {});
1144
1148
  apply(window.sessionStorage, snapshot.sessionStorage || {});
1145
1149
  try { window.sessionStorage.setItem(markerKey, '1'); } catch {}
1146
- })();`}function VC(e){return`(() => {
1150
+ })();`}function $C(e){return`(() => {
1147
1151
  const snapshot = ${JSON.stringify(e)};
1148
1152
  if (!snapshot.origin || globalThis.location.origin !== snapshot.origin) {
1149
1153
  throw new Error('Teleport storage origin mismatch');
@@ -1161,88 +1165,88 @@ Options:
1161
1165
  localStorageCount: Object.keys(snapshot.localStorage || {}).length,
1162
1166
  sessionStorageCount: Object.keys(snapshot.sessionStorage || {}).length,
1163
1167
  });
1164
- })();`}async function HC(e,t,n){let r=FC(t);if(r===0)return;let i=await e.evaluate(VC(t));MC.info(`Applied teleport storage snapshot on current page`,{target:n,totalEntries:r,resultType:typeof i}),MC.debug(`Applied teleport storage snapshot details`,{target:n,origin:t.origin||`(unknown)`,totalEntries:r,resultType:typeof i})}async function UC(e,t,n){let r=FC(t);if(r===0)return null;let i=await e.send(`Page.addScriptToEvaluateOnNewDocument`,{source:BC(t)}),a=typeof i.identifier==`string`?i.identifier:null;return MC.info(`Installed teleport storage init script`,{target:n,totalEntries:r,hasIdentifier:!!a}),MC.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 WC(e,t,n){if(t)try{await e.send(`Page.removeScriptToEvaluateOnNewDocument`,{identifier:t.identifier})}catch(e){MC.warn(`Failed to remove teleport storage init script`,{target:n,error:String(e)})}}async function GC(e){let t=await e.evaluate(`(() => JSON.stringify({
1168
+ })();`}async function ew(e,t,n){let r=qC(t);if(r===0)return;let i=await e.evaluate($C(t));WC.info(`Applied teleport storage snapshot on current page`,{target:n,totalEntries:r,resultType:typeof i}),WC.debug(`Applied teleport storage snapshot details`,{target:n,origin:t.origin||`(unknown)`,totalEntries:r,resultType:typeof i})}async function tw(e,t,n){let r=qC(t);if(r===0)return null;let i=await e.send(`Page.addScriptToEvaluateOnNewDocument`,{source:QC(t)}),a=typeof i.identifier==`string`?i.identifier:null;return WC.info(`Installed teleport storage init script`,{target:n,totalEntries:r,hasIdentifier:!!a}),WC.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 nw(e,t,n){if(t)try{await e.send(`Page.removeScriptToEvaluateOnNewDocument`,{identifier:t.identifier})}catch(e){WC.warn(`Failed to remove teleport storage init script`,{target:n,error:String(e)})}}async function rw(e){let t=await e.evaluate(`(() => JSON.stringify({
1165
1169
  url: window.location.href,
1166
1170
  title: document.title || '',
1167
1171
  bodySnippet: document.body?.innerText?.replace(/\\s+/g, ' ').trim().slice(0, 500) || '(empty)',
1168
- }))()`);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 KC(e){return/callback|authorize\/resume|error/i.test(e)}async function qC(e,t,n){try{let r=await GC(e),i=`${n}:${r.url}:${r.title}`;if(t.lastFollowerDiagnosticKey===i)return;t.lastFollowerDiagnosticKey=i,MC.debug(`Teleport follower diagnostics`,{reason:n,url:r.url,title:r.title,bodySnippet:r.bodySnippet})}catch(e){MC.warn(`Could not capture teleport follower diagnostics`,{reason:n,error:String(e)})}}async function JC(e,t,n){let r=t.followerStorageScript;if(r){t.followerStorageScript=null;try{await e.withTab(r.targetId,e=>WC(e,r,`follower`)),MC.info(`Removed follower teleport storage init script`,{reason:n})}catch(e){MC.warn(`Failed to remove follower teleport storage init script`,{reason:n,error:String(e)})}}}function YC(e){return Array.isArray(e)?e:[]}const V=e(`playwright-teleport`);let XC=null,ZC=null;function QC(e){XC=e}function $C(e){ZC=e}function ew(){return ZC?.()??null}async function tw(e,t){if(V.warn(`Teleport timed out`,{timeoutMs:t.timeoutMs,phase:t.phase}),V.debug(`Teleport timeout details`,{timeoutMs:t.timeoutMs,phase:t.phase,followerTargetId:t.followerTargetId}),t.phase=`timedOut`,t.followerTargetId){try{await e.withTab(t.followerTargetId,e=>qC(e,t,`timeout`))}catch(e){V.warn(`Could not attach to follower for timeout diagnostics`,{error:String(e)})}await JC(e,t,`timeout`)}if(nw(t),t.followerTargetId)try{await e.closePage(t.followerTargetId)}catch(e){V.warn(`Failed to close follower tab after timeout`,{error:String(e)})}t.rejectBlock?.(Error(`Teleport timed out after ${Math.round(t.timeoutMs/1e3)}s — human did not complete auth`))}function nw(e){V.info(`Cleaning up teleport watcher`,{phase:e.phase,hadPoll:!!e.pollInterval,hadTimeout:!!e.timeoutTimer,hadListener:!!e.cleanupListener}),e.pollInterval&&=(clearInterval(e.pollInterval),void 0),e.timeoutTimer&&=(clearTimeout(e.timeoutTimer),void 0),e.cleanupListener&&=(e.cleanupListener(),void 0)}function rw(e,t,n,r,i,a,o,s){if(a===`preview`)throw Error(`cannot teleport to a preview target (no Network.*)`);V.info(`Arming teleport watcher`,{timeoutMs:i,runtimeSelection:a?`explicit`:`auto`}),V.debug(`Arming teleport watcher details`,{startPattern:n.source,returnPattern:r.source,timeoutMs:i,runtimeId:a??`auto`,originalUrl:o});let c={startPattern:n,returnPattern:r,timeoutMs:i,runtimeId:a,phase:`armed`,leaderTargetId:s,originalLeaderUrl:o};return c.completionPromise=new Promise((e,t)=>{c.resolveBlock=e,c.rejectBlock=t}),c.completionPromise.catch(()=>{}),c.pollInterval=setInterval(()=>{(async()=>{if(c.phase!==`armed`)return;let r=c.leaderTargetId;if(r)try{let i=await e.withTab(r,e=>e.evaluate(`window.location.href`)),a=typeof i==`string`?i:String(i);V.debug(`Polling leader tab URL`,{targetId:r,href:a,startPattern:n.source}),n.test(a)&&(V.info(`Teleport start pattern matched on leader`),V.debug(`Teleport start pattern matched on leader details`,{targetId:r,href:a,startPattern:n.source}),aw(e,t,c,a).catch(e=>{V.error(`Unhandled teleport trigger error`,{error:String(e)})}))}catch(e){V.warn(`Error polling leader tab URL`,{targetId:r,error:String(e)})}})().catch(e=>{V.warn(`Leader teleport poll failed`,{error:String(e)})})},1e3),s&&t.teleportWatchers.set(s,c),c}async function iw(e,t,n,r,i){if(n.phase===`waitingForAuth`||n.phase===`waitingForReturn`)try{let a=await e.withTab(r,e=>e.evaluate(`window.location.href`)),o=typeof a==`string`?a:String(a);if(!o)return;if(n.lastFollowerUrl!==o&&(n.lastFollowerUrl=o,V.debug(`Follower teleport navigation`,{href:o,phase:n.phase})),n.phase===`waitingForAuth`){n.startPattern.test(o)?(n.phase=`waitingForReturn`,V.info(`Follower reached auth provider; waiting for return pattern`),V.debug(`Follower reached auth provider details`,{href:o,startPattern:n.startPattern.source})):V.debug(`Waiting for auth redirect on follower`,{href:o,startPattern:n.startPattern.source});return}V.debug(`Polling follower tab URL for return`,{href:o,returnPattern:n.returnPattern.source}),KC(o)&&await e.withTab(r,e=>qC(e,n,`waiting-for-return`)),n.returnPattern.test(o)&&(V.info(`Follower return pattern matched after auth`),V.debug(`Follower return pattern matched after auth details`,{href:o,returnPattern:n.returnPattern.source}),uw(e,t,n,i).catch(e=>{V.error(`Unhandled teleport capture error`,{error:String(e)})}))}catch(e){V.warn(`Error polling follower tab URL`,{error:String(e)})}}async function aw(e,t,n,r){if(n.phase===`armed`){n.phase=`teleporting`,V.info(`Teleport triggered`),V.debug(`Teleport trigger details`,{triggerUrl:r}),n.pollInterval&&=(clearInterval(n.pollInterval),void 0);try{let i=n.leaderTargetId;if(!i)throw Error(`teleport has no leader tab to capture from`);let a=[],o=NC;try{a=YC((await e.withTab(i,e=>e.send(`Network.getCookies`,{}))).cookies),V.info(`Captured leader cookies for follower`,{count:a.length})}catch(e){V.warn(`Could not capture leader cookies`,{error:String(e)})}try{o=await e.withTab(i,e=>zC(e,`leader`)),V.info(`Captured leader storage for follower`,{totalEntries:FC(o),localStorageCount:Object.keys(o.localStorage).length,sessionStorageCount:Object.keys(o.sessionStorage).length}),V.debug(`Captured leader storage for follower details`,{origin:o.origin||`(unknown)`,localStorageCount:Object.keys(o.localStorage).length,sessionStorageCount:Object.keys(o.sessionStorage).length})}catch(e){V.warn(`Could not capture leader storage`,{error:String(e)})}let s=n.runtimeId;if(!s){let e=XC?.();if(!e)throw Error(`No follower selection available — not connected to a tray`);let t=e();if(!t)throw Error(`No followers connected to teleport to`);s=t.runtimeId}V.info(`Selected follower for teleport`),V.debug(`Selected follower for teleport details`,{runtimeId:s});let c=await e.createRemotePage(s,`about:blank`),l=c.includes(`:`)?c:`${s}:${c}`;n.followerTargetId=l,V.info(`Opened follower tab for teleport`),V.debug(`Opened follower tab for teleport details`,{followerTargetId:l});let u=r;await e.withTab(l,async e=>{if(await e.send(`Page.enable`),a.length>0)try{await e.send(`Network.setCookies`,{cookies:a}),V.info(`Injected leader cookies into follower`,{count:a.length})}catch(e){V.warn(`Could not inject leader cookies into follower`,{error:String(e)})}n.followerStorageScript=await UC(e,o,`follower`),V.info(`Navigating follower to intercepted auth URL`),V.debug(`Navigating follower to intercepted auth URL details`,{url:u,originalLeaderUrl:n.originalLeaderUrl,triggerUrl:r,storageOrigin:o.origin||`(unknown)`}),await e.send(`Page.navigate`,{url:u})}),V.info(`Starting teleport timeout timer`,{timeoutMs:n.timeoutMs}),n.timeoutTimer=setTimeout(()=>{(n.phase===`teleporting`||n.phase===`waitingForAuth`||n.phase===`waitingForReturn`)&&tw(e,n).catch(e=>{V.error(`Teleport timeout handler failed`,{error:String(e)})})},n.timeoutMs),n.phase=`waitingForAuth`,V.info(`Teleport waiting for follower auth redirect`),V.debug(`Teleport waiting for follower auth redirect details`,{startPattern:n.startPattern.source}),n.pollInterval=setInterval(()=>{iw(e,t,n,l,s).catch(e=>{V.warn(`Follower teleport poll failed`,{error:String(e)})})},1e3)}catch(t){V.error(`Teleport trigger failed`,{error:String(t)}),await JC(e,n,`trigger-error`),n.phase=`done`,nw(n),n.rejectBlock?.(t instanceof Error?t:Error(String(t)))}}}async function ow(e,t){V.info(`Waiting for redirect chain to settle (2s)`),await new Promise(e=>setTimeout(e,2e3));let n=t.followerTargetId,r=t.followerStorageScript??null;t.followerStorageScript=null;let{cookies:i,followerStorage:a,finalUrl:o}=await e.withTab(n,async e=>{let n;try{let t=await e.evaluate(`window.location.href`);n=typeof t==`string`?t:String(t),V.debug(`Captured final URL from follower`,{finalUrl:n})}catch(e){V.warn(`Could not read follower URL (may be mid-navigation)`,{error:String(e)})}try{let t=await e.evaluate(`document.body?.innerText?.substring(0, 500) || "(empty)"`);V.debug(`Follower page content at capture time`,{bodyText:t})}catch(e){V.warn(`Could not read follower page content`,{error:String(e)})}let i=YC((await e.send(`Network.getCookies`)).cookies),a=i.length>0?PC(i):`none`;V.info(`Captured cookies from follower`,{count:i.length}),V.debug(`Captured cookies from follower details`,{count:i.length,domains:a});let o=NC;try{o=await zC(e,`follower`),V.info(`Captured follower storage for leader`,{totalEntries:FC(o),localStorageCount:Object.keys(o.localStorage).length,sessionStorageCount:Object.keys(o.sessionStorage).length}),V.debug(`Captured follower storage for leader details`,{origin:o.origin||`(unknown)`,localStorageCount:Object.keys(o.localStorage).length,sessionStorageCount:Object.keys(o.sessionStorage).length})}catch(e){V.warn(`Could not capture follower storage`,{error:String(e)})}return await qC(e,t,`capture`),await WC(e,r,`follower`),{cookies:i,followerStorage:o,finalUrl:n}});try{await e.closePage(t.followerTargetId),V.info(`Closed follower tab after teleport`),V.debug(`Closed follower tab after teleport details`,{followerTargetId:t.followerTargetId})}catch(e){V.warn(`Failed to close follower tab`,{error:String(e)})}return{cookies:i,followerStorage:a,finalUrl:o}}async function sw(e,t,n,r){try{await e.navigate(n),await HC(e,t,`leader`),r&&r!==n&&await e.navigate(r)}catch(i){V.warn(`Direct leader origin hydration failed, falling back to init-script replay`,{error:String(i)}),V.debug(`Direct leader origin hydration fallback details`,{hydrationUrl:n,landingUrl:r,error:String(i)});let a=await UC(e,t,`leader`);try{r&&await e.navigate(r)}finally{await WC(e,a,`leader`)}}}async function cw(e,t,n,r,i){let a=e.targetId,o=await UC(e,n,`leader`);try{r&&(V.info(`Navigating leader after auth-state injection`,{hasLandingUrl:!0,storageEntries:FC(n)}),V.debug(`Navigating leader after auth-state injection details`,{landingUrl:r,originalLeaderUrl:t.originalLeaderUrl,finalUrl:i,leaderTargetId:a,storageOrigin:n.origin||`(unknown)`,storageEntries:FC(n)}),await e.navigate(r))}finally{await WC(e,o,`leader`)}}async function lw(e,t,n,r,i){let a=t.leaderTargetId,o=r.origin||``,s=RC(o,t.originalLeaderUrl,i),c=IC(t.originalLeaderUrl),l=!!o&&c!==o,u=l?LC(o):null;return a?(await e.withTab(a,async e=>{n.length>0&&(await e.send(`Network.setCookies`,{cookies:n}),V.info(`Injected cookies into leader tab`,{count:n.length}),V.debug(`Injected cookies into leader tab details`,{count:n.length,leaderTargetId:a})),l&&u?(V.info(`Hydrating leader storage origin before landing`,{storageEntries:FC(r)}),V.debug(`Hydrating leader storage origin before landing details`,{hydrationUrl:u,landingUrl:s,originalLeaderUrl:t.originalLeaderUrl,finalUrl:i,leaderTargetId:a,storageOrigin:o,storageEntries:FC(r)}),await sw(e,r,u,s)):await cw(e,t,r,s,i)}),s):(V.warn(`No leader tab available for auth-state injection`),s)}async function uw(e,t,n,r){if(n.phase===`teleporting`||n.phase===`waitingForReturn`){n.phase=`capturing`,V.info(`Capturing auth state from follower`),V.debug(`Capturing auth state from follower details`,{followerTargetId:n.followerTargetId,runtimeId:r}),n.pollInterval&&=(clearInterval(n.pollInterval),void 0),n.timeoutTimer&&=(clearTimeout(n.timeoutTimer),void 0);try{let{cookies:t,followerStorage:i,finalUrl:a}=await ow(e,n),o=FC(i),s=await lw(e,n,t,i,a);n.phase=`done`,nw(n);let c=t.length>0?` (${PC(t)})`:``,l=o>0?` + ${o} storage entr${o===1?`y`:`ies`}`:``,u=s?` (navigated to ${s})`:``,d=`Teleported ${t.length} cookie(s)${c}${l} from ${r}${u}`;V.info(`Teleport completed successfully`,{cookieCount:t.length,storageEntries:o,landed:!!s}),V.debug(`Teleport completed successfully details`,{result:d}),n.resolveBlock?.(d)}catch(t){V.error(`Teleport auth-state capture failed`,{error:String(t)}),await JC(e,n,`capture-error`),n.phase=`done`,nw(n),n.rejectBlock?.(t instanceof Error?t:Error(String(t)))}}}const dw=e(`playwright`),fw=async({browser:e,fs:t,state:n,positional:r,flags:i,onTab:a})=>{if(r.length===0)return{stdout:``,stderr:`goto requires a URL
1169
- `,exitCode:1};let o=A(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){dw.info(`Arming teleport via goto/navigate flags`),dw.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&&(nw(u),n.teleportWatchers.delete(o.targetId)),rw(e,n,t,a,l*1e3,i[`teleport-runtime`],r[0],o.targetId)}if(i.discover===`true`){let{browseShWarning:e,...n}=await iC(r[0],{discover:!0,fs:t}),i={action:`navigate`,targetId:o.targetId,source:`auxiliary-fetch`,...n};return{stdout:JSON.stringify(i,null,2)+`
1170
- `,stderr:e?`${e}\n`:``,exitCode:0}}return{stdout:`Navigated to ${r[0]}\n`,stderr:``,exitCode:0}},pw=async({browser:e,state:t,flags:n,onTab:r})=>{let i=A(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
1171
- `,stderr:``,exitCode:0})},mw=async({browser:e,state:t,flags:n,onTab:r})=>{let i=A(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
1172
- `,stderr:``,exitCode:0})},hw=async({browser:e,flags:t,onTab:n})=>{let r=A(t);return`error`in r?{stdout:``,stderr:r.error,exitCode:1}:(await n(r.targetId,async e=>{await e.send(`Page.reload`)}),{stdout:`Reloaded
1173
- `,stderr:``,exitCode:0})},gw=async({browser:e,flags:t,positional:n,onTab:r})=>{let i=A(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"
1174
- `,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})},_w=[`image/`,`font/`,`text/css`,`application/javascript`,`text/javascript`];function vw(e,t){if(e&&_w.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 yw(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=AS({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:vw(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=vw(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 bw(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 xw(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=bw(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 Sw(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 Cw=async({browser:e,state:t,flags:n,onTab:r})=>{let i=A(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),yw(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
1172
+ }))()`);if(typeof t!=`string`||t.length===0)return{url:``,title:``,bodySnippet:`(unavailable)`};try{let e=JSON.parse(t);return{url:typeof e.url==`string`?e.url:``,title:typeof e.title==`string`?e.title:``,bodySnippet:typeof e.bodySnippet==`string`&&e.bodySnippet.length>0?e.bodySnippet:`(empty)`}}catch{return{url:``,title:``,bodySnippet:`(unparseable)`}}}function iw(e){return/callback|authorize\/resume|error/i.test(e)}async function aw(e,t,n){try{let r=await rw(e),i=`${n}:${r.url}:${r.title}`;if(t.lastFollowerDiagnosticKey===i)return;t.lastFollowerDiagnosticKey=i,WC.debug(`Teleport follower diagnostics`,{reason:n,url:r.url,title:r.title,bodySnippet:r.bodySnippet})}catch(e){WC.warn(`Could not capture teleport follower diagnostics`,{reason:n,error:String(e)})}}async function ow(e,t,n){let r=t.followerStorageScript;if(r){t.followerStorageScript=null;try{await e.withTab(r.targetId,e=>nw(e,r,`follower`)),WC.info(`Removed follower teleport storage init script`,{reason:n})}catch(e){WC.warn(`Failed to remove follower teleport storage init script`,{reason:n,error:String(e)})}}}function sw(e){return Array.isArray(e)?e:[]}const V=e(`playwright-teleport`);let cw=null,lw=null;function uw(e){cw=e}function dw(e){lw=e}function fw(){return lw?.()??null}async function pw(e,t){if(V.warn(`Teleport timed out`,{timeoutMs:t.timeoutMs,phase:t.phase}),V.debug(`Teleport timeout details`,{timeoutMs:t.timeoutMs,phase:t.phase,followerTargetId:t.followerTargetId}),t.phase=`timedOut`,t.followerTargetId){try{await e.withTab(t.followerTargetId,e=>aw(e,t,`timeout`))}catch(e){V.warn(`Could not attach to follower for timeout diagnostics`,{error:String(e)})}await ow(e,t,`timeout`)}if(mw(t),t.followerTargetId)try{await e.closePage(t.followerTargetId)}catch(e){V.warn(`Failed to close follower tab after timeout`,{error:String(e)})}t.rejectBlock?.(Error(`Teleport timed out after ${Math.round(t.timeoutMs/1e3)}s — human did not complete auth`))}function mw(e){V.info(`Cleaning up teleport watcher`,{phase:e.phase,hadPoll:!!e.pollInterval,hadTimeout:!!e.timeoutTimer,hadListener:!!e.cleanupListener}),e.pollInterval&&=(clearInterval(e.pollInterval),void 0),e.timeoutTimer&&=(clearTimeout(e.timeoutTimer),void 0),e.cleanupListener&&=(e.cleanupListener(),void 0)}function hw(e,t,n,r,i,a,o,s){if(a===`preview`)throw Error(`cannot teleport to a preview target (no Network.*)`);V.info(`Arming teleport watcher`,{timeoutMs:i,runtimeSelection:a?`explicit`:`auto`}),V.debug(`Arming teleport watcher details`,{startPattern:n.source,returnPattern:r.source,timeoutMs:i,runtimeId:a??`auto`,originalUrl:o});let c={startPattern:n,returnPattern:r,timeoutMs:i,runtimeId:a,phase:`armed`,leaderTargetId:s,originalLeaderUrl:o};return c.completionPromise=new Promise((e,t)=>{c.resolveBlock=e,c.rejectBlock=t}),c.completionPromise.catch(()=>{}),c.pollInterval=setInterval(()=>{(async()=>{if(c.phase!==`armed`)return;let r=c.leaderTargetId;if(r)try{let i=await e.withTab(r,e=>e.evaluate(`window.location.href`)),a=typeof i==`string`?i:String(i);V.debug(`Polling leader tab URL`,{targetId:r,href:a,startPattern:n.source}),n.test(a)&&(V.info(`Teleport start pattern matched on leader`),V.debug(`Teleport start pattern matched on leader details`,{targetId:r,href:a,startPattern:n.source}),_w(e,t,c,a).catch(e=>{V.error(`Unhandled teleport trigger error`,{error:String(e)})}))}catch(e){V.warn(`Error polling leader tab URL`,{targetId:r,error:String(e)})}})().catch(e=>{V.warn(`Leader teleport poll failed`,{error:String(e)})})},1e3),s&&t.teleportWatchers.set(s,c),c}async function gw(e,t,n,r,i){if(n.phase===`waitingForAuth`||n.phase===`waitingForReturn`)try{let a=await e.withTab(r,e=>e.evaluate(`window.location.href`)),o=typeof a==`string`?a:String(a);if(!o)return;if(n.lastFollowerUrl!==o&&(n.lastFollowerUrl=o,V.debug(`Follower teleport navigation`,{href:o,phase:n.phase})),n.phase===`waitingForAuth`){n.startPattern.test(o)?(n.phase=`waitingForReturn`,V.info(`Follower reached auth provider; waiting for return pattern`),V.debug(`Follower reached auth provider details`,{href:o,startPattern:n.startPattern.source})):V.debug(`Waiting for auth redirect on follower`,{href:o,startPattern:n.startPattern.source});return}V.debug(`Polling follower tab URL for return`,{href:o,returnPattern:n.returnPattern.source}),iw(o)&&await e.withTab(r,e=>aw(e,n,`waiting-for-return`)),n.returnPattern.test(o)&&(V.info(`Follower return pattern matched after auth`),V.debug(`Follower return pattern matched after auth details`,{href:o,returnPattern:n.returnPattern.source}),Sw(e,t,n,i).catch(e=>{V.error(`Unhandled teleport capture error`,{error:String(e)})}))}catch(e){V.warn(`Error polling follower tab URL`,{error:String(e)})}}async function _w(e,t,n,r){if(n.phase===`armed`){n.phase=`teleporting`,V.info(`Teleport triggered`),V.debug(`Teleport trigger details`,{triggerUrl:r}),n.pollInterval&&=(clearInterval(n.pollInterval),void 0);try{let i=n.leaderTargetId;if(!i)throw Error(`teleport has no leader tab to capture from`);let a=[],o=GC;try{a=sw((await e.withTab(i,e=>e.send(`Network.getCookies`,{}))).cookies),V.info(`Captured leader cookies for follower`,{count:a.length})}catch(e){V.warn(`Could not capture leader cookies`,{error:String(e)})}try{o=await e.withTab(i,e=>ZC(e,`leader`)),V.info(`Captured leader storage for follower`,{totalEntries:qC(o),localStorageCount:Object.keys(o.localStorage).length,sessionStorageCount:Object.keys(o.sessionStorage).length}),V.debug(`Captured leader storage for follower details`,{origin:o.origin||`(unknown)`,localStorageCount:Object.keys(o.localStorage).length,sessionStorageCount:Object.keys(o.sessionStorage).length})}catch(e){V.warn(`Could not capture leader storage`,{error:String(e)})}let s=n.runtimeId;if(!s){let e=cw?.();if(!e)throw Error(`No follower selection available — not connected to a tray`);let t=e();if(!t)throw Error(`No followers connected to teleport to`);s=t.runtimeId}V.info(`Selected follower for teleport`),V.debug(`Selected follower for teleport details`,{runtimeId:s});let c=await e.createRemotePage(s,`about:blank`),l=c.includes(`:`)?c:`${s}:${c}`;n.followerTargetId=l,V.info(`Opened follower tab for teleport`),V.debug(`Opened follower tab for teleport details`,{followerTargetId:l});let u=r;await e.withTab(l,async e=>{if(await e.send(`Page.enable`),a.length>0)try{await e.send(`Network.setCookies`,{cookies:a}),V.info(`Injected leader cookies into follower`,{count:a.length})}catch(e){V.warn(`Could not inject leader cookies into follower`,{error:String(e)})}n.followerStorageScript=await tw(e,o,`follower`),V.info(`Navigating follower to intercepted auth URL`),V.debug(`Navigating follower to intercepted auth URL details`,{url:u,originalLeaderUrl:n.originalLeaderUrl,triggerUrl:r,storageOrigin:o.origin||`(unknown)`}),await e.send(`Page.navigate`,{url:u})}),V.info(`Starting teleport timeout timer`,{timeoutMs:n.timeoutMs}),n.timeoutTimer=setTimeout(()=>{(n.phase===`teleporting`||n.phase===`waitingForAuth`||n.phase===`waitingForReturn`)&&pw(e,n).catch(e=>{V.error(`Teleport timeout handler failed`,{error:String(e)})})},n.timeoutMs),n.phase=`waitingForAuth`,V.info(`Teleport waiting for follower auth redirect`),V.debug(`Teleport waiting for follower auth redirect details`,{startPattern:n.startPattern.source}),n.pollInterval=setInterval(()=>{gw(e,t,n,l,s).catch(e=>{V.warn(`Follower teleport poll failed`,{error:String(e)})})},1e3)}catch(t){V.error(`Teleport trigger failed`,{error:String(t)}),await ow(e,n,`trigger-error`),n.phase=`done`,mw(n),n.rejectBlock?.(t instanceof Error?t:Error(String(t)))}}}async function vw(e,t){V.info(`Waiting for redirect chain to settle (2s)`),await new Promise(e=>setTimeout(e,2e3));let n=t.followerTargetId,r=t.followerStorageScript??null;t.followerStorageScript=null;let{cookies:i,followerStorage:a,finalUrl:o}=await e.withTab(n,async e=>{let n;try{let t=await e.evaluate(`window.location.href`);n=typeof t==`string`?t:String(t),V.debug(`Captured final URL from follower`,{finalUrl:n})}catch(e){V.warn(`Could not read follower URL (may be mid-navigation)`,{error:String(e)})}try{let t=await e.evaluate(`document.body?.innerText?.substring(0, 500) || "(empty)"`);V.debug(`Follower page content at capture time`,{bodyText:t})}catch(e){V.warn(`Could not read follower page content`,{error:String(e)})}let i=sw((await e.send(`Network.getCookies`)).cookies),a=i.length>0?KC(i):`none`;V.info(`Captured cookies from follower`,{count:i.length}),V.debug(`Captured cookies from follower details`,{count:i.length,domains:a});let o=GC;try{o=await ZC(e,`follower`),V.info(`Captured follower storage for leader`,{totalEntries:qC(o),localStorageCount:Object.keys(o.localStorage).length,sessionStorageCount:Object.keys(o.sessionStorage).length}),V.debug(`Captured follower storage for leader details`,{origin:o.origin||`(unknown)`,localStorageCount:Object.keys(o.localStorage).length,sessionStorageCount:Object.keys(o.sessionStorage).length})}catch(e){V.warn(`Could not capture follower storage`,{error:String(e)})}return await aw(e,t,`capture`),await nw(e,r,`follower`),{cookies:i,followerStorage:o,finalUrl:n}});try{await e.closePage(t.followerTargetId),V.info(`Closed follower tab after teleport`),V.debug(`Closed follower tab after teleport details`,{followerTargetId:t.followerTargetId})}catch(e){V.warn(`Failed to close follower tab`,{error:String(e)})}return{cookies:i,followerStorage:a,finalUrl:o}}async function yw(e,t,n,r){try{await e.navigate(n),await ew(e,t,`leader`),r&&r!==n&&await e.navigate(r)}catch(i){V.warn(`Direct leader origin hydration failed, falling back to init-script replay`,{error:String(i)}),V.debug(`Direct leader origin hydration fallback details`,{hydrationUrl:n,landingUrl:r,error:String(i)});let a=await tw(e,t,`leader`);try{r&&await e.navigate(r)}finally{await nw(e,a,`leader`)}}}async function bw(e,t,n,r,i){let a=e.targetId,o=await tw(e,n,`leader`);try{r&&(V.info(`Navigating leader after auth-state injection`,{hasLandingUrl:!0,storageEntries:qC(n)}),V.debug(`Navigating leader after auth-state injection details`,{landingUrl:r,originalLeaderUrl:t.originalLeaderUrl,finalUrl:i,leaderTargetId:a,storageOrigin:n.origin||`(unknown)`,storageEntries:qC(n)}),await e.navigate(r))}finally{await nw(e,o,`leader`)}}async function xw(e,t,n,r,i){let a=t.leaderTargetId,o=r.origin||``,s=XC(o,t.originalLeaderUrl,i),c=JC(t.originalLeaderUrl),l=!!o&&c!==o,u=l?YC(o):null;return a?(await e.withTab(a,async e=>{n.length>0&&(await e.send(`Network.setCookies`,{cookies:n}),V.info(`Injected cookies into leader tab`,{count:n.length}),V.debug(`Injected cookies into leader tab details`,{count:n.length,leaderTargetId:a})),l&&u?(V.info(`Hydrating leader storage origin before landing`,{storageEntries:qC(r)}),V.debug(`Hydrating leader storage origin before landing details`,{hydrationUrl:u,landingUrl:s,originalLeaderUrl:t.originalLeaderUrl,finalUrl:i,leaderTargetId:a,storageOrigin:o,storageEntries:qC(r)}),await yw(e,r,u,s)):await bw(e,t,r,s,i)}),s):(V.warn(`No leader tab available for auth-state injection`),s)}async function Sw(e,t,n,r){if(n.phase===`teleporting`||n.phase===`waitingForReturn`){n.phase=`capturing`,V.info(`Capturing auth state from follower`),V.debug(`Capturing auth state from follower details`,{followerTargetId:n.followerTargetId,runtimeId:r}),n.pollInterval&&=(clearInterval(n.pollInterval),void 0),n.timeoutTimer&&=(clearTimeout(n.timeoutTimer),void 0);try{let{cookies:t,followerStorage:i,finalUrl:a}=await vw(e,n),o=qC(i),s=await xw(e,n,t,i,a);n.phase=`done`,mw(n);let c=t.length>0?` (${KC(t)})`:``,l=o>0?` + ${o} storage entr${o===1?`y`:`ies`}`:``,u=s?` (navigated to ${s})`:``,d=`Teleported ${t.length} cookie(s)${c}${l} from ${r}${u}`;V.info(`Teleport completed successfully`,{cookieCount:t.length,storageEntries:o,landed:!!s}),V.debug(`Teleport completed successfully details`,{result:d}),n.resolveBlock?.(d)}catch(t){V.error(`Teleport auth-state capture failed`,{error:String(t)}),await ow(e,n,`capture-error`),n.phase=`done`,mw(n),n.rejectBlock?.(t instanceof Error?t:Error(String(t)))}}}const Cw=e(`playwright`),ww=async({browser:e,fs:t,state:n,positional:r,flags:i,onTab:a})=>{if(r.length===0)return{stdout:``,stderr:`goto requires a URL
1173
+ `,exitCode:1};let o=A(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){Cw.info(`Arming teleport via goto/navigate flags`),Cw.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&&(mw(u),n.teleportWatchers.delete(o.targetId)),hw(e,n,t,a,l*1e3,i[`teleport-runtime`],r[0],o.targetId)}if(i.discover===`true`){let{browseShWarning:e,...n}=await gC(r[0],{discover:!0,fs:t}),i={action:`navigate`,targetId:o.targetId,source:`auxiliary-fetch`,...n};return{stdout:JSON.stringify(i,null,2)+`
1174
+ `,stderr:e?`${e}\n`:``,exitCode:0}}return{stdout:`Navigated to ${r[0]}\n`,stderr:``,exitCode:0}},Tw=async({browser:e,state:t,flags:n,onTab:r})=>{let i=A(n);return`error`in i?{stdout:``,stderr:i.error,exitCode:1}:(await r(i.targetId,async e=>{await e.evaluate(`history.back()`)}),t.snapshots.delete(i.targetId),{stdout:`Navigated back
1175
+ `,stderr:``,exitCode:0})},Ew=async({browser:e,state:t,flags:n,onTab:r})=>{let i=A(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
1176
+ `,stderr:``,exitCode:0})},Dw=async({browser:e,flags:t,onTab:n})=>{let r=A(t);return`error`in r?{stdout:``,stderr:r.error,exitCode:1}:(await n(r.targetId,async e=>{await e.send(`Page.reload`)}),{stdout:`Reloaded
1177
+ `,stderr:``,exitCode:0})},Ow=async({browser:e,flags:t,positional:n,onTab:r})=>{let i=A(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"
1178
+ `,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})},kw=[`image/`,`font/`,`text/css`,`application/javascript`,`text/javascript`];function Aw(e,t){if(e&&kw.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 jw(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=HS({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:Aw(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=Aw(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 Mw(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 Nw(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=Mw(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 Pw(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 Fw=async({browser:e,state:t,flags:n,onTab:r})=>{let i=A(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),jw(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
1175
1179
  `,stderr:``,exitCode:0}:{stdout:c.map(e=>`${e.index} ${e.method} ${e.url} → ${e.status??`pending`}`).join(`
1176
1180
  `)+`
1177
- `,stderr:``,exitCode:0}},ww=async({browser:e,state:t,positional:n,flags:r,fs:i,onTab:a})=>{let o=A(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),yw(e,t,r,o.targetId,n)});let s=n[0]??``,c=Sw(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)+`
1181
+ `,stderr:``,exitCode:0}},Iw=async({browser:e,state:t,positional:n,flags:r,fs:i,onTab:a})=>{let o=A(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),jw(e,t,r,o.targetId,n)});let s=n[0]??``,c=Pw(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)+`
1178
1182
  ... (truncated)`:e,n=c.responseBodyBase64?`Response Body (base64)`:`Response Body`;l.push(``,`${n}:\n${t}`)}let u=l.join(`
1179
1183
  `)+`
1180
- `,d=r.filename;return d?(await i.writeFile(d,u),{stdout:`Saved to ${d}\n`,stderr:``,exitCode:0}):{stdout:u,stderr:``,exitCode:0}},Tw=async({browser:e,state:t,positional:n,flags:r,fs:i,onTab:a})=>{let o=A(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),yw(e,t,r,o.targetId,n)});let s=n[0]??``,c=Sw(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(`
1184
+ `,d=r.filename;return d?(await i.writeFile(d,u),{stdout:`Saved to ${d}\n`,stderr:``,exitCode:0}):{stdout:u,stderr:``,exitCode:0}},Lw=async({browser:e,state:t,positional:n,flags:r,fs:i,onTab:a})=>{let o=A(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),jw(e,t,r,o.targetId,n)});let s=n[0]??``,c=Pw(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(`
1181
1185
  `)+`
1182
- `,u=r.filename;return u?(await i.writeFile(u,l),{stdout:`Saved to ${u}\n`,stderr:``,exitCode:0}):{stdout:l,stderr:``,exitCode:0}},Ew=async({browser:e,state:t,positional:n,flags:r,fs:i,onTab:a})=>{let o=A(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),yw(e,t,r,o.targetId,n)});let s=n[0]??``,c=Sw(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)
1186
+ `,u=r.filename;return u?(await i.writeFile(u,l),{stdout:`Saved to ${u}\n`,stderr:``,exitCode:0}):{stdout:l,stderr:``,exitCode:0}},Rw=async({browser:e,state:t,positional:n,flags:r,fs:i,onTab:a})=>{let o=A(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),jw(e,t,r,o.targetId,n)});let s=n[0]??``,c=Pw(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)
1183
1187
  `,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+`
1184
- `,stderr:``,exitCode:0}},Dw=async({browser:e,state:t,positional:n,flags:r,fs:i,onTab:a})=>{let o=A(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),yw(e,t,r,o.targetId,n)});let s=n[0]??``,c=Sw(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)
1188
+ `,stderr:``,exitCode:0}},zw=async({browser:e,state:t,positional:n,flags:r,fs:i,onTab:a})=>{let o=A(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),jw(e,t,r,o.targetId,n)});let s=n[0]??``,c=Pw(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)
1185
1189
  `,stderr:``,exitCode:0};let l=Object.entries(c.responseHeaders).map(([e,t])=>`${e}: ${t}`).join(`
1186
1190
  `)+`
1187
- `,u=r.filename;return u?(await i.writeFile(u,l),{stdout:`Saved to ${u}\n`,stderr:``,exitCode:0}):{stdout:l,stderr:``,exitCode:0}},Ow=async({browser:e,state:t,positional:n,flags:r,fs:i,onTab:a})=>{let o=A(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),yw(e,t,r,o.targetId,n)});let s=n[0]??``,c=Sw(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)
1188
- `,stderr:``,exitCode:0};let l=r.filename,u=xw(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)+`
1191
+ `,u=r.filename;return u?(await i.writeFile(u,l),{stdout:`Saved to ${u}\n`,stderr:``,exitCode:0}):{stdout:l,stderr:``,exitCode:0}},Bw=async({browser:e,state:t,positional:n,flags:r,fs:i,onTab:a})=>{let o=A(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),jw(e,t,r,o.targetId,n)});let s=n[0]??``,c=Pw(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)
1192
+ `,stderr:``,exitCode:0};let l=r.filename,u=Nw(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)+`
1189
1193
  ... (truncated)`:d)+`
1190
- `,stderr:``,exitCode:0}},kw=async({browser:e,fs:t,state:r,positional:i,flags:a,onTab:o,signal:s})=>{let c=i[0]||`about:blank`,l=a.filter;await n(e,r),Ln(s,`about to open the recording tab`);let u=await e.createPage(c);try{let{transport:n,sessionId:i}=await o(u,async e=>{let t=await e.transport.send(`Target.attachToTarget`,{targetId:u,flatten:!0});return{transport:e.transport,sessionId:t.sessionId}});r.harRecorder||=e.createHarRecorder(t,n);let a=await r.harRecorder.startRecording(u,i,l,s);return{stdout:`Recording started (targetId: ${u}, recordingId: ${a}) at ${c}\nHAR saved to /recordings/${a}/\n`,stderr:``,exitCode:0}}catch(t){throw await e.closePage(u).catch(()=>void 0),t}},Aw=async({state:e,positional:t})=>{if(t.length===0)return{stdout:``,stderr:`stop-recording requires a recordingId
1191
- `,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}},jw=e(`playwright-route`),Mw=[{urlPattern:`*`,requestStage:`Request`}];function Nw(e){let t=e.replace(/[.+?^${}()|[\]\\]/g,`\\$&`).replace(/\*\*/g,`@@`).replace(/\*/g,`[^/]*`).replace(/@@/g,`.*`);return RegExp(`^${t}$`)}async function Pw(e,t,n,r,i){if(i.sessionId!==t)return;let{requestId:a,request:o}=i,s=(n.routes.get(r)??[]).find(e=>e.regex.test(o.url));if(!s){await e.send(`Fetch.continueRequest`,{requestId:a},t).catch(e=>{jw.warn(`Fetch.continueRequest failed — intercepted request may hang`,{requestId:a,err:e})});return}let c=[{name:`Content-Type`,value:s.contentType},...Object.entries(s.headers).map(([e,t])=>({name:e,value:t}))];await e.send(`Fetch.fulfillRequest`,{requestId:a,responseCode:s.status,responseHeaders:c,body:s.body?l(new TextEncoder().encode(s.body)):void 0},t).catch(e=>{jw.warn(`Fetch.fulfillRequest failed`,{requestId:a,url:o.url,err:e})})}async function Fw(e,t,n,r){await t(r,async({sessionId:t,transport:i})=>{await i.send(`Fetch.enable`,{patterns:Mw},t);let a,o=e=>{a&&Pw(a.transport,a.sessionId,n,r,e)};try{a=AS({browser:e,targetId:r,transport:i,sessionId:t,listeners:[[`Fetch.requestPaused`,o]],enable:(e,t)=>e.send(`Fetch.enable`,{patterns:Mw},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 Iw=async({browser:e,state:t,positional:n,flags:r,onTab:i})=>{if(n.length===0)return{stdout:``,stderr:`route requires a URL pattern
1192
- `,exitCode:1};let a=A(r);if(`error`in a)return{stdout:``,stderr:a.error,exitCode:1};let o=n[0],s={pattern:o,regex:Nw(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(`,`)&&jw.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 Fw(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}},Lw=async({state:e,flags:t})=>{let n=A(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
1194
+ `,stderr:``,exitCode:0}},Vw=async({browser:e,fs:t,state:r,positional:i,flags:a,onTab:o,signal:s})=>{let c=i[0]||`about:blank`,l=a.filter;await n(e,r),Ln(s,`about to open the recording tab`);let u=await e.createPage(c);try{let{transport:n,sessionId:i}=await o(u,async e=>{let t=await e.transport.send(`Target.attachToTarget`,{targetId:u,flatten:!0});return{transport:e.transport,sessionId:t.sessionId}});r.harRecorder||=e.createHarRecorder(t,n);let a=await r.harRecorder.startRecording(u,i,l,s);return{stdout:`Recording started (targetId: ${u}, recordingId: ${a}) at ${c}\nHAR saved to /recordings/${a}/\n`,stderr:``,exitCode:0}}catch(t){throw await e.closePage(u).catch(()=>void 0),t}},Hw=async({state:e,positional:t})=>{if(t.length===0)return{stdout:``,stderr:`stop-recording requires a recordingId
1195
+ `,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}},Uw=e(`playwright-route`),Ww=[{urlPattern:`*`,requestStage:`Request`}];function Gw(e){let t=e.replace(/[.+?^${}()|[\]\\]/g,`\\$&`).replace(/\*\*/g,`@@`).replace(/\*/g,`[^/]*`).replace(/@@/g,`.*`);return RegExp(`^${t}$`)}async function Kw(e,t,n,r,i){if(i.sessionId!==t)return;let{requestId:a,request:o}=i,s=(n.routes.get(r)??[]).find(e=>e.regex.test(o.url));if(!s){await e.send(`Fetch.continueRequest`,{requestId:a},t).catch(e=>{Uw.warn(`Fetch.continueRequest failed — intercepted request may hang`,{requestId:a,err:e})});return}let c=[{name:`Content-Type`,value:s.contentType},...Object.entries(s.headers).map(([e,t])=>({name:e,value:t}))];await e.send(`Fetch.fulfillRequest`,{requestId:a,responseCode:s.status,responseHeaders:c,body:s.body?l(new TextEncoder().encode(s.body)):void 0},t).catch(e=>{Uw.warn(`Fetch.fulfillRequest failed`,{requestId:a,url:o.url,err:e})})}async function qw(e,t,n,r){await t(r,async({sessionId:t,transport:i})=>{await i.send(`Fetch.enable`,{patterns:Ww},t);let a,o=e=>{a&&Kw(a.transport,a.sessionId,n,r,e)};try{a=HS({browser:e,targetId:r,transport:i,sessionId:t,listeners:[[`Fetch.requestPaused`,o]],enable:(e,t)=>e.send(`Fetch.enable`,{patterns:Ww},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 Jw=async({browser:e,state:t,positional:n,flags:r,onTab:i})=>{if(n.length===0)return{stdout:``,stderr:`route requires a URL pattern
1196
+ `,exitCode:1};let a=A(r);if(`error`in a)return{stdout:``,stderr:a.error,exitCode:1};let o=n[0],s={pattern:o,regex:Gw(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(`,`)&&Uw.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 qw(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}},Yw=async({state:e,flags:t})=>{let n=A(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
1193
1197
  `,stderr:``,exitCode:0}:{stdout:r.map((e,t)=>`${t+1}. ${e.pattern} → ${e.status} ${e.contentType}`).join(`
1194
1198
  `)+`
1195
- `,stderr:``,exitCode:0}},Rw=async({state:e,positional:t,flags:n})=>{let r=A(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
1196
- `,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}};async function zw(e,t){if(!t.sessionDirsCreated){for(let t of[`/.playwright`,`/.playwright/snapshots`,`/.playwright/screenshots`])try{await e.mkdir(t,{recursive:!0})}catch(e){if(!Bn(e))throw e}t.sessionDirsCreated=!0}}async function Bw(e,t,n,r){try{return await e.withTab(n,async e=>{let{url:i,title:o,text:s,refToSelector:c,refToBackendNodeId:l,refToFrameId:u}=await a(e),d={url:i,title:o,refToSelector:c,refToBackendNodeId:l,refToFrameId:u,content:s,timestamp:Date.now()};r.snapshots.set(n,d);let f=[`Page URL: ${i}`,`Page Title: ${o}`,``,s].join(`
1197
- `),p=`/.playwright/snapshots/page-${Rn(new Date)}.yml`;return await t.writeFile(p,f),p})}catch{return null}}async function Vw(e,t,n){await zw(e,t);let r=new Date().toISOString(),i=`playwright-cli ${n.command}${n.args.length?` `+n.args.join(` `):``}`,a=n.result.exitCode===0?n.result.stdout.trim()||`OK`:`Error: ${n.result.stderr.trim()}`,o=[`### ${i}`,`- **Time**: ${r}`];if(n.tabUrl||n.targetId){let e=n.tabUrl?`${n.tabUrl}${n.targetId?` (targetId: ${n.targetId})`:``}`:`targetId: ${n.targetId}`;o.push(`- **Tab**: ${e}`)}o.push(`- **Result**: ${a}`),n.snapshotPath&&o.push(``,`[Snapshot](${n.snapshotPath})`),o.push(`---`,``);let s=o.join(`
1199
+ `,stderr:``,exitCode:0}},Xw=async({state:e,positional:t,flags:n})=>{let r=A(n);if(`error`in r)return{stdout:``,stderr:r.error,exitCode:1};let i=t[0];if(!i){e.routes.set(r.targetId,[]);let t=e.routeCleanup.get(r.targetId);return t&&(t(),e.routeCleanup.delete(r.targetId)),{stdout:`All routes removed
1200
+ `,stderr:``,exitCode:0}}let a=e.routes.get(r.targetId)??[],o=a.length,s=a.filter(e=>e.pattern!==i);if(e.routes.set(r.targetId,s),s.length===0){let t=e.routeCleanup.get(r.targetId);t&&(t(),e.routeCleanup.delete(r.targetId))}return{stdout:`Removed ${o-s.length} route(s) matching "${i}"\n`,stderr:``,exitCode:0}};async function Zw(e,t){if(!t.sessionDirsCreated){for(let t of[`/.playwright`,`/.playwright/snapshots`,`/.playwright/screenshots`])try{await e.mkdir(t,{recursive:!0})}catch(e){if(!Bn(e))throw e}t.sessionDirsCreated=!0}}async function Qw(e,t,n,r){try{return await e.withTab(n,async e=>{let{url:i,title:o,text:s,refToSelector:c,refToBackendNodeId:l,refToFrameId:u}=await a(e),d={url:i,title:o,refToSelector:c,refToBackendNodeId:l,refToFrameId:u,content:s,timestamp:Date.now()};r.snapshots.set(n,d);let f=[`Page URL: ${i}`,`Page Title: ${o}`,``,s].join(`
1201
+ `),p=`/.playwright/snapshots/page-${Rn(new Date)}.yml`;return await t.writeFile(p,f),p})}catch{return null}}async function $w(e,t,n){await Zw(e,t);let r=new Date().toISOString(),i=`playwright-cli ${n.command}${n.args.length?` `+n.args.join(` `):``}`,a=n.result.exitCode===0?n.result.stdout.trim()||`OK`:`Error: ${n.result.stderr.trim()}`,o=[`### ${i}`,`- **Time**: ${r}`];if(n.tabUrl||n.targetId){let e=n.tabUrl?`${n.tabUrl}${n.targetId?` (targetId: ${n.targetId})`:``}`:`targetId: ${n.targetId}`;o.push(`- **Tab**: ${e}`)}o.push(`- **Result**: ${a}`),n.snapshotPath&&o.push(``,`[Snapshot](${n.snapshotPath})`),o.push(`---`,``);let s=o.join(`
1198
1202
  `)+`
1199
- `,c=`/.playwright/session.md`,l=``;try{let t=await e.readFile(c);l=typeof t==`string`?t:new TextDecoder().decode(t)}catch{}await e.writeFile(c,l+s)}function Hw(){return import(`./snapshot-features-B_aMougo.js`)}async function Uw(e,t,n,r){let a=await e.getAccessibilityTreeForFrame(r.frameId),o=new Map,s=new Map,c=new Map,l=i(a,o,s,{value:0},``,`f1`);for(let e of o.keys())c.set(e,r.frameId);let u=l.join(`
1200
- `);return t.snapshots.set(n,{url:r.url,title:r.name,refToSelector:o,refToBackendNodeId:s,refToFrameId:c,content:u,timestamp:Date.now()}),u}async function Ww(e,t){await e.send(`DOM.enable`),await e.send(`Runtime.enable`);let n=(await e.send(`DOM.resolveNode`,{backendNodeId:t})).object;if(n?.objectId)return(await e.send(`Runtime.callFunctionOn`,{objectId:n.objectId,functionDeclaration:`function() {
1203
+ `,c=`/.playwright/session.md`,l=``;try{let t=await e.readFile(c);l=typeof t==`string`?t:new TextDecoder().decode(t)}catch{}await e.writeFile(c,l+s)}function eT(){return import(`./snapshot-features-DBC3Pni8.js`)}async function tT(e,t,n,r){let a=await e.getAccessibilityTreeForFrame(r.frameId),o=new Map,s=new Map,c=new Map,l=i(a,o,s,{value:0},``,`f1`);for(let e of o.keys())c.set(e,r.frameId);let u=l.join(`
1204
+ `);return t.snapshots.set(n,{url:r.url,title:r.name,refToSelector:o,refToBackendNodeId:s,refToFrameId:c,content:u,timestamp:Date.now()}),u}async function nT(e,t){await e.send(`DOM.enable`),await e.send(`Runtime.enable`);let n=(await e.send(`DOM.resolveNode`,{backendNodeId:t})).object;if(n?.objectId)return(await e.send(`Runtime.callFunctionOn`,{objectId:n.objectId,functionDeclaration:`function() {
1201
1205
  this.scrollIntoView({ block: 'center' });
1202
1206
  const r = this.getBoundingClientRect();
1203
1207
  return { x: r.x + window.scrollX, y: r.y + window.scrollY, width: r.width, height: r.height };
1204
- }`,returnByValue:!0})).result?.value}async function Gw(e,t){let n=await e.evaluate(`(function() {
1208
+ }`,returnByValue:!0})).result?.value}async function rT(e,t){let n=await e.evaluate(`(function() {
1205
1209
  const el = document.querySelector(${JSON.stringify(t.split(`,`)[0].trim())});
1206
1210
  if (!el) return null;
1207
1211
  el.scrollIntoView({ block: 'center' });
1208
1212
  const r = el.getBoundingClientRect();
1209
1213
  return JSON.stringify({ x: r.x + window.scrollX, y: r.y + window.scrollY, width: r.width, height: r.height });
1210
- })()`);return n?Vn(n,`element clip rect`):void 0}async function Kw(e,t,n){let r=t.refToBackendNodeId.get(n);if(r)return Ww(e,r);let i=t.refToSelector.get(n);if(!i)throw Error(`Unknown ref "${n}"`);return Gw(e,i)}const qw=async({browser:e,fs:n,state:r,flags:i,onTab:a})=>{let o=A(i);if(`error`in o)return{stdout:``,stderr:o.error,exitCode:1};let s=i[`no-iframes`]===`true`,c=i.depth;if(c!==void 0&&!/^[1-9][0-9]*$/.test(c))return{stdout:``,stderr:`snapshot: --depth must be a positive integer, got "${c}"\n`,exitCode:1};let l=c===void 0?void 0:parseInt(c,10),u=i.boxes===`true`;if(u&&i.frame)return{stdout:``,stderr:`snapshot: --boxes is not supported with --frame (child-frame rects live in another coordinate space)
1211
- `,exitCode:1};let d=await a(o.targetId,async e=>{let n=await Qn(e,i);if(n)return Uw(e,r,o.targetId,n);let{snapshot:a,output:c}=await t(e,r,o.targetId,{noIframes:s});if(!u)return c;let{annotateBoxes:l}=await Hw();return l(e,a.refToBackendNodeId,c)});if(l!==void 0){let{limitSnapshotDepth:e}=await Hw();d=e(d,l)}return i.filename?(await n.writeFile(i.filename,d),{stdout:`Snapshot saved to ${i.filename}\n`,stderr:``,exitCode:0}):{stdout:d+`
1212
- `,stderr:``,exitCode:0}},Jw=async e=>{let{findHandlerImpl:t}=await Hw();return t(e)},Yw=async({browser:e,flags:t,onTab:n})=>{let r=A(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(`
1214
+ })()`);return n?Vn(n,`element clip rect`):void 0}async function iT(e,t,n){let r=t.refToBackendNodeId.get(n);if(r)return nT(e,r);let i=t.refToSelector.get(n);if(!i)throw Error(`Unknown ref "${n}"`);return rT(e,i)}const aT=async({browser:e,fs:n,state:r,flags:i,onTab:a})=>{let o=A(i);if(`error`in o)return{stdout:``,stderr:o.error,exitCode:1};let s=i[`no-iframes`]===`true`,c=i.depth;if(c!==void 0&&!/^[1-9][0-9]*$/.test(c))return{stdout:``,stderr:`snapshot: --depth must be a positive integer, got "${c}"\n`,exitCode:1};let l=c===void 0?void 0:parseInt(c,10),u=i.boxes===`true`;if(u&&i.frame)return{stdout:``,stderr:`snapshot: --boxes is not supported with --frame (child-frame rects live in another coordinate space)
1215
+ `,exitCode:1};let d=await a(o.targetId,async e=>{let n=await Qn(e,i);if(n)return tT(e,r,o.targetId,n);let{snapshot:a,output:c}=await t(e,r,o.targetId,{noIframes:s});if(!u)return c;let{annotateBoxes:l}=await eT();return l(e,a.refToBackendNodeId,c)});if(l!==void 0){let{limitSnapshotDepth:e}=await eT();d=e(d,l)}return i.filename?(await n.writeFile(i.filename,d),{stdout:`Snapshot saved to ${i.filename}\n`,stderr:``,exitCode:0}):{stdout:d+`
1216
+ `,stderr:``,exitCode:0}},oT=async e=>{let{findHandlerImpl:t}=await eT();return t(e)},sT=async({browser:e,flags:t,onTab:n})=>{let r=A(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(`
1213
1217
  `)}`)+`
1214
- `,stderr:``,exitCode:0}},Xw=async({browser:e,fs:t,flags:n,scratchDir:r,onTab:i})=>{let a=A(n);if(`error`in a)return{stdout:``,stderr:a.error,exitCode:1};let o=n.filename||`${r}/page-${Rn(new Date)}.pdf`;try{await i(a.targetId,async({sessionId:e,transport:n})=>{let r=(await n.send(`Page.printToPDF`,{},e)).data,i=Yn(r);await t.writeFile(o,i)})}catch(e){let t=e instanceof Error?e.message:String(e);return oe()?{stdout:``,stderr:`pdf: not available in extension mode — use screenshot --full-page
1215
- `,exitCode:1}:{stdout:``,stderr:`pdf: ${t}\n`,exitCode:1}}return{stdout:`Saved PDF to ${o}\n`,stderr:``,exitCode:0}};async function Zw(e,t,n,r){let i=t.snapshots.get(n);if(!i)throw Error(`No snapshot available. Run "snapshot" first.`);let a=await Kw(e,i,r);return!a||a.width<=0||a.height<=0?{error:`could not resolve element ${r} to a visible box — the snapshot is likely stale (navigation, reload, or layout change). Re-run "snapshot" and retry with a fresh ref, or omit the ref to capture the viewport deliberately.`}:{clip:a}}const Qw=new Set([`png`,`jpeg`,`webp`]);function $w(e){let t=e.type;if(t&&Qw.has(t))return t;let n=e.filename??``;return/\.jpe?g$/i.test(n)?`jpeg`:/\.webp$/i.test(n)?`webp`:`png`}const eT=async({browser:e,fs:t,state:n,positional:r,flags:i,scratchDir:a,onTab:o})=>{let s=A(i);if(`error`in s)return{stdout:``,stderr:s.error,exitCode:1};if(i.type&&!Qw.has(i.type))return{stdout:``,stderr:`screenshot: --type must be png, jpeg, or webp, got "${i.type}"\n`,exitCode:1};if(i[`max-width`]&&$w(i)!==`png`)return{stdout:``,stderr:`screenshot: --max-width requires png output (the downscale pass measures PNG headers); drop --type/--filename extension or --max-width
1216
- `,exitCode:1};let c=await o(s.targetId,async e=>{let o;if(r[0]?.startsWith(`e`)){let t=await Zw(e,n,s.targetId,r[0]);if(`error`in t)return t;o=t.clip}let c=i.fullPage===`true`||i[`full-page`]===`true`;if(i.hires===`true`){let{hiresClip:t}=await Hw();o=await t(e,o,c)}let l=i[`max-width`]?parseInt(i[`max-width`],10):void 0,u=$w(i),d=await e.screenshot({format:u,fullPage:c,...o?{clip:o}:{},...l?{maxWidth:l}:{}}),f=u===`jpeg`?`jpg`:u,p=i.filename||`${a}/screenshot-${Date.now()}.${f}`,m=Yn(d);await t.writeFile(p,m);try{await zw(t,n);let e=`/.playwright/screenshots/screenshot-${Rn(new Date)}.${f}`;await t.writeFile(e,m)}catch{}return{message:`Screenshot saved to ${p} (${Math.round(m.length/1024)} KB)`}});return`error`in c?{stdout:``,stderr:`screenshot: ${c.error}\n`,exitCode:1}:{stdout:c.message+`
1217
- `,stderr:``,exitCode:0}},tT=async({browser:e,fs:t,positional:n,flags:r,onTab:i})=>{let a=A(r);if(`error`in a)return{stdout:``,stderr:a.error,exitCode:1};let o=r.filename??n[0]??`/.playwright/storage-state.json`,s=[],c=[],l=``;await i(a.targetId,async e=>{s=(await e.send(`Network.getCookies`)).cookies??[];let{sessionId:t,transport:n}=e;l=(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??`[]`;c=JSON.parse(r)});let u=JSON.stringify({cookies:s,origins:l?[{origin:l,localStorage:c}]:[]},null,2);return await t.writeFile(o,u),{stdout:`Saved storage state to ${o}\n`,stderr:``,exitCode:0}},nT=async({browser:e,fs:t,positional:n,flags:r,onTab:i})=>{if(n.length===0)return{stdout:``,stderr:`state-load requires a filename
1218
+ `,stderr:``,exitCode:0}},cT=async({browser:e,fs:t,flags:n,scratchDir:r,onTab:i})=>{let a=A(n);if(`error`in a)return{stdout:``,stderr:a.error,exitCode:1};let o=n.filename||`${r}/page-${Rn(new Date)}.pdf`;try{await i(a.targetId,async({sessionId:e,transport:n})=>{let r=(await n.send(`Page.printToPDF`,{},e)).data,i=Yn(r);await t.writeFile(o,i)})}catch(e){let t=e instanceof Error?e.message:String(e);return oe()?{stdout:``,stderr:`pdf: not available in extension mode — use screenshot --full-page
1219
+ `,exitCode:1}:{stdout:``,stderr:`pdf: ${t}\n`,exitCode:1}}return{stdout:`Saved PDF to ${o}\n`,stderr:``,exitCode:0}};async function lT(e,t,n,r){let i=t.snapshots.get(n);if(!i)throw Error(`No snapshot available. Run "snapshot" first.`);let a=await iT(e,i,r);return!a||a.width<=0||a.height<=0?{error:`could not resolve element ${r} to a visible box — the snapshot is likely stale (navigation, reload, or layout change). Re-run "snapshot" and retry with a fresh ref, or omit the ref to capture the viewport deliberately.`}:{clip:a}}const uT=new Set([`png`,`jpeg`,`webp`]);function dT(e){let t=e.type;if(t&&uT.has(t))return t;let n=e.filename??``;return/\.jpe?g$/i.test(n)?`jpeg`:/\.webp$/i.test(n)?`webp`:`png`}const fT=async({browser:e,fs:t,state:n,positional:r,flags:i,scratchDir:a,onTab:o})=>{let s=A(i);if(`error`in s)return{stdout:``,stderr:s.error,exitCode:1};if(i.type&&!uT.has(i.type))return{stdout:``,stderr:`screenshot: --type must be png, jpeg, or webp, got "${i.type}"\n`,exitCode:1};if(i[`max-width`]&&dT(i)!==`png`)return{stdout:``,stderr:`screenshot: --max-width requires png output (the downscale pass measures PNG headers); drop --type/--filename extension or --max-width
1220
+ `,exitCode:1};let c=await o(s.targetId,async e=>{let o;if(r[0]?.startsWith(`e`)){let t=await lT(e,n,s.targetId,r[0]);if(`error`in t)return t;o=t.clip}let c=i.fullPage===`true`||i[`full-page`]===`true`;if(i.hires===`true`){let{hiresClip:t}=await eT();o=await t(e,o,c)}let l=i[`max-width`]?parseInt(i[`max-width`],10):void 0,u=dT(i),d=await e.screenshot({format:u,fullPage:c,...o?{clip:o}:{},...l?{maxWidth:l}:{}}),f=u===`jpeg`?`jpg`:u,p=i.filename||`${a}/screenshot-${Date.now()}.${f}`,m=Yn(d);await t.writeFile(p,m);try{await Zw(t,n);let e=`/.playwright/screenshots/screenshot-${Rn(new Date)}.${f}`;await t.writeFile(e,m)}catch{}return{message:`Screenshot saved to ${p} (${Math.round(m.length/1024)} KB)`}});return`error`in c?{stdout:``,stderr:`screenshot: ${c.error}\n`,exitCode:1}:{stdout:c.message+`
1221
+ `,stderr:``,exitCode:0}},pT=async({browser:e,fs:t,positional:n,flags:r,onTab:i})=>{let a=A(r);if(`error`in a)return{stdout:``,stderr:a.error,exitCode:1};let o=r.filename??n[0]??`/.playwright/storage-state.json`,s=[],c=[],l=``;await i(a.targetId,async e=>{s=(await e.send(`Network.getCookies`)).cookies??[];let{sessionId:t,transport:n}=e;l=(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??`[]`;c=JSON.parse(r)});let u=JSON.stringify({cookies:s,origins:l?[{origin:l,localStorage:c}]:[]},null,2);return await t.writeFile(o,u),{stdout:`Saved storage state to ${o}\n`,stderr:``,exitCode:0}},mT=async({browser:e,fs:t,positional:n,flags:r,onTab:i})=>{if(n.length===0)return{stdout:``,stderr:`state-load requires a filename
1218
1222
  `,exitCode:1};let a=A(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() {
1219
1223
  var items = ${JSON.stringify(e)};
1220
1224
  for (var i = 0; i < items.length; i++) {
1221
1225
  localStorage.setItem(items[i].name, items[i].value);
1222
1226
  }
1223
- })()`;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 rT(e,t){return{list:async({browser:e,flags:n,onTab:r})=>{let i=A(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(`
1227
+ })()`;await n.send(`Runtime.evaluate`,{expression:r,returnByValue:!0},t)}});let l=``;return c.length>0&&(l=`Skipped localStorage for non-matching origins: ${c.map(e=>e.origin).join(`, `)}\n`),{stdout:`Loaded storage state from ${o}\n`,stderr:l,exitCode:0}};function hT(e,t){return{list:async({browser:e,flags:n,onTab:r})=>{let i=A(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(`
1224
1228
  `)})+`
1225
1229
  `,stderr:``,exitCode:0}},get:async({browser:n,positional:r,flags:i,onTab:a})=>{if(r.length===0)return{stdout:``,stderr:`${e}-get requires a key\n`,exitCode:1};let o=A(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})+`
1226
- `,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=A(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=A(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=A(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 iT=rT(`localstorage`,`localStorage`),aT=rT(`sessionstorage`,`sessionStorage`),oT=e(`playwright`),sT={width:412,height:915,deviceScaleFactor:2.625};function cT(e,t,n,r,i){let a=n[`teleport-start`],o=n[`teleport-return`];if(!a||!o)return null;oT.info(`Arming teleport via open/tab-new flags`),oT.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&&(nw(u),t.teleportWatchers.delete(i)),rw(e,t,s,c,l*1e3,n[`teleport-runtime`],r,i),null}const lT=async({browser:e,fs:t,state:r,positional:i,flags:a,onTab:o})=>{let s=i[0]||`about:blank`,c=a.runtime,l=a.mobile===`true`;await n(e,r);let u=l?`about:blank`:s,d;if(d=c?await e.createRemotePage(c,u):await e.createPage(u),l&&await o(d,async e=>{await e.setViewportOverride(sT.width,sT.height,{deviceScaleFactor:sT.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`}),s!==`about:blank`&&await e.navigate(s)}),a.foreground===`true`||a.fg===`true`)try{await o(d,e=>e.bringToFront())}catch(e){oT.debug(`open/tab-new --foreground bringToFront failed`,{targetId:d,error:e instanceof Error?e.message:String(e)})}let f=cT(e,r,a,s,d);if(f)return f;if(a.discover===`true`){let{browseShWarning:e,...n}=await iC(s,{discover:!0,fs:t}),r={action:`open`,targetId:d,source:`auxiliary-fetch`,...n};return{stdout:JSON.stringify(r,null,2)+`
1227
- `,stderr:e?`${e}\n`:``,exitCode:0}}return{stdout:`Opened ${s} in new tab [targetId: ${d}]\n`,stderr:``,exitCode:0}},uT=async({browser:e,state:t})=>{let n=await r(e,t);return n.length===0?{stdout:`No tabs open
1230
+ `,stderr:``,exitCode:0}},set:async({browser:n,positional:r,flags:i,onTab:a})=>{if(r.length<2)return{stdout:``,stderr:`${e}-set requires <key> <value>\n`,exitCode:1};let o=A(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=A(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=A(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 gT=hT(`localstorage`,`localStorage`),_T=hT(`sessionstorage`,`sessionStorage`),vT=e(`playwright`),yT={width:412,height:915,deviceScaleFactor:2.625};function bT(e,t,n,r,i){let a=n[`teleport-start`],o=n[`teleport-return`];if(!a||!o)return null;vT.info(`Arming teleport via open/tab-new flags`),vT.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&&(mw(u),t.teleportWatchers.delete(i)),hw(e,t,s,c,l*1e3,n[`teleport-runtime`],r,i),null}const xT=async({browser:e,fs:t,state:r,positional:i,flags:a,onTab:o})=>{let s=i[0]||`about:blank`,c=a.runtime,l=a.mobile===`true`;await n(e,r);let u=l?`about:blank`:s,d;if(d=c?await e.createRemotePage(c,u):await e.createPage(u),l&&await o(d,async e=>{await e.setViewportOverride(yT.width,yT.height,{deviceScaleFactor:yT.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`}),s!==`about:blank`&&await e.navigate(s)}),a.foreground===`true`||a.fg===`true`)try{await o(d,e=>e.bringToFront())}catch(e){vT.debug(`open/tab-new --foreground bringToFront failed`,{targetId:d,error:e instanceof Error?e.message:String(e)})}let f=bT(e,r,a,s,d);if(f)return f;if(a.discover===`true`){let{browseShWarning:e,...n}=await gC(s,{discover:!0,fs:t}),r={action:`open`,targetId:d,source:`auxiliary-fetch`,...n};return{stdout:JSON.stringify(r,null,2)+`
1231
+ `,stderr:e?`${e}\n`:``,exitCode:0}}return{stdout:`Opened ${s} in new tab [targetId: ${d}]\n`,stderr:``,exitCode:0}},ST=async({browser:e,state:t})=>{let n=await r(e,t);return n.length===0?{stdout:`No tabs open
1228
1232
  `,stderr:``,exitCode:0}:{stdout:n.map(e=>{let t=!!e.active,n=e.targetId.includes(`:`),r=t?` (active)`:``,i=n?` [remote:${e.targetId.substring(0,e.targetId.indexOf(`:`))}]`:``;return`[${e.targetId}] ${e.url} "${e.title}"${r}${i}`}).join(`
1229
1233
  `)+`
1230
- `,stderr:``,exitCode:0}},dT=async({browser:e,state:t,flags:n})=>{let r=A(n);if(`error`in r)return{stdout:``,stderr:r.error,exitCode:1};await e.closePage(r.targetId),t.snapshots.delete(r.targetId),t.teleportWatchers.delete(r.targetId),t.consoleMessages.delete(r.targetId);let i=t.consoleCleanup.get(r.targetId);i&&(i(),t.consoleCleanup.delete(r.targetId)),t.networkRequests.delete(r.targetId);let a=t.networkCleanup.get(r.targetId);a&&(a(),t.networkCleanup.delete(r.targetId));let o=t.routeCleanup.get(r.targetId);return o&&(o(),t.routeCleanup.delete(r.targetId)),t.routes.delete(r.targetId),t.lastMousePosition.delete(r.targetId),{stdout:`Closed tab ${r.targetId}\n`,stderr:``,exitCode:0}},fT=async({browser:e,state:t,positional:n,onTab:i})=>{if(n.length===0)return{stdout:``,stderr:`tab-select requires a tab index
1234
+ `,stderr:``,exitCode:0}},CT=async({browser:e,state:t,flags:n})=>{let r=A(n);if(`error`in r)return{stdout:``,stderr:r.error,exitCode:1};await e.closePage(r.targetId),t.snapshots.delete(r.targetId),t.teleportWatchers.delete(r.targetId),t.consoleMessages.delete(r.targetId);let i=t.consoleCleanup.get(r.targetId);i&&(i(),t.consoleCleanup.delete(r.targetId)),t.networkRequests.delete(r.targetId);let a=t.networkCleanup.get(r.targetId);a&&(a(),t.networkCleanup.delete(r.targetId));let o=t.routeCleanup.get(r.targetId);return o&&(o(),t.routeCleanup.delete(r.targetId)),t.routes.delete(r.targetId),t.lastMousePosition.delete(r.targetId),{stdout:`Closed tab ${r.targetId}\n`,stderr:``,exitCode:0}},wT=async({browser:e,state:t,positional:n,onTab:i})=>{if(n.length===0)return{stdout:``,stderr:`tab-select requires a tab index
1231
1235
  `,exitCode:1};let a=n[0];if(!/^[0-9]+$/.test(a))return{stdout:``,stderr:`tab-select index must be a positive integer
1232
1236
  `,exitCode:1};let o=parseInt(a,10);if(o<1)return{stdout:``,stderr:`tab-select index must be a positive integer
1233
- `,exitCode:1};let s=await r(e,t);if(o>s.length)return{stdout:``,stderr:`tab-select index ${o} out of range (${s.length} tab${s.length===1?``:`s`} open)\n`,exitCode:1};let c=s[o-1].targetId;return await i(c,e=>e.bringToFront()),{stdout:`Selected tab ${o} [targetId: ${c}]\n`,stderr:``,exitCode:0}},pT=async({browser:e,state:t,positional:n,flags:r,onTab:i})=>{if(n.length<2)return{stdout:``,stderr:`resize requires <width> <height>
1237
+ `,exitCode:1};let s=await r(e,t);if(o>s.length)return{stdout:``,stderr:`tab-select index ${o} out of range (${s.length} tab${s.length===1?``:`s`} open)\n`,exitCode:1};let c=s[o-1].targetId;return await i(c,e=>e.bringToFront()),{stdout:`Selected tab ${o} [targetId: ${c}]\n`,stderr:``,exitCode:0}},TT=async({browser:e,state:t,positional:n,flags:r,onTab:i})=>{if(n.length<2)return{stdout:``,stderr:`resize requires <width> <height>
1234
1238
  `,exitCode:1};let a=A(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
1235
- `,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})},mT=e(`playwright-teleport`);function hT(){mT.info(`Listing available follower runtimes`);let e=ew();if(!e)return{stdout:``,stderr:`teleport: not connected to a tray
1239
+ `,exitCode:1}:(await i(a.targetId,e=>e.setViewportOverride(o,s)),t.snapshots.delete(a.targetId),{stdout:`Resized viewport to ${o}x${s}\n`,stderr:``,exitCode:0})},ET=e(`playwright-teleport`);function DT(){ET.info(`Listing available follower runtimes`);let e=fw();if(!e)return{stdout:``,stderr:`teleport: not connected to a tray
1236
1240
  `,exitCode:1};let t=e();if(t.length===0)return{stdout:`No followers connected to the tray.
1237
1241
  `,stderr:``,exitCode:0};let n=[`Available runtimes for teleport:`];for(let e of t){let t=[e.runtimeId];if(e.floatType&&t.push(`[${e.floatType}]`),e.runtime&&t.push(`(${e.runtime})`),e.lastActivity){let n=Math.round((Date.now()-e.lastActivity)/1e3);t.push(`active ${n}s ago`)}n.push(` ${t.join(` `)}`)}return{stdout:n.join(`
1238
1242
  `)+`
1239
- `,stderr:``,exitCode:0}}function gT({state:e,flags:t}){let n=A(t);if(`error`in n)return{stdout:``,stderr:n.error,exitCode:1};mT.info(`Disarming teleport watcher via --off`,{targetId:n.targetId});let r=e.teleportWatchers.get(n.targetId);return r&&(nw(r),e.teleportWatchers.delete(n.targetId)),{stdout:`Teleport watcher disarmed
1240
- `,stderr:``,exitCode:0}}function _T(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 vT(e){return(ew()?.()??[]).find(t=>t.runtimeId===e)?.runtime===`slicc-cherry`?`teleport: runtime ${e} is a cherry host and cannot serve a cookie teleport (no Network.* access)\n`:null}async function yT({browser:e,state:t,flags:n,onTab:r,signal:i}){let a=A(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>
1241
- `,exitCode:1};let c=_T(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
1242
- `,exitCode:1};let u=n.runtime;if(u){let e=vT(u);if(e)return{stdout:``,stderr:e,exitCode:1}}let d=t.teleportWatchers.get(a.targetId);d&&(mT.info(`Disarming existing teleport watcher before re-arming`,{targetId:a.targetId}),nw(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 mT.info(`Arming teleport via explicit subcommand`,{targetId:a.targetId,timeoutSec:l,runtimeSelection:u?`explicit`:`auto`}),mT.debug(`Arming teleport via explicit subcommand details`,{targetId:a.targetId,startPattern:o,returnPattern:s,timeoutSec:l,runtimeId:u??`auto`,leaderUrl:f}),Ln(i,`about to arm a teleport watcher on tab ${a.targetId}`),rw(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 bT=async e=>e.flags.list===`true`?hT():e.flags.off===`true`?gT(e):yT(e),xT={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 ST(e){let t=e.split(`.`).pop()?.toLowerCase()??``;return xT[t]??`application/octet-stream`}function CT(e,t){if(e.length===0)return{error:`upload requires at least one file path
1243
+ `,stderr:``,exitCode:0}}function OT({state:e,flags:t}){let n=A(t);if(`error`in n)return{stdout:``,stderr:n.error,exitCode:1};ET.info(`Disarming teleport watcher via --off`,{targetId:n.targetId});let r=e.teleportWatchers.get(n.targetId);return r&&(mw(r),e.teleportWatchers.delete(n.targetId)),{stdout:`Teleport watcher disarmed
1244
+ `,stderr:``,exitCode:0}}function kT(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 AT(e){return(fw()?.()??[]).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 jT({browser:e,state:t,flags:n,onTab:r,signal:i}){let a=A(n);if(`error`in a)return{stdout:``,stderr:a.error,exitCode:1};let o=n.start||n[`teleport-start`],s=n.return||n[`teleport-return`];if(!o||!s)return{stdout:``,stderr:`teleport requires --start <regex> and --return <regex>
1245
+ `,exitCode:1};let c=kT(o,s);if(`error`in c)return{stdout:``,stderr:c.error,exitCode:1};let l=n.timeout?parseInt(n.timeout,10):300;if(isNaN(l)||l<=0)return{stdout:``,stderr:`--timeout must be a positive number
1246
+ `,exitCode:1};let u=n.runtime;if(u){let e=AT(u);if(e)return{stdout:``,stderr:e,exitCode:1}}let d=t.teleportWatchers.get(a.targetId);d&&(ET.info(`Disarming existing teleport watcher before re-arming`,{targetId:a.targetId}),mw(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 ET.info(`Arming teleport via explicit subcommand`,{targetId:a.targetId,timeoutSec:l,runtimeSelection:u?`explicit`:`auto`}),ET.debug(`Arming teleport via explicit subcommand details`,{targetId:a.targetId,startPattern:o,returnPattern:s,timeoutSec:l,runtimeId:u??`auto`,leaderUrl:f}),Ln(i,`about to arm a teleport watcher on tab ${a.targetId}`),hw(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 MT=async e=>e.flags.list===`true`?DT():e.flags.off===`true`?OT(e):jT(e),NT={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 PT(e){let t=e.split(`.`).pop()?.toLowerCase()??``;return NT[t]??`application/octet-stream`}function FT(e,t){if(e.length===0)return{error:`upload requires at least one file path
1243
1247
  `};if(!qn(e[0]))return{targetRef:null,filePaths:e};let n=e[0],r=e.slice(1);return t?t.refToBackendNodeId.has(n)?r.length===0?{error:`upload requires at least one file path
1244
1248
  `}:{targetRef:n,filePaths:r}:{error:`Unknown ref "${n}"\n`}:{error:`No snapshot available. Run "snapshot" first.
1245
- `}}const wT=new Map([[`teleport`,bT],[`open`,lT],[`tab-new`,lT],[`fetch`,aC],[`goto`,fw],[`navigate`,fw],[`snapshot`,qw],[`find`,Jw],[`frames`,Yw],[`screenshot`,eT],[`click`,dC],[`type`,fC],[`fill`,pC],[`eval`,$S],[`eval-file`,eC],[`press`,mC],[`keydown`,hC],[`keyup`,gC],[`go-back`,pw],[`go-forward`,mw],[`reload`,hw],[`tab-list`,uT],[`tab-close`,dT],[`close`,dT],[`dblclick`,_C],[`hover`,vC],[`select`,yC],[`check`,bC],[`uncheck`,xC],[`drag`,SC],[`resize`,pT],[`dialog-accept`,qS],[`dialog-dismiss`,JS],[`cookie-list`,BS],[`cookie-get`,VS],[`cookie-set`,HS],[`cookie-delete`,US],[`cookie-clear`,WS],[`localstorage-list`,iT.list],[`localstorage-get`,iT.get],[`localstorage-set`,iT.set],[`localstorage-delete`,iT.del],[`localstorage-clear`,iT.clear],[`sessionstorage-list`,aT.list],[`sessionstorage-get`,aT.get],[`sessionstorage-set`,aT.set],[`sessionstorage-delete`,aT.del],[`sessionstorage-clear`,aT.clear],[`record`,kw],[`stop-recording`,Aw],[`tab-select`,fT],[`pdf`,Xw],[`network-state-set`,gw],[`upload`,async({browser:e,fs:t,state:n,positional:r,flags:i,onTab:a})=>{let o=A(i);if(`error`in o)return{stdout:``,stderr:o.error,exitCode:1};let s=n.snapshots.get(o.targetId),c=CT(r,s);if(`error`in c)return{stdout:``,stderr:c.error,exitCode:1};let{targetRef:u,filePaths:d}=c,f=[];for(let e of d){let n=await CC(t,e),r=e.split(`/`).pop()??e;f.push({name:r,type:ST(r),base64:l(n)})}if(u){let e=s.refToBackendNodeId.get(u);await a(o.targetId,async({sessionId:t,transport:n})=>{await n.send(`DOM.enable`,{},t);let{object:r}=await n.send(`DOM.resolveNode`,{backendNodeId:e},t),i=await n.send(`Runtime.callFunctionOn`,{objectId:r.objectId,functionDeclaration:`function(filesData) {
1249
+ `}}const IT=new Map([[`teleport`,MT],[`open`,xT],[`tab-new`,xT],[`fetch`,_C],[`goto`,ww],[`navigate`,ww],[`snapshot`,aT],[`find`,oT],[`frames`,sT],[`screenshot`,fT],[`click`,CC],[`type`,wC],[`fill`,TC],[`eval`,dC],[`eval-file`,fC],[`press`,EC],[`keydown`,DC],[`keyup`,OC],[`go-back`,Tw],[`go-forward`,Ew],[`reload`,Dw],[`tab-list`,ST],[`tab-close`,CT],[`close`,CT],[`dblclick`,kC],[`hover`,AC],[`select`,jC],[`check`,MC],[`uncheck`,NC],[`drag`,PC],[`resize`,TT],[`dialog-accept`,aC],[`dialog-dismiss`,oC],[`cookie-list`,QS],[`cookie-get`,$S],[`cookie-set`,eC],[`cookie-delete`,tC],[`cookie-clear`,nC],[`localstorage-list`,gT.list],[`localstorage-get`,gT.get],[`localstorage-set`,gT.set],[`localstorage-delete`,gT.del],[`localstorage-clear`,gT.clear],[`sessionstorage-list`,_T.list],[`sessionstorage-get`,_T.get],[`sessionstorage-set`,_T.set],[`sessionstorage-delete`,_T.del],[`sessionstorage-clear`,_T.clear],[`record`,Vw],[`stop-recording`,Hw],[`tab-select`,wT],[`pdf`,cT],[`network-state-set`,Ow],[`upload`,async({browser:e,fs:t,state:n,positional:r,flags:i,onTab:a})=>{let o=A(i);if(`error`in o)return{stdout:``,stderr:o.error,exitCode:1};let s=n.snapshots.get(o.targetId),c=FT(r,s);if(`error`in c)return{stdout:``,stderr:c.error,exitCode:1};let{targetRef:u,filePaths:d}=c,f=[];for(let e of d){let n=await FC(t,e),r=e.split(`/`).pop()??e;f.push({name:r,type:PT(r),base64:l(n)})}if(u){let e=s.refToBackendNodeId.get(u);await a(o.targetId,async({sessionId:t,transport:n})=>{await n.send(`DOM.enable`,{},t);let{object:r}=await n.send(`DOM.resolveNode`,{backendNodeId:e},t),i=await n.send(`Runtime.callFunctionOn`,{objectId:r.objectId,functionDeclaration:`function(filesData) {
1246
1250
  const el = this;
1247
1251
  if (el.tagName !== 'INPUT' || el.type !== 'file') {
1248
1252
  throw new Error('Element ' + el.tagName + ' is not a file input');
@@ -1273,12 +1277,12 @@ Options:
1273
1277
  el.dispatchEvent(new Event('change', { bubbles: true }));
1274
1278
  el.dispatchEvent(new Event('input', { bubbles: true }));
1275
1279
  return el.files.length;
1276
- })()`,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`,tT],[`state-load`,nT],[`console`,FS],[`requests`,Cw],[`request`,ww],[`request-headers`,Tw],[`request-body`,Ew],[`response-headers`,Dw],[`response-body`,Ow],[`mousemove`,DC],[`mousedown`,OC],[`mouseup`,kC],[`mousewheel`,AC],[`drop`,jC],[`route`,Iw],[`route-list`,Lw],[`unroute`,Rw],[`generate-locator`,GS],[`highlight`,KS]]);function TT(){let e=(Un.string??[]).map(e=>`--${e}`),t=new Set(Un.boolean??[]);for(let[e,n]of Object.entries(Un.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 ET(e){return e.map(e=>e===`--no-iframes`||e.startsWith(`--no-iframes=`)?e.replace(`--no-iframes`,`--_noiframes`):e)}function DT(e){return{...e,bool:[...e.bool??[],`--_noiframes`],value:[...e.value??[],`--_noiframes`]}}const OT=2e3;function kT(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 AT(e,t,n,r){if(!t||typeof e.getTabLockStats!=`function`)return r;let i=e.getTabLockStats(),a=i.totalWaitMs-t.totalWaitMs;if(a<OT)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>=OT?`${(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.
1277
- `;return{...r,stderr:r.stderr+c}}async function jT(e,t,n){let r=n instanceof Error?n.message:String(n);return{stdout:``,stderr:`Error: ${(t.tab?await Wn(e,t.tab,n):null)??r}\n`,exitCode:1}}function MT(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 NT(e,t,n){let r=wT.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?MT(e,t,void 0):a}catch(r){return i?.aborted?MT(e,t,r):await jT(n.browser,n.flags,r)}}async function PT(e,t,n,r){let i=S(ET(n),DT(r));if(`error`in i)return{answer:{stdout:``,stderr:`${e} ${t}: ${i.error}\n`,exitCode:1}};let a;try{({flags:a}=Hn(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-Byyp6Pcv.js`);return{answer:{stdout:n(e,t),stderr:``,exitCode:0}}}let o=null;try{let{validateSubcommandArgs:r}=await import(`./validate-args-BcxRh84E.js`);o=r(e,t,n,i.positionals)}catch{o=null}return o?{answer:{stdout:``,stderr:o,exitCode:1}}:{positional:i.positionals,flags:a}}function FT(e,t,n){let r=t?zn(t,n):null,i=TT();return x(e,async(a,o)=>{if(a.length===0||a[0]===`help`||a[0]===`--help`||a[0]===`-h`){let{formatHelp:t}=await import(`./help-Byyp6Pcv.js`);return{stdout:t(e)+`
1278
- `,stderr:``,exitCode:0}}let s=a[0],c=a.slice(1),l=await PT(e,s,c,i);if(`answer`in l)return l.answer;let{positional:u,flags:d}=l;if(!t||!r)return{stdout:``,stderr:`${e}: browser APIs are unavailable in this environment\n`,exitCode:1};let f=d.tab??null,p=kT(t,f),m=await NT(e,s,{browser:t,fs:n,state:r,positional:u,flags:d,scratchDir:Li(o.env),onTab:(e,n)=>t.withTab(e,n,{signal:o.signal}),signal:o.signal}),h=d.tab??null,g=null;Xn.has(s)&&m.exitCode===0&&h&&(g=await Bw(t,n,h,r));try{await Vw(n,r,{command:s,args:c,result:m,snapshotPath:g,targetId:h})}catch{}return AT(t,p,f,m)})}const IT=new Map([[`File operations`,[`ls`,`cat`,`head`,`tail`,`wc`,`touch`,`mkdir`,`rm`,`cp`,`mv`,`ln`,`chmod`,`stat`,`readlink`,`file`,`rmdir`,`rsync`]],[`Text processing`,[`grep`,`sed`,`awk`,`sort`,`uniq`,`cut`,`tr`,`tee`,`diff`,`patch`,`column`,`comm`,`egrep`,`fgrep`,`expand`,`unexpand`,`fold`,`join`,`nl`,`od`,`paste`,`rev`,`split`,`strings`,`tac`]],[`Search`,[`find`,`rg`]],[`Navigation & paths`,[`pwd`,`basename`,`dirname`,`tree`,`du`,`cd`]],[`Archives`,[`zip`,`unzip`,`pdftk`,`pdf`,`gunzip`,`gzip`,`zcat`]],[`Media`,[`convert`,`magick`,`pdftoppm`,`pdftocairo`,`pdftotext`,`ffmpeg`,`ffprobe`,`screencapture`]],[`Audio`,[`say`,`hear`,`afplay`,`chime`]],[`Environment & shell`,`echo.printf.env.printenv.export.alias.unalias.history.clear.true.false.bash.sh.commands.which.uname.man.host.oauth-token.secret.nuke.models.local-llm.cost.hostname.whoami.id.help.sleep.time.timeout.oauth-domain`.split(`.`)],[`Data processing`,[`xargs`,`jq`,`base64`,`date`,`expr`,`seq`]],[`Hashes`,[`md5sum`,`sha1sum`,`sha256sum`]],[`Network`,[`curl`,`curlwright`,`wget`,`dig`,`websocat`,`html-to-markdown`]],[`Version control`,[`git`]],[`Languages`,[`node`,`jsh`,`python`,`python3`,`sqlite3`]],[`Virtualization`,[`v86`,`computer`]],[`Build tools`,[`tsc`,`tst`,`esbuild`,`biome`]],[`Packages`,[`ipk`,`hf`,`npm`,`i`,`ipx`,`npx`]],[`Skills`,[`skill`,`upskill`]],[`Browser & UI`,[`serve`,`open`,`imgcat`,...Jn,`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)`,[...Ag]]]);function LT(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:
1279
- `);let a=[];for(let[e,t]of IT){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(`
1280
+ })()`,r=await t.send(`Runtime.evaluate`,{expression:n,returnByValue:!0,awaitPromise:!1},e);if(r.exceptionDetails){let e=r.exceptionDetails.exception?.description??r.exceptionDetails.text??`File upload failed`;throw Error(e)}});let p=d.map(e=>e.split(`/`).pop()??e).join(`, `);return{stdout:`Uploaded ${d.length} file(s): ${p}\n`,stderr:``,exitCode:0}}],[`state-save`,pT],[`state-load`,mT],[`console`,qS],[`requests`,Fw],[`request`,Iw],[`request-headers`,Lw],[`request-body`,Rw],[`response-headers`,zw],[`response-body`,Bw],[`mousemove`,zC],[`mousedown`,BC],[`mouseup`,VC],[`mousewheel`,HC],[`drop`,UC],[`route`,Jw],[`route-list`,Yw],[`unroute`,Xw],[`generate-locator`,rC],[`highlight`,iC]]);function LT(){let e=(Un.string??[]).map(e=>`--${e}`),t=new Set(Un.boolean??[]);for(let[e,n]of Object.entries(Un.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 RT(e){return e.map(e=>e===`--no-iframes`||e.startsWith(`--no-iframes=`)?e.replace(`--no-iframes`,`--_noiframes`):e)}function zT(e){return{...e,bool:[...e.bool??[],`--_noiframes`],value:[...e.value??[],`--_noiframes`]}}const BT=2e3;function VT(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 HT(e,t,n,r){if(!t||typeof e.getTabLockStats!=`function`)return r;let i=e.getTabLockStats(),a=i.totalWaitMs-t.totalWaitMs;if(a<BT)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>=BT?`${(s/1e3).toFixed(1)}s of it waiting on this tab (--tab=${n})`:`all of it waiting on the bridge, not on this tab`} (queue depth ${i.queueDepth}). Commands on the same tab serialize; commands on different tabs run in parallel — stagger callers on THIS tab, or give each caller its own tab.
1281
+ `;return{...r,stderr:r.stderr+c}}async function UT(e,t,n){let r=n instanceof Error?n.message:String(n);return{stdout:``,stderr:`Error: ${(t.tab?await Wn(e,t.tab,n):null)??r}\n`,exitCode:1}}function WT(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 GT(e,t,n){let r=IT.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?WT(e,t,void 0):a}catch(r){return i?.aborted?WT(e,t,r):await UT(n.browser,n.flags,r)}}async function KT(e,t,n,r){let i=S(RT(n),zT(r));if(`error`in i)return{answer:{stdout:``,stderr:`${e} ${t}: ${i.error}\n`,exitCode:1}};let a;try{({flags:a}=Hn(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-B-ws2y3j.js`);return{answer:{stdout:n(e,t),stderr:``,exitCode:0}}}let o=null;try{let{validateSubcommandArgs:r}=await import(`./validate-args-BcxRh84E.js`);o=r(e,t,n,i.positionals)}catch{o=null}return o?{answer:{stdout:``,stderr:o,exitCode:1}}:{positional:i.positionals,flags:a}}function qT(e,t,n){let r=t?zn(t,n):null,i=LT();return x(e,async(a,o)=>{if(a.length===0||a[0]===`help`||a[0]===`--help`||a[0]===`-h`){let{formatHelp:t}=await import(`./help-B-ws2y3j.js`);return{stdout:t(e)+`
1282
+ `,stderr:``,exitCode:0}}let s=a[0],c=a.slice(1),l=await KT(e,s,c,i);if(`answer`in l)return l.answer;let{positional:u,flags:d}=l;if(!t||!r)return{stdout:``,stderr:`${e}: browser APIs are unavailable in this environment\n`,exitCode:1};let f=d.tab??null,p=VT(t,f),m=await GT(e,s,{browser:t,fs:n,state:r,positional:u,flags:d,scratchDir:Li(o.env),onTab:(e,n)=>t.withTab(e,n,{signal:o.signal}),signal:o.signal}),h=d.tab??null,g=null;Xn.has(s)&&m.exitCode===0&&h&&(g=await Qw(t,n,h,r));try{await $w(n,r,{command:s,args:c,result:m,snapshotPath:g,targetId:h})}catch{}return HT(t,p,f,m)})}const JT=new Map([[`File operations`,[`ls`,`cat`,`head`,`tail`,`wc`,`touch`,`mkdir`,`rm`,`cp`,`mv`,`ln`,`chmod`,`stat`,`readlink`,`file`,`rmdir`,`rsync`]],[`Text processing`,[`grep`,`sed`,`awk`,`sort`,`uniq`,`cut`,`tr`,`tee`,`diff`,`patch`,`column`,`comm`,`egrep`,`fgrep`,`expand`,`unexpand`,`fold`,`join`,`nl`,`od`,`paste`,`rev`,`split`,`strings`,`tac`]],[`Search`,[`find`,`rg`]],[`Navigation & paths`,[`pwd`,`basename`,`dirname`,`tree`,`du`,`cd`]],[`Archives`,[`zip`,`unzip`,`pdftk`,`pdf`,`gunzip`,`gzip`,`zcat`]],[`Media`,[`convert`,`magick`,`pdftoppm`,`pdftocairo`,`pdftotext`,`ffmpeg`,`ffprobe`,`screencapture`]],[`Audio`,[`say`,`hear`,`afplay`,`chime`]],[`Environment & shell`,`echo.printf.env.printenv.export.alias.unalias.history.clear.true.false.bash.sh.commands.which.uname.man.host.oauth-token.secret.nuke.models.local-llm.cost.hostname.whoami.id.help.sleep.time.timeout.oauth-domain`.split(`.`)],[`Data processing`,[`xargs`,`jq`,`base64`,`date`,`expr`,`seq`]],[`Hashes`,[`md5sum`,`sha1sum`,`sha256sum`]],[`Network`,[`curl`,`curlwright`,`wget`,`dig`,`websocat`,`html-to-markdown`]],[`Version control`,[`git`]],[`Languages`,[`node`,`jsh`,`python`,`python3`,`sqlite3`]],[`Virtualization`,[`v86`,`computer`]],[`Build tools`,[`tsc`,`tst`,`esbuild`,`biome`]],[`Packages`,[`ipk`,`hf`,`npm`,`i`,`ipx`,`npx`]],[`Skills`,[`skill`,`upskill`]],[`Browser & UI`,[`serve`,`open`,`imgcat`,...Jn,`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)`,[...Hg]]]);function YT(e,t=[],n=[]){let r=[],i=new Set(e);for(let e of t)i.delete(e);for(let e of n)i.delete(e);r.push(`Available commands:
1283
+ `);let a=[];for(let[e,t]of JT){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(`
1280
1284
  `)+`
1281
- `}function RT(e={}){return x(`commands`,async(t,n)=>{if(t.includes(`--help`)||t.includes(`-h`))return{stdout:`commands - display available commands
1285
+ `}function XT(e={}){return x(`commands`,async(t,n)=>{if(t.includes(`--help`)||t.includes(`-h`))return{stdout:`commands - display available commands
1282
1286
 
1283
1287
  Usage: commands [command]
1284
1288
 
@@ -1289,7 +1293,7 @@ If a command name is provided, shows help for that command.
1289
1293
  Otherwise, lists all available commands.
1290
1294
 
1291
1295
  Note: This is an enhanced version of 'help' that shows all custom commands.
1292
- `,stderr:``,exitCode:0};if(t.length>0&&n.exec){let e=t[0];return n.exec(`${e} --help`,{cwd:n.cwd})}return{stdout:LT(n.getRegisteredCommands?.()??[],await e.getJshCommands?.()??[],await e.getWorkflowCommands?.()??[]),stderr:``,exitCode:0}})}function zT(e){return{stdout:`hf - download model repos from the Hugging Face Hub into the VFS
1296
+ `,stderr:``,exitCode:0};if(t.length>0&&n.exec){let e=t[0];return n.exec(`${e} --help`,{cwd:n.cwd})}return{stdout:YT(n.getRegisteredCommands?.()??[],await e.getJshCommands?.()??[],await e.getWorkflowCommands?.()??[]),stderr:``,exitCode:0}})}function ZT(e){return{stdout:`hf - download model repos from the Hugging Face Hub into the VFS
1293
1297
 
1294
1298
  Usage:
1295
1299
  hf download <repo> [files...] [--to <dir>] [--revision <rev>] [--force]
@@ -1311,8 +1315,8 @@ Notes:
1311
1315
  unless --force is passed.
1312
1316
  - Weights are read by the speech engines via the preview SW from the
1313
1317
  target directory; transformers expects <localModelPath>/<repo>/.
1314
- `,stderr:``,exitCode:e}}function BT(e){return{stdout:``,stderr:`hf: ${e}\n`,exitCode:1}}const VT=/^[A-Za-z0-9_.-]+\/[A-Za-z0-9_.-]+$/;function HT(e){let t=null,n=`main`,r=!1,i=[],a=0;for(;a<e.length;){let o=e[a];if(o===`--to`){let n=e[a+1];if(typeof n!=`string`)return{error:`--to requires a value`};t=n,a+=2;continue}if(o===`--revision`||o===`--rev`){let t=e[a+1];if(typeof t!=`string`)return{error:`${o} requires a value`};n=t,a+=2;continue}if(o===`--force`||o===`-f`){r=!0,a+=1;continue}if(o.startsWith(`--`))return{error:`unknown option: ${o}`};i.push(o),a+=1}if(i.length===0)return{error:`download requires <repo>`};let o=i[0];return VT.test(o)?{repo:o,files:i.slice(1),to:t,revision:n,force:r}:{error:`invalid repo '${o}' — expected <owner>/<name>`}}function UT(e){return e<1024?`${e} B`:e<1048576?`${(e/1024).toFixed(1)} KB`:`${(e/1048576).toFixed(1)} MB`}async function WT(e,t,n){let r=HT(e);if(`error`in r)return BT(r.error);let i=Ki(r.repo,r.to,t.cwd),a=``;try{let e=await Vi({fetch:n,fs:t.fs,repo:r.repo,targetDir:i,files:r.files,revision:r.revision,force:r.force,endpoint:t.env.get(`HF_ENDPOINT`),progress:{onListed:({files:e})=>{a+=`hf: ${e.length} file(s) listed in ${r.repo}@${r.revision}\n`},onFile:e=>{a+=e.status===`downloaded`?`hf: downloaded ${e.file} (${UT(e.bytes)})\n`:`hf: skipped ${e.file} (already at ${i})\n`}}}),o=`hf: ${e.downloaded} downloaded, ${e.skipped} skipped, ${UT(e.totalBytes)} total into ${i}\n`;return{stdout:``,stderr:a+o,exitCode:0}}catch(e){return e instanceof Bi?(a+=`hf: failed ${e.file}: ${e.message}\n`,{stdout:``,stderr:a,exitCode:1}):BT(e instanceof Error?e.message:String(e))}}function GT(e){return{name:`hf`,async execute(t,n){if(t.length===0||C(t,{valueFlags:[`--to`,`--revision`,`--rev`]}))return zT(+(t.length===0));let r=t[0];return r===`download`?WT(t.slice(1),n,e.fetch):BT(`unknown subcommand: ${r}`)}}}const KT=new Set([`--vid`,`--pid`,`--usage-page`,`--usage`,`--__resolved`,`--timeout`]);function qT(e){return Pn(e,KT)}function JT(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 YT(e){let t={};return e.has(`--vid`)&&(t.vendorId=JT(e.get(`--vid`),`vid`)),e.has(`--pid`)&&(t.productId=JT(e.get(`--pid`),`pid`)),e.has(`--usage-page`)&&(t.usagePage=JT(e.get(`--usage-page`),`usage-page`)),e.has(`--usage`)&&(t.usage=JT(e.get(`--usage`),`usage`)),Object.keys(t).length>0?[t]:[]}function XT(e){let t=Qr(e.stdin),n=new Uint8Array(t.length);for(let e=0;e<t.length;e++)n[e]=t.charCodeAt(e)&255;return n}function ZT(e){return Array.from(e,e=>e.toString(16).padStart(2,`0`)).join(` `)}function QT(e){return e.toString(16).padStart(2,`0`)}function $T(e){return`0x${e.toString(16).padStart(4,`0`)}`}function eE(e){let t=e.productName||`(unknown)`,n=e.opened?` [open]`:``,r=e.usagePage===void 0?``:`\t${$T(e.usagePage)}:${$T(e.usage??0)}`;return`${e.handle}\t${$T(e.vendorId)}:${$T(e.productId)}${r}\t${t}${n}`}function tE(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 nE(e){return`${e.map(eE).join(`
1315
- `)}\n`}function rE(e){return`${QT(e.reportId)} ${ZT(e.bytes)}`.trimEnd()}function iE(e){return{stdout:e,stderr:``,exitCode:0}}function H(e){return{stdout:``,stderr:`hid: ${e}\n`,exitCode:1}}const aE=`hid - access HID devices via WebHID
1318
+ `,stderr:``,exitCode:e}}function QT(e){return{stdout:``,stderr:`hf: ${e}\n`,exitCode:1}}const $T=/^[A-Za-z0-9_.-]+\/[A-Za-z0-9_.-]+$/;function eE(e){let t=null,n=`main`,r=!1,i=[],a=0;for(;a<e.length;){let o=e[a];if(o===`--to`){let n=e[a+1];if(typeof n!=`string`)return{error:`--to requires a value`};t=n,a+=2;continue}if(o===`--revision`||o===`--rev`){let t=e[a+1];if(typeof t!=`string`)return{error:`${o} requires a value`};n=t,a+=2;continue}if(o===`--force`||o===`-f`){r=!0,a+=1;continue}if(o.startsWith(`--`))return{error:`unknown option: ${o}`};i.push(o),a+=1}if(i.length===0)return{error:`download requires <repo>`};let o=i[0];return $T.test(o)?{repo:o,files:i.slice(1),to:t,revision:n,force:r}:{error:`invalid repo '${o}' — expected <owner>/<name>`}}function tE(e){return e<1024?`${e} B`:e<1048576?`${(e/1024).toFixed(1)} KB`:`${(e/1048576).toFixed(1)} MB`}async function nE(e,t,n){let r=eE(e);if(`error`in r)return QT(r.error);let i=Ki(r.repo,r.to,t.cwd),a=``;try{let e=await Vi({fetch:n,fs:t.fs,repo:r.repo,targetDir:i,files:r.files,revision:r.revision,force:r.force,endpoint:t.env.get(`HF_ENDPOINT`),progress:{onListed:({files:e})=>{a+=`hf: ${e.length} file(s) listed in ${r.repo}@${r.revision}\n`},onFile:e=>{a+=e.status===`downloaded`?`hf: downloaded ${e.file} (${tE(e.bytes)})\n`:`hf: skipped ${e.file} (already at ${i})\n`}}}),o=`hf: ${e.downloaded} downloaded, ${e.skipped} skipped, ${tE(e.totalBytes)} total into ${i}\n`;return{stdout:``,stderr:a+o,exitCode:0}}catch(e){return e instanceof Bi?(a+=`hf: failed ${e.file}: ${e.message}\n`,{stdout:``,stderr:a,exitCode:1}):QT(e instanceof Error?e.message:String(e))}}function rE(e){return{name:`hf`,async execute(t,n){if(t.length===0||C(t,{valueFlags:[`--to`,`--revision`,`--rev`]}))return ZT(+(t.length===0));let r=t[0];return r===`download`?nE(t.slice(1),n,e.fetch):QT(`unknown subcommand: ${r}`)}}}const iE=new Set([`--vid`,`--pid`,`--usage-page`,`--usage`,`--__resolved`,`--timeout`]);function aE(e){return Pn(e,iE)}function oE(e,t){let n=/^0x/i.test(e)?parseInt(e,16):parseInt(e,10);if(!Number.isFinite(n)||Number.isNaN(n))throw Error(`invalid ${t}: '${e}'`);return n}function sE(e){let t={};return e.has(`--vid`)&&(t.vendorId=oE(e.get(`--vid`),`vid`)),e.has(`--pid`)&&(t.productId=oE(e.get(`--pid`),`pid`)),e.has(`--usage-page`)&&(t.usagePage=oE(e.get(`--usage-page`),`usage-page`)),e.has(`--usage`)&&(t.usage=oE(e.get(`--usage`),`usage`)),Object.keys(t).length>0?[t]:[]}function cE(e){let t=Qr(e.stdin),n=new Uint8Array(t.length);for(let e=0;e<t.length;e++)n[e]=t.charCodeAt(e)&255;return n}function lE(e){return Array.from(e,e=>e.toString(16).padStart(2,`0`)).join(` `)}function uE(e){return e.toString(16).padStart(2,`0`)}function dE(e){return`0x${e.toString(16).padStart(4,`0`)}`}function fE(e){let t=e.productName||`(unknown)`,n=e.opened?` [open]`:``,r=e.usagePage===void 0?``:`\t${dE(e.usagePage)}:${dE(e.usage??0)}`;return`${e.handle}\t${dE(e.vendorId)}:${dE(e.productId)}${r}\t${t}${n}`}function pE(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 mE(e){return`${e.map(fE).join(`
1319
+ `)}\n`}function hE(e){return`${uE(e.reportId)} ${lE(e.bytes)}`.trimEnd()}function gE(e){return{stdout:e,stderr:``,exitCode:0}}function H(e){return{stdout:``,stderr:`hid: ${e}\n`,exitCode:1}}const _E=`hid - access HID devices via WebHID
1316
1320
 
1317
1321
  Usage: hid <subcommand> [options]
1318
1322
 
@@ -1336,10 +1340,10 @@ Options:
1336
1340
  -h, --help
1337
1341
 
1338
1342
  Report payloads are capped at ${Mt} bytes (4 MiB).
1339
- `;function oE(e,t){if(t){let t=``;for(let n=0;n<e.length;n++)t+=String.fromCharCode(e[n]);return iE(t)}return iE(e.length?`${ZT(e)}\n`:``)}function sE(e){return!e||e.aborted?Promise.resolve():new Promise(t=>{e.addEventListener(`abort`,()=>t(),{once:!0})})}async function cE(e){let t=await e.list();return t.length===0?iE(`no granted HID devices
1340
- `):iE(`${t.map(eE).join(`
1341
- `)}\n`)}async function lE(e,t){let n=e.get(`--__resolved`),r=YT(e),i=r[0];if(n){let e=n.split(`,`).filter(e=>e.length>0);return e.length===0?H(`request: missing resolved handle`):iE(nE(tE(await Promise.all(e.map(e=>t.info(e))),i)))}let a=Se();return a?uE(r,i,a,t):iE(nE(tE(await t.request(r),i)))}async function uE(e,t,n,r){let i=await px(`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=At();if(!t)return H(`request: WebHID unavailable for device re-acquire`);let n=await t.getDevices(),r=kt(),s=n.filter(t=>t.vendorId===e.vendorId&&t.productId===e.productId);if(s.length===0)return H(`request: granted device could not be re-acquired`);for(let e of s)r.register(e);a=e.vendorId,o=e.productId}let s=(await r.list()).filter(e=>e.vendorId===a&&e.productId===o),c=tE(s.length>0?s:[],t);return c.length===0?H(`request: granted device could not be re-acquired`):iE(nE(c))}async function dE(e,t,n){let r=t[1];return r?(e===`open`?await n.open(r):await n.close(r),iE(``)):H(`${e}: handle required`)}async function fE(e,t,n,r){let[,i,a]=t;if(!i||a===void 0)return H(`${e}: handle and report-id required`);let o=JT(a,`report-id`),s=XT(n);return s.length>4194304?H(`${e} payload exceeds 4 MiB limit`):(e===`send`?await r.sendReport(i,o,s):await r.sendFeatureReport(i,o,s),iE(``))}async function pE(e,t,n){let[,r,i]=e;return!r||i===void 0?H(`feature-get: handle and report-id required`):oE((await t.receiveFeatureReport(r,JT(i,`report-id`))).bytes,n)}async function mE(e,t,n){let r=e[1];if(!r)return H(`watch: handle required`);let i=[],a=await n.subscribeInputReports(r,e=>{i.push(rE(e))});try{await sE(t.signal)}finally{await a()}return iE(i.length?`${i.join(`
1342
- `)}\n`:``)}async function hE(e,t,n,r,i){let[,a,o]=e;if(!a||o===void 0)return H(`query: handle and report-id required`);let s=JT(o,`report-id`),c=XT(t);if(c.length>4194304)return H(`query payload exceeds 4 MiB limit`);let l=n.has(`--timeout`)?JT(n.get(`--timeout`),`timeout`):1e3,u=()=>{},d=new Promise(e=>{u=e}),f=await r.subscribeInputReports(a,e=>{u(e)}),p;try{await r.sendReport(a,s,c);let e=new Promise(e=>{p=setTimeout(()=>e(`timeout`),l)}),t=await Promise.race([d,e]);return t===`timeout`?H(`query: no input report within ${l}ms`):i?oE(t.bytes,!0):iE(`${rE(t)}\n`)}finally{p!==void 0&&clearTimeout(p),await f()}}async function gE(e,t,n){let{positionals:r,flags:i,bools:a}=qT(e),o=r[0],s=a.has(`--raw`);switch(o){case`list`:return cE(n);case`request`:return lE(i,n);case`open`:case`close`:return dE(o,r,n);case`send`:case`feature-send`:return fE(o,r,t,n);case`feature-get`:return pE(r,n,s);case`watch`:return mE(r,t,n);case`query`:return hE(r,t,i,n,s);default:return H(`unknown subcommand '${o??``}'. Try 'hid --help'.`)}}function _E(){return x(`hid`,async(e,t)=>{if(e.length===0||e.includes(`--help`)||e.includes(`-h`))return iE(aE);let n=Ft(s(),o());if(!n)return H(`WebHID is unavailable in this environment`);try{return await gE(e,t,n)}catch(e){let t=e instanceof Error?e.message:String(e);return/cancelled|NotFoundError|No device selected/i.test(t)?H(`user cancelled or no device selected`):H(t)}})}const vE=1e3,yE=`usage: id [-u|-g|-G] [-n] [-r] [USER]`,bE=`${yE}
1343
+ `;function vE(e,t){if(t){let t=``;for(let n=0;n<e.length;n++)t+=String.fromCharCode(e[n]);return gE(t)}return gE(e.length?`${lE(e)}\n`:``)}function yE(e){return!e||e.aborted?Promise.resolve():new Promise(t=>{e.addEventListener(`abort`,()=>t(),{once:!0})})}async function bE(e){let t=await e.list();return t.length===0?gE(`no granted HID devices
1344
+ `):gE(`${t.map(fE).join(`
1345
+ `)}\n`)}async function xE(e,t){let n=e.get(`--__resolved`),r=sE(e),i=r[0];if(n){let e=n.split(`,`).filter(e=>e.length>0);return e.length===0?H(`request: missing resolved handle`):gE(mE(pE(await Promise.all(e.map(e=>t.info(e))),i)))}let a=Se();return a?SE(r,i,a,t):gE(mE(pE(await t.request(r),i)))}async function SE(e,t,n,r){let i=await Tx(`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=At();if(!t)return H(`request: WebHID unavailable for device re-acquire`);let n=await t.getDevices(),r=kt(),s=n.filter(t=>t.vendorId===e.vendorId&&t.productId===e.productId);if(s.length===0)return H(`request: granted device could not be re-acquired`);for(let e of s)r.register(e);a=e.vendorId,o=e.productId}let s=(await r.list()).filter(e=>e.vendorId===a&&e.productId===o),c=pE(s.length>0?s:[],t);return c.length===0?H(`request: granted device could not be re-acquired`):gE(mE(c))}async function CE(e,t,n){let r=t[1];return r?(e===`open`?await n.open(r):await n.close(r),gE(``)):H(`${e}: handle required`)}async function wE(e,t,n,r){let[,i,a]=t;if(!i||a===void 0)return H(`${e}: handle and report-id required`);let o=oE(a,`report-id`),s=cE(n);return s.length>4194304?H(`${e} payload exceeds 4 MiB limit`):(e===`send`?await r.sendReport(i,o,s):await r.sendFeatureReport(i,o,s),gE(``))}async function TE(e,t,n){let[,r,i]=e;return!r||i===void 0?H(`feature-get: handle and report-id required`):vE((await t.receiveFeatureReport(r,oE(i,`report-id`))).bytes,n)}async function EE(e,t,n){let r=e[1];if(!r)return H(`watch: handle required`);let i=[],a=await n.subscribeInputReports(r,e=>{i.push(hE(e))});try{await yE(t.signal)}finally{await a()}return gE(i.length?`${i.join(`
1346
+ `)}\n`:``)}async function DE(e,t,n,r,i){let[,a,o]=e;if(!a||o===void 0)return H(`query: handle and report-id required`);let s=oE(o,`report-id`),c=cE(t);if(c.length>4194304)return H(`query payload exceeds 4 MiB limit`);let l=n.has(`--timeout`)?oE(n.get(`--timeout`),`timeout`):1e3,u=()=>{},d=new Promise(e=>{u=e}),f=await r.subscribeInputReports(a,e=>{u(e)}),p;try{await r.sendReport(a,s,c);let e=new Promise(e=>{p=setTimeout(()=>e(`timeout`),l)}),t=await Promise.race([d,e]);return t===`timeout`?H(`query: no input report within ${l}ms`):i?vE(t.bytes,!0):gE(`${hE(t)}\n`)}finally{p!==void 0&&clearTimeout(p),await f()}}async function OE(e,t,n){let{positionals:r,flags:i,bools:a}=aE(e),o=r[0],s=a.has(`--raw`);switch(o){case`list`:return bE(n);case`request`:return xE(i,n);case`open`:case`close`:return CE(o,r,n);case`send`:case`feature-send`:return wE(o,r,t,n);case`feature-get`:return TE(r,n,s);case`watch`:return EE(r,t,n);case`query`:return DE(r,t,i,n,s);default:return H(`unknown subcommand '${o??``}'. Try 'hid --help'.`)}}function kE(){return x(`hid`,async(e,t)=>{if(e.length===0||e.includes(`--help`)||e.includes(`-h`))return gE(_E);let n=Ft(s(),o());if(!n)return H(`WebHID is unavailable in this environment`);try{return await OE(e,t,n)}catch(e){let t=e instanceof Error?e.message:String(e);return/cancelled|NotFoundError|No device selected/i.test(t)?H(`user cancelled or no device selected`):H(t)}})}const AE=1e3,jE=`usage: id [-u|-g|-G] [-n] [-r] [USER]`,ME=`${jE}
1343
1347
 
1344
1348
  Print the user and group identity of this SLICC runtime.
1345
1349
 
@@ -1354,23 +1358,23 @@ Options:
1354
1358
  --version Print the SLICC build.
1355
1359
 
1356
1360
  Identity comes from the home directory, which is where the rest of the shell
1357
- gets it too. A cone is the human user (uid ${vE}, one per runtime, since every
1361
+ gets it too. A cone is the human user (uid ${AE}, one per runtime, since every
1358
1362
  cone shares one home); a scoop is a service identity whose uid is derived from
1359
1363
  its folder name, so it is stable across reloads and distinct per scoop.
1360
1364
  Every user is in a user-private group of the same name, plus the role group
1361
1365
  \`cone\` (10) or \`scoop\` (20).
1362
- `,xE=`/scoops/`;function SE(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 CE(e,t){return{name:e,uid:t===`cone`?vE:SE(e),role:t}}function wE(e){return[{gid:e.uid,name:e.name},e.role===`cone`?{gid:10,name:`cone`}:{gid:20,name:`scoop`}]}function TE(e,t){return`${e}(${t})`}function EE(e){let t=wE(e),n=t[0];return`uid=${TE(e.uid,e.name)} gid=${TE(n.gid,n.name)} groups=${t.map(e=>TE(e.gid,e.name)).join(`,`)}\n`}async function DE(e){let t=e.env.get(`HOME`)??``,n=t.startsWith(xE)?`scoop`:`cone`,r=e.env.get(`USER`)||OE(t,n);return r?CE(r,n):CE(ip(await rp(kE(e.fs))),`cone`)}function OE(e,t){return e===``?``:t===`cone`?ip(e):e.slice(8).split(`/`)[0]??``}function kE(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 AE(e,t){return await e.fs.exists(`/home/${t}`).catch(()=>!1)?CE(t,`cone`):await e.fs.exists(`${xE}${t}`).catch(()=>!1)?CE(t,`scoop`):null}function jE(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=NE[r];if(e){e(t);continue}if(r.length>1&&r.startsWith(`-`)){for(let e of r.slice(1)){let n=ME[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 ME={u:e=>{e.select=`user`},g:e=>{e.select=`group`},G:e=>{e.select=`groups`},n:e=>{e.names=!0},r:()=>void 0},NE={"--user":ME.u,"--group":ME.g,"--groups":ME.G,"--name":ME.n,"--real":ME.r};function PE(e,t){let n=wE(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 EE(e)}}function FE(){return x(`id`,async(e,t)=>{let n=jE(e);if(`error`in n)return{stdout:``,stderr:`id: ${n.error}\n${yE}\n`,exitCode:1};if(n.mode===`help`)return LE(bE);if(n.mode===`version`)return LE(`id (SLICC) ${qe().version}\n`);let r=n.operand===void 0?await DE(t):await AE(t,n.operand);return r?LE(PE(r,n)):{stdout:``,stderr:`id: '${n.operand}': no such user\n`,exitCode:1}})}function IE(){return x(`whoami`,async(e,t)=>LE(`${(await DE(t)).name}\n`))}function LE(e){return{stdout:e,stderr:``,exitCode:0}}function RE(){return{stdout:`imgcat - preview image and video files in the preview tab
1366
+ `,NE=`/scoops/`;function PE(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 FE(e,t){return{name:e,uid:t===`cone`?AE:PE(e),role:t}}function IE(e){return[{gid:e.uid,name:e.name},e.role===`cone`?{gid:10,name:`cone`}:{gid:20,name:`scoop`}]}function LE(e,t){return`${e}(${t})`}function RE(e){let t=IE(e),n=t[0];return`uid=${LE(e.uid,e.name)} gid=${LE(n.gid,n.name)} groups=${t.map(e=>LE(e.gid,e.name)).join(`,`)}\n`}async function zE(e){let t=e.env.get(`HOME`)??``,n=t.startsWith(NE)?`scoop`:`cone`,r=e.env.get(`USER`)||BE(t,n);return r?FE(r,n):FE(ip(await rp(VE(e.fs))),`cone`)}function BE(e,t){return e===``?``:t===`cone`?ip(e):e.slice(8).split(`/`)[0]??``}function VE(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 HE(e,t){return await e.fs.exists(`/home/${t}`).catch(()=>!1)?FE(t,`cone`):await e.fs.exists(`${NE}${t}`).catch(()=>!1)?FE(t,`scoop`):null}function UE(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=GE[r];if(e){e(t);continue}if(r.length>1&&r.startsWith(`-`)){for(let e of r.slice(1)){let n=WE[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 WE={u:e=>{e.select=`user`},g:e=>{e.select=`group`},G:e=>{e.select=`groups`},n:e=>{e.names=!0},r:()=>void 0},GE={"--user":WE.u,"--group":WE.g,"--groups":WE.G,"--name":WE.n,"--real":WE.r};function KE(e,t){let n=IE(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 RE(e)}}function qE(){return x(`id`,async(e,t)=>{let n=UE(e);if(`error`in n)return{stdout:``,stderr:`id: ${n.error}\n${jE}\n`,exitCode:1};if(n.mode===`help`)return YE(ME);if(n.mode===`version`)return YE(`id (SLICC) ${qe().version}\n`);let r=n.operand===void 0?await zE(t):await HE(t,n.operand);return r?YE(KE(r,n)):{stdout:``,stderr:`id: '${n.operand}': no such user\n`,exitCode:1}})}function JE(){return x(`whoami`,async(e,t)=>YE(`${(await zE(t)).name}\n`))}function YE(e){return{stdout:e,stderr:``,exitCode:0}}function XE(){return{stdout:`imgcat - preview image and video files in the preview tab
1363
1367
 
1364
1368
  Usage: imgcat <path> [path...]
1365
1369
 
1366
1370
  Options:
1367
1371
  -h, --help Show this help message
1368
- `,stderr:``,exitCode:0}}function zE(e={}){return x(`imgcat`,async(t,n)=>{if(t.length===0||C(t))return RE();let r=S(t);if(`error`in r)return{stdout:``,stderr:`imgcat: ${r.error}\n`,exitCode:1};if(r.positionals.length===0)return RE();if(typeof window>`u`||typeof document>`u`)return{stdout:``,stderr:`imgcat: browser APIs are unavailable in this environment
1372
+ `,stderr:``,exitCode:0}}function ZE(e={}){return x(`imgcat`,async(t,n)=>{if(t.length===0||C(t))return XE();let r=S(t);if(`error`in r)return{stdout:``,stderr:`imgcat: ${r.error}\n`,exitCode:1};if(r.positionals.length===0)return XE();if(typeof window>`u`||typeof document>`u`)return{stdout:``,stderr:`imgcat: browser APIs are unavailable in this environment
1369
1373
  `,exitCode:1};if(!e.onMediaPreview)return{stdout:``,stderr:`imgcat: terminal preview is unavailable
1370
- `,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=be(t);if(!ye(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 BE=new Set([`run`,`run-script`]),VE=new Set([`test`,`start`,`stop`,`restart`]),HE=new Set([` `,` `,`
1371
- `,`;`,`|`,`&`,`(`,`)`,`{`,`}`,`<`,`>`]),UE=new Set([`;`,`|`,`&`,`(`,`)`,`{`,`
1372
- `]),WE=/^[A-Za-z_][A-Za-z0-9_]*=/,GE=/^[@A-Za-z0-9._-]+$/,KE=new Set([`if`,`then`,`else`,`elif`,`fi`,`for`,`while`,`until`,`do`,`done`,`case`,`in`,`esac`,`function`,`time`,`!`]),qE=new Set([`if`,`then`,`else`,`elif`,`while`,`until`,`do`,`time`,`!`]),JE=new Set([`ipx`,`npx`]);function YE(e){return`'${e.replace(/'/g,`'\\''`)}'`}async function XE(e,t){let n=await e.readFile(t);return typeof n==`string`?n:new TextDecoder().decode(n)}function*ZE(e){let t=y(e);for(;yield t,t!==`/`;)t=Ee(t).dir}function QE(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 $E(e){return typeof e==`string`?e:void 0}async function eD(e,t){for(let n of ZE(t)){let t=b(n,`package.json`);if(!await e.exists(t))continue;let r;try{r=JSON.parse(await XE(e,t))}catch(e){throw Error(`${t} is not valid JSON: ${e instanceof Error?e.message:String(e)}`)}return{dir:n,name:$E(r.name),version:$E(r.version),scripts:QE(r.scripts)}}return null}function tD(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(HE.has(t))break;n++}return{start:t,end:n,text:e.slice(t,n)}}function nD(e){let t=[],n=0,r=!0;for(;n<e.length;){let i=e[n];if(i===` `||i===` `){n++;continue}if(UE.has(i)){r=!0,n++;continue}let a=tD(e,n);if(a.end===a.start){n++;continue}if(r&&!WE.test(a.text)){if(qE.has(a.text)){n=a.end;continue}t.push(a),r=!1}n=a.end}return t}function rD(e,t){return!GE.test(e)||KE.has(e)||JE.has(e)?!1:!t.isRegistered(e)}async function iD(e,t){let n=nD(e).filter(e=>rD(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 aD(e){let t=[];for(let n of ZE(e))t.push(b(n,`node_modules`,`.bin`));return t}function oD(e,t,n,r){let i=r.env.get(`PATH`)??``,a={PATH:[...aD(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 sD(e){return e.name===void 0?e.dir:e.version===void 0?e.name:`${e.name}@${e.version}`}function cD(e,t){let n=Object.entries(t.scripts);if(n.length===0)return`${e}: no scripts defined in ${b(t.dir,`package.json`)}\n`;let r=[`Scripts available in ${sD(t)} via \`${e} run\`:`];for(let[e,t]of n)r.push(` ${e}`),r.push(` ${t}`);return`${r.join(`
1373
- `)}\n`}function lD(e,t){return t===`--silent`||t===`-s`?(e.silent=!0,!0):t===`--if-present`&&(e.ifPresent=!0,!0)}function uD(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}lD(t,a)||(r===void 0?r=a:n.push(a))}return{flags:t,script:r,extraArgs:n}}function dD(e,t){return{stdout:``,stderr:`${e}: ${t}\n`,exitCode:1}}function fD(e,t,n,r){let i=r.length>0?` ${r.map(YE).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 pD(e,t,n,r){if(n===`start`&&await r.exists(b(t.dir,`server.js`)))return`node server.js`;if(n===`restart`)return`${e} stop --if-present && ${e} start`}function mD(e,t,n){let r=new Set(n.getRegisteredCommands?.()??[]);return{isRegistered:e=>r.has(e),hasLocalBin:async n=>{for(let r of aD(t.dir))if(await e.exists(b(r,n)))return!0;return!1}}}async function hD(e,t,n,r,i,a){let o=i.exec;if(!o)return dD(e,`run requires shell exec support, which this context does not provide`);let s=mD(a.fs,t,i),c=sD(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 iD(a.body,s),{cwd:t.dir,env:oD(t,a.event,a.body,i),stdin:Qr(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 gD(e,t,n,r){let i;try{i=await eD(r.fs,n.cwd)}catch(t){return dD(e,t instanceof Error?t.message:String(t))}if(!i)return dD(e,`no package.json found in ${n.cwd} or any parent directory — nothing to run`);let{flags:a,script:o,extraArgs:s}=uD(t);if(o===void 0)return{stdout:cD(e,i),stderr:``,exitCode:0};let c=i.scripts[o]??await pD(e,i,o,r.fs)??void 0;if(c===void 0){if(a.ifPresent)return{stdout:``,stderr:``,exitCode:0};let t=Object.keys(i.scripts);return dD(e,`missing script: ${o}${t.length>0?` (available: ${t.join(`, `)})`:` (${b(i.dir,`package.json`)} defines no scripts)`}`)}return hD(e,i,fD(i,o,c,s),a,n,r)}const _D=new Set([`install`,`i`,`add`]),vD=new Set([`uninstall`,`remove`,`rm`,`un`]),yD=new Set([`list`,`ls`]),bD=new Set([`-g`,`--global`,`--location=global`]),xD=[`-g`,`--global`,`-D`,`--save-dev`];function SD(e){return`${e} - install packages from the npm registry into node_modules
1374
+ `,exitCode:1};let i=[];for(let e of r.positionals){let t=n.fs.resolvePath(n.cwd,e);if(!(await n.fs.stat(t)).isFile)return{stdout:``,stderr:`imgcat: not a file: ${e}\n`,exitCode:1};let r=be(t);if(!ye(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 QE=new Set([`run`,`run-script`]),$E=new Set([`test`,`start`,`stop`,`restart`]),eD=new Set([` `,` `,`
1375
+ `,`;`,`|`,`&`,`(`,`)`,`{`,`}`,`<`,`>`]),tD=new Set([`;`,`|`,`&`,`(`,`)`,`{`,`
1376
+ `]),nD=/^[A-Za-z_][A-Za-z0-9_]*=/,rD=/^[@A-Za-z0-9._-]+$/,iD=new Set([`if`,`then`,`else`,`elif`,`fi`,`for`,`while`,`until`,`do`,`done`,`case`,`in`,`esac`,`function`,`time`,`!`]),aD=new Set([`if`,`then`,`else`,`elif`,`while`,`until`,`do`,`time`,`!`]),oD=new Set([`ipx`,`npx`]);function sD(e){return`'${e.replace(/'/g,`'\\''`)}'`}async function cD(e,t){let n=await e.readFile(t);return typeof n==`string`?n:new TextDecoder().decode(n)}function*lD(e){let t=y(e);for(;yield t,t!==`/`;)t=Ee(t).dir}function uD(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 dD(e){return typeof e==`string`?e:void 0}async function fD(e,t){for(let n of lD(t)){let t=b(n,`package.json`);if(!await e.exists(t))continue;let r;try{r=JSON.parse(await cD(e,t))}catch(e){throw Error(`${t} is not valid JSON: ${e instanceof Error?e.message:String(e)}`)}return{dir:n,name:dD(r.name),version:dD(r.version),scripts:uD(r.scripts)}}return null}function pD(e,t){let n=t,r=``;for(;n<e.length;){let t=e[n];if(r!==``){t===`\\`&&r===`"`?n++:t===r&&(r=``),n++;continue}if(t===`'`||t===`"`){r=t,n++;continue}if(t===`\\`){n+=2;continue}if(eD.has(t))break;n++}return{start:t,end:n,text:e.slice(t,n)}}function mD(e){let t=[],n=0,r=!0;for(;n<e.length;){let i=e[n];if(i===` `||i===` `){n++;continue}if(tD.has(i)){r=!0,n++;continue}let a=pD(e,n);if(a.end===a.start){n++;continue}if(r&&!nD.test(a.text)){if(aD.has(a.text)){n=a.end;continue}t.push(a),r=!1}n=a.end}return t}function hD(e,t){return!rD.test(e)||iD.has(e)||oD.has(e)?!1:!t.isRegistered(e)}async function gD(e,t){let n=mD(e).filter(e=>hD(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 _D(e){let t=[];for(let n of lD(e))t.push(b(n,`node_modules`,`.bin`));return t}function vD(e,t,n,r){let i=r.env.get(`PATH`)??``,a={PATH:[..._D(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 yD(e){return e.name===void 0?e.dir:e.version===void 0?e.name:`${e.name}@${e.version}`}function bD(e,t){let n=Object.entries(t.scripts);if(n.length===0)return`${e}: no scripts defined in ${b(t.dir,`package.json`)}\n`;let r=[`Scripts available in ${yD(t)} via \`${e} run\`:`];for(let[e,t]of n)r.push(` ${e}`),r.push(` ${t}`);return`${r.join(`
1377
+ `)}\n`}function xD(e,t){return t===`--silent`||t===`-s`?(e.silent=!0,!0):t===`--if-present`&&(e.ifPresent=!0,!0)}function SD(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}xD(t,a)||(r===void 0?r=a:n.push(a))}return{flags:t,script:r,extraArgs:n}}function CD(e,t){return{stdout:``,stderr:`${e}: ${t}\n`,exitCode:1}}function wD(e,t,n,r){let i=r.length>0?` ${r.map(sD).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 TD(e,t,n,r){if(n===`start`&&await r.exists(b(t.dir,`server.js`)))return`node server.js`;if(n===`restart`)return`${e} stop --if-present && ${e} start`}function ED(e,t,n){let r=new Set(n.getRegisteredCommands?.()??[]);return{isRegistered:e=>r.has(e),hasLocalBin:async n=>{for(let r of _D(t.dir))if(await e.exists(b(r,n)))return!0;return!1}}}async function DD(e,t,n,r,i,a){let o=i.exec;if(!o)return CD(e,`run requires shell exec support, which this context does not provide`);let s=ED(a.fs,t,i),c=yD(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 gD(a.body,s),{cwd:t.dir,env:vD(t,a.event,a.body,i),stdin:Qr(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 OD(e,t,n,r){let i;try{i=await fD(r.fs,n.cwd)}catch(t){return CD(e,t instanceof Error?t.message:String(t))}if(!i)return CD(e,`no package.json found in ${n.cwd} or any parent directory — nothing to run`);let{flags:a,script:o,extraArgs:s}=SD(t);if(o===void 0)return{stdout:bD(e,i),stderr:``,exitCode:0};let c=i.scripts[o]??await TD(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 CD(e,`missing script: ${o}${t.length>0?` (available: ${t.join(`, `)})`:` (${b(i.dir,`package.json`)} defines no scripts)`}`)}return DD(e,i,wD(i,o,c,s),a,n,r)}const kD=new Set([`install`,`i`,`add`]),AD=new Set([`uninstall`,`remove`,`rm`,`un`]),jD=new Set([`list`,`ls`]),MD=new Set([`-g`,`--global`,`--location=global`]),ND=[`-g`,`--global`,`-D`,`--save-dev`];function PD(e){return`${e} - install packages from the npm registry into node_modules
1374
1378
  and run package.json scripts
1375
1379
 
1376
1380
  Usage:
@@ -1437,15 +1441,15 @@ manifest without rewriting it. With -g, packages go to /shared/lib/node_modules
1437
1441
  and deps are recorded in /shared/lib/package.json. Existing fields are
1438
1442
  preserved. Idempotent: re-installing an already-satisfied package is a clean
1439
1443
  no-op.
1440
- `}function CD(e){let t=S(e,{bool:xD,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 wD(e){let t=!1,n=[];for(let r of e){if(bD.has(r)){t=!0;continue}r.startsWith(`-`)||n.push(r)}return{global:t,specs:n}}function TD(e){let t=e.indexOf(`--`),n=t===-1?e:e.slice(0,t);return n.includes(`--help`)||n.includes(`-h`)}function ED(e){return e instanceof Error?e.message:String(e)}async function DD(e){e.scriptCatalog?.invalidateJsh(),await e.syncScriptCommands?.()}async function OD(e,t,n){let r;try{r=await Wi({fs:n.fs,fetch:n.fetch,cwd:t.cwd})}catch(t){return t instanceof Yi?{stdout:``,stderr:`${e}: ${t.message}\n`,exitCode:1}:{stdout:``,stderr:`${e}: install failed: ${ED(t)}\n`,exitCode:1}}if(r.empty&&r.errors.length===0)return{stdout:`${e}: nothing to install (package.json declares no dependencies)\n`,stderr:``,exitCode:0};let i=r.results.map(t=>`${e}: installed ${t.name}@${t.version} -> ${t.installPath}`),a=r.errors.map(t=>`${e}: failed to install ${t.spec}: ${ED(t.error)}`);return{stdout:i.length>0?`${i.join(`
1444
+ `}function FD(e){let t=S(e,{bool:ND,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 ID(e){let t=!1,n=[];for(let r of e){if(MD.has(r)){t=!0;continue}r.startsWith(`-`)||n.push(r)}return{global:t,specs:n}}function LD(e){let t=e.indexOf(`--`),n=t===-1?e:e.slice(0,t);return n.includes(`--help`)||n.includes(`-h`)}function RD(e){return e instanceof Error?e.message:String(e)}async function zD(e){e.scriptCatalog?.invalidateJsh(),await e.syncScriptCommands?.()}async function BD(e,t,n){let r;try{r=await Wi({fs:n.fs,fetch:n.fetch,cwd:t.cwd})}catch(t){return t instanceof Yi?{stdout:``,stderr:`${e}: ${t.message}\n`,exitCode:1}:{stdout:``,stderr:`${e}: install failed: ${RD(t)}\n`,exitCode:1}}if(r.empty&&r.errors.length===0)return{stdout:`${e}: nothing to install (package.json declares no dependencies)\n`,stderr:``,exitCode:0};let i=r.results.map(t=>`${e}: installed ${t.name}@${t.version} -> ${t.installPath}`),a=r.errors.map(t=>`${e}: failed to install ${t.spec}: ${RD(t.error)}`);return{stdout:i.length>0?`${i.join(`
1441
1445
  `)}\n`:``,stderr:a.length>0?`${a.join(`
1442
- `)}\n`:``,exitCode:r.errors.length===0?0:1}}async function kD(e,t,n,r){let i=CD(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 OD(e,n,r);let c;try{c=await qi(s,{fs:r.fs,fetch:r.fetch,cwd:n.cwd,global:a,saveDev:o})}catch(t){return{stdout:``,stderr:`${e}: install failed: ${ED(t)}\n`,exitCode:1}}let l=c.results.map(t=>`${e}: installed ${t.name}@${t.version} -> ${t.installPath}`),u=c.errors.map(t=>`${e}: failed to install ${t.spec}: ${ED(t.error)}`);return a&&c.results.length>0&&await DD(r),{stdout:l.length>0?`${l.join(`
1446
+ `)}\n`:``,exitCode:r.errors.length===0?0:1}}async function VD(e,t,n,r){let i=FD(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 BD(e,n,r);let c;try{c=await qi(s,{fs:r.fs,fetch:r.fetch,cwd:n.cwd,global:a,saveDev:o})}catch(t){return{stdout:``,stderr:`${e}: install failed: ${RD(t)}\n`,exitCode:1}}let l=c.results.map(t=>`${e}: installed ${t.name}@${t.version} -> ${t.installPath}`),u=c.errors.map(t=>`${e}: failed to install ${t.spec}: ${RD(t.error)}`);return a&&c.results.length>0&&await zD(r),{stdout:l.length>0?`${l.join(`
1443
1447
  `)}\n`:``,stderr:u.length>0?`${u.join(`
1444
- `)}\n`:``,exitCode:c.errors.length===0?0:1}}function AD(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(`
1445
- `)}\n`}async function jD(e,t,n,r){let{global:i,specs:a}=wD(t);if(a.length===0)return{stdout:``,stderr:`${e}: uninstall requires at least one package name\n`,exitCode:1};let o;try{o=await Gi(a,{fs:r.fs,fetch:r.fetch,cwd:n.cwd,global:i})}catch(t){return{stdout:``,stderr:`${e}: uninstall failed: ${ED(t)}\n`,exitCode:1}}let s=o.results.filter(e=>e.removed).map(t=>`${e}: removed ${t.name}`),c=o.results.filter(e=>!e.removed).map(e=>e.name),l=o.errors.map(t=>`${e}: failed to uninstall ${t.spec}: ${ED(t.error)}`);c.length>0&&l.push(`${e}: ${c.join(`, `)} not installed${i?` globally`:``}`);let u=o.errors.length>0;return i&&await DD(r),{stdout:s.length>0?`${s.join(`
1448
+ `)}\n`:``,exitCode:c.errors.length===0?0:1}}function HD(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(`
1449
+ `)}\n`}async function UD(e,t,n,r){let{global:i,specs:a}=ID(t);if(a.length===0)return{stdout:``,stderr:`${e}: uninstall requires at least one package name\n`,exitCode:1};let o;try{o=await Gi(a,{fs:r.fs,fetch:r.fetch,cwd:n.cwd,global:i})}catch(t){return{stdout:``,stderr:`${e}: uninstall failed: ${RD(t)}\n`,exitCode:1}}let s=o.results.filter(e=>e.removed).map(t=>`${e}: removed ${t.name}`),c=o.results.filter(e=>!e.removed).map(e=>e.name),l=o.errors.map(t=>`${e}: failed to uninstall ${t.spec}: ${RD(t.error)}`);c.length>0&&l.push(`${e}: ${c.join(`, `)} not installed${i?` globally`:``}`);let u=o.errors.length>0;return i&&await zD(r),{stdout:s.length>0?`${s.join(`
1446
1450
  `)}\n`:``,stderr:l.length>0?`${l.join(`
1447
- `)}\n`:``,exitCode:+!!u}}async function MD(e,t,n,r){let{global:i}=wD(t);try{let e=i?await Hi(r.fs):await Ri(r.fs,n.cwd);return{stdout:AD(i?_r:n.cwd,e),stderr:``,exitCode:0}}catch(t){return{stdout:``,stderr:`${e}: list failed: ${ED(t)}\n`,exitCode:1}}}async function ND(e,t,n,r){let{global:i}=wD(t);return{stdout:`${i?cr:`${n.cwd.replace(/\/$/,``)}/node_modules`}\n`,stderr:``,exitCode:0}}function PD(e,t){let n=e===`i`;return x(e,async(r,i)=>{if(TD(r))return{stdout:SD(e),stderr:``,exitCode:0};if(n)return kD(e,r,i,t);if(r.length===0)return{stdout:SD(e),stderr:`${e}: missing subcommand\n`,exitCode:1};let a=r[0],o=r.slice(1);return _D.has(a)?kD(e,o,i,t):vD.has(a)?jD(e,o,i,t):yD.has(a)?MD(e,o,i,t):a===`root`?ND(e,o,i,t):BE.has(a)?gD(e,o,i,{fs:t.fs}):VE.has(a)?gD(e,r,i,{fs:t.fs}):{stdout:``,stderr:`${e}: unknown subcommand '${a}' (supported: install, uninstall, list, root, run)\n`,exitCode:1}})}const FD=`0.5.458`,ID=`v86 is not installed in node_modules: run \`${M} v86@${FD}\` (no network fallback)`;let LD=null;async function RD(e={}){return LD||=HD(e.ipk).catch(e=>{throw LD=null,e}),LD}const zD=[{js:`build/libv86.mjs`,wasm:`build/v86.wasm`}];async function BD(e,t){for(let{js:n,wasm:r}of zD){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 VD(e){let t;try{t=await lr(`v86/package.json`,e.fromDir,e.reader)}catch{return null}if(t.type!==`file`)return null;let n=await BD(Ee(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.458`);return{jsSource:await e.reader.readFile(n.jsPath),wasmBytes:await e.readBytes(n.wasmPath),version:i}}catch{return null}}async function HD(e){if(Sr())throw Error(`v86 is not available in Node runtime`);if(!e)throw Error(ID);let t=await VD(e);if(!t)throw Error(ID);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 qr(t.wasmBytes),version:t.version}}function UD(e){return async t=>(await WebAssembly.instantiate(e,t)).exports}const WD={command:`biome`,example:`biome check foo.js`,bootstrap:`${M} ${c_}`},GD={command:`playwright-cli`,example:`playwright-cli open https://example.com`},KD={command:`puppeteer`,example:`puppeteer open https://example.com`},qD={command:`convert`,example:`convert input.png output.jpg`,bootstrap:`${M} @imagemagick/magick-wasm@${ji}`},JD={...qD,command:`magick`,example:`magick input.png output.jpg`},YD={command:`pdftoppm`,example:`pdftoppm -png -r 150 doc.pdf page`},XD={"@biomejs/biome":WD,biome:WD,esbuild:{command:`esbuild`,example:`esbuild --bundle src/index.js --outfile=dist/bundle.js`,bootstrap:`${M} esbuild-wasm@${Kr}`},playwright:GD,"@playwright/test":GD,"playwright-core":GD,puppeteer:KD,"puppeteer-core":KD,typescript:{command:`tsc`,example:`tsc --noEmit`,bootstrap:Cr},"pdf-poppler":YD,"pdf-to-img":YD,pdf2pic:YD,"pdf-img-convert":YD,poppler:YD,"poppler-utils":YD,imagemagick:qD,"imagemagick-cli":qD,"imagemagick-convert":qD,"magick-cli":JD,"@imagemagick/magick-wasm":JD,ffmpeg:{command:`ffmpeg`,example:`ffmpeg -i input.mp4 output.webm`,bootstrap:`${M} @ffmpeg/core@${Zi}`},"@ffmpeg/ffmpeg":{command:`ffmpeg`,example:`ffmpeg -i input.mp4 output.webm`,bootstrap:`${M} @ffmpeg/core@${Zi}`},ffprobe:{command:`ffprobe`,example:`ffprobe -v error -show_format -of json input.mp4`,bootstrap:`${M} @ffmpeg/core@${Zi}`},"@ffprobe-installer/ffprobe":{command:`ffprobe`,example:`ffprobe -v error -show_format -of json input.mp4`,bootstrap:`${M} @ffmpeg/core@${Zi}`},sqlite3:{command:`sqlite3`,example:`sqlite3 database.db "SELECT 1"`},v86:{command:`v86`,example:`v86 start -cdrom alpine.iso`,bootstrap:`${M} v86@${FD}`}};function ZD(e){return Object.hasOwn(XD,e)?XD[e]:void 0}function QD(e){return/^[A-Za-z0-9_./:=@%+-]+$/.test(e)?e:`'${e.replace(/'/g,`'\\''`)}'`}function $D(e,t,n,r){let i=n.length?[r.command,...n].map(QD).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(QD).join(` `)}`),`${a.join(`
1448
- `)}\n`}const eO=/require\(\s*["']([^"']+)["']\s*\)/;function tO(e){return`${e} - run an installed package's executable bin
1451
+ `)}\n`:``,exitCode:+!!u}}async function WD(e,t,n,r){let{global:i}=ID(t);try{let e=i?await Hi(r.fs):await Ri(r.fs,n.cwd);return{stdout:HD(i?_r:n.cwd,e),stderr:``,exitCode:0}}catch(t){return{stdout:``,stderr:`${e}: list failed: ${RD(t)}\n`,exitCode:1}}}async function GD(e,t,n,r){let{global:i}=ID(t);return{stdout:`${i?cr:`${n.cwd.replace(/\/$/,``)}/node_modules`}\n`,stderr:``,exitCode:0}}function KD(e,t){let n=e===`i`;return x(e,async(r,i)=>{if(LD(r))return{stdout:PD(e),stderr:``,exitCode:0};if(n)return VD(e,r,i,t);if(r.length===0)return{stdout:PD(e),stderr:`${e}: missing subcommand\n`,exitCode:1};let a=r[0],o=r.slice(1);return kD.has(a)?VD(e,o,i,t):AD.has(a)?UD(e,o,i,t):jD.has(a)?WD(e,o,i,t):a===`root`?GD(e,o,i,t):QE.has(a)?OD(e,o,i,{fs:t.fs}):$E.has(a)?OD(e,r,i,{fs:t.fs}):{stdout:``,stderr:`${e}: unknown subcommand '${a}' (supported: install, uninstall, list, root, run)\n`,exitCode:1}})}const qD=`0.5.458`,JD=`v86 is not installed in node_modules: run \`${M} v86@${qD}\` (no network fallback)`;let YD=null;async function XD(e={}){return YD||=eO(e.ipk).catch(e=>{throw YD=null,e}),YD}const ZD=[{js:`build/libv86.mjs`,wasm:`build/v86.wasm`}];async function QD(e,t){for(let{js:n,wasm:r}of ZD){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 $D(e){let t;try{t=await lr(`v86/package.json`,e.fromDir,e.reader)}catch{return null}if(t.type!==`file`)return null;let n=await QD(Ee(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.458`);return{jsSource:await e.reader.readFile(n.jsPath),wasmBytes:await e.readBytes(n.wasmPath),version:i}}catch{return null}}async function eO(e){if(Sr())throw Error(`v86 is not available in Node runtime`);if(!e)throw Error(JD);let t=await $D(e);if(!t)throw Error(JD);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 qr(t.wasmBytes),version:t.version}}function tO(e){return async t=>(await WebAssembly.instantiate(e,t)).exports}const nO={command:`biome`,example:`biome check foo.js`,bootstrap:`${M} ${b_}`},rO={command:`playwright-cli`,example:`playwright-cli open https://example.com`},iO={command:`puppeteer`,example:`puppeteer open https://example.com`},aO={command:`convert`,example:`convert input.png output.jpg`,bootstrap:`${M} @imagemagick/magick-wasm@${ji}`},oO={...aO,command:`magick`,example:`magick input.png output.jpg`},sO={command:`pdftoppm`,example:`pdftoppm -png -r 150 doc.pdf page`},cO={"@biomejs/biome":nO,biome:nO,esbuild:{command:`esbuild`,example:`esbuild --bundle src/index.js --outfile=dist/bundle.js`,bootstrap:`${M} esbuild-wasm@${Kr}`},playwright:rO,"@playwright/test":rO,"playwright-core":rO,puppeteer:iO,"puppeteer-core":iO,typescript:{command:`tsc`,example:`tsc --noEmit`,bootstrap:Cr},"pdf-poppler":sO,"pdf-to-img":sO,pdf2pic:sO,"pdf-img-convert":sO,poppler:sO,"poppler-utils":sO,imagemagick:aO,"imagemagick-cli":aO,"imagemagick-convert":aO,"magick-cli":oO,"@imagemagick/magick-wasm":oO,ffmpeg:{command:`ffmpeg`,example:`ffmpeg -i input.mp4 output.webm`,bootstrap:`${M} @ffmpeg/core@${Zi}`},"@ffmpeg/ffmpeg":{command:`ffmpeg`,example:`ffmpeg -i input.mp4 output.webm`,bootstrap:`${M} @ffmpeg/core@${Zi}`},ffprobe:{command:`ffprobe`,example:`ffprobe -v error -show_format -of json input.mp4`,bootstrap:`${M} @ffmpeg/core@${Zi}`},"@ffprobe-installer/ffprobe":{command:`ffprobe`,example:`ffprobe -v error -show_format -of json input.mp4`,bootstrap:`${M} @ffmpeg/core@${Zi}`},sqlite3:{command:`sqlite3`,example:`sqlite3 database.db "SELECT 1"`},v86:{command:`v86`,example:`v86 start -cdrom alpine.iso`,bootstrap:`${M} v86@${qD}`}};function lO(e){return Object.hasOwn(cO,e)?cO[e]:void 0}function uO(e){return/^[A-Za-z0-9_./:=@%+-]+$/.test(e)?e:`'${e.replace(/'/g,`'\\''`)}'`}function dO(e,t,n,r){let i=n.length?[r.command,...n].map(uO).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(uO).join(` `)}`),`${a.join(`
1452
+ `)}\n`}const fO=/require\(\s*["']([^"']+)["']\s*\)/;function pO(e){return`${e} - run an installed package's executable bin
1449
1453
 
1450
1454
  Usage:
1451
1455
  ${e} [--force] [--global] <pkg-or-bin> [args...]
@@ -1458,12 +1462,12 @@ Options:
1458
1462
  --force Install a package even when a SLICC built-in shadows it
1459
1463
  --global Resolve only from the shared global prefix (/shared/lib/node_modules)
1460
1464
  -h, --help Show this help message
1461
- `}async function nO(e,t){let n=await e.readFile(t);return typeof n==`string`?n:new TextDecoder().decode(n)}async function rO(e,t){try{return(await e.stat(t)).type===`file`}catch{return!1}}async function iO(e,t){try{return(await e.stat(t)).type===`directory`}catch{return!1}}function*aO(e,t=!1){if(t){yield cr;return}let n=y(e);for(;yield b(n,`node_modules`),n!==`/`;)n=Ee(n).dir;yield cr}async function oO(e,t,n,r=!1){for(let i of aO(t,r)){let t=b(i,`.bin`,n);if(!await rO(e,t))continue;let r=await nO(e,t),a=eO.exec(r),o=Ee(t).dir;return{binFilePath:a?b(o,a[1]):t,argvName:t}}return null}function sO(e){if(e.startsWith(`@`)){let t=e.indexOf(`/`);if(t!==-1)return e.slice(t+1)}return e}function cO(e,t){if(typeof e==`string`)return{binName:sO(t),binPath:e};if(typeof e!=`object`||!e)return null;let n=[t,sO(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 lO(e,t,n,r=!1){for(let i of aO(t,r)){let t=b(i,n),r=b(t,`package.json`);if(!await rO(e,r))continue;let a;try{a=JSON.parse(await nO(e,r))}catch{return null}let o=cO(a.bin,n);if(!o)return null;let s=o.binPath.replace(/^\.\//,``);return{binFilePath:b(t,s),argvName:b(i,`.bin`,o.binName)}}return null}async function uO(e,t,n,r=!1){return await oO(e,t,n,r)??await lO(e,t,n,r)}async function dO(e,t,n){for(let r of aO(t))if(await rO(e,b(r,n,`package.json`)))return!0;return!1}function fO(e){return e instanceof Error?e.message:String(e)}function pO(e,t){return{stdout:``,stderr:`${e}: ${t}\n`,exitCode:1}}async function mO(e,t,n,r){try{let i=await qi([t],{fs:r.fs,fetch:r.fetch,cwd:n.cwd});if(i.errors.length>0)return{error:pO(e,`failed to install '${t}': ${fO(i.errors[0].error)}`)};let a=i.results.map(t=>`${e}: installed ${t.name}@${t.version}`);return{progress:a.length>0?`${a.join(`
1462
- `)}\n`:``}}catch(n){return{error:pO(e,`failed to install '${t}': ${fO(n)}`)}}}async function hO(e,t,n,r){return await rO(r,n)?null:await iO(r,n)?pO(e,`bin target '${n}' is a directory, not a file`):pO(e,`bin file '${n}' for '${t}' does not exist`)}async function gO(e,t,n,r,i,a){if(await dO(a.fs,i.cwd,t))return{error:pO(e,`package '${t}' does not expose an executable bin`)};let o=r?void 0:ZD(t);if(o)return{error:{stdout:``,stderr:$D(e,t,n,o),exitCode:1}};let s=await mO(e,t,i,a);if(`error`in s)return s;let c=await uO(a.fs,i.cwd,t);return c?{resolved:c,installProgress:s.progress}:{error:pO(e,`package '${t}' was installed but does not expose an executable bin`)}}function _O(e,t){return{name:e,trusted:!0,async execute(n,r){if(n.length===0||n[0]===`--help`||n[0]===`-h`)return{stdout:tO(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:tO(e),stderr:``,exitCode:1};let c=s[0],l=s.slice(1),u;try{u=await uO(t.fs,r.cwd,c,o)}catch(t){return pO(e,fO(t))}let d=``;if(!u){if(o)return pO(e,`no global bin '${c}' found in ${cr}`);let n=await gO(e,c,l,i,r,t);if(`error`in n)return n.error;u=n.resolved,d=n.installProgress}let f=await hO(e,c,u.binFilePath,t.fs);if(f)return f;let p=wt(await nO(t.fs,u.binFilePath)),m=[`node`,u.argvName,...l],h=await Lt(p,m,r,void 0,{filename:u.binFilePath});return{stdout:h.stdout,stderr:d+h.stderr,exitCode:h.exitCode}}}}function vO(e={}){return x(`jshd`,async(t,n)=>{let{runJshd:r}=await import(`./run-BzjnYE1_.js`);return r(t,n,e)})}const yO=new Set([`SIGINT`,`SIGTERM`,`SIGKILL`,`SIGSTOP`,`SIGCONT`]);function bO(e={}){return x(`kill`,async t=>{if(t.length===0||t.includes(`--help`)||t.includes(`-h`))return EO();let n=e.processManager??xO();if(!n)return{stdout:``,stderr:`kill: no process manager available in this runtime
1463
- `,exitCode:1};let r=SO(t);if(!r.ok)return{stdout:``,stderr:r.stderr,exitCode:r.exitCode};let{allDelivered:i,errors:a}=CO(n,r.pids,r.signal);return{stdout:``,stderr:a.length?`${a.join(`
1464
- `)}\n`:``,exitCode:+!i}})}function xO(){let e=globalThis.__slicc_pm;return e instanceof Object&&typeof e.signal==`function`?e:null}function SO(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
1465
- `,exitCode:2};let i=wO(n);if(i instanceof Error)return{ok:!1,stderr:`kill: ${i.message}\n`,exitCode:2};t=i;continue}if(i.startsWith(`-`)){let e=TO(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
1466
- `,exitCode:2}:yO.has(t)?{ok:!0,signal:t,pids:n}:{ok:!1,stderr:`kill: signal ${t} not supported\n`,exitCode:2}}function CO(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 wO(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 TO(e){return e===`-9`?`SIGKILL`:wO(e.slice(1))}function EO(){return{stdout:`Usage: kill [-s SIGNAL | -INT | -TERM | -KILL | -STOP | -CONT | -9] PID [PID …]
1465
+ `}async function mO(e,t){let n=await e.readFile(t);return typeof n==`string`?n:new TextDecoder().decode(n)}async function hO(e,t){try{return(await e.stat(t)).type===`file`}catch{return!1}}async function gO(e,t){try{return(await e.stat(t)).type===`directory`}catch{return!1}}function*_O(e,t=!1){if(t){yield cr;return}let n=y(e);for(;yield b(n,`node_modules`),n!==`/`;)n=Ee(n).dir;yield cr}async function vO(e,t,n,r=!1){for(let i of _O(t,r)){let t=b(i,`.bin`,n);if(!await hO(e,t))continue;let r=await mO(e,t),a=fO.exec(r),o=Ee(t).dir;return{binFilePath:a?b(o,a[1]):t,argvName:t}}return null}function yO(e){if(e.startsWith(`@`)){let t=e.indexOf(`/`);if(t!==-1)return e.slice(t+1)}return e}function bO(e,t){if(typeof e==`string`)return{binName:yO(t),binPath:e};if(typeof e!=`object`||!e)return null;let n=[t,yO(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 xO(e,t,n,r=!1){for(let i of _O(t,r)){let t=b(i,n),r=b(t,`package.json`);if(!await hO(e,r))continue;let a;try{a=JSON.parse(await mO(e,r))}catch{return null}let o=bO(a.bin,n);if(!o)return null;let s=o.binPath.replace(/^\.\//,``);return{binFilePath:b(t,s),argvName:b(i,`.bin`,o.binName)}}return null}async function SO(e,t,n,r=!1){return await vO(e,t,n,r)??await xO(e,t,n,r)}async function CO(e,t,n){for(let r of _O(t))if(await hO(e,b(r,n,`package.json`)))return!0;return!1}function wO(e){return e instanceof Error?e.message:String(e)}function TO(e,t){return{stdout:``,stderr:`${e}: ${t}\n`,exitCode:1}}async function EO(e,t,n,r){try{let i=await qi([t],{fs:r.fs,fetch:r.fetch,cwd:n.cwd});if(i.errors.length>0)return{error:TO(e,`failed to install '${t}': ${wO(i.errors[0].error)}`)};let a=i.results.map(t=>`${e}: installed ${t.name}@${t.version}`);return{progress:a.length>0?`${a.join(`
1466
+ `)}\n`:``}}catch(n){return{error:TO(e,`failed to install '${t}': ${wO(n)}`)}}}async function DO(e,t,n,r){return await hO(r,n)?null:await gO(r,n)?TO(e,`bin target '${n}' is a directory, not a file`):TO(e,`bin file '${n}' for '${t}' does not exist`)}async function OO(e,t,n,r,i,a){if(await CO(a.fs,i.cwd,t))return{error:TO(e,`package '${t}' does not expose an executable bin`)};let o=r?void 0:lO(t);if(o)return{error:{stdout:``,stderr:dO(e,t,n,o),exitCode:1}};let s=await EO(e,t,i,a);if(`error`in s)return s;let c=await SO(a.fs,i.cwd,t);return c?{resolved:c,installProgress:s.progress}:{error:TO(e,`package '${t}' was installed but does not expose an executable bin`)}}function kO(e,t){return{name:e,trusted:!0,async execute(n,r){if(n.length===0||n[0]===`--help`||n[0]===`-h`)return{stdout:pO(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:pO(e),stderr:``,exitCode:1};let c=s[0],l=s.slice(1),u;try{u=await SO(t.fs,r.cwd,c,o)}catch(t){return TO(e,wO(t))}let d=``;if(!u){if(o)return TO(e,`no global bin '${c}' found in ${cr}`);let n=await OO(e,c,l,i,r,t);if(`error`in n)return n.error;u=n.resolved,d=n.installProgress}let f=await DO(e,c,u.binFilePath,t.fs);if(f)return f;let p=wt(await mO(t.fs,u.binFilePath)),m=[`node`,u.argvName,...l],h=await Lt(p,m,r,void 0,{filename:u.binFilePath});return{stdout:h.stdout,stderr:d+h.stderr,exitCode:h.exitCode}}}}function AO(e={}){return x(`jshd`,async(t,n)=>{let{runJshd:r}=await import(`./run-DavG4eNi.js`);return r(t,n,e)})}const jO=new Set([`SIGINT`,`SIGTERM`,`SIGKILL`,`SIGSTOP`,`SIGCONT`]);function MO(e={}){return x(`kill`,async t=>{if(t.length===0||t.includes(`--help`)||t.includes(`-h`))return RO();let n=e.processManager??NO();if(!n)return{stdout:``,stderr:`kill: no process manager available in this runtime
1467
+ `,exitCode:1};let r=PO(t);if(!r.ok)return{stdout:``,stderr:r.stderr,exitCode:r.exitCode};let{allDelivered:i,errors:a}=FO(n,r.pids,r.signal);return{stdout:``,stderr:a.length?`${a.join(`
1468
+ `)}\n`:``,exitCode:+!i}})}function NO(){let e=globalThis.__slicc_pm;return e instanceof Object&&typeof e.signal==`function`?e:null}function PO(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
1469
+ `,exitCode:2};let i=IO(n);if(i instanceof Error)return{ok:!1,stderr:`kill: ${i.message}\n`,exitCode:2};t=i;continue}if(i.startsWith(`-`)){let e=LO(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
1470
+ `,exitCode:2}:jO.has(t)?{ok:!0,signal:t,pids:n}:{ok:!1,stderr:`kill: signal ${t} not supported\n`,exitCode:2}}function FO(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 IO(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 LO(e){return e===`-9`?`SIGKILL`:IO(e.slice(1))}function RO(){return{stdout:`Usage: kill [-s SIGNAL | -INT | -TERM | -KILL | -STOP | -CONT | -9] PID [PID …]
1467
1471
 
1468
1472
  Send a signal to one or more processes tracked by the kernel.
1469
1473
 
@@ -1485,7 +1489,7 @@ Examples:
1485
1489
  kill -INT 1024 1025 SIGINT both
1486
1490
  kill -STOP 1024 pause; \`kill -CONT 1024\` resumes
1487
1491
  kill -s SIGKILL 1024 explicit signal name
1488
- `,stderr:``,exitCode:0}}const DO=[`top`,`left`,`middle`,`right`,`bottom`],OO=`usage: layout <verb> [args]
1492
+ `,stderr:``,exitCode:0}}const zO=[`top`,`left`,`middle`,`right`,`bottom`],BO=`usage: layout <verb> [args]
1489
1493
 
1490
1494
  list List the built-in presets
1491
1495
  set <preset> Switch to a built-in preset
@@ -1505,9 +1509,9 @@ Examples:
1505
1509
  docs Describe the layout surfaces
1506
1510
  panels List the registered panel ids
1507
1511
 
1508
- Zones: ${DO.join(`, `)}
1509
- `,kO=new Set([`files`,`term`,`memory`,`monitor`]),AO=`sprinkle:`;function jO(e){return e===`chat`||kO.has(e)||e.startsWith(AO)?e:`${AO}${e}`}function MO(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 NO=`usage: layout size <surfaceId> [--width <px|percent>] [--height <px|percent>]`;function PO(e){let t=e[0],n=t?ds(t):null;return n?{kind:`set`,tree:n.tree}:{error:`unknown layout: ${t??`(none)`}`}}function FO(e){let t=e[0];return DO.includes(t)?{kind:`chat`,zone:t}:{error:`usage: layout chat <${DO.join(`|`)}>`}}function IO(e){let[t,n]=e;return!t||!DO.includes(n)?{error:`usage: layout open <surfaceId> <${DO.join(`|`)}>`}:{kind:`open`,surfaceId:jO(t),zone:n}}function LO(e){let t=e[0];return t?{kind:`close`,surfaceId:jO(t)}:{error:`usage: layout close <surfaceId>`}}function RO(e){let[t,n]=e;return!t||!DO.includes(n)?{error:`usage: layout move <surfaceId> <${DO.join(`|`)}>`}:{kind:`move`,surfaceId:jO(t),zone:n}}function zO(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=MO(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 BO(e){let t=e[0];if(!t)return{error:NO};let n={};for(let t=1;t<e.length;t+=2){let r=zO(n,e[t],e[t+1]);if(r)return r}return n.widthPx==null&&n.widthPercent==null&&n.heightPx==null&&n.heightPercent==null?{error:NO}:{kind:`size`,surfaceId:jO(t),size:n}}function VO(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 HO(e,t){let n=t[0];return n?e===`load`?{kind:`load`,name:n}:{kind:`delete`,name:n}:{error:`usage: layout ${e} <name>`}}function UO(e,t){let n=t[0];return n?e===`show`?{kind:`show`,panelId:jO(n)}:{kind:`hide`,panelId:jO(n)}:{error:`usage: layout ${e} <panelId>`}}function WO(){let e=ds(ss);return e?{kind:`set`,tree:e.tree}:{error:`default layout unavailable`}}function GO(e){let[t,...n]=e;switch(t){case`set`:return PO(n);case`chat`:return FO(n);case`open`:return IO(n);case`close`:return LO(n);case`move`:return RO(n);case`size`:return BO(n);case`reset`:return{kind:`reset`};case`edit`:return WO();case`load`:return HO(`load`,n);case`save`:return VO(n);case`delete`:return HO(`delete`,n);case`docs`:return{kind:`docs`};case`panels`:return{kind:`panels`};case`show`:return UO(`show`,n);case`hide`:return UO(`hide`,n);default:return{error:`usage: layout <set|edit|chat|open|close|move|size|show|hide|load|save|delete|docs|panels|list|reset>`}}}function KO(){return x(`layout`,async e=>{if(C(e))return{stdout:e[0]?.startsWith(`-`)?OO:et(`layout`,e[0],OO),stderr:``,exitCode:0};if(e[0]===`list`||e.length===0)return{stdout:`layouts: ${Object.keys(us).join(`, `)}\ndefault: ${ss}\n`,stderr:``,exitCode:0};let t=GO(e);if(`error`in t)return{stdout:``,stderr:`layout: ${t.error}\n`,exitCode:1};let n=o();if(!n)return{stdout:``,stderr:`layout: UI is unavailable in this environment
1510
- `,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 qO=Qi.id;function JO(){return`local-llm — inspect and configure the Local LLM provider
1512
+ Zones: ${zO.join(`, `)}
1513
+ `,VO=new Set([`files`,`term`,`memory`,`monitor`]),HO=`sprinkle:`;function UO(e){return e===`chat`||VO.has(e)||e.startsWith(HO)?e:`${HO}${e}`}function WO(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 GO=`usage: layout size <surfaceId> [--width <px|percent>] [--height <px|percent>]`;function KO(e){let t=e[0],n=t?ds(t):null;return n?{kind:`set`,tree:n.tree}:{error:`unknown layout: ${t??`(none)`}`}}function qO(e){let t=e[0];return zO.includes(t)?{kind:`chat`,zone:t}:{error:`usage: layout chat <${zO.join(`|`)}>`}}function JO(e){let[t,n]=e;return!t||!zO.includes(n)?{error:`usage: layout open <surfaceId> <${zO.join(`|`)}>`}:{kind:`open`,surfaceId:UO(t),zone:n}}function YO(e){let t=e[0];return t?{kind:`close`,surfaceId:UO(t)}:{error:`usage: layout close <surfaceId>`}}function XO(e){let[t,n]=e;return!t||!zO.includes(n)?{error:`usage: layout move <surfaceId> <${zO.join(`|`)}>`}:{kind:`move`,surfaceId:UO(t),zone:n}}function ZO(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=WO(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 QO(e){let t=e[0];if(!t)return{error:GO};let n={};for(let t=1;t<e.length;t+=2){let r=ZO(n,e[t],e[t+1]);if(r)return r}return n.widthPx==null&&n.widthPercent==null&&n.heightPx==null&&n.heightPercent==null?{error:GO}:{kind:`size`,surfaceId:UO(t),size:n}}function $O(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 ek(e,t){let n=t[0];return n?e===`load`?{kind:`load`,name:n}:{kind:`delete`,name:n}:{error:`usage: layout ${e} <name>`}}function tk(e,t){let n=t[0];return n?e===`show`?{kind:`show`,panelId:UO(n)}:{kind:`hide`,panelId:UO(n)}:{error:`usage: layout ${e} <panelId>`}}function nk(){let e=ds(ss);return e?{kind:`set`,tree:e.tree}:{error:`default layout unavailable`}}function rk(e){let[t,...n]=e;switch(t){case`set`:return KO(n);case`chat`:return qO(n);case`open`:return JO(n);case`close`:return YO(n);case`move`:return XO(n);case`size`:return QO(n);case`reset`:return{kind:`reset`};case`edit`:return nk();case`load`:return ek(`load`,n);case`save`:return $O(n);case`delete`:return ek(`delete`,n);case`docs`:return{kind:`docs`};case`panels`:return{kind:`panels`};case`show`:return tk(`show`,n);case`hide`:return tk(`hide`,n);default:return{error:`usage: layout <set|edit|chat|open|close|move|size|show|hide|load|save|delete|docs|panels|list|reset>`}}}function ik(){return x(`layout`,async e=>{if(C(e))return{stdout:e[0]?.startsWith(`-`)?BO:et(`layout`,e[0],BO),stderr:``,exitCode:0};if(e[0]===`list`||e.length===0)return{stdout:`layouts: ${Object.keys(us).join(`, `)}\ndefault: ${ss}\n`,stderr:``,exitCode:0};let t=rk(e);if(`error`in t)return{stdout:``,stderr:`layout: ${t.error}\n`,exitCode:1};let n=o();if(!n)return{stdout:``,stderr:`layout: UI is unavailable in this environment
1514
+ `,exitCode:1};try{let e=await n.call(`layout-apply`,t);if(e&&e.applied===!1)return{stdout:``,stderr:`layout: ${e.error??`could not apply layout`}\n`,exitCode:1};let r=e?.output;return{stdout:r?`${r.replace(/\n*$/,``)}\n`:``,stderr:``,exitCode:0}}catch(e){return{stdout:``,stderr:`layout: ${e.message}\n`,exitCode:1}}})}const ak=Qi.id;function ok(){return`local-llm — inspect and configure the Local LLM provider
1511
1515
 
1512
1516
  Usage:
1513
1517
  local-llm Show current config + verify connection
@@ -1526,20 +1530,20 @@ Common base URLs:
1526
1530
  llama.cpp http://localhost:8080/v1
1527
1531
  vLLM http://localhost:8000/v1
1528
1532
  Jan http://localhost:1337/v1
1529
- `}function YO(e,t){return e.version?t?`${e.kind} (${e.version})`:`${e.kind} ${e.version}`:e.kind}function XO(e){return e.map(e=>` • ${e}`)}function ZO(e,t){let n=[`✗ Could not reach ${e}`,` runtime: ${YO(t.runtime,!0)}`,` error: ${t.error?.message??`unknown`}`];return t.error?.hint&&n.push(` hint: ${t.error.hint}`),{stdout:``,stderr:n.join(`
1533
+ `}function sk(e,t){return e.version?t?`${e.kind} (${e.version})`:`${e.kind} ${e.version}`:e.kind}function ck(e){return e.map(e=>` • ${e}`)}function lk(e,t){let n=[`✗ Could not reach ${e}`,` runtime: ${sk(t.runtime,!0)}`,` error: ${t.error?.message??`unknown`}`];return t.error?.hint&&n.push(` hint: ${t.error.hint}`),{stdout:``,stderr:n.join(`
1530
1534
  `)+`
1531
- `,exitCode:1}}function QO(e,t){return{stdout:[`✓ ${e}`,` runtime: ${YO(t.runtime,!0)}`,` models: ${t.models.length}`,...XO(t.models)].join(`
1535
+ `,exitCode:1}}function uk(e,t){return{stdout:[`✓ ${e}`,` runtime: ${sk(t.runtime,!0)}`,` models: ${t.models.length}`,...ck(t.models)].join(`
1532
1536
  `)+`
1533
- `,stderr:``,exitCode:0}}function $O(e,t){let n=t.models.length;return{stdout:[`✓ ${e} (${YO(t.runtime,!1)})`,` Saved ${n} model${n===1?``:`s`} to Settings:`,...XO(t.models)].join(`
1537
+ `,stderr:``,exitCode:0}}function dk(e,t){let n=t.models.length;return{stdout:[`✓ ${e} (${sk(t.runtime,!1)})`,` Saved ${n} model${n===1?``:`s`} to Settings:`,...ck(t.models)].join(`
1534
1538
  `)+`
1535
- `,stderr:``,exitCode:0}}function ek(){return x(qO,async e=>{if(e.includes(`--help`)||e.includes(`-h`))return{stdout:JO(),stderr:``,exitCode:0};let{getApiKeyForProvider:t,getRawApiKeyForProvider:n,getBaseUrlForProvider:r,addAccount:i}=await import(`./account-store-CDXeAYze.js`).then(e=>e.t),{verifyConnection:a}=await import(`./local-llm-B6veJ_ef.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(qO);if(!s)return{stdout:``,stderr:`Local LLM is not configured. Open Settings → Providers → Local LLM and set a base URL.
1536
- `,exitCode:1};let c=await a(s,t(qO)??void 0);if(!c.ok)return ZO(s,c);if(o===`discover`){let e=n(qO)??``;return i(qO,e,s,c.models.join(`, `)),$O(s,c)}return QO(s,c)})}function tk(){return{stdout:`usage: man <topic>
1539
+ `,stderr:``,exitCode:0}}function fk(){return x(ak,async e=>{if(e.includes(`--help`)||e.includes(`-h`))return{stdout:ok(),stderr:``,exitCode:0};let{getApiKeyForProvider:t,getRawApiKeyForProvider:n,getBaseUrlForProvider:r,addAccount:i}=await import(`./account-store-D0IR3DBZ.js`).then(e=>e.t),{verifyConnection:a}=await import(`./local-llm-_wo-fuir.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(ak);if(!s)return{stdout:``,stderr:`Local LLM is not configured. Open Settings → Providers → Local LLM and set a base URL.
1540
+ `,exitCode:1};let c=await a(s,t(ak)??void 0);if(!c.ok)return lk(s,c);if(o===`discover`){let e=n(ak)??``;return i(ak,e,s,c.models.join(`, `)),dk(s,c)}return uk(s,c)})}function pk(){return{stdout:`usage: man <topic>
1537
1541
 
1538
1542
  Fetches documentation for a given topic from sliccy.com.
1539
- `,stderr:``,exitCode:0}}function nk(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 rk(){let e=ie();return x(`man`,async t=>{if(t.includes(`--help`)||t.includes(`-h`))return tk();if(t.length===0)return{stdout:``,stderr:`What manual page do you want?
1543
+ `,stderr:``,exitCode:0}}function mk(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 hk(){let e=ie();return x(`man`,async t=>{if(t.includes(`--help`)||t.includes(`-h`))return pk();if(t.length===0)return{stdout:``,stderr:`What manual page do you want?
1540
1544
  For example, try 'man commands'.
1541
- `,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:nk(new TextDecoder(`utf-8`).decode(t.body))+`
1542
- `,stderr:``,exitCode:0}}catch(e){return{stdout:``,stderr:`man: ${e instanceof Error?e.message:String(e)}\n`,exitCode:1}}})}const ik=[`--silent`,`-s`,`--interactive`,`-i`],ak=e(`mcp-command`),ok=`/workspace/.mcp/aliases`;function U(e){return{stdout:e,stderr:``,exitCode:0}}function W(e,t=1){return{stdout:``,stderr:`${e}\n`,exitCode:t}}function sk(e){return W(`mcp: ${e}`)}function ck(){return`usage: mcp <command> [args]
1545
+ `,exitCode:1};let n=t.join(`-`),r=`https://www.sliccy.com/man/${n}.plain.html`;try{let t=await e(r,{method:`GET`});return t.status===404?{stdout:``,stderr:`No manual entry for ${n}\n`,exitCode:1}:t.status<200||t.status>=300?{stdout:``,stderr:`man: failed to fetch manual page for ${n}: ${t.status} ${t.statusText}\n`,exitCode:1}:{stdout:mk(new TextDecoder(`utf-8`).decode(t.body))+`
1546
+ `,stderr:``,exitCode:0}}catch(e){return{stdout:``,stderr:`man: ${e instanceof Error?e.message:String(e)}\n`,exitCode:1}}})}const gk=[`--silent`,`-s`,`--interactive`,`-i`],_k=e(`mcp-command`),vk=`/workspace/.mcp/aliases`;function U(e){return{stdout:e,stderr:``,exitCode:0}}function W(e,t=1){return{stdout:``,stderr:`${e}\n`,exitCode:t}}function yk(e){return W(`mcp: ${e}`)}function bk(){return`usage: mcp <command> [args]
1543
1547
 
1544
1548
  Commands:
1545
1549
  add <url> <name> Register an MCP server. Runs OAuth if required.
@@ -1561,7 +1565,7 @@ Examples:
1561
1565
  mcp search forecast
1562
1566
  mcp auth weather
1563
1567
  mcp delete weather
1564
- `}function lk(e={}){return x(`mcp`,async t=>{if(t.length===0||t[0]===`--help`||t[0]===`-h`)return U(ck());let n=t[0],r=t.slice(1);try{switch(n){case`add`:return await uk(r,e);case`list`:case`ls`:return await fk(r,e);case`delete`:case`rm`:return await gk(r,e);case`invoke`:return await _k(r,e);case`search`:return await mk(r,e);case`refresh`:return await Lk(r,e);case`auth`:return await Rk(r,e);default:return W(`mcp: unknown subcommand "${n}" (try \`mcp --help\`)`)}}catch(e){let t=e instanceof Error?e.message:String(e);return ak.error(`mcp subcommand failed`,{sub:n,error:t}),e instanceof $i?W(`mcp ${n}: ${t}`,124):W(`mcp ${n}: ${t}`)}})}async function uk(e,t){if(C(e))return U(`usage: mcp add <url> <name>
1568
+ `}function xk(e={}){return x(`mcp`,async t=>{if(t.length===0||t[0]===`--help`||t[0]===`-h`)return U(bk());let n=t[0],r=t.slice(1);try{switch(n){case`add`:return await Sk(r,e);case`list`:case`ls`:return await wk(r,e);case`delete`:case`rm`:return await Ok(r,e);case`invoke`:return await kk(r,e);case`search`:return await Ek(r,e);case`refresh`:return await Yk(r,e);case`auth`:return await Xk(r,e);default:return W(`mcp: unknown subcommand "${n}" (try \`mcp --help\`)`)}}catch(e){let t=e instanceof Error?e.message:String(e);return _k.error(`mcp subcommand failed`,{sub:n,error:t}),e instanceof $i?W(`mcp ${n}: ${t}`,124):W(`mcp ${n}: ${t}`)}})}async function Sk(e,t){if(C(e))return U(`usage: mcp add <url> <name>
1565
1569
 
1566
1570
  Probes <url> with an unauthenticated MCP \`initialize\`. If the server
1567
1571
  returns 401, runs OAuth discovery → dynamic client registration → PKCE
@@ -1570,20 +1574,20 @@ authorization-code flow, stores the access token, and retries.
1570
1574
  On success, the server is persisted to /workspace/.mcp/servers.json and
1571
1575
  an alias shim is written to /workspace/.mcp/aliases/<name>.jsh so the
1572
1576
  short name resolves on the PATH.
1573
- `);let n=S(e,{});if(`error`in n)return sk(n.error);if(n.positionals.length<2)return W(`mcp add: expected <url> <name>`);let[r,i]=n.positionals;if(!/^https?:\/\//i.test(r))return W(`mcp add: invalid URL "${r}" (must start with http:// or https://)`);if(!/^[A-Za-z][A-Za-z0-9_-]*$/.test(i))return W(`mcp add: invalid name "${i}" (letters, digits, _ and - only; must start with a letter)`);let{getServer:a,setServer:o}=await import(`./store-BuVY3ZgP.js`).then(e=>e.r);if(await a(i,t.fs))return W(`mcp add: a server named "${i}" already exists`);let{McpClient:s,McpAuthRequiredError:c}=await import(`./client-GY8xUpw7.js`).then(e=>e.n),l=new s({url:r,fetchImpl:t.fetchImpl}),u;try{await l.initialize()}catch(e){if(!(e instanceof c))throw e;u=await dk(r,i,e.resourceMetadataUrl,t),l=new s({url:r,fetchImpl:t.fetchImpl,getAuthHeader:()=>Bk(i)}),await l.initialize()}let d=await l.toolsList(),f=await l.appsList(),p=new Date().toISOString();await o(i,{url:r,protocolVersion:l.getNegotiatedProtocolVersion(),tools:d,apps:f,addedAt:p,lastRefreshedAt:p,...u?{auth:u}:{}},t.fs),await Gk(i,t);let m=await Jk(i,f,t);if(u){let{registerMcpProvider:e}=await import(`./provider-CP2FrBD1.js`);e({name:i,serverUrl:r,auth:u})}return U([`Added MCP server "${i}" → ${r}`,` tools: ${d.length}, apps: ${f.length} (${m} sprinkle${m===1?``:`s`})`,` alias: ${ok}/${i}.jsh`,u?` auth: oauth (provider mcp:${i})`:` auth: none`].join(`
1577
+ `);let n=S(e,{});if(`error`in n)return yk(n.error);if(n.positionals.length<2)return W(`mcp add: expected <url> <name>`);let[r,i]=n.positionals;if(!/^https?:\/\//i.test(r))return W(`mcp add: invalid URL "${r}" (must start with http:// or https://)`);if(!/^[A-Za-z][A-Za-z0-9_-]*$/.test(i))return W(`mcp add: invalid name "${i}" (letters, digits, _ and - only; must start with a letter)`);let{getServer:a,setServer:o}=await import(`./store-CKVmFL1z.js`).then(e=>e.r);if(await a(i,t.fs))return W(`mcp add: a server named "${i}" already exists`);let{McpClient:s,McpAuthRequiredError:c}=await import(`./client-GY8xUpw7.js`).then(e=>e.n),l=new s({url:r,fetchImpl:t.fetchImpl}),u;try{await l.initialize()}catch(e){if(!(e instanceof c))throw e;u=await Ck(r,i,e.resourceMetadataUrl,t),l=new s({url:r,fetchImpl:t.fetchImpl,getAuthHeader:()=>Qk(i)}),await l.initialize()}let d=await l.toolsList(),f=await l.appsList(),p=new Date().toISOString();await o(i,{url:r,protocolVersion:l.getNegotiatedProtocolVersion(),tools:d,apps:f,addedAt:p,lastRefreshedAt:p,...u?{auth:u}:{}},t.fs),await rA(i,t);let m=await oA(i,f,t);if(u){let{registerMcpProvider:e}=await import(`./provider-CXhkDb-S.js`);e({name:i,serverUrl:r,auth:u})}return U([`Added MCP server "${i}" → ${r}`,` tools: ${d.length}, apps: ${f.length} (${m} sprinkle${m===1?``:`s`})`,` alias: ${vk}/${i}.jsh`,u?` auth: oauth (provider mcp:${i})`:` auth: none`].join(`
1574
1578
  `)+`
1575
- `)}async function dk(e,t,n,r){let{discoverAuth:i,dynamicRegister:a,runAuthFlow:o}=await import(`./oauth-DR6XMm1M.js`),{saveOAuthAccount:s}=await import(`./account-store-CDXeAYze.js`).then(e=>e.t),c=await Hk(r.oauthFetchImpl),l=r.oauthLauncher??await Vk(),u=await i(e,n,c);ak.debug(`MCP OAuth discovery succeeded`,{name:t,serverUrl:e,discoveryPath:u.discoveryPath,issuer:u.issuer});let d=await ea(_e()),f=await a(u,d,c),p=u.supportedScopes&&u.supportedScopes.length>0?u.supportedScopes.join(` `):void 0,m=await o({asMetadata:u,clientId:f.clientId,scope:p,redirectUri:d,launcher:l,fetchImpl:c}),h=`mcp:${t}`;return await s({providerId:h,accessToken:m.accessToken,refreshToken:m.refreshToken,tokenExpiresAt:m.expiresAt,scopes:m.scope}),{providerId:h,authorizationServer:u.issuer,clientId:f.clientId,redirectUri:d,scope:m.scope??p,registrationClientUri:f.registrationClientUri}}async function fk(e,t){if(C(e))return U(`usage: mcp list
1576
- `);let n=S(e,{});if(`error`in n)return sk(n.error);let{ensureAllMcpProvidersRegistered:r}=await import(`./provider-CP2FrBD1.js`);await r();let{listServers:i}=await import(`./store-BuVY3ZgP.js`).then(e=>e.r),a=await i(t.fs),o=Object.keys(a).sort();if(o.length===0)return U("No MCP servers configured. Use `mcp add <url> <name>`.\n");let s=[[`NAME`,`URL`,`AUTH`,`TOOLS`,`APPS`,`ADDED`]];for(let e of o){let t=a[e];s.push([e,t.url,t.auth?`yes`:`no`,String(t.tools?.length??0),String(t.apps?.length??0),t.addedAt?t.addedAt.slice(0,10):`-`])}return U(pk(s))}function pk(e){let t=e[0].map((t,n)=>e.reduce((e,t)=>Math.max(e,(t[n]??``).length),0));return e.map(e=>e.map((e,n)=>e.padEnd(t[n])).join(` `).trimEnd()).join(`
1579
+ `)}async function Ck(e,t,n,r){let{discoverAuth:i,dynamicRegister:a,runAuthFlow:o}=await import(`./oauth-DR6XMm1M.js`),{saveOAuthAccount:s}=await import(`./account-store-D0IR3DBZ.js`).then(e=>e.t),c=await eA(r.oauthFetchImpl),l=r.oauthLauncher??await $k(),u=await i(e,n,c);_k.debug(`MCP OAuth discovery succeeded`,{name:t,serverUrl:e,discoveryPath:u.discoveryPath,issuer:u.issuer});let d=await ea(_e()),f=await a(u,d,c),p=u.supportedScopes&&u.supportedScopes.length>0?u.supportedScopes.join(` `):void 0,m=await o({asMetadata:u,clientId:f.clientId,scope:p,redirectUri:d,launcher:l,fetchImpl:c}),h=`mcp:${t}`;return await s({providerId:h,accessToken:m.accessToken,refreshToken:m.refreshToken,tokenExpiresAt:m.expiresAt,scopes:m.scope}),{providerId:h,authorizationServer:u.issuer,clientId:f.clientId,redirectUri:d,scope:m.scope??p,registrationClientUri:f.registrationClientUri}}async function wk(e,t){if(C(e))return U(`usage: mcp list
1580
+ `);let n=S(e,{});if(`error`in n)return yk(n.error);let{ensureAllMcpProvidersRegistered:r}=await import(`./provider-CXhkDb-S.js`);await r();let{listServers:i}=await import(`./store-CKVmFL1z.js`).then(e=>e.r),a=await i(t.fs),o=Object.keys(a).sort();if(o.length===0)return U("No MCP servers configured. Use `mcp add <url> <name>`.\n");let s=[[`NAME`,`URL`,`AUTH`,`TOOLS`,`APPS`,`ADDED`]];for(let e of o){let t=a[e];s.push([e,t.url,t.auth?`yes`:`no`,String(t.tools?.length??0),String(t.apps?.length??0),t.addedAt?t.addedAt.slice(0,10):`-`])}return U(Tk(s))}function Tk(e){let t=e[0].map((t,n)=>e.reduce((e,t)=>Math.max(e,(t[n]??``).length),0));return e.map(e=>e.map((e,n)=>e.padEnd(t[n])).join(` `).trimEnd()).join(`
1577
1581
  `)+`
1578
- `}async function mk(e,t){if(C(e))return U(`usage: mcp search <query>
1582
+ `}async function Ek(e,t){if(C(e))return U(`usage: mcp search <query>
1579
1583
 
1580
1584
  Case-insensitive substring search across the cached tools of every
1581
1585
  registered MCP server. Matches tool name OR description and prints a
1582
1586
  table of (server, tool, description, match-field) rows.
1583
- `);let n=S(e,{});if(`error`in n)return sk(n.error);if(n.positionals.length===0)return W(`mcp search: expected <query>`);let r=n.positionals[0],i=r.toLowerCase(),{ensureAllMcpProvidersRegistered:a}=await import(`./provider-CP2FrBD1.js`);await a();let{listServers:o}=await import(`./store-BuVY3ZgP.js`).then(e=>e.r),s=await o(t.fs),c=Object.keys(s).sort();if(c.length===0)return U("No MCP servers configured. Use `mcp add <url> <name>`.\n");let l=[];for(let e of c){let t=s[e].tools??[];for(let n of t){let t=n.description??``,r=n.name.toLowerCase().includes(i),a=t.toLowerCase().includes(i);if(!r&&!a)continue;let o=r&&a?`name+description`:r?`name`:`description`;l.push({server:e,tool:n.name,description:t,match:o})}}if(l.length===0)return U(`No tools matched "${r}".\n`);l.sort((e,t)=>e.server===t.server?e.tool.localeCompare(t.tool):e.server.localeCompare(t.server));let u=[[`SERVER`,`TOOL`,`DESCRIPTION`,`MATCH`]];for(let e of l)u.push([e.server,e.tool,hk(e.description),e.match]);return U(pk(u))}function hk(e){if(!e)return``;let t=e.replace(/\s+/g,` `).trim();return t.length<=60?t:t.slice(0,59)+`…`}async function gk(e,t){if(e.length===0||C(e))return e.length===0?W(`mcp delete: expected <name>`):U(`usage: mcp delete <name>
1584
- `);let n=S(e,{});if(`error`in n)return sk(n.error);let r=n.positionals[0];if(!r)return W(`mcp delete: expected <name>`);let{ensureMcpProviderRegistered:i,removeMcpProvider:a}=await import(`./provider-CP2FrBD1.js`);await i(r);let{deleteServer:o}=await import(`./store-BuVY3ZgP.js`).then(e=>e.r),s=await o(r,t.fs);await Kk(r,t),await qk(r,t);let c=`mcp:${r}`,l=!1;try{let{removeAccount:e,getAccounts:t}=await import(`./account-store-CDXeAYze.js`).then(e=>e.t);t().some(e=>e.providerId===c)&&(await e(c),l=!0)}catch(e){ak.warn(`mcp delete: OAuth removal failed`,{providerId:c,error:e instanceof Error?e.message:String(e)})}let u=a(r);return!s&&!l&&!u?W(`mcp delete: no server, alias, or account found for "${r}"`):U([`Removed MCP server "${r}"`,` servers.json: ${s?`removed`:`not present`}`,` alias: cleaned`,` sprinkles: cleaned`,` oauth: ${l?`removed`:`not present`}`,` provider: ${u?`unregistered`:`not registered`}`].join(`
1587
+ `);let n=S(e,{});if(`error`in n)return yk(n.error);if(n.positionals.length===0)return W(`mcp search: expected <query>`);let r=n.positionals[0],i=r.toLowerCase(),{ensureAllMcpProvidersRegistered:a}=await import(`./provider-CXhkDb-S.js`);await a();let{listServers:o}=await import(`./store-CKVmFL1z.js`).then(e=>e.r),s=await o(t.fs),c=Object.keys(s).sort();if(c.length===0)return U("No MCP servers configured. Use `mcp add <url> <name>`.\n");let l=[];for(let e of c){let t=s[e].tools??[];for(let n of t){let t=n.description??``,r=n.name.toLowerCase().includes(i),a=t.toLowerCase().includes(i);if(!r&&!a)continue;let o=r&&a?`name+description`:r?`name`:`description`;l.push({server:e,tool:n.name,description:t,match:o})}}if(l.length===0)return U(`No tools matched "${r}".\n`);l.sort((e,t)=>e.server===t.server?e.tool.localeCompare(t.tool):e.server.localeCompare(t.server));let u=[[`SERVER`,`TOOL`,`DESCRIPTION`,`MATCH`]];for(let e of l)u.push([e.server,e.tool,Dk(e.description),e.match]);return U(Tk(u))}function Dk(e){if(!e)return``;let t=e.replace(/\s+/g,` `).trim();return t.length<=60?t:t.slice(0,59)+`…`}async function Ok(e,t){if(e.length===0||C(e))return e.length===0?W(`mcp delete: expected <name>`):U(`usage: mcp delete <name>
1588
+ `);let n=S(e,{});if(`error`in n)return yk(n.error);let r=n.positionals[0];if(!r)return W(`mcp delete: expected <name>`);let{ensureMcpProviderRegistered:i,removeMcpProvider:a}=await import(`./provider-CXhkDb-S.js`);await i(r);let{deleteServer:o}=await import(`./store-CKVmFL1z.js`).then(e=>e.r),s=await o(r,t.fs);await iA(r,t),await aA(r,t);let c=`mcp:${r}`,l=!1;try{let{removeAccount:e,getAccounts:t}=await import(`./account-store-D0IR3DBZ.js`).then(e=>e.t);t().some(e=>e.providerId===c)&&(await e(c),l=!0)}catch(e){_k.warn(`mcp delete: OAuth removal failed`,{providerId:c,error:e instanceof Error?e.message:String(e)})}let u=a(r);return!s&&!l&&!u?W(`mcp delete: no server, alias, or account found for "${r}"`):U([`Removed MCP server "${r}"`,` servers.json: ${s?`removed`:`not present`}`,` alias: cleaned`,` sprinkles: cleaned`,` oauth: ${l?`removed`:`not present`}`,` provider: ${u?`unregistered`:`not registered`}`].join(`
1585
1589
  `)+`
1586
- `)}async function _k(e,t){if(e.length===0)return W(`mcp invoke: expected <name>`);if(C(e.slice(0,1)))return U(bk());let n=S([e[0]],{});if(`error`in n)return sk(n.error);let r=n.positionals[0];if(!r)return W(`mcp invoke: expected <name>`);let i=e.slice(1),{ensureMcpProviderRegistered:a}=await import(`./provider-CP2FrBD1.js`);await a(r);let{getServer:o}=await import(`./store-BuVY3ZgP.js`).then(e=>e.r),s=await o(r,t.fs);if(!s)return W(`mcp invoke: unknown server "${r}" (run \`mcp add <url> ${r}\` first)`);let c=s.tools??[];if(i.length===0||C(i.slice(0,1)))return U(xk(r,s,c));let l=S([i[0]],{});if(`error`in l)return sk(l.error);let u=l.positionals[0];if(!u)return W(`mcp invoke: expected <tool>`);let d=c.find(e=>e.name===u);if(!d)return W(`mcp invoke: unknown tool "${u}" on "${r}" (run \`${r}\` to list tools)`);let{timeoutMs:f,remaining:p,warnings:m}=vk(i.slice(1));if(C(p))return U(Ck(r,d));let h=wk(p,d.inputSchema);if(!h.ok)return W(`mcp invoke: ${h.error}`);let{McpClient:g}=await import(`./client-GY8xUpw7.js`).then(e=>e.n),_=new g({url:s.url,fetchImpl:t.fetchImpl,headers:s.headers,getAuthHeader:s.auth?()=>Bk(r):void 0,...f===void 0?{}:{timeoutMs:f}});await _.initialize();let v=Ik(await _.toolsCall(u,h.value));return m.length>0&&(v.stderr=m.map(e=>`${e}\n`).join(``)+v.stderr),v}function vk(e){let t=[],n=[],r,i=0;for(;i<e.length;){let a=e[i];if(a.startsWith(`--timeout=`)){let e=yk(a.slice(10));e.ok?r=e.value:n.push(e.error),i+=1;continue}if(a===`--timeout`){let t=e[i+1];if(t===void 0||t.startsWith(`--`)){n.push(`mcp invoke: --timeout requires a value (got ${t===void 0?`nothing`:`"${t}"`}); using default.`),i+=1;continue}let a=yk(t);a.ok?r=a.value:n.push(a.error),i+=2;continue}t.push(a),i+=1}return{timeoutMs:r,remaining:t,warnings:n}}function yk(e){if(!/^-?\d+$/.test(e))return{ok:!1,error:`mcp invoke: invalid --timeout value "${e}" (expected positive integer seconds); using default.`};let t=Number(e);return!Number.isFinite(t)||t<1?{ok:!1,error:`mcp invoke: invalid --timeout value "${e}" (must be >= 1 second); using default.`}:{ok:!0,value:t*1e3}}function bk(){return`usage: mcp invoke <name> [tool] [--timeout <seconds>] [--flag value …]
1590
+ `)}async function kk(e,t){if(e.length===0)return W(`mcp invoke: expected <name>`);if(C(e.slice(0,1)))return U(Mk());let n=S([e[0]],{});if(`error`in n)return yk(n.error);let r=n.positionals[0];if(!r)return W(`mcp invoke: expected <name>`);let i=e.slice(1),{ensureMcpProviderRegistered:a}=await import(`./provider-CXhkDb-S.js`);await a(r);let{getServer:o}=await import(`./store-CKVmFL1z.js`).then(e=>e.r),s=await o(r,t.fs);if(!s)return W(`mcp invoke: unknown server "${r}" (run \`mcp add <url> ${r}\` first)`);let c=s.tools??[];if(i.length===0||C(i.slice(0,1)))return U(Nk(r,s,c));let l=S([i[0]],{});if(`error`in l)return yk(l.error);let u=l.positionals[0];if(!u)return W(`mcp invoke: expected <tool>`);let d=c.find(e=>e.name===u);if(!d)return W(`mcp invoke: unknown tool "${u}" on "${r}" (run \`${r}\` to list tools)`);let{timeoutMs:f,remaining:p,warnings:m}=Ak(i.slice(1));if(C(p))return U(Fk(r,d));let h=Ik(p,d.inputSchema);if(!h.ok)return W(`mcp invoke: ${h.error}`);let{McpClient:g}=await import(`./client-GY8xUpw7.js`).then(e=>e.n),_=new g({url:s.url,fetchImpl:t.fetchImpl,headers:s.headers,getAuthHeader:s.auth?()=>Qk(r):void 0,...f===void 0?{}:{timeoutMs:f}});await _.initialize();let v=Jk(await _.toolsCall(u,h.value));return m.length>0&&(v.stderr=m.map(e=>`${e}\n`).join(``)+v.stderr),v}function Ak(e){let t=[],n=[],r,i=0;for(;i<e.length;){let a=e[i];if(a.startsWith(`--timeout=`)){let e=jk(a.slice(10));e.ok?r=e.value:n.push(e.error),i+=1;continue}if(a===`--timeout`){let t=e[i+1];if(t===void 0||t.startsWith(`--`)){n.push(`mcp invoke: --timeout requires a value (got ${t===void 0?`nothing`:`"${t}"`}); using default.`),i+=1;continue}let a=jk(t);a.ok?r=a.value:n.push(a.error),i+=2;continue}t.push(a),i+=1}return{timeoutMs:r,remaining:t,warnings:n}}function jk(e){if(!/^-?\d+$/.test(e))return{ok:!1,error:`mcp invoke: invalid --timeout value "${e}" (expected positive integer seconds); using default.`};let t=Number(e);return!Number.isFinite(t)||t<1?{ok:!1,error:`mcp invoke: invalid --timeout value "${e}" (must be >= 1 second); using default.`}:{ok:!0,value:t*1e3}}function Mk(){return`usage: mcp invoke <name> [tool] [--timeout <seconds>] [--flag value …]
1587
1591
 
1588
1592
  mcp invoke <name> List tools on <name>.
1589
1593
  mcp invoke <name> <tool> --help Show flags for <tool>.
@@ -1603,20 +1607,20 @@ Arguments are coerced according to the tool's JSON Schema:
1603
1607
  array of objects) is parsed as JSON, e.g. \`--params '{"url":"…"}'\`.
1604
1608
  Nested fields can be set with dotted flags (\`--params.url …\`).
1605
1609
  Unknown \`--flags\` exit non-zero instead of being dropped.
1606
- `}function xk(e,t,n){let r=[];if(r.push(`MCP server "${e}" → ${t.url}`),n.length===0)r.push(" (no tools cached — run `mcp refresh "+e+"`)");else{r.push(``),r.push(`Tools:`);let t=n.reduce((e,t)=>Math.max(e,t.name.length),0);for(let e of n)r.push(` ${e.name.padEnd(t)} ${e.description??``}`.trimEnd());r.push(``),r.push(`Run \`${e} <tool> --help\` for tool-specific flags.`)}return r.join(`
1610
+ `}function Nk(e,t,n){let r=[];if(r.push(`MCP server "${e}" → ${t.url}`),n.length===0)r.push(" (no tools cached — run `mcp refresh "+e+"`)");else{r.push(``),r.push(`Tools:`);let t=n.reduce((e,t)=>Math.max(e,t.name.length),0);for(let e of n)r.push(` ${e.name.padEnd(t)} ${e.description??``}`.trimEnd());r.push(``),r.push(`Run \`${e} <tool> --help\` for tool-specific flags.`)}return r.join(`
1607
1611
  `)+`
1608
- `}function Sk(e){return e??{}}function Ck(e,t){let n=Sk(t.inputSchema),r=n.properties??{},i=new Set(Array.isArray(n.required)?n.required:[]),a=[];a.push(`usage: ${e} ${t.name} [flags]`),t.description&&(a.push(``),a.push(t.description));let o=Object.keys(r);if(o.length===0)return a.push(``),a.push(`(no flags declared)`),a.join(`
1612
+ `}function Pk(e){return e??{}}function Fk(e,t){let n=Pk(t.inputSchema),r=n.properties??{},i=new Set(Array.isArray(n.required)?n.required:[]),a=[];a.push(`usage: ${e} ${t.name} [flags]`),t.description&&(a.push(``),a.push(t.description));let o=Object.keys(r);if(o.length===0)return a.push(``),a.push(`(no flags declared)`),a.join(`
1609
1613
  `)+`
1610
1614
  `;a.push(``),a.push(`Flags:`);let s=o.map(e=>` --${e} <${r[e]?.type??`string`}>`),c=s.reduce((e,t)=>Math.max(e,t.length),0);for(let e=0;e<o.length;e++){let t=o[e],n=r[t]?.description??``,l=i.has(t)?` (required)`:``;a.push(`${s[e].padEnd(c)} ${n}${l}`.trimEnd())}return a.join(`
1611
1615
  `)+`
1612
- `}function wk(e,t){let n=Sk(t),r=n.properties??{},i=new Set(Array.isArray(n.required)?n.required:[]),a=Ak(),o=0;for(;o<e.length;){let t=Tk(e,o,r,a);if(!t.ok)return t;o=t.nextIndex}for(let e of i)if(!Object.hasOwn(a,e))return{ok:!1,error:`missing required flag --${e}`};return{ok:!0,value:a}}function Tk(e,t,n,r){let i=e[t];if(!i.startsWith(`--`))return{ok:!1,error:`unexpected positional argument "${i}"`};let{key:a,inlineValue:o}=Nk(i),s=Ek(a,n);if(!s.ok)return s;let{rootKey:c,dottedPath:l,meta:u}=s,d=u.type,f=d??`string`,p=f===`array`,m=(p?u.items?.type:void 0)??`string`;if(l&&d!==void 0&&d!==`object`)return{ok:!1,error:`unknown flag: --${a}`};let h=Dk(e,t,a,o,f,l);if(!h.ok)return h;if(h.bareBoolean)return r[c]=!0,{ok:!0,nextIndex:h.nextIndex};let g=l?`string`:p?m:f,_=Pk(h.raw,g);if(!_.ok)return{ok:!1,error:`--${a}: ${_.error}`};let v=Ok(r,c,l,_.value,p);return v.ok?{ok:!0,nextIndex:h.nextIndex}:v}function Ek(e,t){if(Object.hasOwn(t,e))return{ok:!0,rootKey:e,dottedPath:null,meta:t[e]??{}};let n=e.indexOf(`.`);if(n<=0)return{ok:!1,error:`unknown flag: --${e}`};let r=e.slice(0,n),i=e.slice(n+1);if(!Object.hasOwn(t,r)||i.length===0)return{ok:!1,error:`unknown flag: --${e}`};let a=i.split(`.`);return jk(r)||a.some(e=>e.length===0||jk(e))?{ok:!1,error:`unknown flag: --${e}`}:{ok:!0,rootKey:r,dottedPath:a,meta:t[r]??{}}}function Dk(e,t,n,r,i,a){if(r!==void 0)return{ok:!0,raw:r,nextIndex:t+1,bareBoolean:!1};let o=e[t+1];return!a&&i===`boolean`&&(o===void 0||o.startsWith(`--`))?{ok:!0,raw:``,nextIndex:t+1,bareBoolean:!0}:o===void 0?{ok:!1,error:`flag --${n} requires a value`}:{ok:!0,raw:o,nextIndex:t+2,bareBoolean:!1}}function Ok(e,t,n,r,i){if(n)return kk(e,t,n,r);if(i){let n=e[t];return Array.isArray(n)?n.push(r):e[t]=[r],{ok:!0}}let a=e[t];return Mk(a)&&Mk(r)?(Object.assign(a,r),{ok:!0}):(e[t]=r,{ok:!0})}function kk(e,t,n,r){if(jk(t)||n.some(e=>e.length===0||jk(e)))return{ok:!1,error:`unknown flag: --${t}.${n.join(`.`)}`};let i=Object.hasOwn(e,t)?e[t]:void 0;if(i===void 0)e[t]=Ak();else if(!Mk(i))return{ok:!1,error:`--${t}: cannot nest into a ${typeof i} value`};let a=e[t];for(let e=0;e<n.length-1;e++){let r=n[e],i=Object.hasOwn(a,r)?a[r]:void 0;if(i===void 0)a[r]=Ak();else if(!Mk(i))return{ok:!1,error:`--${t}.${n.slice(0,e+1).join(`.`)}: cannot nest into a ${typeof i} value`};a=a[r]}return a[n[n.length-1]]=r,{ok:!0}}function Ak(){return Object.create(null)}function jk(e){return e===`__proto__`||e===`prototype`||e===`constructor`}function Mk(e){return typeof e==`object`&&!!e&&!Array.isArray(e)&&e!==Object.prototype}function Nk(e){let t=e.indexOf(`=`);return t>2?{key:e.slice(2,t),inlineValue:e.slice(t+1)}:{key:e.slice(2),inlineValue:void 0}}function Pk(e,t){switch(t){case`integer`:return/^-?\d+$/.test(e)?{ok:!0,value:Number(e)}:{ok:!1,error:`expected integer, got "${e}"`};case`number`:{let t=Number(e);return Number.isFinite(t)?{ok:!0,value:t}:{ok:!1,error:`expected number, got "${e}"`}}case`boolean`:return e===`true`||e===`1`||e===`yes`?{ok:!0,value:!0}:e===`false`||e===`0`||e===`no`?{ok:!0,value:!1}:{ok:!1,error:`expected boolean, got "${e}"`};case`object`:return Fk(e);default:return{ok:!0,value:e}}}function Fk(e){let t;try{t=JSON.parse(e)}catch{return{ok:!1,error:`expected object JSON, got "${e}"`}}return Mk(t)?{ok:!0,value:t}:{ok:!1,error:`expected object JSON, got "${e}"`}}function Ik(e){let t=e??{},n=Array.isArray(t.content)?t.content:[],r=[];for(let e of n)if(!(!e||typeof e!=`object`))switch(e.type){case`text`:typeof e.text==`string`&&r.push(e.text);break;case`image`:r.push(`[image: ${e.mimeType??`unknown mime`}]`);break;case`resource`:{let t=e.resource?.uri??e.uri??`unknown uri`;r.push(`[resource: ${t}]`);break}default:r.push(`[${e.type??`unknown`}]`)}let i=r.join(`
1616
+ `}function Ik(e,t){let n=Pk(t),r=n.properties??{},i=new Set(Array.isArray(n.required)?n.required:[]),a=Hk(),o=0;for(;o<e.length;){let t=Lk(e,o,r,a);if(!t.ok)return t;o=t.nextIndex}for(let e of i)if(!Object.hasOwn(a,e))return{ok:!1,error:`missing required flag --${e}`};return{ok:!0,value:a}}function Lk(e,t,n,r){let i=e[t];if(!i.startsWith(`--`))return{ok:!1,error:`unexpected positional argument "${i}"`};let{key:a,inlineValue:o}=Gk(i),s=Rk(a,n);if(!s.ok)return s;let{rootKey:c,dottedPath:l,meta:u}=s,d=u.type,f=d??`string`,p=f===`array`,m=(p?u.items?.type:void 0)??`string`;if(l&&d!==void 0&&d!==`object`)return{ok:!1,error:`unknown flag: --${a}`};let h=zk(e,t,a,o,f,l);if(!h.ok)return h;if(h.bareBoolean)return r[c]=!0,{ok:!0,nextIndex:h.nextIndex};let g=l?`string`:p?m:f,_=Kk(h.raw,g);if(!_.ok)return{ok:!1,error:`--${a}: ${_.error}`};let v=Bk(r,c,l,_.value,p);return v.ok?{ok:!0,nextIndex:h.nextIndex}:v}function Rk(e,t){if(Object.hasOwn(t,e))return{ok:!0,rootKey:e,dottedPath:null,meta:t[e]??{}};let n=e.indexOf(`.`);if(n<=0)return{ok:!1,error:`unknown flag: --${e}`};let r=e.slice(0,n),i=e.slice(n+1);if(!Object.hasOwn(t,r)||i.length===0)return{ok:!1,error:`unknown flag: --${e}`};let a=i.split(`.`);return Uk(r)||a.some(e=>e.length===0||Uk(e))?{ok:!1,error:`unknown flag: --${e}`}:{ok:!0,rootKey:r,dottedPath:a,meta:t[r]??{}}}function zk(e,t,n,r,i,a){if(r!==void 0)return{ok:!0,raw:r,nextIndex:t+1,bareBoolean:!1};let o=e[t+1];return!a&&i===`boolean`&&(o===void 0||o.startsWith(`--`))?{ok:!0,raw:``,nextIndex:t+1,bareBoolean:!0}:o===void 0?{ok:!1,error:`flag --${n} requires a value`}:{ok:!0,raw:o,nextIndex:t+2,bareBoolean:!1}}function Bk(e,t,n,r,i){if(n)return Vk(e,t,n,r);if(i){let n=e[t];return Array.isArray(n)?n.push(r):e[t]=[r],{ok:!0}}let a=e[t];return Wk(a)&&Wk(r)?(Object.assign(a,r),{ok:!0}):(e[t]=r,{ok:!0})}function Vk(e,t,n,r){if(Uk(t)||n.some(e=>e.length===0||Uk(e)))return{ok:!1,error:`unknown flag: --${t}.${n.join(`.`)}`};let i=Object.hasOwn(e,t)?e[t]:void 0;if(i===void 0)e[t]=Hk();else if(!Wk(i))return{ok:!1,error:`--${t}: cannot nest into a ${typeof i} value`};let a=e[t];for(let e=0;e<n.length-1;e++){let r=n[e],i=Object.hasOwn(a,r)?a[r]:void 0;if(i===void 0)a[r]=Hk();else if(!Wk(i))return{ok:!1,error:`--${t}.${n.slice(0,e+1).join(`.`)}: cannot nest into a ${typeof i} value`};a=a[r]}return a[n[n.length-1]]=r,{ok:!0}}function Hk(){return Object.create(null)}function Uk(e){return e===`__proto__`||e===`prototype`||e===`constructor`}function Wk(e){return typeof e==`object`&&!!e&&!Array.isArray(e)&&e!==Object.prototype}function Gk(e){let t=e.indexOf(`=`);return t>2?{key:e.slice(2,t),inlineValue:e.slice(t+1)}:{key:e.slice(2),inlineValue:void 0}}function Kk(e,t){switch(t){case`integer`:return/^-?\d+$/.test(e)?{ok:!0,value:Number(e)}:{ok:!1,error:`expected integer, got "${e}"`};case`number`:{let t=Number(e);return Number.isFinite(t)?{ok:!0,value:t}:{ok:!1,error:`expected number, got "${e}"`}}case`boolean`:return e===`true`||e===`1`||e===`yes`?{ok:!0,value:!0}:e===`false`||e===`0`||e===`no`?{ok:!0,value:!1}:{ok:!1,error:`expected boolean, got "${e}"`};case`object`:return qk(e);default:return{ok:!0,value:e}}}function qk(e){let t;try{t=JSON.parse(e)}catch{return{ok:!1,error:`expected object JSON, got "${e}"`}}return Wk(t)?{ok:!0,value:t}:{ok:!1,error:`expected object JSON, got "${e}"`}}function Jk(e){let t=e??{},n=Array.isArray(t.content)?t.content:[],r=[];for(let e of n)if(!(!e||typeof e!=`object`))switch(e.type){case`text`:typeof e.text==`string`&&r.push(e.text);break;case`image`:r.push(`[image: ${e.mimeType??`unknown mime`}]`);break;case`resource`:{let t=e.resource?.uri??e.uri??`unknown uri`;r.push(`[resource: ${t}]`);break}default:r.push(`[${e.type??`unknown`}]`)}let i=r.join(`
1613
1617
  `),a=i.endsWith(`
1614
1618
  `)?``:`
1615
- `;return t.isError?{stdout:``,stderr:(i||`(tool reported error)`)+a,exitCode:1}:{stdout:i+(i?a:``),stderr:``,exitCode:0}}async function Lk(e,t){if(e.length===0||C(e))return e.length===0?W(`mcp refresh: expected <name>`):U(`usage: mcp refresh <name>
1619
+ `;return t.isError?{stdout:``,stderr:(i||`(tool reported error)`)+a,exitCode:1}:{stdout:i+(i?a:``),stderr:``,exitCode:0}}async function Yk(e,t){if(e.length===0||C(e))return e.length===0?W(`mcp refresh: expected <name>`):U(`usage: mcp refresh <name>
1616
1620
 
1617
1621
  Re-fetches the tool catalog and \`apps/list\` for <name>. Does NOT refresh
1618
1622
  OAuth tokens — for OAuth token refresh use \`mcp auth <name>\`.
1619
- `);let n=S(e,{});if(`error`in n)return sk(n.error);let r=n.positionals[0];if(!r)return W(`mcp refresh: expected <name>`);let{ensureMcpProviderRegistered:i}=await import(`./provider-CP2FrBD1.js`);await i(r);let{getServer:a,setServer:o}=await import(`./store-BuVY3ZgP.js`).then(e=>e.r),s=await a(r,t.fs);if(!s)return W(`mcp refresh: unknown server "${r}"`);let{McpClient:c,McpAuthRequiredError:l}=await import(`./client-GY8xUpw7.js`).then(e=>e.n),u=new c({url:s.url,fetchImpl:t.fetchImpl,headers:s.headers,getAuthHeader:s.auth?()=>Bk(r):void 0});try{await u.initialize()}catch(e){if(e instanceof l)return W(`mcp refresh: server "${r}" returned 401 — token may have expired. Run \`mcp auth ${r}\` to re-authenticate.`);throw e}let d=await u.toolsList(),f=await u.appsList();await o(r,{...s,protocolVersion:u.getNegotiatedProtocolVersion(),tools:d,apps:f,lastRefreshedAt:new Date().toISOString()},t.fs);let p=await Jk(r,f,t);return U(`Refreshed "${r}" — tools: ${d.length}, apps: ${f.length} (${p} sprinkle${p===1?``:`s`})\n`)}async function Rk(e,t){if(C(e))return U(`usage: mcp auth <name> [--silent | --interactive]
1623
+ `);let n=S(e,{});if(`error`in n)return yk(n.error);let r=n.positionals[0];if(!r)return W(`mcp refresh: expected <name>`);let{ensureMcpProviderRegistered:i}=await import(`./provider-CXhkDb-S.js`);await i(r);let{getServer:a,setServer:o}=await import(`./store-CKVmFL1z.js`).then(e=>e.r),s=await a(r,t.fs);if(!s)return W(`mcp refresh: unknown server "${r}"`);let{McpClient:c,McpAuthRequiredError:l}=await import(`./client-GY8xUpw7.js`).then(e=>e.n),u=new c({url:s.url,fetchImpl:t.fetchImpl,headers:s.headers,getAuthHeader:s.auth?()=>Qk(r):void 0});try{await u.initialize()}catch(e){if(e instanceof l)return W(`mcp refresh: server "${r}" returned 401 — token may have expired. Run \`mcp auth ${r}\` to re-authenticate.`);throw e}let d=await u.toolsList(),f=await u.appsList();await o(r,{...s,protocolVersion:u.getNegotiatedProtocolVersion(),tools:d,apps:f,lastRefreshedAt:new Date().toISOString()},t.fs);let p=await oA(r,f,t);return U(`Refreshed "${r}" — tools: ${d.length}, apps: ${f.length} (${p} sprinkle${p===1?``:`s`})\n`)}async function Xk(e,t){if(C(e))return U(`usage: mcp auth <name> [--silent | --interactive]
1620
1624
 
1621
1625
  Re-authenticate an existing MCP server. By default, attempts a silent
1622
1626
  token renewal using the persisted refresh_token; if that returns no
@@ -1628,7 +1632,7 @@ Options:
1628
1632
  -i, --interactive Skip silent renewal and open the OAuth popup
1629
1633
  directly. Use after revoking a refresh token or
1630
1634
  when the AS no longer accepts the cached one.
1631
- `);let n=S(e,{bool:ik});if(`error`in n)return sk(n.error);let r=n.positionals[0];if(!r)return W(`mcp auth: expected <name>`);let i=n.bools.has(`--silent`)||n.bools.has(`-s`),a=n.bools.has(`--interactive`)||n.bools.has(`-i`);if(i&&a)return W(`mcp auth: --silent and --interactive are mutually exclusive`);let{ensureMcpProviderRegistered:o}=await import(`./provider-CP2FrBD1.js`),s=await o(r,{fetchImpl:t.oauthFetchImpl,launcher:t.oauthLauncher}),{getServer:c}=await import(`./store-BuVY3ZgP.js`).then(e=>e.r),l=await c(r,t.fs);if(!l)return W(`mcp auth: unknown server "${r}" (run \`mcp list\` to see configured servers)`);if(!l.auth)return W(`mcp auth: server "${r}" does not use OAuth`);if(!s)return W(`mcp auth: failed to register provider for "${r}"`);let u=`mcp:${r}`,{getRegisteredProviderConfig:d}=await import(`./providers-XoHqlC-q.js`).then(e=>e.r),f=d(u);if(!f)return W(`mcp auth: provider "${u}" is not registered`);if(a)return await zk(r,f,t);if(!f.onSilentRenew)return i?W(`mcp auth: provider "${u}" does not support silent renewal; retry without --silent`):await zk(r,f,t);let p=null;try{p=await f.onSilentRenew()}catch(e){let t=e instanceof Error?e.message:String(e);if(i)return W(`mcp auth: silent renewal for "${r}" failed (${t}); retry without --silent to run the interactive flow`);ak.debug(`mcp auth: silent renewal threw, falling back to interactive`,{name:r,error:t})}return p?U(`Re-authenticated "${r}" via silent renewal (provider ${u})\n`):i?W(`mcp auth: silent renewal for "${r}" returned no token; retry without --silent to run the interactive flow`):await zk(r,f,t)}async function zk(e,t,n){if(!t.onOAuthLogin)return W(`mcp auth: provider "${t.id}" does not support interactive OAuth login`);let r=n.oauthLauncher??await Vk(),i=!1;return await t.onOAuthLogin(r,()=>{i=!0}),i?U(`Re-authenticated "${e}" via interactive login (provider ${t.id})\n`):W(`mcp auth: interactive login for "${e}" did not complete`)}async function Bk(e){let t=`mcp:${e}`,{getOAuthAccountInfo:n}=await import(`./account-store-CDXeAYze.js`).then(e=>e.t),r=n(t);if(!r)return null;if(r.expired){try{let{getRegisteredProviderConfig:e}=await import(`./providers-XoHqlC-q.js`).then(e=>e.r),n=await e(t)?.onSilentRenew?.();if(n)return`Bearer ${n}`}catch(e){ak.debug(`silent renewal threw`,{providerId:t,error:e instanceof Error?e.message:String(e)})}return null}return`Bearer ${r.token}`}async function Vk(){let{createOAuthLauncher:e}=await import(`./oauth-service-DLGjPRxS.js`);return e()}async function Hk(e){if(e)return e;let{createProxiedFetch:t}=await import(`./proxied-fetch-D6EBne5P.js`).then(e=>e.i),n=t();return async(e,t)=>{let r=await n(e,{method:t?.method,headers:t?.headers,body:t?.body}),i=new TextDecoder().decode(r.body);return{ok:r.status>=200&&r.status<300,status:r.status,statusText:r.statusText,text:async()=>i,json:async()=>JSON.parse(i),headers:{get:e=>r.headers[e.toLowerCase()]??null}}}}async function Uk(e){if(e)return e;let{VirtualFS:t}=await import(`./fs-BjjYK9VY.js`).then(e=>e.t),{GLOBAL_FS_DB_NAME:n}=await import(`./global-db-DJXlpNui.js`).then(e=>e.n);return await t.create({dbName:n})}function Wk(e){return`// MCP alias for "${e}" — forwards args to \`mcp invoke ${e}\`.
1635
+ `);let n=S(e,{bool:gk});if(`error`in n)return yk(n.error);let r=n.positionals[0];if(!r)return W(`mcp auth: expected <name>`);let i=n.bools.has(`--silent`)||n.bools.has(`-s`),a=n.bools.has(`--interactive`)||n.bools.has(`-i`);if(i&&a)return W(`mcp auth: --silent and --interactive are mutually exclusive`);let{ensureMcpProviderRegistered:o}=await import(`./provider-CXhkDb-S.js`),s=await o(r,{fetchImpl:t.oauthFetchImpl,launcher:t.oauthLauncher}),{getServer:c}=await import(`./store-CKVmFL1z.js`).then(e=>e.r),l=await c(r,t.fs);if(!l)return W(`mcp auth: unknown server "${r}" (run \`mcp list\` to see configured servers)`);if(!l.auth)return W(`mcp auth: server "${r}" does not use OAuth`);if(!s)return W(`mcp auth: failed to register provider for "${r}"`);let u=`mcp:${r}`,{getRegisteredProviderConfig:d}=await import(`./providers-C0Qe0odK.js`).then(e=>e.r),f=d(u);if(!f)return W(`mcp auth: provider "${u}" is not registered`);if(a)return await Zk(r,f,t);if(!f.onSilentRenew)return i?W(`mcp auth: provider "${u}" does not support silent renewal; retry without --silent`):await Zk(r,f,t);let p=null;try{p=await f.onSilentRenew()}catch(e){let t=e instanceof Error?e.message:String(e);if(i)return W(`mcp auth: silent renewal for "${r}" failed (${t}); retry without --silent to run the interactive flow`);_k.debug(`mcp auth: silent renewal threw, falling back to interactive`,{name:r,error:t})}return p?U(`Re-authenticated "${r}" via silent renewal (provider ${u})\n`):i?W(`mcp auth: silent renewal for "${r}" returned no token; retry without --silent to run the interactive flow`):await Zk(r,f,t)}async function Zk(e,t,n){if(!t.onOAuthLogin)return W(`mcp auth: provider "${t.id}" does not support interactive OAuth login`);let r=n.oauthLauncher??await $k(),i=!1;return await t.onOAuthLogin(r,()=>{i=!0}),i?U(`Re-authenticated "${e}" via interactive login (provider ${t.id})\n`):W(`mcp auth: interactive login for "${e}" did not complete`)}async function Qk(e){let t=`mcp:${e}`,{getOAuthAccountInfo:n}=await import(`./account-store-D0IR3DBZ.js`).then(e=>e.t),r=n(t);if(!r)return null;if(r.expired){try{let{getRegisteredProviderConfig:e}=await import(`./providers-C0Qe0odK.js`).then(e=>e.r),n=await e(t)?.onSilentRenew?.();if(n)return`Bearer ${n}`}catch(e){_k.debug(`silent renewal threw`,{providerId:t,error:e instanceof Error?e.message:String(e)})}return null}return`Bearer ${r.token}`}async function $k(){let{createOAuthLauncher:e}=await import(`./oauth-service-DLGjPRxS.js`);return e()}async function eA(e){if(e)return e;let{createProxiedFetch:t}=await import(`./proxied-fetch-D6EBne5P.js`).then(e=>e.i),n=t();return async(e,t)=>{let r=await n(e,{method:t?.method,headers:t?.headers,body:t?.body}),i=new TextDecoder().decode(r.body);return{ok:r.status>=200&&r.status<300,status:r.status,statusText:r.statusText,text:async()=>i,json:async()=>JSON.parse(i),headers:{get:e=>r.headers[e.toLowerCase()]??null}}}}async function tA(e){if(e)return e;let{VirtualFS:t}=await import(`./fs-C2ijOZal.js`).then(e=>e.t),{GLOBAL_FS_DB_NAME:n}=await import(`./global-db-DJXlpNui.js`).then(e=>e.n);return await t.create({dbName:n})}function nA(e){return`// MCP alias for "${e}" — forwards args to \`mcp invoke ${e}\`.
1632
1636
  // Auto-generated by \`mcp add ${e}\`; do not edit by hand.
1633
1637
  const { promisify } = require('util');
1634
1638
  const { exec } = require('child_process');
@@ -1657,8 +1661,8 @@ try {
1657
1661
  if (stdout) process.stdout.write(stdout);
1658
1662
  if (stderr) process.stderr.write(stderr);
1659
1663
  process.exit(exitCode);
1660
- `}async function Gk(e,t){let n=await Uk(t.fs);await n.mkdir(ok,{recursive:!0}),await n.writeFile(`${ok}/${e}.jsh`,Wk(e)),t.scriptCatalog?.invalidateJsh()}async function Kk(e,t){let n=await Uk(t.fs),r=`${ok}/${e}.jsh`;try{await n.exists(r)&&await n.rm(r)}catch(e){ak.debug(`alias removal failed`,{path:r,error:e instanceof Error?e.message:String(e)})}t.scriptCatalog?.invalidateJsh()}async function qk(e,t){let{removeAppSprinkles:n}=await import(`./apps-CrxAbeAz.js`);await n(e,t.fs)}async function Jk(e,t,n){try{let{materializeAppSprinkles:r}=await import(`./apps-CrxAbeAz.js`);return(await r(e,t,n.fs)).length}catch(t){return ak.warn(`mcp: failed to materialize app sprinkles`,{name:e,error:t instanceof Error?t.message:String(t)}),0}}function Yk(e){return{stdout:``,stderr:`meminfo: ${e}\n`,exitCode:1}}function Xk(e){if(e<1024)return`${e} B`;let t=[`KB`,`MB`,`GB`],n=e,r=`B`;for(let e of t){if(n<1024)break;n/=1024,r=e}return`${n.toFixed(1)} ${r}`}function Zk(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 Qk(){let e=globalThis.performance,t=e?.measureUserAgentSpecificMemory;return t?t.bind(e):null}function $k(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 eA(e){let t=[`total: ${Xk(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(`${Xk(e.bytes).padEnd(10)} ${e.types.join(`,`).padEnd(20)} ${Zk(e)}`)}return`${t.join(`
1661
- `)}\n`}function tA(e={}){return x(`meminfo`,async t=>{let n=$k(t);if(`error`in n)return Yk(n.error);if(n.help)return{stdout:`meminfo - agent-cluster memory diagnostics
1664
+ `}async function rA(e,t){let n=await tA(t.fs);await n.mkdir(vk,{recursive:!0}),await n.writeFile(`${vk}/${e}.jsh`,nA(e)),t.scriptCatalog?.invalidateJsh()}async function iA(e,t){let n=await tA(t.fs),r=`${vk}/${e}.jsh`;try{await n.exists(r)&&await n.rm(r)}catch(e){_k.debug(`alias removal failed`,{path:r,error:e instanceof Error?e.message:String(e)})}t.scriptCatalog?.invalidateJsh()}async function aA(e,t){let{removeAppSprinkles:n}=await import(`./apps-C78b94Fy.js`);await n(e,t.fs)}async function oA(e,t,n){try{let{materializeAppSprinkles:r}=await import(`./apps-C78b94Fy.js`);return(await r(e,t,n.fs)).length}catch(t){return _k.warn(`mcp: failed to materialize app sprinkles`,{name:e,error:t instanceof Error?t.message:String(t)}),0}}function sA(e){return{stdout:``,stderr:`meminfo: ${e}\n`,exitCode:1}}function cA(e){if(e<1024)return`${e} B`;let t=[`KB`,`MB`,`GB`],n=e,r=`B`;for(let e of t){if(n<1024)break;n/=1024,r=e}return`${n.toFixed(1)} ${r}`}function lA(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 uA(){let e=globalThis.performance,t=e?.measureUserAgentSpecificMemory;return t?t.bind(e):null}function dA(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 fA(e){let t=[`total: ${cA(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(`${cA(e.bytes).padEnd(10)} ${e.types.join(`,`).padEnd(20)} ${lA(e)}`)}return`${t.join(`
1665
+ `)}\n`}function pA(e={}){return x(`meminfo`,async t=>{let n=dA(t);if(`error`in n)return sA(n.error);if(n.help)return{stdout:`meminfo - agent-cluster memory diagnostics
1662
1666
 
1663
1667
  Usage:
1664
1668
  meminfo Human-readable breakdown (bytes, scope, types, url)
@@ -1669,8 +1673,8 @@ Notes:
1669
1673
  Document-Isolation-Policy). Embedded floats cannot be isolated and
1670
1674
  report why instead.
1671
1675
  - The browser randomizes measurement timing — expect a short delay.
1672
- `,stderr:``,exitCode:0};let r=e.isIsolated?e.isIsolated():globalThis.crossOriginIsolated===!0,i=e.measure??Qk();if(!r&&!e.measure)return Yk(`memory measurement requires a cross-origin-isolated runtime (Document-Isolation-Policy) — this runtime is not isolated`);if(!i)return Yk(`performance.measureUserAgentSpecificMemory is not available in this browser`);let a;try{a=await i()}catch(e){return Yk(e instanceof Error?e.message:String(e))}return n.json?{stdout:`${JSON.stringify(a,null,2)}\n`,stderr:``,exitCode:0}:{stdout:eA(a),stderr:``,exitCode:0}})}function nA(e){return x(`memory`,async t=>{let{runMemory:n}=await import(`./run-C7DSv_4z.js`);return n(t,e)})}function rA(){return x(`mktemp`,async(e,t)=>{let{runMktemp:n}=await import(`./run-dAJe7sKp.js`);return n(e,t)})}const iA=`/.cache/artificial-analysis.json`,aA=[`--all`,`--all-versions`,`--json`,`--refresh`,`--no-benchmarks`,`--help`,`-h`],oA=[`--provider`];function sA(e){return{stdout:``,stderr:e.endsWith(`
1673
- `)?e:`${e}\n`,exitCode:1}}async function cA(e){try{let t=await e.readFile(iA),n=JSON.parse(t);if(Date.now()-n.fetchedAt<864e5)return n.models}catch{}return null}function lA(){try{return localStorage.getItem(`aa_api_key`)}catch{return null}}function uA(e){return e.map(e=>{let t=e;return{slug:t.slug??``,name:t.name??``,creator_slug:t.model_creator?.slug??``,intelligence_index:t.evaluations?.artificial_analysis_intelligence_index??null,coding_index:t.evaluations?.artificial_analysis_coding_index??null,speed_tps:t.median_output_tokens_per_second??null}})}async function dA(e,t){let n={fetchedAt:Date.now(),models:t};try{await e.mkdir(`/.cache`,{recursive:!0}),await e.writeFile(iA,JSON.stringify(n))}catch{}}async function fA(e,t=!1){if(e&&!t){let t=await cA(e);if(t)return t}let n={Accept:`application/json`},r=lA();r&&(n[`x-api-key`]=r);let i=ie(),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=uA(Array.isArray(s)?s:s.data??s.models??[]);return e&&c.length>0&&await dA(e,c),c}function pA(e){return e.toLowerCase().replace(/\./g,`-`).replace(/-\d{8}$/,``).replace(/-\d{4}$/,``)}function mA(e,t){let n=e.toLowerCase(),r=t.find(e=>e.slug===n);if(r)return r;let i=pA(e),a=t.find(e=>pA(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 hA(){return`models - list available LLM models
1676
+ `,stderr:``,exitCode:0};let r=e.isIsolated?e.isIsolated():globalThis.crossOriginIsolated===!0,i=e.measure??uA();if(!r&&!e.measure)return sA(`memory measurement requires a cross-origin-isolated runtime (Document-Isolation-Policy) — this runtime is not isolated`);if(!i)return sA(`performance.measureUserAgentSpecificMemory is not available in this browser`);let a;try{a=await i()}catch(e){return sA(e instanceof Error?e.message:String(e))}return n.json?{stdout:`${JSON.stringify(a,null,2)}\n`,stderr:``,exitCode:0}:{stdout:fA(a),stderr:``,exitCode:0}})}function mA(e){return x(`memory`,async t=>{let{runMemory:n}=await import(`./run-BnLaTZQJ.js`);return n(t,e)})}function hA(){return x(`mktemp`,async(e,t)=>{let{runMktemp:n}=await import(`./run-dAJe7sKp.js`);return n(e,t)})}const gA=`/.cache/artificial-analysis.json`,_A=[`--all`,`--all-versions`,`--json`,`--refresh`,`--no-benchmarks`,`--help`,`-h`],vA=[`--provider`];function yA(e){return{stdout:``,stderr:e.endsWith(`
1677
+ `)?e:`${e}\n`,exitCode:1}}async function bA(e){try{let t=await e.readFile(gA),n=JSON.parse(t);if(Date.now()-n.fetchedAt<864e5)return n.models}catch{}return null}function xA(){try{return localStorage.getItem(`aa_api_key`)}catch{return null}}function SA(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 CA(e,t){let n={fetchedAt:Date.now(),models:t};try{await e.mkdir(`/.cache`,{recursive:!0}),await e.writeFile(gA,JSON.stringify(n))}catch{}}async function wA(e,t=!1){if(e&&!t){let t=await bA(e);if(t)return t}let n={Accept:`application/json`},r=xA();r&&(n[`x-api-key`]=r);let i=ie(),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=SA(Array.isArray(s)?s:s.data??s.models??[]);return e&&c.length>0&&await CA(e,c),c}function TA(e){return e.toLowerCase().replace(/\./g,`-`).replace(/-\d{8}$/,``).replace(/-\d{4}$/,``)}function EA(e,t){let n=e.toLowerCase(),r=t.find(e=>e.slug===n);if(r)return r;let i=TA(e),a=t.find(e=>TA(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 DA(){return`models - list available LLM models
1674
1678
 
1675
1679
  Usage: models [options]
1676
1680
 
@@ -1682,14 +1686,14 @@ Options:
1682
1686
  --refresh Force re-fetch benchmark data from Artificial Analysis
1683
1687
  --no-benchmarks Skip benchmark data enrichment (faster, works offline)
1684
1688
  -h, --help Show this help message
1685
- `}function gA(e){return e>=1e6?`${(e/1e6).toFixed(1)}M`.replace(`.0M`,`M`):e>=1e3?`${(e/1e3).toFixed(0)}K`:`${e}`}function _A(e){return`$${e.toFixed(2)}`}const vA=/\b(embedding|embed|tts|whisper|dall-e|image-gen|audio|vision-preview)\b/i;function yA(e){let t=`${e.id} ${e.name??``}`;return!vA.test(t)}function bA(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 xA(e){let t=e.toLowerCase();return t=t.replace(/-\d{8}$/,``),t=t.replace(/-\d{4}$/,``),t=t.replace(/-(preview|latest)$/,``),bA(t)??t.replace(/-[\d.]+$/,``)}function SA(e){let t=new Map;for(let n of e){let e=xA(n.id);(!t.has(e)||n.selected)&&t.set(e,n)}return[...t.values()]}function CA(e,t,n,r,i){let a=i?mA(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 wA(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=`${_A(e.cost.input)} / ${_A(e.cost.output)}`,a=`${gA(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(`
1689
+ `}function OA(e){return e>=1e6?`${(e/1e6).toFixed(1)}M`.replace(`.0M`,`M`):e>=1e3?`${(e/1e3).toFixed(0)}K`:`${e}`}function kA(e){return`$${e.toFixed(2)}`}const AA=/\b(embedding|embed|tts|whisper|dall-e|image-gen|audio|vision-preview)\b/i;function jA(e){let t=`${e.id} ${e.name??``}`;return!AA.test(t)}function MA(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 NA(e){let t=e.toLowerCase();return t=t.replace(/-\d{8}$/,``),t=t.replace(/-\d{4}$/,``),t=t.replace(/-(preview|latest)$/,``),MA(t)??t.replace(/-[\d.]+$/,``)}function PA(e){let t=new Map;for(let n of e){let e=NA(n.id);(!t.has(e)||n.selected)&&t.set(e,n)}return[...t.values()]}function FA(e,t,n,r,i){let a=i?EA(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 IA(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=`${kA(e.cost.input)} / ${kA(e.cost.output)}`,a=`${OA(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(`
1686
1690
  `)+`
1687
- `}function TA(e){let t=S(e,{bool:aA,value:oA});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 EA(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 DA(e,t,n,r,i,a){let o=e.getProviderModels(t).filter(yA);if(o.length===0)return[];let s=o.map(e=>CA(e,t,n,r,i)).sort((e,t)=>t.cost.input-e.cost.input);return a||(s=SA(s)),s}function OA(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 kA(e,t){if(C(e,{valueFlags:oA}))return{stdout:hA(),stderr:``,exitCode:0};let n=TA(e);if(`error`in n)return sA(`models: ${n.error}`);let r=await import(`./account-store-CDXeAYze.js`).then(e=>e.t);if(r.getAccounts().length===0)return sA(`No provider accounts configured. Run the provider settings to add one.
1688
- `);let i=r.resolveCurrentModel(),a=i.id,o=i.provider,s=r.getSelectedProvider(),c=r.getSelectedModelId(),l;if(!n.noBenchmarks){let e=await fA(t,n.forceRefresh);e.length>0&&(l=e)}let u=EA(r,n,s);if(`error`in u)return sA(u.error);let d=[],f=[];for(let e of u){let t=DA(r,e,a,o,l,n.allVersions);if(t.length===0){if(!n.allMode)return sA(`No models available for provider ${e}.\n`);continue}if(d.push(...t),!n.jsonMode){let n=r.getProviderConfig(e);f.push(wA(n.name,e,t,!!l))}}return n.jsonMode?{stdout:JSON.stringify(d,null,2)+`
1691
+ `}function LA(e){let t=S(e,{bool:_A,value:vA});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 RA(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 zA(e,t,n,r,i,a){let o=e.getProviderModels(t).filter(jA);if(o.length===0)return[];let s=o.map(e=>FA(e,t,n,r,i)).sort((e,t)=>t.cost.input-e.cost.input);return a||(s=PA(s)),s}function BA(e,t,n,r){let i=`${e}:${t}`,a=`${n}:${r}`;return i===a?`Currently using: ${i}\n`:`Currently using: ${i} (selected ${a} — resolved to a different model)\n`}async function VA(e,t){if(C(e,{valueFlags:vA}))return{stdout:DA(),stderr:``,exitCode:0};let n=LA(e);if(`error`in n)return yA(`models: ${n.error}`);let r=await import(`./account-store-D0IR3DBZ.js`).then(e=>e.t);if(r.getAccounts().length===0)return yA(`No provider accounts configured. Run the provider settings to add one.
1692
+ `);let i=r.resolveCurrentModel(),a=i.id,o=i.provider,s=r.getSelectedProvider(),c=r.getSelectedModelId(),l;if(!n.noBenchmarks){let e=await wA(t,n.forceRefresh);e.length>0&&(l=e)}let u=RA(r,n,s);if(`error`in u)return yA(u.error);let d=[],f=[];for(let e of u){let t=zA(r,e,a,o,l,n.allVersions);if(t.length===0){if(!n.allMode)return yA(`No models available for provider ${e}.\n`);continue}if(d.push(...t),!n.jsonMode){let n=r.getProviderConfig(e);f.push(IA(n.name,e,t,!!l))}}return n.jsonMode?{stdout:JSON.stringify(d,null,2)+`
1689
1693
  `,stderr:``,exitCode:0}:(n.allVersions||f.push(`Showing latest versions only. Use --all-versions to see all.
1690
- `),f.push(OA(o,a,s,c)),{stdout:f.join(`
1691
- `),stderr:``,exitCode:0})}function AA(e){return x(`models`,async t=>kA(t,e))}const jA=new Set([`-`,`/dev/stdin`,`/dev/fd/0`,`/proc/self/fd/0`]);function MA(e){return e===`-e`||e===`--eval`||jA.has(e)||!e.startsWith(`-`)}function NA(e){return{stdout:``,stderr:`node: ${e} is not a valid value for --input-type. Valid values are: 'commonjs' or 'module'.\n`,exitCode:9}}function PA(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
1692
- `,exitCode:9}}:i!==`module`&&i!==`commonjs`?{nextIndex:a,error:NA(i)}:{inputType:i,nextIndex:a}}function FA(e){let t=!1,n=!1,r=!1,i,a=0;for(;a<e.length;){let o=e[a];if(MA(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=PA(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 IA(){return{stdout:`usage: node [options] [script.js] [args...]
1694
+ `),f.push(BA(o,a,s,c)),{stdout:f.join(`
1695
+ `),stderr:``,exitCode:0})}function HA(e){return x(`models`,async t=>VA(t,e))}const UA=new Set([`-`,`/dev/stdin`,`/dev/fd/0`,`/proc/self/fd/0`]);function WA(e){return e===`-e`||e===`--eval`||UA.has(e)||!e.startsWith(`-`)}function GA(e){return{stdout:``,stderr:`node: ${e} is not a valid value for --input-type. Valid values are: 'commonjs' or 'module'.\n`,exitCode:9}}function KA(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
1696
+ `,exitCode:9}}:i!==`module`&&i!==`commonjs`?{nextIndex:a,error:GA(i)}:{inputType:i,nextIndex:a}}function qA(e){let t=!1,n=!1,r=!1,i,a=0;for(;a<e.length;){let o=e[a];if(WA(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=KA(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 JA(){return{stdout:`usage: node [options] [script.js] [args...]
1693
1697
  node [options] -e <code> [args...]
1694
1698
 
1695
1699
  Options:
@@ -1698,20 +1702,20 @@ Options:
1698
1702
  --input-type=TYPE module or commonjs (stdin / -e / .js)
1699
1703
  -h, --help print this help
1700
1704
  -v, --version print Node shim version
1701
- `,stderr:``,exitCode:0}}function LA(){return{stdout:`${br}\n`,stderr:``,exitCode:0}}function RA(e,t){if(t){if(e.endsWith(`.mjs`)&&t===`commonjs`)return{stdout:``,stderr:`node: cannot set --input-type=commonjs for a .mjs file
1705
+ `,stderr:``,exitCode:0}}function YA(){return{stdout:`${br}\n`,stderr:``,exitCode:0}}function XA(e,t){if(t){if(e.endsWith(`.mjs`)&&t===`commonjs`)return{stdout:``,stderr:`node: cannot set --input-type=commonjs for a .mjs file
1702
1706
  `,exitCode:9};if(e.endsWith(`.cjs`)&&t===`module`)return{stdout:``,stderr:`node: cannot set --input-type=module for a .cjs file
1703
- `,exitCode:9}}}function zA(e,t){if(!e.startsWith(`/`))return t;let n=e.lastIndexOf(`/`);return n<=0?`/`:e.slice(0,n)}function BA(e){return e instanceof Error?e.stack??e.message:String(e)}async function VA(e,t,n){if(!(dr(e)||Dr(e)||t.endsWith(`.mjs`)))return e;try{return(await(await Gr()).transform(e,{loader:`js`,format:`cjs`,sourcefile:`${t.replace(/\.[^./]+$/,``)}.js`,supported:{"dynamic-import":!1}})).code}catch(r){if(!/top-level await/i.test(BA(r)))throw r;return zt()({source:e,filename:t,fromDir:zA(t,n)})}}async function HA(e,t,n){let r=e;try{r=await VA(e,t,n)}catch(e){return{stdout:``,stderr:`${BA(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:`${BA(e)}\n`,exitCode:1}}}async function UA(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
1704
- `,exitCode:9}};if(e.length>0&&jA.has(e[0]))return{kind:`ok`,code:N(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 N(t.stdin).trim().length>0?{kind:`ok`,code:N(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"
1705
- `,exitCode:9}}}function WA(e={},t=`node`){return{name:t,trusted:!0,async execute(t,n){let r=FA(t);if(r.error)return r.error;if(r.help)return IA();if(r.version)return LA();let i=await UA(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
1706
- `,exitCode:9}:i.result;let{code:a,filename:o,argv:s,innerCtx:c}=i,l=RA(o,r.inputType);if(l)return l;let u=wt(a);return r.check?HA(u,o,n.cwd):Lt(u,s,c,e.buildProcessConfig?.(n.env),{filename:o})}}}const GA=[`slicc:welcome-flow-fired`,`slicc.trayJoinUrl`,`slicc.trayWorkerBaseUrl`];async function KA(){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 qA=[],JA=[`--yes`];function YA(){return x(`nuke`,async e=>{if(C(e,{valueFlags:qA}))return{stdout:`Usage: nuke <launch-code>
1707
+ `,exitCode:9}}}function ZA(e,t){if(!e.startsWith(`/`))return t;let n=e.lastIndexOf(`/`);return n<=0?`/`:e.slice(0,n)}function QA(e){return e instanceof Error?e.stack??e.message:String(e)}async function $A(e,t,n){if(!(dr(e)||Dr(e)||t.endsWith(`.mjs`)))return e;try{return(await(await Gr()).transform(e,{loader:`js`,format:`cjs`,sourcefile:`${t.replace(/\.[^./]+$/,``)}.js`,supported:{"dynamic-import":!1}})).code}catch(r){if(!/top-level await/i.test(QA(r)))throw r;return zt()({source:e,filename:t,fromDir:ZA(t,n)})}}async function ej(e,t,n){let r=e;try{r=await $A(e,t,n)}catch(e){return{stdout:``,stderr:`${QA(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:`${QA(e)}\n`,exitCode:1}}}async function tj(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
1708
+ `,exitCode:9}};if(e.length>0&&UA.has(e[0]))return{kind:`ok`,code:N(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 N(t.stdin).trim().length>0?{kind:`ok`,code:N(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"
1709
+ `,exitCode:9}}}function nj(e={},t=`node`){return{name:t,trusted:!0,async execute(t,n){let r=qA(t);if(r.error)return r.error;if(r.help)return JA();if(r.version)return YA();let i=await tj(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
1710
+ `,exitCode:9}:i.result;let{code:a,filename:o,argv:s,innerCtx:c}=i,l=XA(o,r.inputType);if(l)return l;let u=wt(a);return r.check?ej(u,o,n.cwd):Lt(u,s,c,e.buildProcessConfig?.(n.env),{filename:o})}}}const rj=[`slicc:welcome-flow-fired`,`slicc.trayJoinUrl`,`slicc.trayWorkerBaseUrl`];async function ij(){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 aj=[],oj=[`--yes`];function sj(){return x(`nuke`,async e=>{if(C(e,{valueFlags:aj}))return{stdout:`Usage: nuke <launch-code>
1707
1711
 
1708
1712
  Completely reset the environment by deleting all local data and reloading.
1709
1713
  Destroys the file system, chat history, and scoops database.
1710
1714
  Requires the secret launch code to proceed.
1711
- `,stderr:``,exitCode:0};let t=S(e,{value:qA,bool:JA});return`error`in t?{stdout:``,stderr:`nuke: ${t.error}\n`,exitCode:1}:t.positionals.join(``).includes(`1234`)?((async()=>{await KA(),XA(GA)})(),{stdout:`Nuking everything…
1715
+ `,stderr:``,exitCode:0};let t=S(e,{value:aj,bool:oj});return`error`in t?{stdout:``,stderr:`nuke: ${t.error}\n`,exitCode:1}:t.positionals.join(``).includes(`1234`)?((async()=>{await ij(),cj(rj)})(),{stdout:`Nuking everything…
1712
1716
  `,stderr:``,exitCode:0}):{stdout:``,stderr:`⚠️ WARNING: this will reset the entire environment, file system, chats, and scoops.
1713
1717
  Run nuke again with the secret launch code to proceed.
1714
- `,exitCode:1}})}function XA(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 ZA(){return`oauth-domain — manage extra allowed domains for OAuth-issued tokens
1718
+ `,exitCode:1}})}function cj(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 lj(){return`oauth-domain — manage extra allowed domains for OAuth-issued tokens
1715
1719
 
1716
1720
  Usage:
1717
1721
  oauth-domain list List extra domains for every provider
@@ -1736,13 +1740,13 @@ Examples:
1736
1740
  oauth-domain add adobe '*.da.live'
1737
1741
  oauth-domain list adobe
1738
1742
  oauth-domain remove adobe admin.da.live
1739
- `}function QA(e){return{stdout:``,stderr:`oauth-domain: ${e}\n`,exitCode:1}}function $A(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(`
1743
+ `}function uj(e){return{stdout:``,stderr:`oauth-domain: ${e}\n`,exitCode:1}}function dj(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(`
1740
1744
  `)}\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)
1741
1745
  `,stderr:``,exitCode:0}:{stdout:`${n.map(([e,t])=>`${e}: ${t.join(`, `)}`).join(`
1742
- `)}\n`,stderr:``,exitCode:0}}async function ej(e,t,n){if(!t||!n)return{stdout:``,stderr:`oauth-domain add: requires <providerId> and <domain>
1743
- `,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 tj(e,t,n){if(!t||!n)return{stdout:``,stderr:`oauth-domain remove: requires <providerId> and <domain>
1744
- `,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 nj(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>
1745
- `,exitCode:1}}async function rj(e,t,n,r){switch(t){case`list`:return $A(e,n);case`add`:return ej(e,n,r);case`remove`:return tj(e,n,r);case`clear`:return nj(e,n);default:return{stdout:``,stderr:`oauth-domain: unknown subcommand "${t}"\n${ZA()}`,exitCode:1}}}function ij(){return x(`oauth-domain`,async e=>{if(e.length===0||C(e))return{stdout:ZA(),stderr:``,exitCode:0};let t=S(e);if(`error`in t)return QA(t.error);let[n,r,i]=t.positionals,a=await import(`./account-store-CDXeAYze.js`).then(e=>e.t);try{return await rj(a,n,r,i)}catch(e){return QA(e instanceof Error?e.message:String(e))}})}function aj(){return x(`oauth-token`,async(e,t)=>{let{runOAuthToken:n}=await import(`./run-BFBGwUPV.js`);return n(e,t)})}const oj=[`--download`,`-d`,`--view`,`-v`],sj=[`--size`],cj={low:256,medium:768,high:1536};function lj(){return{stdout:`usage: open [--download|-d] [--view|-v [--size <spec>]] <url|path> [url|path...]
1746
+ `)}\n`,stderr:``,exitCode:0}}async function fj(e,t,n){if(!t||!n)return{stdout:``,stderr:`oauth-domain add: requires <providerId> and <domain>
1747
+ `,exitCode:1};let r=e.getExtraOAuthDomains(t),i=n.toLowerCase();return r.some(e=>e.toLowerCase()===i)?{stdout:`(${n} already in ${t} extras)\n`,stderr:``,exitCode:0}:(await e.setExtraOAuthDomainsAsync(t,[...r,n]),{stdout:`Added ${n} to ${t}. Reload the page to apply.\n`,stderr:``,exitCode:0})}async function pj(e,t,n){if(!t||!n)return{stdout:``,stderr:`oauth-domain remove: requires <providerId> and <domain>
1748
+ `,exitCode:1};let r=e.getExtraOAuthDomains(t),i=n.toLowerCase(),a=r.filter(e=>e.toLowerCase()!==i);return a.length===r.length?{stdout:`(${n} not found in ${t} extras)\n`,stderr:``,exitCode:0}:(await e.setExtraOAuthDomainsAsync(t,a),{stdout:`Removed ${n} from ${t}. Reload the page to apply.\n`,stderr:``,exitCode:0})}async function mj(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>
1749
+ `,exitCode:1}}async function hj(e,t,n,r){switch(t){case`list`:return dj(e,n);case`add`:return fj(e,n,r);case`remove`:return pj(e,n,r);case`clear`:return mj(e,n);default:return{stdout:``,stderr:`oauth-domain: unknown subcommand "${t}"\n${lj()}`,exitCode:1}}}function gj(){return x(`oauth-domain`,async e=>{if(e.length===0||C(e))return{stdout:lj(),stderr:``,exitCode:0};let t=S(e);if(`error`in t)return uj(t.error);let[n,r,i]=t.positionals,a=await import(`./account-store-D0IR3DBZ.js`).then(e=>e.t);try{return await hj(a,n,r,i)}catch(e){return uj(e instanceof Error?e.message:String(e))}})}function _j(){return x(`oauth-token`,async(e,t)=>{let{runOAuthToken:n}=await import(`./run-BHPq7q_4.js`);return n(e,t)})}const vj=[`--download`,`-d`,`--view`,`-v`],yj=[`--size`],bj={low:256,medium:768,high:1536};function xj(){return{stdout:`usage: open [--download|-d] [--view|-v [--size <spec>]] <url|path> [url|path...]
1746
1750
 
1747
1751
  VFS paths are served in a new browser tab via the preview service worker.
1748
1752
  URLs (http/https/etc.) are opened directly in a new tab.
@@ -1756,19 +1760,19 @@ Examples:
1756
1760
  medium (768x768), high (1536x1536), or a custom WxH
1757
1761
  box like 512x512. The image is fit inside the box
1758
1762
  with aspect ratio preserved and is never upscaled.
1759
- `,stderr:``,exitCode:0}}function uj(e){if(e in cj){let t=cj[e];return{maxW:t,maxH:t}}let t=/^(\d+)x(\d+)$/.exec(e);if(t){let e=parseInt(t[1],10),n=parseInt(t[2],10);if(e>0&&n>0)return{maxW:e,maxH:n}}return null}function dj(e,t){if(t===`image/png`||t===`image/apng`){if(e.length<26)return!1;let t=e[25];return t===4||t===6}if(t===`image/webp`){if(e.length<16)return!1;let t=String.fromCharCode(e[12],e[13],e[14],e[15]);return t===`VP8L`?!0:t===`VP8X`?e.length<21?!1:!!(e[20]&16):!1}return!1}function fj(){return`open --view requires --size to bound the inlined image. Use one of:
1763
+ `,stderr:``,exitCode:0}}function Sj(e){if(e in bj){let t=bj[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 Cj(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 wj(){return`open --view requires --size to bound the inlined image. Use one of:
1760
1764
  --size low (256x256)
1761
1765
  --size medium (768x768)
1762
1766
  --size high (1536x1536)
1763
1767
  --size WxH (custom box, e.g. 512x512)
1764
- `}const pj=new Set([`image/png`,`image/webp`]);function mj(e){let t=new ArrayBuffer(e.byteLength),n=new Uint8Array(t);return n.set(e),n}async function hj(e,t){let n=mj(e),r=new Blob([n],{type:t}),i=await createImageBitmap(r);try{return{width:i.width,height:i.height}}finally{i.close?.()}}async function gj(e,t,n,r){let i=mj(e),a=new Blob([i],{type:t}),o=await createImageBitmap(a);try{let i=o.width,a=o.height,s=Math.min(n/i,r/a,1),c=Math.max(1,Math.round(i*s)),l=Math.max(1,Math.round(a*s)),u=new OffscreenCanvas(c,l),d=u.getContext(`2d`);if(!d)throw Error(`failed to acquire 2d context for resize`);d.drawImage(o,0,0,c,l);let f=dj(e,t)?pj.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 _j(e){let t=S(e,{bool:oj,value:sj});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 vj(e){return{ok:!0,message:e}}function G(e){return{ok:!1,result:{stdout:``,stderr:e,exitCode:1}}}function yj(e){return e?` (targetId: ${e})`:``}function bj(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 xj(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),vj(`opened sprinkle ${e} from ${a}`)}catch(e){return G(`open: ${e instanceof Error?e.message:String(e)}\n`)}}if(r){let e=await fr(t.fs,xr(a)),n=Hr(a,e),r;try{r=await i(n)}catch(e){return G(`${e instanceof Error?e.message:String(e)}\n`)}return vj(`opened ${a} → ${n}${yj(r)}`)}return G(`open: sprinkle manager not initialized
1765
- `)}async function Sj(e,t,n){if(!t)return G(`open: browser APIs are unavailable in this environment
1766
- `);let r;try{r=await n(e)}catch(e){return G(`${e instanceof Error?e.message:String(e)}\n`)}return vj(`opened ${e}${yj(r)}`)}async function Cj(e,t,n,r){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=ur(t),s=new Uint8Array(a),c=null;if(r!==void 0&&(c=uj(r),!c))return G(`open: invalid --size spec '${r}' (expected low|medium|high or WxH such as 512x512)\n`);if(!c){let n;try{n=await hj(s,o)}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(s.byteLength/1024);return G(`open --view: ${t} is ${n.width}x${n.height} (${r} KB, ${o})\n`+fj())}let u;try{u=await gj(s,o,c.maxW,c.maxH)}catch(t){return G(`open: not an image or failed to decode: ${e} (${t instanceof Error?t.message:String(t)})\n`)}let d=l(u.bytes),f=Math.round(u.bytes.byteLength/1024);return vj(`${t} (${u.nativeWidth}x${u.nativeHeight} → ${u.width}x${u.height}, ${f} KB, ${u.mime})\n<img:data:${u.mime};base64,${d}>`)}async function wj(e,t,n,r){if(!r)return G(`open: --download requires the in-panel terminal (DOM-only)
1767
- `);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:ur(t)}),c=URL.createObjectURL(s),l=document.createElement(`a`);return l.href=c,l.download=gr(t)||`download`,l.style.display=`none`,document.body.appendChild(l),l.click(),document.body.removeChild(l),setTimeout(()=>URL.revokeObjectURL(c),0),vj(`downloaded ${t}`)}async function Tj(e,t,n,r){if(!n)return G(`open: browser APIs are unavailable in this environment
1768
- `);let i=!1;try{i=(await t.fs.stat(e)).isDirectory}catch{}let a=await fr(t.fs,i?e:xr(e)),o=Hr(e,a),s;try{s=await r(o)}catch(e){return G(`${e instanceof Error?e.message:String(e)}\n`)}return vj(`opened ${e} → ${o}${yj(s)}`)}async function Ej(e,t,n,r){if(!mr(e)&&e.endsWith(`.shtml`)&&t.fs)return xj(e,t,r.sprinkleManager,r.canOpenWindow,r.openExternal);if(!n.view&&!r.canOpenWindow)return G(`open: browser APIs are unavailable in this environment
1769
- `);if(mr(e))return Sj(e,r.canOpenWindow,r.openExternal);let i=t.fs.resolvePath(t.cwd,e);return n.view?Cj(e,i,t,n.sizeSpec):n.download?wj(e,i,t,r.hasDom):Tj(i,t,r.canOpenWindow,r.openExternal)}function Dj(e){return x(`open`,async(t,n)=>{if(t.length===0||C(t,{valueFlags:sj}))return lj();let r=_j(t);if(`error`in r)return{stdout:``,stderr:`${r.error}\n`,exitCode:1};let{download:i,view:a,sizeSpec:s,targets:c}=r;if(c.length===0)return lj();let l=globalThis.__slicc_sprinkleManager,u=typeof window<`u`&&typeof document<`u`,d=u?null:o(),f={canOpenWindow:!!e||u||!!d,hasDom:u,sprinkleManager:l,openExternal:bj(e,u,d)},p=[];for(let e of c){let t=await Ej(e,n,{view:a,download:i,sizeSpec:s},f);if(!t.ok)return t.result;p.push(t.message)}return{stdout:p.join(`
1768
+ `}const Tj=new Set([`image/png`,`image/webp`]);function Ej(e){let t=new ArrayBuffer(e.byteLength),n=new Uint8Array(t);return n.set(e),n}async function Dj(e,t){let n=Ej(e),r=new Blob([n],{type:t}),i=await createImageBitmap(r);try{return{width:i.width,height:i.height}}finally{i.close?.()}}async function Oj(e,t,n,r){let i=Ej(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=Cj(e,t)?Tj.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 kj(e){let t=S(e,{bool:vj,value:yj});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 Aj(e){return{ok:!0,message:e}}function G(e){return{ok:!1,result:{stdout:``,stderr:e,exitCode:1}}}function jj(e){return e?` (targetId: ${e})`:``}function Mj(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 Nj(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),Aj(`opened sprinkle ${e} from ${a}`)}catch(e){return G(`open: ${e instanceof Error?e.message:String(e)}\n`)}}if(r){let e=await fr(t.fs,xr(a)),n=Hr(a,e),r;try{r=await i(n)}catch(e){return G(`${e instanceof Error?e.message:String(e)}\n`)}return Aj(`opened ${a} → ${n}${jj(r)}`)}return G(`open: sprinkle manager not initialized
1769
+ `)}async function Pj(e,t,n){if(!t)return G(`open: browser APIs are unavailable in this environment
1770
+ `);let r;try{r=await n(e)}catch(e){return G(`${e instanceof Error?e.message:String(e)}\n`)}return Aj(`opened ${e}${jj(r)}`)}async function Fj(e,t,n,r){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=ur(t),s=new Uint8Array(a),c=null;if(r!==void 0&&(c=Sj(r),!c))return G(`open: invalid --size spec '${r}' (expected low|medium|high or WxH such as 512x512)\n`);if(!c){let n;try{n=await Dj(s,o)}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(s.byteLength/1024);return G(`open --view: ${t} is ${n.width}x${n.height} (${r} KB, ${o})\n`+wj())}let u;try{u=await Oj(s,o,c.maxW,c.maxH)}catch(t){return G(`open: not an image or failed to decode: ${e} (${t instanceof Error?t.message:String(t)})\n`)}let d=l(u.bytes),f=Math.round(u.bytes.byteLength/1024);return Aj(`${t} (${u.nativeWidth}x${u.nativeHeight} → ${u.width}x${u.height}, ${f} KB, ${u.mime})\n<img:data:${u.mime};base64,${d}>`)}async function Ij(e,t,n,r){if(!r)return G(`open: --download requires the in-panel terminal (DOM-only)
1771
+ `);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:ur(t)}),c=URL.createObjectURL(s),l=document.createElement(`a`);return l.href=c,l.download=gr(t)||`download`,l.style.display=`none`,document.body.appendChild(l),l.click(),document.body.removeChild(l),setTimeout(()=>URL.revokeObjectURL(c),0),Aj(`downloaded ${t}`)}async function Lj(e,t,n,r){if(!n)return G(`open: browser APIs are unavailable in this environment
1772
+ `);let i=!1;try{i=(await t.fs.stat(e)).isDirectory}catch{}let a=await fr(t.fs,i?e:xr(e)),o=Hr(e,a),s;try{s=await r(o)}catch(e){return G(`${e instanceof Error?e.message:String(e)}\n`)}return Aj(`opened ${e} → ${o}${jj(s)}`)}async function Rj(e,t,n,r){if(!mr(e)&&e.endsWith(`.shtml`)&&t.fs)return Nj(e,t,r.sprinkleManager,r.canOpenWindow,r.openExternal);if(!n.view&&!r.canOpenWindow)return G(`open: browser APIs are unavailable in this environment
1773
+ `);if(mr(e))return Pj(e,r.canOpenWindow,r.openExternal);let i=t.fs.resolvePath(t.cwd,e);return n.view?Fj(e,i,t,n.sizeSpec):n.download?Ij(e,i,t,r.hasDom):Lj(i,t,r.canOpenWindow,r.openExternal)}function zj(e){return x(`open`,async(t,n)=>{if(t.length===0||C(t,{valueFlags:yj}))return xj();let r=kj(t);if(`error`in r)return{stdout:``,stderr:`${r.error}\n`,exitCode:1};let{download:i,view:a,sizeSpec:s,targets:c}=r;if(c.length===0)return xj();let l=globalThis.__slicc_sprinkleManager,u=typeof window<`u`&&typeof document<`u`,d=u?null:o(),f={canOpenWindow:!!e||u||!!d,hasDom:u,sprinkleManager:l,openExternal:Mj(e,u,d)},p=[];for(let e of c){let t=await Rj(e,n,{view:a,download:i,sizeSpec:s},f);if(!t.ok)return t.result;p.push(t.message)}return{stdout:p.join(`
1770
1774
  `)+`
1771
- `,stderr:``,exitCode:0}})}function Oj(){return x(`patch`,async(e,t)=>{let{runPatch:n}=await import(`./run-CMIBcXTS.js`);return n(e,t)})}function kj(e=`pdftk`){return x(e,async(t,n)=>{let{runPdftk:r}=await import(`./run-BEs473Sp.js`);return r(e,t,n)})}function Aj(){return{stdout:`usage: pdftoppm [options] <input.pdf> [output-prefix]
1775
+ `,stderr:``,exitCode:0}})}function Bj(){return x(`patch`,async(e,t)=>{let{runPatch:n}=await import(`./run-6TnylQzV.js`);return n(e,t)})}function Vj(e=`pdftk`){return x(e,async(t,n)=>{let{runPdftk:r}=await import(`./run-BEs473Sp.js`);return r(e,t,n)})}function Hj(){return{stdout:`usage: pdftoppm [options] <input.pdf> [output-prefix]
1772
1776
 
1773
1777
  Rasterize PDF pages to images. Writes <prefix>-<n>.<ext> per page, where <n>
1774
1778
  is zero-padded to the digit width of the last page (out-1.png for a 9-page
@@ -1795,8 +1799,8 @@ Examples:
1795
1799
  pdftoppm -png -r 150 doc.pdf page
1796
1800
  pdftoppm -jpeg -jpegopt quality=80 -f 1 -l 3 doc.pdf out
1797
1801
  pdftoppm -png -singlefile -scale-to 1024 doc.pdf cover
1798
- `,stderr:``,exitCode:0}}function jj(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 Mj(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 Nj(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=Mj(e[++d]),t=`jpeg`;break;case`-r`:n=jj(e[++d],`-r`);break;case`-f`:r=jj(e[++d],`-f`);break;case`-l`:i=jj(e[++d],`-l`);break;case`-scale-to`:a=jj(e[++d],`-scale-to`);break;case`-scale-to-x`:o=jj(e[++d],`-scale-to-x`);break;case`-scale-to-y`:s=jj(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 Pj(e){let t=e.lastIndexOf(`.`);return t>0?e.slice(0,t):e}function Fj(e,t,n,r){let i=String(n).length;return`${e}-${String(t).padStart(i,`0`)}.${r}`}function Ij(e){return e===`jpeg`?`jpg`:`png`}function Lj(e){return e.scaleToX===void 0?e.scaleToY===void 0?e.scaleTo===void 0?{scale:Fi(e.dpi)}:{longEdge:e.scaleTo}:{height:e.scaleToY}:{width:e.scaleToX}}async function Rj(e,t){let n=e.fs.resolvePath(e.cwd,t),r=await e.fs.readFileBuffer(n);if(!Ni(r))throw Error(`${t}: not a PDF file`);return r}function zj(e=`pdftoppm`){return x(e,async(t,n)=>{if(t.length===0||t.includes(`--help`)||t.includes(`-h`))return Aj();let r;try{r=Nj(t)}catch(t){return{stdout:``,stderr:`${e}: ${t instanceof Error?t.message:String(t)}\n`,exitCode:1}}try{let t=await Rj(n,r.inputPath),i=Ij(r.format),a=r.outputRoot??Pj(gr(r.inputPath)),o=[];return await Mi(t,{firstPage:r.firstPage,lastPage:r.singleFile?r.firstPage??1:r.lastPage,format:r.format,quality:r.quality,...Lj(r)},async(e,t)=>{let s=r.singleFile?`${a}.${i}`:Fj(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(`
1799
- `)}\n`,stderr:``,exitCode:0}}catch(t){return{stdout:``,stderr:`${e}: ${t instanceof Error?t.message:String(t)}\n`,exitCode:1}}})}function Bj(e=`pdftotext`){return x(e,async(t,n)=>{let{runPdftotext:r}=await import(`./run-BVzzZSqz.js`);return r(e,t,n)})}function Vj(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 Hj(){$C(()=>()=>ce()),QC(()=>()=>Vj(ce()))}const Uj=`/workspace/.plugins/sources`;function Wj(e){return{stdout:e,stderr:``,exitCode:0}}function K(e,t=1){return{stdout:``,stderr:`${e}\n`,exitCode:t}}function Gj(e,t){let n=S(t,{});return`error`in n?K(`plugin ${e}: ${n.error}`):{ok:!0,positionals:n.positionals}}function Kj(){return`usage: plugin <command> [args]
1802
+ `,stderr:``,exitCode:0}}function Uj(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 Wj(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 Gj(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=Wj(e[++d]),t=`jpeg`;break;case`-r`:n=Uj(e[++d],`-r`);break;case`-f`:r=Uj(e[++d],`-f`);break;case`-l`:i=Uj(e[++d],`-l`);break;case`-scale-to`:a=Uj(e[++d],`-scale-to`);break;case`-scale-to-x`:o=Uj(e[++d],`-scale-to-x`);break;case`-scale-to-y`:s=Uj(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 Kj(e){let t=e.lastIndexOf(`.`);return t>0?e.slice(0,t):e}function qj(e,t,n,r){let i=String(n).length;return`${e}-${String(t).padStart(i,`0`)}.${r}`}function Jj(e){return e===`jpeg`?`jpg`:`png`}function Yj(e){return e.scaleToX===void 0?e.scaleToY===void 0?e.scaleTo===void 0?{scale:Fi(e.dpi)}:{longEdge:e.scaleTo}:{height:e.scaleToY}:{width:e.scaleToX}}async function Xj(e,t){let n=e.fs.resolvePath(e.cwd,t),r=await e.fs.readFileBuffer(n);if(!Ni(r))throw Error(`${t}: not a PDF file`);return r}function Zj(e=`pdftoppm`){return x(e,async(t,n)=>{if(t.length===0||t.includes(`--help`)||t.includes(`-h`))return Hj();let r;try{r=Gj(t)}catch(t){return{stdout:``,stderr:`${e}: ${t instanceof Error?t.message:String(t)}\n`,exitCode:1}}try{let t=await Xj(n,r.inputPath),i=Jj(r.format),a=r.outputRoot??Kj(gr(r.inputPath)),o=[];return await Mi(t,{firstPage:r.firstPage,lastPage:r.singleFile?r.firstPage??1:r.lastPage,format:r.format,quality:r.quality,...Yj(r)},async(e,t)=>{let s=r.singleFile?`${a}.${i}`:qj(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(`
1803
+ `)}\n`,stderr:``,exitCode:0}}catch(t){return{stdout:``,stderr:`${e}: ${t instanceof Error?t.message:String(t)}\n`,exitCode:1}}})}function Qj(e=`pdftotext`){return x(e,async(t,n)=>{let{runPdftotext:r}=await import(`./run-BVzzZSqz.js`);return r(e,t,n)})}function $j(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 eM(){dw(()=>()=>ce()),uw(()=>()=>$j(ce()))}const tM=`/workspace/.plugins/sources`;function nM(e){return{stdout:e,stderr:``,exitCode:0}}function K(e,t=1){return{stdout:``,stderr:`${e}\n`,exitCode:t}}function rM(e,t){let n=S(t,{});return`error`in n?K(`plugin ${e}: ${n.error}`):{ok:!0,positionals:n.positionals}}function iM(){return`usage: plugin <command> [args]
1800
1804
 
1801
1805
  Load Agent Plugins packages (agent-plugins.org spec v1.0.0): portable
1802
1806
  directories bundling Agent Skills (skills/*/SKILL.md) and MCP servers
@@ -1806,7 +1810,7 @@ Commands:
1806
1810
  install <path|repo> Validate the plugin and register it. <repo> is a
1807
1811
  GitHub reference (owner/repo, owner/repo@branch, or
1808
1812
  https://github.com/owner/repo[/tree/branch[/dir]]),
1809
- downloaded into ${Uj}/.
1813
+ downloaded into ${tM}/.
1810
1814
  Skills surface through the standard skills discovery;
1811
1815
  streamable-http MCP servers are added to the MCP
1812
1816
  store as "<plugin>:<server>".
@@ -1828,36 +1832,36 @@ Examples:
1828
1832
  plugin list
1829
1833
  plugin info my-plugin
1830
1834
  plugin remove my-plugin
1831
- `}function qj(e={}){return x(`plugin`,async(t,n)=>{if(t.length===0||t[0]===`--help`||t[0]===`-h`)return Wj(Kj());let r=t[0],i=t.slice(1),a=n?.cwd??`/`;try{switch(r){case`install`:case`add`:return await eM(i,a,e);case`list`:case`ls`:return await iM(i,e);case`info`:return await aM(i,e);case`validate`:return await oM(i,a,e,Li(n?.env));case`remove`:case`rm`:case`delete`:return await sM(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 Jj(e){if(e.fs)return e.fs;let{VirtualFS:t}=await import(`./fs-BjjYK9VY.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 Yj(e,t,n){let r=cM(t,e);if(await n.exists(r))return{kind:`local`,root:r};let{parseGitHubRef:i}=await import(`./github-install-DTmIqVHt.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 Xj(e){let t=e.replace(/[^A-Za-z0-9._-]+/g,`-`);return/^\.+$/.test(t)?t.replace(/\./g,`_`):t}function Zj(e){let t=[e.owner,e.repo,...e.path?[e.path]:[]];return`${Uj}/${t.map(Xj).join(`--`)}`}async function Qj(e,t,n,r){let{fetchRepoZip:i,stripZipPrefix:a,writeZipFilesToDir:o}=await import(`./github-zip-BhnRGzD6.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 $j(e,t){try{await e.rm(t,{recursive:!0})}catch{}}async function eM(e,t,n){if(C(e))return Wj(`usage: plugin install <path|repo>
1835
+ `}function aM(e={}){return x(`plugin`,async(t,n)=>{if(t.length===0||t[0]===`--help`||t[0]===`-h`)return nM(iM());let r=t[0],i=t.slice(1),a=n?.cwd??`/`;try{switch(r){case`install`:case`add`:return await fM(i,a,e);case`list`:case`ls`:return await gM(i,e);case`info`:return await _M(i,e);case`validate`:return await vM(i,a,e,Li(n?.env));case`remove`:case`rm`:case`delete`:return await yM(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 oM(e){if(e.fs)return e.fs;let{VirtualFS:t}=await import(`./fs-C2ijOZal.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 sM(e,t,n){let r=bM(t,e);if(await n.exists(r))return{kind:`local`,root:r};let{parseGitHubRef:i}=await import(`./github-install-ES8l_Aiw.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 cM(e){let t=e.replace(/[^A-Za-z0-9._-]+/g,`-`);return/^\.+$/.test(t)?t.replace(/\./g,`_`):t}function lM(e){let t=[e.owner,e.repo,...e.path?[e.path]:[]];return`${tM}/${t.map(cM).join(`--`)}`}async function uM(e,t,n,r){let{fetchRepoZip:i,stripZipPrefix:a,writeZipFilesToDir:o}=await import(`./github-zip-zELTjFGS.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 dM(e,t){try{await e.rm(t,{recursive:!0})}catch{}}async function fM(e,t,n){if(C(e))return nM(`usage: plugin install <path|repo>
1832
1836
 
1833
1837
  Loads the Agent Plugins package at <path>, or downloads it from a GitHub
1834
1838
  reference (owner/repo, owner/repo@branch, or
1835
1839
  https://github.com/owner/repo[/tree/branch[/dir]]) into
1836
- ${Uj}/ first. Validates plugin.json (closed
1840
+ ${tM}/ first. Validates plugin.json (closed
1837
1841
  schema, name constraints), discovers skills/*/SKILL.md, and validates
1838
1842
  mcp.json. On success the plugin is recorded in
1839
1843
  /workspace/.plugins/plugins.json — its skills then surface through the
1840
1844
  standard skills discovery, and each supported streamable-http MCP server
1841
1845
  is registered in the MCP store as "<plugin>:<server>".
1842
- `);let r=Gj(`install`,e);if(!(`ok`in r))return r;if(r.positionals.length<1)return K(`plugin install: expected <path|repo>`);let i=await Jj(n),a=await Yj(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=Zj(a.ref),s=a.ref.display;let e=await Qj(a.ref,o,i,n.fetch);if(e)return K(`plugin install: ${e}`)}else o=a.root;let{loadPluginFromDirectory:c}=await import(`./loader-Dw-TPPKt.js`),l=await c(i,o);if(!l.ok)return a.kind===`github`&&await $j(i,o),K(`plugin install: plugin at ${s??o} was rejected:\n${lM(l.diagnostics)}`);let{plugin:u}=l,d=u.manifest.name,{getInstalledPlugin:f,setInstalledPlugin:p}=await import(`./store-BaPEf7w5.js`),m=await f(d,n.fs);if(m&&m.root!==o)return a.kind===`github`&&await $j(i,o),K(`plugin install: a plugin named "${d}" is already installed from ${m.root} (remove it first)`);let h=await rM(u,n),g=await nM(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),Wj(tM(u,h,g,s??o,l.diagnostics))}function tM(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:`,lM(i)),c.join(`
1846
+ `);let r=rM(`install`,e);if(!(`ok`in r))return r;if(r.positionals.length<1)return K(`plugin install: expected <path|repo>`);let i=await oM(n),a=await sM(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=lM(a.ref),s=a.ref.display;let e=await uM(a.ref,o,i,n.fetch);if(e)return K(`plugin install: ${e}`)}else o=a.root;let{loadPluginFromDirectory:c}=await import(`./loader-Dw-TPPKt.js`),l=await c(i,o);if(!l.ok)return a.kind===`github`&&await dM(i,o),K(`plugin install: plugin at ${s??o} was rejected:\n${xM(l.diagnostics)}`);let{plugin:u}=l,d=u.manifest.name,{getInstalledPlugin:f,setInstalledPlugin:p}=await import(`./store-DUXsSwvf.js`),m=await f(d,n.fs);if(m&&m.root!==o)return a.kind===`github`&&await dM(i,o),K(`plugin install: a plugin named "${d}" is already installed from ${m.root} (remove it first)`);let h=await hM(u,n),g=await mM(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),nM(pM(u,h,g,s??o,l.diagnostics))}function pM(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:`,xM(i)),c.join(`
1843
1847
  `)+`
1844
- `}async function nM(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-BuVY3ZgP.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 rM(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-BuVY3ZgP.js`).then(e=>e.r),{McpClient:a}=await import(`./client-GY8xUpw7.js`).then(e=>e.n),o=[],s=[];for(let c of n){let n=c.config,l=`${e.manifest.name}:${c.name}`,u=await r(l,t.fs);if(u&&u.pluginOrigin!==e.manifest.name){s.push(l);continue}let d=[];try{let e=new a({url:n.url,headers:n.headers});await e.initialize(),d=await e.toolsList()}catch{}await i(l,{url:n.url,...n.headers?{headers:n.headers}:{},tools:d,addedAt:new Date().toISOString(),pluginOrigin:e.manifest.name},t.fs),o.push(l)}return{registered:o,conflicts:s}}async function iM(e,t){if(C(e))return Wj(`usage: plugin list
1845
- `);let n=Gj(`list`,e);if(!(`ok`in n))return n;let{listInstalledPlugins:r}=await import(`./store-BaPEf7w5.js`),i=await r(t.fs),a=Object.keys(i).sort();if(a.length===0)return Wj("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 Wj(o.map(e=>e.map((e,t)=>e.padEnd(s[t])).join(` `)).join(`
1848
+ `}async function mM(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-CKVmFL1z.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 hM(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-CKVmFL1z.js`).then(e=>e.r),{McpClient:a}=await import(`./client-GY8xUpw7.js`).then(e=>e.n),o=[],s=[];for(let c of n){let n=c.config,l=`${e.manifest.name}:${c.name}`,u=await r(l,t.fs);if(u&&u.pluginOrigin!==e.manifest.name){s.push(l);continue}let d=[];try{let e=new a({url:n.url,headers:n.headers});await e.initialize(),d=await e.toolsList()}catch{}await i(l,{url:n.url,...n.headers?{headers:n.headers}:{},tools:d,addedAt:new Date().toISOString(),pluginOrigin:e.manifest.name},t.fs),o.push(l)}return{registered:o,conflicts:s}}async function gM(e,t){if(C(e))return nM(`usage: plugin list
1849
+ `);let n=rM(`list`,e);if(!(`ok`in n))return n;let{listInstalledPlugins:r}=await import(`./store-DUXsSwvf.js`),i=await r(t.fs),a=Object.keys(i).sort();if(a.length===0)return nM("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 nM(o.map(e=>e.map((e,t)=>e.padEnd(s[t])).join(` `)).join(`
1846
1850
  `)+`
1847
- `)}async function aM(e,t){if(C(e))return Wj(`usage: plugin info <name>
1848
- `);let n=Gj(`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-BaPEf7w5.js`),a=await i(r,t.fs);if(!a)return K(`plugin info: no installed plugin named "${r}"`);let o=await Jj(t),{loadPluginFromDirectory:s}=await import(`./loader-Dw-TPPKt.js`),c=await s(o,a.root);if(!c.ok)return K(`plugin info: plugin at ${a.root} no longer loads:\n${lM(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:`,lM(c.diagnostics)),Wj(d.join(`
1851
+ `)}async function _M(e,t){if(C(e))return nM(`usage: plugin info <name>
1852
+ `);let n=rM(`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-DUXsSwvf.js`),a=await i(r,t.fs);if(!a)return K(`plugin info: no installed plugin named "${r}"`);let o=await oM(t),{loadPluginFromDirectory:s}=await import(`./loader-Dw-TPPKt.js`),c=await s(o,a.root);if(!c.ok)return K(`plugin info: plugin at ${a.root} no longer loads:\n${xM(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:`,xM(c.diagnostics)),nM(d.join(`
1849
1853
  `)+`
1850
- `)}async function oM(e,t,n,r){if(C(e))return Wj(`usage: plugin validate <path|repo>
1851
- `);let i=Gj(`validate`,e);if(!(`ok`in i))return i;if(i.positionals.length<1)return K(`plugin validate: expected <path|repo>`);let a=await Jj(n),o=await Yj(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/${Zj(o.ref).split(`/`).pop()}`;let e=await Qj(o.ref,c,a,n.fetch);if(e)return K(`plugin validate: ${e}`);s=c}else s=o.root;let{loadPluginFromDirectory:l}=await import(`./loader-Dw-TPPKt.js`),u;try{u=await l(a,s)}finally{c&&await $j(a,c)}if(!u.ok)return{stdout:``,stderr:`plugin validate: REJECTED\n${lM(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:`,lM(u.diagnostics)),Wj(p.join(`
1854
+ `)}async function vM(e,t,n,r){if(C(e))return nM(`usage: plugin validate <path|repo>
1855
+ `);let i=rM(`validate`,e);if(!(`ok`in i))return i;if(i.positionals.length<1)return K(`plugin validate: expected <path|repo>`);let a=await oM(n),o=await sM(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/${lM(o.ref).split(`/`).pop()}`;let e=await uM(o.ref,c,a,n.fetch);if(e)return K(`plugin validate: ${e}`);s=c}else s=o.root;let{loadPluginFromDirectory:l}=await import(`./loader-Dw-TPPKt.js`),u;try{u=await l(a,s)}finally{c&&await dM(a,c)}if(!u.ok)return{stdout:``,stderr:`plugin validate: REJECTED\n${xM(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:`,xM(u.diagnostics)),nM(p.join(`
1852
1856
  `)+`
1853
- `)}async function sM(e,t){if(C(e))return Wj(`usage: plugin remove <name>
1854
- `);let n=Gj(`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-BaPEf7w5.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-BuVY3ZgP.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(`${Uj}/`);return c&&await $j(await Jj(t),o.root),Wj([`Removed agent plugin "${r}"`,` registry: removed`,` mcp servers: ${s} removed`,c?` files: removed (${o.root})`:` files: left in place (${o.root})`].join(`
1857
+ `)}async function yM(e,t){if(C(e))return nM(`usage: plugin remove <name>
1858
+ `);let n=rM(`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-DUXsSwvf.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-CKVmFL1z.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(`${tM}/`);return c&&await dM(await oM(t),o.root),nM([`Removed agent plugin "${r}"`,` registry: removed`,` mcp servers: ${s} removed`,c?` files: removed (${o.root})`:` files: left in place (${o.root})`].join(`
1855
1859
  `)+`
1856
- `)}function cM(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 lM(e){return e.map(e=>` ${e.level===`error`?`error`:`warn `} [${e.component}] ${e.message}`).join(`
1857
- `)}const uM=[`pid`,`ppid`,`kind`,`stat`,`start`,`scoop`,`command`],dM=[`pid`,`ppid`,`stat`,`start`,`scoop`,`command`],fM={running:`R`,pending:`S`,exited:`Z`,killed:`K`},pM=[`-a`,`-A`,`-e`,`--all`,`-T`,`--tree`],mM=[`-o`,`--columns`];function hM(e={}){return x(`ps`,async t=>{if(C(t,{valueFlags:mM}))return DM();let n=e.processManager??gM();if(!n)return{stdout:``,stderr:`ps: no process manager available in this runtime
1858
- `,exitCode:1};let r=S(t,{bool:pM,value:mM});if(`error`in r)return{stdout:``,stderr:`ps: ${r.error}\n`,exitCode:r.error.startsWith(`unknown flag:`)?1:2};if(r.positionals.length>0)return{stdout:``,stderr:`ps: unrecognized argument '${r.positionals[0]}'\n`,exitCode:2};let i=dM,a=r.bools.has(`-T`)||r.bools.has(`--tree`),o=r.bools.has(`-a`)||r.bools.has(`-A`)||r.bools.has(`-e`)||r.bools.has(`--all`),s=r.values.get(`-o`)??r.values.get(`--columns`);if(s!==void 0){let e=_M(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?EM(l):l.map(e=>({proc:e,depth:0}))).map(({proc:e,depth:t})=>bM(e,i,t,a));return{stdout:[vM(i),...u].join(`
1860
+ `)}function bM(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 xM(e){return e.map(e=>` ${e.level===`error`?`error`:`warn `} [${e.component}] ${e.message}`).join(`
1861
+ `)}const SM=[`pid`,`ppid`,`kind`,`stat`,`start`,`scoop`,`command`],CM=[`pid`,`ppid`,`stat`,`start`,`scoop`,`command`],wM={running:`R`,pending:`S`,exited:`Z`,killed:`K`},TM=[`-a`,`-A`,`-e`,`--all`,`-T`,`--tree`],EM=[`-o`,`--columns`];function DM(e={}){return x(`ps`,async t=>{if(C(t,{valueFlags:EM}))return zM();let n=e.processManager??OM();if(!n)return{stdout:``,stderr:`ps: no process manager available in this runtime
1862
+ `,exitCode:1};let r=S(t,{bool:TM,value:EM});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=CM,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=kM(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?RM(l):l.map(e=>({proc:e,depth:0}))).map(({proc:e,depth:t})=>MM(e,i,t,a));return{stdout:[AM(i),...u].join(`
1859
1863
  `)+`
1860
- `,stderr:``,exitCode:0}})}function gM(){let e=globalThis.__slicc_pm;return e instanceof Object&&typeof e.list==`function`?e:null}function _M(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(!uM.includes(e))return Error(`unknown column '${e}'; supported: ${uM.join(`, `)}`);n.push(e)}return n}function vM(e){return e.map(e=>yM(e)).join(` `)}function yM(e){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(10);case`command`:return`COMMAND`}}function bM(e,t,n,r){return t.map(t=>xM(e,t,n,r)).join(` `)}function xM(e,t,n,r){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 fM[e.status];case`start`:return SM(e.startedAt);case`scoop`:return CM(e).padEnd(10);case`command`:return wM(e,n,r)}}function SM(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 CM(e){return e.owner.kind===`cone`?`cone`:e.owner.kind===`system`?`system`:e.owner.kind===`jshd`?`jshd`:e.owner.scoopJid?.slice(0,10)??`scoop`}function wM(e,t,n){let r=n&&t>0?` `.repeat(t-1)+`└─ `:``,i=e.argv.length===0?`[${e.kind}]`:e.argv.map(TM).join(` `);return r+(i.length>80?i.slice(0,79)+`…`:i)}function TM(e){return e===``?`''`:/^[A-Za-z0-9_./:=@%+-]+$/.test(e)?e:e.includes(`"`)&&!e.includes(`'`)?`'${e}'`:`"${e.replace(/\\/g,`\\\\`).replace(/"/g,`\\"`)}"`}function EM(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 DM(){return{stdout:`Usage: ps [-a] [-T] [-o col[,col…]]
1864
+ `,stderr:``,exitCode:0}})}function OM(){let e=globalThis.__slicc_pm;return e instanceof Object&&typeof e.list==`function`?e:null}function kM(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(!SM.includes(e))return Error(`unknown column '${e}'; supported: ${SM.join(`, `)}`);n.push(e)}return n}function AM(e){return e.map(e=>jM(e)).join(` `)}function jM(e){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(10);case`command`:return`COMMAND`}}function MM(e,t,n,r){return t.map(t=>NM(e,t,n,r)).join(` `)}function NM(e,t,n,r){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 wM[e.status];case`start`:return PM(e.startedAt);case`scoop`:return FM(e).padEnd(10);case`command`:return IM(e,n,r)}}function PM(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 FM(e){return e.owner.kind===`cone`?`cone`:e.owner.kind===`system`?`system`:e.owner.kind===`jshd`?`jshd`:e.owner.scoopJid?.slice(0,10)??`scoop`}function IM(e,t,n){let r=n&&t>0?` `.repeat(t-1)+`└─ `:``,i=e.argv.length===0?`[${e.kind}]`:e.argv.map(LM).join(` `);return r+(i.length>80?i.slice(0,79)+`…`:i)}function LM(e){return e===``?`''`:/^[A-Za-z0-9_./:=@%+-]+$/.test(e)?e:e.includes(`"`)&&!e.includes(`'`)?`'${e}'`:`"${e.replace(/\\/g,`\\\\`).replace(/"/g,`\\"`)}"`}function RM(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 zM(){return{stdout:`Usage: ps [-a] [-T] [-o col[,col…]]
1861
1865
 
1862
1866
  List processes tracked by the kernel.
1863
1867
 
@@ -1887,9 +1891,9 @@ Examples:
1887
1891
  ps -T live tree
1888
1892
  ps -a -T full tree
1889
1893
  ps -o pid,kind,stat just three columns
1890
- `,stderr:``,exitCode:0}}const OM=new Set([`dev`,`proc`,`lib`,`bin`,`usr`,`etc`,`home`,`tmp`]);async function kM(e,t=OM){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 AM(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 jM(){try{if(typeof globalThis.navigator?.storage?.getDirectory==`function`)return`slicc-fs`}catch{}}function MM(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 NM(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 PM(e,t){return`installed pyodide ${e} is not the supported version ${t}: run \`ipk uninstall pyodide\` then \`ipk add pyodide@${t}\``}function FM(){return{stdout:`usage: python3 [-c code | script.py] [args...]
1891
- `,stderr:``,exitCode:0}}function IM(){return{stdout:`Python 3.14 (Pyodide)
1892
- `,stderr:``,exitCode:0}}async function LM(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 N(n.stdin).trim().length>0?{kind:`ok`,code:N(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 RM(e){let t=MM(e),n=await Pr(t);if(!n)return{kind:`result`,result:{stdout:``,stderr:`${Fr}\n`,exitCode:1}};let r=await NM(t.reader,n);return r?r===kr?{kind:`ok`,assetRoot:n}:{kind:`result`,result:{stdout:``,stderr:`${PM(r,kr)}\n`,exitCode:1}}:{kind:`result`,result:{stdout:``,stderr:`${Fr}\n`,exitCode:1}}}function zM(e,t={}){return x(e,async(n,r)=>{if(n.includes(`--help`)||n.includes(`-h`))return FM();if(n.includes(`--version`)||n.includes(`-V`))return IM();let i=await LM(e,n,r);if(i.kind===`result`)return i.result;let{code:a,filename:o,sysArgv:s,procArgv:c}=i,l=await kM(r.fs),u=AM(r.fs,l),d=t.buildProcessConfig?.(r.env),f=d?.processManager??BM(),p=d?.owner??{kind:`system`},m=d?.getParentPid?.(),h=t.realmFactory??Vt(),g=t.pyodideIndexURL??Tt(),_=t.pyodideAssetRoot;if(!_&&g===void 0){let e=await RM(r);if(e.kind===`result`)return e.result;_=e.assetRoot}let v=o===`<stdin>`?``:N(r.stdin),ee=jM();return f?Pt({pm:f,realmFactory:h,owner:p,kind:`py`,code:a,argv:c,realmArgv:s,env:Object.fromEntries(r.env.entries()),cwd:r.cwd,filename:o,ctx:r,stdin:v,pyodideIndexURL:g,pyodideAssetRoot:_,pyodideMountDirs:l,opfsMountDbName:ee,mountPoints:u,procKind:`py`,ppid:m}):HM({realmFactory:h,owner:p,code:a,argv:c,realmArgv:s,env:Object.fromEntries(r.env.entries()),cwd:r.cwd,filename:o,ctx:r,stdin:v,pyodideIndexURL:g,pyodideAssetRoot:_,pyodideMountDirs:l,opfsMountDbName:ee,mountPoints:u})})}function BM(){let e=globalThis.__slicc_pm;return e&&typeof e==`object`&&typeof e.spawn==`function`&&typeof e.onSignal==`function`?e:null}let VM=null;async function HM(e){if(!VM){let{ProcessManager:e}=await import(`./process-manager-BkhAohXT.js`).then(e=>e.n);VM=new e}return Pt({pm:VM,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`})}function UM(){return x(`rg`,async(e,t)=>{let{runRg:n}=await import(`./run-DniTiLYn.js`);return n(e,t)})}function WM(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 GM(){return null}function KM(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=qM(r),o=qM(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 qM(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 JM(){return{stdout:`rsync — sync files between local VFS and a remote tray runtime
1894
+ `,stderr:``,exitCode:0}}const BM=new Set([`dev`,`proc`,`lib`,`bin`,`usr`,`etc`,`home`,`tmp`]);async function VM(e,t=BM){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 HM(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 UM(){try{if(typeof globalThis.navigator?.storage?.getDirectory==`function`)return`slicc-fs`}catch{}}function WM(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 GM(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 KM(e,t){return`installed pyodide ${e} is not the supported version ${t}: run \`ipk uninstall pyodide\` then \`ipk add pyodide@${t}\``}function qM(){return{stdout:`usage: python3 [-c code | script.py] [args...]
1895
+ `,stderr:``,exitCode:0}}function JM(){return{stdout:`Python 3.14 (Pyodide)
1896
+ `,stderr:``,exitCode:0}}async function YM(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 N(n.stdin).trim().length>0?{kind:`ok`,code:N(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 XM(e){let t=WM(e),n=await Pr(t);if(!n)return{kind:`result`,result:{stdout:``,stderr:`${Fr}\n`,exitCode:1}};let r=await GM(t.reader,n);return r?r===kr?{kind:`ok`,assetRoot:n}:{kind:`result`,result:{stdout:``,stderr:`${KM(r,kr)}\n`,exitCode:1}}:{kind:`result`,result:{stdout:``,stderr:`${Fr}\n`,exitCode:1}}}function ZM(e,t={}){return x(e,async(n,r)=>{if(n.includes(`--help`)||n.includes(`-h`))return qM();if(n.includes(`--version`)||n.includes(`-V`))return JM();let i=await YM(e,n,r);if(i.kind===`result`)return i.result;let{code:a,filename:o,sysArgv:s,procArgv:c}=i,l=await VM(r.fs),u=HM(r.fs,l),d=t.buildProcessConfig?.(r.env),f=d?.processManager??QM(),p=d?.owner??{kind:`system`},m=d?.getParentPid?.(),h=t.realmFactory??Vt(),g=t.pyodideIndexURL??Tt(),_=t.pyodideAssetRoot;if(!_&&g===void 0){let e=await XM(r);if(e.kind===`result`)return e.result;_=e.assetRoot}let v=o===`<stdin>`?``:N(r.stdin),ee=UM();return f?Pt({pm:f,realmFactory:h,owner:p,kind:`py`,code:a,argv:c,realmArgv:s,env:Object.fromEntries(r.env.entries()),cwd:r.cwd,filename:o,ctx:r,stdin:v,pyodideIndexURL:g,pyodideAssetRoot:_,pyodideMountDirs:l,opfsMountDbName:ee,mountPoints:u,procKind:`py`,ppid:m}):eN({realmFactory:h,owner:p,code:a,argv:c,realmArgv:s,env:Object.fromEntries(r.env.entries()),cwd:r.cwd,filename:o,ctx:r,stdin:v,pyodideIndexURL:g,pyodideAssetRoot:_,pyodideMountDirs:l,opfsMountDbName:ee,mountPoints:u})})}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 Pt({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`})}function tN(){return x(`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
1893
1897
 
1894
1898
  Usage:
1895
1899
  rsync [flags] <local-path> <runtime-id>:<remote-path> # push
@@ -1905,21 +1909,21 @@ Examples:
1905
1909
  rsync /workspace follower-abc123:/workspace
1906
1910
  rsync --delete /shared leader:/shared
1907
1911
  rsync follower-abc123:/workspace/project /workspace/project
1908
- `,stderr:``,exitCode:0}}async function YM(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 XM(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 ZM(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 QM(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 $M(e){let t=e.lastIndexOf(`/`);return t<=0?`/`:e.slice(0,t)}async function eN(e,t,n){let r=[],{localPath:i,remotePath:a,runtimeId:o,verbose:s,dryRun:c}=n,u=WM(await YM(e,i),await XM(t,o,a),{delete:n.delete});if(s||c){for(let e of u.toAdd)r.push(`+ ${e}`);for(let e of u.toUpdate)r.push(`~ ${e}`);for(let e of u.toDelete)r.push(`- ${e}`);if(s)for(let e of u.toSkip)r.push(` ${e} (up to date)`)}let d=u.toAdd.length+u.toUpdate.length+u.toDelete.length;if(c)return r.push(`\n(dry run) ${d} file(s) would be transferred, ${u.toSkip.length} up to date`),{stdout:r.join(`
1912
+ `,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,t,n){let r=[],{localPath:i,remotePath:a,runtimeId:o,verbose:s,dryRun:c}=n,u=nN(await sN(e,i),await cN(t,o,a),{delete:n.delete});if(s||c){for(let e of u.toAdd)r.push(`+ ${e}`);for(let e of u.toUpdate)r.push(`~ ${e}`);for(let e of u.toDelete)r.push(`- ${e}`);if(s)for(let e of u.toSkip)r.push(` ${e} (up to date)`)}let d=u.toAdd.length+u.toUpdate.length+u.toDelete.length;if(c)return r.push(`\n(dry run) ${d} file(s) would be transferred, ${u.toSkip.length} up to date`),{stdout:r.join(`
1909
1913
  `)+`
1910
- `,stderr:``,exitCode:0};for(let n of[...u.toAdd,...u.toUpdate]){let s=i+`/`+n,c=a+`/`+n;await QM(t,o,$M(c));let u=await e.readFile(s,{encoding:`binary`}),d=await t(o,{op:`writeFile`,path:c,content:l(u),encoding:`base64`});if(!d[0].ok)return{stdout:r.join(`
1914
+ `,stderr:``,exitCode:0};for(let n of[...u.toAdd,...u.toUpdate]){let s=i+`/`+n,c=a+`/`+n;await uN(t,o,dN(c));let u=await e.readFile(s,{encoding:`binary`}),d=await t(o,{op:`writeFile`,path:c,content:l(u),encoding:`base64`});if(!d[0].ok)return{stdout:r.join(`
1911
1915
  `)+`
1912
1916
  `,stderr:`Error writing ${c}: ${d[0].error}\n`,exitCode:1}}for(let e of u.toDelete){let n=a+`/`+e,i=await t(o,{op:`rm`,path:n});if(!i[0].ok)return{stdout:r.join(`
1913
1917
  `)+`
1914
1918
  `,stderr:`Error deleting ${n}: ${i[0].error}\n`,exitCode:1}}return r.push(`${d} file(s) transferred, ${u.toSkip.length} up to date`),{stdout:r.join(`
1915
1919
  `)+`
1916
- `,stderr:``,exitCode:0}}async function tN(e,t,n){let r=[],{localPath:i,remotePath:a,runtimeId:o,verbose:s,dryRun:c}=n,l=WM(await XM(t,o,a),await YM(e,i),{delete:n.delete});if(s||c){for(let e of l.toAdd)r.push(`+ ${e}`);for(let e of l.toUpdate)r.push(`~ ${e}`);for(let e of l.toDelete)r.push(`- ${e}`);if(s)for(let e of l.toSkip)r.push(` ${e} (up to date)`)}let d=l.toAdd.length+l.toUpdate.length+l.toDelete.length;if(c)return r.push(`\n(dry run) ${d} file(s) would be transferred, ${l.toSkip.length} up to date`),{stdout:r.join(`
1920
+ `,stderr:``,exitCode:0}}async function pN(e,t,n){let r=[],{localPath:i,remotePath:a,runtimeId:o,verbose:s,dryRun:c}=n,l=nN(await cN(t,o,a),await sN(e,i),{delete:n.delete});if(s||c){for(let e of l.toAdd)r.push(`+ ${e}`);for(let e of l.toUpdate)r.push(`~ ${e}`);for(let e of l.toDelete)r.push(`- ${e}`);if(s)for(let e of l.toSkip)r.push(` ${e} (up to date)`)}let d=l.toAdd.length+l.toUpdate.length+l.toDelete.length;if(c)return r.push(`\n(dry run) ${d} file(s) would be transferred, ${l.toSkip.length} up to date`),{stdout:r.join(`
1917
1921
  `)+`
1918
- `,stderr:``,exitCode:0};for(let n of[...l.toAdd,...l.toUpdate]){let r=a+`/`+n,s=i+`/`+n,c=$M(s);await e.exists(c)||await e.mkdir(c,{recursive:!0});let l=await ZM(t,o,r),d=u(l);await e.writeFile(s,d)}for(let t of l.toDelete){let n=i+`/`+t;await e.rm(n)}return r.push(`${d} file(s) transferred, ${l.toSkip.length} up to date`),{stdout:r.join(`
1922
+ `,stderr:``,exitCode:0};for(let n of[...l.toAdd,...l.toUpdate]){let r=a+`/`+n,s=i+`/`+n,c=dN(s);await e.exists(c)||await e.mkdir(c,{recursive:!0});let l=await lN(t,o,r),d=u(l);await e.writeFile(s,d)}for(let t of l.toDelete){let n=i+`/`+t;await e.rm(n)}return r.push(`${d} file(s) transferred, ${l.toSkip.length} up to date`),{stdout:r.join(`
1919
1923
  `)+`
1920
- `,stderr:``,exitCode:0}}function nN(e={}){let t=e.fs,n=e.getSendFsRequest??GM;return x(`rsync`,async e=>{if(e.includes(`--help`)||e.includes(`-h`)||e.length===0)return JM();if(!t)return{stdout:``,stderr:`rsync: no filesystem available
1924
+ `,stderr:``,exitCode:0}}function mN(e={}){let t=e.fs,n=e.getSendFsRequest??rN;return x(`rsync`,async e=>{if(e.includes(`--help`)||e.includes(`-h`)||e.length===0)return oN();if(!t)return{stdout:``,stderr:`rsync: no filesystem available
1921
1925
  `,exitCode:1};let r=n();if(!r)return{stdout:``,stderr:`rsync: not connected to a tray — rsync requires a tray connection
1922
- `,exitCode:1};let i=KM(e);if(`error`in i)return i.error===`__help__`?JM():{stdout:``,stderr:`rsync: ${i.error}\n`,exitCode:1};try{return i.direction===`push`?await eN(t,r,i):await tN(t,r,i)}catch(e){return{stdout:``,stderr:`rsync: ${e instanceof Error?e.message:String(e)}\n`,exitCode:1}}})}function rN(){return{stdout:`usage: say [-v voice] [-r rate] [-l lang] [-o file] [--list] <text>
1926
+ `,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>
1923
1927
  say --status | --warmup
1924
1928
 
1925
1929
  Speaks the given text. Uses on-device Kokoro voices when the model
@@ -1938,14 +1942,14 @@ Examples:
1938
1942
  [web speech] otherwise); kokoro voices lead when ready
1939
1943
  --status Show the on-device voice state (downloading/ready + ETA)
1940
1944
  --warmup Stage + start the on-device voice download in the background
1941
- `,stderr:``,exitCode:0}}function iN(e){switch(e.state){case`ready`:return`voice engine: ready
1945
+ `,stderr:``,exitCode:0}}function gN(e){switch(e.state){case`ready`:return`voice engine: ready
1942
1946
  `;case`failed`:return`voice engine: failed (re-run say --warmup to retry)
1943
1947
  `;case`idle`:return`voice engine: not downloaded (run say --warmup)
1944
- `;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 aN(e){return e instanceof Error?e.message:String(e)}let oN=!1,sN=null;function cN(){return oN?Promise.resolve(speechSynthesis.getVoices()):(sN||=new Promise(e=>{let t=speechSynthesis.getVoices();if(t.length>0){oN=!0,e(t);return}let n=()=>{oN=!0,speechSynthesis.removeEventListener(`voiceschanged`,n),e(speechSynthesis.getVoices())};speechSynthesis.addEventListener(`voiceschanged`,n),setTimeout(()=>{speechSynthesis.removeEventListener(`voiceschanged`,n),oN=!0,e(speechSynthesis.getVoices())},1e3)}),sN)}const lN={"-v":`a voice name`,"-r":`a rate value`,"-l":`a language tag`,"-o":`an output file path`,"--out":`an output file path`};function uN(e){return e!=null&&(!e.startsWith(`-`)||e===`-`)}function dN(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 fN(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 lN){let n=uN(r+1<e.length?e[r+1]:void 0)?e[++r]:null;if(n==null)return q(`${i} requires ${lN[i]}`);let a=dN(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 pN(e){let t=e.onDevice?`[kokoro]`:`[web speech]`;return`${e.name} (${e.lang}) ${t}${e.default?` [default]`:``}`}async function mN(e){if(e.local){let{kokoroVoicesIfReady:e}=await import(`./speech-page-realm-stub-C7EPKrHd.js`),t=e().map(e=>pN({name:e.id,lang:e.lang,onDevice:e.onDevice})),n=(await cN()).map(e=>pN({name:e.name,lang:e.lang,onDevice:!1,default:e.default}));return{stdout:[...t,...n].join(`
1948
+ `;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(`
1945
1949
  `)+`
1946
- `,stderr:``,exitCode:0}}try{return{stdout:(await e.panelRpc.call(`list-voices`,void 0)).voices.map(e=>pN(e)).join(`
1950
+ `,stderr:``,exitCode:0}}try{return{stdout:(await e.panelRpc.call(`list-voices`,void 0)).voices.map(e=>TN(e)).join(`
1947
1951
  `)+`
1948
- `,stderr:``,exitCode:0}}catch(e){return q(aN(e))}}async function hN(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 cN()).map(e=>({name:e.name}));return[...n,...r]}async function gN(e,t){let n=(await hN(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 _N(e,t){try{if(e.local){let{kokoroStatus:e,kokoroWarmup:n}=await import(`./speech-page-realm-stub-C7EPKrHd.js`);return{stdout:iN(t?n():e()),stderr:``,exitCode:0}}return{stdout:iN(t?await e.panelRpc.call(`speak-warmup`,void 0):await e.panelRpc.call(`speak-status`,void 0)),stderr:``,exitCode:0}}catch(e){return q(aN(e))}}async function vN(e,t){return t.includes(`--list`)?mN(e):t.includes(`--status`)?_N(e,!1):t.includes(`--warmup`)?_N(e,!0):null}async function yN(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: ${aN(e)}`)}}async function bN(e,t){try{return await e.panelRpc.call(`speak-text`,t,{timeoutMs:3e5}),{stdout:``,stderr:``,exitCode:0}}catch(e){return q(aN(e))}}async function xN(e){let{synthesizeToWav:t}=await import(`./speech-page-realm-stub-C7EPKrHd.js`);try{return{bytes:await t(e)}}catch(e){return q(aN(e))}}async function SN(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(aN(e))}}async function CN(e,t){return e.local?xN(t):SN(e,t)}async function wN(e,t){let n=await CN(e,t);return`exitCode`in n?n:{...ei(n.bytes),stderr:``,exitCode:0}}async function TN(e,t,n,r){let i=await CN(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}: ${aN(e)}`)}return{stdout:`wrote ${Math.max(1,Math.round(i.bytes.byteLength/1024))} KB to ${a}\n`,stderr:``,exitCode:0}}async function EN(e,t,n){let r;if(n.voiceName){let{resolved:t,error:i}=await gN(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&&!dS(t)?wN(e,i):n.outFile?TN(e,t,n.outFile,i):e.local?yN(i):bN(e,i)}function DN(){return x(`say`,async(e,t)=>{if(e.includes(`--help`)||e.includes(`-h`))return rN();let n={local:typeof window<`u`&&typeof speechSynthesis<`u`,panelRpc:o()};if(!n.local&&!n.panelRpc)return q(`Web Speech API unavailable in this environment`);let r=await vN(n,e);if(r)return r;let i=fN(e);return`exitCode`in i?i:i.text?i.lang?EN(n,t,{...i,lang:i.lang}):q(`-l language tag is required`):rN()})}function ON(){return x(`screencapture`,async(e,t)=>{let{runScreencapture:n}=await import(`./screencapture-run-CoYnKG1H.js`);return n(e,t)})}function kN(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 AN=1e4;async function jN(e,t,n){let r={method:e,headers:he({"Content-Type":`application/json`}),signal:AbortSignal.timeout(AN)};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:MN(e)}}}}function MN(e){let t=e instanceof Error?e.name:``;return t===`TimeoutError`||t===`AbortError`?`no response from the secret store within ${AN/1e3}s`:`secret store unreachable: ${e instanceof Error?e.message:String(e)}`}function NN(e,t){return`could not read ${e} secrets — ${t??`the bridge gave no reason`}`}function PN(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 FN(){return{async list(){let[e,t]=await Promise.all([jN(`GET`,``),jN(`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(NN(`saved`,zN(e.data)));if(t.ok)for(let e of t.data)n.push({name:e.name,domains:e.domains,persisted:!1});else r.push(NN(`session`,zN(t.data)));return{entries:n,warnings:r}},async getInfo(e){return PN(await this.list(),e)},async getMasked(e){let{ok:t,data:n}=await jN(`GET`,`/masked`);return t?n.find(t=>t.name===e)??null:null},async peek(e){let{ok:t,data:n}=await jN(`GET`,`/peek?name=${encodeURIComponent(e)}`);return t?n:null},async setSession(e,t,n){let{ok:r,data:i}=await jN(`POST`,`/session`,{name:e,value:t,domains:n});if(!r)throw Error(zN(i)??`failed to set session secret`)},async setPersisted(e,t,n){let{ok:r,data:i}=await jN(`POST`,``,{name:e,value:t,domains:n});if(!r)throw Error(zN(i)??`failed to persist secret`)},async setScope(e,t){let{ok:n,data:r}=await jN(`POST`,`/scope`,{name:e,domains:t});if(!n)throw Error(zN(r)??`failed to update scope`)},async delete(e){let{ok:t,status:n,data:r}=await jN(`DELETE`,`/${encodeURIComponent(e)}`);if(n===404)return{removed:!1};if(!t)throw Error(zN(r)??`failed to delete secret`);return{removed:!0,fromSession:r&&typeof r==`object`&&`fromSession`in r?!!r.fromSession:void 0}}}}function IN(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(NN(`saved`,e?.error)),n?.entries||i.push(NN(`session`,n?.error)),{entries:r,warnings:i}},async getInfo(e){return PN(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 LN(){return IN(e=>kN(e))}function RN(){return IN(e=>{let{type:t,...n}=e;return xe(t,n)})}function zN(e){if(e&&typeof e==`object`&&`error`in e){let t=e.error;if(typeof t==`string`)return t}}function BN(e){switch(e){case`extension-direct`:return LN();case`extension-delegate`:return RN();default:return FN()}}const VN=[`--domain`],HN=[`--persist`];function UN(){return`secret — manage secrets for the fetch proxy and mount backends
1952
+ `,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:{...ei(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&&!CS(t)?IN(e,i):n.outFile?LN(e,t,n.outFile,i):e.local?jN(i):MN(e,i)}function zN(){return x(`say`,async(e,t)=>{if(e.includes(`--help`)||e.includes(`-h`))return hN();let n={local:typeof window<`u`&&typeof speechSynthesis<`u`,panelRpc:o()};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 x(`screencapture`,async(e,t)=>{let{runScreencapture:n}=await import(`./screencapture-run-CoYnKG1H.js`);return n(e,t)})}function VN(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 HN=1e4;async function UN(e,t,n){let r={method:e,headers:he({"Content-Type":`application/json`}),signal:AbortSignal.timeout(HN)};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:WN(e)}}}}function WN(e){let t=e instanceof Error?e.name:``;return t===`TimeoutError`||t===`AbortError`?`no response from the secret store within ${HN/1e3}s`:`secret store unreachable: ${e instanceof Error?e.message:String(e)}`}function GN(e,t){return`could not read ${e} secrets — ${t??`the bridge gave no reason`}`}function KN(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 qN(){return{async list(){let[e,t]=await Promise.all([UN(`GET`,``),UN(`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(GN(`saved`,ZN(e.data)));if(t.ok)for(let e of t.data)n.push({name:e.name,domains:e.domains,persisted:!1});else r.push(GN(`session`,ZN(t.data)));return{entries:n,warnings:r}},async getInfo(e){return KN(await this.list(),e)},async getMasked(e){let{ok:t,data:n}=await UN(`GET`,`/masked`);return t?n.find(t=>t.name===e)??null:null},async peek(e){let{ok:t,data:n}=await UN(`GET`,`/peek?name=${encodeURIComponent(e)}`);return t?n:null},async setSession(e,t,n){let{ok:r,data:i}=await UN(`POST`,`/session`,{name:e,value:t,domains:n});if(!r)throw Error(ZN(i)??`failed to set session secret`)},async setPersisted(e,t,n){let{ok:r,data:i}=await UN(`POST`,``,{name:e,value:t,domains:n});if(!r)throw Error(ZN(i)??`failed to persist secret`)},async setScope(e,t){let{ok:n,data:r}=await UN(`POST`,`/scope`,{name:e,domains:t});if(!n)throw Error(ZN(r)??`failed to update scope`)},async delete(e){let{ok:t,status:n,data:r}=await UN(`DELETE`,`/${encodeURIComponent(e)}`);if(n===404)return{removed:!1};if(!t)throw Error(ZN(r)??`failed to delete secret`);return{removed:!0,fromSession:r&&typeof r==`object`&&`fromSession`in r?!!r.fromSession:void 0}}}}function JN(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(GN(`saved`,e?.error)),n?.entries||i.push(GN(`session`,n?.error)),{entries:r,warnings:i}},async getInfo(e){return KN(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 YN(){return JN(e=>VN(e))}function XN(){return JN(e=>{let{type:t,...n}=e;return xe(t,n)})}function ZN(e){if(e&&typeof e==`object`&&`error`in e){let t=e.error;if(typeof t==`string`)return t}}function QN(e){switch(e){case`extension-direct`:return YN();case`extension-delegate`:return XN();default:return qN()}}const $N=[`--domain`],eP=[`--persist`];function tP(){return`secret — manage secrets for the fetch proxy and mount backends
1949
1953
 
1950
1954
  No approval (session-only, in-memory, never persisted):
1951
1955
  secret set <name> <value> --domain <pat> Set a session secret. Free for a
@@ -1982,23 +1986,23 @@ Examples:
1982
1986
  secret peek OPENAI_KEY
1983
1987
  secret set GITHUB_TOKEN ghp_… --domain "api.github.com" --persist # prompts
1984
1988
  secret scope GITHUB_TOKEN --domain "api.github.com,*.github.com" # prompts
1985
- `}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 ot(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:`${lt(`secret`,e)}\n`,exitCode:1}}function ZN(e){let t=_e(),n=e.isExtension??(t===`extension-direct`||t===`extension-delegate`),r=e.backend??BN(t),i=e.grants??qN,a=e.broker,o=()=>(a??=ns(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&&ps(t))try{let n=await r.getMasked(t);n&&e.setEnv(t,n.maskedValue)}catch{}},clearMaskedEnv:t=>{e.unsetEnv&&ps(t)&&e.unsetEnv(t)}}}function QN(e){let t=N(e);if(t.length!==0)return t.endsWith(`\r
1989
+ `}function nP(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 rP(e){return{stdout:``,stderr:`secret: ${e}\n`,exitCode:1}}const iP={persist:`persist secret`,scope:`edit secret scope`,value:`change secret value`},aP=new Set;function oP(e,t){if(e===t)return!0;try{return ot(e).test(t)}catch{return!1}}function sP(e,t){for(let n of e)if(oP(n,t))return!0;return!1}function cP(e){return{stdout:``,stderr:`${lt(`secret`,e)}\n`,exitCode:1}}function lP(e){let t=_e(),n=e.isExtension??(t===`extension-direct`||t===`extension-delegate`),r=e.backend??QN(t),i=e.grants??aP,a=e.broker,o=()=>(a??=ns(null),a);return{backend:r,inExtension:n,gate:async(e,t)=>{let n=`secret:${e}:${t}`;if(sP(i,n))return`ok`;let r=await o().requestApproval({kind:`secret`,detail:`${iP[e]}: ${t}`,suggestedPattern:n});if(r.decision===`deny`)return r;if(r.decision===`always`){let e=r.pattern?.trim();i.add(e&&oP(e,n)?e:n)}return`ok`},injectMaskedEnv:async t=>{if(e.setEnv&&ps(t))try{let n=await r.getMasked(t);n&&e.setEnv(t,n.maskedValue)}catch{}},clearMaskedEnv:t=>{e.unsetEnv&&ps(t)&&e.unsetEnv(t)}}}function uP(e){let t=N(e);if(t.length!==0)return t.endsWith(`\r
1986
1990
  `)?t.slice(0,-2):t.endsWith(`
1987
- `)?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=S(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>
1988
- `,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
1991
+ `)?t.slice(0,-1):t}async function dP(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}):cP(i)}async function fP(e,t,n,r){if(await r.backend.getInfo(e)){let t=await r.gate(`value`,e);if(t!==`ok`)return cP(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 pP(e,t,n){let r=S(e.slice(1),{value:$N,bool:eP});if(`error`in r)return rP(r.error);let i=r.positionals[0];if(!i||i.startsWith(`-`))return{stdout:``,stderr:`secret: set requires a <name>
1992
+ `,exitCode:1};let a=r.positionals[1],o=uP(t.stdin);if(a!==void 0&&o!==void 0)return{stdout:``,stderr:`secret: provide <value> as an argument OR via stdin, not both
1989
1993
  `,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]
1990
1994
  or pipe the value on stdin: echo "$TOKEN" | secret set <name> --domain <patterns>
1991
- `,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>
1992
- `,exitCode:1}}async function nP(e,t){let n=S(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>
1993
- `,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 rP(e,t){let n=S(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>
1994
- `,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 iP(e,t){let n=S(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>
1995
- `,exitCode:1};let i=WN(n.values.get(`--domain`));if(!i)return{stdout:``,stderr:`secret: scope requires --domain <patterns>
1996
- `,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 aP(e,t){let n=S(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
1997
- `,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 oP(e,t,n){let r=S(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 sP(e,t){let n=S(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>
1998
- `,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?ha(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 cP(e,t){let n=S(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.
1995
+ `,exitCode:1};let c=nP(r.values.get(`--domain`));return c?r.bools.has(`--persist`)?dP(i,s,c,n):fP(i,s,c,n):{stdout:``,stderr:`secret: set requires --domain <patterns>
1996
+ `,exitCode:1}}async function mP(e,t){let n=S(e.slice(1),{});if(`error`in n)return rP(n.error);let r=n.positionals[0];if(!r)return{stdout:``,stderr:`secret: get requires a <name>
1997
+ `,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 hP(e,t){let n=S(e.slice(1),{});if(`error`in n)return rP(n.error);let r=n.positionals[0];if(!r)return{stdout:``,stderr:`secret: peek requires a <name>
1998
+ `,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 gP(e,t){let n=S(e.slice(1),{value:$N});if(`error`in n)return rP(n.error);let r=n.positionals[0];if(!r||r.startsWith(`-`))return{stdout:``,stderr:`secret: scope requires a <name>
1999
+ `,exitCode:1};let i=nP(n.values.get(`--domain`));if(!i)return{stdout:``,stderr:`secret: scope requires --domain <patterns>
2000
+ `,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}):cP(a)}async function _P(e,t){let n=S(e.slice(1),{});if(`error`in n)return rP(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
2001
+ `,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 vP(e,t,n){let r=S(e.slice(1),{});if(`error`in r)return rP(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 yP(e,t){let n=S(e.slice(1),{});if(`error`in n)return rP(n.error);let r=n.positionals[0],i=n.positionals[1];if(!r||!i)return{stdout:``,stderr:`secret: test requires <name> <url>
2002
+ `,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?ha(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 bP(e,t){let n=S(e.slice(1),{});if(`error`in n)return rP(n.error);if(!t.inExtension)return{stdout:`secret: in CLI mode, edit ~/.slicc/secrets.env directly with your text editor.
1999
2003
  (changes are picked up on the next request — no restart needed)
2000
2004
  `,stderr:``,exitCode:0};try{return await chrome.runtime.openOptionsPage(),{stdout:`Opened Mount Secrets options page in a new tab.
2001
- `,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 lP(e,t,n){let r=e[0];switch(r){case`set`:return tP(e,t,n);case`get`:case`read`:return nP(e,n);case`peek`:return rP(e,n);case`scope`:return iP(e,n);case`list`:return aP(e,n);case`delete`:case`rm`:return oP(e,r,n);case`test`:return sP(e,n);case`edit`:return cP(e,n);default:return{stdout:``,stderr:`secret: unknown command "${r}"\n`,exitCode:1}}}function uP(e={}){let t=ZN(e);return x(`secret`,async(e,n)=>{if(e.length===0||C(e,{valueFlags:VN}))return{stdout:UN(),stderr:``,exitCode:0};try{return await lP(e,n,t)}catch(e){return{stdout:``,stderr:`secret: ${e instanceof Error?e.message:String(e)}\n`,exitCode:1}}})}function dP(){return null}function fP(){return null}function pP(){return{stdout:`usage: serve [--entry <relative-path>] [--ttl <duration>] [--bridge | --no-bridge] [--max-tabs <n>] [--quiet] [--stop <token>] [--list] <directory>
2005
+ `,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 xP(e,t,n){let r=e[0];switch(r){case`set`:return pP(e,t,n);case`get`:case`read`:return mP(e,n);case`peek`:return hP(e,n);case`scope`:return gP(e,n);case`list`:return _P(e,n);case`delete`:case`rm`:return vP(e,r,n);case`test`:return yP(e,n);case`edit`:return bP(e,n);default:return{stdout:``,stderr:`secret: unknown command "${r}"\n`,exitCode:1}}}function SP(e={}){let t=lP(e);return x(`secret`,async(e,n)=>{if(e.length===0||C(e,{valueFlags:$N}))return{stdout:tP(),stderr:``,exitCode:0};try{return await xP(e,n,t)}catch(e){return{stdout:``,stderr:`secret: ${e instanceof Error?e.message:String(e)}\n`,exitCode:1}}})}function CP(){return null}function wP(){return null}function TP(){return{stdout:`usage: serve [--entry <relative-path>] [--ttl <duration>] [--bridge | --no-bridge] [--max-tabs <n>] [--quiet] [--stop <token>] [--list] <directory>
2002
2006
  serve --logs [<token>] [--lines <n>]
2003
2007
  serve --truncate [<token>]
2004
2008
 
@@ -2034,28 +2038,28 @@ Limits and lifetime:
2034
2038
  its TTL. Either can be removed sooner with \`serve --stop\`.
2035
2039
  - <token> is the "Preview token" printed at mint time or the TOKEN column
2036
2040
  of \`serve --list\`; \`--stop\` also accepts the preview URL.
2037
- `,stderr:``,exitCode:0}}function mP(e){return`error`in e}function hP(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
2038
- `}:(n.lines=i,{skip:+(e===`--lines`)})}}function gP(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
2041
+ `,stderr:``,exitCode:0}}function EP(e){return`error`in e}function DP(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
2042
+ `}:(n.lines=i,{skip:+(e===`--lines`)})}}function OP(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
2039
2043
  `};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)
2040
2044
  `};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.
2041
2045
  `}:(n.ttlMs=a,{skip:+(e===`--ttl`)}):{error:`serve: --ttl must be a positive whole duration (m, h, d, or w)
2042
- `}}function _P(e,t){let n={"--bridge":`bridge`,"--no-bridge":`noBridge`,"--project":`project`,"--quiet":`quiet`}[e];if(n)return t[n]=!0,{skip:0}}function vP(e,t,n){let r=gP(e,t,n);if(r)return r;let i=_P(e,n);if(i)return i;if(e===`--entry`)return t?(n.entry=t,{skip:1}):{error:`serve: missing value for --entry
2046
+ `}}function kP(e,t){let n={"--bridge":`bridge`,"--no-bridge":`noBridge`,"--project":`project`,"--quiet":`quiet`}[e];if(n)return t[n]=!0,{skip:0}}function AP(e,t,n){let r=OP(e,t,n);if(r)return r;let i=kP(e,n);if(i)return i;if(e===`--entry`)return t?(n.entry=t,{skip:1}):{error:`serve: missing value for --entry
2043
2047
  `};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
2044
- `};if(e.startsWith(`--stop=`))return n.stop=e.slice(7),{skip:0};let a=hP(e,t,n);if(a)return a;if(e===`--max-tabs`){if(!t)return{error:`serve: missing value for --max-tabs
2048
+ `};if(e.startsWith(`--stop=`))return n.stop=e.slice(7),{skip:0};let a=DP(e,t,n);if(a)return a;if(e===`--max-tabs`){if(!t)return{error:`serve: missing value for --max-tabs
2045
2049
  `};let e=Number.parseInt(t,10);return!Number.isFinite(e)||e<=0?{error:`serve: --max-tabs must be a positive integer
2046
2050
  `}:(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
2047
2051
  `}:(n.maxTabs=t,{skip:0})}return e.startsWith(`-`)?{error:`serve: unknown option: ${e}\n`}:n.directory?{error:`serve: expected a single directory argument
2048
- `}:(n.directory=e,{skip:0})}function yP(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=vP(e[n],e[n+1],t);if(mP(r))return{...t,error:r.error};n+=r.skip}return t}async function bP(e,t,n,r){if(!yr(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=Er(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 xP(e){return`exitCode`in e}async function SP(e){let t=pa(e)??e,n,r=fP();if(r)n=await r({type:`stop`,previewToken:t});else{let e=o();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
2049
- `,exitCode:1};if(n.webhookId){let e=await Gv();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 CP(){let e=fP();if(e){let t=(await e({type:`list`})).previews??[];return t.length===0?{stdout:`No active previews
2050
- `,stderr:``,exitCode:0}:{stdout:TP(t),stderr:``,exitCode:0}}let t=o();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
2051
- `,stderr:``,exitCode:0}:{stdout:TP(n),stderr:``,exitCode:0}}function wP(e){return e.mode===`persistent`?e.state===`pending`?`uploading`:`persistent`:`live`}function TP(e){return`Active previews:\n TOKEN MODE EXPIRES URL ROOT CREATED\n${e.map(e=>` ${e.previewToken} ${wP(e)} ${e.expiresAt??`-`} ${e.url} ${e.servedRoot} ${e.createdAt}\n`).join(``)}`}function EP(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 DP(e){let t,n=fP();if(n)t=(await n({type:`logs`,previewToken:e.previewToken})).lifecycleRecords??[];else{let n=o();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.
2052
- `,stderr:``,exitCode:0}:{stdout:`Preview lifecycle records (oldest to newest):\n${t.map(EP).join(``)}`,stderr:``,exitCode:0}}async function OP(e){let t,n,r=fP();if(r){let i=await r({type:`truncate`,previewToken:e});t=i.cleared??0,n=i.rearmed??0}else{let r=o();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 kP(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:ur(s)})}return n}function AP(e){return e().catch(e=>({stdout:``,stderr:`serve: ${e instanceof Error?e.message:String(e)}\n`,exitCode:1}))}async function jP(e){let t=dP();if(t)return t(e);let n=o();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 MP(e,t){if(t)return t.createPage(e);typeof window<`u`&&typeof window.open==`function`&&window.open(e,`_blank`,`noopener,noreferrer`)}async function NP(e,t){if(!e)return{ok:!0};let n=await Gv();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 PP(e,t,n,r,i,a,o){let s;try{s=await jP({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 Gv();e&&await e.deleteWebhook(r).catch(()=>{})}return{stdout:``,stderr:`${i}serve: ${e instanceof Error?e.message:String(e)}\n`,exitCode:1}}let c=await MP(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 FP(e){if(e.stop){let t=e.stop;return AP(()=>SP(t))}if(e.list)return AP(()=>CP());if(e.logs&&e.truncate)return{stdout:``,stderr:`serve: --logs and --truncate are mutually exclusive
2052
+ `}:(n.directory=e,{skip:0})}function jP(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=AP(e[n],e[n+1],t);if(EP(r))return{...t,error:r.error};n+=r.skip}return t}async function MP(e,t,n,r){if(!yr(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=Er(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 NP(e){return`exitCode`in e}async function PP(e){let t=pa(e)??e,n,r=wP();if(r)n=await r({type:`stop`,previewToken:t});else{let e=o();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
2053
+ `,exitCode:1};if(n.webhookId){let e=await ry();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 FP(){let e=wP();if(e){let t=(await e({type:`list`})).previews??[];return t.length===0?{stdout:`No active previews
2054
+ `,stderr:``,exitCode:0}:{stdout:LP(t),stderr:``,exitCode:0}}let t=o();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
2055
+ `,stderr:``,exitCode:0}:{stdout:LP(n),stderr:``,exitCode:0}}function IP(e){return e.mode===`persistent`?e.state===`pending`?`uploading`:`persistent`:`live`}function LP(e){return`Active previews:\n TOKEN MODE EXPIRES URL ROOT CREATED\n${e.map(e=>` ${e.previewToken} ${IP(e)} ${e.expiresAt??`-`} ${e.url} ${e.servedRoot} ${e.createdAt}\n`).join(``)}`}function RP(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 zP(e){let t,n=wP();if(n)t=(await n({type:`logs`,previewToken:e.previewToken})).lifecycleRecords??[];else{let n=o();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.
2056
+ `,stderr:``,exitCode:0}:{stdout:`Preview lifecycle records (oldest to newest):\n${t.map(RP).join(``)}`,stderr:``,exitCode:0}}async function BP(e){let t,n,r=wP();if(r){let i=await r({type:`truncate`,previewToken:e});t=i.cleared??0,n=i.rearmed??0}else{let r=o();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 VP(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:ur(s)})}return n}function HP(e){return e().catch(e=>({stdout:``,stderr:`serve: ${e instanceof Error?e.message:String(e)}\n`,exitCode:1}))}async function UP(e){let t=CP();if(t)return t(e);let n=o();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 WP(e,t){if(t)return t.createPage(e);typeof window<`u`&&typeof window.open==`function`&&window.open(e,`_blank`,`noopener,noreferrer`)}async function GP(e,t){if(!e)return{ok:!0};let n=await ry();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 KP(e,t,n,r,i,a,o){let s;try{s=await UP({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 ry();e&&await e.deleteWebhook(r).catch(()=>{})}return{stdout:``,stderr:`${i}serve: ${e instanceof Error?e.message:String(e)}\n`,exitCode:1}}let c=await WP(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 qP(e){if(e.stop){let t=e.stop;return HP(()=>PP(t))}if(e.list)return HP(()=>FP());if(e.logs&&e.truncate)return{stdout:``,stderr:`serve: --logs and --truncate are mutually exclusive
2053
2057
  `,exitCode:1};if(e.lines!==void 0&&!e.logs)return{stdout:``,stderr:`serve: --lines requires --logs
2054
- `,exitCode:1};if(e.logs){let t=typeof e.logs==`string`?e.logs:void 0;return AP(()=>DP({previewToken:t,lines:e.lines}))}if(e.truncate){let t=typeof e.truncate==`string`?e.truncate:void 0;return AP(()=>OP(t))}}function IP(e){if(e.ttlMs!==void 0&&e.bridge)return{stdout:``,stderr:`serve: --ttl cannot be combined with --bridge
2058
+ `,exitCode:1};if(e.logs){let t=typeof e.logs==`string`?e.logs:void 0;return HP(()=>zP({previewToken:t,lines:e.lines}))}if(e.truncate){let t=typeof e.truncate==`string`?e.truncate:void 0;return HP(()=>BP(t))}}function JP(e){if(e.ttlMs!==void 0&&e.bridge)return{stdout:``,stderr:`serve: --ttl cannot be combined with --bridge
2055
2059
  `,exitCode:1};if(e.ttlMs!==void 0&&e.maxTabs!==void 0)return{stdout:``,stderr:`serve: --ttl cannot be combined with --max-tabs
2056
- `,exitCode:1}}async function LP(e,t,n){if(e.ttlMs!==void 0){if(!t)throw Error(`persistent snapshot filesystem unavailable`);return kP(t,n)}}async function RP(e,t,n,r){if(e.length===0||e.includes(`--help`)||e.includes(`-h`))return pP();let i=yP(e);if(i.error)return{stdout:``,stderr:i.error,exitCode:1};let a=await FP(i);if(a)return a;if(!i.directory)return pP();let o=IP(i);if(o)return o;let s=await bP(i.directory,i.entry,t.fs,t.cwd);if(xP(s))return s;let{fullDirectory:c,entryPath:l}=s,u;try{u=await LP(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)
2057
- `:``,f=await NP(!i.noBridge&&i.bridge,d);return f.ok?PP(i,c,l,f.webhookId,d,u,n):f.result}function zP(e,t){return x(`serve`,(n,r)=>RP(n,r,e,t))}const BP=`usage: session export [--id <id>] [--output <path>]
2058
- `;function VP(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 HP(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${BP}`};let n=r[e+1];if(!n||n.startsWith(`-`))return{ok:!1,stderr:`session export: --id requires a value\n${BP}`};t=n,e++}else if(i===`--output`){if(n!==null)return{ok:!1,stderr:`session export: duplicate flag --output\n${BP}`};let t=r[e+1];if(!t||t.startsWith(`-`))return{ok:!1,stderr:`session export: --output requires a path\n${BP}`};n=t,e++}else if(i.startsWith(`-`))return{ok:!1,stderr:`session export: unknown flag ${i}\n${BP}`};else return{ok:!1,stderr:`session export: unexpected argument ${JSON.stringify(i)}\n${BP}`}}return{ok:!0,args:{sessionId:t,outputPath:n}}}async function UP(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||xt(r)!==a.sha256)throw new ba(`transfer-corrupt`);return r}async function WP(e,t){let n=HP(e);if(!n.ok)return{stdout:``,stderr:n.stderr,exitCode:1};let{sessionId:r,outputPath:i}=n.args;if(i!==null){let e=VP(i);if(!e.ok)return{stdout:``,stderr:`session export: --output ${e.reason}\n${BP}`,exitCode:1}}let a=r==null?{kind:`active`}:{kind:`frozen`,sessionId:r};try{let e=await os().export(a,{}),n=await UP(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 GP(){return x(`session`,async(e,t)=>{if(e[0]===`export`&&!C(e))return WP(e,t);let{dispatchSessionMemoryAware:n}=await import(`./session-command-memory-CkGlqxMy.js`);return n(e,t,BP)})}function KP(){return x(`slicc`,async(e,t)=>{let{runSlicc:n}=await import(`./run-DLiMjFBS.js`);return await n(e,t)})}const qP=`leader`;function JP(){try{let e=globalThis.localStorage?.getItem(`slicc.leaderSprinkleInstances`);if(e)return JSON.parse(e)}catch{}return[]}function YP(e){return+!!e.leader+e.followers.length}function XP(){return{stdout:`usage: sprinkle <subcommand> [args]
2060
+ `,exitCode:1}}async function YP(e,t,n){if(e.ttlMs!==void 0){if(!t)throw Error(`persistent snapshot filesystem unavailable`);return VP(t,n)}}async function XP(e,t,n,r){if(e.length===0||e.includes(`--help`)||e.includes(`-h`))return TP();let i=jP(e);if(i.error)return{stdout:``,stderr:i.error,exitCode:1};let a=await qP(i);if(a)return a;if(!i.directory)return TP();let o=JP(i);if(o)return o;let s=await MP(i.directory,i.entry,t.fs,t.cwd);if(NP(s))return s;let{fullDirectory:c,entryPath:l}=s,u;try{u=await YP(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)
2061
+ `:``,f=await GP(!i.noBridge&&i.bridge,d);return f.ok?KP(i,c,l,f.webhookId,d,u,n):f.result}function ZP(e,t){return x(`serve`,(n,r)=>XP(n,r,e,t))}const QP=`usage: session export [--id <id>] [--output <path>]
2062
+ `;function $P(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 eF(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${QP}`};let n=r[e+1];if(!n||n.startsWith(`-`))return{ok:!1,stderr:`session export: --id requires a value\n${QP}`};t=n,e++}else if(i===`--output`){if(n!==null)return{ok:!1,stderr:`session export: duplicate flag --output\n${QP}`};let t=r[e+1];if(!t||t.startsWith(`-`))return{ok:!1,stderr:`session export: --output requires a path\n${QP}`};n=t,e++}else if(i.startsWith(`-`))return{ok:!1,stderr:`session export: unknown flag ${i}\n${QP}`};else return{ok:!1,stderr:`session export: unexpected argument ${JSON.stringify(i)}\n${QP}`}}return{ok:!0,args:{sessionId:t,outputPath:n}}}async function tF(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||xt(r)!==a.sha256)throw new ba(`transfer-corrupt`);return r}async function nF(e,t){let n=eF(e);if(!n.ok)return{stdout:``,stderr:n.stderr,exitCode:1};let{sessionId:r,outputPath:i}=n.args;if(i!==null){let e=$P(i);if(!e.ok)return{stdout:``,stderr:`session export: --output ${e.reason}\n${QP}`,exitCode:1}}let a=r==null?{kind:`active`}:{kind:`frozen`,sessionId:r};try{let e=await os().export(a,{}),n=await tF(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 rF(){return x(`session`,async(e,t)=>{if(e[0]===`export`&&!C(e))return nF(e,t);let{dispatchSessionMemoryAware:n}=await import(`./session-command-memory-BKQM-Ttv.js`);return n(e,t,QP)})}function iF(){return x(`slicc`,async(e,t)=>{let{runSlicc:n}=await import(`./run-DLiMjFBS.js`);return await n(e,t)})}const aF=`leader`;function oF(){try{let e=globalThis.localStorage?.getItem(`slicc.leaderSprinkleInstances`);if(e)return JSON.parse(e)}catch{}return[]}function sF(e){return+!!e.leader+e.followers.length}function cF(){return{stdout:`usage: sprinkle <subcommand> [args]
2059
2063
 
2060
2064
  list [--runtime <id>] List sprinkles + an instance line per runtime
2061
2065
  open <name> Open a sprinkle by name
@@ -2073,22 +2077,22 @@ Limits and lifetime:
2073
2077
  chat <html> Show inline HTML in chat (Tool UI)
2074
2078
  Use data-action="name" on buttons for callbacks
2075
2079
  Pipe HTML: echo "<div>...</div>" | sprinkle chat
2076
- `,stderr:``,exitCode:0}}function ZP(){return globalThis.__slicc_sprinkleManager??null}function J(e,t){return{stdout:``,stderr:`sprinkle ${e}: ${t}\n`,exitCode:1}}function QP(){return[qP,...ce().map(e=>e.runtimeId)]}function $P(e){return`unknown runtime "${e}"\nknown runtimes: ${QP().join(`, `)}\nRun \`host\` to see connected followers.`}async function eF(e,t){let n=e.slice(1).join(` `);if(!n){let e=N(t.stdin);e&&(n=e)}if(!n)return{stdout:``,stderr:`sprinkle chat: HTML content required
2080
+ `,stderr:``,exitCode:0}}function lF(){return globalThis.__slicc_sprinkleManager??null}function J(e,t){return{stdout:``,stderr:`sprinkle ${e}: ${t}\n`,exitCode:1}}function uF(){return[aF,...ce().map(e=>e.runtimeId)]}function dF(e){return`unknown runtime "${e}"\nknown runtimes: ${uF().join(`, `)}\nRun \`host\` to see connected followers.`}async function fF(e,t){let n=e.slice(1).join(` `);if(!n){let e=N(t.stdin);e&&(n=e)}if(!n)return{stdout:``,stderr:`sprinkle chat: HTML content required
2077
2081
  `,exitCode:1};let r=await Te({html:n,onAction:async(e,t)=>({action:e,data:t})});return r===null?{stdout:``,stderr:`sprinkle chat: not in tool execution context
2078
2082
  `,exitCode:1}:{stdout:JSON.stringify(r)+`
2079
- `,stderr:``,exitCode:0}}function tF(e){return e.map(e=>{let t=e.runtime?` (${e.runtime})`:``;return` instance: ${e.runtimeId}${t}`})}function nF(e){return[...e.map(e=>({name:e,runtimeId:qP})),...JP()]}async function rF(e,t){let n=S(t.slice(1),{value:[`--runtime`]});if(`error`in n)return J(`list`,n.error);let r=n.values.get(`--runtime`);if(r!==void 0&&!QP().includes(r))return J(`list`,$P(r));await e.refresh();let i=e.available();if(i.length===0)return{stdout:`No .shtml sprinkles found.
2080
- `,stderr:``,exitCode:0};let a=new Set(e.opened()),o=nF([...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(...tF(t))}return s.length===0?{stdout:`No sprinkles are open on runtime "${r}".\n`,stderr:``,exitCode:0}:{stdout:s.join(`
2083
+ `,stderr:``,exitCode:0}}function pF(e){return e.map(e=>{let t=e.runtime?` (${e.runtime})`:``;return` instance: ${e.runtimeId}${t}`})}function mF(e){return[...e.map(e=>({name:e,runtimeId:aF})),...oF()]}async function hF(e,t){let n=S(t.slice(1),{value:[`--runtime`]});if(`error`in n)return J(`list`,n.error);let r=n.values.get(`--runtime`);if(r!==void 0&&!uF().includes(r))return J(`list`,dF(r));await e.refresh();let i=e.available();if(i.length===0)return{stdout:`No .shtml sprinkles found.
2084
+ `,stderr:``,exitCode:0};let a=new Set(e.opened()),o=mF([...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(...pF(t))}return s.length===0?{stdout:`No sprinkles are open on runtime "${r}".\n`,stderr:``,exitCode:0}:{stdout:s.join(`
2081
2085
  `)+`
2082
- `,stderr:``,exitCode:0}}function iF(e,t){return!t||To(e)?null:(Eo(e,t),To(e)===t?t:null)}async function aF(e,t,n){let r=S(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=Ii(void 0,n),o=iF(i,a);try{a?await e.open(i,void 0,{lickOriginTarget:a}):await e.open(i)}catch(e){return o&&Do(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 oF(e,t){let n=S(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 sF(e,t){let n=S(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 cF(e,t){let n=S(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 lF(e){let t=S(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=Oo(),t=Object.entries(e);return t.length===0?{stdout:`No sprinkle routes configured (all licks go to cone).
2086
+ `,stderr:``,exitCode:0}}function gF(e,t){return!t||To(e)?null:(Eo(e,t),To(e)===t?t:null)}async function _F(e,t,n){let r=S(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=Ii(void 0,n),o=gF(i,a);try{a?await e.open(i,void 0,{lickOriginTarget:a}):await e.open(i)}catch(e){return o&&Do(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 vF(e,t){let n=S(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 yF(e,t){let n=S(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 bF(e,t){let n=S(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 xF(e){let t=S(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=Oo(),t=Object.entries(e);return t.length===0?{stdout:`No sprinkle routes configured (all licks go to cone).
2083
2087
  `,stderr:``,exitCode:0}:{stdout:`Sprinkle routes (applied to every runtime — the leader resolves the
2084
2088
  route for follower-forwarded licks too):
2085
2089
  `+t.map(([e,t])=>` ${e} -> ${t}`).join(`
2086
2090
  `)+`
2087
- `,stderr:``,exitCode:0}}if(t.bools.has(`--clear`))return Do(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=To(n);return e?{stdout:`${n} -> ${e}\n`,stderr:``,exitCode:0}:{stdout:`${n} -> cone (default)\n`,stderr:``,exitCode:0}}return Eo(n,r),{stdout:`Sprinkle "${n}" lick events will route to scoop "${r}".\n`,stderr:``,exitCode:0}}function uF(e){let t=[];return e.leader&&t.push(qP),t.push(...e.followers),t.join(`, `)}async function dF(e,t){let n=S(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&&!QP().includes(o))return J(`send`,$P(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`,$P(s.unknownRuntime));let c=YP(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`} (${uF(s)}).\n`,stderr:``,exitCode:0}}function fF(){return x(`sprinkle`,async(e,t)=>{if(e.length===0||e[0]===`--help`||e[0]===`-h`)return XP();let n=e[0];if(C(e.slice(1),{valueFlags:[`--scoop`,`--runtime`]}))return{stdout:et(`sprinkle`,n,XP().stdout),stderr:``,exitCode:0};if(n===`chat`)return eF($e(e),t);let r=ZP();if(!r)return{stdout:``,stderr:`sprinkle: sprinkle manager not initialized
2088
- `,exitCode:1};switch(n){case`list`:return rF(r,e);case`open`:return aF(r,e,t.env);case`close`:return oF(r,e);case`reload`:return sF(r,e);case`refresh`:return cF(r,e);case`route`:return lF(e);case`send`:return dF(r,e);default:return{stdout:``,stderr:`sprinkle: unknown subcommand "${n}"\n`,exitCode:1}}})}function pF(){return{stdout:`usage: sqlite3 [database] [sql]
2089
- `,stderr:``,exitCode:0}}function mF(e,t){let n=e.length>0&&!e[0].startsWith(`-`);return{database:n?e[0]:`:memory:`,sql:(n?e.slice(1):e).join(` `).trim()||N(t.stdin).trim()}}function hF(e,t){return e===`:memory:`?e:t.fs.resolvePath(t.cwd,e)}async function gF(e,t,n){return t===`:memory:`||!await n.fs.exists(t)?new e.Database:new e.Database(await n.fs.readFileBuffer(t))}async function _F(e,t,n){t!==`:memory:`&&await n.fs.writeFile(t,e.export())}function vF(e){let t=e.flatMap(e=>e.values.map(e=>e.map(vr).join(`|`)));return t.length>0?`${t.join(`
2090
- `)}\n`:``}async function yF(e,t,n){let r=await Tr(),i=hF(e,n),a=await gF(r,i,n),o=a.exec(t);return await _F(a,i,n),a.close(),vF(o)}function bF(e,t){return{stdout:``,stderr:`${e}: ${t instanceof Error?t.message:String(t)}\n`,exitCode:1}}function xF(e=`sqlite3`){return x(e,async(t,n)=>{if(t.includes(`--help`)||t.includes(`-h`))return pF();let{database:r,sql:i}=mF(t,n);if(!i)return bF(e,`interactive mode is not supported; provide SQL as argument or stdin`);try{return{stdout:await yF(r,i,n),stderr:``,exitCode:0}}catch(t){return bF(e,t)}})}function SF(e){return{stdout:``,stderr:e.endsWith(`
2091
- `)?e:`${e}\n`,exitCode:1}}function CF(){return{stdout:`ssh - run a command on a connected tray follower
2091
+ `,stderr:``,exitCode:0}}if(t.bools.has(`--clear`))return Do(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=To(n);return e?{stdout:`${n} -> ${e}\n`,stderr:``,exitCode:0}:{stdout:`${n} -> cone (default)\n`,stderr:``,exitCode:0}}return Eo(n,r),{stdout:`Sprinkle "${n}" lick events will route to scoop "${r}".\n`,stderr:``,exitCode:0}}function SF(e){let t=[];return e.leader&&t.push(aF),t.push(...e.followers),t.join(`, `)}async function CF(e,t){let n=S(t.slice(1),{value:[`--runtime`]});if(`error`in n)return J(`send`,n.error);let r=n.positionals[0];if(!r)return J(`send`,`name required`);let i=n.positionals.slice(1).join(` `);if(!i)return J(`send`,`JSON data required`);let a;try{a=JSON.parse(i)}catch{return J(`send`,`invalid JSON`)}let o=n.values.get(`--runtime`);if(o!==void 0&&!uF().includes(o))return J(`send`,dF(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`,dF(s.unknownRuntime));let c=sF(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`} (${SF(s)}).\n`,stderr:``,exitCode:0}}function wF(){return x(`sprinkle`,async(e,t)=>{if(e.length===0||e[0]===`--help`||e[0]===`-h`)return cF();let n=e[0];if(C(e.slice(1),{valueFlags:[`--scoop`,`--runtime`]}))return{stdout:et(`sprinkle`,n,cF().stdout),stderr:``,exitCode:0};if(n===`chat`)return fF($e(e),t);let r=lF();if(!r)return{stdout:``,stderr:`sprinkle: sprinkle manager not initialized
2092
+ `,exitCode:1};switch(n){case`list`:return hF(r,e);case`open`:return _F(r,e,t.env);case`close`:return vF(r,e);case`reload`:return yF(r,e);case`refresh`:return bF(r,e);case`route`:return xF(e);case`send`:return CF(r,e);default:return{stdout:``,stderr:`sprinkle: unknown subcommand "${n}"\n`,exitCode:1}}})}function TF(){return{stdout:`usage: sqlite3 [database] [sql]
2093
+ `,stderr:``,exitCode:0}}function EF(e,t){let n=e.length>0&&!e[0].startsWith(`-`);return{database:n?e[0]:`:memory:`,sql:(n?e.slice(1):e).join(` `).trim()||N(t.stdin).trim()}}function DF(e,t){return e===`:memory:`?e:t.fs.resolvePath(t.cwd,e)}async function OF(e,t,n){return t===`:memory:`||!await n.fs.exists(t)?new e.Database:new e.Database(await n.fs.readFileBuffer(t))}async function kF(e,t,n){t!==`:memory:`&&await n.fs.writeFile(t,e.export())}function AF(e){let t=e.flatMap(e=>e.values.map(e=>e.map(vr).join(`|`)));return t.length>0?`${t.join(`
2094
+ `)}\n`:``}async function jF(e,t,n){let r=await Tr(),i=DF(e,n),a=await OF(r,i,n),o=a.exec(t);return await kF(a,i,n),a.close(),AF(o)}function MF(e,t){return{stdout:``,stderr:`${e}: ${t instanceof Error?t.message:String(t)}\n`,exitCode:1}}function NF(e=`sqlite3`){return x(e,async(t,n)=>{if(t.includes(`--help`)||t.includes(`-h`))return TF();let{database:r,sql:i}=EF(t,n);if(!i)return MF(e,`interactive mode is not supported; provide SQL as argument or stdin`);try{return{stdout:await jF(r,i,n),stderr:``,exitCode:0}}catch(t){return MF(e,t)}})}function PF(e){return{stdout:``,stderr:e.endsWith(`
2095
+ `)?e:`${e}\n`,exitCode:1}}function FF(){return{stdout:`ssh - run a command on a connected tray follower
2092
2096
 
2093
2097
  Usage: ssh [--cwd <dir>] [--timeout <seconds>] <runtime-id> <command...>
2094
2098
  ssh --list
@@ -2111,11 +2115,11 @@ Examples:
2111
2115
  ssh --list
2112
2116
  ssh follower-abc123 "uname -a"
2113
2117
  ssh --cwd /tmp follower-abc123 "ls -la"
2114
- `,stderr:``,exitCode:0}}function wF(e){let t=e.filter(e=>e.exec);if(t.length===0)return`No exec-capable followers connected.
2118
+ `,stderr:``,exitCode:0}}function IF(e){let t=e.filter(e=>e.exec);if(t.length===0)return`No exec-capable followers connected.
2115
2119
  Start one with: slicc <join-url> follow sh -c
2116
2120
  `;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}`)}return`${n.join(`
2117
- `)}\n`}function TF(e){if(e.stdin===void 0)return;let t=Qr(e.stdin);if(t.length===0)return;let n=new Uint8Array(t.length);for(let e=0;e<t.length;e++)n[e]=t.charCodeAt(e)&255;return l(n)}function EF(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 DF(){return x(`ssh`,async(e,t)=>{let n=EF(e);if(`help`in n)return CF();if(`error`in n)return SF(n.error);if(n.list||n.runtimeId===void 0)return{stdout:wF(ce()),stderr:``,exitCode:0};if(!n.command)return SF(`ssh: missing command
2118
- Usage: ssh <runtime-id> <command...>`);let r=o();if(!r)return SF(`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:TF(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 SF(`ssh: ${e instanceof Error?e.message:String(e)}`)}finally{t.signal?.removeEventListener(`abort`,a)}})}function OF(e){return{stdout:``,stderr:`${lt(`sudo`,e)}\n`,exitCode:1}}function kF(e={}){let{broker:t,persistGrant:n,suppressNextGate:r}=e;return x(`sudo`,async(e,i)=>{if(e.length===0)return{stdout:``,stderr:`sudo: usage: sudo <command> [args...]
2121
+ `)}\n`}function LF(e){if(e.stdin===void 0)return;let t=Qr(e.stdin);if(t.length===0)return;let n=new Uint8Array(t.length);for(let e=0;e<t.length;e++)n[e]=t.charCodeAt(e)&255;return l(n)}function RF(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 zF(){return x(`ssh`,async(e,t)=>{let n=RF(e);if(`help`in n)return FF();if(`error`in n)return PF(n.error);if(n.list||n.runtimeId===void 0)return{stdout:IF(ce()),stderr:``,exitCode:0};if(!n.command)return PF(`ssh: missing command
2122
+ Usage: ssh <runtime-id> <command...>`);let r=o();if(!r)return PF(`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:LF(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 PF(`ssh: ${e instanceof Error?e.message:String(e)}`)}finally{t.signal?.removeEventListener(`abort`,a)}})}function BF(e){return{stdout:``,stderr:`${lt(`sudo`,e)}\n`,exitCode:1}}function VF(e={}){let{broker:t,persistGrant:n,suppressNextGate:r}=e;return x(`sudo`,async(e,i)=>{if(e.length===0)return{stdout:``,stderr:`sudo: usage: sudo <command> [args...]
2119
2123
  `,exitCode:1};if(e[0]===`--help`||e[0]===`-h`)return{stdout:`usage: sudo <command> [args...]
2120
2124
 
2121
2125
  Request human approval to run <command> with elevation. If approved, the
@@ -2129,14 +2133,14 @@ Options:
2129
2133
  -h, --help Show this help message and exit.
2130
2134
  `,stderr:``,exitCode:0};if(!t)return{stdout:``,stderr:`sudo: command-level approval is not configured
2131
2135
  `,exitCode:1};if(!i.exec)return{stdout:``,stderr:`sudo: cannot dispatch inner command in this context
2132
- `,exitCode:1};let a=Bp(e[0],e.slice(1)),o=i.env?.get(Wp),s=await t.requestApproval({kind:`command`,detail:a,...o?{reason:o}:{}});if(s.decision===`deny`)return OF(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 AF(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 jF(e,t){return e.fs.lstat?e.fs.lstat(t):e.fs.stat(t)}function MF(e,t){return e.some(e=>/^-[^-]/.test(e)&&e.slice(1).includes(t))}async function NF(e,t,n){let r=e.fs.resolvePath(e.cwd,t);try{let i=await jF(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}': ${AF(e)}\n`}}}function PF(){return x(`rm`,async(e,t)=>{let n={recursive:MF(e,`r`)||MF(e,`R`)||e.includes(`--recursive`),force:MF(e,`f`)||e.includes(`--force`),verbose:MF(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
2133
- `,exitCode:1};let i=await Promise.all(r.map(e=>NF(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 FF(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 IF(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 LF(e,t,n){try{let r=e.fs.resolvePath(e.cwd,t),i=n.follow?await e.fs.stat(r):await jF(e,r);return{stdout:n.format?`${FF(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 RF(){return x(`stat`,async(e,t)=>{let n=IF(e);if(n.paths.length===0)return{stdout:``,stderr:`stat: missing operand
2134
- `,exitCode:1};let r=await Promise.all(n.paths.map(e=>LF(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 zF(e){let t=e.replace(/\/+$/,``),n=t.lastIndexOf(`/`);return n<=0?`/`:t.slice(0,n)}async function BF(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 jF(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}': ${AF(e)}\n`}}if(!n||s===i.length-1)return{stdout:o,stderr:``};a=zF(a)}return{stdout:o,stderr:``}}function VF(){return x(`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
2135
- `,exitCode:1};let a=await Promise.all(i.map(e=>BF(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 HF(){return{stdout:`usage: tar (-c|-x|-t) [-zv] -f <archive> [-C <dir>] [paths...]
2136
- `,stderr:``,exitCode:0}}function UF(e){return{stdout:``,stderr:`tar: ${e}\n`,exitCode:1}}function WF(e,t){if(e.mode)return UF(`exactly one of -c, -x, or -t is required`);e.mode=t}function GF(e,t,n){if(n)return[n,t];let r=e[t+1];return r===void 0?void 0:[r,t+1]}const KF={c:`create`,x:`extract`,t:`list`};function qF(e,t,n,r,i){let a=KF[e];if(a)return{nextIndex:r,error:WF(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:UF(`unsupported option -${e}`)};let o=GF(n,r,t);return o?(e===`f`?i.archive=o[0]:i.directory=o[0],{nextIndex:o[1],consumedValue:!0}):{nextIndex:r,error:UF(`option -${e} requires an argument`)}}function JF(e,t,n){let r=e[t];for(let i=1;i<r.length;i++){let a=qF(r[i],r.slice(i+1),e,t,n);if(a.error||a.consumedValue)return a}return{nextIndex:t}}function YF(e){let t={gzip:!1,verbose:!1,directory:`.`,paths:[]};for(let n=0;n<e.length;n++){let r=e[n];if(!r.startsWith(`-`)||r===`-`){t.paths.push(r);continue}if(r.startsWith(`--`))return UF(`unsupported option ${r}`);let i=JF(e,n,t);if(i.error)return i.error;n=i.nextIndex}return t}function XF(e,t){let n=e.replace(/\\/g,`/`).replace(/^\/+/,``).replace(/^(?:\.\/)+/,``);return n?n===`.`?`.`:n.replace(/\/+$/,``):gr(t)}async function ZF(e,t,n,r){let i=await e.fs.stat(t);if(i.isFile){r.push({path:n,bytes:await e.fs.readFileBuffer(t)});return}if(!i.isDirectory)throw Error(`unsupported file type: ${t}`);let a=n.endsWith(`/`)?n:`${n}/`;r.push({path:a,bytes:new Uint8Array,directory:!0});for(let n of await e.fs.readdir(t))await ZF(e,hr(t,n),`${a}${n}`,r)}function QF(e,t){let n=e.length>=2&&e[0]===31&&e[1]===139,r=t||n?Ji(e):e;return Ui(r,{stripNpmPrefix:!1,includeDirectories:!0,preserveRawPaths:!0})}function $F(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 wr(t,i)?i:void 0}async function eI(e,t){if(e.paths.length===0)return UF(`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 ZF(t,e,XF(i,e),n)}let i=t.fs.resolvePath(t.cwd,e.archive),a=Xi(n);return await t.fs.writeFile(i,e.gzip?zi(a):a),{stdout:e.verbose?`${n.map(e=>e.path).join(`
2137
- `)}\n`:``,stderr:``,exitCode:0}}async function tI(e,t){if(e.paths.length>0)return UF(`${e.mode} mode does not accept input paths`);let n=t.fs.resolvePath(t.cwd,e.archive),r=QF(await t.fs.readFileBuffer(n),e.gzip);if(e.mode===`list`){let e=r.map(e=>e.path).join(`
2138
- `);return{stdout:e?`${e}\n`:``,stderr:``,exitCode:0}}let i=t.fs.resolvePath(t.cwd,e.directory);await t.fs.mkdir(i,{recursive:!0});let a=[];for(let e of r){let n=$F(t,i,e.path);if(!n)return UF(`blocked suspicious path ${e.path}`);if(e.directory)await t.fs.mkdir(n,{recursive:!0});else{let r=xr(n);r!==`/`&&await t.fs.mkdir(r,{recursive:!0}),await t.fs.writeFile(n,e.bytes)}a.push(e.path)}return{stdout:e.verbose?`${a.join(`
2139
- `)}\n`:``,stderr:``,exitCode:0}}function nI(){return x(`tar`,async(e,t)=>{if(e.length===0||e.includes(`--help`)||e.includes(`-h`))return HF();let n=YF(e);return`exitCode`in n?n:n.mode?n.archive?n.mode===`list`&&n.directory!==`.`?UF(`-C is only supported in create or extract mode`):n.mode===`create`?eI(n,t):tI(n,t):UF(`option -f requires an archive path`):UF(`exactly one of -c, -x, or -t is required`)})}var rI=`/**
2136
+ `,exitCode:1};let a=Qp(e[0],e.slice(1)),o=i.env?.get(nm),s=await t.requestApproval({kind:`command`,detail:a,...o?{reason:o}:{}});if(s.decision===`deny`)return BF(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 HF(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 UF(e,t){return e.fs.lstat?e.fs.lstat(t):e.fs.stat(t)}function WF(e,t){return e.some(e=>/^-[^-]/.test(e)&&e.slice(1).includes(t))}async function GF(e,t,n){let r=e.fs.resolvePath(e.cwd,t);try{let i=await UF(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}': ${HF(e)}\n`}}}function KF(){return x(`rm`,async(e,t)=>{let n={recursive:WF(e,`r`)||WF(e,`R`)||e.includes(`--recursive`),force:WF(e,`f`)||e.includes(`--force`),verbose:WF(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
2137
+ `,exitCode:1};let i=await Promise.all(r.map(e=>GF(t,e,n))),a=i.map(e=>e.stdout).join(``),o=i.map(e=>e.stderr).join(``);return{stdout:a,stderr:o,exitCode:+!!o}})}function qF(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 JF(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 YF(e,t,n){try{let r=e.fs.resolvePath(e.cwd,t),i=n.follow?await e.fs.stat(r):await UF(e,r);return{stdout:n.format?`${qF(n.format,t,i)}\n`:` File: ${t}\n Size: ${i.size}\n`,stderr:``}}catch{return{stdout:``,stderr:`stat: cannot stat '${t}': No such file or directory\n`}}}function XF(){return x(`stat`,async(e,t)=>{let n=JF(e);if(n.paths.length===0)return{stdout:``,stderr:`stat: missing operand
2138
+ `,exitCode:1};let r=await Promise.all(n.paths.map(e=>YF(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 ZF(e){let t=e.replace(/\/+$/,``),n=t.lastIndexOf(`/`);return n<=0?`/`:t.slice(0,n)}async function QF(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 UF(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}': ${HF(e)}\n`}}if(!n||s===i.length-1)return{stdout:o,stderr:``};a=ZF(a)}return{stdout:o,stderr:``}}function $F(){return x(`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
2139
+ `,exitCode:1};let a=await Promise.all(i.map(e=>QF(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 eI(){return{stdout:`usage: tar (-c|-x|-t) [-zv] -f <archive> [-C <dir>] [paths...]
2140
+ `,stderr:``,exitCode:0}}function tI(e){return{stdout:``,stderr:`tar: ${e}\n`,exitCode:1}}function nI(e,t){if(e.mode)return tI(`exactly one of -c, -x, or -t is required`);e.mode=t}function rI(e,t,n){if(n)return[n,t];let r=e[t+1];return r===void 0?void 0:[r,t+1]}const iI={c:`create`,x:`extract`,t:`list`};function aI(e,t,n,r,i){let a=iI[e];if(a)return{nextIndex:r,error:nI(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:tI(`unsupported option -${e}`)};let o=rI(n,r,t);return o?(e===`f`?i.archive=o[0]:i.directory=o[0],{nextIndex:o[1],consumedValue:!0}):{nextIndex:r,error:tI(`option -${e} requires an argument`)}}function oI(e,t,n){let r=e[t];for(let i=1;i<r.length;i++){let a=aI(r[i],r.slice(i+1),e,t,n);if(a.error||a.consumedValue)return a}return{nextIndex:t}}function sI(e){let t={gzip:!1,verbose:!1,directory:`.`,paths:[]};for(let n=0;n<e.length;n++){let r=e[n];if(!r.startsWith(`-`)||r===`-`){t.paths.push(r);continue}if(r.startsWith(`--`))return tI(`unsupported option ${r}`);let i=oI(e,n,t);if(i.error)return i.error;n=i.nextIndex}return t}function cI(e,t){let n=e.replace(/\\/g,`/`).replace(/^\/+/,``).replace(/^(?:\.\/)+/,``);return n?n===`.`?`.`:n.replace(/\/+$/,``):gr(t)}async function lI(e,t,n,r){let i=await e.fs.stat(t);if(i.isFile){r.push({path:n,bytes:await e.fs.readFileBuffer(t)});return}if(!i.isDirectory)throw Error(`unsupported file type: ${t}`);let a=n.endsWith(`/`)?n:`${n}/`;r.push({path:a,bytes:new Uint8Array,directory:!0});for(let n of await e.fs.readdir(t))await lI(e,hr(t,n),`${a}${n}`,r)}function uI(e,t){let n=e.length>=2&&e[0]===31&&e[1]===139,r=t||n?Ji(e):e;return Ui(r,{stripNpmPrefix:!1,includeDirectories:!0,preserveRawPaths:!0})}function dI(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 wr(t,i)?i:void 0}async function fI(e,t){if(e.paths.length===0)return tI(`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 lI(t,e,cI(i,e),n)}let i=t.fs.resolvePath(t.cwd,e.archive),a=Xi(n);return await t.fs.writeFile(i,e.gzip?zi(a):a),{stdout:e.verbose?`${n.map(e=>e.path).join(`
2141
+ `)}\n`:``,stderr:``,exitCode:0}}async function pI(e,t){if(e.paths.length>0)return tI(`${e.mode} mode does not accept input paths`);let n=t.fs.resolvePath(t.cwd,e.archive),r=uI(await t.fs.readFileBuffer(n),e.gzip);if(e.mode===`list`){let e=r.map(e=>e.path).join(`
2142
+ `);return{stdout:e?`${e}\n`:``,stderr:``,exitCode:0}}let i=t.fs.resolvePath(t.cwd,e.directory);await t.fs.mkdir(i,{recursive:!0});let a=[];for(let e of r){let n=dI(t,i,e.path);if(!n)return tI(`blocked suspicious path ${e.path}`);if(e.directory)await t.fs.mkdir(n,{recursive:!0});else{let r=xr(n);r!==`/`&&await t.fs.mkdir(r,{recursive:!0}),await t.fs.writeFile(n,e.bytes)}a.push(e.path)}return{stdout:e.verbose?`${a.join(`
2143
+ `)}\n`:``,stderr:``,exitCode:0}}function mI(){return x(`tar`,async(e,t)=>{if(e.length===0||e.includes(`--help`)||e.includes(`-h`))return eI();let n=sI(e);return`exitCode`in n?n:n.mode?n.archive?n.mode===`list`&&n.directory!==`.`?tI(`-C is only supported in create or extract mode`):n.mode===`create`?fI(n,t):pI(n,t):tI(`option -f requires an archive path`):tI(`exactly one of -c, -x, or -t is required`)})}var hI=`/**
2140
2144
  * Standalone assertions - no dependency on test runner
2141
2145
  *
2142
2146
  * Each assertion:
@@ -2324,7 +2328,7 @@ function sameMembers(a, b) {
2324
2328
  }
2325
2329
 
2326
2330
  const slice = a => (isPrimitive(a) ? a : a.slice ? a.slice() : Object.assign({}, a))
2327
- `,iI=`/**
2331
+ `,gI=`/**
2328
2332
  * tst - minimal test runner
2329
2333
  *
2330
2334
  * - Standalone assertions (assert.js works anywhere)
@@ -2954,7 +2958,7 @@ function scheduleAutoRun() {
2954
2958
  scheduleAutoRun()
2955
2959
 
2956
2960
  export * from './assert.js'
2957
- `;function aI(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 oI=`tsc - thin wrapper over the ipk-loaded TypeScript 6 package
2961
+ `;function _I(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 vI=`tsc - thin wrapper over the ipk-loaded TypeScript 6 package
2958
2962
 
2959
2963
  Usage:
2960
2964
  tsc [options] [files...]
@@ -2978,28 +2982,28 @@ Install:
2978
2982
  Then \`tsc --version\` and the transpile commands above. There is no
2979
2983
  bundled binary, no CDN fallback; a missing package exits non-zero
2980
2984
  with a clear \`ipk add\` hint.
2981
- `;function sI(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 cI(e,t){let n=`${gr(e).replace(/\.(ts|tsx|mts|cts)$/i,``)}.js`;return t?`${t.endsWith(`/`)?t.slice(0,-1):t}/${n}`:`${xr(e)}/${n}`}async function lI(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=xr(n)}return null}function uI(e){return{target:e.ScriptTarget.ES2022,module:e.ModuleKind.ESNext,moduleResolution:e.ModuleResolutionKind.Bundler,esModuleInterop:!0,allowSyntheticDefaultImports:!0,isolatedModules:!0}}function dI(e){if(typeof e!=`object`||!e)return{};let{compilerOptions:t}=e;return t??{}}async function fI(e,t,n){let r=uI(t),i=await lI(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,...dI(o)}}}function pI(e,t){let n=e.flattenDiagnosticMessageText(t.messageText,`
2982
- `);if(t.file&&typeof t.start==`number`){let{line:e,character:r}=t.file.getLineAndCharacterOfPosition(t.start);return`${t.file.fileName}(${e+1},${r+1}): error TS${t.code}: ${n}`}return`error TS${t.code}: ${n}`}function mI(e,t){let n=t.toLowerCase();return n.endsWith(`.tsx`)?e.ScriptKind.TSX:n.endsWith(`.jsx`)?e.ScriptKind.JSX:n.endsWith(`.js`)||n.endsWith(`.mjs`)||n.endsWith(`.cjs`)?e.ScriptKind.JS:e.ScriptKind.TS}function hI(e,t,n,r,i){let a=e.transpileModule(t,{compilerOptions:r,fileName:n,reportDiagnostics:i});return{outputText:a.outputText,diagnostics:a.diagnostics??[]}}function gI(e,t,n,r){let{outputText:i,diagnostics:a}=hI(e,r,`<stdin>.ts`,n.compilerOptions,!0),o=a.map(t=>pI(e,t)),s=o.length>0?`${o.join(`
2983
- `)}\n`:``;return{stdout:t.noEmit?``:i,stderr:s,exitCode:+(a.length>0)}}async function _I(e,t,n,r,i){let a=t.fs.resolvePath(t.cwd,n);if(!await t.fs.exists(a))return{stderr:`tsc: ${n}: no such file\n`,hadError:!0};let o;try{o=await t.fs.readFile(a)}catch(e){return{stderr:`tsc: ${n}: ${e instanceof Error?e.message:String(e)}\n`,hadError:!0}}mI(e,a);let{outputText:s,diagnostics:c}=hI(e,o,a,i.compilerOptions,!0),l=[];for(let t of c)l.push(`${pI(e,t)}\n`);let u=c.length>0;if(r.noEmit)return{stderr:l.join(``),hadError:u};let d=t.fs.resolvePath(t.cwd,cI(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 vI(e,t){let n;try{n=sI(e)}catch(e){return{done:{stdout:``,stderr:`${e instanceof Error?e.message:String(e)}\n`,exitCode:2}}}if(n.showHelp)return{done:{stdout:oI,stderr:``,exitCode:0}};let r;try{r=await pr(aI(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 yI(){return x(`tsc`,async(e,t)=>{let n=await vI(e,t);if(`done`in n)return n.done;let{parsed:r,ts:i}=n,a=await fI(t.fs,i,t.cwd);if(r.files.length===0){let e=N(t.stdin);return e?gI(i,r,a,e):{stdout:oI,stderr:``,exitCode:0}}let o=[],s=!1;for(let e of r.files){let n=await _I(i,t,e,r,a);n.stderr&&o.push(n.stderr),n.hadError&&(s=!0)}return{stdout:``,stderr:o.join(``),exitCode:+!!s}})}const bI=[`**/*.test.{js,ts}`];function xI(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 SI(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 CI(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=xI(s,e[o+1]);if(c){n=c.reporter,c.consumed===2&&(o+=1);continue}let l=SI(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:[...bI],reporter:n,showHelp:r,coverage:i,coverageDir:a}}function wI(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 wI(`${r}${e}${i}`))o.push(t);return o}function TI(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 EI(e,t,n){let r=n.flatMap(wI).map(TI),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 DI=null;async function OI(e){if(DI)return DI;let t={module:e.ModuleKind.CommonJS,target:e.ScriptTarget.ES2022,esModuleInterop:!0,isolatedModules:!1};return DI=`
2985
+ `;function yI(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 bI(e,t){let n=`${gr(e).replace(/\.(ts|tsx|mts|cts)$/i,``)}.js`;return t?`${t.endsWith(`/`)?t.slice(0,-1):t}/${n}`:`${xr(e)}/${n}`}async function xI(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=xr(n)}return null}function SI(e){return{target:e.ScriptTarget.ES2022,module:e.ModuleKind.ESNext,moduleResolution:e.ModuleResolutionKind.Bundler,esModuleInterop:!0,allowSyntheticDefaultImports:!0,isolatedModules:!0}}function CI(e){if(typeof e!=`object`||!e)return{};let{compilerOptions:t}=e;return t??{}}async function wI(e,t,n){let r=SI(t),i=await xI(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,...CI(o)}}}function TI(e,t){let n=e.flattenDiagnosticMessageText(t.messageText,`
2986
+ `);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 EI(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 DI(e,t,n,r,i){let a=e.transpileModule(t,{compilerOptions:r,fileName:n,reportDiagnostics:i});return{outputText:a.outputText,diagnostics:a.diagnostics??[]}}function OI(e,t,n,r){let{outputText:i,diagnostics:a}=DI(e,r,`<stdin>.ts`,n.compilerOptions,!0),o=a.map(t=>TI(e,t)),s=o.length>0?`${o.join(`
2987
+ `)}\n`:``;return{stdout:t.noEmit?``:i,stderr:s,exitCode:+(a.length>0)}}async function kI(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}}EI(e,a);let{outputText:s,diagnostics:c}=DI(e,o,a,i.compilerOptions,!0),l=[];for(let t of c)l.push(`${TI(e,t)}\n`);let u=c.length>0;if(r.noEmit)return{stderr:l.join(``),hadError:u};let d=t.fs.resolvePath(t.cwd,bI(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 AI(e,t){let n;try{n=yI(e)}catch(e){return{done:{stdout:``,stderr:`${e instanceof Error?e.message:String(e)}\n`,exitCode:2}}}if(n.showHelp)return{done:{stdout:vI,stderr:``,exitCode:0}};let r;try{r=await pr(_I(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 jI(){return x(`tsc`,async(e,t)=>{let n=await AI(e,t);if(`done`in n)return n.done;let{parsed:r,ts:i}=n,a=await wI(t.fs,i,t.cwd);if(r.files.length===0){let e=N(t.stdin);return e?OI(i,r,a,e):{stdout:vI,stderr:``,exitCode:0}}let o=[],s=!1;for(let e of r.files){let n=await kI(i,t,e,r,a);n.stderr&&o.push(n.stderr),n.hadError&&(s=!0)}return{stdout:``,stderr:o.join(``),exitCode:+!!s}})}const MI=[`**/*.test.{js,ts}`];function NI(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 PI(e,t){return e===`--coverage`?{consumed:1}:e===`--coverage-dir`&&t!==void 0?{coverageDir:t,consumed:2}:e.startsWith(`--coverage-dir=`)?{coverageDir:e.slice(15),consumed:1}:null}function FI(e){let t=[],n=`tap`,r=!1,i=!1,a=``;for(let o=0;o<e.length;o++){let s=e[o];if(s===`-h`||s===`--help`){r=!0;continue}let c=NI(s,e[o+1]);if(c){n=c.reporter,c.consumed===2&&(o+=1);continue}let l=PI(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:[...MI],reporter:n,showHelp:r,coverage:i,coverageDir:a}}function II(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 II(`${r}${e}${i}`))o.push(t);return o}function LI(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 RI(e,t,n){let r=n.flatMap(II).map(LI),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 zI=null;async function BI(e){if(zI)return zI;let t={module:e.ModuleKind.CommonJS,target:e.ScriptTarget.ES2022,esModuleInterop:!0,isolatedModules:!1};return zI=`
2984
2988
  if (typeof process !== 'undefined' && !process.versions) {
2985
2989
  try { process.versions = { node: '20.0.0' }; } catch (_) { /* readonly process.versions is fine */ }
2986
2990
  }
2987
2991
  const __tst_assert_exports = (function () {
2988
2992
  const module = { exports: {} };
2989
2993
  const exports = module.exports;
2990
- ${e.transpileModule(rI,{compilerOptions:t,fileName:`assert.js`}).outputText}
2994
+ ${e.transpileModule(hI,{compilerOptions:t,fileName:`assert.js`}).outputText}
2991
2995
  return module.exports;
2992
2996
  })();
2993
2997
  const __tst_module_exports = (function () {
2994
2998
  const module = { exports: {} };
2995
2999
  const exports = module.exports;
2996
- ${e.transpileModule(iI,{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"))`)}
3000
+ ${e.transpileModule(gI,{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"))`)}
2997
3001
  return module.exports;
2998
3002
  })();
2999
3003
  const __tst = __tst_module_exports.default || __tst_module_exports;
3000
3004
  __tst.manual = true;
3001
- `.trim(),DI}function kI(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 AI(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 jI(e,t,n){let r=y(`${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 MI(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=xr(n),u=new Map;for(let n of AI(r)){if(!n.startsWith(`./`)&&!n.startsWith(`../`))continue;let r=await jI(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 NI(e,t,n,r,i,a,o=``,s=``){let c=r===`spec`?`pretty`:`tap`,l=[];for(let[e,t]of i.entries()){let n=kI(t,a.get(e)??new Map);l.push(`${JSON.stringify(e)}: function (module, exports, require) {\n${n}\n}`)}let u=`{${l.join(`,
3002
- `)}}`,d=kI(n,a.get(t)??new Map),f=o,p=s;return`"use strict";
3005
+ `.trim(),zI}function VI(e,t=new Map){return e.replace(/(^|[^\w$.])require\(\s*(["'`])([^"'`]+)\2\s*\)/g,(e,n,r,i)=>i===`tst`||i===`tst/tst.js`?`${n}__tstReq("tst")`:i===`tst/assert`||i===`tst/assert.js`?`${n}__tstReq("tst/assert")`:t.has(i)?`${n}__localReq(${JSON.stringify(t.get(i))})`:e)}function HI(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 UI(e,t,n){let r=y(`${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 WI(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=xr(n),u=new Map;for(let n of HI(r)){if(!n.startsWith(`./`)&&!n.startsWith(`../`))continue;let r=await UI(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 GI(e,t,n,r,i,a,o=``,s=``){let c=r===`spec`?`pretty`:`tap`,l=[];for(let[e,t]of i.entries()){let n=VI(t,a.get(e)??new Map);l.push(`${JSON.stringify(e)}: function (module, exports, require) {\n${n}\n}`)}let u=`{${l.join(`,
3006
+ `)}}`,d=VI(n,a.get(t)??new Map),f=o,p=s;return`"use strict";
3003
3007
  ${f}${e}
3004
3008
  const __realmRequire = require;
3005
3009
  const { createRequire: __createRequire } = __realmRequire("module");
@@ -3042,7 +3046,7 @@ await Promise.resolve();
3042
3046
  await new Promise((resolve) => setTimeout(resolve));
3043
3047
  ${p}
3044
3048
  if (__state && __state.failed && __state.failed.length > 0) process.exit(1);
3045
- `}const PI={esModuleInterop:!0,allowJs:!0,isolatedModules:!1};function FI(e){return{module:e.ModuleKind.CommonJS,target:e.ScriptTarget.ES2022,...PI}}async function II(e,t){let n;try{n=CI(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
3049
+ `}const KI={esModuleInterop:!0,allowJs:!0,isolatedModules:!1};function qI(e){return{module:e.ModuleKind.CommonJS,target:e.ScriptTarget.ES2022,...KI}}async function JI(e,t){let n;try{n=FI(e)}catch(e){return{done:{stdout:``,stderr:`${e instanceof Error?e.message:String(e)}\n`,exitCode:2}}}if(n.showHelp)return{done:{stdout:`tst - run *.test.{js,ts} files with the bundled tst runner
3046
3050
 
3047
3051
  Usage:
3048
3052
  tst [options] [glob...]
@@ -3064,7 +3068,7 @@ Notes:
3064
3068
  with statement counters. nyc/c8 cannot wrap this runner: it is not a
3065
3069
  Node child. Istanbul/Babel are not bundled (webapp size-limit); the
3066
3070
  TypeScript AST already in process does the rewrite.
3067
- `,stderr:``,exitCode:0}};let r=await EI(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 pr(aI(t))}catch(e){return{done:{stdout:``,stderr:`tst: ${e instanceof Error?e.message:String(e)}\n`,exitCode:1}}}let a=await OI(i),o=n.coverage?await import(`./coverage-instrument-CjoHgKzK.js`):null;return{parsed:n,files:r,ts:i,harness:a,userOpts:FI(i),coverageMaps:{},coverageCounts:{},coverageMod:o}}function LI(e){return e.includes(`# fail `)||/(^|\n)not ok /.test(e)}async function RI(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 MI(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=NI(a,n,d,s.reporter,f,p,c?`${c.coverageRuntimeSource()}\n`:``,c?`\n${c.coverageDumpSource()}`:``),h=await Lt(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||LI(g)}}function zI(){return x(`tst`,async(e,t)=>{let n=await II(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 RI(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 BI=[],VI=`usage: theme <subcommand> [args]
3071
+ `,stderr:``,exitCode:0}};let r=await RI(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 pr(_I(t))}catch(e){return{done:{stdout:``,stderr:`tst: ${e instanceof Error?e.message:String(e)}\n`,exitCode:1}}}let a=await BI(i),o=n.coverage?await import(`./coverage-instrument-CjoHgKzK.js`):null;return{parsed:n,files:r,ts:i,harness:a,userOpts:qI(i),coverageMaps:{},coverageCounts:{},coverageMod:o}}function YI(e){return e.includes(`# fail `)||/(^|\n)not ok /.test(e)}async function XI(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 WI(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=GI(a,n,d,s.reporter,f,p,c?`${c.coverageRuntimeSource()}\n`:``,c?`\n${c.coverageDumpSource()}`:``),h=await Lt(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||YI(g)}}function ZI(){return x(`tst`,async(e,t)=>{let n=await JI(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 XI(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 QI=[],$I=`usage: theme <subcommand> [args]
3068
3072
 
3069
3073
  Subcommands:
3070
3074
  list List available preset and custom themes
@@ -3073,23 +3077,23 @@ Subcommands:
3073
3077
  reset Reset to the default theme
3074
3078
  current Show the currently active theme
3075
3079
  export <id> <path> Export a theme to a VFS path
3076
- `;function HI(e,t){return{stdout:``,stderr:`theme ${e}: ${t}\n`,exitCode:1}}function UI(){return x(`theme`,async(e,t)=>{if(e.length===0||e[0]===`--help`||e[0]===`-h`)return{stdout:VI,stderr:``,exitCode:0};let n=e[0];return C(e.slice(1),{valueFlags:BI})?{stdout:et(`theme`,n,VI),stderr:``,exitCode:0}:n===`list`?WI(e):n===`current`?GI(e):n===`reset`?KI(e):n===`apply`?qI(e.slice(1),t):n===`export`?JI(e.slice(1),t):{stdout:``,stderr:`theme: unknown subcommand "${n}"\n${VI}`,exitCode:1}})}async function WI(e){let t=S(e.slice(1),{value:BI});if(`error`in t)return HI(`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(`
3077
- `),stderr:``,exitCode:0}}async function GI(e){let t=S(e.slice(1),{value:BI});return`error`in t?HI(`current`,t.error):{stdout:`Check the Theme settings dialog for the active theme.
3078
- `,stderr:``,exitCode:0}}async function KI(e){let t=S(e.slice(1),{value:BI});if(`error`in t)return HI(`reset`,t.error);let n=o();return n?(await n.call(`theme-apply`,{action:`reset`}),{stdout:`Theme reset to default.
3080
+ `;function eL(e,t){return{stdout:``,stderr:`theme ${e}: ${t}\n`,exitCode:1}}function tL(){return x(`theme`,async(e,t)=>{if(e.length===0||e[0]===`--help`||e[0]===`-h`)return{stdout:$I,stderr:``,exitCode:0};let n=e[0];return C(e.slice(1),{valueFlags:QI})?{stdout:et(`theme`,n,$I),stderr:``,exitCode:0}:n===`list`?nL(e):n===`current`?rL(e):n===`reset`?iL(e):n===`apply`?aL(e.slice(1),t):n===`export`?oL(e.slice(1),t):{stdout:``,stderr:`theme: unknown subcommand "${n}"\n${$I}`,exitCode:1}})}async function nL(e){let t=S(e.slice(1),{value:QI});if(`error`in t)return eL(`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(`
3081
+ `),stderr:``,exitCode:0}}async function rL(e){let t=S(e.slice(1),{value:QI});return`error`in t?eL(`current`,t.error):{stdout:`Check the Theme settings dialog for the active theme.
3082
+ `,stderr:``,exitCode:0}}async function iL(e){let t=S(e.slice(1),{value:QI});if(`error`in t)return eL(`reset`,t.error);let n=o();return n?(await n.call(`theme-apply`,{action:`reset`}),{stdout:`Theme reset to default.
3079
3083
  `,stderr:``,exitCode:0}):{stdout:``,stderr:`theme: no panel-RPC connection available
3080
- `,exitCode:1}}async function qI(e,t){let n=S(e,{value:BI});if(`error`in n)return HI(`apply`,n.error);if(n.positionals.length===0)return{stdout:``,stderr:`theme apply: missing theme id or path
3084
+ `,exitCode:1}}async function aL(e,t){let n=S(e,{value:QI});if(`error`in n)return eL(`apply`,n.error);if(n.positionals.length===0)return{stdout:``,stderr:`theme apply: missing theme id or path
3081
3085
  `,exitCode:1};let r=o();if(!r)return{stdout:``,stderr:`theme: no panel-RPC connection available
3082
3086
  `,exitCode:1};let i=n.positionals[0],{PRESETS:a}=await import(`./theme-presets-xiOb9AFN.js`),s=a.find(e=>e.id===i);if(s){let e=JSON.stringify(s);return await r.call(`theme-apply`,{themeJson:e,action:`apply`}),{stdout:`Applied theme: ${s.name}\n`,stderr:``,exitCode:0}}let c=t.fs.resolvePath(t.cwd,i),l;try{l=await t.fs.readFile(c)}catch{return{stdout:``,stderr:`theme apply: "${i}" is not a known preset id and file not found at ${c}\n`,exitCode:1}}try{let e=JSON.parse(l);if(!e.id||!e.name||!e.base||!e.tokens)return{stdout:``,stderr:`theme apply: invalid theme file (missing id, name, base, or tokens)
3083
3087
  `,exitCode:1}}catch{return{stdout:``,stderr:`theme apply: file is not valid JSON
3084
- `,exitCode:1}}return{stdout:`Applied theme: ${(await r.call(`theme-apply`,{themeJson:l,action:`apply`})).applied}\n`,stderr:``,exitCode:0}}async function JI(e,t){let n=S(e,{value:BI});if(`error`in n)return HI(`export`,n.error);if(n.positionals.length<2)return{stdout:``,stderr:`theme export: usage: theme export <id> <path>
3085
- `,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 YI=`unknown`,XI=`usage: uname [-amnorsv]`,ZI=[`s`,`n`,`r`,`v`,`m`,`o`];function QI(){return{stdout:[XI,` -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(`
3086
- `),stderr:``,exitCode:0}}function $I(){let{releasedAt:e,buildId:t}=qe();return e?`${t} (${e})`:t}function eL(){let e=globalThis.navigator,t=e?.userAgentData?.platform||e?.platform;return typeof t==`string`&&t.length>0?t:YI}function tL(){let e=globalThis.navigator?.userAgent;return typeof e==`string`&&e.length>0?e:YI}function nL(e){switch(e){case`s`:return`SLICC`;case`n`:return Ke();case`r`:return qe().version;case`v`:return $I();case`m`:return eL();case`o`:return tL()}}function rL(e){return{stdout:``,stderr:`uname: ${e}\n${XI}\n`,exitCode:1}}function iL(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 ZI)t.add(e);continue}if(!ZI.includes(e))return{error:`unrecognized option '-${e}'`};t.add(e)}}return t}function aL(){return x(`uname`,async e=>{if(e.includes(`--help`)||e.includes(`-h`))return QI();let t=iL(e);return`error`in t?rL(t.error):{stdout:`${(t.size>0?ZI.filter(e=>t.has(e)):[`s`]).map(nL).join(` `)}\n`,stderr:``,exitCode:0}})}function oL(){return x(`unlink`,async(e,t)=>{if(e.includes(`--help`))return{stdout:`Usage: unlink FILE
3088
+ `,exitCode:1}}return{stdout:`Applied theme: ${(await r.call(`theme-apply`,{themeJson:l,action:`apply`})).applied}\n`,stderr:``,exitCode:0}}async function oL(e,t){let n=S(e,{value:QI});if(`error`in n)return eL(`export`,n.error);if(n.positionals.length<2)return{stdout:``,stderr:`theme export: usage: theme export <id> <path>
3089
+ `,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 sL=`unknown`,cL=`usage: uname [-amnorsv]`,lL=[`s`,`n`,`r`,`v`,`m`,`o`];function uL(){return{stdout:[cL,` -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(`
3090
+ `),stderr:``,exitCode:0}}function dL(){let{releasedAt:e,buildId:t}=qe();return e?`${t} (${e})`:t}function fL(){let e=globalThis.navigator,t=e?.userAgentData?.platform||e?.platform;return typeof t==`string`&&t.length>0?t:sL}function pL(){let e=globalThis.navigator?.userAgent;return typeof e==`string`&&e.length>0?e:sL}function mL(e){switch(e){case`s`:return`SLICC`;case`n`:return Ke();case`r`:return qe().version;case`v`:return dL();case`m`:return fL();case`o`:return pL()}}function hL(e){return{stdout:``,stderr:`uname: ${e}\n${cL}\n`,exitCode:1}}function gL(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 lL)t.add(e);continue}if(!lL.includes(e))return{error:`unrecognized option '-${e}'`};t.add(e)}}return t}function _L(){return x(`uname`,async e=>{if(e.includes(`--help`)||e.includes(`-h`))return uL();let t=gL(e);return`error`in t?hL(t.error):{stdout:`${(t.size>0?lL.filter(e=>t.has(e)):[`s`]).map(mL).join(` `)}\n`,stderr:``,exitCode:0}})}function vL(){return x(`unlink`,async(e,t)=>{if(e.includes(`--help`))return{stdout:`Usage: unlink FILE
3087
3091
  Remove FILE. Symbolic links are removed without following their target.
3088
3092
  `,stderr:``,exitCode:0};if(e.length!==1||e[0].startsWith(`-`))return{stdout:``,stderr:e.length===0?`unlink: missing operand
3089
3093
  `:`unlink: extra operand
3090
- `,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 sL(){return{stdout:`usage: unzip <archive.zip> [-d <destination>]
3091
- `,stderr:``,exitCode:0}}function cL(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
3092
- `,exitCode:1}}:{kind:`ok`,archive:n[0],destination:t||`.`}}async function lL(e,t,n,r){let i=n.replace(/\\/g,`/`);if(!i||i.endsWith(`/`))return!1;let a=e.fs.resolvePath(t,i);if(!wr(t,a))return{stdout:``,stderr:`unzip: blocked suspicious path ${n}\n`,exitCode:1};let o=xr(a);return o!==`/`&&await e.fs.mkdir(o,{recursive:!0}),await e.fs.writeFile(a,r),!0}function uL(){return x(`unzip`,async(e,t)=>{if(e.length===0||e.includes(`--help`)||e.includes(`-h`))return sL();let n=cL(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=St(a),s=0;for(let[e,n]of Object.entries(o)){let r=await lL(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 dL=`ai-ecoverse/slicc`,fL=`usage: upgrade status | upgrade apply --from=<version> --to=<version>`,pL=`packages/vfs-root`,mL=3e4,hL=[`${pL}/workspace/skills/`,`${pL}/shared/sprinkles/`,`${pL}/shared/sounds/`,`${pL}/shared/GELATIERE.md`,`${pL}/shared/wiki/WIKI.md`,`${pL}/etc/`],gL=[`auto-applied`,`merged-clean`,`kept-local`,`needs-review`,`unchanged`,`added-new`];function _L(){return Object.fromEntries(gL.map(e=>[e,0]))}function vL(e,t,n,r){let i=_L();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 yL(e){if(e[0]!==`apply`)throw Error(fL);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 bL(e){return e.startsWith(`v`)?e:`v${e}`}function xL(e){if(!hL.some(t=>e.startsWith(t)))return null;let t=e.slice(17);return!t||t.split(`/`).some(e=>e===`.`||e===`..`)?null:t}async function SL(e,t){let n,r;try{n=await Promise.race([e(t,{method:`GET`,headers:{Accept:`application/json`}}),new Promise((e,t)=>{r=setTimeout(()=>t(Error(`request timed out after ${mL}ms`)),mL)})])}catch(e){let n=e instanceof Error?e.message:String(e);throw Error(`fetch failed for ${t}: ${n}`)}finally{r!==void 0&&clearTimeout(r)}if(n.status<200||n.status>=300)throw Error(`fetch failed for ${t}: HTTP ${n.status} ${n.statusText}`);return n}async function CL(e,t){let n=await SL(t,`https://api.github.com/repos/${dL}/git/trees/${encodeURIComponent(e)}?recursive=1`),r=de(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=xL(e.path);t&&i.set(t,e.path)}return i}function wL(e,t){let n=t.split(`/`).map(encodeURIComponent).join(`/`);return`https://raw.githubusercontent.com/${dL}/${encodeURIComponent(e)}/${n}`}function TL(e,t){return!e||!t||e.byteLength!==t.byteLength?!1:e.every((e,n)=>e===t[n])}function EL(e){try{return new TextDecoder(`utf-8`,{fatal:!0}).decode(e)}catch{return null}}async function DL(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 OL(e,t,n,r,i){let a=`${t}.upgrade-${bL(n)}-to-${bL(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 kL(e,t,n,r,i,a,o){let s=await DL(e.fs,t);if(!a)return{path:t,classification:s?`kept-local`:`unchanged`};if(!i)return s?{path:t,classification:TL(s,a)?`unchanged`:`kept-local`}:{path:t,classification:`added-new`,content:a};if(TL(i,a)||TL(s,a))return{path:t,classification:`unchanged`};if(!s)return{path:t,classification:`kept-local`};if(TL(s,i))return{path:t,classification:`auto-applied`,content:a};let[c,l,u]=[s,i,a].map(EL);if(c!==null&&l!==null&&u!==null){let i=Ae(c,l,u,{diff3:!0,labels:{current:`local:${t}`,base:`${bL(n)}:${t}`,other:`${bL(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 OL(e.fs,t,n,r,o)}}return{path:t,classification:`needs-review`,content:a,sidecar:await OL(e.fs,t,n,r,o)}}async function AL(e,t){t.content?await e.writeFile(t.path,t.content):await e.exists(t.path)&&await e.rm(t.path)}async function jL(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 DL(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 AL(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 ML(e,t,n){let r=bL(t),i=bL(n),[a,o]=await Promise.all([CL(r,e.fetch),CL(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)?SL(e.fetch,wL(r,a.get(t))).then(e=>pe(e.body)):void 0,o.has(t)?SL(e.fetch,wL(i,o.get(t))).then(e=>pe(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 kL(e,r,t,n,i,a,l));return await jL(e.fs,u),u}async function NL(e){let{version:t,releasedAt:n,buildId:r}=qe(),i=[],a=null,o=e.getLastSeen??Je();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 PL(e){return x(`upgrade`,async t=>{if(t.includes(`--help`)||t.includes(`-h`))return{stdout:`${fL}\n`,stderr:``,exitCode:0};if(t[0]===`status`)return t.length>1?{stdout:vL(``,``,[],[`unsupported argument: ${t[1]}`]),stderr:``,exitCode:1}:{stdout:await NL(e),stderr:``,exitCode:0};let n=``,r=``;try{({from:n,to:r}=yL(t));let i=await ML(e,n,r),a=i.some(e=>e.classification===`needs-review`);return{stdout:vL(n,r,i,[]),stderr:``,exitCode:+!!a}}catch(e){let t=e instanceof Error?e.message:String(e);return{stdout:vL(n,r,[],[t]),stderr:``,exitCode:1}}})}const FL=`usage: uptime [-p|--pretty] [-s|--since]`,IL=`${FL}
3094
+ `,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 yL(){return{stdout:`usage: unzip <archive.zip> [-d <destination>]
3095
+ `,stderr:``,exitCode:0}}function bL(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
3096
+ `,exitCode:1}}:{kind:`ok`,archive:n[0],destination:t||`.`}}async function xL(e,t,n,r){let i=n.replace(/\\/g,`/`);if(!i||i.endsWith(`/`))return!1;let a=e.fs.resolvePath(t,i);if(!wr(t,a))return{stdout:``,stderr:`unzip: blocked suspicious path ${n}\n`,exitCode:1};let o=xr(a);return o!==`/`&&await e.fs.mkdir(o,{recursive:!0}),await e.fs.writeFile(a,r),!0}function SL(){return x(`unzip`,async(e,t)=>{if(e.length===0||e.includes(`--help`)||e.includes(`-h`))return yL();let n=bL(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=St(a),s=0;for(let[e,n]of Object.entries(o)){let r=await xL(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 CL=`ai-ecoverse/slicc`,wL=`usage: upgrade status | upgrade apply --from=<version> --to=<version>`,TL=`packages/vfs-root`,EL=3e4,DL=[`${TL}/workspace/skills/`,`${TL}/shared/sprinkles/`,`${TL}/shared/sounds/`,`${TL}/shared/GELATIERE.md`,`${TL}/shared/wiki/WIKI.md`,`${TL}/etc/`],OL=[`auto-applied`,`merged-clean`,`kept-local`,`needs-review`,`unchanged`,`added-new`];function kL(){return Object.fromEntries(OL.map(e=>[e,0]))}function AL(e,t,n,r){let i=kL();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 jL(e){if(e[0]!==`apply`)throw Error(wL);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 ML(e){return e.startsWith(`v`)?e:`v${e}`}function NL(e){if(!DL.some(t=>e.startsWith(t)))return null;let t=e.slice(17);return!t||t.split(`/`).some(e=>e===`.`||e===`..`)?null:t}async function PL(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 ${EL}ms`)),EL)})])}catch(e){let n=e instanceof Error?e.message:String(e);throw Error(`fetch failed for ${t}: ${n}`)}finally{r!==void 0&&clearTimeout(r)}if(n.status<200||n.status>=300)throw Error(`fetch failed for ${t}: HTTP ${n.status} ${n.statusText}`);return n}async function FL(e,t){let n=await PL(t,`https://api.github.com/repos/${CL}/git/trees/${encodeURIComponent(e)}?recursive=1`),r=de(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=NL(e.path);t&&i.set(t,e.path)}return i}function IL(e,t){let n=t.split(`/`).map(encodeURIComponent).join(`/`);return`https://raw.githubusercontent.com/${CL}/${encodeURIComponent(e)}/${n}`}function LL(e,t){return!e||!t||e.byteLength!==t.byteLength?!1:e.every((e,n)=>e===t[n])}function RL(e){try{return new TextDecoder(`utf-8`,{fatal:!0}).decode(e)}catch{return null}}async function zL(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 BL(e,t,n,r,i){let a=`${t}.upgrade-${ML(n)}-to-${ML(r)}.conflict`;if(!i.has(a)&&!await e.exists(a))return i.add(a),a;for(let t=1;;t+=1){let n=`${a}.${t}`;if(!i.has(n)&&!await e.exists(n))return i.add(n),n}}async function VL(e,t,n,r,i,a,o){let s=await zL(e.fs,t);if(!a)return{path:t,classification:s?`kept-local`:`unchanged`};if(!i)return s?{path:t,classification:LL(s,a)?`unchanged`:`kept-local`}:{path:t,classification:`added-new`,content:a};if(LL(i,a)||LL(s,a))return{path:t,classification:`unchanged`};if(!s)return{path:t,classification:`kept-local`};if(LL(s,i))return{path:t,classification:`auto-applied`,content:a};let[c,l,u]=[s,i,a].map(RL);if(c!==null&&l!==null&&u!==null){let i=Ae(c,l,u,{diff3:!0,labels:{current:`local:${t}`,base:`${ML(n)}:${t}`,other:`${ML(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 BL(e.fs,t,n,r,o)}}return{path:t,classification:`needs-review`,content:a,sidecar:await BL(e.fs,t,n,r,o)}}async function HL(e,t){t.content?await e.writeFile(t.path,t.content):await e.exists(t.path)&&await e.rm(t.path)}async function UL(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 zL(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 HL(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 WL(e,t,n){let r=ML(t),i=ML(n),[a,o]=await Promise.all([FL(r,e.fetch),FL(i,e.fetch)]),s=[...new Set([...a.keys(),...o.keys()])].sort(),c=await Promise.all(s.map(async t=>{let[n,s]=await Promise.all([a.has(t)?PL(e.fetch,IL(r,a.get(t))).then(e=>pe(e.body)):void 0,o.has(t)?PL(e.fetch,IL(i,o.get(t))).then(e=>pe(e.body)):void 0]);return{path:t,base:n,theirs:s}})),l=new Set(s),u=[];for(let{path:r,base:i,theirs:a}of c)u.push(await VL(e,r,t,n,i,a,l));return await UL(e.fs,u),u}async function GL(e){let{version:t,releasedAt:n,buildId:r}=qe(),i=[],a=null,o=e.getLastSeen??Je();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 KL(e){return x(`upgrade`,async t=>{if(t.includes(`--help`)||t.includes(`-h`))return{stdout:`${wL}\n`,stderr:``,exitCode:0};if(t[0]===`status`)return t.length>1?{stdout:AL(``,``,[],[`unsupported argument: ${t[1]}`]),stderr:``,exitCode:1}:{stdout:await GL(e),stderr:``,exitCode:0};let n=``,r=``;try{({from:n,to:r}=jL(t));let i=await WL(e,n,r),a=i.some(e=>e.classification===`needs-review`);return{stdout:AL(n,r,i,[]),stderr:``,exitCode:+!!a}}catch(e){let t=e instanceof Error?e.message:String(e);return{stdout:AL(n,r,[],[t]),stderr:``,exitCode:1}}})}const qL=`usage: uptime [-p|--pretty] [-s|--since]`,JL=`${qL}
3093
3097
 
3094
3098
  Print how long this SLICC has been running. The clock starts when the browser
3095
3099
  window was last loaded — a reload is a reboot.
@@ -3105,7 +3109,7 @@ The load average is the average number of live kernel processes over the last
3105
3109
  processes are retained in bounded numbers, so a long burst of short commands
3106
3110
  can under-report the older windows. The user count is always 1: a SLICC
3107
3111
  runtime has one user identity (see \`id\`).
3108
- `,LL=[1,5,15],RL=6e4,zL=60*RL,BL=24*zL;function VL(){let e=globalThis.__slicc_pm;return e instanceof Object&&typeof e.list==`function`?e:null}function HL(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 UL(e){let t=Math.max(0,e),n=Math.floor(t/BL),r=Math.floor(t%BL/zL),i=Math.floor(t%zL/RL),a=r>0?`${r}:${String(i).padStart(2,`0`)}`:`${i} min`;return n===0?a:`${n} ${n===1?`day`:`days`}, ${a}`}function WL(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/BL),`day`),r(Math.floor(t%BL/zL),`hour`),r(Math.floor(t%zL/RL),`minute`),n.length===0?`up ${Math.floor(t/1e3)} seconds`:`up ${n.join(`, `)}`}function GL(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 KL(e){let t=new Date(e),n=e=>String(e).padStart(2,`0`);return`${n(t.getHours())}:${n(t.getMinutes())}:${n(t.getSeconds())}`}function qL(e,t,n){let r=LL.map(r=>HL(e,t,r*RL,n).toFixed(2));return` ${KL(t)} up ${UL(t-n)}, 1 user, load average: ${r.join(`, `)}\n`}function JL(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 YL(e={}){return x(`uptime`,async t=>{let n=JL(t);if(typeof n!=`string`)return{stdout:``,stderr:`uptime: ${n.error}\n${FL}\n`,exitCode:1};if(n===`help`)return{stdout:IL,stderr:``,exitCode:0};if(n===`version`)return{stdout:`uptime (SLICC) ${qe().version}\n`,stderr:``,exitCode:0};let r=e.now?e.now():Date.now(),i=e.bootedAt?e.bootedAt():da();if(n===`since`)return XL(`${GL(i)}\n`);if(n===`pretty`)return XL(`${WL(r-i)}\n`);let a=e.processManager??VL();return XL(qL(a?a.list():[],r,i))})}function XL(e){return{stdout:e,stderr:``,exitCode:0}}const ZL=new Set([`--vid`,`--pid`,`--class`,`--subclass`,`--protocol`,`--serial`,`--request-type`,`--recipient`,`--request`,`--value`,`--index`,`--__resolved`]);function QL(e){return Pn(e,ZL)}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 $L(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 eR=new Set([`standard`,`class`,`vendor`]),tR=new Set([`device`,`interface`,`endpoint`,`other`]);function nR(e){let t=e.get(`--request-type`)??`vendor`,n=e.get(`--recipient`)??`device`;if(!eR.has(t))throw Error(`invalid --request-type: '${t}'`);if(!tR.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 rR(e){let t=Qr(e.stdin),n=new Uint8Array(t.length);for(let e=0;e<t.length;e++)n[e]=t.charCodeAt(e)&255;return n}function iR(e){return Array.from(e,e=>e.toString(16).padStart(2,`0`)).join(` `)}function aR(e){return`0x${e.toString(16).padStart(4,`0`)}`}function oR(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${aR(e.vendorId)}:${aR(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 sR=`usb - access USB devices via WebUSB
3112
+ `,YL=[1,5,15],XL=6e4,ZL=60*XL,QL=24*ZL;function $L(){let e=globalThis.__slicc_pm;return e instanceof Object&&typeof e.list==`function`?e:null}function eR(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 tR(e){let t=Math.max(0,e),n=Math.floor(t/QL),r=Math.floor(t%QL/ZL),i=Math.floor(t%ZL/XL),a=r>0?`${r}:${String(i).padStart(2,`0`)}`:`${i} min`;return n===0?a:`${n} ${n===1?`day`:`days`}, ${a}`}function nR(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/QL),`day`),r(Math.floor(t%QL/ZL),`hour`),r(Math.floor(t%ZL/XL),`minute`),n.length===0?`up ${Math.floor(t/1e3)} seconds`:`up ${n.join(`, `)}`}function rR(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 iR(e){let t=new Date(e),n=e=>String(e).padStart(2,`0`);return`${n(t.getHours())}:${n(t.getMinutes())}:${n(t.getSeconds())}`}function aR(e,t,n){let r=YL.map(r=>eR(e,t,r*XL,n).toFixed(2));return` ${iR(t)} up ${tR(t-n)}, 1 user, load average: ${r.join(`, `)}\n`}function oR(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 sR(e={}){return x(`uptime`,async t=>{let n=oR(t);if(typeof n!=`string`)return{stdout:``,stderr:`uptime: ${n.error}\n${qL}\n`,exitCode:1};if(n===`help`)return{stdout:JL,stderr:``,exitCode:0};if(n===`version`)return{stdout:`uptime (SLICC) ${qe().version}\n`,stderr:``,exitCode:0};let r=e.now?e.now():Date.now(),i=e.bootedAt?e.bootedAt():da();if(n===`since`)return cR(`${rR(i)}\n`);if(n===`pretty`)return cR(`${nR(r-i)}\n`);let a=e.processManager??$L();return cR(aR(a?a.list():[],r,i))})}function cR(e){return{stdout:e,stderr:``,exitCode:0}}const lR=new Set([`--vid`,`--pid`,`--class`,`--subclass`,`--protocol`,`--serial`,`--request-type`,`--recipient`,`--request`,`--value`,`--index`,`--__resolved`]);function uR(e){return Pn(e,lR)}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 dR(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 fR=new Set([`standard`,`class`,`vendor`]),pR=new Set([`device`,`interface`,`endpoint`,`other`]);function mR(e){let t=e.get(`--request-type`)??`vendor`,n=e.get(`--recipient`)??`device`;if(!fR.has(t))throw Error(`invalid --request-type: '${t}'`);if(!pR.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 hR(e){let t=Qr(e.stdin),n=new Uint8Array(t.length);for(let e=0;e<t.length;e++)n[e]=t.charCodeAt(e)&255;return n}function gR(e){return Array.from(e,e=>e.toString(16).padStart(2,`0`)).join(` `)}function _R(e){return`0x${e.toString(16).padStart(4,`0`)}`}function vR(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${_R(e.vendorId)}:${_R(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 yR=`usb - access USB devices via WebUSB
3109
3113
 
3110
3114
  Usage: usb <subcommand> [options]
3111
3115
 
@@ -3144,11 +3148,11 @@ Options:
3144
3148
  -h, --help
3145
3149
 
3146
3150
  Transfers are capped at ${Zr} bytes (4 MiB).
3147
- `;function cR(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?`${iR(e)}\n`:``)}async function lR(e){let t=await e.list();return t.length===0?X(`no granted USB devices
3148
- `):X(`${t.map(oR).join(`
3149
- `)}\n`)}async function uR(e,t){let n=e.get(`--__resolved`);if(n)return X(`${oR(await t.info(n))}\n`);let r=$L(e),i=Se();if(i){let e=await px(`usb-device`,r,i);if(e.handle)return X(`${oR(await t.info(e.handle))}\n`);let n=e.info,a=Yr();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=Xr().register(o);return X(`${oR(Jr(s,o))}\n`)}return X(`${oR(await t.request(r))}\n`)}async function dR(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 fR(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 pR(e,t){let[,n,r]=e;return!n||r===void 0?Z(`select-config: handle and value required`):(await t.selectConfig(n,Y(r,`configuration`)),X(``))}async function mR(e,t,n,r){let[,i,a]=t;if(!i||a===void 0)return Z(`${e}: handle and interface required`);let o=Y(a,`interface`);return e===`claim`?await n.claim(i,o,{wait:r.has(`--wait`)}):await n.release(i,o),X(``)}async function hR(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`):cR((await n.controlIn(i,nR(t),o)).bytes,r)}async function gR(e,t,n,r){let i=e[1];if(!i)return Z(`control-out: handle required`);let a=rR(t);return a.length>4194304?Z(`control-out payload exceeds 4 MiB limit`):X(`${(await r.controlOut(i,nR(n),a)).bytesWritten} bytes written\n`)}async function _R(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`):cR((await n.transferIn(i,Y(a,`endpoint`),s)).bytes,r)}async function vR(e,t,n,r){let[,i,a]=e;if(!i||a===void 0)return Z(`transfer-out: handle and endpoint required`);let o=rR(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 yR(e,t,n){let{positionals:r,flags:i,bools:a}=QL(e),o=r[0],s=a.has(`--raw`);switch(o){case`list`:return lR(n);case`request`:return uR(i,n);case`open`:case`close`:case`reset`:return dR(o,r,n,a);case`clear-halt`:return fR(r,n);case`select-config`:return pR(r,n);case`claim`:case`release`:return mR(o,r,n,a);case`control-in`:return hR(r,i,n,s);case`control-out`:return gR(r,t,i,n);case`transfer-in`:return _R(r,i,n,s);case`transfer-out`:return vR(r,t,i,n);default:return Z(`unknown subcommand '${o??``}'. Try 'usb --help'.`)}}function bR(){return x(`usb`,async(e,t)=>{if(e.length===0||e.includes(`--help`)||e.includes(`-h`))return X(sR);let n=It(s(),o());if(!n)return Z(`WebUSB is unavailable in this environment`);try{return await yR(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 xR=`/workspace/.v86`,SR=`v86 - run an x86 virtual machine (v86 wasm engine)
3151
+ `;function bR(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?`${gR(e)}\n`:``)}async function xR(e){let t=await e.list();return t.length===0?X(`no granted USB devices
3152
+ `):X(`${t.map(vR).join(`
3153
+ `)}\n`)}async function SR(e,t){let n=e.get(`--__resolved`);if(n)return X(`${vR(await t.info(n))}\n`);let r=dR(e),i=Se();if(i){let e=await Tx(`usb-device`,r,i);if(e.handle)return X(`${vR(await t.info(e.handle))}\n`);let n=e.info,a=Yr();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=Xr().register(o);return X(`${vR(Jr(s,o))}\n`)}return X(`${vR(await t.request(r))}\n`)}async function CR(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 wR(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 TR(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 ER(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 DR(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`):bR((await n.controlIn(i,mR(t),o)).bytes,r)}async function OR(e,t,n,r){let i=e[1];if(!i)return Z(`control-out: handle required`);let a=hR(t);return a.length>4194304?Z(`control-out payload exceeds 4 MiB limit`):X(`${(await r.controlOut(i,mR(n),a)).bytesWritten} bytes written\n`)}async function kR(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`):bR((await n.transferIn(i,Y(a,`endpoint`),s)).bytes,r)}async function AR(e,t,n,r){let[,i,a]=e;if(!i||a===void 0)return Z(`transfer-out: handle and endpoint required`);let o=hR(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 jR(e,t,n){let{positionals:r,flags:i,bools:a}=uR(e),o=r[0],s=a.has(`--raw`);switch(o){case`list`:return xR(n);case`request`:return SR(i,n);case`open`:case`close`:case`reset`:return CR(o,r,n,a);case`clear-halt`:return wR(r,n);case`select-config`:return TR(r,n);case`claim`:case`release`:return ER(o,r,n,a);case`control-in`:return DR(r,i,n,s);case`control-out`:return OR(r,t,i,n);case`transfer-in`:return kR(r,i,n,s);case`transfer-out`:return AR(r,t,i,n);default:return Z(`unknown subcommand '${o??``}'. Try 'usb --help'.`)}}function MR(){return x(`usb`,async(e,t)=>{if(e.length===0||e.includes(`--help`)||e.includes(`-h`))return X(yR);let n=It(s(),o());if(!n)return Z(`WebUSB is unavailable in this environment`);try{return await jR(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 NR=`/workspace/.v86`,PR=`v86 - run an x86 virtual machine (v86 wasm engine)
3150
3154
 
3151
- Requires: ${M} v86@${FD}
3155
+ Requires: ${M} v86@${qD}
3152
3156
 
3153
3157
  Usage:
3154
3158
  v86 start [boot options] Boot a VM in the background (prints pid)
@@ -3182,7 +3186,7 @@ Boot options (QEMU-flavored):
3182
3186
  proxy — no gateway needed, https upstream via the proxy
3183
3187
  -vga <MiB> SVGA/VBE video memory (default 8, max 64) —
3184
3188
  raise for high-res VESA modes (1080p32 needs ~9)
3185
- -bios <path> -vgabios <path> BIOS blobs (default ${xR}/{seabios,vgabios}.bin)
3189
+ -bios <path> -vgabios <path> BIOS blobs (default ${NR}/{seabios,vgabios}.bin)
3186
3190
  -nographic Serial-only guest (skip VGA)
3187
3191
 
3188
3192
  Notes:
@@ -3190,19 +3194,19 @@ Notes:
3190
3194
  (Alpine, FreeDOS, Buildroot Linux) work best.
3191
3195
  - The copy.sh Arch Linux image boots via -state + -fs9p; see the v86 skill.
3192
3196
  - BIOS blobs are not bundled; download once:
3193
- mkdir -p ${xR}
3194
- curl -o ${xR}/seabios.bin https://raw.githubusercontent.com/copy/v86/master/bios/seabios.bin
3195
- curl -o ${xR}/vgabios.bin https://raw.githubusercontent.com/copy/v86/master/bios/vgabios.bin
3196
- `,CR=`v86: BIOS images not found. Download them once:
3197
- mkdir -p ${xR}
3198
- curl -o ${xR}/seabios.bin https://raw.githubusercontent.com/copy/v86/master/bios/seabios.bin
3199
- curl -o ${xR}/vgabios.bin https://raw.githubusercontent.com/copy/v86/master/bios/vgabios.bin
3200
- or pass -bios / -vgabios with explicit VFS paths.`,wR={"-n":TR,"-name":TR,"--name":TR,"-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)=>ER(e,`cdrom`,t),"-hda":(e,t)=>ER(e,`hda`,t),"-fda":(e,t)=>ER(e,`fda`,t),"-kernel":(e,t)=>ER(e,`kernel`,t),"-initrd":(e,t)=>ER(e,`initrd`,t),"-append":(e,t)=>ER(e,`append`,t),"-bios":(e,t)=>ER(e,`bios`,t),"-vgabios":(e,t)=>ER(e,`vgabios`,t),"-state":(e,t)=>ER(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 TR(e,t){return/^[A-Za-z0-9_-]+$/.test(t)?(e.name=t,null):`invalid VM name '${t}'`}function ER(e,t,n){return e[t]=n,null}const DR=[...Object.keys(wR),`--fps`,`--tail`,`--send`,`--to`];function OR(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(wR,r)?wR[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 kR(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 AR(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 jR(e){return aa(e)||Q(`no VM named '${e}' — boot one with \`v86 start -n ${e} ...\``)}function MR(e){return`exitCode`in e}async function NR(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 PR={a:801,c:306,d:531};function FR(){let e=globalThis.__slicc_pm;return e instanceof Object&&typeof e.signal==`function`?e:null}function IR(e={}){return x(`v86`,async(t,n)=>{if(t.length===0||t[0]===`--help`||t[0]===`-h`||t[0]===`help`)return $(SR);if(t[0]===`--version`)return LR(n,e);let r=t[0];if(C(t.slice(1),{valueFlags:DR}))return $(et(`v86`,r,SR,{prefix:`v86`}));let i=$e(t.slice(1));try{switch(r){case`start`:return await UR(i,n,e);case`ls`:return GR();case`type`:return await YR(i,n);case`key`:return await XR(i,n);case`mouse`:return await QR(i,n);case`screenshot`:return await $R(i,n);case`text`:return await ez(i,n);case`serve`:return tz(i);case`serial`:return nz(i);case`state`:return await rz(i,n);case`stop`:return await iz(i,e);default:return Q(`unknown subcommand '${r}' — see \`v86 --help\``)}}catch(e){return Q(e instanceof Error?e.message:String(e))}})}async function LR(e,t){if(t.loadEngine)return $(`v86 ${(await t.loadEngine(kR(e))).version} (qemu-flavored CLI)\n`);let n=await VD(kR(e));return n?$(`v86 ${n.version} (qemu-flavored CLI)\n`):Q(ID)}async function RR(e,t,n){if(e.state&&!e.bios&&!e.vgabios)return null;let r=await NR(t,e.bios??`${xR}/seabios.bin`,`-bios`);if(`exitCode`in r)return e.bios?r:Q(CR.replace(/^v86: /u,``));if(n.bios=r,e.nographic)return null;let i=await NR(t,e.vgabios??`${xR}/vgabios.bin`,`-vgabios`);return`exitCode`in i?e.vgabios?i:Q(CR.replace(/^v86: /u,``)):(n.vga_bios=i,null)}async function zR(e,t,n){let r=await RR(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 NR(t,a,`-${r}`);if(`exitCode`in o)return o;n[i]=o}if(e.append&&(n.cmdline=e.append),e.boot&&(n.boot_order=PR[e.boot]),e.state){let r=await NR(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 BR=6e4;function VR(e){return e.v86?Promise.resolve():new Promise((t,n)=>{let r=setTimeout(()=>n(Error(`engine init timed out after ${BR/1e3}s`)),BR);e.add_listener(`emulator-loaded`,()=>{clearTimeout(r),t()})})}function HR(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??ie();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 UR(e,t,n){let r=OR(e);if(!r.ok)return Q(r.error);let i=r.parsed;if(aa(i.name))return Q(`VM '${i.name}' already running — stop it first or pick another -n name`);let a=kR(t),o=n.loadEngine?await n.loadEngine(a):await RD({ipk:a}),s={wasm_fn:UD(o.wasmModule),memory_size:i.memoryMib*1024*1024,vga_memory_size:i.vgaMemoryMib*1024*1024,autostart:!1,disable_speaker:!0,fastboot:!0},c=await zR(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??FR();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`,()=>{WR(u,d)})}ia(u);try{if(await VR(l),i.netRelay===`fetch`){let e=HR(l,n);if(e)return await WR(u,d),e}ra(u),await l.run()}catch(e){return await WR(u,d),Q(`boot failed: ${e instanceof Error?e.message:String(e)}`)}u.onScreenChange=()=>{import(`./registry-qHtWYFOX.js`).then(({getComputerRegistry:e})=>{e()?.refresh(`v86:${u.name}`)})},import(`./v86-BF0NlNun.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 WR(e,t){oa(e),na(e.name),import(`./v86-BF0NlNun.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 GR(){let e=ta();if(e.length===0)return $(`no VMs running
3197
+ mkdir -p ${NR}
3198
+ curl -o ${NR}/seabios.bin https://raw.githubusercontent.com/copy/v86/master/bios/seabios.bin
3199
+ curl -o ${NR}/vgabios.bin https://raw.githubusercontent.com/copy/v86/master/bios/vgabios.bin
3200
+ `,FR=`v86: BIOS images not found. Download them once:
3201
+ mkdir -p ${NR}
3202
+ curl -o ${NR}/seabios.bin https://raw.githubusercontent.com/copy/v86/master/bios/seabios.bin
3203
+ curl -o ${NR}/vgabios.bin https://raw.githubusercontent.com/copy/v86/master/bios/vgabios.bin
3204
+ or pass -bios / -vgabios with explicit VFS paths.`,IR={"-n":LR,"-name":LR,"--name":LR,"-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)=>RR(e,`cdrom`,t),"-hda":(e,t)=>RR(e,`hda`,t),"-fda":(e,t)=>RR(e,`fda`,t),"-kernel":(e,t)=>RR(e,`kernel`,t),"-initrd":(e,t)=>RR(e,`initrd`,t),"-append":(e,t)=>RR(e,`append`,t),"-bios":(e,t)=>RR(e,`bios`,t),"-vgabios":(e,t)=>RR(e,`vgabios`,t),"-state":(e,t)=>RR(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 LR(e,t){return/^[A-Za-z0-9_-]+$/.test(t)?(e.name=t,null):`invalid VM name '${t}'`}function RR(e,t,n){return e[t]=n,null}const zR=[...Object.keys(IR),`--fps`,`--tail`,`--send`,`--to`];function BR(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(IR,r)?IR[r]:void 0;if(!i)return{ok:!1,error:`unknown option '${r}'`};let a=n+1<e.length?e[n+1]:null;if(a===null)return{ok:!1,error:`${r} requires a value`};let o=i(t,a);if(o)return{ok:!1,error:o};n++}return!t.cdrom&&!t.hda&&!t.fda&&!t.kernel&&!t.state?{ok:!1,error:`no bootable media (-cdrom, -hda, -fda, -kernel, or -state required)`}:{ok:!0,parsed:t}}function VR(e){return{reader:{exists:t=>e.fs.exists(t),isDirectory:async t=>{try{return(await e.fs.stat(t)).isDirectory}catch{return!1}},readFile:t=>e.fs.readFile(t)},readBytes:t=>e.fs.readFileBuffer(t),fromDir:e.cwd}}function Q(e){return{stdout:``,stderr:`v86: ${e}\n`,exitCode:1}}function $(e=``){return{stdout:e,stderr:``,exitCode:0}}function HR(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 UR(e){return aa(e)||Q(`no VM named '${e}' — boot one with \`v86 start -n ${e} ...\``)}function WR(e){return`exitCode`in e}async function GR(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 KR={a:801,c:306,d:531};function qR(){let e=globalThis.__slicc_pm;return e instanceof Object&&typeof e.signal==`function`?e:null}function JR(e={}){return x(`v86`,async(t,n)=>{if(t.length===0||t[0]===`--help`||t[0]===`-h`||t[0]===`help`)return $(PR);if(t[0]===`--version`)return YR(n,e);let r=t[0];if(C(t.slice(1),{valueFlags:zR}))return $(et(`v86`,r,PR,{prefix:`v86`}));let i=$e(t.slice(1));try{switch(r){case`start`:return await tz(i,n,e);case`ls`:return rz();case`type`:return await sz(i,n);case`key`:return await cz(i,n);case`mouse`:return await uz(i,n);case`screenshot`:return await dz(i,n);case`text`:return await fz(i,n);case`serve`:return pz(i);case`serial`:return mz(i);case`state`:return await hz(i,n);case`stop`:return await gz(i,e);default:return Q(`unknown subcommand '${r}' — see \`v86 --help\``)}}catch(e){return Q(e instanceof Error?e.message:String(e))}})}async function YR(e,t){if(t.loadEngine)return $(`v86 ${(await t.loadEngine(VR(e))).version} (qemu-flavored CLI)\n`);let n=await $D(VR(e));return n?$(`v86 ${n.version} (qemu-flavored CLI)\n`):Q(JD)}async function XR(e,t,n){if(e.state&&!e.bios&&!e.vgabios)return null;let r=await GR(t,e.bios??`${NR}/seabios.bin`,`-bios`);if(`exitCode`in r)return e.bios?r:Q(FR.replace(/^v86: /u,``));if(n.bios=r,e.nographic)return null;let i=await GR(t,e.vgabios??`${NR}/vgabios.bin`,`-vgabios`);return`exitCode`in i?e.vgabios?i:Q(FR.replace(/^v86: /u,``)):(n.vga_bios=i,null)}async function ZR(e,t,n){let r=await XR(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 GR(t,a,`-${r}`);if(`exitCode`in o)return o;n[i]=o}if(e.append&&(n.cmdline=e.append),e.boot&&(n.boot_order=KR[e.boot]),e.state){let r=await GR(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 QR=6e4;function $R(e){return e.v86?Promise.resolve():new Promise((t,n)=>{let r=setTimeout(()=>n(Error(`engine init timed out after ${QR/1e3}s`)),QR);e.add_listener(`emulator-loaded`,()=>{clearTimeout(r),t()})})}function ez(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??ie();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 tz(e,t,n){let r=BR(e);if(!r.ok)return Q(r.error);let i=r.parsed;if(aa(i.name))return Q(`VM '${i.name}' already running — stop it first or pick another -n name`);let a=VR(t),o=n.loadEngine?await n.loadEngine(a):await XD({ipk:a}),s={wasm_fn:tO(o.wasmModule),memory_size:i.memoryMib*1024*1024,vga_memory_size:i.vgaMemoryMib*1024*1024,autostart:!1,disable_speaker:!0,fastboot:!0},c=await ZR(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??qR();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`,()=>{nz(u,d)})}ia(u);try{if(await $R(l),i.netRelay===`fetch`){let e=ez(l,n);if(e)return await nz(u,d),e}ra(u),await l.run()}catch(e){return await nz(u,d),Q(`boot failed: ${e instanceof Error?e.message:String(e)}`)}u.onScreenChange=()=>{import(`./registry-qHtWYFOX.js`).then(({getComputerRegistry:e})=>{e()?.refresh(`v86:${u.name}`)})},import(`./v86-BF0NlNun.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 nz(e,t){oa(e),na(e.name),import(`./v86-BF0NlNun.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 rz(){let e=ta();if(e.length===0)return $(`no VMs running
3201
3205
  `);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(`
3202
- `)}\n`)}function KR(e,t){return`prefer: computer ${e} -c ${t}\n`}async function qR(e,t,n,r){let i=jR(t);if(MR(i))return i;let[{runComputer:a},{getComputerRegistry:o,installComputerRegistry:s},c]=await Promise.all([import(`./run-BI7sTnua.js`).then(e=>e.t),import(`./registry-qHtWYFOX.js`),import(`./v86-BF0NlNun.js`)]),l=c.v86ComputerId(t),u=o()??s(null);return u.get(l)||c.registerV86Computer(i,u),JR(await a([`-c`,l,...n],e,{registry:u}),r,l)}function JR(e,t,n){let r=KR(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 YR(e,t){let{name:n,rest:r}=AR(e);if(r.length===0){let e=jR(n);return MR(e)?e:Q(`type: no text supplied`)}return qR(t,n,[`type`,`--`,...r],`type`)}async function XR(e,t){let{name:n,rest:r}=AR(e);if(r.length===0){let e=jR(n);return MR(e)?e:Q(`key: no chord supplied`)}return qR(t,n,[`key`,...r],`key`)}const ZR=[`left`,`middle`,`right`];async function QR(e,t){let{name:n,rest:r}=AR(e),i=jR(n);if(MR(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?qR(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>`):qR(t,n,[`--native`,`mousemove`,e,i,`--relative`],`mousemove`)}if(o===`click`){let e=r[1]??`left`;if(!ZR.includes(e))return Q(`mouse: unknown button '${r[1]}'`);let i=[`click`,e];return r.includes(`--double`)&&i.push(`--repeat`,`2`),qR(t,n,i,`click`)}return Q(`mouse: expected move <dx> <dy>, click [button], or --to <x>,<y>`)}async function $R(e,t){let{name:n,rest:r}=AR(e);return qR(t,n,[`screenshot`,...r],`screenshot`)}async function ez(e,t){let{name:n}=AR(e);return qR(t,n,[`text`],`text`)}function tz(e){let{name:t}=AR(e);return $(`v86 serve is retired.\nUse: computer watch -c v86:${t}\nLive frames go to the overlay, lightbox, and bash rows.\n`)}function nz(e){let{name:t,rest:n}=AR(e),r=jR(t);if(MR(r))return r;let i=n.indexOf(`--send`);if(i!==-1){let e=n.slice(i+1).join(` `).replace(/\\n/gu,`
3206
+ `)}\n`)}function iz(e,t){return`prefer: computer ${e} -c ${t}\n`}async function az(e,t,n,r){let i=UR(t);if(WR(i))return i;let[{runComputer:a},{getComputerRegistry:o,installComputerRegistry:s},c]=await Promise.all([import(`./run-BI7sTnua.js`).then(e=>e.t),import(`./registry-qHtWYFOX.js`),import(`./v86-BF0NlNun.js`)]),l=c.v86ComputerId(t),u=o()??s(null);return u.get(l)||c.registerV86Computer(i,u),oz(await a([`-c`,l,...n],e,{registry:u}),r,l)}function oz(e,t,n){let r=iz(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 sz(e,t){let{name:n,rest:r}=HR(e);if(r.length===0){let e=UR(n);return WR(e)?e:Q(`type: no text supplied`)}return az(t,n,[`type`,`--`,...r],`type`)}async function cz(e,t){let{name:n,rest:r}=HR(e);if(r.length===0){let e=UR(n);return WR(e)?e:Q(`key: no chord supplied`)}return az(t,n,[`key`,...r],`key`)}const lz=[`left`,`middle`,`right`];async function uz(e,t){let{name:n,rest:r}=HR(e),i=UR(n);if(WR(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?az(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>`):az(t,n,[`--native`,`mousemove`,e,i,`--relative`],`mousemove`)}if(o===`click`){let e=r[1]??`left`;if(!lz.includes(e))return Q(`mouse: unknown button '${r[1]}'`);let i=[`click`,e];return r.includes(`--double`)&&i.push(`--repeat`,`2`),az(t,n,i,`click`)}return Q(`mouse: expected move <dx> <dy>, click [button], or --to <x>,<y>`)}async function dz(e,t){let{name:n,rest:r}=HR(e);return az(t,n,[`screenshot`,...r],`screenshot`)}async function fz(e,t){let{name:n}=HR(e);return az(t,n,[`text`],`text`)}function pz(e){let{name:t}=HR(e);return $(`v86 serve is retired.\nUse: computer watch -c v86:${t}\nLive frames go to the overlay, lightbox, and bash rows.\n`)}function mz(e){let{name:t,rest:n}=HR(e),r=UR(t);if(WR(r))return r;let i=n.indexOf(`--send`);if(i!==-1){let e=n.slice(i+1).join(` `).replace(/\\n/gu,`
3203
3207
  `);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(`
3204
3208
  `).slice(-Math.max(1,e)).join(`
3205
- `)}\n`)}return $(r.serial.buffer?`${r.serial.buffer}\n`:``)}async function rz(e,t){let{name:n,rest:r}=AR(e),i=jR(n);if(MR(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 iz(e,t){let{name:n,rest:r}=AR(e),i=jR(n);if(MR(i))return i;let a=t.processManager??FR();return r.includes(`--force`)&&a&&i.pid!==null?(a.signal(i.pid,`SIGKILL`),$(`VM '${n}' killed\n`)):(await WR(i,a),$(`VM '${n}' stopped\n`))}const az=[`--name`,`--filter`,`--scoop`],oz={state:`inactive`,session:null};function sz(){return{stdout:`usage: webhook <command> [options]
3209
+ `)}\n`)}return $(r.serial.buffer?`${r.serial.buffer}\n`:``)}async function hz(e,t){let{name:n,rest:r}=HR(e),i=UR(n);if(WR(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 gz(e,t){let{name:n,rest:r}=HR(e),i=UR(n);if(WR(i))return i;let a=t.processManager??qR();return r.includes(`--force`)&&a&&i.pid!==null?(a.signal(i.pid,`SIGKILL`),$(`VM '${n}' killed\n`)):(await nz(i,a),$(`VM '${n}' stopped\n`))}const _z=[`--name`,`--filter`,`--scoop`],vz={state:`inactive`,session:null};function yz(){return{stdout:`usage: webhook <command> [options]
3206
3210
 
3207
3211
  Commands:
3208
3212
  create [--scoop <name>] [--name <name>] [--filter <code>] Create a new webhook endpoint
@@ -3222,21 +3226,21 @@ Examples:
3222
3226
  webhook create --scoop slack-relay --name slack --filter "(e) => ({ text: e.body.text, user: e.body.user })"
3223
3227
  webhook list
3224
3228
  webhook delete abc123
3225
- `,stderr:``,exitCode:0}}function cz(e){return e().session?.webhookUrl??null}function lz(e,t,n){return t?sa(t,e):n()?ca(self.location.href,e):`(URL unavailable — connect a leader tray)`}function uz(e){return{stdout:``,stderr:`webhook ${e}: kernel host has not booted yet — try again in a moment\n`,exitCode:1}}async function dz(e){if(e.length!==1)return{stdout:``,stderr:`webhook rotate: takes no arguments
3229
+ `,stderr:``,exitCode:0}}function bz(e){return e().session?.webhookUrl??null}function xz(e,t,n){return t?sa(t,e):n()?ca(self.location.href,e):`(URL unavailable — connect a leader tray)`}function Sz(e){return{stdout:``,stderr:`webhook ${e}: kernel host has not booted yet — try again in a moment\n`,exitCode:1}}async function Cz(e){if(e.length!==1)return{stdout:``,stderr:`webhook rotate: takes no arguments
3226
3230
  `,exitCode:1};let t=o();if(!t)return{stdout:``,stderr:`webhook rotate: no leader panel connected
3227
3231
  `,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.
3228
3232
  `,stderr:``,exitCode:0}}catch{return{stdout:``,stderr:`webhook rotate: rotation failed; reconnect the leader and retry
3229
- `,exitCode:1}}}async function fz(e,t,n){let r=S(e.slice(1),{value:az});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=Ii(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
3230
- `,exitCode:1};let s=hz(t);if(s)return s;let c=await Gv();if(!c)return uz(`create`);let l=await qv(c,`webhook create`,r.values.get(`--scoop`));if(l)return{stdout:``,stderr:l,exitCode:1};let u=await c.createWebhook(i,o,a),d=gz(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 pz(e,t){let n=S(e.slice(1),{});if(`error`in n)return{stdout:``,stderr:`webhook list: ${n.error}\n`,exitCode:1};let r=await Gv();if(!r)return uz(`list`);let i=await r.listWebhooks();if(i.length===0)return{stdout:`No active webhooks
3231
- `,stderr:``,exitCode:0};let{trayUrlBase:a,urlResolutionError:o}=_z(t);return{stdout:vz(i.map(e=>({id:e.id,name:e.name,url:lz(e.id,a,t.hasLocalNodeServer),createdAt:e.createdAt,filter:e.filter,scoop:e.scoop})),a,o,t.hasLocalNodeServer),stderr:``,exitCode:0}}async function mz(e,t){let n=S(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
3233
+ `,exitCode:1}}}async function wz(e,t,n){let r=S(e.slice(1),{value:_z});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=Ii(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
3234
+ `,exitCode:1};let s=Dz(t);if(s)return s;let c=await ry();if(!c)return Sz(`create`);let l=await ay(c,`webhook create`,r.values.get(`--scoop`));if(l)return{stdout:``,stderr:l,exitCode:1};let u=await c.createWebhook(i,o,a),d=Oz(u.id,t),f=`Created webhook "${u.name}"\nID: ${u.id}\nURL: ${d}\n`;return u.scoop&&(f+=`Scoop: ${u.scoop}\n`),u.filter&&(f+=`Filter: ${u.filter}\n`),{stdout:f,stderr:``,exitCode:0}}async function Tz(e,t){let n=S(e.slice(1),{});if(`error`in n)return{stdout:``,stderr:`webhook list: ${n.error}\n`,exitCode:1};let r=await ry();if(!r)return Sz(`list`);let i=await r.listWebhooks();if(i.length===0)return{stdout:`No active webhooks
3235
+ `,stderr:``,exitCode:0};let{trayUrlBase:a,urlResolutionError:o}=kz(t);return{stdout:Az(i.map(e=>({id:e.id,name:e.name,url:xz(e.id,a,t.hasLocalNodeServer),createdAt:e.createdAt,filter:e.filter,scoop:e.scoop})),a,o,t.hasLocalNodeServer),stderr:``,exitCode:0}}async function Ez(e,t){let n=S(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
3232
3236
  `,exitCode:1};if(!r)return{stdout:``,stderr:`webhook delete: requires an ID
3233
- `,exitCode:1};let i=await Gv();if(!i)return uz(`delete`);let a=o();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
3234
- `,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 hz(e){if(e.hasLocalNodeServer())return null;if(!cz(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}")`)+`
3235
- `,exitCode:1}}return null}function gz(e,t){try{return lz(e,cz(t.getLeaderStatus),t.hasLocalNodeServer)}catch(e){return`(URL resolution failed: ${e instanceof Error?e.message:String(e)})`}}function _z(e){try{return{trayUrlBase:cz(e.getLeaderStatus),urlResolutionError:null}}catch(e){return{trayUrlBase:null,urlResolutionError:e instanceof Error?e.message:String(e)}}}function vz(e,t,n,r){let i=`Active webhooks:
3237
+ `,exitCode:1};let i=await ry();if(!i)return Sz(`delete`);let a=o();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
3238
+ `,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 Dz(e){if(e.hasLocalNodeServer())return null;if(!bz(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}")`)+`
3239
+ `,exitCode:1}}return null}function Oz(e,t){try{return xz(e,bz(t.getLeaderStatus),t.hasLocalNodeServer)}catch(e){return`(URL resolution failed: ${e instanceof Error?e.message:String(e)})`}}function kz(e){try{return{trayUrlBase:bz(e.getLeaderStatus),urlResolutionError:null}}catch(e){return{trayUrlBase:null,urlResolutionError:e instanceof Error?e.message:String(e)}}}function Az(e,t,n,r){let i=`Active webhooks:
3236
3240
  `;for(let t of e)i+=` ${t.id} ${t.name.padEnd(20)} ${t.url}`,t.scoop&&(i+=` -> ${t.scoop}`),t.filter&&(i+=` [filtered]`),i+=`
3237
3241
  `;return n?i+=`\nNote: webhook URL resolution failed (${n}). Try again once the tray is connected.\n`:!r()&&!t&&(i+=`
3238
3242
  Note: webhook URLs require a leader tray. Configure one in Settings to expose POST endpoints.
3239
- `),i}function yz(e={}){let t={hasLocalNodeServer:e.hasLocalNodeServer??(()=>!0),getLeaderStatus:e.getLeaderStatus??(()=>oz)};return x(`webhook`,async(e,n)=>{if(e.length===0)return sz();let r=e[0];if(C(e,{valueFlags:r===`create`?az:void 0}))return sz();try{switch(r){case`create`:return await fz(e,t,n.env);case`list`:return await pz(e,t);case`delete`:return await mz(e,t);case`rotate`:return await dz(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 bz(){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 xz(){return{stdout:`usage: websocat [FLAGS] [OPTIONS] <ws://URL | wss://URL>
3243
+ `),i}function jz(e={}){let t={hasLocalNodeServer:e.hasLocalNodeServer??(()=>!0),getLeaderStatus:e.getLeaderStatus??(()=>vz)};return x(`webhook`,async(e,n)=>{if(e.length===0)return yz();let r=e[0];if(C(e,{valueFlags:r===`create`?_z:void 0}))return yz();try{switch(r){case`create`:return await wz(e,t,n.env);case`list`:return await Tz(e,t);case`delete`:return await Ez(e,t);case`rotate`:return await Cz(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 Mz(){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 Nz(){return{stdout:`usage: websocat [FLAGS] [OPTIONS] <ws://URL | wss://URL>
3240
3244
 
3241
3245
  Minimal websocat client. Sends stdin lines as WebSocket messages and prints
3242
3246
  received messages to stdout. Server mode and advanced specifiers (exec:, tcp:,
@@ -3278,14 +3282,14 @@ EXAMPLES:
3278
3282
  echo 'Page.navigate {"url":"https://example.com"}' \\
3279
3283
  | websocat -1 --jsonrpc --jsonrpc-omit-jsonrpc \\
3280
3284
  ws://127.0.0.1:9222/devtools/page/<id>
3281
- `,stderr:``,exitCode:0}}const Sz=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 Cz(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 wz(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 Tz(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 Ez(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 Dz(e,t){return t===`-v`?(e.verbose+=1,!0):t===`-vv`&&(e.verbose+=2,!0)}function Oz(e,t,n,r,i){let a=Cz(t,n,r,e);return a?(i(a.value),{nextIndex:a.next}):{stop:!0}}function kz(e,t,n,r,i,a,o){let s=Cz(t,n,r,e);if(!s)return{stop:!0};let c=wz(e,s.value,i,o);return c===null?{stop:!0}:(a(c),{nextIndex:s.next})}function Az(e,t){return t.some(t=>e===t||e.startsWith(`${t}=`))}const jz=[(e,t,n,r)=>{if(!Az(r,[`--close-status-code`]))return null;let i=Cz(t,n,`--close-status-code`,e);if(!i)return{stop:!0};let a=Tz(e,i.value);return a===null?{stop:!0}:(e.closeStatus=a,{nextIndex:i.next})},(e,t,n,r)=>Az(r,[`--close-reason`])?Oz(e,t,n,`--close-reason`,t=>{e.closeReason=t}):null,(e,t,n,r)=>Az(r,[`-B`,`--buffer-size`])?kz(e,t,n,r===`-B`?`-B`:`--buffer-size`,`--buffer-size`,t=>{e.bufferSize=t}):null,(e,t,n,r)=>Az(r,[`--max-messages`])?kz(e,t,n,`--max-messages`,`--max-messages`,t=>{e.maxMessages=t}):null,(e,t,n,r)=>Az(r,[`--protocol`])?Oz(e,t,n,`--protocol`,t=>{e.protocol=t}):null,(e,t,n,r)=>{if(!Az(r,[`--ping-interval`]))return null;let i=Cz(t,n,`--ping-interval`,e);return i?(e.pingInterval=Number(i.value),{nextIndex:i.next}):{stop:!0}},(e,t,n,r)=>Az(r,[`--conn-timeout`])?kz(e,t,n,`--conn-timeout`,`--conn-timeout`,t=>{e.connTimeoutMs=Math.round(t*1e3)},`positive seconds`):null,(e,t,n,r)=>Az(r,[`-H`,`--header`])?Oz(e,t,n,r===`-H`?`-H`:`--header`,t=>{e.customHeaders.push(t)}):null];function Mz(e,t,n,r){for(let i of jz){let a=i(e,t,n,r);if(a)return a}return null}function Nz(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)
3282
- `)}function Pz(e){let t=bz();for(let n=0;n<e.length;n+=1){let r=e[n];if(r===`-h`||r===`--help`)return t.showHelp=!0,t;if(Sz.has(r)||Sz.has(r.split(`=`)[0]))return t.error=`websocat: flag '${r}' is not supported in slicc's minimal client\n`,t;if(Ez(t,r)||Dz(t,r))continue;let i=Mz(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 Nz(t),t}function Fz(e,t){if(!e)return[];let n=t?`\0`:`
3283
- `,r=e.split(n);return r.length>0&&r[r.length-1]===``&&r.pop(),r}function Iz(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 Lz(e){try{return new TextDecoder(`utf-8`,{fatal:!1}).decode(e)}catch{return l(e)}}function Rz(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 zz=1e4;function Bz(){let e,t;return{promise:new Promise((n,r)=>{e=n,t=r}),resolve:e,reject:t}}function Vz(){let e=!1,t=Bz();return{...t,settle:n=>{e||(e=!0,t.resolve(n))}}}function Hz(e,t){return e.length?e.join(t)+t:``}function Uz(e){return e.length?e.join(`
3285
+ `,stderr:``,exitCode:0}}const Pz=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 Fz(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 Iz(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 Lz(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 Rz(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 zz(e,t){return t===`-v`?(e.verbose+=1,!0):t===`-vv`&&(e.verbose+=2,!0)}function Bz(e,t,n,r,i){let a=Fz(t,n,r,e);return a?(i(a.value),{nextIndex:a.next}):{stop:!0}}function Vz(e,t,n,r,i,a,o){let s=Fz(t,n,r,e);if(!s)return{stop:!0};let c=Iz(e,s.value,i,o);return c===null?{stop:!0}:(a(c),{nextIndex:s.next})}function Hz(e,t){return t.some(t=>e===t||e.startsWith(`${t}=`))}const Uz=[(e,t,n,r)=>{if(!Hz(r,[`--close-status-code`]))return null;let i=Fz(t,n,`--close-status-code`,e);if(!i)return{stop:!0};let a=Lz(e,i.value);return a===null?{stop:!0}:(e.closeStatus=a,{nextIndex:i.next})},(e,t,n,r)=>Hz(r,[`--close-reason`])?Bz(e,t,n,`--close-reason`,t=>{e.closeReason=t}):null,(e,t,n,r)=>Hz(r,[`-B`,`--buffer-size`])?Vz(e,t,n,r===`-B`?`-B`:`--buffer-size`,`--buffer-size`,t=>{e.bufferSize=t}):null,(e,t,n,r)=>Hz(r,[`--max-messages`])?Vz(e,t,n,`--max-messages`,`--max-messages`,t=>{e.maxMessages=t}):null,(e,t,n,r)=>Hz(r,[`--protocol`])?Bz(e,t,n,`--protocol`,t=>{e.protocol=t}):null,(e,t,n,r)=>{if(!Hz(r,[`--ping-interval`]))return null;let i=Fz(t,n,`--ping-interval`,e);return i?(e.pingInterval=Number(i.value),{nextIndex:i.next}):{stop:!0}},(e,t,n,r)=>Hz(r,[`--conn-timeout`])?Vz(e,t,n,`--conn-timeout`,`--conn-timeout`,t=>{e.connTimeoutMs=Math.round(t*1e3)},`positive seconds`):null,(e,t,n,r)=>Hz(r,[`-H`,`--header`])?Bz(e,t,n,r===`-H`?`-H`:`--header`,t=>{e.customHeaders.push(t)}):null];function Wz(e,t,n,r){for(let i of Uz){let a=i(e,t,n,r);if(a)return a}return null}function Gz(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)
3286
+ `)}function Kz(e){let t=Mz();for(let n=0;n<e.length;n+=1){let r=e[n];if(r===`-h`||r===`--help`)return t.showHelp=!0,t;if(Pz.has(r)||Pz.has(r.split(`=`)[0]))return t.error=`websocat: flag '${r}' is not supported in slicc's minimal client\n`,t;if(Rz(t,r)||zz(t,r))continue;let i=Wz(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 Gz(t),t}function qz(e,t){if(!e)return[];let n=t?`\0`:`
3287
+ `,r=e.split(n);return r.length>0&&r[r.length-1]===``&&r.pop(),r}function Jz(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 Yz(e){try{return new TextDecoder(`utf-8`,{fatal:!1}).decode(e)}catch{return l(e)}}function Xz(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 Zz=1e4;function Qz(){let e,t;return{promise:new Promise((n,r)=>{e=n,t=r}),resolve:e,reject:t}}function $z(){let e=!1,t=Qz();return{...t,settle:n=>{e||(e=!0,t.resolve(n))}}}function eB(e,t){return e.length?e.join(t)+t:``}function tB(e){return e.length?e.join(`
3284
3288
  `)+`
3285
- `:``}function Wz(e,t,n){e.quiet||t.push(`websocat: ${n}`)}function Gz(e,t){e.verbose<1||(e.customHeaders.length>0&&Wz(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&&Wz(e,t,`--ping-interval has no effect in browsers (no ping API exposed)`),e.insecure&&Wz(e,t,`-k/--insecure has no effect in browsers`))}function Kz(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 qz(e,t,n,r){if(n.outLines.length<zz){n.outLines.push(r);return}n.droppedForOverflow===0&&Wz(e,t,`output buffer reached ${zz} 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 Jz(e,t,n){let{bytes:r,isBinary:i}=Rz(n);return r.length>e.bufferSize&&(Wz(e,t,`inbound message of ${r.length} bytes exceeds --buffer-size ${e.bufferSize}; truncating`),r=r.slice(0,e.bufferSize)),i&&e.base64?l(r):Lz(r)}function Yz(e,t){return e.maxMessages!==void 0&&t>=e.maxMessages||e.oneMessage}function Xz(e,t,n){try{n===void 0?e.close(t):e.close(t,n)}catch{}}function Zz(e,t){setTimeout(()=>{Xz(t,e.closeStatus??1e3,e.closeReason)},0)}function Qz(e,t,n){let r=Fz(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=Iz(n,i,t.jsonrpcOmit),i+=1),t.binary?e.send(new TextEncoder().encode(r).buffer):e.send(r),a+=1}return a}function $z(e,t,n){!t.oneMessage&&!t.noClose&&(t.exitOnEof||n===0)&&Zz(t,e)}async function eB(e,t,n){let r=[];Gz(e,r);let i=e.nullTerminated?`\0`:`
3286
- `,a=Kz(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=Bz(),u=Vz(),d=0,f=!1,p=setTimeout(()=>{f=!0,Xz(o,1e3),c||l.reject(Error(`connect timeout`))},e.connTimeoutMs),m=()=>{if(e.noClose){u.settle(d);return}Xz(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=Jz(e,r,t.data);qz(e,r,s,n)}s.received+=1,Yz(e,s.received)&&(s.finishing=!0,m())}},o.onerror=()=>{f||(Wz(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&&Wz(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:Hz(s.outLines,i),stderr:Uz(r.concat([`websocat: ${t}`])),exitCode:t===`connect timeout`?124:1}}e.unidirectionalReverse?!e.noClose&&e.exitOnEof&&!e.oneMessage&&Zz(e,o):$z(o,e,Qz(o,e,t));let h=await u.promise;return s.droppedForOverflow>0&&Wz(e,r,`dropped ${s.droppedForOverflow} inbound message(s) due to output buffer cap`),{stdout:Hz(s.outLines,i),stderr:Uz(r),exitCode:h}}function tB(e){return{stdout:``,stderr:e,exitCode:2}}function nB(e){return e.WebSocketCtor??(typeof WebSocket<`u`?WebSocket:void 0)}async function rB(e,t,n={}){let r=Pz(e);if(r.showHelp)return xz();if(r.error)return tB(r.error);if(!r.url)return tB(`websocat: missing ws:// or wss:// URL (use --help for usage)
3287
- `);if(!/^wss?:\/\//i.test(r.url))return tB(`websocat: URL must start with ws:// or wss://, got '${r.url}'\n`);let i=nB(n);return i?eB(r,t.stdin,i):{stdout:``,stderr:`websocat: no WebSocket implementation available in this runtime
3288
- `,exitCode:1}}function iB(){return x(`websocat`,async(e,t)=>rB(e,{stdin:N(t.stdin)}))}function aB(){return x(`__wf_progress`,async()=>({stdout:``,stderr:``,exitCode:0}))}const oB={commands:new Map,collisions:[]};async function sB(e,t){let n=rr(t);return e.scriptCatalog?e.scriptCatalog.getJshIndex(n):e.fs?or(e.fs,n):oB}async function cB(e){return e.scriptCatalog?e.scriptCatalog.getWorkflowCommands():e.fs?ti(e.fs):new Map}function lB(e,t,n,r,i,a,o){if(i.has(e)){let i=[`/usr/bin/${e}`];if((t||r)&&i.push(` (shadowed by built-in ${e})`),t){let e=n?[t,...n.shadowedPaths]:[t];for(let t of e)i.push(` (shadowed ${t})`)}return{lines:i,found:!0}}if(t){let e=[t];if(n)for(let t of n.shadowedPaths)e.push(` (shadowed ${t})`);return r&&e.push(` ${r.path} (workflow, shadowed by .jsh)`),{lines:e,found:!0}}return r?{lines:[`${r.path} (workflow)`],found:!0}:a.has(e)&&!o.has(e)?{lines:[`/usr/bin/${e}`],found:!0}:{lines:[],found:!1}}function uB(e={}){let t=e.scriptCatalog!==void 0||e.fs!==void 0?e:typeof e.walk==`function`&&typeof e.exists==`function`?{fs:e}:{};return x(`which`,async(e,n)=>{if(C(e))return{stdout:`which - locate a command
3289
+ `:``}function nB(e,t,n){e.quiet||t.push(`websocat: ${n}`)}function rB(e,t){e.verbose<1||(e.customHeaders.length>0&&nB(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&&nB(e,t,`--ping-interval has no effect in browsers (no ping API exposed)`),e.insecure&&nB(e,t,`-k/--insecure has no effect in browsers`))}function iB(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 aB(e,t,n,r){if(n.outLines.length<Zz){n.outLines.push(r);return}n.droppedForOverflow===0&&nB(e,t,`output buffer reached ${Zz} 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 oB(e,t,n){let{bytes:r,isBinary:i}=Xz(n);return r.length>e.bufferSize&&(nB(e,t,`inbound message of ${r.length} bytes exceeds --buffer-size ${e.bufferSize}; truncating`),r=r.slice(0,e.bufferSize)),i&&e.base64?l(r):Yz(r)}function sB(e,t){return e.maxMessages!==void 0&&t>=e.maxMessages||e.oneMessage}function cB(e,t,n){try{n===void 0?e.close(t):e.close(t,n)}catch{}}function lB(e,t){setTimeout(()=>{cB(t,e.closeStatus??1e3,e.closeReason)},0)}function uB(e,t,n){let r=qz(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=Jz(n,i,t.jsonrpcOmit),i+=1),t.binary?e.send(new TextEncoder().encode(r).buffer):e.send(r),a+=1}return a}function dB(e,t,n){!t.oneMessage&&!t.noClose&&(t.exitOnEof||n===0)&&lB(t,e)}async function fB(e,t,n){let r=[];rB(e,r);let i=e.nullTerminated?`\0`:`
3290
+ `,a=iB(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=Qz(),u=$z(),d=0,f=!1,p=setTimeout(()=>{f=!0,cB(o,1e3),c||l.reject(Error(`connect timeout`))},e.connTimeoutMs),m=()=>{if(e.noClose){u.settle(d);return}cB(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=oB(e,r,t.data);aB(e,r,s,n)}s.received+=1,sB(e,s.received)&&(s.finishing=!0,m())}},o.onerror=()=>{f||(nB(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&&nB(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:eB(s.outLines,i),stderr:tB(r.concat([`websocat: ${t}`])),exitCode:t===`connect timeout`?124:1}}e.unidirectionalReverse?!e.noClose&&e.exitOnEof&&!e.oneMessage&&lB(e,o):dB(o,e,uB(o,e,t));let h=await u.promise;return s.droppedForOverflow>0&&nB(e,r,`dropped ${s.droppedForOverflow} inbound message(s) due to output buffer cap`),{stdout:eB(s.outLines,i),stderr:tB(r),exitCode:h}}function pB(e){return{stdout:``,stderr:e,exitCode:2}}function mB(e){return e.WebSocketCtor??(typeof WebSocket<`u`?WebSocket:void 0)}async function hB(e,t,n={}){let r=Kz(e);if(r.showHelp)return Nz();if(r.error)return pB(r.error);if(!r.url)return pB(`websocat: missing ws:// or wss:// URL (use --help for usage)
3291
+ `);if(!/^wss?:\/\//i.test(r.url))return pB(`websocat: URL must start with ws:// or wss://, got '${r.url}'\n`);let i=mB(n);return i?fB(r,t.stdin,i):{stdout:``,stderr:`websocat: no WebSocket implementation available in this runtime
3292
+ `,exitCode:1}}function gB(){return x(`websocat`,async(e,t)=>hB(e,{stdin:N(t.stdin)}))}function _B(){return x(`__wf_progress`,async()=>({stdout:``,stderr:``,exitCode:0}))}const vB={commands:new Map,collisions:[]};async function yB(e,t){let n=rr(t);return e.scriptCatalog?e.scriptCatalog.getJshIndex(n):e.fs?or(e.fs,n):vB}async function bB(e){return e.scriptCatalog?e.scriptCatalog.getWorkflowCommands():e.fs?ti(e.fs):new Map}function xB(e,t,n,r,i,a,o){if(i.has(e)){let i=[`/usr/bin/${e}`];if((t||r)&&i.push(` (shadowed by built-in ${e})`),t){let e=n?[t,...n.shadowedPaths]:[t];for(let t of e)i.push(` (shadowed ${t})`)}return{lines:i,found:!0}}if(t){let e=[t];if(n)for(let t of n.shadowedPaths)e.push(` (shadowed ${t})`);return r&&e.push(` ${r.path} (workflow, shadowed by .jsh)`),{lines:e,found:!0}}return r?{lines:[`${r.path} (workflow)`],found:!0}:a.has(e)&&!o.has(e)?{lines:[`/usr/bin/${e}`],found:!0}:{lines:[],found:!1}}function SB(e={}){let t=e.scriptCatalog!==void 0||e.fs!==void 0?e:typeof e.walk==`function`&&typeof e.exists==`function`?{fs:e}:{};return x(`which`,async(e,n)=>{if(C(e))return{stdout:`which - locate a command
3289
3293
 
3290
3294
  Usage: which <command> [command...]
3291
3295
 
@@ -3296,9 +3300,9 @@ Prints the path of the given command(s).
3296
3300
 
3297
3301
  Exit code 0 if all commands found, 1 if any not found.
3298
3302
  `,stderr:``,exitCode:0};let r=S(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
3299
- `,exitCode:1};let i=n.getRegisteredCommands?.()??[],a=new Set(i),o=await sB(t,n.env.get(`PATH`)),s=o.commands,c=new Map(o.collisions.map(e=>[e.name,e])),l=await cB(t),u=typeof t.getStaticBuiltins==`function`?new Set(t.getStaticBuiltins()):a,d=new Set(t.getScriptRegisteredNames?.()??[]),f=[],p=!0;for(let e of r.positionals){let t=s.get(e),n=l.get(e),r=lB(e,t,c.get(e),n,u,a,d);f.push(...r.lines),r.found||(p=!1)}return{stdout:f.length>0?f.join(`
3303
+ `,exitCode:1};let i=n.getRegisteredCommands?.()??[],a=new Set(i),o=await yB(t,n.env.get(`PATH`)),s=o.commands,c=new Map(o.collisions.map(e=>[e.name,e])),l=await bB(t),u=typeof t.getStaticBuiltins==`function`?new Set(t.getStaticBuiltins()):a,d=new Set(t.getScriptRegisteredNames?.()??[]),f=[],p=!0;for(let e of r.positionals){let t=s.get(e),n=l.get(e),r=xB(e,t,c.get(e),n,u,a,d);f.push(...r.lines),r.found||(p=!1)}return{stdout:f.length>0?f.join(`
3300
3304
  `)+`
3301
- `:``,stderr:``,exitCode:+!p}})}const dB=`__slicc_workflows`,fB=String.raw`
3305
+ `:``,stderr:``,exitCode:+!p}})}const CB=`__slicc_workflows`,wB=String.raw`
3302
3306
  class WorkflowError extends Error {}
3303
3307
  class WorkflowDeterminismError extends WorkflowError {}
3304
3308
  class WorkflowAgentCapError extends WorkflowError {}
@@ -3411,40 +3415,40 @@ function log(message) {
3411
3415
  }
3412
3416
  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()); } };
3413
3417
  function workflow() { throw new WorkflowNestingUnsupportedError('nested workflow() unsupported in SP1'); }
3414
- `;function pB(){return`WF_RESULT_${globalThis.crypto?.randomUUID?.()??`${Date.now().toString(36)}${Math.random().toString(36).slice(2)}`}`}function mB(e){let t=vB(e);return t===null?{name:null,description:null}:{name:yB(t,`name`),description:yB(t,`description`)}}function hB(e){return e.replace(/\bexport\s+(const|let|var|function|async\s+function|class)\b/g,`$1`)}function gB(e){return`const __emit = console.log.bind(console);
3418
+ `;function TB(){return`WF_RESULT_${globalThis.crypto?.randomUUID?.()??`${Date.now().toString(36)}${Math.random().toString(36).slice(2)}`}`}function EB(e){let t=AB(e);return t===null?{name:null,description:null}:{name:jB(t,`name`),description:jB(t,`description`)}}function DB(e){return e.replace(/\bexport\s+(const|let|var|function|async\s+function|class)\b/g,`$1`)}function OB(e){return`const __emit = console.log.bind(console);
3415
3419
  const __stringify = JSON.stringify.bind(JSON);
3416
- const __WF = ${JSON.stringify(e.config)};\n${e.prelude}\nconst __r = await (async () => {\n${hB(e.body)}\n})();\n__emit(${JSON.stringify(e.sentinel)} + __stringify(__r ?? null));\n`}function _B(e,t){let n=e.split(`
3420
+ const __WF = ${JSON.stringify(e.config)};\n${e.prelude}\nconst __r = await (async () => {\n${DB(e.body)}\n})();\n__emit(${JSON.stringify(e.sentinel)} + __stringify(__r ?? null));\n`}function kB(e,t){let n=e.split(`
3417
3421
  `);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(`
3418
- `).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 vB(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 yB(e,t){let n=RegExp(`\\b${t}\\s*:\\s*(['"\\\`])((?:\\\\.|(?!\\1).)*)\\1`).exec(e);return n?n[2]:null}const bB=e(`workflow-command`),xB=`usage: workflow run <file.js> [--args <json>] [--budget <n>] [--concurrency <n>] [--wait]
3422
+ `).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 AB(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 jB(e,t){let n=RegExp(`\\b${t}\\s*:\\s*(['"\\\`])((?:\\\\.|(?!\\1).)*)\\1`).exec(e);return n?n[2]:null}const MB=e(`workflow-command`),NB=`usage: workflow run <file.js> [--args <json>] [--budget <n>] [--concurrency <n>] [--wait]
3419
3423
  workflow run --script '<inline js>' [...]
3420
3424
  workflow list
3421
3425
  workflow status <runId>
3422
3426
  workflow stop <runId>
3423
3427
  workflow save <runId> <name> [--force]
3424
3428
  Runs a Claude-Code-format dynamic workflow. Default is non-blocking (returns a run id);
3425
- pass --wait to block and print the full result.`,SB=new Set([`list`,`status`,`stop`,`save`]);function CB(){return globalThis[dB]}function wB(){let e=globalThis.navigator?.hardwareConcurrency??8;return Math.min(16,Math.max(8,e*4))}function TB(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 EB(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=wB(),n={budget:null,cap:Math.min(8,t)};for(let r=1;r<e.length;r++){let i=TB(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 DB(e={}){return x(`workflow`,async(t,n)=>{if(SB.has(t[0])&&C(t.slice(1)))return{stdout:xB+`
3426
- `,stderr:``,exitCode:0};if(t[0]===`list`||t[0]===`status`||t[0]===`stop`)return NB(t,n);if(t[0]===`save`)return MB(t,n,e);let r=EB(t);if(r.help)return{stdout:xB+`
3429
+ pass --wait to block and print the full result.`,PB=new Set([`list`,`status`,`stop`,`save`]);function FB(){return globalThis[CB]}function IB(){let e=globalThis.navigator?.hardwareConcurrency??8;return Math.min(16,Math.max(8,e*4))}function LB(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 RB(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=IB(),n={budget:null,cap:Math.min(8,t)};for(let r=1;r<e.length;r++){let i=LB(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 zB(e={}){return x(`workflow`,async(t,n)=>{if(PB.has(t[0])&&C(t.slice(1)))return{stdout:NB+`
3430
+ `,stderr:``,exitCode:0};if(t[0]===`list`||t[0]===`status`||t[0]===`stop`)return GB(t,n);if(t[0]===`save`)return WB(t,n,e);let r=RB(t);if(r.help)return{stdout:NB+`
3427
3431
  `,stderr:``,exitCode:0};if(r.error)return{stdout:``,stderr:r.error+`
3428
- `,exitCode:1};let i,a;if(r.script!==void 0)i=r.script,a=`<workflow>`;else{let e=n.fs.resolvePath(n.cwd,r.file);if(!await n.fs.exists(e))return{stdout:``,stderr:`workflow: file not found: ${r.file}\n`,exitCode:1};i=await n.fs.readFile(e),a=r.file}let o=mB(i);if(!o.name)return{stdout:``,stderr:`workflow: script must define a meta block with a name (description optional)
3429
- `,exitCode:1};let s=pB().slice(10,22),c=`/shared/workflow-runs/${s}/scratch/`;await n.fs.mkdir(c,{recursive:!0});let l=pB(),u=gB({prelude:fB,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?OB(u,a,l,o,n):kB({code:u,source:i,name:o.name,filename:a,sentinel:l,runId:s,ctx:n,options:e})})}async function OB(e,t,n,r,i){let a;try{a=await Lt(e,[`workflow`,t],i,void 0,{filename:t})}catch(e){return bB.error(`workflow run failed`,e),{stdout:``,stderr:`workflow: ${e instanceof Error?e.message:String(e)}\n`,exitCode:1}}return PB(r,a,n)}async function kB(e){let t=CB();if(!t)return{stdout:``,stderr:`workflow: run manager not available
3430
- `,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 AB=/^[a-z0-9][a-z0-9-]*$/,jB=`/workspace/.workflows`;async function MB(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]
3431
- `,exitCode:1};if(!AB.test(o))return{stdout:``,stderr:`workflow: invalid name '${o}' (use [a-z0-9][a-z0-9-]*)\n`,exitCode:1};let c=CB()?.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=`${jB}/${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(jB,{recursive:!0}),await t.fs.writeFile(l,c.source);try{await n.syncScriptCommands?.()}catch(e){bB.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 NB(e,t){let n=CB();if(e[0]===`list`){if(!n)return{stdout:``,stderr:`workflow: run manager not available
3432
+ `,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=EB(i);if(!o.name)return{stdout:``,stderr:`workflow: script must define a meta block with a name (description optional)
3433
+ `,exitCode:1};let s=TB().slice(10,22),c=`/shared/workflow-runs/${s}/scratch/`;await n.fs.mkdir(c,{recursive:!0});let l=TB(),u=OB({prelude:wB,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?BB(u,a,l,o,n):VB({code:u,source:i,name:o.name,filename:a,sentinel:l,runId:s,ctx:n,options:e})})}async function BB(e,t,n,r,i){let a;try{a=await Lt(e,[`workflow`,t],i,void 0,{filename:t})}catch(e){return MB.error(`workflow run failed`,e),{stdout:``,stderr:`workflow: ${e instanceof Error?e.message:String(e)}\n`,exitCode:1}}return KB(r,a,n)}async function VB(e){let t=FB();if(!t)return{stdout:``,stderr:`workflow: run manager not available
3434
+ `,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 HB=/^[a-z0-9][a-z0-9-]*$/,UB=`/workspace/.workflows`;async function WB(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]
3435
+ `,exitCode:1};if(!HB.test(o))return{stdout:``,stderr:`workflow: invalid name '${o}' (use [a-z0-9][a-z0-9-]*)\n`,exitCode:1};let c=FB()?.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=`${UB}/${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(UB,{recursive:!0}),await t.fs.writeFile(l,c.source);try{await n.syncScriptCommands?.()}catch(e){MB.warn(`workflow save: command re-sync failed; workflow saved, will register on next sync`,{name:o,error:e instanceof Error?e.message:String(e)})}return{stdout:`saved workflow '${o}' → ${l}\nrun it as '${o}' (or 'workflow run ${l}' if a built-in/.jsh shadows the name)\n`,stderr:``,exitCode:0}}async function GB(e,t){let n=FB();if(e[0]===`list`){if(!n)return{stdout:``,stderr:`workflow: run manager not available
3432
3436
  `,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(`
3433
3437
  `):`(no runs)`)+`
3434
3438
  `,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(`
3435
3439
  `)+`
3436
- `,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 PB(e,t,n){let{result:r,log:i,hadResult:a}=_B(t.stdout,n),o=e.name?`workflow: ${e.name}${e.description?` — `+e.description:``}\n`:``,s=i?FB(i)+`
3440
+ `,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 KB(e,t,n){let{result:r,log:i,hadResult:a}=kB(t.stdout,n),o=e.name?`workflow: ${e.name}${e.description?` — `+e.description:``}\n`:``,s=i?qB(i)+`
3437
3441
  `:``;return t.exitCode!==0||!a?{stdout:o+s,stderr:t.stderr||(a?``:`workflow: script produced no result
3438
3442
  `),exitCode:t.exitCode||1}:{stdout:o+s+(typeof r==`string`?r:JSON.stringify(r))+`
3439
- `,stderr:t.stderr,exitCode:0}}function FB(e){return e.split(`
3443
+ `,stderr:t.stderr,exitCode:0}}function qB(e){return e.split(`
3440
3444
  `).map(e=>e.replace(/^WFPHASE/,`▸ `).replace(/^WFLOG/,`· `)).join(`
3441
- `)}function IB(e){return{stdout:``,stderr:`xxd: ${e}\n`,exitCode:1}}function LB(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 RB(e,t){let n=e.toString(16).padStart(2,`0`);return t?n.toUpperCase():n}function zB(e){let t=``;for(let n=0;n<e.length;n++)t+=String.fromCharCode(e[n]);return t}function BB(e){return e.replace(/[^0-9a-zA-Z]/g,`_`)}function VB(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?RB(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(`
3445
+ `)}function JB(e){return{stdout:``,stderr:`xxd: ${e}\n`,exitCode:1}}function YB(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 XB(e,t){let n=e.toString(16).padStart(2,`0`);return t?n.toUpperCase():n}function ZB(e){let t=``;for(let n=0;n<e.length;n++)t+=String.fromCharCode(e[n]);return t}function QB(e){return e.replace(/[^0-9a-zA-Z]/g,`_`)}function $B(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?XB(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(`
3442
3446
  `)+`
3443
- `:``}function HB(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+=RB(e[i+r],n);r+=a+`
3444
- `}return r}function UB(e,t,n,r){let i=Array.from(e,e=>`0x${RB(e,n)}`),a=[];for(let e=0;e<i.length;e+=t)a.push(` `+i.slice(e,e+t).join(`, `));let o=a.join(`,
3447
+ `:``}function eV(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+=XB(e[i+r],n);r+=a+`
3448
+ `}return r}function tV(e,t,n,r){let i=Array.from(e,e=>`0x${XB(e,n)}`),a=[];for(let e=0;e<i.length;e+=t)a.push(` `+i.slice(e,e+t).join(`, `));let o=a.join(`,
3445
3449
  `);return r===null?i.length?o+`
3446
- `:``:`unsigned char ${r}[] = {\n${o}\n};\nunsigned int ${r}_len = ${e.length};\n`}function WB(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 GB(e){let t=[],n=0;for(let r of e.split(`
3447
- `)){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 KB={"-u":`upper`,"-p":`plain`,"-ps":`plain`,"-postscript":`plain`,"-i":`include`,"-include":`include`,"-r":`revert`,"-revert":`revert`},qB=[{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 JB(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=KB[r];if(i){t[i]=!0;continue}let a=qB.find(e=>e.exact.includes(r)||e.attached.test(r));if(a){t[a.key]=LB(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 YB(e){return e.includes(`-h`)||e.includes(`--help`)||e.includes(`-help`)}async function XB(e,t,n){if(!n&&t)return e.fs.readFileBuffer(e.fs.resolvePath(e.cwd,t));let r=Qr(e.stdin),i=new Uint8Array(r.length);for(let e=0;e<r.length;e++)i[e]=r.charCodeAt(e)&255;return i}function ZB(e,t,n,r,i){let a=e.cols&&e.cols>0?e.cols:e.plain?30:e.include?12:16;return e.plain?HB(t,a,e.upper):e.include?UB(t,a,e.upper,i?null:BB(r??``)):VB(t,a,e.group!=null&&e.group>=0?e.group:2,e.upper,n)}function QB(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 $B(){return x(`xxd`,async(e,t)=>{if(YB(e))return{stdout:`usage: xxd [options] [infile [outfile]]
3450
+ `:``:`unsigned char ${r}[] = {\n${o}\n};\nunsigned int ${r}_len = ${e.length};\n`}function nV(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 rV(e){let t=[],n=0;for(let r of e.split(`
3451
+ `)){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 iV={"-u":`upper`,"-p":`plain`,"-ps":`plain`,"-postscript":`plain`,"-i":`include`,"-include":`include`,"-r":`revert`,"-revert":`revert`},aV=[{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 oV(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=iV[r];if(i){t[i]=!0;continue}let a=aV.find(e=>e.exact.includes(r)||e.attached.test(r));if(a){t[a.key]=YB(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 sV(e){return e.includes(`-h`)||e.includes(`--help`)||e.includes(`-help`)}async function cV(e,t,n){if(!n&&t)return e.fs.readFileBuffer(e.fs.resolvePath(e.cwd,t));let r=Qr(e.stdin),i=new Uint8Array(r.length);for(let e=0;e<r.length;e++)i[e]=r.charCodeAt(e)&255;return i}function lV(e,t,n,r,i){let a=e.cols&&e.cols>0?e.cols:e.plain?30:e.include?12:16;return e.plain?eV(t,a,e.upper):e.include?tV(t,a,e.upper,i?null:QB(r??``)):$B(t,a,e.group!=null&&e.group>=0?e.group:2,e.upper,n)}function uV(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 dV(){return x(`xxd`,async(e,t)=>{if(sV(e))return{stdout:`usage: xxd [options] [infile [outfile]]
3448
3452
  -c cols number of octets per line (default 16; 30 for -p; 12 for -i)
3449
3453
  -g bytes number of octets per group (default 2; 0 disables grouping)
3450
3454
  -l len stop after len octets
@@ -3454,8 +3458,8 @@ pass --wait to block and print the full result.`,SB=new Set([`list`,`status`,`st
3454
3458
  -i output in C include style
3455
3459
  -r reverse: convert a hex dump back to binary (-r -p for plain)
3456
3460
  -h show this help
3457
- `,stderr:``,exitCode:0};let n;try{n=JB(e)}catch(e){return IB(e.message)}let r=n.positional[0],i=n.positional[1],a=!r||r===`-`,o;try{o=await XB(t,r,a)}catch{return IB(`${r}: No such file or directory`)}if(n.revert){let e=zB(o),r=n.plain?WB(e):GB(e);return i?(await t.fs.writeFile(t.fs.resolvePath(t.cwd,i),r),{stdout:``,stderr:``,exitCode:0}):{stdout:zB(r),stderr:``,exitCode:0}}let{data:s,base:c}=QB(n,o),l=ZB(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 eV(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=hr(t,o),s=n?`${n}/${o}`:o;a+=await eV(e,i,s,r)}return a}function tV(){return{stdout:`usage: zip [-r] <archive.zip> <path> [path...]
3458
- `,stderr:``,exitCode:0}}function nV(){return x(`zip`,async(e,t)=>{if(e.length===0||e.includes(`--help`)||e.includes(`-h`))return tV();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
3459
- `,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(/^\.\//,``))||gr(r);if(i.isDirectory&&!n)return{stdout:``,stderr:`zip: ${e} is a directory (use -r)\n`,exitCode:1};s+=await eV(t,r,a,o)}if(s===0)return{stdout:``,stderr:`zip: nothing to do
3460
- `,exitCode:1};let c=Ct(o);return await t.fs.writeFile(i,c),{stdout:`created ${i} (${s} file(s))\n`,stderr:``,exitCode:0}})}function rV(e){return{setEnv:e.setEnv,unsetEnv:e.unsetEnv,broker:e.sudoCommand?.broker}}function iV(e){let{fs:t,fetch:n}=e;if(!t||!n)return[];let r={fs:t,fetch:n,scriptCatalog:e.scriptCatalog,syncScriptCommands:e.syncScriptCommands};return[PD(`ipk`,r),PD(`npm`,r),PD(`i`,r),_O(`ipx`,{fs:t,fetch:n}),_O(`npx`,{fs:t,fetch:n}),Hy(`di`,{fs:t,fetch:n}),Hy(`uv`,{fs:t,fetch:n}),PL({fs:t,fetch:n})]}function aV(e={}){let t=[RT({getJshCommands:e.getJshCommands,getWorkflowCommands:e.getWorkflowCommands}),le(),DF(),KP(),zP(e.browserAPI,e.fs),Dj(e.browserAPI),iy(e.browserAPI),zE(e),nV(),uL(),nI(),PF(),VF(),RF(),$_(),$B(),xF(`sqlite3`),xF(`sqllite`),yI(),zI(),ix(),F_(),WA({buildProcessConfig:e.buildProcessConfig}),WA({buildProcessConfig:e.buildProcessConfig},`jsh`),zM(`python3`,{buildProcessConfig:e.buildProcessConfig}),zM(`python`,{buildProcessConfig:e.buildProcessConfig}),...iV(e),...e.fs?[uS({fs:e.fs})]:[],...e.fs?[nA({fs:e.fs})]:[],...e.fetch?[GT({fetch:e.fetch})]:[],Zx(),Qx(),yz(e.webhook),iB(),ry(e.crontask),lk({fs:e.fs,scriptCatalog:e.scriptCatalog}),qj({fs:e.fs,fetch:e.fetch}),lS(),fF(),Oj(),kj(`pdftk`),kj(`pdf`),I_(`biscotto`),I_(`biscotti`),zj(`pdftoppm`),zj(`pdftocairo`),Bj(`pdftotext`),Vv(`convert`),Vv(`magick`),uB({fs:e.fs,scriptCatalog:e.scriptCatalog,getStaticBuiltins:e.getStaticBuiltins,getScriptRegisteredNames:e.getScriptRegisteredNames}),UI(),aL(),FE(),IE(),oL(),rA(),UM(),rk(),kb(),aj(),ij(),ek(),uP(rV(e)),nN({fs:e.fs}),ON(),X_(),Z_(),Q_(`xclip`),Q_(`xsel`),DN(),OS(),sg(),cg(),AA(e.fs),tt(),YA(),Og({getParentJid:e.getParentJid}),Lb(),hM({processManager:e.processManager}),YL({processManager:e.processManager}),bO({processManager:e.processManager}),vO({processManager:e.processManager,scriptCatalog:e.scriptCatalog}),...jg(),tA(),KO(),bR(),_E(),zx(),IR({processManager:e.processManager}),nv({processManager:e.processManager,browser:e.browserAPI,sudoBroker:e.sudoCommand?.broker}),Xx(),U_({registry:e.cherryRuntimeRegistry}),dy(),vy({fs:e.fs}),yy({fs:e.fs}),kF(e.sudoCommand),DB({getParentJid:e.getParentJid,syncScriptCommands:e.syncScriptCommands}),aB(),GP()];return e.fs&&(Hj(),t.push(...Jn.map(t=>FT(t,e.browserAPI,e.fs)))),t}let oV=null;function sV(e){oV=e}function cV(e){oV?.(e)}var lV=Ht();const uV=Reflect.get(Ye,`DefenseInDepthBox`);function dV(e){return(typeof e==`string`?e:e?.encoding)??`utf8`}function fV(e,t){if(typeof e!=`string`)return e;let n=dV(t);if(n===`binary`||n===`latin1`){let t=ue(e);if(t)return t}return lV.Buffer.from(e,n)}var pV=class{vfs;registeredCommandsFn=null;listingStats=new Map;listingStatsMax;listingStatsTtlMs;constructor(e,t){this.vfs=e,this.listingStatsMax=Math.max(1,t?.listingStatsMax??2e4),this.listingStatsTtlMs=t?.listingStatsTtlMs??1e3}get listingStatsSize(){return this.listingStats.size}primeListingStats(e,t){let n=Date.now();if(t.length>this.listingStatsMax){this.listingStats.clear();return}this.sweepExpiredListingStats(n),this.listingStats.size+t.length>this.listingStatsMax&&this.listingStats.clear();let r=e===`/`?`/`:`${e}/`;for(let e of t){let t=Pe(e),i=`${r}${e.name}`;this.listingStats.delete(i),t&&this.listingStats.set(i,{stats:t,at:n})}}sweepExpiredListingStats(e){for(let[t,n]of this.listingStats){if(e-n.at<=this.listingStatsTtlMs)break;this.listingStats.delete(t)}}primedStats(e){let t=this.listingStats.get(e);if(t){if(Date.now()-t.at>this.listingStatsTtlMs){this.listingStats.delete(e);return}return t.stats}}dropListingStats(){this.listingStats.clear()}setRegisteredCommandsFn(e){this.registeredCommandsFn=e}getVirtualBinCommands(){return this.registeredCommandsFn?.()??[]}virtualUsrStat(e){if(e===`/usr`||e===`/usr/bin`)return{isFile:!1,isDirectory:!0,isSymbolicLink:!1,mode:493,size:0,mtime:new Date(0)};if(e.startsWith(`/usr/bin/`)){let t=e.slice(9);if(t.length>0&&!t.includes(`/`)&&this.getVirtualBinCommands().includes(t))return{isFile:!0,isDirectory:!1,isSymbolicLink:!1,mode:493,size:0,mtime:new Date(0)}}return null}canWrite(e){let t=this.vfs;return typeof t.canWrite!=`function`||t.canWrite(e)}listMountPoints(){let e=this.vfs;return typeof e.listMountPoints==`function`?e.listMountPoints():[]}trusted(e){let t=uV?.runTrustedAsync;return t?t(e):Promise.resolve().then(e)}async readFile(e,t){return this.trusted(async()=>{let n=y(e),r=await this.vfs.readFile(n,{encoding:`binary`}),i=r instanceof Uint8Array?r:new TextEncoder().encode(r),a=dV(t),o=lV.Buffer.from(i.buffer,i.byteOffset,i.byteLength).toString(a);return a!==`hex`&&a!==`base64`&&ae(o,i),o})}async readFileBuffer(e){return this.trusted(async()=>{let t=y(e),n=await this.vfs.readFile(t,{encoding:`binary`});return n instanceof Uint8Array?n:new TextEncoder().encode(n)})}async readFileBytes(e){let t=await this.readFileBuffer(e);return lV.Buffer.from(t.buffer,t.byteOffset,t.byteLength).toString(`latin1`)}async getNativeFile(e){return this.trusted(()=>this.vfs.getNativeFile(y(e)))}async readFileRange(e,t,n){return this.trusted(()=>this.vfs.readFileRange(y(e),t,n))}async writeFile(e,t,n){return this.dropListingStats(),this.trusted(async()=>{let r=y(e);await this.vfs.writeFile(r,fV(t,n))})}async appendFile(e,t,n){return this.dropListingStats(),this.trusted(()=>this.vfs.appendFile(y(e),fV(t,n)))}async exists(e){return this.trusted(async()=>{let t=y(e);return this.virtualUsrStat(t)?!0:this.vfs.exists(t)})}async stat(e){return this.trusted(async()=>{let t=y(e),n=this.virtualUsrStat(t);if(n)return n;let r=this.vfs.statSync(t);if(r)return{isFile:r.type===`file`,isDirectory:r.type===`directory`,isSymbolicLink:!!r.isSymlink,mode:r.mode??(r.type===`directory`?493:420),size:r.size,mtime:new Date(r.mtime),identity:r.identity,dev:r.dev,ino:r.identity===void 0?void 0:r.ino};let i=this.primedStats(t)??await this.vfs.stat(t);return{isFile:i.type===`file`,isDirectory:i.type===`directory`,isSymbolicLink:!!i.isSymlink,mode:i.mode??(i.type===`directory`?493:420),size:i.size,mtime:new Date(i.mtime),identity:i.identity,dev:i.dev,ino:i.identity===void 0?void 0:i.ino}})}async lstat(e){return this.trusted(async()=>{let t=y(e),n=this.virtualUsrStat(t);if(n)return n;let r=this.vfs.lstatSync(t);if(r)return{isFile:r.type===`file`,isDirectory:r.type===`directory`,isSymbolicLink:r.type===`symlink`,mode:r.mode??(r.type===`directory`?493:r.type===`symlink`?511:420),size:r.size,mtime:new Date(r.mtime),identity:r.identity,dev:r.dev,ino:r.identity===void 0?void 0:r.ino};let i=this.primedStats(t)??await this.vfs.lstat(t);return{isFile:i.type===`file`,isDirectory:i.type===`directory`,isSymbolicLink:i.type===`symlink`,mode:i.mode??(i.type===`directory`?493:i.type===`symlink`?511:420),size:i.size,mtime:new Date(i.mtime),identity:i.identity,dev:i.dev,ino:i.identity===void 0?void 0:i.ino}})}async mkdir(e,t){return this.dropListingStats(),this.trusted(async()=>{await this.vfs.mkdir(y(e),t)})}async readdir(e){return this.trusted(async()=>{let t=y(e);if(t===`/usr`)return[`bin`];if(t===`/usr/bin`)return this.getVirtualBinCommands().slice().sort();let n=this.vfs.readDirSync(t);if(n!==null)return n.map(e=>e.name);let r=await this.vfs.readDir(t,{includeStats:!0});return this.primeListingStats(t,r),r.map(e=>e.name)})}async readdirWithFileTypes(e){return this.trusted(async()=>{let t=y(e);if(t===`/usr`)return[{name:`bin`,isFile:!1,isDirectory:!0,isSymbolicLink:!1}];if(t===`/usr/bin`)return this.getVirtualBinCommands().slice().sort().map(e=>({name:e,isFile:!0,isDirectory:!1,isSymbolicLink:!1}));let n=this.vfs.readDirSync(t);if(n!==null)return this.mapFastEntriesToDirents(n);let r=await this.vfs.readDir(t,{includeStats:!0});return this.primeListingStats(t,r),this.mapAsyncEntriesToDirents(r)})}mapFastEntriesToDirents(e){return e.map(e=>this.entryToDirent(e))}mapAsyncEntriesToDirents(e){return e.map(e=>this.entryToDirent(e))}entryToDirent(e){return e.type===`symlink`?{name:e.name,isFile:!1,isDirectory:!1,isSymbolicLink:!0}:{name:e.name,isFile:e.type===`file`,isDirectory:e.type===`directory`,isSymbolicLink:!1}}async rm(e,t){return this.dropListingStats(),this.trusted(async()=>{await this.vfs.rm(y(e),t)})}async cp(e,t,n){return this.dropListingStats(),this.trusted(async()=>{let r=y(e),i=y(t);if((await this.vfs.stat(r)).type===`directory`){if(!n?.recursive)throw new Fe(`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=b(e,r.name),i=b(t,r.name);r.type===`directory`?await this.cpDir(n,i):await this.vfs.copyFile(n,i)}}async mv(e,t){return this.dropListingStats(),this.trusted(async()=>{await this.vfs.rename(y(e),y(t))})}async rename(e,t){return this.mv(e,t)}resolvePath(e,t){return t.startsWith(`/`)?y(t):y(b(e,t))}getAllPaths(){return[]}async chmod(e,t){return this.dropListingStats(),this.trusted(()=>this.vfs.chmod(y(e),t))}async symlink(e,t){return this.dropListingStats(),this.trusted(async()=>{await this.vfs.symlink(e,y(t))})}async link(e,t){throw Error(`Hard links not supported in VirtualFS`)}async readlink(e){return this.trusted(async()=>this.vfs.readlink(y(e)))}async realpath(e){return this.trusted(async()=>this.vfs.realpath(y(e)))}async utimes(e,t,n){return this.dropListingStats(),this.trusted(()=>this.vfs.utimes(y(e),t,n))}invalidatePaths(e){this.dropListingStats();let t=this.vfs;t.invalidatePaths&&t.invalidatePaths(e)}};function mV(e){return e&&typeof e.getWatcher==`function`?e.getWatcher?.()??null:e&&typeof e.getUnderlyingFS==`function`?mV(e.getUnderlyingFS?.()):null}async function hV(e){let t=c(`github`);if(t){if(e?.force){await t.onSilentRenew?.();return}await t.getValidAccessToken?.()}}const gV=e(`almost-bash-shell`),_V=`__SLICC_RUN_PID`,vV=`__SLICC_OUTPUT_TEE__`;function yV(e){let t=e?.get(_V);if(t===void 0)return;let n=Number.parseInt(t,10);return Number.isSafeInteger(n)&&n>0?n:void 0}function bV(e){if(!(_V in e)&&!(vV in e)&&!(`__SLICC_SUDO_REASON`in e))return{...e};let{[_V]:t,[vV]:n,[Wp]:r,...i}=e;return i}var xV=class e{options;bash;vfsAdapter;gitCommands;mountCommands;lastEnv;cwd;builtinCommandNames;staticBuiltinNames;allowedCommands;scriptCatalog;initialJshSync=null;ownsScriptCatalog;registeredJshCommands=new Map;registeredWorkflowCommands=new Set;jshSyncInflight=null;jshSyncDirty=!1;pendingCommandGrants=[];pendingSudoBypasses=new Map;pendingEnvWrites=new Map;activeShellPid;progress;activeRunSignal;scriptRun=null;scriptRunsActive=0;registryNames=new Set;outputTees=new Map;nextOutputTeeId=0;resolveJshProcessConfig=e=>this.buildJshProcessConfig(yV(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:np,PATH:ir,USER:`user`,SHELL:`/bin/bash`,TMPDIR:`/tmp`,PWD:t,...e.env}}buildSupplementalCommands(e,t){return aV({onMediaPreview:async e=>this.renderMediaPreview(e),getJshCommands:()=>this.getJshCommandNames(),getWorkflowCommands:()=>this.getWorkflowCommandNames(),syncScriptCommands:()=>this.syncJshCommands(),getStaticBuiltins:()=>[...this.staticBuiltinNames],getScriptRegisteredNames:()=>[...this.registeredJshCommands.keys(),...this.registeredWorkflowCommands],fs:e.fs,fetch:t,scriptCatalog:this.scriptCatalog,browserAPI:e.browserAPI,webhook:e.webhook,crontask:e.crontask,getParentJid:e.getParentJid,buildProcessConfig:this.resolveJshProcessConfig,processManager:e.processManager,sudoCommand:e.sudo?{broker:e.sudo.broker,persistGrant:async e=>{this.pendingCommandGrants.push(e)},suppressNextGate:e=>this.registerSudoBypass(e)}:void 0,setEnv:(e,t)=>{this.pendingEnvWrites.set(e,t),this.lastEnv[e]=t},unsetEnv:e=>{this.pendingEnvWrites.set(e,null),delete this.lastEnv[e]}})}constructor(t){this.options=t,this.vfsAdapter=new pV(t.fs),this.progress=new op({scrubLabel:t.scrubProgressLabel}),this.allowedCommands=e.buildAllowedCommandSet(t);let n=t.cwd??`/`,r=e.buildInitialEnv(t,n);this.gitCommands=new $f({fs:t.fs,authorName:r.GIT_AUTHOR_NAME??`User`,authorEmail:r.GIT_AUTHOR_EMAIL??`user@example.com`,ensureFreshGithubToken:hV}),this.mountCommands=new Es({fs:t.fs,isScoop:t.isScoop,acquireLocalMountViaToolUI:Zp});let i=t.jshDiscoveryFs??t.fs,a=t.bshDiscoveryFs??t.fs,o=mV(i)??mV(a);this.scriptCatalog=t.scriptCatalog??new ri({jshFs:i,bshFs:a,watcher:o}),this.ownsScriptCatalog=!t.scriptCatalog,o&&o.watch(`/`,e=>e.endsWith(`.jsh`)||e.endsWith(`.workflow.js`),()=>{this.syncJshCommands().catch(()=>void 0)});let s=this.createGitCustomCommand(),c=ie({progress:dp(this.progress)}),l=this.buildSupplementalCommands(t,c),u=[s,this.createMountCustomCommand(),this.createUmountCustomCommand(),Gm(t.fs),Hh(t.fs,c,t.browserAPI),...l].filter(e=>this.isCommandAllowed(e.name)),d=[...Ze(),...Xe()],f=this.allowedCommands?d.filter(e=>this.isCommandAllowed(e)):void 0;if(this.bash=new Qe({fs:this.vfsAdapter,cwd:n,env:{},fetch:c,commands:f,customCommands:u,sleep:Mp(this.progress,{isAborted:()=>this.activeRunSignal?.aborted??!1}),executionLimitProfile:t.executionLimitProfile,executionLimits:tp(t.isScoop?.()??!1,t.executionLimits)}),this.bash.registerTransformPlugin(am),this.allowedCommands!==null){let e=this.bash;for(let t of Xe())this.isCommandAllowed(t)||e.commands.delete(t)}{let e=this.bash;for(let[t,n]of e.commands)e.commands.set(t,this.wrapCommandForDispatch(n));this.registryNames=new Set(e.commands.keys())}let p=u.map(e=>e.name),m=f??[...Ze(),...Xe()];this.builtinCommandNames=new Set([...m,...p]),this.staticBuiltinNames=new Set(this.builtinCommandNames),this.vfsAdapter.setRegisteredCommandsFn(()=>[...this.builtinCommandNames]),this.lastEnv={...r},this.cwd=n,this.startInitialJshSync()}getBash(){return this.bash}getCwd(){return this.cwd}getScriptCatalog(){return this.scriptCatalog}getEnv(){return{...this.lastEnv}}setMaskedEnvVar(e,t){this.pendingEnvWrites.set(e,t),this.lastEnv[e]=t}applySessionOverrides(e){e.cwd!==void 0&&(this.cwd=e.cwd,this.lastEnv.PWD=e.cwd),e.env&&Object.assign(this.lastEnv,e.env)}async getJshCommandNames(){return[...(await this.getFilteredJshCommands()).keys()]}async syncJshCommands(){return this.jshSyncInflight===null?(this.jshSyncInflight=this.doSyncJshCommands(),this.jshSyncInflight):(this.jshSyncDirty=!0,this.jshSyncInflight)}async executeCommand(e,t,n,r=``,i){let a=this.activeShellPid;n!==void 0&&(this.activeShellPid=n);let o=i?.onOutput?`tee-${this.nextOutputTeeId+=1}`:void 0;o&&i?.onOutput&&this.outputTees.set(o,i.onOutput);try{let i=await this.runCommand(e,t,n,r,o);return{stdout:i.stdout,stderr:i.stderr,exitCode:i.exitCode}}finally{this.activeShellPid=a,o&&this.outputTees.delete(o)}}async executeScriptFile(e,t=[]){return Nt(e,t,{fs:this.vfsAdapter,cwd:this.cwd,env:new Map(Object.entries(this.lastEnv)),stdin:``,exec:(e,t)=>this.bash.exec(e,{env:t?.env??this.lastEnv,cwd:t?.cwd??this.cwd,...t?.env===void 0?{}:{replaceEnv:!0}})},this.buildJshProcessConfig())}dispose(){this.ownsScriptCatalog&&this.scriptCatalog.dispose()}async renderMediaPreview(e){throw Error(`terminal preview is unavailable in headless mode`)}currentScanRoots(){return ar(this.lastEnv.PATH)}startInitialJshSync(){this.initialJshSync=this.initHomeAndProfile().then(()=>this.syncJshCommands()).catch(()=>void 0).finally(()=>{this.initialJshSync=null})}async initHomeAndProfile(){let e=this.options.fs;try{let t=this.options.env?.HOME??await rp(e);this.lastEnv.HOME=t,this.options.env?.USER||(this.lastEnv.USER=ip(t));let n=`${t.replace(/\/+$/,``)}/.profile`;if(!await e.exists(n).catch(()=>!1))return;let r=await this.bash.exec(`. "$HOME/.profile"`,{env:this.lastEnv,cwd:this.cwd});if(r.env){let{PWD:e,...t}=r.env;this.lastEnv={...t,PWD:this.lastEnv.PWD??this.cwd}}}catch(e){gV.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){cV(e.trim().split(/\s+/)[0]||`unknown`),ne(),await this.waitForInitialJshSync(t);let a=Kp(e),o={env:{...this.lastEnv,...n===void 0?{}:{[_V]:String(n)},...i===void 0?{}:{[vV]:i},...a?{[Wp]:a}:{}},cwd:this.cwd,signal:t,...r===``?{}:{stdin:r,stdinKind:`bytes`}},s=this.lastEnv.PATH;this.activeRunSignal=t;let c=this.beginScriptRun(e),l;try{l=await this.bash.exec(e,o)}finally{this.activeRunSignal===t&&(this.activeRunSignal=void 0),this.endScriptRun(c)}if(await this.flushPendingCommandGrants(),l.env&&(this.lastEnv=bV(l.env)),l.env&&this.lastEnv.PATH!==s&&await this.syncJshCommands().catch(()=>void 0),this.pendingEnvWrites.size>0){for(let[e,t]of this.pendingEnvWrites)t===null?delete this.lastEnv[e]:this.lastEnv[e]=t;this.pendingEnvWrites.clear()}if(l.env?.PWD&&(this.cwd=l.env.PWD),l.exitCode===127){let t=await this.tryJshFallback(e,n);if(t)return this.syncJshCommands().catch(()=>void 0),t}if(l.exitCode!==0&&l.stderr.includes(`Permission denied`)){let{withShebangExecHint:e}=await import(`./shebang-exec-hint-BISPom3l.js`);return e(l,this.cwd,this.vfsAdapter)}return l}isTransparentGatingEnabled(){let e=this.options.sudo;return!!e&&e.transparentGating!==!1}wrapCommandForDispatch(e){let t=this.wrapCommandForSudo(e),n=e.name===`timeout`?Ip(t,this.progress):Rp(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(vV),s=o?a.get(o):void 0;s&&(t.writeStdout=s);try{let r=await n.execute(e,t);return i(t.env,r),r}finally{r()}}}}teeCommandOutput(e,t){let n=e?.get(vV);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=Dp(this.bash.transform(e).ast,this.registryNames)}catch{t={totalSteps:null}}return this.scriptRun=new kp(t,this.progress,Op(e)),this.scriptRun}endScriptRun(e){this.scriptRunsActive=Math.max(0,this.scriptRunsActive-1),e&&(e.end(),this.scriptRun===e&&(this.scriptRun=null))}wrapCommandForSudo(e){if(!this.isTransparentGatingEnabled())return e;let t=(t,n)=>this.gateCommandDispatch(e.name,t,n);return{...e,async execute(n,r){return await t(n,r.env?.get(Wp))||e.execute(n,r)}}}async gateCommandDispatch(e,t,n){let r=this.options.sudo;if(!r)return null;let i=Bp(e,t);if(this.consumeSudoBypass(i))return null;let a=r.getPolicy();if(!a)return null;let o=await Hp(i,{policy:a,broker:r.broker,persistGrant:async e=>{this.pendingCommandGrants.push(e)},defaultDisposition:r.defaultDisposition,...n?{reason:n}:{}});return o.allowed?null:{stdout:``,stderr:`${o.message}\n`,exitCode:1}}registerSudoBypass(e){let t=e.trim();t&&this.pendingSudoBypasses.set(t,(this.pendingSudoBypasses.get(t)??0)+1)}consumeSudoBypass(e){let t=this.pendingSudoBypasses.get(e);return t?(t===1?this.pendingSudoBypasses.delete(e):this.pendingSudoBypasses.set(e,t-1),!0):!1}async flushPendingCommandGrants(){if(this.pendingCommandGrants.length===0)return;let e=this.pendingCommandGrants;this.pendingCommandGrants=[];for(let t of e)try{await this.persistCommandGrant(t)}catch{}}async persistCommandGrant(e){let t=this.options.sudo?.persistCommandGrant;if(t){await t(e);return}let n=rt(e);if(!n)return;let r=`${at}/granted`,i=this.options.fs,a=``;try{await i.exists(r)&&(a=await i.readFile(r))}catch(e){if(!(e instanceof Fe&&e.code===`ENOENT`))throw e}let o=a&&!a.endsWith(`
3461
- `)?`${a}\n`:a;await i.writeFile(r,`${o}NOPASSWD Cmnd ${n}\n`)}isCommandAllowed(e){return this.allowedCommands===null||this.allowedCommands.has(e)}async doSyncJshCommands(){try{let e=await this.scriptCatalog.getJshIndex(this.currentScanRoots()),t=e.commands;for(let t of e.collisions)gV.warn(`jsh command '${t.name}' is provided by more than one skill; using ${t.winnerPath} (${t.reason}), shadowed ${t.shadowedPaths.join(`, `)}`);let n=await this.getFilteredWorkflowCommands();for(let[e,n]of t)this.isCommandAllowed(e)&&(this.builtinCommandNames.has(e)&&!this.registeredJshCommands.has(e)||this.registeredJshCommands.get(e)!==n&&(this.bash.registerCommand(this.wrapCommandForDispatch(this.makeScriptCommand(e))),this.registeredJshCommands.set(e,n),this.builtinCommandNames.add(e)));for(let e of n.keys())if(!this.registeredWorkflowCommands.has(e)){if(this.registeredJshCommands.has(e)){this.registeredWorkflowCommands.add(e);continue}this.builtinCommandNames.has(e)||(this.bash.registerCommand(this.wrapCommandForDispatch(this.makeScriptCommand(e))),this.registeredWorkflowCommands.add(e),this.builtinCommandNames.add(e))}}finally{this.jshSyncInflight=null,this.jshSyncDirty&&(this.jshSyncDirty=!1,this.syncJshCommands().catch(()=>void 0))}}makeScriptCommand(e){let t=this.scriptCatalog,n=this.options.jshDiscoveryFs??this.options.fs,r=e,i=async(e,i)=>{let a=i.exec??((e,t)=>this.bash.exec(e,{env:t?.env??Object.fromEntries(i.env),cwd:t?.cwd??i.cwd,args:t?.args,...t?.env===void 0?{}:{replaceEnv:!0}})),o=(await t.getJshCommands(this.currentScanRoots())).get(r);if(o){let t;try{let e=await n.readFile(o,{encoding:`utf-8`});t=typeof e==`string`?e:new TextDecoder().decode(e)}catch{return{stdout:``,stderr:`jsh: cannot read script '${o}'\n`,exitCode:127}}return Lt(t,[`node`,o,...e],{fs:i.fs,cwd:i.cwd,env:i.env,stdin:i.stdin,exec:a},this.buildJshProcessConfig(yV(i.env)))}let s=(await t.getWorkflowCommands()).get(r);if(s){let t=ni(s.path,e);return a(t[0],{args:t.slice(1),cwd:i.cwd})}return{stdout:``,stderr:`${r}: command no longer exists\n`,exitCode:127}};return{name:e,trusted:!0,async execute(e,t){try{return await i(e,t)}catch(e){let t=e instanceof Error?e.message:String(e);return{stdout:``,stderr:`${r}: ${t}\n`,exitCode:1}}}}}createGitCustomCommand(){let e=this.gitCommands;return x(`git`,async(t,n)=>{let r=n.cwd,i=await e.execute(t,r,n.env,N(n.stdin));return{stdout:i.stdout,stderr:i.stderr,exitCode:i.exitCode}})}createMountCustomCommand(){let e=this.mountCommands;return x(`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 x(`umount`,async(t,n)=>{let r=n.cwd,i=await e.executeUmount(t,r);return{stdout:i.stdout,stderr:i.stderr,exitCode:i.exitCode}})}async getFilteredJshCommands(){let e=await this.scriptCatalog.getJshCommands(this.currentScanRoots()),t=new Map;for(let[n,r]of e)this.builtinCommandNames.has(n)||this.isCommandAllowed(n)&&t.set(n,r);return t}async getFilteredWorkflowCommands(){let e=await this.scriptCatalog.getWorkflowCommands(),t=new Map;for(let[n,r]of e)this.isCommandAllowed(n)&&t.set(n,r);return t}async getWorkflowCommandNames(){return[...(await this.getFilteredWorkflowCommands()).keys()]}async tryJshFallback(e,t){let n=e.trim(),r=n.indexOf(` `),i=r>=0?n.slice(0,r):n,a=r>=0?n.slice(r+1).trim():``,o=(await this.getFilteredJshCommands()).get(i);if(!o)return null;let s=a?ap(a):[],c=this.options.jshDiscoveryFs??this.options.fs,l;try{let e=await c.readFile(o,{encoding:`utf-8`});l=typeof e==`string`?e:new TextDecoder().decode(e)}catch{return{stdout:``,stderr:`jsh: cannot read script '${o}'\n`,exitCode:127,env:this.lastEnv}}let u=[`node`,o,...s],d=await Lt(l,u,{fs:this.vfsAdapter,cwd:this.cwd,env:new Map(Object.entries(this.lastEnv)),stdin:``,exec:(e,t)=>this.bash.exec(e,{env:t?.env??this.lastEnv,cwd:t?.cwd??this.cwd,...t?.env===void 0?{}:{replaceEnv:!0}})},this.buildJshProcessConfig(t));return{stdout:d.stdout,stderr:d.stderr,exitCode:d.exitCode,env:this.lastEnv}}buildJshProcessConfig(e){if(!(!this.options.processManager||!this.options.processOwner))return{processManager:this.options.processManager,owner:this.options.processOwner,getParentPid:()=>e??this.activeShellPid??this.options.getCurrentShellPid?.()}}};export{ua as S,To as _,_B as a,ya as b,np as c,as as d,ns as f,Po as g,Fo as h,pB as i,ps as l,$o as m,pV as n,dB as o,ts as p,sV as r,Up as s,xV as t,fs as u,ga as v,yo as x,ba as y};
3461
+ `,stderr:``,exitCode:0};let n;try{n=oV(e)}catch(e){return JB(e.message)}let r=n.positional[0],i=n.positional[1],a=!r||r===`-`,o;try{o=await cV(t,r,a)}catch{return JB(`${r}: No such file or directory`)}if(n.revert){let e=ZB(o),r=n.plain?nV(e):rV(e);return i?(await t.fs.writeFile(t.fs.resolvePath(t.cwd,i),r),{stdout:``,stderr:``,exitCode:0}):{stdout:ZB(r),stderr:``,exitCode:0}}let{data:s,base:c}=uV(n,o),l=lV(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 fV(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=hr(t,o),s=n?`${n}/${o}`:o;a+=await fV(e,i,s,r)}return a}function pV(){return{stdout:`usage: zip [-r] <archive.zip> <path> [path...]
3462
+ `,stderr:``,exitCode:0}}function mV(){return x(`zip`,async(e,t)=>{if(e.length===0||e.includes(`--help`)||e.includes(`-h`))return pV();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
3463
+ `,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(/^\.\//,``))||gr(r);if(i.isDirectory&&!n)return{stdout:``,stderr:`zip: ${e} is a directory (use -r)\n`,exitCode:1};s+=await fV(t,r,a,o)}if(s===0)return{stdout:``,stderr:`zip: nothing to do
3464
+ `,exitCode:1};let c=Ct(o);return await t.fs.writeFile(i,c),{stdout:`created ${i} (${s} file(s))\n`,stderr:``,exitCode:0}})}function hV(e){return{setEnv:e.setEnv,unsetEnv:e.unsetEnv,broker:e.sudoCommand?.broker}}function gV(e){let{fs:t,fetch:n}=e;if(!t||!n)return[];let r={fs:t,fetch:n,scriptCatalog:e.scriptCatalog,syncScriptCommands:e.syncScriptCommands};return[KD(`ipk`,r),KD(`npm`,r),KD(`i`,r),kO(`ipx`,{fs:t,fetch:n}),kO(`npx`,{fs:t,fetch:n}),eb(`di`,{fs:t,fetch:n}),eb(`uv`,{fs:t,fetch:n}),KL({fs:t,fetch:n})]}function _V(e={}){let t=[XT({getJshCommands:e.getJshCommands,getWorkflowCommands:e.getWorkflowCommands}),le(),zF(),iF(),ZP(e.browserAPI,e.fs),zj(e.browserAPI),gy(e.browserAPI),ZE(e),mV(),SL(),mI(),KF(),$F(),XF(),dv(),dV(),NF(`sqlite3`),NF(`sqllite`),jI(),ZI(),gx(),q_(),nj({buildProcessConfig:e.buildProcessConfig}),nj({buildProcessConfig:e.buildProcessConfig},`jsh`),ZM(`python3`,{buildProcessConfig:e.buildProcessConfig}),ZM(`python`,{buildProcessConfig:e.buildProcessConfig}),...gV(e),...e.fs?[SS({fs:e.fs})]:[],...e.fs?[mA({fs:e.fs})]:[],...e.fetch?[rE({fetch:e.fetch})]:[],lS(),uS(),jz(e.webhook),gB(),hy(e.crontask),xk({fs:e.fs,scriptCatalog:e.scriptCatalog}),aM({fs:e.fs,fetch:e.fetch}),xS(),wF(),Bj(),Vj(`pdftk`),Vj(`pdf`),J_(`biscotto`),J_(`biscotti`),Zj(`pdftoppm`),Zj(`pdftocairo`),Qj(`pdftotext`),$v(`convert`),$v(`magick`),SB({fs:e.fs,scriptCatalog:e.scriptCatalog,getStaticBuiltins:e.getStaticBuiltins,getScriptRegisteredNames:e.getScriptRegisteredNames}),tL(),_L(),qE(),JE(),vL(),hA(),tN(),hk(),Vb(),_j(),gj(),fk(),SP(hV(e)),mN({fs:e.fs}),BN(),cv(),lv(),uv(`xclip`),uv(`xsel`),zN(),BS(),yg(),bg(),HA(e.fs),tt(),sj(),Bg({getParentJid:e.getParentJid}),Yb(),DM({processManager:e.processManager}),sR({processManager:e.processManager}),MO({processManager:e.processManager}),AO({processManager:e.processManager,scriptCatalog:e.scriptCatalog}),...Ug(),pA(),ik(),MR(),kE(),Zx(),JR({processManager:e.processManager}),mv({processManager:e.processManager,browser:e.browserAPI,sudoBroker:e.sudoCommand?.broker}),cS(),tv({registry:e.cherryRuntimeRegistry}),Cy(),Ay({fs:e.fs}),jy({fs:e.fs}),VF(e.sudoCommand),zB({getParentJid:e.getParentJid,syncScriptCommands:e.syncScriptCommands}),_B(),rF()];return e.fs&&(eM(),t.push(...Jn.map(t=>qT(t,e.browserAPI,e.fs)))),t}let vV=null;function yV(e){vV=e}function bV(e){vV?.(e)}var xV=Ht();const SV=Reflect.get(Ye,`DefenseInDepthBox`);function CV(e){return(typeof e==`string`?e:e?.encoding)??`utf8`}function wV(e,t){if(typeof e!=`string`)return e;let n=CV(t);if(n===`binary`||n===`latin1`){let t=ue(e);if(t)return t}return xV.Buffer.from(e,n)}var TV=class{vfs;registeredCommandsFn=null;listingStats=new Map;listingStatsMax;listingStatsTtlMs;constructor(e,t){this.vfs=e,this.listingStatsMax=Math.max(1,t?.listingStatsMax??2e4),this.listingStatsTtlMs=t?.listingStatsTtlMs??1e3}get listingStatsSize(){return this.listingStats.size}primeListingStats(e,t){let n=Date.now();if(t.length>this.listingStatsMax){this.listingStats.clear();return}this.sweepExpiredListingStats(n),this.listingStats.size+t.length>this.listingStatsMax&&this.listingStats.clear();let r=e===`/`?`/`:`${e}/`;for(let e of t){let t=Pe(e),i=`${r}${e.name}`;this.listingStats.delete(i),t&&this.listingStats.set(i,{stats:t,at:n})}}sweepExpiredListingStats(e){for(let[t,n]of this.listingStats){if(e-n.at<=this.listingStatsTtlMs)break;this.listingStats.delete(t)}}primedStats(e){let t=this.listingStats.get(e);if(t){if(Date.now()-t.at>this.listingStatsTtlMs){this.listingStats.delete(e);return}return t.stats}}dropListingStats(){this.listingStats.clear()}setRegisteredCommandsFn(e){this.registeredCommandsFn=e}getVirtualBinCommands(){return this.registeredCommandsFn?.()??[]}virtualUsrStat(e){if(e===`/usr`||e===`/usr/bin`)return{isFile:!1,isDirectory:!0,isSymbolicLink:!1,mode:493,size:0,mtime:new Date(0)};if(e.startsWith(`/usr/bin/`)){let t=e.slice(9);if(t.length>0&&!t.includes(`/`)&&this.getVirtualBinCommands().includes(t))return{isFile:!0,isDirectory:!1,isSymbolicLink:!1,mode:493,size:0,mtime:new Date(0)}}return null}canWrite(e){let t=this.vfs;return typeof t.canWrite!=`function`||t.canWrite(e)}listMountPoints(){let e=this.vfs;return typeof e.listMountPoints==`function`?e.listMountPoints():[]}trusted(e){let t=SV?.runTrustedAsync;return t?t(e):Promise.resolve().then(e)}async readFile(e,t){return this.trusted(async()=>{let n=y(e),r=await this.vfs.readFile(n,{encoding:`binary`}),i=r instanceof Uint8Array?r:new TextEncoder().encode(r),a=CV(t),o=xV.Buffer.from(i.buffer,i.byteOffset,i.byteLength).toString(a);return a!==`hex`&&a!==`base64`&&ae(o,i),o})}async readFileBuffer(e){return this.trusted(async()=>{let t=y(e),n=await this.vfs.readFile(t,{encoding:`binary`});return n instanceof Uint8Array?n:new TextEncoder().encode(n)})}async readFileBytes(e){let t=await this.readFileBuffer(e);return xV.Buffer.from(t.buffer,t.byteOffset,t.byteLength).toString(`latin1`)}async getNativeFile(e){return this.trusted(()=>this.vfs.getNativeFile(y(e)))}async readFileRange(e,t,n){return this.trusted(()=>this.vfs.readFileRange(y(e),t,n))}async writeFile(e,t,n){return this.dropListingStats(),this.trusted(async()=>{let r=y(e);await this.vfs.writeFile(r,wV(t,n))})}async appendFile(e,t,n){return this.dropListingStats(),this.trusted(()=>this.vfs.appendFile(y(e),wV(t,n)))}async exists(e){return this.trusted(async()=>{let t=y(e);return this.virtualUsrStat(t)?!0:this.vfs.exists(t)})}async stat(e){return this.trusted(async()=>{let t=y(e),n=this.virtualUsrStat(t);if(n)return n;let r=this.vfs.statSync(t);if(r)return{isFile:r.type===`file`,isDirectory:r.type===`directory`,isSymbolicLink:!!r.isSymlink,mode:r.mode??(r.type===`directory`?493:420),size:r.size,mtime:new Date(r.mtime),identity:r.identity,dev:r.dev,ino:r.identity===void 0?void 0:r.ino};let i=this.primedStats(t)??await this.vfs.stat(t);return{isFile:i.type===`file`,isDirectory:i.type===`directory`,isSymbolicLink:!!i.isSymlink,mode:i.mode??(i.type===`directory`?493:420),size:i.size,mtime:new Date(i.mtime),identity:i.identity,dev:i.dev,ino:i.identity===void 0?void 0:i.ino}})}async lstat(e){return this.trusted(async()=>{let t=y(e),n=this.virtualUsrStat(t);if(n)return n;let r=this.vfs.lstatSync(t);if(r)return{isFile:r.type===`file`,isDirectory:r.type===`directory`,isSymbolicLink:r.type===`symlink`,mode:r.mode??(r.type===`directory`?493:r.type===`symlink`?511:420),size:r.size,mtime:new Date(r.mtime),identity:r.identity,dev:r.dev,ino:r.identity===void 0?void 0:r.ino};let i=this.primedStats(t)??await this.vfs.lstat(t);return{isFile:i.type===`file`,isDirectory:i.type===`directory`,isSymbolicLink:i.type===`symlink`,mode:i.mode??(i.type===`directory`?493:i.type===`symlink`?511:420),size:i.size,mtime:new Date(i.mtime),identity:i.identity,dev:i.dev,ino:i.identity===void 0?void 0:i.ino}})}async mkdir(e,t){return this.dropListingStats(),this.trusted(async()=>{await this.vfs.mkdir(y(e),t)})}async readdir(e){return this.trusted(async()=>{let t=y(e);if(t===`/usr`)return[`bin`];if(t===`/usr/bin`)return this.getVirtualBinCommands().slice().sort();let n=this.vfs.readDirSync(t);if(n!==null)return n.map(e=>e.name);let r=await this.vfs.readDir(t,{includeStats:!0});return this.primeListingStats(t,r),r.map(e=>e.name)})}async readdirWithFileTypes(e){return this.trusted(async()=>{let t=y(e);if(t===`/usr`)return[{name:`bin`,isFile:!1,isDirectory:!0,isSymbolicLink:!1}];if(t===`/usr/bin`)return this.getVirtualBinCommands().slice().sort().map(e=>({name:e,isFile:!0,isDirectory:!1,isSymbolicLink:!1}));let n=this.vfs.readDirSync(t);if(n!==null)return this.mapFastEntriesToDirents(n);let r=await this.vfs.readDir(t,{includeStats:!0});return this.primeListingStats(t,r),this.mapAsyncEntriesToDirents(r)})}mapFastEntriesToDirents(e){return e.map(e=>this.entryToDirent(e))}mapAsyncEntriesToDirents(e){return e.map(e=>this.entryToDirent(e))}entryToDirent(e){return e.type===`symlink`?{name:e.name,isFile:!1,isDirectory:!1,isSymbolicLink:!0}:{name:e.name,isFile:e.type===`file`,isDirectory:e.type===`directory`,isSymbolicLink:!1}}async rm(e,t){return this.dropListingStats(),this.trusted(async()=>{await this.vfs.rm(y(e),t)})}async cp(e,t,n){return this.dropListingStats(),this.trusted(async()=>{let r=y(e),i=y(t);if((await this.vfs.stat(r)).type===`directory`){if(!n?.recursive)throw new Fe(`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=b(e,r.name),i=b(t,r.name);r.type===`directory`?await this.cpDir(n,i):await this.vfs.copyFile(n,i)}}async mv(e,t){return this.dropListingStats(),this.trusted(async()=>{await this.vfs.rename(y(e),y(t))})}async rename(e,t){return this.mv(e,t)}resolvePath(e,t){return t.startsWith(`/`)?y(t):y(b(e,t))}getAllPaths(){return[]}async chmod(e,t){return this.dropListingStats(),this.trusted(()=>this.vfs.chmod(y(e),t))}async symlink(e,t){return this.dropListingStats(),this.trusted(async()=>{await this.vfs.symlink(e,y(t))})}async link(e,t){throw Error(`Hard links not supported in VirtualFS`)}async readlink(e){return this.trusted(async()=>this.vfs.readlink(y(e)))}async realpath(e){return this.trusted(async()=>this.vfs.realpath(y(e)))}async utimes(e,t,n){return this.dropListingStats(),this.trusted(()=>this.vfs.utimes(y(e),t,n))}invalidatePaths(e){this.dropListingStats();let t=this.vfs;t.invalidatePaths&&t.invalidatePaths(e)}};function EV(e){return e&&typeof e.getWatcher==`function`?e.getWatcher?.()??null:e&&typeof e.getUnderlyingFS==`function`?EV(e.getUnderlyingFS?.()):null}async function DV(e){let t=c(`github`);if(t){if(e?.force){await t.onSilentRenew?.();return}await t.getValidAccessToken?.()}}const OV=e(`almost-bash-shell`),kV=`__SLICC_RUN_PID`,AV=`__SLICC_OUTPUT_TEE__`;function jV(e){let t=e?.get(kV);if(t===void 0)return;let n=Number.parseInt(t,10);return Number.isSafeInteger(n)&&n>0?n:void 0}function MV(e){if(!(kV in e)&&!(AV in e)&&!(`__SLICC_SUDO_REASON`in e)&&!(`__SLICC_PIPESTATUS`in e)&&!(`__SLICC_PIPESTATUS_EX`in e))return{...e};let{[kV]:t,[AV]:n,[nm]:r,[op]:i,[sp]:a,...o}=e;return o}var NV=class e{options;bash;vfsAdapter;gitCommands;mountCommands;lastEnv;cwd;builtinCommandNames;staticBuiltinNames;allowedCommands;scriptCatalog;initialJshSync=null;ownsScriptCatalog;registeredJshCommands=new Map;registeredWorkflowCommands=new Set;jshSyncInflight=null;jshSyncDirty=!1;pendingCommandGrants=[];pendingSudoBypasses=new Map;pendingEnvWrites=new Map;activeShellPid;progress;activeRunSignal;scriptRun=null;scriptRunsActive=0;registryNames=new Set;outputTees=new Map;nextOutputTeeId=0;resolveJshProcessConfig=e=>this.buildJshProcessConfig(jV(e));static buildAllowedCommandSet(e){return e.sudo?.defaultDisposition===`require-approval`||!e.allowedCommands||e.allowedCommands.includes(`*`)?null:new Set(e.allowedCommands)}static buildInitialEnv(e,t){return{HOME:np,PATH:ir,USER:`user`,SHELL:`/bin/bash`,TMPDIR:`/tmp`,PWD:t,...e.env}}buildSupplementalCommands(e,t){return _V({onMediaPreview:async e=>this.renderMediaPreview(e),getJshCommands:()=>this.getJshCommandNames(),getWorkflowCommands:()=>this.getWorkflowCommandNames(),syncScriptCommands:()=>this.syncJshCommands(),getStaticBuiltins:()=>[...this.staticBuiltinNames],getScriptRegisteredNames:()=>[...this.registeredJshCommands.keys(),...this.registeredWorkflowCommands],fs:e.fs,fetch:t,scriptCatalog:this.scriptCatalog,browserAPI:e.browserAPI,webhook:e.webhook,crontask:e.crontask,getParentJid:e.getParentJid,buildProcessConfig:this.resolveJshProcessConfig,processManager:e.processManager,sudoCommand:e.sudo?{broker:e.sudo.broker,persistGrant:async e=>{this.pendingCommandGrants.push(e)},suppressNextGate:e=>this.registerSudoBypass(e)}:void 0,setEnv:(e,t)=>{this.pendingEnvWrites.set(e,t),this.lastEnv[e]=t},unsetEnv:e=>{this.pendingEnvWrites.set(e,null),delete this.lastEnv[e]}})}constructor(t){this.options=t,this.vfsAdapter=new TV(t.fs),this.progress=new vp({scrubLabel:t.scrubProgressLabel}),this.allowedCommands=e.buildAllowedCommandSet(t);let n=t.cwd??`/`,r=e.buildInitialEnv(t,n);this.gitCommands=new $f({fs:t.fs,authorName:r.GIT_AUTHOR_NAME??`User`,authorEmail:r.GIT_AUTHOR_EMAIL??`user@example.com`,ensureFreshGithubToken:DV}),this.mountCommands=new Es({fs:t.fs,isScoop:t.isScoop,acquireLocalMountViaToolUI:lm});let i=t.jshDiscoveryFs??t.fs,a=t.bshDiscoveryFs??t.fs,o=EV(i)??EV(a);this.scriptCatalog=t.scriptCatalog??new ri({jshFs:i,bshFs:a,watcher:o}),this.ownsScriptCatalog=!t.scriptCatalog,o&&o.watch(`/`,e=>e.endsWith(`.jsh`)||e.endsWith(`.workflow.js`),()=>{this.syncJshCommands().catch(()=>void 0)});let s=this.createGitCustomCommand(),c=ie({progress:Cp(this.progress)}),l=this.buildSupplementalCommands(t,c),u=[s,this.createMountCustomCommand(),this.createUmountCustomCommand(),rh(t.fs),eg(t.fs,c,t.browserAPI),...l].filter(e=>this.isCommandAllowed(e.name)),d=[...Ze(),...Xe()],f=this.allowedCommands?d.filter(e=>this.isCommandAllowed(e)):void 0;if(this.bash=new Qe({fs:this.vfsAdapter,cwd:n,env:{},fetch:c,commands:f,customCommands:u,sleep:Wp(this.progress,{isAborted:()=>this.activeRunSignal?.aborted??!1}),executionLimitProfile:t.executionLimitProfile,executionLimits:tp(t.isScoop?.()??!1,t.executionLimits)}),this.bash.registerTransformPlugin(_m),this.allowedCommands!==null){let e=this.bash;for(let t of Xe())this.isCommandAllowed(t)||e.commands.delete(t)}{let e=this.bash;for(let[t,n]of e.commands)e.commands.set(t,this.wrapCommandForDispatch(n));this.registryNames=new Set(e.commands.keys())}let p=u.map(e=>e.name),m=f??[...Ze(),...Xe()];this.builtinCommandNames=new Set([...m,...p]),this.staticBuiltinNames=new Set(this.builtinCommandNames),this.vfsAdapter.setRegisteredCommandsFn(()=>[...this.builtinCommandNames]),this.lastEnv={...r},this.cwd=n,this.startInitialJshSync()}getBash(){return this.bash}getCwd(){return this.cwd}getScriptCatalog(){return this.scriptCatalog}getEnv(){return{...this.lastEnv}}setMaskedEnvVar(e,t){this.pendingEnvWrites.set(e,t),this.lastEnv[e]=t}applySessionOverrides(e){e.cwd!==void 0&&(this.cwd=e.cwd,this.lastEnv.PWD=e.cwd),e.env&&Object.assign(this.lastEnv,e.env)}async getJshCommandNames(){return[...(await this.getFilteredJshCommands()).keys()]}async syncJshCommands(){return this.jshSyncInflight===null?(this.jshSyncInflight=this.doSyncJshCommands(),this.jshSyncInflight):(this.jshSyncDirty=!0,this.jshSyncInflight)}async executeCommand(e,t,n,r=``,i){let a=this.activeShellPid;n!==void 0&&(this.activeShellPid=n);let o=i?.onOutput?`tee-${this.nextOutputTeeId+=1}`:void 0;o&&i?.onOutput&&this.outputTees.set(o,i.onOutput);try{let a=await this.runCommand(e,t,n,r,o,i?.capturePipeStatus);return{stdout:a.stdout,stderr:a.stderr,exitCode:a.exitCode,...a.pipeStatus===void 0?{}:{pipeStatus:a.pipeStatus}}}finally{this.activeShellPid=a,o&&this.outputTees.delete(o)}}async executeScriptFile(e,t=[]){return Nt(e,t,{fs:this.vfsAdapter,cwd:this.cwd,env:new Map(Object.entries(this.lastEnv)),stdin:``,exec:(e,t)=>this.bash.exec(e,{env:t?.env??this.lastEnv,cwd:t?.cwd??this.cwd,...t?.env===void 0?{}:{replaceEnv:!0}})},this.buildJshProcessConfig())}dispose(){this.ownsScriptCatalog&&this.scriptCatalog.dispose()}async renderMediaPreview(e){throw Error(`terminal preview is unavailable in headless mode`)}currentScanRoots(){return ar(this.lastEnv.PATH)}startInitialJshSync(){this.initialJshSync=this.initHomeAndProfile().then(()=>this.syncJshCommands()).catch(()=>void 0).finally(()=>{this.initialJshSync=null})}async initHomeAndProfile(){let e=this.options.fs;try{let t=this.options.env?.HOME??await rp(e);this.lastEnv.HOME=t,this.options.env?.USER||(this.lastEnv.USER=ip(t));let n=`${t.replace(/\/+$/,``)}/.profile`;if(!await e.exists(n).catch(()=>!1))return;let r=await this.bash.exec(`. "$HOME/.profile"`,{env:this.lastEnv,cwd:this.cwd});if(r.env){let{PWD:e,...t}=r.env;this.lastEnv={...t,PWD:this.lastEnv.PWD??this.cwd}}}catch(e){OV.warn(`HOME/profile init failed; continuing with defaults`,e)}}async waitForInitialJshSync(e){let t=this.initialJshSync;if(t===null)return;if(!e){await t;return}if(e.aborted)return;let n;try{await new Promise(r=>{n=()=>r(),e.addEventListener(`abort`,n,{once:!0}),t.then(()=>r(),()=>r())})}finally{n&&e.removeEventListener(`abort`,n)}}async runCommand(e,t,n,r=``,i,a=!1){bV(e.trim().split(/\s+/)[0]||`unknown`),ne(),await this.waitForInitialJshSync(t);let o=im(e),s={env:{...this.lastEnv,...n===void 0?{}:{[kV]:String(n)},...i===void 0?{}:{[AV]:i},...o?{[nm]:o}:{}},cwd:this.cwd,signal:t,...r===``?{}:{stdin:r,stdinKind:`bytes`}},c=this.lastEnv.PATH;this.activeRunSignal=t;let l=this.beginScriptRun(e),u;try{u=await this.bash.exec(fp(e,a),s)}finally{this.activeRunSignal===t&&(this.activeRunSignal=void 0),this.endScriptRun(l)}if(await this.flushPendingCommandGrants(),u=pp(u,a),u.env&&(this.lastEnv=MV(u.env)),u.env&&this.lastEnv.PATH!==c&&await this.syncJshCommands().catch(()=>void 0),this.pendingEnvWrites.size>0){for(let[e,t]of this.pendingEnvWrites)t===null?delete this.lastEnv[e]:this.lastEnv[e]=t;this.pendingEnvWrites.clear()}if(u.env?.PWD&&(this.cwd=u.env.PWD),u.exitCode===127){let t=await this.tryJshFallback(e,n);if(t)return this.syncJshCommands().catch(()=>void 0),t}if(u.exitCode!==0&&u.stderr.includes(`Permission denied`)){let{withShebangExecHint:e}=await import(`./shebang-exec-hint-BISPom3l.js`);return mp(await e(u,this.cwd,this.vfsAdapter),u.pipeStatus)}return u}isTransparentGatingEnabled(){let e=this.options.sudo;return!!e&&e.transparentGating!==!1}wrapCommandForDispatch(e){let t=this.wrapCommandForSudo(e),n=e.name===`timeout`?Jp(t,this.progress):Xp(t,this.progress),r=()=>this.scriptRun?.stepDone(),i=(e,t)=>this.teeCommandOutput(e,t),a=this.outputTees;return{...n,async execute(e,t){let o=t.env?.get(AV),s=o?a.get(o):void 0;s&&(t.writeStdout=s);try{let r=await n.execute(e,t);return i(t.env,r),r}finally{r()}}}}teeCommandOutput(e,t){let n=e?.get(AV);if(!n)return;let r=this.outputTees.get(n);if(!r)return;let i=[t.stdout,t.stderr].filter(Boolean).join(``);i&&r(i)}beginScriptRun(e){if(this.scriptRunsActive+=1,!this.progress.hasSink())return null;if(this.scriptRunsActive>1)return this.scriptRun?.end(),this.scriptRun=null,null;let t={totalSteps:null};try{t=zp(this.bash.transform(e).ast,this.registryNames)}catch{t={totalSteps:null}}return this.scriptRun=new Vp(t,this.progress,Bp(e)),this.scriptRun}endScriptRun(e){this.scriptRunsActive=Math.max(0,this.scriptRunsActive-1),e&&(e.end(),this.scriptRun===e&&(this.scriptRun=null))}wrapCommandForSudo(e){if(!this.isTransparentGatingEnabled())return e;let t=(t,n)=>this.gateCommandDispatch(e.name,t,n);return{...e,async execute(n,r){return await t(n,r.env?.get(nm))||e.execute(n,r)}}}async gateCommandDispatch(e,t,n){let r=this.options.sudo;if(!r)return null;let i=Qp(e,t);if(this.consumeSudoBypass(i))return null;let a=r.getPolicy();if(!a)return null;let o=await em(i,{policy:a,broker:r.broker,persistGrant:async e=>{this.pendingCommandGrants.push(e)},defaultDisposition:r.defaultDisposition,...n?{reason:n}:{}});return o.allowed?null:{stdout:``,stderr:`${o.message}\n`,exitCode:1}}registerSudoBypass(e){let t=e.trim();t&&this.pendingSudoBypasses.set(t,(this.pendingSudoBypasses.get(t)??0)+1)}consumeSudoBypass(e){let t=this.pendingSudoBypasses.get(e);return t?(t===1?this.pendingSudoBypasses.delete(e):this.pendingSudoBypasses.set(e,t-1),!0):!1}async flushPendingCommandGrants(){if(this.pendingCommandGrants.length===0)return;let e=this.pendingCommandGrants;this.pendingCommandGrants=[];for(let t of e)try{await this.persistCommandGrant(t)}catch{}}async persistCommandGrant(e){let t=this.options.sudo?.persistCommandGrant;if(t){await t(e);return}let n=rt(e);if(!n)return;let r=`${at}/granted`,i=this.options.fs,a=``;try{await i.exists(r)&&(a=await i.readFile(r))}catch(e){if(!(e instanceof Fe&&e.code===`ENOENT`))throw e}let o=a&&!a.endsWith(`
3465
+ `)?`${a}\n`:a;await i.writeFile(r,`${o}NOPASSWD Cmnd ${n}\n`)}isCommandAllowed(e){return this.allowedCommands===null||this.allowedCommands.has(e)}async doSyncJshCommands(){try{let e=await this.scriptCatalog.getJshIndex(this.currentScanRoots()),t=e.commands;for(let t of e.collisions)OV.warn(`jsh command '${t.name}' is provided by more than one skill; using ${t.winnerPath} (${t.reason}), shadowed ${t.shadowedPaths.join(`, `)}`);let n=await this.getFilteredWorkflowCommands();for(let[e,n]of t)this.isCommandAllowed(e)&&(this.builtinCommandNames.has(e)&&!this.registeredJshCommands.has(e)||this.registeredJshCommands.get(e)!==n&&(this.bash.registerCommand(this.wrapCommandForDispatch(this.makeScriptCommand(e))),this.registeredJshCommands.set(e,n),this.builtinCommandNames.add(e)));for(let e of n.keys())if(!this.registeredWorkflowCommands.has(e)){if(this.registeredJshCommands.has(e)){this.registeredWorkflowCommands.add(e);continue}this.builtinCommandNames.has(e)||(this.bash.registerCommand(this.wrapCommandForDispatch(this.makeScriptCommand(e))),this.registeredWorkflowCommands.add(e),this.builtinCommandNames.add(e))}}finally{this.jshSyncInflight=null,this.jshSyncDirty&&(this.jshSyncDirty=!1,this.syncJshCommands().catch(()=>void 0))}}makeScriptCommand(e){let t=this.scriptCatalog,n=this.options.jshDiscoveryFs??this.options.fs,r=e,i=async(e,i)=>{let a=i.exec??((e,t)=>this.bash.exec(e,{env:t?.env??Object.fromEntries(i.env),cwd:t?.cwd??i.cwd,args:t?.args,...t?.env===void 0?{}:{replaceEnv:!0}})),o=(await t.getJshCommands(this.currentScanRoots())).get(r);if(o){let t;try{let e=await n.readFile(o,{encoding:`utf-8`});t=typeof e==`string`?e:new TextDecoder().decode(e)}catch{return{stdout:``,stderr:`jsh: cannot read script '${o}'\n`,exitCode:127}}return Lt(t,[`node`,o,...e],{fs:i.fs,cwd:i.cwd,env:i.env,stdin:i.stdin,exec:a},this.buildJshProcessConfig(jV(i.env)))}let s=(await t.getWorkflowCommands()).get(r);if(s){let t=ni(s.path,e);return a(t[0],{args:t.slice(1),cwd:i.cwd})}return{stdout:``,stderr:`${r}: command no longer exists\n`,exitCode:127}};return{name:e,trusted:!0,async execute(e,t){try{return await i(e,t)}catch(e){let t=e instanceof Error?e.message:String(e);return{stdout:``,stderr:`${r}: ${t}\n`,exitCode:1}}}}}createGitCustomCommand(){let e=this.gitCommands;return x(`git`,async(t,n)=>{let r=n.cwd,i=await e.execute(t,r,n.env,N(n.stdin));return{stdout:i.stdout,stderr:i.stderr,exitCode:i.exitCode}})}createMountCustomCommand(){let e=this.mountCommands;return x(`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 x(`umount`,async(t,n)=>{let r=n.cwd,i=await e.executeUmount(t,r);return{stdout:i.stdout,stderr:i.stderr,exitCode:i.exitCode}})}async getFilteredJshCommands(){let e=await this.scriptCatalog.getJshCommands(this.currentScanRoots()),t=new Map;for(let[n,r]of e)this.builtinCommandNames.has(n)||this.isCommandAllowed(n)&&t.set(n,r);return t}async getFilteredWorkflowCommands(){let e=await this.scriptCatalog.getWorkflowCommands(),t=new Map;for(let[n,r]of e)this.isCommandAllowed(n)&&t.set(n,r);return t}async getWorkflowCommandNames(){return[...(await this.getFilteredWorkflowCommands()).keys()]}async tryJshFallback(e,t){let n=e.trim(),r=n.indexOf(` `),i=r>=0?n.slice(0,r):n,a=r>=0?n.slice(r+1).trim():``,o=(await this.getFilteredJshCommands()).get(i);if(!o)return null;let s=a?ap(a):[],c=this.options.jshDiscoveryFs??this.options.fs,l;try{let e=await c.readFile(o,{encoding:`utf-8`});l=typeof e==`string`?e:new TextDecoder().decode(e)}catch{return{stdout:``,stderr:`jsh: cannot read script '${o}'\n`,exitCode:127,env:this.lastEnv}}let u=[`node`,o,...s],d=await Lt(l,u,{fs:this.vfsAdapter,cwd:this.cwd,env:new Map(Object.entries(this.lastEnv)),stdin:``,exec:(e,t)=>this.bash.exec(e,{env:t?.env??this.lastEnv,cwd:t?.cwd??this.cwd,...t?.env===void 0?{}:{replaceEnv:!0}})},this.buildJshProcessConfig(t));return{stdout:d.stdout,stderr:d.stderr,exitCode:d.exitCode,env:this.lastEnv}}buildJshProcessConfig(e){if(!(!this.options.processManager||!this.options.processOwner))return{processManager:this.options.processManager,owner:this.options.processOwner,getParentPid:()=>e??this.activeShellPid??this.options.getCurrentShellPid?.()}}};export{ua as C,yo as S,Po as _,kB as a,ba as b,_p as c,fs as d,as as f,Fo as g,$o as h,TB as i,np as l,ts as m,TV as n,CB as o,ns as p,yV as r,tm as s,NV as t,ps as u,To as v,ya as x,ga as y};