sliccy 6.194.4 → 6.196.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (150) hide show
  1. package/dist/ui/.vite/manifest.json +186 -186
  2. package/dist/ui/assets/{account-store-QeDLcAFi.js → account-store-D1ylwPEd.js} +1 -1
  3. package/dist/ui/assets/{account-store-CTatKxPN.js → account-store-DILjBx_6.js} +1 -1
  4. package/dist/ui/assets/{adobe-DnTY9GKS.js → adobe-B2WL8NOe.js} +1 -1
  5. package/dist/ui/assets/{adobe-CwINLMpN.js → adobe-Ba-eIPGO.js} +1 -1
  6. package/dist/ui/assets/{agent-panels-CJbMsxnk.js → agent-panels-POal5mH1.js} +1 -1
  7. package/dist/ui/assets/{almost-bash-shell-headless-CeY2_YW2.js → almost-bash-shell-headless-PoOfs7TX.js} +327 -327
  8. package/dist/ui/assets/{apply-layout-B449Yrjp.js → apply-layout-DrhwlUcv.js} +1 -1
  9. package/dist/ui/assets/{apps-DsnPdITH.js → apps-DQOh9Fx7.js} +1 -1
  10. package/dist/ui/assets/{azure-openai-CZnnLzm0.js → azure-openai-DRdsn22E.js} +1 -1
  11. package/dist/ui/assets/{azure-openai-WvPZ3WJc.js → azure-openai-DUcp7xSd.js} +1 -1
  12. package/dist/ui/assets/{backend-hostfs-CFS1XFwg.js → backend-hostfs-Dv-nZR9t.js} +1 -1
  13. package/dist/ui/assets/{cdp-XQvOR9o0.js → cdp-B9fjiBbY.js} +1 -1
  14. package/dist/ui/assets/{cerebras-C4xUFJkA.js → cerebras-jYtLQ7xi.js} +1 -1
  15. package/dist/ui/assets/{cerebras-DcaAypyW.js → cerebras-vogZFRYT.js} +1 -1
  16. package/dist/ui/assets/{composer-speech-V_D1Fl7L.js → composer-speech-uPaauyxq.js} +1 -1
  17. package/dist/ui/assets/{connect-surface-DGGI48xn.js → connect-surface-DQoss0Va.js} +1 -1
  18. package/dist/ui/assets/{directed-approval-Ba_LuMJi.js → directed-approval-CQrJrjnt.js} +1 -1
  19. package/dist/ui/assets/{emscripten-vfs-hook-BRBMzmbo.js → emscripten-vfs-hook-BUfOwJ0C.js} +1 -1
  20. package/dist/ui/assets/{ensure-speech-assets-B5nmaW4v.js → ensure-speech-assets-GdBbsrvX.js} +1 -1
  21. package/dist/ui/assets/{frozen-archive-writer-DAuwvgNl.js → frozen-archive-writer-Uc_OtJqy.js} +1 -1
  22. package/dist/ui/assets/fs-BHB4icMk.js +2 -0
  23. package/dist/ui/assets/fs-Cb2r5Gjw.js +1 -0
  24. package/dist/ui/assets/{gelatiere-store-DNtSg0F-.js → gelatiere-store-DQdepAU8.js} +1 -1
  25. package/dist/ui/assets/{gelatiere-unit-b5XvSGUP.js → gelatiere-unit-D7gaVF5N.js} +1 -1
  26. package/dist/ui/assets/{github-CLQTjVIa.js → github-BMxEpsAM.js} +2 -2
  27. package/dist/ui/assets/{github-auth-Da415BOf.js → github-auth-CHPevdkf.js} +1 -1
  28. package/dist/ui/assets/{github-copilot-75ie6u80.js → github-copilot-6oZeU50Q.js} +1 -1
  29. package/dist/ui/assets/{github-copilot-B4Z5tzBd.js → github-copilot-DEya3Oca.js} +1 -1
  30. package/dist/ui/assets/{github-install-DV5Cxxb6.js → github-install-9oAKHScY.js} +1 -1
  31. package/dist/ui/assets/{github-Ci3Lr1qM.js → github-lxlG7Bth.js} +1 -1
  32. package/dist/ui/assets/{github-zip-D-sld2PC.js → github-zip-CaUDHE37.js} +1 -1
  33. package/dist/ui/assets/{hear-B_t9x8Ou.js → hear-JHPC-6dm.js} +1 -1
  34. package/dist/ui/assets/{help-BzLitoR9.js → help-7RASyMg5.js} +1 -1
  35. package/dist/ui/assets/{installer-BMbZLRf1.js → installer-F1zB3HaJ.js} +1 -1
  36. package/dist/ui/assets/{ipk-mamba-BUmmgLut.js → ipk-mamba-BW9dz94G.js} +1 -1
  37. package/dist/ui/assets/{js-realm-worker--3AqS46n.js → js-realm-worker-MffFy7zx.js} +2 -2
  38. package/dist/ui/assets/{jsh-executor-gAX6xrdE.js → jsh-executor-LdNWzWYM.js} +2 -2
  39. package/dist/ui/assets/{kernel-worker-QtCwYLwr.js → kernel-worker-CKnv6zoK.js} +9 -9
  40. package/dist/ui/assets/{lick-ws-bridge-B99wCqBU.js → lick-ws-bridge-BCQlaF-E.js} +1 -1
  41. package/dist/ui/assets/{lick-ws-bridge-BzM7PvZz.js → lick-ws-bridge-BLv0eWha.js} +1 -1
  42. package/dist/ui/assets/{live-session-curation-ByGwv0gQ.js → live-session-curation-G0JMkuBe.js} +1 -1
  43. package/dist/ui/assets/{live-session-snapshot-DDPi5S7l.js → live-session-snapshot-BFn864WR.js} +1 -1
  44. package/dist/ui/assets/{local-llm-Tq98Br_n.js → local-llm-D8vGxzWi.js} +1 -1
  45. package/dist/ui/assets/{local-llm-dyqHqRrI.js → local-llm-aJsOwp21.js} +1 -1
  46. package/dist/ui/assets/{main-y_kArHSU.js → main-C54jzNU1.js} +3 -3
  47. package/dist/ui/assets/{main-cherry-D6GkTVOR.js → main-cherry-Bj8TNLwe.js} +1 -1
  48. package/dist/ui/assets/{memory-curation-seam-DtBMpqJF.js → memory-curation-seam-DghPe9Hh.js} +1 -1
  49. package/dist/ui/assets/{memory-health-3l6w7AUA.js → memory-health-DNICxShi.js} +1 -1
  50. package/dist/ui/assets/{memory-write-execute-CMS4btt-.js → memory-write-execute-BFiSXFYp.js} +1 -1
  51. package/dist/ui/assets/{merge-folded-cost-into-frozen-htB_A1yn.js → merge-folded-cost-into-frozen-BhZlv89F.js} +1 -1
  52. package/dist/ui/assets/{mount-B_jmMqrx.js → mount-BsU-2GfM.js} +1 -1
  53. package/dist/ui/assets/{mount-Bm7xgP7S.js → mount-DC6mG_Ww.js} +3 -3
  54. package/dist/ui/assets/{new-session-BUlTg4l0.js → new-session-Bx39phkK.js} +2 -2
  55. package/dist/ui/assets/{oauth-bootstrap-DAxFUujt.js → oauth-bootstrap-CyrxbEe2.js} +2 -2
  56. package/dist/ui/assets/{onboarding-orchestrator-CnJIArGv.js → onboarding-orchestrator-DS2qKeL8.js} +1 -1
  57. package/dist/ui/assets/{openai-codex-CIHz6eeE.js → openai-codex-BgO8ZNGl.js} +1 -1
  58. package/dist/ui/assets/{openai-codex-BvNvW2eq.js → openai-codex-DDPNZmF1.js} +1 -1
  59. package/dist/ui/assets/{openrouter-DdJ82QL2.js → openrouter-BxXxXNCo.js} +1 -1
  60. package/dist/ui/assets/{openrouter-WjrPfCIX.js → openrouter-DlKsQW8-.js} +1 -1
  61. package/dist/ui/assets/{openrouter-free-DJAz83_L.js → openrouter-free-CTxoHRnS.js} +1 -1
  62. package/dist/ui/assets/{openrouter-free-CewjtyiT.js → openrouter-free-DqN_JzFu.js} +1 -1
  63. package/dist/ui/assets/{openrouter-oauth-BmXnVJEX.js → openrouter-oauth-CGPJVzWo.js} +1 -1
  64. package/dist/ui/assets/{openrouter-oauth-OZsXWaPL.js → openrouter-oauth-PBy7njyg.js} +1 -1
  65. package/dist/ui/assets/{opfs-mount-DjV3BfxQ.js → opfs-mount-cW9_CAPI.js} +1 -1
  66. package/dist/ui/assets/{panel-rpc-handlers-2eLQHFUK.js → panel-rpc-handlers-CT7wF18r.js} +2 -2
  67. package/dist/ui/assets/{panelize-shell-BP0G-ZVi.js → panelize-shell-CNBbrXiA.js} +1 -1
  68. package/dist/ui/assets/{pi-edit-execution-y_1XdVTx.js → pi-edit-execution-BuvDhjBD.js} +1 -1
  69. package/dist/ui/assets/{provider-DiIKNaWV.js → provider--BIAlVcq.js} +1 -1
  70. package/dist/ui/assets/{provider-CtCUvhgm.js → provider-B7l7t2ce.js} +2 -2
  71. package/dist/ui/assets/{provider-settings-lEu07isx.js → provider-settings-CzG1XXHB.js} +1 -1
  72. package/dist/ui/assets/provider-store-access-Bcy9dhuE.js +1 -0
  73. package/dist/ui/assets/provider-store-access-PMd6cc45.js +1 -0
  74. package/dist/ui/assets/{providers-9xh6DGB3.js → providers-B3B-szQH.js} +2 -2
  75. package/dist/ui/assets/{providers-CBE-1T0O.js → providers-ba6IyXlq.js} +1 -1
  76. package/dist/ui/assets/{quick-llm-17yAZZxR.js → quick-llm-BmyzmYJu.js} +1 -1
  77. package/dist/ui/assets/{realm-inprocess-CzKEsaNM.js → realm-inprocess-C3eFdztR.js} +2 -2
  78. package/dist/ui/assets/{realm-unhandled-rejections-6Jf3b25T.js → realm-unhandled-rejections-C9fP5W_1.js} +1 -1
  79. package/dist/ui/assets/{realm-unhandled-rejections-Cv83B6rd.js → realm-unhandled-rejections-DdiydW8U.js} +1 -1
  80. package/dist/ui/assets/{recovery-screen-Cnl_4rXu.js → recovery-screen-CINmMMuX.js} +1 -1
  81. package/dist/ui/assets/{remote-terminal-view-CM1FMnPj.js → remote-terminal-view-BVUcqdCg.js} +2 -2
  82. package/dist/ui/assets/{restore-DFXRU0iX.js → restore-CtcjSzGe.js} +1 -1
  83. package/dist/ui/assets/{run-DJgvhNq4.js → run-BTTgZPb_.js} +1 -1
  84. package/dist/ui/assets/{run-gFzqDdIk.js → run-Bt3JWsKm.js} +2 -2
  85. package/dist/ui/assets/{run-Dng-8cry.js → run-CMateyfG.js} +1 -1
  86. package/dist/ui/assets/{run-RD9OS2Ac.js → run-DDPXLeHJ.js} +1 -1
  87. package/dist/ui/assets/{run-CskxSCIq.js → run-DMzBEiKS.js} +2 -2
  88. package/dist/ui/assets/{run-CweiB2_V.js → run-vtJb7eHE.js} +1 -1
  89. package/dist/ui/assets/{session-command-memory-C5mfHghY.js → session-command-memory-C3rtK1Zp.js} +2 -2
  90. package/dist/ui/assets/{session-jsonl-BEB8IO8J.js → session-jsonl-CnvNGOfO.js} +1 -1
  91. package/dist/ui/assets/{session-jsonl-B0yK_wz4.js → session-jsonl-DPNJ5Nih.js} +1 -1
  92. package/dist/ui/assets/{session-search-index-CGdK4EFs.js → session-search-index-zLtUJG5T.js} +1 -1
  93. package/dist/ui/assets/{setup-feature-flags-remote-BPFc3JjP.js → setup-feature-flags-remote-BX86uPkN.js} +1 -1
  94. package/dist/ui/assets/{setup-model-catalog-Cn6F-r41.js → setup-model-catalog-SpZuvaxf.js} +1 -1
  95. package/dist/ui/assets/{signed-fetch-DSAv7bmh.js → signed-fetch-DgKTA7II.js} +1 -1
  96. package/dist/ui/assets/{silent-renew-backoff-BjUxtsL0.js → silent-renew-backoff-DKPvoc1-.js} +1 -1
  97. package/dist/ui/assets/slicc-version-DevEZrGU.js +1 -0
  98. package/dist/ui/assets/{snapshot-D9lh0PPp.js → snapshot-CzyTDPSb.js} +1 -1
  99. package/dist/ui/assets/{snapshot-features-DAAZCatM.js → snapshot-features-BW4_xmHw.js} +1 -1
  100. package/dist/ui/assets/{soundscape-D7Oh_aKm.js → soundscape-Dgg_St_N.js} +1 -1
  101. package/dist/ui/assets/{speak-AyZhOsOo.js → speak-D6RKcR6q.js} +1 -1
  102. package/dist/ui/assets/{sprinkle-manager-D1bw-qd-.js → sprinkle-manager-CfhLpbLC.js} +1 -1
  103. package/dist/ui/assets/{sprinkle-renderer-RTD95tfz.js → sprinkle-renderer-D-43tl5b.js} +1 -1
  104. package/dist/ui/assets/{state-D_ntgWvv.js → state-YYv7drV3.js} +1 -1
  105. package/dist/ui/assets/{store-D4NDUHdf.js → store-BaKaqZG4.js} +1 -1
  106. package/dist/ui/assets/{store-IkZyI1oH.js → store-Miv4v_lU.js} +1 -1
  107. package/dist/ui/assets/{sudo-DK1UeZlY.js → sudo-IanITW-C.js} +1 -1
  108. package/dist/ui/assets/{sudo-fs-CQphjEUf.js → sudo-fs-CGjo9awW.js} +1 -1
  109. package/dist/ui/assets/{supervisor-DqQWWn_i.js → supervisor-DWDUnHMe.js} +1 -1
  110. package/dist/ui/assets/{sync-dialog-D3OOar0Y.js → sync-dialog-CgJaNN4m.js} +1 -1
  111. package/dist/ui/assets/{transformers-env-DEoRbK0j.js → transformers-env-CAqwZ0I0.js} +1 -1
  112. package/dist/ui/assets/{tray-leader-DoBB_p-N.js → tray-leader-CZKGUKQt.js} +1 -1
  113. package/dist/ui/assets/{tray-leave-runtime-8gUibXjZ.js → tray-leave-runtime-Vek1poy4.js} +1 -1
  114. package/dist/ui/assets/{tray-sidecar-CbkwHYLn.js → tray-sidecar-NVpXiKtl.js} +1 -1
  115. package/dist/ui/assets/{upgrade-detection-eKq40yYx.js → upgrade-detection-BAmh5Oz5.js} +1 -1
  116. package/dist/ui/assets/{upskill-lick-skip-DPbozkUF.js → upskill-lick-skip-4io1wxpA.js} +1 -1
  117. package/dist/ui/assets/{voice-reply-D6HSpcMa.js → voice-reply-Cm_5OWHa.js} +1 -1
  118. package/dist/ui/assets/{wc-attach-CN6kEfNg.js → wc-attach-CEXOz-c2.js} +2 -2
  119. package/dist/ui/assets/{wc-browser-CvqowFFH.js → wc-browser-CrfyI6Ya.js} +1 -1
  120. package/dist/ui/assets/{wc-computers-E3CEmvHV.js → wc-computers-DXnWwpda.js} +1 -1
  121. package/dist/ui/assets/{wc-detached-DuyQ4q3d.js → wc-detached-CPxKUSxG.js} +1 -1
  122. package/dist/ui/assets/{wc-extension-CiZu9Q9x.js → wc-extension-BhEVRQ-v.js} +2 -2
  123. package/dist/ui/assets/{wc-follower-BHGbd-Si.js → wc-follower-BVgj8oc3.js} +3 -3
  124. package/dist/ui/assets/{wc-follower-oauth-BFI8Uhka.js → wc-follower-oauth-DK1rsRE6.js} +1 -1
  125. package/dist/ui/assets/{wc-gelatiere-BzOXzI1k.js → wc-gelatiere-DSEdd9fU.js} +1 -1
  126. package/dist/ui/assets/{wc-live-DNQL-Ygw.js → wc-live-BrZPH35G.js} +5 -5
  127. package/dist/ui/assets/{wc-nav-zmSoyciu.js → wc-nav-B22l3R3h.js} +2 -2
  128. package/dist/ui/assets/{wc-onboarding-Be_L1Ue7.js → wc-onboarding-wkxG_SIw.js} +2 -2
  129. package/dist/ui/assets/{wc-permissions-CRO4ZAP-.js → wc-permissions-BmYvrIOJ.js} +2 -2
  130. package/dist/ui/assets/{wc-placeholder-CsVyHaQ3.js → wc-placeholder-DZEI8uUA.js} +3 -3
  131. package/dist/ui/assets/{wc-secret-request-Bhm6rNcS.js → wc-secret-request-CN71i1Lp.js} +1 -1
  132. package/dist/ui/assets/{wc-settings-BxncKAi7.js → wc-settings-B9bHrvPD.js} +3 -3
  133. package/dist/ui/assets/{wc-shell-vBtI6pB9.js → wc-shell-CYumDXRU.js} +35 -35
  134. package/dist/ui/assets/{wc-shortcut-config-BGVJCgdd.js → wc-shortcut-config-Dh6EzJUT.js} +1 -1
  135. package/dist/ui/assets/{wc-sprinkles-Ci8DcSZv.js → wc-sprinkles-DoEtyH2E.js} +2 -2
  136. package/dist/ui/assets/{wc-transcript-export-DQo7XXuP.js → wc-transcript-export-jSn1fQ0e.js} +2 -2
  137. package/dist/ui/assets/{wc-tray-BVeqdBry.js → wc-tray-C8nyUJbJ.js} +4 -4
  138. package/dist/ui/assets/welcome-detection-pRs0g1u5.js +1 -0
  139. package/dist/ui/assets/{whisper-session-3j5YxfUB.js → whisper-session-BWTWExiF.js} +2 -2
  140. package/dist/ui/assets/{xai-grok-DRfq-tSQ.js → xai-grok-DKNEpfN-.js} +1 -1
  141. package/dist/ui/assets/{xai-grok-Bh1rxr6p.js → xai-grok-DyQmafxl.js} +1 -1
  142. package/dist/ui/index.html +3 -3
  143. package/dist/ui/packages/webapp/index.html +3 -3
  144. package/package.json +1 -1
  145. package/dist/ui/assets/fs-BAUCLy_G.js +0 -1
  146. package/dist/ui/assets/fs-wZJVjroC.js +0 -2
  147. package/dist/ui/assets/provider-store-access-BKzi_sYJ.js +0 -1
  148. package/dist/ui/assets/provider-store-access-zP1yfC2A.js +0 -1
  149. package/dist/ui/assets/slicc-version-C5fQOnLe.js +0 -1
  150. package/dist/ui/assets/welcome-detection-BnHPKZpQ.js +0 -1
@@ -1,4 +1,4 @@
1
- import{t as e}from"./logger-LESFN7Hj.js";import{r as t,t as n}from"./base64-BPBW1Gzr.js";import{n as r}from"./bridge-protocol-31SWTdS5.js";import{a as i,n as a,o,s,t as c}from"./handoff-link-B3It6xQY.js";import{d as l,f as u,i as d,u as f}from"./account-store-CTatKxPN.js";import{n as p,o as m,r as h,s as g,u as _}from"./proxied-fetch-DXaTHROw.js";import{t as v}from"./runtime-env-DadgceZk.js";import{t as ee}from"./slugify-BYJ6QVAt.js";import{n as te,t as ne}from"./host-command-guuPK7VN.js";import{a as re,i as ie,n as ae,r as oe,t as se}from"./snapshot-D9lh0PPp.js";import{i as ce,r as y}from"./panel-rpc-DW7W4w6_.js";import{t as le}from"./providers-CBE-1T0O.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{s as me,t as he}from"./api-endpoint-D8lUKmPu.js";import{t as ge}from"./compat-uEPf6-XW.js";import{a as _e,i as ve}from"./core-PJsXG3mm.js";import{n as ye,t as be}from"./mime-types-D7IV6i7k.js";import{t as xe}from"./secrets-bridge-client-BiJrSKN9.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 b,t as x}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-DSAv7bmh.js";import{o as Ue}from"./mount-table-store-DrF_Ifaz.js";import{t as We}from"./remote-cache-UwMD8EkX.js";import{n as Ge}from"./fs-BAUCLy_G.js";import{a as Ke}from"./tray-leader-status-CpkFr6n7.js";import{n as qe,t as Je}from"./slicc-version-C5fQOnLe.js";import{a as Ye,i as Xe,o as Ze,r as S,t as Qe}from"./browser-CezNe0PF.js";import{t as C}from"./subcommand-flags-BZi7j78Q.js";import{n as $e,r as et,t as w}from"./subcommand-help-CgO7wRS5.js";import{n as tt}from"./cost-command-DQXYQYV3.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 T,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"./src-CUSndb9K.js";import{i as St,o as Ct}from"./browser-DuyhpHbR.js";import{i as wt,r as Tt,t as Et}from"./mount-picker-popup-BMils9JY.js";import{t as Dt}from"./buffer-B5d1xHaH.js";import"./buffer-polyfill-BwLbCySD.js";import{A as Ot,B as E,C as kt,D,E as At,F as jt,G as Mt,H as O,I as k,J as Nt,K as Pt,L as Ft,M as It,N as Lt,O as Rt,P as zt,R as Bt,S as Vt,T as Ht,U as Ut,V as Wt,W as Gt,Y as Kt,_ as qt,a as Jt,b as Yt,c as Xt,d as Zt,f as Qt,g as $t,h as en,i as tn,j as nn,k as rn,l as an,m as on,n as sn,o as cn,p as A,q as ln,r as un,s as dn,t as fn,u as pn,v as mn,w as hn,x as gn,y as _n,z as vn}from"./isomorphic-git-r9mnHMnp.js";import"./global-db-DJXlpNui.js";import{S as yn,_ as bn,a as xn,b as Sn,c as Cn,d as wn,f as Tn,g as En,h as Dn,i as On,l as kn,n as An,o as jn,p as Mn,r as Nn,s as Pn,t as Fn,u as In,v as j,x as M,y as Ln}from"./state-D_ntgWvv.js";import{a as Rn,i as zn,r as Bn,t as Vn}from"./git-config-Bdgu8kD2.js";import{a as Hn,n as Un,o as Wn,r as Gn,s as Kn}from"./jsh-discovery-CnvNKojr.js";import{A as qn,C as Jn,a as Yn,b as Xn,c as Zn,d as Qn,f as $n,h as er,i as tr,j as nr,l as rr,m as ir,n as ar,o as or,p as sr,r as cr,s as lr,t as N,u as ur,v as dr,y as fr}from"./shared-2XhBobrM.js";import{_ as pr,a as mr,b as hr,d as gr,f as _r,g as vr,h as yr,i as br,l as xr,m as Sr,p as Cr,r as wr,s as Tr,u as Er,v as Dr,x as Or,y as kr}from"./require-guards-Dfl5uogi.js";import{_ as Ar,a as jr,b as Mr,c as Nr,d as Pr,f as Fr,g as Ir,h as Lr,l as Rr,m as zr,n as Br,p as Vr,s as Hr,t as Ur,u as Wr,v as Gr,x as Kr,y as qr}from"./jsh-executor-gAX6xrdE.js";import{n as Jr,t as Yr}from"./esbuild-wasm-CbTVjIj0.js";import{n as Xr}from"./wasm-compiler-Ct7QZURL.js";import{a as Zr,o as Qr,s as $r,t as ei}from"./usb-device-registry-DFzxaOky.js";import{a as P,i as ti,r as ni,t as ri}from"./just-bash-compat-B-SPHuh_.js";import{i as ii,r as ai,t as oi}from"./script-catalog-DZtOMxvi.js";import{a as si,c as ci,o as li,s as ui,t as di}from"./types-Dzr0qYl3.js";import{a as fi,c as pi,d as mi,f as hi,n as gi,r as _i,u as vi}from"./github-zip-D-sld2PC.js";import{i as yi,t as bi}from"./github-auth-Da415BOf.js";import{a as xi,i as Si,o as Ci,r as wi,t as Ti}from"./provenance-DdmsQ3Nr.js";import{a as Ei,c as Di,i as Oi,n as ki,o as Ai,r as ji,s as Mi}from"./github-install-DV5Cxxb6.js";import{n as Ni,t as Pi}from"./magick-wasm-BATj-KUu.js";import{i as Fi,n as Ii,r as Li,t as Ri}from"./pdf-raster-BWk6ezTX.js";import{n as zi}from"./lick-target-env-8JxfVcIV.js";import{t as Bi}from"./tmpdir-env-ate4iNcK.js";import{n as Vi,t as Hi}from"./hf-defaults-BwJdGLgk.js";import{a as Ui,i as Wi,n as Gi,o as Ki,r as qi,t as Ji}from"./installer-BMbZLRf1.js";import{i as Yi,n as Xi,r as Zi,t as Qi}from"./tar-BWIPCxI2.js";import{t as $i}from"./ffmpeg-wasm-CmLVzRDe.js";import{t as ea}from"./local-llm-dyqHqRrI.js";import{t as ta}from"./client-CwxmlQM-.js";import{t as na}from"./redirect-uri-CBCnYKsl.js";import{a as ra,c as ia,i as aa,o as oa,r as sa,s as ca}from"./v86-vm-DCm7zA2r.js";import{n as la,r as ua}from"./lick-urls-CgPiVwD-.js";let da=null;function fa(e){da=e!==null&&Number.isFinite(e)&&e>0?e:null}function pa(){if(da!==null)return da;let e=globalThis.performance?.timeOrigin;return typeof e==`number`&&Number.isFinite(e)&&e>0?e:Date.now()}new URL(r).hostname;const ma=/^([0-9a-f]{32})--(?:[0-9a-f]{8}-)?([0-9a-f]+)$/i;function ha(e){let t;try{t=new URL(e.includes(`://`)?e:`https://${e}`).hostname}catch{return null}let n=ma.exec(t.split(`.`)[0]??``);if(!n||!t.includes(`.`))return null;let r=n[1].toLowerCase();return`${[r.slice(0,8),r.slice(8,12),r.slice(12,16),r.slice(16,20),r.slice(20)].join(`-`)}.${n[2].toLowerCase()}`}[`ghp_`,`gho_`,`ghu_`,`ghs_`,`ghr_`,`github_pat_`,`sk-`,`pk-`,`xoxb-`,`xoxp-`,`xoxa-`,`xoxs-`,`AKIA`,`ABIA`,`ACCA`,`ASIA`,`sk-ant-`,`Bearer `].sort((e,t)=>t.length-e.length);function ga(e,t){let n=e.toLowerCase(),r=t.toLowerCase();if(n===`*`)return!0;if(!n.startsWith(`*.`))return n===r;let i=n.slice(1);return r.length>i.length&&r.endsWith(i)}function _a(e,t){return e.some(e=>ga(e,t))}const va=`slicc-transcript`,ya=[`canonical-agent-history-unavailable`,`tool-data-may-be-truncated`,`model-metadata-unavailable`,`scoop-history-unavailable`,`attachment-file-missing`,`attachment-association-unavailable`,`complete-snapshot-unavailable`],ba=new Set(`/export/format./export/producer/application./session/id./session/state./session/completeness/status./session/completeness/missing/*./conversations/*/id./conversations/*/kind./conversations/*/parentConversationId./conversations/*/messages/*/id./conversations/*/messages/*/role./conversations/*/messages/*/timestamp./conversations/*/messages/*/toolCallId./conversations/*/messages/*/content/*/type./conversations/*/messages/*/content/*/id./conversations/*/messages/*/content/*/name./conversations/*/messages/*/content/*/attachmentId./delegations/*/sourceConversationId./delegations/*/targetConversationId./delegations/*/toolCallId./attachments/*/id./attachments/*/path./attachments/*/sha256./attachments/*/sourceConversationId./attachments/*/sourceMessageId./attachments/*/handling./attachments/*/missingReason`.split(`.`));function xa(e){return ba.has(e.replace(/\/\d+(?=\/|$)/g,`/*`))}var Sa=class extends Error{code;detail;constructor(e,t){super(t?`${e}: ${t}`:e),this.code=e,this.detail=t,this.name=`TranscriptExportError`}};const Ca=new Set(ya),wa=/^[0-9a-fA-F]{64}$/,Ta=/^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}/;function F(e){return typeof e==`object`&&!!e&&!Array.isArray(e)}function Ea(e){return typeof e==`string`&&wa.test(e)}function Da(e){return Ta.test(e)&&Number.isFinite(Date.parse(e))}function Oa(e,t){let n=t.map(e=>`"${e}"`),r=n[n.length-1];return n.length===2?`${e} must be ${n[0]} or ${r}`:`${e} must be ${n.slice(0,-1).join(`, `)}, or ${r}`}function ka(e,t,n){return typeof e!=`string`||!t.includes(e)?{ok:!1,error:Oa(n,t)}:{ok:!0}}function Aa(e,t,n){for(let r=0;r<e.length;r++){let i=t(e[r],`${n}[${r}]`);if(!i.ok)return i}return{ok:!0}}function ja(e,t){let n=e.type;if(n===`text`){if(typeof e.text!=`string`)return{ok:!1,error:`${t}.text must be a string`}}else if(n===`tool-call`){if(typeof e.id!=`string`||e.id===``)return{ok:!1,error:`${t}.id must be a non-empty string`};if(typeof e.name!=`string`||e.name===``)return{ok:!1,error:`${t}.name must be a non-empty string`};if(!(`input`in e))return{ok:!1,error:`${t}.input must be present`}}else if(typeof e.attachmentId!=`string`||e.attachmentId===``)return{ok:!1,error:`${t}.attachmentId must be a non-empty string`};return{ok:!0}}function Ma(e,t){if(!F(e))return{ok:!1,error:`${t} must be a non-null object`};let n=ka(e.type,[`text`,`tool-call`,`attachment-ref`],`${t}.type`);return n.ok?ja(e,t):n}function Na(e,t){for(let n of[`input`,`output`,`cacheRead`,`cacheWrite`,`totalTokens`]){let r=e[n];if(typeof r!=`number`)return{ok:!1,error:`${t}.${n} must be a number`};if(!Number.isInteger(r)||r<0)return{ok:!1,error:`${t}.${n} must be a non-negative integer`}}return{ok:!0}}function Pa(e,t){for(let n of[`input`,`output`,`cacheRead`,`cacheWrite`,`total`]){let r=e[n];if(typeof r!=`number`)return{ok:!1,error:`${t}.${n} must be a number`};if(!Number.isFinite(r)||r<0)return{ok:!1,error:`${t}.${n} must be a finite non-negative number`}}return{ok:!0}}function Fa(e,t){let n=Na(e,t);if(!n.ok)return n;let r=e.cost;return F(r)?Pa(r,`${t}.cost`):{ok:!1,error:`${t}.cost must be a non-null object`}}function Ia(e,t){if(typeof e.id!=`string`)return{ok:!1,error:`${t}.id must be a string`};if(typeof e.sequence!=`number`)return{ok:!1,error:`${t}.sequence must be a number`};let n=e.sequence;return!Number.isInteger(n)||n<1?{ok:!1,error:`${t}.sequence must be a positive integer`}:typeof e.timestamp==`string`?Da(e.timestamp)?{ok:!0}:{ok:!1,error:`${t}.timestamp must be a valid ISO 8601 date-time string`}:{ok:!1,error:`${t}.timestamp must be a string`}}function La(e,t){let n=e.toolCallId;return typeof n!=`string`||n===``?{ok:!1,error:`${t}.toolCallId must be a non-empty string for tool-result messages`}:{ok:!0}}function Ra(e,t){let n=e.usage;return n===void 0?{ok:!0}:F(n)?Fa(n,`${t}.usage`):{ok:!1,error:`${t}.usage must be a non-null object`}}function za(e,t){if(!F(e))return{ok:!1,error:`${t} must be a non-null object`};let n=ka(e.role,[`user`,`assistant`,`tool-result`],`${t}.role`);if(!n.ok)return n;if(e.role===`tool-result`){let n=La(e,t);if(!n.ok)return n}let r=Ia(e,t);if(!r.ok)return r;let i=e.content;if(!Array.isArray(i))return{ok:!1,error:`${t}.content must be an array`};let a=Aa(i,Ma,`${t}.content`);return a.ok?Ra(e,t):a}function Ba(e,t){if(!F(e))return{ok:!1,error:`${t} must be a non-null object`};if(typeof e.id!=`string`)return{ok:!1,error:`${t}.id must be a string`};if(typeof e.name!=`string`)return{ok:!1,error:`${t}.name must be a string`};let n=ka(e.kind,[`cone`,`scoop`],`${t}.kind`);if(!n.ok)return n;let r=e.messages;return Array.isArray(r)?Aa(r,za,`${t}.messages`):{ok:!1,error:`${t}.messages must be an array`}}function Va(e,t){for(let n of[`id`,`path`,`originalName`,`mimeType`,`sha256`,`sourceConversationId`,`sourceMessageId`])if(typeof e[n]!=`string`)return{ok:!1,error:`${t}.${n} must be a string`};return{ok:!0}}function Ha(e,t){let n=e.path,r=e.sha256,i=e.byteLength;return n===``?{ok:!1,error:`${t}.path must be non-empty when present`}:Ea(r)?!Number.isInteger(i)||i<0?{ok:!1,error:`${t}.byteLength must be a non-negative integer when present`}:e.missingReason===void 0?{ok:!0}:{ok:!1,error:`${t}.missingReason must be absent when present is true`}:{ok:!1,error:`${t}.sha256 must be a 64-char hex string when present`}}const Ua=[`attachment-file-missing`,`attachment-association-unavailable`];function Wa(e,t){let n=e.path,r=e.sha256,i=e.byteLength;return n===``?r===``?i===0?ka(e.missingReason,Ua,`${t}.missingReason`):{ok:!1,error:`${t}.byteLength must be zero when not present`}:{ok:!1,error:`${t}.sha256 must be empty when not present`}:{ok:!1,error:`${t}.path must be empty when not present`}}function Ga(e,t){return e.present?Ha(e,t):Wa(e,t)}function Ka(e,t){if(!F(e))return{ok:!1,error:`${t} must be a non-null object`};let n=Va(e,t);if(!n.ok)return n;if(typeof e.byteLength!=`number`)return{ok:!1,error:`${t}.byteLength must be a number`};if(typeof e.present!=`boolean`)return{ok:!1,error:`${t}.present must be a boolean`};let r=ka(e.handling,[`text-redacted`,`binary-unchanged`],`${t}.handling`);return r.ok?Ga(e,t):r}function qa(e,t){let n=ka(e.kind,[`json`,`attachment`],`${t}.kind`);if(!n.ok)return n;if(e.kind===`json`){if(typeof e.pointer!=`string`)return{ok:!1,error:`${t}.pointer must be a string`};let n=e.pointer;if(n!==``&&!n.startsWith(`/`))return{ok:!1,error:`${t}.pointer must be a valid RFC 6901 JSON pointer`}}else if(typeof e.attachmentId!=`string`||e.attachmentId===``)return{ok:!1,error:`${t}.attachmentId must be a non-empty string`};return{ok:!0}}function Ja(e,t){if(!F(e))return{ok:!1,error:`${t} must be a non-null object`};if(typeof e.id!=`string`)return{ok:!1,error:`${t}.id must be a string`};if(typeof e.category!=`string`)return{ok:!1,error:`${t}.category must be a string`};let n=ka(e.detector,[`known-secret`,`credential-pattern`,`pre-obfuscated`],`${t}.detector`);if(!n.ok)return n;let r=e.target;return F(r)?qa(r,`${t}.target`):{ok:!1,error:`${t}.target must be a non-null object`}}function Ya(e,t){return F(e)?typeof e.sourceConversationId==`string`?typeof e.targetConversationId==`string`?{ok:!0}:{ok:!1,error:`${t}.targetConversationId must be a string`}:{ok:!1,error:`${t}.sourceConversationId must be a string`}:{ok:!1,error:`${t} must be a non-null object`}}function Xa(e,t){return typeof e!=`string`||!Ca.has(e)?{ok:!1,error:`${t} is not a valid completeness reason`}:{ok:!0}}function Za(e){if(!F(e))return{ok:!1,error:`export must be a non-null object`};if(typeof e.id!=`string`)return{ok:!1,error:`export.id must be a string`};if(typeof e.generatedAt!=`string`)return{ok:!1,error:`export.generatedAt must be a string`};if(e.format!==`slicc-transcript`)return{ok:!1,error:`export.format must equal "slicc-transcript"`};let t=e.producer;return F(t)?t.application===`slicc`?typeof t.version==`string`?{ok:!0}:{ok:!1,error:`export.producer.version must be a string`}:{ok:!1,error:`export.producer.application must equal "slicc"`}:{ok:!1,error:`export.producer must be a non-null object`}}function Qa(e){if(!F(e))return{ok:!1,error:`session.completeness must be a non-null object`};let t=ka(e.status,[`complete`,`partial`],`session.completeness.status`);return t.ok?Array.isArray(e.missing)?Aa(e.missing,Xa,`session.completeness.missing`):{ok:!1,error:`session.completeness.missing must be an array`}:t}function $a(e){if(!F(e))return{ok:!1,error:`session must be a non-null object`};if(typeof e.id!=`string`)return{ok:!1,error:`session.id must be a string`};if(typeof e.title!=`string`)return{ok:!1,error:`session.title must be a string`};let t=ka(e.state,[`active`,`frozen`],`session.state`);return t.ok?Qa(e.completeness):t}function eo(e){if(!F(e))return{ok:!1,error:`privacy must be a non-null object`};if(e.reasoningExcluded!==!0)return{ok:!1,error:`privacy.reasoningExcluded must be true`};let t=e.excludedReasoningBlocks;if(typeof t!=`number`)return{ok:!1,error:`privacy.excludedReasoningBlocks must be a number`};if(!Number.isInteger(t)||t<0)return{ok:!1,error:`privacy.excludedReasoningBlocks must be a non-negative integer`};if(e.binaryAttachments!==`included-unchanged`)return{ok:!1,error:`privacy.binaryAttachments must equal "included-unchanged"`};if(!F(e.redactionCounts))return{ok:!1,error:`privacy.redactionCounts must be a non-null object`};let n=e.redactions;return Array.isArray(n)?Aa(n,Ja,`privacy.redactions`):{ok:!1,error:`privacy.redactions must be an array`}}function to(e){let t=e.conversations;if(!Array.isArray(t))return{ok:!1,error:`conversations must be an array`};let n=Aa(t,Ba,`conversations`);if(!n.ok)return n;let r=e.delegations;if(!Array.isArray(r))return{ok:!1,error:`delegations must be an array`};let i=Aa(r,Ya,`delegations`);if(!i.ok)return i;let a=e.attachments;return Array.isArray(a)?Aa(a,Ka,`attachments`):{ok:!1,error:`attachments must be an array`}}function no(e){let t=new Set,n=new Set;for(let r of e){if(!F(r)||typeof r.id!=`string`)continue;if(t.has(r.id))return{ok:!1,error:`duplicate conversation id "${r.id}"`};t.add(r.id);let e=r.messages;if(Array.isArray(e)){for(let t of e)if(!(!F(t)||typeof t.id!=`string`)){if(n.has(t.id))return{ok:!1,error:`duplicate message id "${t.id}"`};n.add(t.id)}}}return{ok:!0}}function ro(e){for(let t of e){if(!F(t))continue;let e=t.messages;if(!Array.isArray(e))continue;let n=typeof t.id==`string`?t.id:`?`,r=0;for(let t of e){if(!F(t)||typeof t.sequence!=`number`)continue;let e=t.sequence;if(e<=r)return{ok:!1,error:`sequences in conversation "${n}" must be strictly increasing`};r=e}}return{ok:!0}}function io(e){let t=[];for(let n of e){if(!F(n))continue;let e=n.content;if(Array.isArray(e))for(let n of e)F(n)&&n.type===`tool-call`&&typeof n.id==`string`&&t.push(n.id)}return t}function ao(e){let t=new Set;for(let n of e){if(!F(n))continue;let e=n.messages;if(Array.isArray(e))for(let n of io(e))t.add(n)}return t}function oo(e,t){for(let n of e){if(!F(n))continue;let e=n.messages;if(Array.isArray(e))for(let n of e){if(!F(n)||n.role!==`tool-result`)continue;let e=n.toolCallId;if(typeof e==`string`&&e!==``&&!t.has(e))return{ok:!1,error:`tool-result message references unknown toolCallId "${e}"`}}}return{ok:!0}}function so(e){return oo(e,ao(e))}function co(e,t){for(let n of e){if(!F(n)||n.type!==`attachment-ref`)continue;let e=n.attachmentId;if(typeof e!=`string`||!t.has(e))return{ok:!1,error:`attachment-ref references unknown attachmentId "${e}"`}}return{ok:!0}}function lo(e,t){for(let n of e){if(!F(n))continue;let e=n.messages;if(Array.isArray(e))for(let n of e){if(!F(n))continue;let e=n.content;if(!Array.isArray(e))continue;let r=co(e,t);if(!r.ok)return r}}return{ok:!0}}function uo(e,t){let n=new Set;for(let e of t)F(e)&&typeof e.id==`string`&&n.add(e.id);return lo(e,n)}function fo(e){let t=new Map;for(let n of e){if(!F(n)||typeof n.id!=`string`)continue;let e=new Set,r=n.messages;if(Array.isArray(r))for(let t of r)F(t)&&typeof t.id==`string`&&e.add(t.id);t.set(n.id,e)}return t}function po(e,t){let n=fo(t);for(let t=0;t<e.length;t++){let r=e[t];if(!F(r))continue;let i=r.sourceConversationId,a=r.sourceMessageId;if(typeof i!=`string`||typeof a!=`string`)continue;let o=n.get(i);if(!o)return{ok:!1,error:`attachments[${t}].sourceConversationId "${i}" does not exist`};if(!o.has(a))return{ok:!1,error:`attachments[${t}].sourceMessageId "${a}" does not exist in conversation "${i}"`}}return{ok:!0}}function mo(e){let t=new Map;for(let n of e){if(!F(n)||typeof n.id!=`string`)continue;let e=Array.isArray(n.messages)?n.messages:[];t.set(n.id,new Set(io(e)))}return t}function ho(e,t,n){for(let r=0;r<e.length;r++){let i=e[r];if(!F(i))continue;let a=i.sourceConversationId,o=i.targetConversationId;if(typeof a!=`string`||!t.has(a))return{ok:!1,error:`delegations[${r}].sourceConversationId "${a}" does not exist`};if(typeof o!=`string`||!t.has(o))return{ok:!1,error:`delegations[${r}].targetConversationId "${o}" does not exist`};let s=i.toolCallId;if(typeof s==`string`&&s!==``&&!n.get(a)?.has(s))return{ok:!1,error:`delegations[${r}].toolCallId "${s}" does not exist in source conversation "${a}"`}}return{ok:!0}}function go(e,t){let n=new Set;for(let e of t)F(e)&&typeof e.id==`string`&&n.add(e.id);return ho(e,n,mo(t))}function _o(e,t,n){if(e.kind!==`attachment`)return{ok:!0};let r=e.attachmentId;return typeof r!=`string`||!t.has(r)?{ok:!1,error:`${n}.attachmentId "${r}" does not reference a known attachment`}:{ok:!0}}function vo(e,t){let n=new Set;for(let e of t)F(e)&&typeof e.id==`string`&&n.add(e.id);for(let t=0;t<e.length;t++){let r=e[t];if(!F(r))continue;let i=r.target;if(!F(i))continue;let a=_o(i,n,`privacy.redactions[${t}].target`);if(!a.ok)return a}return{ok:!0}}function yo(e){let t=e.conversations,n=e.attachments,r=e.delegations,i=e.privacy,a=Array.isArray(i?.redactions)?i.redactions:[],o=no(t);if(!o.ok)return o;let s=ro(t);if(!s.ok)return s;let c=so(t);if(!c.ok)return c;let l=uo(t,n);if(!l.ok)return l;let u=po(n,t);if(!u.ok)return u;let d=go(r,t);return d.ok?vo(a,n):d}function bo(e){let t=to(e);return t.ok?yo(e):t}function xo(e){if(!F(e))return{ok:!1,error:`document must be a non-null object`};if(e.schemaVersion!==1)return{ok:!1,error:`schemaVersion must equal 1`};let t=Za(e.export);if(!t.ok)return t;let n=$a(e.session);if(!n.ok)return n;let r=eo(e.privacy);return r.ok?bo(e):r}async function So(e,t,n){let r=await n({method:`GET`,path:`/${e}/sites/${t}/config.json`,origin: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:Co(a),sourceUrl:a}}function Co(e){if(!e)return`da`;let t;try{t=new URL(e).host}catch{return`da`}return t===`api.aem.live`?`aem`:`da`}const wo=`slicc-sprinkle-routes`;function To(){try{let e=localStorage.getItem(wo);return e?JSON.parse(e):{}}catch{return{}}}function Eo(e){try{localStorage.setItem(wo,JSON.stringify(e))}catch{}}function Do(e){return To()[e]}function Oo(e,t){let n=To();n[e]=t,Eo(n)}function ko(e){let t=To();delete t[e],Eo(t)}function Ao(){return To()}function jo(e,t,n){return dt(t,n,`${e} adapter does not implement ${t}.${n}`)}function Mo(e,t,n,r){let i=n.filter(e=>typeof r?.[e]==`function`),a=n.map(n=>{let i=r?.[n];return[n,typeof i==`function`?i:()=>Promise.resolve(jo(e,t,n))]});return{...Object.fromEntries(a),allowlist:i,supports:e=>i.includes(e)}}function No(e){let{adapter:t,pageGestures:n}=e,r=n??{};return{adapter:t,browser:Mo(t,`browser`,mt,e.browser),network:Mo(t,`network`,ut,e.network),secrets:Mo(t,`secrets`,ht,e.secrets),devices:Mo(t,`devices`,gt,{usbRequest:r.usbRequest,serialRequest:r.serialRequest,hidRequest:r.hidRequest,...e.devices}),mounts:Mo(t,`mounts`,ft,{pickDirectory:r.pickDirectory,...e.mounts}),approvals:Mo(t,`approvals`,_t,e.approvals)}}function Po(e={}){return No({adapter:`connect`,pageGestures:e.pageGestures})}function Fo(e){let t=vt(()=>import(`./extension-ops-CF2mLDRW.js`).then(t=>t.createExtensionOps(e)));return No({adapter:e.adapter,pageGestures:e.pageGestures,network:{crossOriginFetch:e=>T(`network`,`crossOriginFetch`,async()=>(await t()).crossOriginFetch(e))},secrets:{listMaskedEnv:()=>T(`secrets`,`listMaskedEnv`,async()=>(await t()).secrets.listMaskedEnv()),getMasked:e=>T(`secrets`,`getMasked`,async()=>(await t()).secrets.getMasked(e)),set:e=>T(`secrets`,`set`,async()=>(await t()).secrets.set(e)),delete:e=>T(`secrets`,`delete`,async()=>(await t()).secrets.delete(e))},mounts:{signRequest:e=>T(`mounts`,`signRequest`,async()=>(await t()).signRequest(e))},approvals:{request:e=>T(`approvals`,`request`,async()=>(await t()).requestApproval(e))}})}function Io(e={}){let t=vt(()=>import(`./rest-ops-CLliBy-9.js`).then(t=>t.createRestOps(e)),e.controlTimeoutMs??1e4);return No({adapter:`node-rest`,pageGestures:e.pageGestures,network:{localNodeServer:()=>Promise.resolve({ok:!0,value:{available:!0}}),crossOriginFetch:e=>T(`network`,`crossOriginFetch`,async()=>(await t()).crossOriginFetch(e))},secrets:{listMaskedEnv:()=>T(`secrets`,`listMaskedEnv`,async()=>(await t()).secrets.listMaskedEnv()),getMasked:e=>T(`secrets`,`getMasked`,async()=>(await t()).secrets.getMasked(e)),set:e=>T(`secrets`,`set`,async()=>(await t()).secrets.set(e)),delete:e=>T(`secrets`,`delete`,async()=>(await t()).secrets.delete(e))},mounts:{signRequest:e=>T(`mounts`,`signRequest`,async()=>(await t()).signRequest(e))},approvals:{request:e=>T(`approvals`,`request`,async()=>(await t()).requestApproval(e))}})}function Lo(e,t={}){let{pageGestures:n}=t;switch(e){case`node-rest`:return Io({pageGestures:n});case`extension-direct`:case`extension-delegate`:return Fo({adapter:e,pageGestures:n});case`connect`:return Po({pageGestures:n})}}const Ro=e(`quick-llm`);async function zo(e){let t=d();if(!t)return Ro.debug(`No API key for active provider — skipping`),null;let n=u(),r=l(),i;if(i=e.modelId?Uo(n,e.modelId)??Uo(n,r):Bo(n,r),!i)return Ro.debug(`No model available for provider`,{providerId:n}),null;let a={role:`user`,content:e.prompt,timestamp:Date.now()},o={};i.provider===`adobe`&&(o[`X-Session-Id`]=Wo());try{let n=(await 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 Ro.debug(`Quick label call failed`,{error:e instanceof Error?e.message:String(e)}),null}}function Bo(e,t){let n=f(e);if(n.length===0)return;let r=n.find(e=>e.id===t)??n[0],i=Ho(r.id),a=n.filter(e=>Vo(e,r,i));return a.length===0?r:(a.sort((e,t)=>(e.cost?.input??0)-(t.cost?.input??0)),a[0])}function Vo(e,t,n){if(e.id===t.id)return!1;let r=t.cost?.input??1/0;if((e.cost?.input??1/0)>=r)return!1;let i=e.id.toLowerCase();switch(n){case`claude`:return i.includes(`haiku`);case`gpt`:return/(^|-)mini(-|$)|(^|-)nano(-|$)/.test(i);case`gemini`:return i.includes(`flash`);case`grok`:return/(^|-)mini(-|$)|(^|-)fast(-|$)/.test(i);case`unknown`:return!0}}function Ho(e){let t=e.toLowerCase();return t.includes(`claude`)?`claude`:t.includes(`gemini`)?`gemini`:t.includes(`grok`)?`grok`:/^(gpt|o\d)/.test(t)?`gpt`:`unknown`}function Uo(e,t){return f(e).find(e=>e.id===t)}function Wo(){return bt(`ui-quick-llm`)}const Go=e(`sudo-suggest`),Ko=[`You generalize a single shell command into a minimal glob pattern for an`,`allow-list rule. Output ONLY the pattern on one line — no prose, no quotes,`,`no backticks. Keep the leading command/sub-command verbatim and replace only`,`the volatile tail (args, paths, refs) with a single trailing "*".`,`Examples:`,` git push origin main -> git push*`,` rm -rf build/cache -> rm -rf*`,` npm install left-pad -> npm install*`].join(`
1
+ import{t as e}from"./logger-LESFN7Hj.js";import{r as t,t as n}from"./base64-BPBW1Gzr.js";import{n as r}from"./bridge-protocol-31SWTdS5.js";import{a as i,n as a,o,s,t as c}from"./handoff-link-B3It6xQY.js";import{d as l,f as u,i as d,u as f}from"./account-store-DILjBx_6.js";import{n as p,o as m,r as h,s as g,u as _}from"./proxied-fetch-DXaTHROw.js";import{t as v}from"./runtime-env-DadgceZk.js";import{t as ee}from"./slugify-BYJ6QVAt.js";import{n as te,t as ne}from"./host-command-guuPK7VN.js";import{a as re,i as ie,n as ae,r as oe,t as se}from"./snapshot-CzyTDPSb.js";import{i as ce,r as y}from"./panel-rpc-DW7W4w6_.js";import{t as le}from"./providers-ba6IyXlq.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{s as me,t as he}from"./api-endpoint-D8lUKmPu.js";import{t as ge}from"./compat-uEPf6-XW.js";import{a as _e,i as ve}from"./core-PJsXG3mm.js";import{n as ye,t as be}from"./mime-types-D7IV6i7k.js";import{t as xe}from"./secrets-bridge-client-BiJrSKN9.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 b,t as x}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-DgKTA7II.js";import{o as Ue}from"./mount-table-store-DrF_Ifaz.js";import{t as We}from"./remote-cache-UwMD8EkX.js";import{n as Ge}from"./fs-Cb2r5Gjw.js";import{a as Ke}from"./tray-leader-status-CpkFr6n7.js";import{n as qe,t as Je}from"./slicc-version-DevEZrGU.js";import{a as Ye,i as Xe,o as Ze,r as S,t as Qe}from"./browser-CezNe0PF.js";import{t as C}from"./subcommand-flags-BZi7j78Q.js";import{n as $e,r as et,t as w}from"./subcommand-help-CgO7wRS5.js";import{n as tt}from"./cost-command-DQXYQYV3.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 T,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"./src-CUSndb9K.js";import{i as St,o as Ct}from"./browser-DuyhpHbR.js";import{i as wt,r as Tt,t as Et}from"./mount-picker-popup-BMils9JY.js";import{t as Dt}from"./buffer-B5d1xHaH.js";import"./buffer-polyfill-BwLbCySD.js";import{A as Ot,B as E,C as kt,D,E as At,F as jt,G as Mt,H as O,I as k,J as Nt,K as Pt,L as Ft,M as It,N as Lt,O as Rt,P as zt,R as Bt,S as Vt,T as Ht,U as Ut,V as Wt,W as Gt,Y as Kt,_ as qt,a as Jt,b as Yt,c as Xt,d as Zt,f as Qt,g as $t,h as en,i as tn,j as nn,k as rn,l as an,m as on,n as sn,o as cn,p as A,q as ln,r as un,s as dn,t as fn,u as pn,v as mn,w as hn,x as gn,y as _n,z as vn}from"./isomorphic-git-r9mnHMnp.js";import"./global-db-DJXlpNui.js";import{S as yn,_ as bn,a as xn,b as Sn,c as Cn,d as wn,f as Tn,g as En,h as Dn,i as On,l as kn,n as An,o as jn,p as Mn,r as Nn,s as Pn,t as Fn,u as In,v as j,x as M,y as Ln}from"./state-YYv7drV3.js";import{a as Rn,i as zn,r as Bn,t as Vn}from"./git-config-Bdgu8kD2.js";import{a as Hn,n as Un,o as Wn,r as Gn,s as Kn}from"./jsh-discovery-CnvNKojr.js";import{A as qn,C as Jn,a as Yn,b as Xn,c as Zn,d as Qn,f as $n,h as er,i as tr,j as nr,l as rr,m as ir,n as ar,o as or,p as sr,r as cr,s as lr,t as N,u as ur,v as dr,y as fr}from"./shared-2XhBobrM.js";import{_ as pr,a as mr,b as hr,d as gr,f as _r,g as vr,h as yr,i as br,l as xr,m as Sr,p as Cr,r as wr,s as Tr,u as Er,v as Dr,x as Or,y as kr}from"./require-guards-Dfl5uogi.js";import{_ as Ar,a as jr,b as Mr,c as Nr,d as Pr,f as Fr,g as Ir,h as Lr,l as Rr,m as zr,n as Br,p as Vr,s as Hr,t as Ur,u as Wr,v as Gr,x as Kr,y as qr}from"./jsh-executor-LdNWzWYM.js";import{n as Jr,t as Yr}from"./esbuild-wasm-CbTVjIj0.js";import{n as Xr}from"./wasm-compiler-Ct7QZURL.js";import{a as Zr,o as Qr,s as $r,t as ei}from"./usb-device-registry-DFzxaOky.js";import{a as P,i as ti,r as ni,t as ri}from"./just-bash-compat-B-SPHuh_.js";import{i as ii,r as ai,t as oi}from"./script-catalog-DZtOMxvi.js";import{a as si,c as ci,o as li,s as ui,t as di}from"./types-Dzr0qYl3.js";import{a as fi,c as pi,d as mi,f as hi,n as gi,r as _i,u as vi}from"./github-zip-CaUDHE37.js";import{i as yi,t as bi}from"./github-auth-CHPevdkf.js";import{a as xi,i as Si,o as Ci,r as wi,t as Ti}from"./provenance-DdmsQ3Nr.js";import{a as Ei,c as Di,i as Oi,n as ki,o as Ai,r as ji,s as Mi}from"./github-install-9oAKHScY.js";import{n as Ni,t as Pi}from"./magick-wasm-BATj-KUu.js";import{i as Fi,n as Ii,r as Li,t as Ri}from"./pdf-raster-BWk6ezTX.js";import{n as zi}from"./lick-target-env-8JxfVcIV.js";import{t as Bi}from"./tmpdir-env-ate4iNcK.js";import{n as Vi,t as Hi}from"./hf-defaults-BwJdGLgk.js";import{a as Ui,i as Wi,n as Gi,o as Ki,r as qi,t as Ji}from"./installer-F1zB3HaJ.js";import{i as Yi,n as Xi,r as Zi,t as Qi}from"./tar-BWIPCxI2.js";import{t as $i}from"./ffmpeg-wasm-CmLVzRDe.js";import{t as ea}from"./local-llm-aJsOwp21.js";import{t as ta}from"./client-CwxmlQM-.js";import{t as na}from"./redirect-uri-CBCnYKsl.js";import{a as ra,c as ia,i as aa,o as oa,r as sa,s as ca}from"./v86-vm-DCm7zA2r.js";import{n as la,r as ua}from"./lick-urls-CgPiVwD-.js";let da=null;function fa(e){da=e!==null&&Number.isFinite(e)&&e>0?e:null}function pa(){if(da!==null)return da;let e=globalThis.performance?.timeOrigin;return typeof e==`number`&&Number.isFinite(e)&&e>0?e:Date.now()}new URL(r).hostname;const ma=/^([0-9a-f]{32})--(?:[0-9a-f]{8}-)?([0-9a-f]+)$/i;function ha(e){let t;try{t=new URL(e.includes(`://`)?e:`https://${e}`).hostname}catch{return null}let n=ma.exec(t.split(`.`)[0]??``);if(!n||!t.includes(`.`))return null;let r=n[1].toLowerCase();return`${[r.slice(0,8),r.slice(8,12),r.slice(12,16),r.slice(16,20),r.slice(20)].join(`-`)}.${n[2].toLowerCase()}`}[`ghp_`,`gho_`,`ghu_`,`ghs_`,`ghr_`,`github_pat_`,`sk-`,`pk-`,`xoxb-`,`xoxp-`,`xoxa-`,`xoxs-`,`AKIA`,`ABIA`,`ACCA`,`ASIA`,`sk-ant-`,`Bearer `].sort((e,t)=>t.length-e.length);function ga(e,t){let n=e.toLowerCase(),r=t.toLowerCase();if(n===`*`)return!0;if(!n.startsWith(`*.`))return n===r;let i=n.slice(1);return r.length>i.length&&r.endsWith(i)}function _a(e,t){return e.some(e=>ga(e,t))}const va=`slicc-transcript`,ya=[`canonical-agent-history-unavailable`,`tool-data-may-be-truncated`,`model-metadata-unavailable`,`scoop-history-unavailable`,`attachment-file-missing`,`attachment-association-unavailable`,`complete-snapshot-unavailable`],ba=new Set(`/export/format./export/producer/application./session/id./session/state./session/completeness/status./session/completeness/missing/*./conversations/*/id./conversations/*/kind./conversations/*/parentConversationId./conversations/*/messages/*/id./conversations/*/messages/*/role./conversations/*/messages/*/timestamp./conversations/*/messages/*/toolCallId./conversations/*/messages/*/content/*/type./conversations/*/messages/*/content/*/id./conversations/*/messages/*/content/*/name./conversations/*/messages/*/content/*/attachmentId./delegations/*/sourceConversationId./delegations/*/targetConversationId./delegations/*/toolCallId./attachments/*/id./attachments/*/path./attachments/*/sha256./attachments/*/sourceConversationId./attachments/*/sourceMessageId./attachments/*/handling./attachments/*/missingReason`.split(`.`));function xa(e){return ba.has(e.replace(/\/\d+(?=\/|$)/g,`/*`))}var Sa=class extends Error{code;detail;constructor(e,t){super(t?`${e}: ${t}`:e),this.code=e,this.detail=t,this.name=`TranscriptExportError`}};const Ca=new Set(ya),wa=/^[0-9a-fA-F]{64}$/,Ta=/^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}/;function F(e){return typeof e==`object`&&!!e&&!Array.isArray(e)}function Ea(e){return typeof e==`string`&&wa.test(e)}function Da(e){return Ta.test(e)&&Number.isFinite(Date.parse(e))}function Oa(e,t){let n=t.map(e=>`"${e}"`),r=n[n.length-1];return n.length===2?`${e} must be ${n[0]} or ${r}`:`${e} must be ${n.slice(0,-1).join(`, `)}, or ${r}`}function ka(e,t,n){return typeof e!=`string`||!t.includes(e)?{ok:!1,error:Oa(n,t)}:{ok:!0}}function Aa(e,t,n){for(let r=0;r<e.length;r++){let i=t(e[r],`${n}[${r}]`);if(!i.ok)return i}return{ok:!0}}function ja(e,t){let n=e.type;if(n===`text`){if(typeof e.text!=`string`)return{ok:!1,error:`${t}.text must be a string`}}else if(n===`tool-call`){if(typeof e.id!=`string`||e.id===``)return{ok:!1,error:`${t}.id must be a non-empty string`};if(typeof e.name!=`string`||e.name===``)return{ok:!1,error:`${t}.name must be a non-empty string`};if(!(`input`in e))return{ok:!1,error:`${t}.input must be present`}}else if(typeof e.attachmentId!=`string`||e.attachmentId===``)return{ok:!1,error:`${t}.attachmentId must be a non-empty string`};return{ok:!0}}function Ma(e,t){if(!F(e))return{ok:!1,error:`${t} must be a non-null object`};let n=ka(e.type,[`text`,`tool-call`,`attachment-ref`],`${t}.type`);return n.ok?ja(e,t):n}function Na(e,t){for(let n of[`input`,`output`,`cacheRead`,`cacheWrite`,`totalTokens`]){let r=e[n];if(typeof r!=`number`)return{ok:!1,error:`${t}.${n} must be a number`};if(!Number.isInteger(r)||r<0)return{ok:!1,error:`${t}.${n} must be a non-negative integer`}}return{ok:!0}}function Pa(e,t){for(let n of[`input`,`output`,`cacheRead`,`cacheWrite`,`total`]){let r=e[n];if(typeof r!=`number`)return{ok:!1,error:`${t}.${n} must be a number`};if(!Number.isFinite(r)||r<0)return{ok:!1,error:`${t}.${n} must be a finite non-negative number`}}return{ok:!0}}function Fa(e,t){let n=Na(e,t);if(!n.ok)return n;let r=e.cost;return F(r)?Pa(r,`${t}.cost`):{ok:!1,error:`${t}.cost must be a non-null object`}}function Ia(e,t){if(typeof e.id!=`string`)return{ok:!1,error:`${t}.id must be a string`};if(typeof e.sequence!=`number`)return{ok:!1,error:`${t}.sequence must be a number`};let n=e.sequence;return!Number.isInteger(n)||n<1?{ok:!1,error:`${t}.sequence must be a positive integer`}:typeof e.timestamp==`string`?Da(e.timestamp)?{ok:!0}:{ok:!1,error:`${t}.timestamp must be a valid ISO 8601 date-time string`}:{ok:!1,error:`${t}.timestamp must be a string`}}function La(e,t){let n=e.toolCallId;return typeof n!=`string`||n===``?{ok:!1,error:`${t}.toolCallId must be a non-empty string for tool-result messages`}:{ok:!0}}function Ra(e,t){let n=e.usage;return n===void 0?{ok:!0}:F(n)?Fa(n,`${t}.usage`):{ok:!1,error:`${t}.usage must be a non-null object`}}function za(e,t){if(!F(e))return{ok:!1,error:`${t} must be a non-null object`};let n=ka(e.role,[`user`,`assistant`,`tool-result`],`${t}.role`);if(!n.ok)return n;if(e.role===`tool-result`){let n=La(e,t);if(!n.ok)return n}let r=Ia(e,t);if(!r.ok)return r;let i=e.content;if(!Array.isArray(i))return{ok:!1,error:`${t}.content must be an array`};let a=Aa(i,Ma,`${t}.content`);return a.ok?Ra(e,t):a}function Ba(e,t){if(!F(e))return{ok:!1,error:`${t} must be a non-null object`};if(typeof e.id!=`string`)return{ok:!1,error:`${t}.id must be a string`};if(typeof e.name!=`string`)return{ok:!1,error:`${t}.name must be a string`};let n=ka(e.kind,[`cone`,`scoop`],`${t}.kind`);if(!n.ok)return n;let r=e.messages;return Array.isArray(r)?Aa(r,za,`${t}.messages`):{ok:!1,error:`${t}.messages must be an array`}}function Va(e,t){for(let n of[`id`,`path`,`originalName`,`mimeType`,`sha256`,`sourceConversationId`,`sourceMessageId`])if(typeof e[n]!=`string`)return{ok:!1,error:`${t}.${n} must be a string`};return{ok:!0}}function Ha(e,t){let n=e.path,r=e.sha256,i=e.byteLength;return n===``?{ok:!1,error:`${t}.path must be non-empty when present`}:Ea(r)?!Number.isInteger(i)||i<0?{ok:!1,error:`${t}.byteLength must be a non-negative integer when present`}:e.missingReason===void 0?{ok:!0}:{ok:!1,error:`${t}.missingReason must be absent when present is true`}:{ok:!1,error:`${t}.sha256 must be a 64-char hex string when present`}}const Ua=[`attachment-file-missing`,`attachment-association-unavailable`];function Wa(e,t){let n=e.path,r=e.sha256,i=e.byteLength;return n===``?r===``?i===0?ka(e.missingReason,Ua,`${t}.missingReason`):{ok:!1,error:`${t}.byteLength must be zero when not present`}:{ok:!1,error:`${t}.sha256 must be empty when not present`}:{ok:!1,error:`${t}.path must be empty when not present`}}function Ga(e,t){return e.present?Ha(e,t):Wa(e,t)}function Ka(e,t){if(!F(e))return{ok:!1,error:`${t} must be a non-null object`};let n=Va(e,t);if(!n.ok)return n;if(typeof e.byteLength!=`number`)return{ok:!1,error:`${t}.byteLength must be a number`};if(typeof e.present!=`boolean`)return{ok:!1,error:`${t}.present must be a boolean`};let r=ka(e.handling,[`text-redacted`,`binary-unchanged`],`${t}.handling`);return r.ok?Ga(e,t):r}function qa(e,t){let n=ka(e.kind,[`json`,`attachment`],`${t}.kind`);if(!n.ok)return n;if(e.kind===`json`){if(typeof e.pointer!=`string`)return{ok:!1,error:`${t}.pointer must be a string`};let n=e.pointer;if(n!==``&&!n.startsWith(`/`))return{ok:!1,error:`${t}.pointer must be a valid RFC 6901 JSON pointer`}}else if(typeof e.attachmentId!=`string`||e.attachmentId===``)return{ok:!1,error:`${t}.attachmentId must be a non-empty string`};return{ok:!0}}function Ja(e,t){if(!F(e))return{ok:!1,error:`${t} must be a non-null object`};if(typeof e.id!=`string`)return{ok:!1,error:`${t}.id must be a string`};if(typeof e.category!=`string`)return{ok:!1,error:`${t}.category must be a string`};let n=ka(e.detector,[`known-secret`,`credential-pattern`,`pre-obfuscated`],`${t}.detector`);if(!n.ok)return n;let r=e.target;return F(r)?qa(r,`${t}.target`):{ok:!1,error:`${t}.target must be a non-null object`}}function Ya(e,t){return F(e)?typeof e.sourceConversationId==`string`?typeof e.targetConversationId==`string`?{ok:!0}:{ok:!1,error:`${t}.targetConversationId must be a string`}:{ok:!1,error:`${t}.sourceConversationId must be a string`}:{ok:!1,error:`${t} must be a non-null object`}}function Xa(e,t){return typeof e!=`string`||!Ca.has(e)?{ok:!1,error:`${t} is not a valid completeness reason`}:{ok:!0}}function Za(e){if(!F(e))return{ok:!1,error:`export must be a non-null object`};if(typeof e.id!=`string`)return{ok:!1,error:`export.id must be a string`};if(typeof e.generatedAt!=`string`)return{ok:!1,error:`export.generatedAt must be a string`};if(e.format!==`slicc-transcript`)return{ok:!1,error:`export.format must equal "slicc-transcript"`};let t=e.producer;return F(t)?t.application===`slicc`?typeof t.version==`string`?{ok:!0}:{ok:!1,error:`export.producer.version must be a string`}:{ok:!1,error:`export.producer.application must equal "slicc"`}:{ok:!1,error:`export.producer must be a non-null object`}}function Qa(e){if(!F(e))return{ok:!1,error:`session.completeness must be a non-null object`};let t=ka(e.status,[`complete`,`partial`],`session.completeness.status`);return t.ok?Array.isArray(e.missing)?Aa(e.missing,Xa,`session.completeness.missing`):{ok:!1,error:`session.completeness.missing must be an array`}:t}function $a(e){if(!F(e))return{ok:!1,error:`session must be a non-null object`};if(typeof e.id!=`string`)return{ok:!1,error:`session.id must be a string`};if(typeof e.title!=`string`)return{ok:!1,error:`session.title must be a string`};let t=ka(e.state,[`active`,`frozen`],`session.state`);return t.ok?Qa(e.completeness):t}function eo(e){if(!F(e))return{ok:!1,error:`privacy must be a non-null object`};if(e.reasoningExcluded!==!0)return{ok:!1,error:`privacy.reasoningExcluded must be true`};let t=e.excludedReasoningBlocks;if(typeof t!=`number`)return{ok:!1,error:`privacy.excludedReasoningBlocks must be a number`};if(!Number.isInteger(t)||t<0)return{ok:!1,error:`privacy.excludedReasoningBlocks must be a non-negative integer`};if(e.binaryAttachments!==`included-unchanged`)return{ok:!1,error:`privacy.binaryAttachments must equal "included-unchanged"`};if(!F(e.redactionCounts))return{ok:!1,error:`privacy.redactionCounts must be a non-null object`};let n=e.redactions;return Array.isArray(n)?Aa(n,Ja,`privacy.redactions`):{ok:!1,error:`privacy.redactions must be an array`}}function to(e){let t=e.conversations;if(!Array.isArray(t))return{ok:!1,error:`conversations must be an array`};let n=Aa(t,Ba,`conversations`);if(!n.ok)return n;let r=e.delegations;if(!Array.isArray(r))return{ok:!1,error:`delegations must be an array`};let i=Aa(r,Ya,`delegations`);if(!i.ok)return i;let a=e.attachments;return Array.isArray(a)?Aa(a,Ka,`attachments`):{ok:!1,error:`attachments must be an array`}}function no(e){let t=new Set,n=new Set;for(let r of e){if(!F(r)||typeof r.id!=`string`)continue;if(t.has(r.id))return{ok:!1,error:`duplicate conversation id "${r.id}"`};t.add(r.id);let e=r.messages;if(Array.isArray(e)){for(let t of e)if(!(!F(t)||typeof t.id!=`string`)){if(n.has(t.id))return{ok:!1,error:`duplicate message id "${t.id}"`};n.add(t.id)}}}return{ok:!0}}function ro(e){for(let t of e){if(!F(t))continue;let e=t.messages;if(!Array.isArray(e))continue;let n=typeof t.id==`string`?t.id:`?`,r=0;for(let t of e){if(!F(t)||typeof t.sequence!=`number`)continue;let e=t.sequence;if(e<=r)return{ok:!1,error:`sequences in conversation "${n}" must be strictly increasing`};r=e}}return{ok:!0}}function io(e){let t=[];for(let n of e){if(!F(n))continue;let e=n.content;if(Array.isArray(e))for(let n of e)F(n)&&n.type===`tool-call`&&typeof n.id==`string`&&t.push(n.id)}return t}function ao(e){let t=new Set;for(let n of e){if(!F(n))continue;let e=n.messages;if(Array.isArray(e))for(let n of io(e))t.add(n)}return t}function oo(e,t){for(let n of e){if(!F(n))continue;let e=n.messages;if(Array.isArray(e))for(let n of e){if(!F(n)||n.role!==`tool-result`)continue;let e=n.toolCallId;if(typeof e==`string`&&e!==``&&!t.has(e))return{ok:!1,error:`tool-result message references unknown toolCallId "${e}"`}}}return{ok:!0}}function so(e){return oo(e,ao(e))}function co(e,t){for(let n of e){if(!F(n)||n.type!==`attachment-ref`)continue;let e=n.attachmentId;if(typeof e!=`string`||!t.has(e))return{ok:!1,error:`attachment-ref references unknown attachmentId "${e}"`}}return{ok:!0}}function lo(e,t){for(let n of e){if(!F(n))continue;let e=n.messages;if(Array.isArray(e))for(let n of e){if(!F(n))continue;let e=n.content;if(!Array.isArray(e))continue;let r=co(e,t);if(!r.ok)return r}}return{ok:!0}}function uo(e,t){let n=new Set;for(let e of t)F(e)&&typeof e.id==`string`&&n.add(e.id);return lo(e,n)}function fo(e){let t=new Map;for(let n of e){if(!F(n)||typeof n.id!=`string`)continue;let e=new Set,r=n.messages;if(Array.isArray(r))for(let t of r)F(t)&&typeof t.id==`string`&&e.add(t.id);t.set(n.id,e)}return t}function po(e,t){let n=fo(t);for(let t=0;t<e.length;t++){let r=e[t];if(!F(r))continue;let i=r.sourceConversationId,a=r.sourceMessageId;if(typeof i!=`string`||typeof a!=`string`)continue;let o=n.get(i);if(!o)return{ok:!1,error:`attachments[${t}].sourceConversationId "${i}" does not exist`};if(!o.has(a))return{ok:!1,error:`attachments[${t}].sourceMessageId "${a}" does not exist in conversation "${i}"`}}return{ok:!0}}function mo(e){let t=new Map;for(let n of e){if(!F(n)||typeof n.id!=`string`)continue;let e=Array.isArray(n.messages)?n.messages:[];t.set(n.id,new Set(io(e)))}return t}function ho(e,t,n){for(let r=0;r<e.length;r++){let i=e[r];if(!F(i))continue;let a=i.sourceConversationId,o=i.targetConversationId;if(typeof a!=`string`||!t.has(a))return{ok:!1,error:`delegations[${r}].sourceConversationId "${a}" does not exist`};if(typeof o!=`string`||!t.has(o))return{ok:!1,error:`delegations[${r}].targetConversationId "${o}" does not exist`};let s=i.toolCallId;if(typeof s==`string`&&s!==``&&!n.get(a)?.has(s))return{ok:!1,error:`delegations[${r}].toolCallId "${s}" does not exist in source conversation "${a}"`}}return{ok:!0}}function go(e,t){let n=new Set;for(let e of t)F(e)&&typeof e.id==`string`&&n.add(e.id);return ho(e,n,mo(t))}function _o(e,t,n){if(e.kind!==`attachment`)return{ok:!0};let r=e.attachmentId;return typeof r!=`string`||!t.has(r)?{ok:!1,error:`${n}.attachmentId "${r}" does not reference a known attachment`}:{ok:!0}}function vo(e,t){let n=new Set;for(let e of t)F(e)&&typeof e.id==`string`&&n.add(e.id);for(let t=0;t<e.length;t++){let r=e[t];if(!F(r))continue;let i=r.target;if(!F(i))continue;let a=_o(i,n,`privacy.redactions[${t}].target`);if(!a.ok)return a}return{ok:!0}}function yo(e){let t=e.conversations,n=e.attachments,r=e.delegations,i=e.privacy,a=Array.isArray(i?.redactions)?i.redactions:[],o=no(t);if(!o.ok)return o;let s=ro(t);if(!s.ok)return s;let c=so(t);if(!c.ok)return c;let l=uo(t,n);if(!l.ok)return l;let u=po(n,t);if(!u.ok)return u;let d=go(r,t);return d.ok?vo(a,n):d}function bo(e){let t=to(e);return t.ok?yo(e):t}function xo(e){if(!F(e))return{ok:!1,error:`document must be a non-null object`};if(e.schemaVersion!==1)return{ok:!1,error:`schemaVersion must equal 1`};let t=Za(e.export);if(!t.ok)return t;let n=$a(e.session);if(!n.ok)return n;let r=eo(e.privacy);return r.ok?bo(e):r}async function So(e,t,n){let r=await n({method:`GET`,path:`/${e}/sites/${t}/config.json`,origin: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:Co(a),sourceUrl:a}}function Co(e){if(!e)return`da`;let t;try{t=new URL(e).host}catch{return`da`}return t===`api.aem.live`?`aem`:`da`}const wo=`slicc-sprinkle-routes`;function To(){try{let e=localStorage.getItem(wo);return e?JSON.parse(e):{}}catch{return{}}}function Eo(e){try{localStorage.setItem(wo,JSON.stringify(e))}catch{}}function Do(e){return To()[e]}function Oo(e,t){let n=To();n[e]=t,Eo(n)}function ko(e){let t=To();delete t[e],Eo(t)}function Ao(){return To()}function jo(e,t,n){return dt(t,n,`${e} adapter does not implement ${t}.${n}`)}function Mo(e,t,n,r){let i=n.filter(e=>typeof r?.[e]==`function`),a=n.map(n=>{let i=r?.[n];return[n,typeof i==`function`?i:()=>Promise.resolve(jo(e,t,n))]});return{...Object.fromEntries(a),allowlist:i,supports:e=>i.includes(e)}}function No(e){let{adapter:t,pageGestures:n}=e,r=n??{};return{adapter:t,browser:Mo(t,`browser`,mt,e.browser),network:Mo(t,`network`,ut,e.network),secrets:Mo(t,`secrets`,ht,e.secrets),devices:Mo(t,`devices`,gt,{usbRequest:r.usbRequest,serialRequest:r.serialRequest,hidRequest:r.hidRequest,...e.devices}),mounts:Mo(t,`mounts`,ft,{pickDirectory:r.pickDirectory,...e.mounts}),approvals:Mo(t,`approvals`,_t,e.approvals)}}function Po(e={}){return No({adapter:`connect`,pageGestures:e.pageGestures})}function Fo(e){let t=vt(()=>import(`./extension-ops-CF2mLDRW.js`).then(t=>t.createExtensionOps(e)));return No({adapter:e.adapter,pageGestures:e.pageGestures,network:{crossOriginFetch:e=>T(`network`,`crossOriginFetch`,async()=>(await t()).crossOriginFetch(e))},secrets:{listMaskedEnv:()=>T(`secrets`,`listMaskedEnv`,async()=>(await t()).secrets.listMaskedEnv()),getMasked:e=>T(`secrets`,`getMasked`,async()=>(await t()).secrets.getMasked(e)),set:e=>T(`secrets`,`set`,async()=>(await t()).secrets.set(e)),delete:e=>T(`secrets`,`delete`,async()=>(await t()).secrets.delete(e))},mounts:{signRequest:e=>T(`mounts`,`signRequest`,async()=>(await t()).signRequest(e))},approvals:{request:e=>T(`approvals`,`request`,async()=>(await t()).requestApproval(e))}})}function Io(e={}){let t=vt(()=>import(`./rest-ops-CLliBy-9.js`).then(t=>t.createRestOps(e)),e.controlTimeoutMs??1e4);return No({adapter:`node-rest`,pageGestures:e.pageGestures,network:{localNodeServer:()=>Promise.resolve({ok:!0,value:{available:!0}}),crossOriginFetch:e=>T(`network`,`crossOriginFetch`,async()=>(await t()).crossOriginFetch(e))},secrets:{listMaskedEnv:()=>T(`secrets`,`listMaskedEnv`,async()=>(await t()).secrets.listMaskedEnv()),getMasked:e=>T(`secrets`,`getMasked`,async()=>(await t()).secrets.getMasked(e)),set:e=>T(`secrets`,`set`,async()=>(await t()).secrets.set(e)),delete:e=>T(`secrets`,`delete`,async()=>(await t()).secrets.delete(e))},mounts:{signRequest:e=>T(`mounts`,`signRequest`,async()=>(await t()).signRequest(e))},approvals:{request:e=>T(`approvals`,`request`,async()=>(await t()).requestApproval(e))}})}function Lo(e,t={}){let{pageGestures:n}=t;switch(e){case`node-rest`:return Io({pageGestures:n});case`extension-direct`:case`extension-delegate`:return Fo({adapter:e,pageGestures:n});case`connect`:return Po({pageGestures:n})}}const Ro=e(`quick-llm`);async function zo(e){let t=d();if(!t)return Ro.debug(`No API key for active provider — skipping`),null;let n=u(),r=l(),i;if(i=e.modelId?Uo(n,e.modelId)??Uo(n,r):Bo(n,r),!i)return Ro.debug(`No model available for provider`,{providerId:n}),null;let a={role:`user`,content:e.prompt,timestamp:Date.now()},o={};i.provider===`adobe`&&(o[`X-Session-Id`]=Wo());try{let n=(await 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 Ro.debug(`Quick label call failed`,{error:e instanceof Error?e.message:String(e)}),null}}function Bo(e,t){let n=f(e);if(n.length===0)return;let r=n.find(e=>e.id===t)??n[0],i=Ho(r.id),a=n.filter(e=>Vo(e,r,i));return a.length===0?r:(a.sort((e,t)=>(e.cost?.input??0)-(t.cost?.input??0)),a[0])}function Vo(e,t,n){if(e.id===t.id)return!1;let r=t.cost?.input??1/0;if((e.cost?.input??1/0)>=r)return!1;let i=e.id.toLowerCase();switch(n){case`claude`:return i.includes(`haiku`);case`gpt`:return/(^|-)mini(-|$)|(^|-)nano(-|$)/.test(i);case`gemini`:return i.includes(`flash`);case`grok`:return/(^|-)mini(-|$)|(^|-)fast(-|$)/.test(i);case`unknown`:return!0}}function Ho(e){let t=e.toLowerCase();return t.includes(`claude`)?`claude`:t.includes(`gemini`)?`gemini`:t.includes(`grok`)?`grok`:/^(gpt|o\d)/.test(t)?`gpt`:`unknown`}function Uo(e,t){return f(e).find(e=>e.id===t)}function Wo(){return bt(`ui-quick-llm`)}const Go=e(`sudo-suggest`),Ko=[`You generalize a single shell command into a minimal glob pattern for an`,`allow-list rule. Output ONLY the pattern on one line — no prose, no quotes,`,`no backticks. Keep the leading command/sub-command verbatim and replace only`,`the volatile tail (args, paths, refs) with a single trailing "*".`,`Examples:`,` git push origin main -> git push*`,` rm -rf build/cache -> rm -rf*`,` npm install left-pad -> npm install*`].join(`
2
2
  `),qo=[`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 Jo(e,t){if(e.suggestedPattern&&e.suggestedPattern.trim().length>0)return e.suggestedPattern.trim();let n=e.detail.trim(),r=e.kind===`command`?Ko:qo,i=null;try{i=await zo({prompt:n,system:r,maxTokens:40,temperature:0,signal:t})}catch(e){Go.debug(`suggestPattern: quickLabel threw`,{error:e instanceof Error?e.message:String(e)}),i=null}return Yo(i)||n}function Yo(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 Xo=e(`sudo:capability-gesture`);function Zo(e,t={}){let n=t.suggest??Jo;return{async requestApproval(t,r){let i=r?.signal,a;if(t.suggestedPattern)a=t.suggestedPattern;else try{a=await n(t,i)}catch{a=t.detail}if(i?.aborted)return Xo.warn(`sudo approval aborted before prompting — denying`,{detail:t.detail}),{decision:`deny`};if(!e)return Xo.warn(`no CapabilityBroker injected for the sudo gesture hop — denying (composition bug, never a guessed transport)`,{detail:t.detail}),{decision:`deny`};let o=await e.approvals.request({kind:t.kind,detail:t.detail,suggestedPattern:a,...t.requester?{requester:t.requester}:{},...t.reason?{reason:t.reason}:{},...t.approver?{approver:t.approver}:{},...i?{signal:i}:{}});return o.ok?pt(o.value,a):(Xo.warn(`capability broker approvals.request failed — denying`,{message:o.message}),{decision:`deny`})}}}const Qo=e(`sudo:tray-first`);function $o(e,t={}){let n=t.suggest??Jo,r=t.timeoutMs??6e5,i=t.getClient??(async()=>{let{getPanelRpcClient:e}=await import(`./panel-rpc-DW7W4w6_.js`).then(e=>e.a);return e()});return{async requestApproval(t,a){if(a?.signal?.aborted)return{decision:`deny`};let o=t.suggestedPattern;if(!o)try{o=await n(t,a?.signal)}catch{o=t.detail}let s={...t,suggestedPattern:o},c=null;try{c=await i()}catch(e){Qo.debug?.(`panel-RPC client lookup threw — using native broker`,{error:e instanceof Error?e.message:String(e)})}if(c)try{let e=await c.call(`sudo-request`,{request:s,mode:`tray-first`},{timeoutMs:r});if(e?.handled!==!1)return es(e?.decision,o)}catch(e){Qo.warn(`tray-first sudo probe failed — using native broker`,{error:e instanceof Error?e.message:String(e)})}return e.requestApproval(s,a)}}}function es(e,t){if(!e||typeof e!=`object`)return{decision:`deny`};let n=e,r=n.attestation===`biometric`||n.attestation===`passcode`||n.attestation===`none`?n.attestation:void 0;return n.decision===`allow`?{decision:`allow`,...r?{attestation:r}:{}}:n.decision===`always`?{decision:`always`,pattern:typeof n.pattern==`string`&&n.pattern.trim().length>0?n.pattern.trim():t,...r?{attestation:r}:{}}:{decision:`deny`}}function ts(e,t){return{requestApproval(n){return t.enqueueSudoRequest(e,n)}}}function ns(){return`lick-${Date.now()}-${Math.random().toString(36).slice(2,10)}`}var rs=class{pending=new Map;timeoutMs;newId;setTimer;clearTimer;onAutoSettle;constructor(e={}){this.timeoutMs=e.timeoutMs??3e5,this.newId=e.newId??ns,this.setTimer=e.setTimer??((e,t)=>setTimeout(e,t)),this.clearTimer=e.clearTimer??(e=>clearTimeout(e)),this.onAutoSettle=e.onAutoSettle??(()=>{})}notifyAutoSettle(e,t,n){try{this.onAutoSettle(e,t,n)}catch{}}register(e,t,n){let r=this.newId();return{id:r,pending:new Promise(i=>{let a=null;Number.isFinite(this.timeoutMs)&&this.timeoutMs>0&&(a=this.setTimer(()=>{let e=this.pending.get(r);e&&(this.pending.delete(r),e.resolve(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 is(e){return ct(as(e))}function as(e){let t=Zo(e);return e?.adapter===`extension-direct`||e?.adapter===`extension-delegate`?t:$o(t)}let os=null;function ss(e){return os=e,()=>{os===e&&(os=null)}}function cs(){if(!os)throw new Sa(`session-not-found`);return os}const ls=`focus`,us={type:`leaf`,surfaceId:`chat`};function ds(e,t={},n={}){return{zones:{top:null,left:null,middle:null,right:null,bottom:null,...e},rowFr:{top:1,center:1,bottom:1,...n},colFr:{left:1,middle:1,right:1,...t}}}const fs={focus:{name:`focus`,tree:ds({left:us},{left:3,middle:1})}};function ps(e){return fs[e]??null}const ms=`progress`;function hs(e){return/^[A-Za-z_][A-Za-z0-9_]*$/.test(e)}async function gs(){try{let e=await Tt();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 Et(e.idbKey);if(!t)throw Error(`mount: no directory handle found in storage`);return await wt(t),t}throw Error(`mount: unexpected popup result`)}catch(e){throw Error(`mount: ${e instanceof Error?e.message:String(e)}`)}}async function _s(){if(typeof window>`u`||!(`showDirectoryPicker`in window))throw Error(`mount: local picker requires a user gesture in the panel (unavailable in this runtime). Ask the agent to mount it instead.`);try{return await window.showDirectoryPicker({mode:`readwrite`})}catch(e){throw e instanceof Error&&e.name===`AbortError`?Error(`mount: cancelled`):Error(`mount: ${e instanceof Error?e.message:String(e)}`)}}function vs(e){let t={positional:[],noProbe:!1,clearCache:!1,bodies:!1,json:!1};for(let n=0;n<e.length;n++){let r=e[n];if(r===`--source`)t.source=e[++n];else if(r===`--profile`)t.profile=e[++n];else if(r===`--backend`){let r=e[++n];r===`da`||r===`aem`?t.backend=r:t.backendError=r}else r===`--no-probe`?t.noProbe=!0:r===`--max-body-mb`?t.maxBodyMb=Number(e[++n]):r===`--clear-cache`?t.clearCache=!0:r===`--bodies`?t.bodies=!0:r===`--json`?t.json=!0:t.positional.push(r)}return t}function ys(e){let t=e.match(/^(da|aem):\/\/([^/]+)\/([^/]+)(?:\/(.*))?$/);return t?{scheme:t[1],org:t[2],name:t[3],path:(t[4]??``).replace(/^\/+/,``).replace(/\/+$/,``)}:null}const bs=new Set([`--source`,`--profile`,`--backend`,`--max-body-mb`]);function xs(e){for(let t=0;t<e.length;t++){let n=e[t];if(n===`--`)return!1;if(n===`--help`||n===`-h`)return!0;bs.has(n)&&t++}return!1}function Ss(e){return`aem://${e.org}/${e.name}${e.path?`/${e.path}`:``}`}var Cs=class{options;signedFetchS3;signedFetchDa;constructor(e){this.options=e,this.signedFetchS3=e.signedFetchS3,this.signedFetchDa=e.signedFetchDa}async execute(e,t,n){let r=e[0];if(r===`--help`||r===`-h`)return this.help();if(r===`unmount`||r===`-u`)return this.handleUnmount(e.slice(1),t,`mount unmount`);if(r===`list`||r===`-l`||r===`--list`)return this.handleList();if(r===`refresh`)return this.handleRefresh(e.slice(1),t,n);if(r===`info`)return this.handleInfo(e.slice(1),t);let i=vs(e);if(i.positional.length===0)return this.usageError(`mount: mount point required`);let a=this.resolvePath(i.positional[0],t);return i.backendError===void 0?i.source?i.source.startsWith(`s3://`)?this.mountS3(a,i):i.source.startsWith(`da://`)||i.source.startsWith(`aem://`)?this.mountAdobe(a,i):this.usageError(`mount: invalid source '${i.source}' — expected s3://..., da://... or aem://...`):this.mountLocal(a,n):this.usageError(`mount: invalid --backend '${i.backendError}' — expected 'da' or 'aem'`)}async executeUmount(e,t){return this.handleUnmount(e,t,`umount`)}async mountLocal(e,t){try{if((this.options.isScoop??(()=>!1))())throw Error(`mount: cannot mount local directories from a scoop (no UI). Ask the cone.`);let n=Se();if(!n){let n=await ws(e);if(n)return await this.options.fs.mount(e,n,{env:t}),{stdout:`Mounted '${n.describe().displayName}' → ${e}\nIndexing in background for fast file discovery.\nNote: External changes are not auto-detected — use 'mount refresh ${e}' after modifying files outside the browser.\n`,stderr:``,exitCode:0}}let r;if(n){let t=this.options.acquireLocalMountViaToolUI;if(!t)throw Error(`mount: tool UI not available in this runtime`);r=await t(n,e)}else r=v()?await gs():await _s();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=ys(t.source);if(!i)return this.usageError(`mount: invalid source '${t.source}' — expected da://org/repo or aem://org/site`);let a=i.scheme===`aem`?`aem`:`da`,o=``;if(t.backend)a=t.backend;else if(i.scheme===`da`)try{a=(await So(i.org,i.name,r)).backend,a===`aem`&&(o=`mount: ${i.org}/${i.name} is on Helix 6 — its content lives in the Source Bus at https://api.aem.live/${i.org}/sites/${i.name}/source, not admin.da.live. Mounting through aem://${i.org}/${i.name}. Pass --backend da to force the old endpoint.\n`)}catch(e){return{stdout:``,stderr:`mount: could not determine the content source for ${t.source} — ${e instanceof Error?e.message:String(e)}. Pass --backend da or --backend aem to skip this probe.\n`,exitCode:1}}let s=Ue(),c=new We({mountId:s,ttlMs:3e4}),l={source:a===`aem`?Ss(i):`da://${i.org}/${i.name}${i.path?`/${i.path}`:``}`,profile:n,cache:c,maxBodyBytes:t.maxBodyMb?t.maxBodyMb*1024*1024:void 0,mountId:s,signedFetch:r},u=a===`aem`?new 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(xs(e))return n===`umount`?this.umountHelp():this.help();let r=vs(e);if(r.positional.length===0)return{stdout:``,stderr:`${n}: path required\n`,exitCode:1};let i=this.resolvePath(r.positional[0],t);try{let e,t;if(r.clearCache){let{getAllMountEntries:n}=await import(`./mount-table-store-DrF_Ifaz.js`).then(e=>e.r),r=(await n()).find(e=>e.targetPath===i),a=r?.descriptor.kind;r&&(a===`s3`||a===`da`||a===`aem`)&&(e=r.descriptor.mountId,t=r.descriptor.kind)}await this.options.fs.unmount(i);let n=``;if(r.clearCache&&e&&t){let{RemoteMountCache:t}=await import(`./remote-cache-UwMD8EkX.js`).then(e=>e.n);await new t({mountId:e,ttlMs:3e4}).clearMount(),n=` (cache cleared)`}else r.clearCache&&(n=` (no remote cache to clear)`);return{stdout:`Unmounted ${i}${n}\n`,stderr:``,exitCode:0}}catch(e){return{stdout:``,stderr:`${n}: ${e instanceof Error?e.message:String(e)}\n`,exitCode:1}}}async handleList(){try{let e=this.options.fs.listMounts();if(e.length===0)return{stdout:`No active mounts
@@ -279,7 +279,7 @@ Examples:
279
279
  skill list
280
280
  skill info bluebubbles
281
281
  skill read bluebubbles
282
- `,stderr:``,exitCode:0};let r=t[0],i=await import(`./kernel-worker-QtCwYLwr.js`).then(e=>e.r);try{switch(r){case`list`:return eh(t,e,i,n.env.get(`PATH`));case`info`:{let n=t[1];if(!n)return{stdout:``,stderr:`skill: info requires a skill name
282
+ `,stderr:``,exitCode:0};let r=t[0],i=await import(`./kernel-worker-CKnv6zoK.js`).then(e=>e.r);try{switch(r){case`list`:return eh(t,e,i,n.env.get(`PATH`));case`info`:{let n=t[1];if(!n)return{stdout:``,stderr:`skill: info requires a skill name
283
283
  `,exitCode:1};let r=await i.getSkillInfo(e,n);return r?{stdout:Qm(r),stderr:``,exitCode:0}:{stdout:``,stderr:`skill: "${n}" not found\n`,exitCode:1}}case`read`:{let n=t[1];if(!n)return{stdout:``,stderr:`skill: read requires a skill name
284
284
  `,exitCode:1};let r=await i.readSkillInstructions(e,n);return r===null?{stdout:``,stderr:`skill: no SKILL.md found for "${n}"\n`,exitCode:1}:{stdout:r+`
285
285
  `,stderr:``,exitCode:0}}default:return{stdout:``,stderr:`skill: unknown command "${r}"\n`,exitCode:1}}}catch(e){return{stdout:``,stderr:`skill: ${e instanceof Error?e.message:String(e)}\n`,exitCode:1}}})}const nh=[{names:[`--branch`,`-b`],validate:e=>!e.startsWith(`-`)&&i(e),error:`upskill: --branch must be a git ref of [A-Za-z0-9._/-]+ with no "..", leading "-"/"/", trailing "/" or ".lock", or shell metacharacters`,apply:(e,t)=>{e.branch=t}},{names:[`--from`],validate:e=>Oi(e)!==null,error:`upskill: --from requires a GitHub source (owner/repo, owner/repo@branch, or a github.com URL)`,apply:(e,t)=>{e.from=t}},{names:[`--path`,`-p`],validate:e=>o(e),error:`upskill: --path must be a repo-relative sub-path of [A-Za-z0-9._/-]+ with no "..", leading "-"/"/", or shell metacharacters`,apply:(e,t)=>{e.path=t}}];function rh(e){let t={skills:[],dryRun:!1,json:!1};for(let n=0;n<e.length;n++){let r=e[n],i=nh.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 ih(e,t){return!e||!t||e.byteLength!==t.byteLength?!1:e.every((e,n)=>e===t[n])}async function ah(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 oh(e,t,n,r){let i=await ah(e,t);return mi(n)?i?{status:`kept-local`,write:!1}:{status:`added`,write:!0}:i?ih(i,r)?{status:`unchanged`,write:!1}:{status:`updated`,write:!0}:{status:`added`,write:!0}}async function sh(e,t,n,r){let i={changes:[],writes:[],removals:[]};for(let[r,a]of n){let n=`${t}/${r}`,{status:o,write:s}=await oh(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 hi(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 ch(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 bi(t),d=await Si(s,c,o.ref,u,!0,l||void 0);if(d&&r.sha===d&&await lh(e,n,r))return{...o,to:d,outcome:`current`,changes:[]};let f=await uh(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 sh(e,`${si}/${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 hh(e,{changes:h,writes:g,removals:_}),await Ci(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 lh(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 uh(e,t,n,r,i,a,o){let s=await _i(e,t,a,i??`main`);if(s.status===`ok`){let i=fi(s.files),a=n||dh(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:mh(i,a),path:a}}try{return{files:ph(fh(await gi(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 dh(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 fh(e){return new Map([...e].filter(([e])=>pi(e)))}function ph(e){return new Map([...e].sort(([e],[t])=>e.localeCompare(t)))}function mh(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);pi(e)&&r.set(e,i)}return ph(r)}async function hh(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 gh(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 qm(o,s,t);if(!c.ok)return{...a,outcome:`error`,error:c.error};let l=`${si}/${n}/SKILL.md`,u=await ah(e,l),d=new TextEncoder().encode(c.content),f=u!==void 0&&Gm(new TextDecoder().decode(u))===Gm(c.content);if(ih(u,d)||f)return{...a,changes:[{path:`SKILL.md`,status:`unchanged`}]};let p=u?`updated`:`added`;return i||(await e.mkdir(`${si}/${n}`,{recursive:!0}),await e.writeFile(l,d),await Ci(e,n,{...r,files:[`SKILL.md`]})),{...a,outcome:`updated`,changes:[{path:`SKILL.md`,status:p}]}}function _h(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 vh(e,t,n,r){let i=Oi(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 yh(e,t,n){if(t.length===0){let t=await xi(e);return{targets:t.provenanced,missing:[],skipped:t.unattributed}}let r=[],i=[];for(let a of t){let t=await wi(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?vh(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 bh(e){return e.reason===`not-installed`?`upskill: no skill named "${e.name}" is installed — check \`upskill list\`
@@ -290,7 +290,7 @@ Examples:
290
290
  `}function Ch(e,t,n,r,i){let a=t?`Skill update (dry run — nothing written):
291
291
  `:`Skill update:
292
292
  `;for(let n of e)a+=_h(n,t);if(i.length>0&&(a+=Sh(i)),!n&&r&&e.length>0){let n=i.length>0?`all ${xh(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 wh(e,t,n){let{targets:r,missing:i,skipped:a}=await yh(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 gh(e,t,i.name,i.provenance,n.dryRun):await ch(e,t,i.name,i.provenance,n.branch,n.dryRun));return{results:o,skipped:a,missing:i}}async function Th(e,t,n){let r=rh(e);if(r.error)return{stdout:``,stderr:`${r.error}\n`,exitCode:1};let{results:i,missing:a,skipped:o}=await wh(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`:Ch([],r.dryRun,!1,!0,o),stderr:``,exitCode:0}:{stdout:``,stderr:a.length?a.map(bh).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 Di();let l=a.map(bh).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:Ch(i,r.dryRun,c,u,o),stderr:l,exitCode:+!u}}function Eh(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 Dh(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 Oh(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}${Dh(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 kh(e,t,n){let r=await(await import(`./kernel-worker-QtCwYLwr.js`).then(e=>e.r)).discoverSkills(e),{collisions:i}=await Gn(e,Hn(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${Ym()}`,stderr:``,exitCode:0}:{...Kn(`upskill`,Zm(r,`Discoverable local skills`),i,{builtinNames:new Set(Ze())}),exitCode:0}}async function Ah(e,t,n){let{results:r,skipped:i}=await wh(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:Oh(r,i),stderr:c,exitCode:+!s}}async function jh(e,t,n,r){let i=Eh(e);return i.error?{stdout:``,stderr:`${i.error}\n`,exitCode:1}:i.outdated?Ah(t,n,i.json):kh(t,i.json,r)}async function Mh(e,t){let n=`${ci}/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(yi(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=Ei(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 Nh(e,t){let n=`${ci}/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: ${yi(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=Ei(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 Ph=[{label:`Tessl`,host:new URL(ci).host,fetch:Mh},{label:`browse.sh`,host:new URL(di).host,fetch:zm}];function Fh(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 Ih(e,t,n=1){let r=await Promise.allSettled(Ph.map(n=>n.fetch(e,t))),i=r.map(e=>e.status===`fulfilled`?e.value:[]),a=r.every(e=>e.status===`rejected`),o=Fh(i),s=``;for(let e=0;e<r.length;e++){let t=r[e];if(t.status===`rejected`){let n=Ph[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+=`
293
+ `)}\n`}async function kh(e,t,n){let r=await(await import(`./kernel-worker-CKnv6zoK.js`).then(e=>e.r)).discoverSkills(e),{collisions:i}=await Gn(e,Hn(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${Ym()}`,stderr:``,exitCode:0}:{...Kn(`upskill`,Zm(r,`Discoverable local skills`),i,{builtinNames:new Set(Ze())}),exitCode:0}}async function Ah(e,t,n){let{results:r,skipped:i}=await wh(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:Oh(r,i),stderr:c,exitCode:+!s}}async function jh(e,t,n,r){let i=Eh(e);return i.error?{stdout:``,stderr:`${i.error}\n`,exitCode:1}:i.outdated?Ah(t,n,i.json):kh(t,i.json,r)}async function Mh(e,t){let n=`${ci}/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(yi(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=Ei(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 Nh(e,t){let n=`${ci}/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: ${yi(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=Ei(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 Ph=[{label:`Tessl`,host:new URL(ci).host,fetch:Mh},{label:`browse.sh`,host:new URL(di).host,fetch:zm}];function Fh(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 Ih(e,t,n=1){let r=await Promise.allSettled(Ph.map(n=>n.fetch(e,t))),i=r.map(e=>e.status===`fulfilled`?e.value:[]),a=r.every(e=>e.status===`rejected`),o=Fh(i),s=``;for(let e=0;e<r.length;e++){let t=r[e];if(t.status===`rejected`){let n=Ph[e],r=t.reason instanceof Error?t.reason.message:String(t.reason);s+=`warning: ${n.label} registry unavailable (${n.host}): ${r}\n`}}if(o.length===0){let t=a?`${s}upskill: registries failed to respond\n`:s;return{stdout:`No skills found for "${e}"\n\nTry a different search term or browse the registries at https://tessl.io/registry or https://browse.sh\n`,stderr:t,exitCode:+!!a}}let c=o.length,l=Math.ceil(c/10),u=Math.max(1,Math.min(n,l)),d=(u-1)*10,f=o.slice(d,d+10),p=`Search results for "${e}" (page ${u}/${l}, ${c} total):\n\n`;for(let e of f){let t=e.qualityScore==null?` `:String(e.qualityScore).padStart(3),n=`[${e.source}]`,r=e.sourceRepo?` ${e.sourceRepo}`:``;p+=` ${e.name.padEnd(30)} ${t} ${n.padEnd(10)}${r}\n`,e.summary&&(p+=` ${e.summary}\n`),p+=`
294
294
  `}return u<l&&(p+=`Showing ${d+1}-${d+f.length} of ${c}. `,p+=`Next page: upskill search ${e} --page ${u+1}\n\n`),p+=`To install:
295
295
  `,p+=` From Tessl: upskill <owner/repo> --skill <name>
296
296
  `,p+=` From browse.sh: upskill browse:<hostname>/<task>
@@ -313,7 +313,7 @@ Examples:
313
313
  `,{stdout:s,stderr:``,exitCode:0}}function Uh(e){return!e||e.startsWith(`-`)?{stdout:``,stderr:`upskill: --branch requires a value
314
314
  `,exitCode:1}:i(e)?null:{stdout:``,stderr:`upskill: --branch must be a git ref of [A-Za-z0-9._/-]+ with no "..", leading "-"/"/", trailing "/" or ".lock", or shell metacharacters
315
315
  `,exitCode:1}}function Wh(e){let t={selectedSkills:[],listOnly:!1,installAll:!1,force:!1,sourceRef:``},n=0;for(;n<e.length;){let r=e[n];if(r===`--skill`)t.selectedSkills.push(e[++n]);else if(r===`--path`||r===`-p`){let r=e[++n];if(typeof r!=`string`||!o(r))return t.earlyReturn={stdout:``,stderr:`upskill: --path must be a repo-relative sub-path of [A-Za-z0-9._/-]+ with no "..", leading "-"/"/", or shell metacharacters
316
- `,exitCode:1},t;t.subPath=r}else if(r===`--list`)t.listOnly=!0;else if(r===`--all`)t.installAll=!0;else if(r===`--force`)t.force=!0;else if(r===`--branch`||r===`-b`){let r=Uh(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 Gh(e,t,n){if(!t)return{stdout:``,stderr:`upskill: ${e} requires a skill name\n`,exitCode:1};let r=await import(`./kernel-worker-QtCwYLwr.js`).then(e=>e.r);if(e===`info`){let e=await r.getSkillInfo(n,t);if(!e)return{stdout:``,stderr:`upskill: skill "${t}" not found\n`,exitCode:1};let i=await wi(n,t),a=i?Ti(i):"Installed from: (no provenance recorded — reinstall to enable `upskill update`)\n";return{stdout:Qm(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+`
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=Uh(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 Gh(e,t,n){if(!t)return{stdout:``,stderr:`upskill: ${e} requires a skill name\n`,exitCode:1};let r=await import(`./kernel-worker-CKnv6zoK.js`).then(e=>e.r);if(e===`info`){let e=await r.getSkillInfo(n,t);if(!e)return{stdout:``,stderr:`upskill: skill "${t}" not found\n`,exitCode:1};let i=await wi(n,t),a=i?Ti(i):"Installed from: (no provenance recorded — reinstall to enable `upskill update`)\n";return{stdout:Qm(e)+a,stderr:``,exitCode:0}}let i=await r.readSkillInstructions(n,t);return i===null?{stdout:``,stderr:`upskill: no SKILL.md found for "${t}"\n`,exitCode:1}:{stdout:i+`
317
317
  `,stderr:``,exitCode:0}}async function Kh(e,t,n,r,i,a,o,s){let c=``,l=``,u=0,d=e.length;for(let f=0;f<e.length;f++){let p=e[f],m=await Ai(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 qh(e,t,n,r,i,a,o,s){let c=``,l=``,u=0,d=e.length;for(let f=0;f<e.length;f++){let p=e[f],m=await ki(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 Jh(e,t,n,r,i,a,o,s){let c=``,l=``,u=0;for(let d of e){let e=await ki(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 Yh(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 Xh(e,t,n,r){let{owner:i,repo:a}=e,o=t.branch??e.branch,s=t.subPath??e.path,c=await bi(r),l=await ji(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:Yh(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:Yh(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 _i(i,a,r,o);if(e.status===`ok`){let r=await Si(i,a,o,c,!0,s),l=await Kh(u,i,a,fi(e.files),n,t.force,f,{kind:`github`,source:`${i}/${a}`,ref:o,sha:r});({output:p,errors:m,successCount:h}=l)}else{let e=await qh(u,i,a,c,n,t.force,o,f);({output:p,errors:m,successCount:h}=e)}}else({output:p,errors:m,successCount:h}=await Jh(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 Di()),{stdout:p,stderr:m,exitCode:+!!m}}async function Zh(e,t,n,r,i){switch(e[0]){case`tabs`:return Vh(t,n,r,e.includes(`--json`));case`recommendations`:return Hh(t,n,e.includes(`--install`));case`update`:case`upgrade`:return Th(e.slice(1),t,n);case`list`:return jh(e.slice(1),t,n,i);case`info`:case`read`:return Gh(e[0],e[1],t);case`search`:return $h(e,n);default:return null}}function Qh(e,t,n){return S(`upskill`,async(r,i)=>{if(r.length===0||r.includes(`--help`)||r.includes(`-h`))return $m();let a=await Zh(r,e,t,n,i.env.get(`PATH`));if(a)return a;let o=Wh(r);if(o.earlyReturn)return o.earlyReturn;if(!o.sourceRef)return $m();if(o.sourceRef.startsWith(`tessl:`))return eg(o.sourceRef,o.force,e,t);let s=Hm(o.sourceRef);if(s)return Jm(s.hostname,s.task,e,t,o.force);let c=Oi(o.sourceRef);return c?Xh(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 $h(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?Ih(a,t,i):$m()}async function eg(e,t,n,r){let i=e.slice(6);if(!i)return{stdout:``,stderr:`upskill: tessl: requires a skill name
318
318
  `,exitCode:1};let a=await Nh(i,r);if(`error`in a)return{stdout:``,stderr:`upskill: ${a.error}\n`,exitCode:1};let o=await bi(r);return ki(a.owner,a.repo,a.skillPath,a.skillName,n,o,t,r)}function tg(){return{stdout:`usage: afplay [-v volume] [-r rate] <file>
319
319
 
@@ -707,7 +707,7 @@ Examples:
707
707
  `;for(let n of e)t+=` ${n.id} ${n.name.padEnd(20)} ${n.cron.padEnd(15)}`,n.scoop&&(t+=` -> ${n.scoop}`),n.filter&&(t+=` [filtered]`),t+=` (${n.status})`,n.nextRun&&(t+=` next: ${new Date(n.nextRun).toLocaleString()}`),t+=`
708
708
  `;return t}async function dy(e,t){let n=C(e.slice(1),{});if(`error`in n)return cy(n.error);if(!t()){let e=await ty();if(!e)return iy(`list`);let t=await e.listCronTasks();return t.length===0?{stdout:`No active cron tasks
709
709
  `,stderr:``,exitCode:0}:{stdout:uy(t),stderr:``,exitCode:0}}let{ok:r,data:i}=await oy(`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:uy(a),stderr:``,exitCode:0}}async function fy(e,t){let n=e[0],r=C(e.slice(1),{});if(`error`in r)return cy(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 ty();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}:iy(`delete`)}let{ok:a,status:o,data:s}=await oy(`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 py(e={}){let t=e.hasLocalNodeServer??(()=>!1);return S(`crontask`,async(e,n)=>{let r=e[0];if(!r||w(e,{valueFlags:sy}))return ay();try{switch(r){case`create`:return await ly(e,n.env,t);case`list`:return await dy(e,t);case`delete`:case`kill`:return await fy(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 my(e){return S(`curlwright`,async(t,n)=>{let{runCurlwright:r}=await import(`./run-DJgvhNq4.js`);return r(e,t,n)})}const hy=`slicc-fs`;async function gy(){try{let e=globalThis.indexedDB;if(!e)return!1;let t=e.databases;return typeof t!=`function`||(await t.call(e)).some(e=>e.name===hy)}catch{return!0}}async function _y(){let e=globalThis.indexedDB;return e?new Promise(t=>{let n;try{n=e.deleteDatabase(hy)}catch{t(`error`);return}n.onsuccess=()=>t(`deleted`),n.onerror=()=>t(`error`),n.onblocked=()=>t(`blocked`)}):`error`}async function vy(){if(!await gy())return{kind:`absent`,message:`legacy slicc-fs IDB not present — nothing to clean`};let e=await _y();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 yy(){return`slicc-fs-cleanup — delete the legacy slicc-fs IndexedDB
710
+ `,stderr:``,exitCode:0}:{stdout:uy(a),stderr:``,exitCode:0}}async function fy(e,t){let n=e[0],r=C(e.slice(1),{});if(`error`in r)return cy(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 ty();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}:iy(`delete`)}let{ok:a,status:o,data:s}=await oy(`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 py(e={}){let t=e.hasLocalNodeServer??(()=>!1);return S(`crontask`,async(e,n)=>{let r=e[0];if(!r||w(e,{valueFlags:sy}))return ay();try{switch(r){case`create`:return await ly(e,n.env,t);case`list`:return await dy(e,t);case`delete`:case`kill`:return await fy(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 my(e){return S(`curlwright`,async(t,n)=>{let{runCurlwright:r}=await import(`./run-BTTgZPb_.js`);return r(e,t,n)})}function hy(e,t={}){if(!Number.isFinite(e)||e<0)return``;if(t.si){if(e<1e3)return`${Math.round(e)} B`;let t=[`kB`,`MB`,`GB`,`TB`],n=e/1e3,r=0;for(;n>=1e3&&r<t.length-1;)n/=1e3,r+=1;return`${n<10?n.toFixed(1):Math.round(n)} ${t[r]}`}if(e<1024)return Number.isInteger(e)?`${e} B`:e>=.1?`${e.toFixed(1)} B`:e>0?`${Math.max(.01,Number(e.toFixed(2)))} B`:`0 B`;let n=[`KB`,`MB`,`GB`,`TB`,`PB`],r=e,i=-1;for(;r>=1024&&i<n.length-1;)r/=1024,i+=1;return`${r.toFixed(1)} ${n[i]}`}function gy(e){return hy(e,{si:!1})}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
711
711
 
712
712
  Usage:
713
713
  slicc-fs-cleanup Delete the legacy slicc-fs IDB.
@@ -716,7 +716,7 @@ Usage:
716
716
  SLICC's filesystem lives in OPFS; the legacy slicc-fs IndexedDB from
717
717
  the pre-OPFS era is never read anymore. This command deletes it on
718
718
  explicit invocation to reclaim the space.
719
- `}const by={deleted:0,absent:0,blocked:1,error:1};function xy(e={}){let t=e.runCleanup??vy;return S(`slicc-fs-cleanup`,async e=>{if(e.includes(`--help`)||e.includes(`-h`))return{stdout:yy(),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=by[n.kind];return r===0?{stdout:`${n.message}\n`,stderr:``,exitCode:r}:{stdout:``,stderr:`slicc-fs-cleanup: ${n.message}\n`,exitCode:r}})}function Sy(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 S(`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
720
720
 
721
721
  Usage:
722
722
  ${e} Show diagnostics (raw bytes).
@@ -724,16 +724,16 @@ Usage:
724
724
  ${e} --help Show this help.
725
725
 
726
726
  Read-only. Cleanup of the legacy IndexedDB lives in 'slicc-fs-cleanup'.
727
- `}function Cy(){return`diskutil — VFS diagnostics alias
727
+ `}function Ty(){return`diskutil — VFS diagnostics alias
728
728
 
729
729
  Usage:
730
730
  diskutil info Show VFS diagnostics (alias for 'df -h').
731
731
  diskutil --help Show this help.
732
732
 
733
733
  Read-only. See 'df --help' for the underlying command.
734
- `}function wy(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 Ty(e,t){return e===null?`unavailable`:t?wy(e):`${e}`}async function Ey(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??gy;try{o=await s()}catch{o=null}return{backend:t,usage:n,quota:r,persisted:i,legacyIdbPresent:o}}function Dy(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: ${Ty(e.usage,t)}`,`Quota: ${Ty(e.quota,t)}`,`Used: ${n}`,`Persisted: ${r}`,`Legacy IDB: ${i}`].join(`
735
- `)}\n`}function Oy(e={}){return S(`df`,async t=>{if(t.includes(`--help`))return{stdout:Sy(`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:Dy(await Ey(e),i),stderr:``,exitCode:0}})}function ky(e={}){return S(`diskutil`,async t=>{if(t.includes(`--help`))return{stdout:Cy(),stderr:``,exitCode:0};let n=t[0];return n===`info`?{stdout:Dy(await Ey(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 Ay=e(`di`),jy=new WeakMap;async function My(e,t){let n=jy.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 Ay.error(`failed to read pyodide-lock.json`,e),null}else{let e=`${br}pyodide-lock.json`,n;try{n=await t(e,{method:`GET`,headers:{Accept:`application/json`},timeoutMs:3e4})}catch(e){return Ay.error(`failed to fetch pyodide-lock.json from CDN`,e),null}if(n.status<200||n.status>=300)return Ay.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 Ay.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(_r(t.name??e),t);return jy.set(e,a),a}async function Ny(e,t,n,r){let i=await My(e,t);if(!i)return null;let a=i.get(_r(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:`${br}${a.file_name}`}}function Py(e,t){let n=`https://pypi.org/pypi/${encodeURIComponent(e)}`;return t?`${n}/${encodeURIComponent(t)}/json`:`${n}/json`}function Fy(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 Iy(e,t,n){let r=`di: PyPI lookup for ${t}${n?`==${n}`:``}`,i=Py(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=>Fy(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 Ly=`/workspace/python_wheels`,Ry=/^[A-Za-z0-9][A-Za-z0-9._-]*$/;function zy(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(),!Ry.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 By(e){return e instanceof Error?e:Error(String(e))}async function Vy(e,t,n){return await Ny(e,t,n.name,n.version)||Iy(t,n.name,n.version)}async function Hy(e,t,n){let r=await Vy(e,t,n),i=await kr(t,{url:r.url,sha256:r.sha256,label:`di: download ${r.name}==${r.version}`});await e.mkdir(Ly,{recursive:!0});let a=x(Ly,r.fileName),o=!0;if(await e.exists(a)){let t=await e.readFile(a,{encoding:`binary`}),n=await hr(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 Uy(e,t,n,r){let i=await Cr(e,n),a=[],o=[];for(let n of r){let r;try{r=zy(n)}catch(e){o.push({spec:n,error:By(e)});continue}try{a.push(await Hy(e,t,r))}catch(e){o.push({spec:n,error:By(e)})}}if(a.length>0){let t=await Er(e,i),n=t.dependencies,r=await gr(e,i);for(let e of a)n=pr(n,e.name,e.version),r=Dr(r,{name:e.name,version:e.version,source:e.source,fileName:e.fileName,sha256:e.sha256});await Sr(e,i,{...t,dependencies:n}),await yr(e,i,r)}return{results:a,errors:o,manifestDir:i}}async function Wy(e,t){let n=await xr(e,t);if(!n)return null;let r=await Er(e,n),i=await gr(e,n),a=new Map(i.map(e=>[_r(e.name),e]));return r.dependencies.map(e=>{let{name:t,version:n}=vr(e),r=a.get(_r(t));return{name:t,version:n||r?.version||`?`,source:r?.source??`unknown`}})}const Gy=[];function Ky(e){return`${e} - minimal Python package manager (pure-Python + Pyodide wheels)
734
+ `}function Ey(e,t){return e===null?`unavailable`:t?gy(e):`${e}`}async function Dy(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 Oy(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: ${Ey(e.usage,t)}`,`Quota: ${Ey(e.quota,t)}`,`Used: ${n}`,`Persisted: ${r}`,`Legacy IDB: ${i}`].join(`
735
+ `)}\n`}function ky(e={}){return S(`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:Oy(await Dy(e),i),stderr:``,exitCode:0}})}function Ay(e={}){return S(`diskutil`,async t=>{if(t.includes(`--help`))return{stdout:Ty(),stderr:``,exitCode:0};let n=t[0];return n===`info`?{stdout:Oy(await Dy(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 jy=e(`di`),My=new WeakMap;async function Ny(e,t){let n=My.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 jy.error(`failed to read pyodide-lock.json`,e),null}else{let e=`${br}pyodide-lock.json`,n;try{n=await t(e,{method:`GET`,headers:{Accept:`application/json`},timeoutMs:3e4})}catch(e){return jy.error(`failed to fetch pyodide-lock.json from CDN`,e),null}if(n.status<200||n.status>=300)return jy.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 jy.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(_r(t.name??e),t);return My.set(e,a),a}async function Py(e,t,n,r){let i=await Ny(e,t);if(!i)return null;let a=i.get(_r(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:`${br}${a.file_name}`}}function Fy(e,t){let n=`https://pypi.org/pypi/${encodeURIComponent(e)}`;return t?`${n}/${encodeURIComponent(t)}/json`:`${n}/json`}function Iy(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 Ly(e,t,n){let r=`di: PyPI lookup for ${t}${n?`==${n}`:``}`,i=Fy(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=>Iy(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 Ry=`/workspace/python_wheels`,zy=/^[A-Za-z0-9][A-Za-z0-9._-]*$/;function By(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(),!zy.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 Vy(e){return e instanceof Error?e:Error(String(e))}async function Hy(e,t,n){return await Py(e,t,n.name,n.version)||Ly(t,n.name,n.version)}async function Uy(e,t,n){let r=await Hy(e,t,n),i=await kr(t,{url:r.url,sha256:r.sha256,label:`di: download ${r.name}==${r.version}`});await e.mkdir(Ry,{recursive:!0});let a=x(Ry,r.fileName),o=!0;if(await e.exists(a)){let t=await e.readFile(a,{encoding:`binary`}),n=await hr(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 Wy(e,t,n,r){let i=await Cr(e,n),a=[],o=[];for(let n of r){let r;try{r=By(n)}catch(e){o.push({spec:n,error:Vy(e)});continue}try{a.push(await Uy(e,t,r))}catch(e){o.push({spec:n,error:Vy(e)})}}if(a.length>0){let t=await Er(e,i),n=t.dependencies,r=await gr(e,i);for(let e of a)n=pr(n,e.name,e.version),r=Dr(r,{name:e.name,version:e.version,source:e.source,fileName:e.fileName,sha256:e.sha256});await Sr(e,i,{...t,dependencies:n}),await yr(e,i,r)}return{results:a,errors:o,manifestDir:i}}async function Gy(e,t){let n=await xr(e,t);if(!n)return null;let r=await Er(e,n),i=await gr(e,n),a=new Map(i.map(e=>[_r(e.name),e]));return r.dependencies.map(e=>{let{name:t,version:n}=vr(e),r=a.get(_r(t));return{name:t,version:n||r?.version||`?`,source:r?.source??`unknown`}})}const Ky=[];function qy(e){return`${e} - minimal Python package manager (pure-Python + Pyodide wheels)
737
737
 
738
738
  Usage:
739
739
  ${e} add <pkg>[@<version>] [<pkg> ...] resolve, stage, and record wheels
@@ -746,20 +746,20 @@ Resolution:
746
746
  staged under /workspace/python_wheels/ and recorded in pyproject.toml + uv.lock.
747
747
 
748
748
  Anything else is not implemented in SLICC's ${e} subset; use real uv locally.
749
- `}function qy(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 Jy(e){return e instanceof Error?e.message:String(e)}function Yy(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 Xy(e,t,n,r){let i=C(t,{value:Gy});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 Uy(r.fs,r.fetch,n.cwd,a)}catch(t){return{stdout:``,stderr:`${e}: ${Jy(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}: ${Jy(t.error)}`);return{stdout:s.length>0?`${s.join(`
749
+ `}function Jy(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 Yy(e){return e instanceof Error?e.message:String(e)}function Xy(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 Zy(e,t,n,r){let i=C(t,{value:Ky});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 Wy(r.fs,r.fetch,n.cwd,a)}catch(t){return{stdout:``,stderr:`${e}: ${Yy(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}: ${Yy(t.error)}`);return{stdout:s.length>0?`${s.join(`
751
751
  `)}\n`:``,stderr:c.length>0?`${c.join(`
752
- `)}\n`:``,exitCode:o.errors.length===0?0:1}}async function Zy(e,t,n,r){let i=C(t,{value:Gy});if(`error`in i)return{stdout:``,stderr:`${e}: ${i.error}\n`,exitCode:1};let a=await Wy(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:Yy(a),stderr:``,exitCode:0}}function Qy(e,t){return S(e,async(n,r)=>{if(n.length===0)return{stdout:Ky(e),stderr:`${e}: missing verb\n`,exitCode:1};if(w(n,{valueFlags:Gy}))return{stdout:Ky(e),stderr:``,exitCode:0};let i=n[0],a=n.slice(1);return i===`add`?Xy(e,a,r,t):i===`list`?Zy(e,a,r,t):qy(e,i)})}const $y=`https://cloudflare-dns.com/dns-query`,eb=`https://dns.quad9.net/dns-query`,tb=`usage: dig <name> [type] [@server] [+short] [--json]`,nb=[`A`,`AAAA`,`MX`,`TXT`,`CNAME`,`NS`,`SOA`,`SRV`,`PTR`,`CAA`],rb={"1.1.1.1":$y,"1.0.0.1":$y,"cloudflare-dns.com":$y,"8.8.8.8":`https://dns.google/resolve`,"8.8.4.4":`https://dns.google/resolve`,"dns.google":`https://dns.google/resolve`,"9.9.9.9":eb,"149.112.112.112":eb,"dns.quad9.net":eb};function ib(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 ab(e){if(e.includes(`%`))return;let t=e;if(e.includes(`.`)){let n=e.lastIndexOf(`:`),r=n>=0?ib(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 ob(e){let t=ib(e);if(t)return`${t.reverse().join(`.`)}.in-addr.arpa`;let n=ab(e);if(n)return`${n.map(e=>e.padStart(4,`0`)).join(``).split(``).reverse().join(`.`)}.ip6.arpa`}function sb(e){return{kind:`error`,message:`dig: '${e}' is not a valid record type; ${tb}\n`}}function cb(e,t,n){let r=e[t+1]?.trim();if(!r)return{error:{kind:`error`,message:`dig: -x requires an address
753
- `}};let i=ob(r);return i?n.name?{error:sb(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 lb(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 Qy(e,t,n,r){let i=C(t,{value:Ky});if(`error`in i)return{stdout:``,stderr:`${e}: ${i.error}\n`,exitCode:1};let a=await Gy(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:Xy(a),stderr:``,exitCode:0}}function $y(e,t){return S(e,async(n,r)=>{if(n.length===0)return{stdout:qy(e),stderr:`${e}: missing verb\n`,exitCode:1};if(w(n,{valueFlags:Ky}))return{stdout:qy(e),stderr:``,exitCode:0};let i=n[0],a=n.slice(1);return i===`add`?Zy(e,a,r,t):i===`list`?Qy(e,a,r,t):Jy(e,i)})}const eb=`https://cloudflare-dns.com/dns-query`,tb=`https://dns.quad9.net/dns-query`,nb=`usage: dig <name> [type] [@server] [+short] [--json]`,rb=[`A`,`AAAA`,`MX`,`TXT`,`CNAME`,`NS`,`SOA`,`SRV`,`PTR`,`CAA`],ib={"1.1.1.1":eb,"1.0.0.1":eb,"cloudflare-dns.com":eb,"8.8.8.8":`https://dns.google/resolve`,"8.8.4.4":`https://dns.google/resolve`,"dns.google":`https://dns.google/resolve`,"9.9.9.9":tb,"149.112.112.112":tb,"dns.quad9.net":tb};function ab(e){let t=e.split(`.`);if(t.length!==4)return;let n=t.map(Number);if(!(t.some(e=>!/^[0-9]+$/.test(e))||n.some(e=>!Number.isInteger(e)||e<0||e>255)))return n}function ob(e){if(e.includes(`%`))return;let t=e;if(e.includes(`.`)){let n=e.lastIndexOf(`:`),r=n>=0?ab(e.slice(n+1)):void 0;if(!r)return;let i=[r[0]*256+r[1],r[2]*256+r[3]].map(e=>e.toString(16));t=`${e.slice(0,n+1)}${i.join(`:`)}`}let n=t.split(`::`);if(n.length>2)return;let r=n[0]?n[0].split(`:`):[],i=n[1]?n[1].split(`:`):[],a=[...r,...i];if(!a.some(e=>!/^[0-9a-f]{1,4}$/i.test(e))){if(n.length===1)return a.length===8?a:void 0;if(!(a.length>=8))return[...r,...Array(8-a.length).fill(`0`),...i]}}function sb(e){let t=ab(e);if(t)return`${t.reverse().join(`.`)}.in-addr.arpa`;let n=ob(e);if(n)return`${n.map(e=>e.padStart(4,`0`)).join(``).split(``).reverse().join(`.`)}.ip6.arpa`}function cb(e){return{kind:`error`,message:`dig: '${e}' is not a valid record type; ${nb}\n`}}function lb(e,t,n){let r=e[t+1]?.trim();if(!r)return{error:{kind:`error`,message:`dig: -x requires an address
753
+ `}};let i=sb(r);return i?n.name?{error:cb(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 ub(e,t,n){return n.server?{error:{kind:`error`,message:`dig: multiple @server arguments
754
754
  `}}:(n.server=e.slice(1).trim(),n.server?{nextIndex:t}:{error:{kind:`error`,message:`dig: empty @server argument
755
- `}})}function ub(e,t,n){let r=e.trim(),i=r.toUpperCase(),a=n.name?.toUpperCase();if(nb.includes(i)&&!n.type&&n.name)n.type=i;else if(!n.name)n.name=r;else if(a&&nb.includes(a)&&!n.type)n.name=r,n.type=a;else return{error:sb(r)};return{nextIndex:t}}function db(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`?cb(e,t,n):r.startsWith(`@`)?lb(r,t,n):r.startsWith(`-`)?{error:{kind:`error`,message:`dig: unknown option: ${r}\n`}}:ub(r,t,n)}function fb(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${tb}\n`};let t=e.server?.toLowerCase(),n=t?rb[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 pb(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=db(e,n,t);if(`error`in r)return r.error;n=r.nextIndex}return fb(t)}const mb={A:1,NS:2,CNAME:5,SOA:6,PTR:12,MX:15,TXT:16,AAAA:28,SRV:33,CAA:257},hb=new Set(`#/:<>?@[\\]^|`);function gb(e){return Array.from(e).some(e=>{let t=e.codePointAt(0)??0;return t<=127&&(t<33||t===127||hb.has(e))})}function _b(e){if(gb(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 vb(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(_b).join(`.`)}catch{throw Error(`invalid DNS name: ${e}`)}}function yb(e,t){let n=vb(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=mb[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 bb(e,n,r){return`${e}?dns=${t(yb(n,r)).replaceAll(`+`,`-`).replaceAll(`/`,`_`).replace(/=+$/,``)}`}function xb(e,t,n){if(t<0||n<0||t+n>e.length)throw Error(`truncated DNS message`)}function Sb(e,t){let n=[],r=new Set,i=t,a=t,o=!1,s=1;for(let t=0;t<=e.length;t+=1){xb(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){xb(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(xb(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 xb(e,t,2),new DataView(e.buffer,e.byteOffset,e.byteLength).getUint16(t)}function Cb(e,t){return xb(e,t,4),new DataView(e.buffer,e.byteOffset,e.byteLength).getUint32(t)}function wb(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 Tb(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 Eb(e,t,n){let r=t,i=[];for(;r<n;){let t=e[r];if(xb(e,r+1,t),r+t+1>n)throw Error(`invalid TXT record`);i.push(Tb(e,r+1,r+1+t)),r+=t+1}return i.join(` `)}function Db(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 Ob(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 wb(e,n)}if([2,5,12].includes(t)){let t=Sb(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=Sb(e,n+2);if(t.nextOffset!==r)throw Error(`invalid MX record`);return`${L(e,n)} ${t.name}`}if(t===16)return Eb(e,n,r);if(t===6){let t=Sb(e,n),i=Sb(e,t.nextOffset);if(i.nextOffset+20!==r)throw Error(`invalid SOA record`);let a=Array.from({length:5},(t,n)=>Cb(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=Sb(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 Db(e,n,r);let i=Array.from(e.subarray(n,r),e=>e.toString(16).padStart(2,`0`));return`\\# ${r-n} ${i.join(``)}`}function kb(e,t,n,r){let i=[],a=t;for(let t=0;t<n;t+=1){let t=Sb(e,a);a=t.nextOffset,xb(e,a,10);let n=L(e,a),o=L(e,a+2),s=Cb(e,a+4),c=L(e,a+8),l=a+10,u=l+c;xb(e,l,c);let d=Ob(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 Ab(e){return e.replace(/[A-Z]/g,e=>e.toLowerCase())}function jb(e,t,n,r,i){let a=vb(r).split(`.`).filter(Boolean);if(!(e.labels.length===a.length&&e.labels.every((e,t)=>Ab(e)===Ab(a[t])))||t!==mb[i]||n!==1)throw Error(`unexpected DNS response question`)}function Mb(e,t,n){xb(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=Sb(e,c);c=l.nextOffset,xb(e,c,4),jb(l,L(e,c),L(e,c+2),t,n),c+=4;let u=kb(e,c,a,!0);if(kb(e,kb(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 Nb={1:`A`,2:`NS`,5:`CNAME`,6:`SOA`,12:`PTR`,15:`MX`,16:`TXT`,28:`AAAA`,33:`SRV`,257:`CAA`},Pb={0:`NOERROR`,1:`FORMERR`,2:`SERVFAIL`,3:`NXDOMAIN`,4:`NOTIMP`,5:`REFUSED`};function Fb(){return{stdout:`usage: dig <name> [type] [@server] [+opts] [--json]
755
+ `}})}function db(e,t,n){let r=e.trim(),i=r.toUpperCase(),a=n.name?.toUpperCase();if(rb.includes(i)&&!n.type&&n.name)n.type=i;else if(!n.name)n.name=r;else if(a&&rb.includes(a)&&!n.type)n.name=r,n.type=a;else return{error:cb(r)};return{nextIndex:t}}function fb(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`?lb(e,t,n):r.startsWith(`@`)?ub(r,t,n):r.startsWith(`-`)?{error:{kind:`error`,message:`dig: unknown option: ${r}\n`}}:db(r,t,n)}function pb(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${nb}\n`};let t=e.server?.toLowerCase(),n=t?ib[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 mb(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=fb(e,n,t);if(`error`in r)return r.error;n=r.nextIndex}return pb(t)}const hb={A:1,NS:2,CNAME:5,SOA:6,PTR:12,MX:15,TXT:16,AAAA:28,SRV:33,CAA:257},gb=new Set(`#/:<>?@[\\]^|`);function _b(e){return Array.from(e).some(e=>{let t=e.codePointAt(0)??0;return t<=127&&(t<33||t===127||gb.has(e))})}function vb(e){if(_b(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 yb(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(vb).join(`.`)}catch{throw Error(`invalid DNS name: ${e}`)}}function bb(e,t){let n=yb(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=hb[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 xb(e,n,r){return`${e}?dns=${t(bb(n,r)).replaceAll(`+`,`-`).replaceAll(`/`,`_`).replace(/=+$/,``)}`}function Sb(e,t,n){if(t<0||n<0||t+n>e.length)throw Error(`truncated DNS message`)}function Cb(e,t){let n=[],r=new Set,i=t,a=t,o=!1,s=1;for(let t=0;t<=e.length;t+=1){Sb(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){Sb(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(Sb(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 Sb(e,t,2),new DataView(e.buffer,e.byteOffset,e.byteLength).getUint16(t)}function wb(e,t){return Sb(e,t,4),new DataView(e.buffer,e.byteOffset,e.byteLength).getUint32(t)}function Tb(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 Eb(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 Db(e,t,n){let r=t,i=[];for(;r<n;){let t=e[r];if(Sb(e,r+1,t),r+t+1>n)throw Error(`invalid TXT record`);i.push(Eb(e,r+1,r+1+t)),r+=t+1}return i.join(` `)}function Ob(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 kb(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 Tb(e,n)}if([2,5,12].includes(t)){let t=Cb(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=Cb(e,n+2);if(t.nextOffset!==r)throw Error(`invalid MX record`);return`${L(e,n)} ${t.name}`}if(t===16)return Db(e,n,r);if(t===6){let t=Cb(e,n),i=Cb(e,t.nextOffset);if(i.nextOffset+20!==r)throw Error(`invalid SOA record`);let a=Array.from({length:5},(t,n)=>wb(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=Cb(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 Ob(e,n,r);let i=Array.from(e.subarray(n,r),e=>e.toString(16).padStart(2,`0`));return`\\# ${r-n} ${i.join(``)}`}function Ab(e,t,n,r){let i=[],a=t;for(let t=0;t<n;t+=1){let t=Cb(e,a);a=t.nextOffset,Sb(e,a,10);let n=L(e,a),o=L(e,a+2),s=wb(e,a+4),c=L(e,a+8),l=a+10,u=l+c;Sb(e,l,c);let d=kb(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 jb(e){return e.replace(/[A-Z]/g,e=>e.toLowerCase())}function Mb(e,t,n,r,i){let a=yb(r).split(`.`).filter(Boolean);if(!(e.labels.length===a.length&&e.labels.every((e,t)=>jb(e)===jb(a[t])))||t!==hb[i]||n!==1)throw Error(`unexpected DNS response question`)}function Nb(e,t,n){Sb(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=Cb(e,c);c=l.nextOffset,Sb(e,c,4),Mb(l,L(e,c),L(e,c+2),t,n),c+=4;let u=Ab(e,c,a,!0);if(Ab(e,Ab(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 Pb={1:`A`,2:`NS`,5:`CNAME`,6:`SOA`,12:`PTR`,15:`MX`,16:`TXT`,28:`AAAA`,33:`SRV`,257:`CAA`},Fb={0:`NOERROR`,1:`FORMERR`,2:`SERVFAIL`,3:`NXDOMAIN`,4:`NOTIMP`,5:`REFUSED`};function Ib(){return{stdout:`usage: dig <name> [type] [@server] [+opts] [--json]
757
757
  dig -x <address> [@server] [+opts] [--json]
758
758
  dig -v | --version
759
759
 
760
760
  Resolve DNS records via DNS-over-HTTPS.
761
761
 
762
- Supported types: `+nb.join(`, `)+` (default: A).
762
+ Supported types: `+rb.join(`, `)+` (default: A).
763
763
 
764
764
  Flags:
765
765
  @server use a supported Cloudflare, Google, or Quad9 resolver
@@ -769,11 +769,11 @@ Flags:
769
769
  +opts other dig +options are accepted as no-ops
770
770
  --json resolver response as pretty-printed JSON
771
771
  -h, --help show this help
772
- `,stderr:``,exitCode:0}}function Ib(e){return Nb[e]??`TYPE${e}`}function Lb(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}: ${Pb[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 Lb(e){return Pb[e]??`TYPE${e}`}function Rb(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}: ${Fb[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
773
773
  `,stderr:n,exitCode:0}:a?{stdout:`${o.map(e=>e.data).join(`
774
- `)}\n`,stderr:n,exitCode:0}:{stdout:`${o.map(e=>`${e.name}\t${e.TTL??0}\tIN\t${Ib(e.type)}\t${e.data}`).join(`
775
- `)}\n`,stderr:n,exitCode:0}}async function Rb(e,t){let n=pb(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===eb,c,l;try{c=s?bb(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 Lb(s?Mb(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 zb(){let e=p();return S(`dig`,async t=>t.includes(`--help`)||t.includes(`-h`)?Fb():Rb(t,e))}const Bb=[`api-catalog`,`service-desc`,`service-meta`,`status`,`https://llmstxt.org/rel/llms-txt`];async function Vb(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)Bb.includes(e)&&(o.has(e)||(o.add(e),a.push(Hb(n,s.href,r,t.signal).then(t=>Ub(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 Hb(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 Ub(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 Wb=[`--follow`];function Gb(e){return async(t,n)=>{let r=typeof t==`string`?t:t instanceof URL?t.toString():t.url,i=_(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 Kb(){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${Lb(e.type)}\t${e.data}`).join(`
775
+ `)}\n`,stderr:n,exitCode:0}}async function zb(e,t){let n=mb(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===tb,c,l;try{c=s?xb(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 Rb(s?Nb(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 Bb(){let e=p();return S(`dig`,async t=>t.includes(`--help`)||t.includes(`-h`)?Ib():zb(t,e))}const Vb=[`api-catalog`,`service-desc`,`service-meta`,`status`,`https://llmstxt.org/rel/llms-txt`];async function Hb(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)Vb.includes(e)&&(o.has(e)||(o.add(e),a.push(Ub(n,s.href,r,t.signal).then(t=>Wb(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 Ub(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 Wb(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 Gb=[`--follow`];function Kb(e){return async(t,n)=>{let r=typeof t==`string`?t:t instanceof URL?t.toString():t.url,i=_(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 qb(){return`discover — fetch a URL and parse RFC 8288 Link headers
777
777
 
778
778
  Usage:
779
779
  discover <url> Print parsed links (and any SLICC handoff match)
@@ -787,9 +787,9 @@ Output is always JSON.
787
787
  Examples:
788
788
  discover ${r}/handoff?handoff=demo
789
789
  discover --follow ${r}/llms.txt
790
- `}function qb(){return S(`discover`,async e=>{if(e.length===0||w(e))return{stdout:Kb(),stderr:``,exitCode:0};let t=C(e,{bool:Wb});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=p(),o;try{o=await i(r,{method:`GET`})}catch(e){return{stdout:``,stderr:`discover: fetch failed: ${e instanceof Error?e.message:String(e)}\n`,exitCode:1}}let c=[];for(let[e,t]of Object.entries(o.headers))e.toLowerCase()===`link`&&typeof t==`string`&&t.length>0&&c.push(t);let l=s(c,r),u=a(l),d={url:r,status:o.status,links:l,handoff:u};if(n&&l.length>0){let e=await Vb(l,{fetchImpl:Gb(i)});d.discovery={catalog:e.catalog,serviceDesc:e.serviceDesc,serviceMeta:e.serviceMeta,status:e.status,llmsTxt:e.llmsTxt,failures:e.failures}}return{stdout:JSON.stringify(d,null,2)+`
792
- `,stderr:``,exitCode:0}})}function Jb(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 Yb=`esbuild - thin wrapper over the ipk-loaded esbuild-wasm
790
+ `}function Jb(){return S(`discover`,async e=>{if(e.length===0||w(e))return{stdout:qb(),stderr:``,exitCode:0};let t=C(e,{bool:Gb});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=p(),o;try{o=await i(r,{method:`GET`})}catch(e){return{stdout:``,stderr:`discover: fetch failed: ${e instanceof Error?e.message:String(e)}\n`,exitCode:1}}let c=[];for(let[e,t]of Object.entries(o.headers))e.toLowerCase()===`link`&&typeof t==`string`&&t.length>0&&c.push(t);let l=s(c,r),u=a(l),d={url:r,status:o.status,links:l,handoff:u};if(n&&l.length>0){let e=await Hb(l,{fetchImpl:Kb(i)});d.discovery={catalog:e.catalog,serviceDesc:e.serviceDesc,serviceMeta:e.serviceMeta,status:e.status,llmsTxt:e.llmsTxt,failures:e.failures}}return{stdout:JSON.stringify(d,null,2)+`
792
+ `,stderr:``,exitCode:0}})}function Yb(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 Xb=`esbuild - thin wrapper over the ipk-loaded esbuild-wasm
793
793
 
794
794
  Usage:
795
795
  esbuild [options] <entry> Bundle / transform
@@ -829,10 +829,10 @@ Install:
829
829
  Inert until the backing package is installed:
830
830
  ${N} esbuild-wasm@${Yr}
831
831
  Then \`esbuild --version\` and the bundle/transform commands above.
832
- `,Xb=new Set([`iife`,`cjs`,`esm`]),Zb=new Set([`browser`,`node`,`neutral`]),Qb=new Set([`linked`,`inline`,`external`,`both`]),$b={"-h":`showHelp`,"--help":`showHelp`,"-v":`showVersion`,"--version":`showVersion`,"--bundle":`bundle`,"--transform":`transform`,"--minify":`minify`};function ex(e){if(e.startsWith(`--`)){let t=e.indexOf(`=`);if(t>0)return{key:e.slice(0,t),inlineValue:e.slice(t+1)}}return{key:e,inlineValue:null}}function tx(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 nx(e,t,n,r){if(t.inlineValue!==null){if(!Qb.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`&&Qb.has(i)?(e.sourcemap=i,1):(e.sourcemap=!0,0)}function rx(e,t,n,r){if(t.key===`--outfile`){let{value:i,advance:a}=tx(t,n,r);return e.outfile=i,a}if(t.key===`--format`){let{value:i,advance:a}=tx(t,n,r);if(!Xb.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}=tx(t,n,r);if(!Zb.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}=tx(t,n,r);return e.target=i.split(`,`).map(e=>e.trim()).filter(Boolean),a}if(t.key===`--loader`){let{value:i,advance:a}=tx(t,n,r);return e.loader=i,a}return-1}function ix(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 ax(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=$b[r];if(i){t[i]=!0;continue}if(r.startsWith(`--external:`)){t.external.push(r.slice(11));continue}if(ix(r,`--define:`,t.define)||ix(r,`--banner:`,t.banner)||ix(r,`--footer:`,t.footer))continue;let a=ex(r);if(a.key===`--tree-shaking`){if(a.inlineValue===null)t.treeShaking=!0;else if(a.inlineValue===`true`||a.inlineValue===`false`)t.treeShaking=a.inlineValue===`true`;else throw Error(`esbuild: --tree-shaking must be true or false (got "${a.inlineValue}")`);continue}if(a.key===`--sourcemap`){n+=nx(t,a,e,n);continue}let o=rx(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 ox(e,t,n,r,i){return{name:`slicc-vfs`,setup(a){a.onResolve({filter:/.*/},async a=>{if(a.kind!==`entry-point`&&sx(a.path,r)||/^[a-z]+:/.test(a.path)&&!a.path.startsWith(`file:`))return{path:a.path,external:!0};if(lx(a.path)){let n=a.importer?.startsWith(`/`)?or(a.importer):t;return{path:await fx(e,e.resolvePath(n,a.path))}}return ux(a.path,a.importer,n,cx(i,a.kind))}),a.onLoad({filter:/.*/},async t=>t.namespace&&t.namespace!==`file`?null:{contents:await e.readFile(t.path),loader:dx(t.path),resolveDir:or(t.path)})}}}function sx(e,t){return t.some(t=>{if(e===t)return!0;if(!t.includes(`*`))return!lx(t)&&e.startsWith(`${t}/`);let n=t.replace(/[.+?^${}()|[\]\\]/g,`\\$&`).replace(`*`,`.*`);return RegExp(`^${n}$`).test(e)})}function cx(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 lx(e){return e.startsWith(`./`)||e.startsWith(`../`)||e.startsWith(`/`)}async function ux(e,t,n,r){let i=t?.startsWith(`/`)?or(t):n.fromDir;try{let t=await Jn(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 dx(e){let t=tr(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 fx(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=er(t,`index${r}`);if(await e.exists(n))return n}return t}async function px(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 mx(){return S(`esbuild`,async(e,t)=>{let n;try{n=ax(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:Yb,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 Jr({ipk:Jb(t)})}catch(e){return{stdout:``,stderr:`esbuild: ${e instanceof Error?e.message:String(e)}\n`,exitCode:1}}return n.showVersion?{stdout:`${r.version}\n`,stderr:``,exitCode:0}:n.transform||!n.bundle&&n.entries.length<=1?hx(n,t,r):gx(n,t,r)})}async function hx(e,t,n){let r,i=`<stdin>`;if(e.entries.length===1){let n=t.fs.resolvePath(t.cwd,e.entries[0]);if(!await t.fs.exists(n))return{stdout:``,stderr:`esbuild: ${e.entries[0]}: no such file\n`,exitCode:1};r=await t.fs.readFile(n),i=n}else if(r=P(t.stdin),!r)return{stdout:Yb,stderr:``,exitCode:0};let a={loader:e.loader??dx(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 px(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 px(n.formatMessages,t.errors,t.warnings??[]),exitCode:1}:{stdout:``,stderr:`esbuild: ${e instanceof Error?e.message:String(e)}\n`,exitCode:1}}}async function gx(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:[ox(t.fs,t.cwd,Jb(t),e.external,e.platform)],format:e.format??`esm`,..._x(e)};try{let r=await n.build(i),a=await px(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=or(n);for(let e=1;e<o.length;e++){let n=o[e],i=er(r,tr(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 px(n.formatMessages,t.errors,t.warnings??[]),exitCode:1}:{stdout:``,stderr:`esbuild: ${e instanceof Error?e.message:String(e)}\n`,exitCode:1}}}function _x(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 vx(e){let t=new ArrayBuffer(e.byteLength);return new Uint8Array(t).set(e),t}var yx=class{ops(){return import(`./esptool-operations-h8-8jVn_.js`)}registry(){if(!Fr())throw Error(`Web Serial is unavailable in this browser`);return Vr()}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)}},bx=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:vx(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 xx(e,t){return e&&Fr()?new yx:t?new bx(t):null}const Sx=Symbol(`picker-approval-timeout`);async function Cx(e,t,n){let r=Ce.generateId(),i=!1,a=we({id:r,html:im(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 Sx;throw e}),o,s=new Promise(t=>{o=setTimeout(()=>{i=!0,Ce.cancel(r,`${e}: timed out`),t(Sx)},12e4)}),c=await Promise.race([a,s]);if(o&&clearTimeout(o),c===Sx)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 wx=new Set([`--vid`,`--pid`,`--baud`,`--data-bits`,`--stop-bits`,`--parity`,`--flow-control`,`--buffer-size`,`--bytes`,`--until`,`--timeout-ms`,`--dtr`,`--rts`,`--break`,`--__resolved`]);function Tx(e){return yn(e,wx)}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 Ex(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 Dx(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 Ox=new Set([`none`,`even`,`odd`]),kx=new Set([`none`,`hardware`]);function Ax(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(!Ox.has(n))throw Error(`invalid --parity: '${n}'`);t.parity=n}if(e.has(`--flow-control`)){let n=e.get(`--flow-control`);if(!kx.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 jx(e){let t={};return e.has(`--bytes`)&&(t.maxBytes=R(e.get(`--bytes`),`bytes`)),e.has(`--until`)&&(t.until=Ex(e.get(`--until`))),e.has(`--timeout-ms`)&&(t.timeoutMs=R(e.get(`--timeout-ms`),`timeout-ms`)),t}function Mx(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 Nx(e){let t={};return e.has(`--dtr`)&&(t.dataTerminalReady=Mx(e.get(`--dtr`),`dtr`)),e.has(`--rts`)&&(t.requestToSend=Mx(e.get(`--rts`),`rts`)),e.has(`--break`)&&(t.break=Mx(e.get(`--break`),`break`)),t}function Px(e){let t=ti(e.stdin),n=new Uint8Array(t.length);for(let e=0;e<t.length;e++)n[e]=t.charCodeAt(e)&255;return n}function Fx(e){return Array.from(e,e=>e.toString(16).padStart(2,`0`)).join(` `)}function Ix(e){return`0x${e.toString(16).padStart(4,`0`)}`}function Lx(e){let t=e.usbVendorId!==void 0||e.usbProductId!==void 0?`${Ix(e.usbVendorId??0)}:${Ix(e.usbProductId??0)}`:`(native serial)`,n=e.opened?` [open]`:``;return`${e.handle}\t${t}${n}`}function Rx(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 zx=`serial - access serial ports via Web Serial
832
+ `,Zb=new Set([`iife`,`cjs`,`esm`]),Qb=new Set([`browser`,`node`,`neutral`]),$b=new Set([`linked`,`inline`,`external`,`both`]),ex={"-h":`showHelp`,"--help":`showHelp`,"-v":`showVersion`,"--version":`showVersion`,"--bundle":`bundle`,"--transform":`transform`,"--minify":`minify`};function tx(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 nx(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 rx(e,t,n,r){if(t.inlineValue!==null){if(!$b.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`&&$b.has(i)?(e.sourcemap=i,1):(e.sourcemap=!0,0)}function ix(e,t,n,r){if(t.key===`--outfile`){let{value:i,advance:a}=nx(t,n,r);return e.outfile=i,a}if(t.key===`--format`){let{value:i,advance:a}=nx(t,n,r);if(!Zb.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}=nx(t,n,r);if(!Qb.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}=nx(t,n,r);return e.target=i.split(`,`).map(e=>e.trim()).filter(Boolean),a}if(t.key===`--loader`){let{value:i,advance:a}=nx(t,n,r);return e.loader=i,a}return-1}function ax(e,t,n){if(!e.startsWith(t))return!1;let r=e.slice(t.length),i=r.indexOf(`=`);if(i<1)throw Error(`esbuild: ${t.slice(0,-1)} requires <key>=<value>`);return n[r.slice(0,i)]=r.slice(i+1),!0}function ox(e){let t={entries:[],bundle:!1,transform:!1,outfile:null,format:null,minify:!1,sourcemap:null,target:null,loader:null,external:[],platform:null,define:{},banner:{},footer:{},treeShaking:null,showHelp:!1,showVersion:!1};for(let n=0;n<e.length;n++){let r=e[n],i=ex[r];if(i){t[i]=!0;continue}if(r.startsWith(`--external:`)){t.external.push(r.slice(11));continue}if(ax(r,`--define:`,t.define)||ax(r,`--banner:`,t.banner)||ax(r,`--footer:`,t.footer))continue;let a=tx(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+=rx(t,a,e,n);continue}let o=ix(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 sx(e,t,n,r,i){return{name:`slicc-vfs`,setup(a){a.onResolve({filter:/.*/},async a=>{if(a.kind!==`entry-point`&&cx(a.path,r)||/^[a-z]+:/.test(a.path)&&!a.path.startsWith(`file:`))return{path:a.path,external:!0};if(ux(a.path)){let n=a.importer?.startsWith(`/`)?or(a.importer):t;return{path:await px(e,e.resolvePath(n,a.path))}}return dx(a.path,a.importer,n,lx(i,a.kind))}),a.onLoad({filter:/.*/},async t=>t.namespace&&t.namespace!==`file`?null:{contents:await e.readFile(t.path),loader:fx(t.path),resolveDir:or(t.path)})}}}function cx(e,t){return t.some(t=>{if(e===t)return!0;if(!t.includes(`*`))return!ux(t)&&e.startsWith(`${t}/`);let n=t.replace(/[.+?^${}()|[\]\\]/g,`\\$&`).replace(`*`,`.*`);return RegExp(`^${n}$`).test(e)})}function lx(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 ux(e){return e.startsWith(`./`)||e.startsWith(`../`)||e.startsWith(`/`)}async function dx(e,t,n,r){let i=t?.startsWith(`/`)?or(t):n.fromDir;try{let t=await Jn(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 fx(e){let t=tr(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 px(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=er(t,`index${r}`);if(await e.exists(n))return n}return t}async function mx(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 hx(){return S(`esbuild`,async(e,t)=>{let n;try{n=ox(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:Xb,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 Jr({ipk:Yb(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?gx(n,t,r):_x(n,t,r)})}async function gx(e,t,n){let r,i=`<stdin>`;if(e.entries.length===1){let n=t.fs.resolvePath(t.cwd,e.entries[0]);if(!await t.fs.exists(n))return{stdout:``,stderr:`esbuild: ${e.entries[0]}: no such file\n`,exitCode:1};r=await t.fs.readFile(n),i=n}else if(r=P(t.stdin),!r)return{stdout:Xb,stderr:``,exitCode:0};let a={loader:e.loader??fx(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 mx(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 mx(n.formatMessages,t.errors,t.warnings??[]),exitCode:1}:{stdout:``,stderr:`esbuild: ${e instanceof Error?e.message:String(e)}\n`,exitCode:1}}}async function _x(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:[sx(t.fs,t.cwd,Yb(t),e.external,e.platform)],format:e.format??`esm`,...vx(e)};try{let r=await n.build(i),a=await mx(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=or(n);for(let e=1;e<o.length;e++){let n=o[e],i=er(r,tr(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 mx(n.formatMessages,t.errors,t.warnings??[]),exitCode:1}:{stdout:``,stderr:`esbuild: ${e instanceof Error?e.message:String(e)}\n`,exitCode:1}}}function vx(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 yx(e){let t=new ArrayBuffer(e.byteLength);return new Uint8Array(t).set(e),t}var bx=class{ops(){return import(`./esptool-operations-h8-8jVn_.js`)}registry(){if(!Fr())throw Error(`Web Serial is unavailable in this browser`);return Vr()}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)}},xx=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:yx(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 Sx(e,t){return e&&Fr()?new bx:t?new xx(t):null}const Cx=Symbol(`picker-approval-timeout`);async function wx(e,t,n){let r=Ce.generateId(),i=!1,a=we({id:r,html:im(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 Cx;throw e}),o,s=new Promise(t=>{o=setTimeout(()=>{i=!0,Ce.cancel(r,`${e}: timed out`),t(Cx)},12e4)}),c=await Promise.race([a,s]);if(o&&clearTimeout(o),c===Cx)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 Tx=new Set([`--vid`,`--pid`,`--baud`,`--data-bits`,`--stop-bits`,`--parity`,`--flow-control`,`--buffer-size`,`--bytes`,`--until`,`--timeout-ms`,`--dtr`,`--rts`,`--break`,`--__resolved`]);function Ex(e){return yn(e,Tx)}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 Dx(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 Ox(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 kx=new Set([`none`,`even`,`odd`]),Ax=new Set([`none`,`hardware`]);function jx(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(!kx.has(n))throw Error(`invalid --parity: '${n}'`);t.parity=n}if(e.has(`--flow-control`)){let n=e.get(`--flow-control`);if(!Ax.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 Mx(e){let t={};return e.has(`--bytes`)&&(t.maxBytes=R(e.get(`--bytes`),`bytes`)),e.has(`--until`)&&(t.until=Dx(e.get(`--until`))),e.has(`--timeout-ms`)&&(t.timeoutMs=R(e.get(`--timeout-ms`),`timeout-ms`)),t}function Nx(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 Px(e){let t={};return e.has(`--dtr`)&&(t.dataTerminalReady=Nx(e.get(`--dtr`),`dtr`)),e.has(`--rts`)&&(t.requestToSend=Nx(e.get(`--rts`),`rts`)),e.has(`--break`)&&(t.break=Nx(e.get(`--break`),`break`)),t}function Fx(e){let t=ti(e.stdin),n=new Uint8Array(t.length);for(let e=0;e<t.length;e++)n[e]=t.charCodeAt(e)&255;return n}function Ix(e){return Array.from(e,e=>e.toString(16).padStart(2,`0`)).join(` `)}function Lx(e){return`0x${e.toString(16).padStart(4,`0`)}`}function Rx(e){let t=e.usbVendorId!==void 0||e.usbProductId!==void 0?`${Lx(e.usbVendorId??0)}:${Lx(e.usbProductId??0)}`:`(native serial)`,n=e.opened?` [open]`:``;return`${e.handle}\t${t}${n}`}function zx(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 Bx=`serial - access serial ports via Web Serial
836
836
 
837
837
  Usage: serial <subcommand> [options]
838
838
 
@@ -863,9 +863,9 @@ Options:
863
863
  -h, --help
864
864
 
865
865
  Reads/writes are capped at ${Wr} bytes (4 MiB).
866
- `;function Bx(e,t){if(t)return z(e.length?`${Fx(e)}\n`:``);let n=``;for(let t=0;t<e.length;t++)n+=String.fromCharCode(e[t]);return z(n)}async function Vx(e){let t=await e.list();return t.length===0?z(`no granted serial ports
867
- `):z(`${t.map(Lx).join(`
868
- `)}\n`)}async function Hx(e,t){let n=e.get(`--__resolved`);if(n)return z(`${Lx(await t.info(n))}\n`);let r=Dx(e),i=Se();if(i){let e=await Cx(`serial-port`,r,i);if(e.handle)return z(`${Lx(await t.info(e.handle))}\n`);let n=e.info,a=Fr();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=Vr(),c=s.register(o),l=s.get(c);return l?z(`${Lx(Pr(c,l))}\n`):B(`request: failed to register granted port`)}return z(`${Lx(await t.request(r))}\n`)}async function Ux(e,t,n){let r=e[1];return r?(await n.open(r,Ax(t)),z(``)):B(`open: handle required`)}async function Wx(e,t){let n=e[1];return n?(await t.close(n),z(``)):B(`close: handle required`)}async function Gx(e,t,n,r){let i=e[1];if(!i)return B(`read: handle required`);let a=jx(t);return a.maxBytes!==void 0&&a.maxBytes>4194304?B(`read --bytes exceeds 4 MiB limit`):Bx(await r.read(i,a),n.has(`--hex`))}async function Kx(e,t,n){let r=e[1];if(!r)return B(`write: handle required`);let i=Px(t);return i.length>4194304?B(`write payload exceeds 4 MiB limit`):z(`${await n.write(r,i)} bytes written\n`)}async function qx(e,t,n){let[,r,i]=e;return!r||!i?B(`signals: handle and get|set required`):i===`get`?z(Rx(await n.getSignals(r))):i===`set`?(await n.setSignals(r,Nx(t)),z(``)):B(`signals: unknown action '${i}' (use get|set)`)}async function Jx(e,t,n){let{positionals:r,flags:i,bools:a}=Tx(e),o=r[0];switch(o){case`list`:return Vx(n);case`request`:return Hx(i,n);case`open`:return Ux(r,i,n);case`close`:return Wx(r,n);case`read`:return Gx(r,i,a,n);case`write`:return Kx(r,t,n);case`signals`:return qx(r,i,n);default:return B(`unknown subcommand '${o??``}'. Try 'serial --help'.`)}}function Yx(){return S(`serial`,async(e,t)=>{if(e.length===0||e.includes(`--help`)||e.includes(`-h`))return z(zx);let n=Rr(ce(),y());if(!n)return B(`Web Serial is unavailable in this environment`);try{return await Jx(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 Xx=new Set([`--port`,`--baud`,`--vid`,`--pid`]),Zx=115200;function Qx(e){return yn(e,Xx)}function $x(e){let t=e.replace(/-/g,`_`);return t===`chip_info`||t===`id`?`chip_id`:t}function eS(e){return{stdout:e,stderr:``,exitCode:0}}function tS(e){return{stdout:``,stderr:`esptool: ${e}\n`,exitCode:1}}const nS=`esptool - flash ESP32 / ESP8266 chips via esptool-js
866
+ `;function Vx(e,t){if(t)return z(e.length?`${Ix(e)}\n`:``);let n=``;for(let t=0;t<e.length;t++)n+=String.fromCharCode(e[t]);return z(n)}async function Hx(e){let t=await e.list();return t.length===0?z(`no granted serial ports
867
+ `):z(`${t.map(Rx).join(`
868
+ `)}\n`)}async function Ux(e,t){let n=e.get(`--__resolved`);if(n)return z(`${Rx(await t.info(n))}\n`);let r=Ox(e),i=Se();if(i){let e=await wx(`serial-port`,r,i);if(e.handle)return z(`${Rx(await t.info(e.handle))}\n`);let n=e.info,a=Fr();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=Vr(),c=s.register(o),l=s.get(c);return l?z(`${Rx(Pr(c,l))}\n`):B(`request: failed to register granted port`)}return z(`${Rx(await t.request(r))}\n`)}async function Wx(e,t,n){let r=e[1];return r?(await n.open(r,jx(t)),z(``)):B(`open: handle required`)}async function Gx(e,t){let n=e[1];return n?(await t.close(n),z(``)):B(`close: handle required`)}async function Kx(e,t,n,r){let i=e[1];if(!i)return B(`read: handle required`);let a=Mx(t);return a.maxBytes!==void 0&&a.maxBytes>4194304?B(`read --bytes exceeds 4 MiB limit`):Vx(await r.read(i,a),n.has(`--hex`))}async function qx(e,t,n){let r=e[1];if(!r)return B(`write: handle required`);let i=Fx(t);return i.length>4194304?B(`write payload exceeds 4 MiB limit`):z(`${await n.write(r,i)} bytes written\n`)}async function Jx(e,t,n){let[,r,i]=e;return!r||!i?B(`signals: handle and get|set required`):i===`get`?z(zx(await n.getSignals(r))):i===`set`?(await n.setSignals(r,Px(t)),z(``)):B(`signals: unknown action '${i}' (use get|set)`)}async function Yx(e,t,n){let{positionals:r,flags:i,bools:a}=Ex(e),o=r[0];switch(o){case`list`:return Hx(n);case`request`:return Ux(i,n);case`open`:return Wx(r,i,n);case`close`:return Gx(r,n);case`read`:return Kx(r,i,a,n);case`write`:return qx(r,t,n);case`signals`:return Jx(r,i,n);default:return B(`unknown subcommand '${o??``}'. Try 'serial --help'.`)}}function Xx(){return S(`serial`,async(e,t)=>{if(e.length===0||e.includes(`--help`)||e.includes(`-h`))return z(Bx);let n=Rr(ce(),y());if(!n)return B(`Web Serial is unavailable in this environment`);try{return await Yx(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 Zx=new Set([`--port`,`--baud`,`--vid`,`--pid`]),Qx=115200;function $x(e){return yn(e,Zx)}function eS(e){let t=e.replace(/-/g,`_`);return t===`chip_info`||t===`id`?`chip_id`:t}function tS(e){return{stdout:e,stderr:``,exitCode:0}}function nS(e){return{stdout:``,stderr:`esptool: ${e}\n`,exitCode:1}}const rS=`esptool - flash ESP32 / ESP8266 chips via esptool-js
869
869
 
870
870
  Usage: esptool [--port H] [--baud N] <subcommand> [args]
871
871
 
@@ -882,28 +882,28 @@ Subcommands:
882
882
 
883
883
  Options:
884
884
  --port H Use an existing serial handle from 'serial request'
885
- --baud N Flash baud rate (default ${Zx})
885
+ --baud N Flash baud rate (default ${Qx})
886
886
  --vid 0x.. Picker filter when --port is omitted
887
887
  --pid 0x.. Picker filter when --port is omitted
888
888
  --erase write_flash: erase the whole chip before writing
889
889
  -h, --help
890
890
 
891
891
  Without --port, the Web Serial picker opens (needs a user gesture).
892
- `;async function rS(e,t){return e.get(`--port`)||(await t.request(Dx(e))).handle}async function iS(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 aS(e,t,n,r){let{positionals:i,flags:a,bools:o}=Qx(e),s=$x(i[0]??``),c=a.has(`--baud`)?R(a.get(`--baud`),`baud`):Zx,l=[],u=e=>l.push(e);switch(s){case`chip_id`:{let e=await rS(a,r),t=await n.chipInfo(e,c,u);return l.push(`Chip type: ${t.chip}`),l.push(`Chip description: ${t.description}`),l.push(`Features: ${t.features.join(`, `)}`),l.push(`Crystal: ${t.crystalMHz}MHz`),l.push(`MAC: ${t.mac}`),eS(`${l.join(`
893
- `)}\n`)}case`read_mac`:{let e=await rS(a,r),{mac:t}=await n.readMac(e,c,u);return l.push(`MAC: ${t}`),eS(`${l.join(`
894
- `)}\n`)}case`erase_flash`:{let e=await rS(a,r);return await n.eraseFlash(e,c,u),eS(l.length?`${l.join(`
892
+ `;async function iS(e,t){return e.get(`--port`)||(await t.request(Ox(e))).handle}async function aS(e,t){let n=e.slice(1);if(n.length===0||n.length%2!=0)throw Error(`write_flash expects <addr> <file> pairs`);let r=[];for(let e=0;e<n.length;e+=2){let i=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 oS(e,t,n,r){let{positionals:i,flags:a,bools:o}=$x(e),s=eS(i[0]??``),c=a.has(`--baud`)?R(a.get(`--baud`),`baud`):Qx,l=[],u=e=>l.push(e);switch(s){case`chip_id`:{let e=await iS(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}`),tS(`${l.join(`
893
+ `)}\n`)}case`read_mac`:{let e=await iS(a,r),{mac:t}=await n.readMac(e,c,u);return l.push(`MAC: ${t}`),tS(`${l.join(`
894
+ `)}\n`)}case`erase_flash`:{let e=await iS(a,r);return await n.eraseFlash(e,c,u),tS(l.length?`${l.join(`
895
895
  `)}\n`:`flash erased
896
- `)}case`write_flash`:{let e=await iS(i,t),s=await rS(a,r);return await n.flash(s,c,o.has(`--erase`),e,u),eS(l.length?`${l.join(`
896
+ `)}case`write_flash`:{let e=await aS(i,t),s=await iS(a,r);return await n.flash(s,c,o.has(`--erase`),e,u),tS(l.length?`${l.join(`
897
897
  `)}\n`:`flash written
898
- `)}case`read_flash`:{if(i.length<4)return tS(`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 rS(a,r),f=await n.readFlash(d,c,e,o,u);return await t.fs.writeFile(s,f),l.push(`Wrote ${f.byteLength} bytes to ${s}`),eS(`${l.join(`
899
- `)}\n`)}case`read_reg`:{if(i.length<2)return tS(`read_reg expects <addr>`);let e=R(i[1],`address`),t=await rS(a,r),{value:o}=await n.readReg(t,c,e,u);return l.push(`0x${e.toString(16)} = 0x${(o>>>0).toString(16).padStart(8,`0`)}`),eS(`${l.join(`
900
- `)}\n`)}case`flash_id`:{let e=await rS(a,r),t=await n.flashId(e,c,u);return l.push(`Manufacturer: 0x${t.manufacturer.toString(16).padStart(2,`0`)}`),l.push(`Device: 0x${t.device.toString(16).padStart(4,`0`)}`),l.push(`Detected flash size: ${t.flashSize??`unknown`}`),eS(`${l.join(`
901
- `)}\n`)}case`erase_region`:{if(i.length<3)return tS(`erase_region expects <addr> <size>`);let e=R(i[1],`address`),t=R(i[2],`size`),o=await rS(a,r);return await n.eraseRegion(o,c,e,t,u),eS(l.length?`${l.join(`
898
+ `)}case`read_flash`:{if(i.length<4)return nS(`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 iS(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}`),tS(`${l.join(`
899
+ `)}\n`)}case`read_reg`:{if(i.length<2)return nS(`read_reg expects <addr>`);let e=R(i[1],`address`),t=await iS(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`)}`),tS(`${l.join(`
900
+ `)}\n`)}case`flash_id`:{let e=await iS(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`}`),tS(`${l.join(`
901
+ `)}\n`)}case`erase_region`:{if(i.length<3)return nS(`erase_region expects <addr> <size>`);let e=R(i[1],`address`),t=R(i[2],`size`),o=await iS(a,r);return await n.eraseRegion(o,c,e,t,u),tS(l.length?`${l.join(`
902
902
  `)}\n`:`region erased
903
- `)}case`run`:{let e=await rS(a,r);return await n.run(e,c,u),eS(l.length?`${l.join(`
903
+ `)}case`run`:{let e=await iS(a,r);return await n.run(e,c,u),tS(l.length?`${l.join(`
904
904
  `)}\n`:`running app
905
- `)}default:return tS(`unknown subcommand '${i[0]??``}'. Try 'esptool --help'.`)}}function oS(){return S(`esptool`,async(e,t)=>{if(e.length===0||e.includes(`--help`)||e.includes(`-h`))return eS(nS);let n=ce(),r=y(),i=xx(n,r),a=Rr(n,r);if(!i||!a)return tS(`Web Serial is unavailable in this environment`);try{return await aS(e,t,i,a)}catch(e){let t=e instanceof Error?e.message:String(e);return/cancelled|NotFoundError|No port selected/i.test(t)?tS(`user cancelled or no port selected`):tS(t)}})}function sS(){return S(`ffmpeg`,async(e,t)=>{let{runFfmpeg:n}=await import(`./run-Dg-St-RH.js`);return n(e,t)})}function cS(){return S(`ffprobe`,async(e,t)=>{let{runFfprobe:n}=await import(`./run-D8oYYvDP.js`);return n(e,t)})}const lS=new Map;let uS=0;const dS=e=>({stdout:e,stderr:``,exitCode:0}),fS=e=>({stdout:``,stderr:`fswatch: ${e}\n`,exitCode:1}),pS=[`--path`,`--pattern`,`--scoop`,`--name`];function mS(e){let t=C(e.slice(1),{});if(`error`in t)return fS(t.error);if(lS.size===0)return dS(`No active file watchers.
906
- `);let n=``;for(let[,e]of lS)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 dS(n)}function hS(e){let t=C(e.slice(1),{});if(`error`in t)return fS(t.error);let n=t.positionals[0];if(!n)return fS(`delete requires an ID`);let r=lS.get(n);return r?(r.unsubscribe(),lS.delete(n),dS(`Deleted watcher "${r.name}" (${n})\n`)):fS(`watcher not found: ${n}`)}function gS(e){let t=C(e.slice(1),{value:pS});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 _S(e){let t=RegExp(`^`+e.replace(/\./g,`\\.`).replace(/\*/g,`.*`)+`$`);return e=>t.test(e.split(`/`).pop()??``)}async function vS(e,t){let n=gS(e);if(`error`in n)return fS(n.error);let r=n,i=r.scoop||void 0;if(r.scoop=zi(r.scoop,t)??``,!r.basePath||!r.pattern)return fS(`--path and --pattern are required`);let a=await ry(await ty(),`fswatch create`,i);if(a)return{stdout:``,stderr:a,exitCode:1};let o=globalThis,s=o.__slicc_fs_watcher;if(!s)return fS(`file system watcher not available`);let c=`fsw-${++uS}`,l=r.name||`${r.pattern} in ${r.basePath}`,u=o.__slicc_lick_handler,d=s.watch(r.basePath,_S(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}})});lS.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`),dS(f)}function yS(){return S(`fswatch`,async(e,t)=>{let n=e[0];if(!n||w(e,{valueFlags:pS}))return dS(`usage: fswatch <command> [options]
905
+ `)}default:return nS(`unknown subcommand '${i[0]??``}'. Try 'esptool --help'.`)}}function sS(){return S(`esptool`,async(e,t)=>{if(e.length===0||e.includes(`--help`)||e.includes(`-h`))return tS(rS);let n=ce(),r=y(),i=Sx(n,r),a=Rr(n,r);if(!i||!a)return nS(`Web Serial is unavailable in this environment`);try{return await oS(e,t,i,a)}catch(e){let t=e instanceof Error?e.message:String(e);return/cancelled|NotFoundError|No port selected/i.test(t)?nS(`user cancelled or no port selected`):nS(t)}})}function cS(){return S(`ffmpeg`,async(e,t)=>{let{runFfmpeg:n}=await import(`./run-Dg-St-RH.js`);return n(e,t)})}function lS(){return S(`ffprobe`,async(e,t)=>{let{runFfprobe:n}=await import(`./run-D8oYYvDP.js`);return n(e,t)})}const uS=new Map;let dS=0;const fS=e=>({stdout:e,stderr:``,exitCode:0}),pS=e=>({stdout:``,stderr:`fswatch: ${e}\n`,exitCode:1}),mS=[`--path`,`--pattern`,`--scoop`,`--name`];function hS(e){let t=C(e.slice(1),{});if(`error`in t)return pS(t.error);if(uS.size===0)return fS(`No active file watchers.
906
+ `);let n=``;for(let[,e]of uS)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 fS(n)}function gS(e){let t=C(e.slice(1),{});if(`error`in t)return pS(t.error);let n=t.positionals[0];if(!n)return pS(`delete requires an ID`);let r=uS.get(n);return r?(r.unsubscribe(),uS.delete(n),fS(`Deleted watcher "${r.name}" (${n})\n`)):pS(`watcher not found: ${n}`)}function _S(e){let t=C(e.slice(1),{value:mS});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 vS(e){let t=RegExp(`^`+e.replace(/\./g,`\\.`).replace(/\*/g,`.*`)+`$`);return e=>t.test(e.split(`/`).pop()??``)}async function yS(e,t){let n=_S(e);if(`error`in n)return pS(n.error);let r=n,i=r.scoop||void 0;if(r.scoop=zi(r.scoop,t)??``,!r.basePath||!r.pattern)return pS(`--path and --pattern are required`);let a=await ry(await ty(),`fswatch create`,i);if(a)return{stdout:``,stderr:a,exitCode:1};let o=globalThis,s=o.__slicc_fs_watcher;if(!s)return pS(`file system watcher not available`);let c=`fsw-${++dS}`,l=r.name||`${r.pattern} in ${r.basePath}`,u=o.__slicc_lick_handler,d=s.watch(r.basePath,vS(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}})});uS.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`),fS(f)}function bS(){return S(`fswatch`,async(e,t)=>{let n=e[0];if(!n||w(e,{valueFlags:mS}))return fS(`usage: fswatch <command> [options]
907
907
 
908
908
  Commands:
909
909
  create --path <path> --pattern <glob> [--scoop <name>] [--name <name>] Watch for file changes
@@ -915,7 +915,7 @@ Options:
915
915
  --pattern <glob> File pattern to match, e.g. "*.md", "*.bsh" (required)
916
916
  --scoop <target> Scoop name, cone name, or folder. Omit for your own cone.
917
917
  --name <name> Human-readable name for the watcher
918
- `);switch(n){case`list`:return mS(e);case`delete`:return hS(e);case`create`:return await vS(e,t.env);default:return fS(`unknown command: ${n}`)}})}function bS(e){return S(`gelatiere`,async(t,n)=>{let{runGelatiere:r}=await import(`./run-Dng-8cry.js`);return r(t,n,e)})}function xS(e){return typeof e.stdoutIsTTY!=`boolean`||e.stdoutIsTTY}function SS(e,t){return typeof e.stdinIsTTY==`boolean`?e.stdinIsTTY:t===void 0?ti(e.stdin).length===0:t===0}function CS(){return{stdout:`usage: hear [-i file] [-l lang] [-T seconds] [-d deviceId] [--engine name]
918
+ `);switch(n){case`list`:return hS(e);case`delete`:return gS(e);case`create`:return await yS(e,t.env);default:return pS(`unknown command: ${n}`)}})}function xS(e){return S(`gelatiere`,async(t,n)=>{let{runGelatiere:r}=await import(`./run-CMateyfG.js`);return r(t,n,e)})}function SS(e){return typeof e.stdoutIsTTY!=`boolean`||e.stdoutIsTTY}function CS(e,t){return typeof e.stdinIsTTY==`boolean`?e.stdinIsTTY:t===void 0?ti(e.stdin).length===0:t===0}function wS(){return{stdout:`usage: hear [-i file] [-l lang] [-T seconds] [-d deviceId] [--engine name]
919
919
  hear --devices | --status | --warmup
920
920
 
921
921
  Speech recognition: listens on the microphone until you pause, then
@@ -934,26 +934,26 @@ Options:
934
934
  --devices List audio input devices
935
935
  --status Show the enhanced model state (downloading/ready + ETA)
936
936
  --warmup Start the enhanced model download in the background
937
- `,stderr:``,exitCode:0}}const wS={"--devices":`devices`,"--status":`status`,"--warmup":`warmup`},TS={"-i":`a file path`,"-l":`a language tag`,"-T":`a timeout in seconds`,"-d":`a device id`,"--engine":`an engine name`};function ES(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 DS(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=wS[r];if(i){t[i]=!0;continue}if(!(r in TS))return kS(`unknown option: ${r}`);let a=n+1<e.length?e[++n]:null;if(a==null)return kS(`${r} requires ${TS[r]}`);let o=ES(t,r,a);if(o)return kS(o)}return t}function OS(e){switch(e.state){case`ready`:return`enhanced engine: ready
937
+ `,stderr:``,exitCode:0}}const TS={"--devices":`devices`,"--status":`status`,"--warmup":`warmup`},ES={"-i":`a file path`,"-l":`a language tag`,"-T":`a timeout in seconds`,"-d":`a device id`,"--engine":`an engine name`};function DS(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 OS(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=TS[r];if(i){t[i]=!0;continue}if(!(r in ES))return AS(`unknown option: ${r}`);let a=n+1<e.length?e[++n]:null;if(a==null)return AS(`${r} requires ${ES[r]}`);let o=DS(t,r,a);if(o)return AS(o)}return t}function kS(e){switch(e.state){case`ready`:return`enhanced engine: ready
938
938
  `;case`failed`:return`enhanced engine: failed (re-run hear --warmup to retry)
939
939
  `;case`idle`:return`enhanced engine: not downloaded (run hear --warmup)
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 kS(e){return{stdout:``,stderr:`hear: ${e}\n`,exitCode:1}}function AS(e){return e instanceof Error?e.message:String(e)}function jS(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 AS(e){return{stdout:``,stderr:`hear: ${e}\n`,exitCode:1}}function jS(e){return e instanceof Error?e.message:String(e)}function MS(e){let t=e.map((e,t)=>`${e.deviceId}\t${e.label||`Microphone ${t+1}`}`);return t.join(`
941
941
  `)+(t.length?`
942
- `:``)}async function MS(e){try{return e.local?navigator.mediaDevices?.enumerateDevices?{stdout:jS((await navigator.mediaDevices.enumerateDevices()).filter(e=>e.kind===`audioinput`)),stderr:``,exitCode:0}:kS(`device enumeration unavailable`):{stdout:jS((await e.panelRpc.call(`enumerate-media-devices`,void 0)).audioinputs),stderr:``,exitCode:0}}catch(e){return kS(AS(e))}}async function NS(e,t){try{if(e.local){let{hearStatus:e,hearWarmup:n}=await import(`./speech-page-realm-stub-C7EPKrHd.js`);return{stdout:OS(t?n():e()),stderr:``,exitCode:0}}return{stdout:OS(t?await e.panelRpc.call(`hear-warmup`,void 0):await e.panelRpc.call(`hear-status`,void 0)),stderr:``,exitCode:0}}catch(e){return kS(AS(e))}}function PS(e){let t=new ArrayBuffer(e.byteLength);return new Uint8Array(t).set(e),t}async function FS(e,t,n,r){if(n.byteLength===0)return kS(`no audio on ${r}`);let i=PS(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 kS(`transcription failed: ${AS(e)}`)}}async function IS(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 kS(`cannot open ${r}: No such file`)}let o=Yn(i);return!o.startsWith(`audio/`)&&!o.startsWith(`video/`)?kS(`${r} is not an audio file`):FS(e,t,a,r)}async function LS(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 NS(e){try{return e.local?navigator.mediaDevices?.enumerateDevices?{stdout:MS((await navigator.mediaDevices.enumerateDevices()).filter(e=>e.kind===`audioinput`)),stderr:``,exitCode:0}:AS(`device enumeration unavailable`):{stdout:MS((await e.panelRpc.call(`enumerate-media-devices`,void 0)).audioinputs),stderr:``,exitCode:0}}catch(e){return AS(jS(e))}}async function PS(e,t){try{if(e.local){let{hearStatus:e,hearWarmup:n}=await import(`./speech-page-realm-stub-C7EPKrHd.js`);return{stdout:kS(t?n():e()),stderr:``,exitCode:0}}return{stdout:kS(t?await e.panelRpc.call(`hear-warmup`,void 0):await e.panelRpc.call(`hear-status`,void 0)),stderr:``,exitCode:0}}catch(e){return AS(jS(e))}}function FS(e){let t=new ArrayBuffer(e.byteLength);return new Uint8Array(t).set(e),t}async function IS(e,t,n,r){if(n.byteLength===0)return AS(`no audio on ${r}`);let i=FS(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 AS(`transcription failed: ${jS(e)}`)}}async function LS(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 AS(`cannot open ${r}: No such file`)}let o=Yn(i);return!o.startsWith(`audio/`)&&!o.startsWith(`video/`)?AS(`${r} is not an audio file`):IS(e,t,a,r)}async function RS(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+`
944
944
  `,stderr:``,exitCode:0}:{stdout:``,stderr:`hear: no speech detected
945
- `,exitCode:1}}catch(e){return kS(AS(e))}}function RS(){return S(`hear`,async(e,t)=>{if(e.includes(`--help`)||e.includes(`-h`))return CS();let n=DS(e);if(`exitCode`in n)return n;let r={local:ce(),panelRpc:y()};if(!r.local&&!r.panelRpc)return kS(`speech recognition unavailable in this environment`);if(n.devices)return MS(r);if(n.status||n.warmup)return NS(r,n.warmup);if(n.inputFile&&n.inputFile!==`-`)return IS(r,n,t);let i=ni(t.stdin);return n.inputFile===`-`||n.deviceId==null&&!SS(t,i.byteLength)?FS(r,n,i,`stdin`):LS(r,n)})}function zS(e,t,n){return typeof e.onSessionReplaced==`function`?e.onSessionReplaced(t,n):()=>void 0}function BS(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=zS(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 VS=[`debug`,`log`,`info`,`warning`,`error`],HS=1e3,US={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 WS(e,t,n,r,i){if(t.consoleCleanup.has(r))return;t.consoleMessages.set(r,[]);let a=BS({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=US[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>HS&&c.splice(0,c.length-HS))}]],enable:(e,t)=>e.send(`Runtime.enable`,{},t)});t.consoleCleanup.set(r,()=>a.stop())}const GS=async({browser:e,state:t,positional:n,flags:r,onTab:i})=>{let a=j(r);if(`error`in a)return{stdout:``,stderr:a.error,exitCode:1};let o=n[0]??`log`,s=r.clear===`true`,c=VS.indexOf(o);if(c===-1)return{stdout:``,stderr:`Invalid level "${o}". Valid: ${VS.join(`, `)}\n`,exitCode:1};t.consoleCleanup.has(a.targetId)||await i(a.targetId,async({sessionId:n,transport:r})=>{await r.send(`Runtime.enable`,{},n),WS(e,t,r,a.targetId,n)});let l=(t.consoleMessages.get(a.targetId)??[]).filter(e=>VS.indexOf(e.level)>=c);return s&&t.consoleMessages.set(a.targetId,[]),l.length===0?{stdout:`No console messages
945
+ `,exitCode:1}}catch(e){return AS(jS(e))}}function zS(){return S(`hear`,async(e,t)=>{if(e.includes(`--help`)||e.includes(`-h`))return wS();let n=OS(e);if(`exitCode`in n)return n;let r={local:ce(),panelRpc:y()};if(!r.local&&!r.panelRpc)return AS(`speech recognition unavailable in this environment`);if(n.devices)return NS(r);if(n.status||n.warmup)return PS(r,n.warmup);if(n.inputFile&&n.inputFile!==`-`)return LS(r,n,t);let i=ni(t.stdin);return n.inputFile===`-`||n.deviceId==null&&!CS(t,i.byteLength)?IS(r,n,i,`stdin`):RS(r,n)})}function BS(e,t,n){return typeof e.onSessionReplaced==`function`?e.onSessionReplaced(t,n):()=>void 0}function VS(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=BS(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 HS=[`debug`,`log`,`info`,`warning`,`error`],US=1e3,WS={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 GS(e,t,n,r,i){if(t.consoleCleanup.has(r))return;t.consoleMessages.set(r,[]);let a=VS({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=WS[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>US&&c.splice(0,c.length-US))}]],enable:(e,t)=>e.send(`Runtime.enable`,{},t)});t.consoleCleanup.set(r,()=>a.stop())}const KS=async({browser:e,state:t,positional:n,flags:r,onTab:i})=>{let a=j(r);if(`error`in a)return{stdout:``,stderr:a.error,exitCode:1};let o=n[0]??`log`,s=r.clear===`true`,c=HS.indexOf(o);if(c===-1)return{stdout:``,stderr:`Invalid level "${o}". Valid: ${HS.join(`, `)}\n`,exitCode:1};t.consoleCleanup.has(a.targetId)||await i(a.targetId,async({sessionId:n,transport:r})=>{await r.send(`Runtime.enable`,{},n),GS(e,t,r,a.targetId,n)});let l=(t.consoleMessages.get(a.targetId)??[]).filter(e=>HS.indexOf(e.level)>=c);return s&&t.consoleMessages.set(a.targetId,[]),l.length===0?{stdout:`No console messages
946
946
  `,stderr:``,exitCode:0}:{stdout:l.map(e=>`[${e.level}] ${e.text}`).join(`
947
947
  `)+`
948
- `,stderr:``,exitCode:0}};function KS(e){return e.cookies??[]}function qS(e){return`${e.name}=${e.value}\tDomain=${e.domain}\tPath=${e.path}\tSecure=${e.secure}\tHttpOnly=${e.httpOnly}\tExpires=${e.expires}`}function JS(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 YS(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 XS=async({browser:e,flags:t,onTab:n})=>{let r=j(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=KS(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(qS).join(`
948
+ `,stderr:``,exitCode:0}};function qS(e){return e.cookies??[]}function JS(e){return`${e.name}=${e.value}\tDomain=${e.domain}\tPath=${e.path}\tSecure=${e.secure}\tHttpOnly=${e.httpOnly}\tExpires=${e.expires}`}function YS(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 XS(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 ZS=async({browser:e,flags:t,onTab:n})=>{let r=j(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=qS(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(JS).join(`
949
949
  `)})+`
950
- `,stderr:``,exitCode:0}},ZS=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=j(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=KS(await e.send(`Network.getCookies`)).filter(e=>e.name===a);if(t.length===0)throw Error(`Cookie "${a}" not found`);return t.map(qS).join(`
950
+ `,stderr:``,exitCode:0}},QS=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=j(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=qS(await e.send(`Network.getCookies`)).filter(e=>e.name===a);if(t.length===0)throw Error(`Cookie "${a}" not found`);return t.map(JS).join(`
952
952
  `)})+`
953
- `,stderr:``,exitCode:0}},QS=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=j(n);return`error`in i?{stdout:``,stderr:i.error,exitCode:1}:(await r(i.targetId,async e=>{let r=await In(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`,JS(i))}),{stdout:`Cookie "${t[0]}" set\n`,stderr:``,exitCode:0})},$S=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=j(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 In(e)).href),await e.send(`Network.deleteCookies`,YS(r))}),{stdout:`Cookie "${t[0]}" deleted\n`,stderr:``,exitCode:0})},eC=async({browser:e,flags:t,onTab:n})=>{let r=j(t);return`error`in r?{stdout:``,stderr:r.error,exitCode:1}:(await n(r.targetId,async e=>{await e.send(`Network.clearBrowserCookies`)}),{stdout:`All cookies cleared
956
- `,stderr:``,exitCode:0})},tC=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}},$S=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=j(n);return`error`in i?{stdout:``,stderr:i.error,exitCode:1}:(await r(i.targetId,async e=>{let r=await In(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`,YS(i))}),{stdout:`Cookie "${t[0]}" set\n`,stderr:``,exitCode:0})},eC=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=j(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 In(e)).href),await e.send(`Network.deleteCookies`,XS(r))}),{stdout:`Cookie "${t[0]}" deleted\n`,stderr:``,exitCode:0})},tC=async({browser:e,flags:t,onTab:n})=>{let r=j(t);return`error`in r?{stdout:``,stderr:r.error,exitCode:1}:(await n(r.targetId,async e=>{await e.send(`Network.clearBrowserCookies`)}),{stdout:`All cookies cleared
956
+ `,stderr:``,exitCode:0})},nC=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)
957
957
  `,exitCode:1};let a=j(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.
958
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() {
959
959
  const el = this;
@@ -965,7 +965,7 @@ Options:
965
965
  const id = el.id;
966
966
  return JSON.stringify({ testId, label, placeholder, id });
967
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+`
968
- `,stderr:``,exitCode:0}},nC=async({browser:e,state:t,positional:n,flags:r,onTab:i})=>{let a=j(r);if(`error`in a)return{stdout:``,stderr:a.error,exitCode:1};let o=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}},rC=async({browser:e,state:t,positional:n,flags:r,onTab:i})=>{let a=j(r);if(`error`in a)return{stdout:``,stderr:a.error,exitCode:1};let o=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 => {
969
969
  el.style.outline = '';
970
970
  el.style.background = '';
971
971
  el.removeAttribute('data-slicc-highlight');
@@ -993,14 +993,14 @@ Options:
993
993
  el.style.cssText += '; ' + styleVal;
994
994
  el.setAttribute('data-slicc-highlight','1');
995
995
  }
996
- })()`;await t.send(`Runtime.evaluate`,{expression:r,returnByValue:!0},e)}}),{stdout:o?`Highlight removed from ${c}\n`:`Highlighted ${c}\n`,stderr:``,exitCode:0}},rC=async({browser:e,positional:t,flags:n,onTab:r})=>{let i=j(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}},iC=async({browser:e,flags:t,onTab:n})=>{let r=j(t);return`error`in r?{stdout:``,stderr:r.error,exitCode:1}:(await n(r.targetId,async e=>{await e.send(`Page.enable`),await e.send(`Page.handleJavaScriptDialog`,{accept:!1})}),{stdout:`Dismissed dialog
997
- `,stderr:``,exitCode:0})};function aC(e){let t=e instanceof Error?e.message:String(e);return/SyntaxError/.test(t)}function oC(e){return/\bawait\b/.test(e)||/\breturn\b/.test(e)}async function sC(e,t){try{return await e(t)}catch(n){if(!aC(n)||!oC(t))throw n;try{return await e(`(async () => (\n${t}\n))()`)}catch(r){if(!aC(r))throw r;try{return await e(`(async () => {\n${t}\n})()`)}catch(e){throw aC(e)?n:e}}}}function cC(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 lC=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=cC(`eval`,r);if(`error`in a)return{stdout:``,stderr:a.error,exitCode:1};let o=j(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 Ln(e,r),n=await sC(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}},uC=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=j(r);if(`error`in a)return{stdout:``,stderr:a.error,exitCode:1};let o=n[0],s=cC(`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 Ln(e,r),n=await sC(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 dC(e){return async(t,n)=>{let r=typeof t==`string`?t:t instanceof URL?t.toString():t.url,i=_(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 fC(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 pC(e,t,n){let r=``;try{r=new URL(e).hostname}catch{return{}}let i=r?Fm(r):``;if(!i)return{};let a;try{a=await Rm(n)}catch(e){return{warning:`playwright-cli: warning: browse.sh catalog unavailable: ${e instanceof Error?e.message:String(e)}`}}let o=await fC(t),s=[];for(let e of a){if(!e.hostname||Fm(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 mC(e,t={}){let n=t.fetchImpl??p(),r;try{r=await n(e,{method:t.method??`GET`})}catch(t){return{url:e,links:[],handoff:null,error:t instanceof Error?t.message:String(t)}}let i=[];for(let[e,t]of Object.entries(r.headers))e.toLowerCase()===`link`&&typeof t==`string`&&t.length>0&&i.push(t);let o=s(i,e),c=a(o),l={url:e,status:r.status,links:o,handoff:c};if(t.discover&&o.length>0){let e=await Vb(o,{fetchImpl:dC(n)});l.discovery={catalog:e.catalog,serviceDesc:e.serviceDesc,serviceMeta:e.serviceMeta,status:e.status,llmsTxt:e.llmsTxt,failures:e.failures}}else t.discover&&(l.discovery={failures:[]});if(t.discover&&t.fs){let r=await pC(e,t.fs,n);r.warning?l.browseShWarning=r.warning:r.skills&&r.skills.length>0&&(l.discovery={...l.discovery??{failures:[]},browseShSkills:r.skills})}return l}const hC=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 mC(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 gC(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 _C(e){await e.send(`Input.dispatchKeyEvent`,{type:`keyDown`,key:`Enter`}),await e.send(`Input.dispatchKeyEvent`,{type:`keyUp`,key:`Enter`})}async function vC(e,t,n){((await e.send(`Runtime.callFunctionOn`,{objectId:t,functionDeclaration:jn,returnByValue:!0})).result?.value??``)!==n&&await e.send(`Runtime.callFunctionOn`,{objectId:t,functionDeclaration:xn,arguments:[{value:n}],returnByValue:!0})}async function yC(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:An,returnByValue:!0}),await e.insertText(n),r?.objectId&&await vC(e,r.objectId,n)}async function bC(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}},iC=async({browser:e,positional:t,flags:n,onTab:r})=>{let i=j(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}},aC=async({browser:e,flags:t,onTab:n})=>{let r=j(t);return`error`in r?{stdout:``,stderr:r.error,exitCode:1}:(await n(r.targetId,async e=>{await e.send(`Page.enable`),await e.send(`Page.handleJavaScriptDialog`,{accept:!1})}),{stdout:`Dismissed dialog
997
+ `,stderr:``,exitCode:0})};function oC(e){let t=e instanceof Error?e.message:String(e);return/SyntaxError/.test(t)}function sC(e){return/\bawait\b/.test(e)||/\breturn\b/.test(e)}async function cC(e,t){try{return await e(t)}catch(n){if(!oC(n)||!sC(t))throw n;try{return await e(`(async () => (\n${t}\n))()`)}catch(r){if(!oC(r))throw r;try{return await e(`(async () => {\n${t}\n})()`)}catch(e){throw oC(e)?n:e}}}}function lC(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 uC=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=lC(`eval`,r);if(`error`in a)return{stdout:``,stderr:a.error,exitCode:1};let o=j(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 Ln(e,r),n=await cC(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}},dC=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=j(r);if(`error`in a)return{stdout:``,stderr:a.error,exitCode:1};let o=n[0],s=lC(`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 Ln(e,r),n=await cC(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 fC(e){return async(t,n)=>{let r=typeof t==`string`?t:t instanceof URL?t.toString():t.url,i=_(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 pC(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 mC(e,t,n){let r=``;try{r=new URL(e).hostname}catch{return{}}let i=r?Fm(r):``;if(!i)return{};let a;try{a=await Rm(n)}catch(e){return{warning:`playwright-cli: warning: browse.sh catalog unavailable: ${e instanceof Error?e.message:String(e)}`}}let o=await pC(t),s=[];for(let e of a){if(!e.hostname||Fm(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 hC(e,t={}){let n=t.fetchImpl??p(),r;try{r=await n(e,{method:t.method??`GET`})}catch(t){return{url:e,links:[],handoff:null,error:t instanceof Error?t.message:String(t)}}let i=[];for(let[e,t]of Object.entries(r.headers))e.toLowerCase()===`link`&&typeof t==`string`&&t.length>0&&i.push(t);let o=s(i,e),c=a(o),l={url:e,status:r.status,links:o,handoff:c};if(t.discover&&o.length>0){let e=await Hb(o,{fetchImpl:fC(n)});l.discovery={catalog:e.catalog,serviceDesc:e.serviceDesc,serviceMeta:e.serviceMeta,status:e.status,llmsTxt:e.llmsTxt,failures:e.failures}}else t.discover&&(l.discovery={failures:[]});if(t.discover&&t.fs){let r=await mC(e,t.fs,n);r.warning?l.browseShWarning=r.warning:r.skills&&r.skills.length>0&&(l.discovery={...l.discovery??{failures:[]},browseShSkills:r.skills})}return l}const gC=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 hC(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 _C(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 vC(e){await e.send(`Input.dispatchKeyEvent`,{type:`keyDown`,key:`Enter`}),await e.send(`Input.dispatchKeyEvent`,{type:`keyUp`,key:`Enter`})}async function yC(e,t,n){((await e.send(`Runtime.callFunctionOn`,{objectId:t,functionDeclaration:jn,returnByValue:!0})).result?.value??``)!==n&&await e.send(`Runtime.callFunctionOn`,{objectId:t,functionDeclaration:xn,arguments:[{value:n}],returnByValue:!0})}async function bC(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:An,returnByValue:!0}),await e.insertText(n),r?.objectId&&await yC(e,r.objectId,n)}async function xC(e,t,n){await e.click(t),await e.evaluate(`(function() {
1004
1004
  const el = document.querySelector(${JSON.stringify(t)});
1005
1005
  if (el) { return (${An}).call(el); }
1006
1006
  return false;
@@ -1012,15 +1012,15 @@ Options:
1012
1012
  const el = document.querySelector(${JSON.stringify(r)});
1013
1013
  if (!el) return;
1014
1014
  (${xn}).call(el, ${JSON.stringify(n)});
1015
- })()`)}const xC=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=j(r);if(`error`in a)return{stdout:``,stderr:a.error,exitCode:1};let o=n[0],s=gC(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}=bn(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 SC=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=j(r);if(`error`in a)return{stdout:``,stderr:a.error,exitCode:1};let o=n[0],s=_C(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}=bn(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() {
1017
1017
  var el = document.querySelector(${JSON.stringify(s)});
1018
1018
  if (!el) throw new Error('Element not found in iframe for ref ${o}');
1019
1019
  el.scrollIntoView({ block: 'center' });
1020
1020
  el.click();
1021
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}`})+`
1022
- `,stderr:``,exitCode:0}},SC=async({browser:e,positional:t,flags:n,onTab:r})=>{if(t.length===0)return{stdout:``,stderr:`type requires text
1023
- `,exitCode:1};let i=j(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 _C(e)}),{stdout:`Typed: ${a}\n`,stderr:``,exitCode:0}},CC=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}},CC=async({browser:e,positional:t,flags:n,onTab:r})=>{if(t.length===0)return{stdout:``,stderr:`type requires text
1023
+ `,exitCode:1};let i=j(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 vC(e)}),{stdout:`Typed: ${a}\n`,stderr:``,exitCode:0}},wC=async({browser:e,state:t,positional:n,flags:r,onTab:i})=>{if(n.length<2)return{stdout:``,stderr:`fill requires <ref> <text>
1024
1024
  `,exitCode:1};let a=j(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}=bn(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() {
1025
1025
  var el = document.querySelector(${JSON.stringify(l)});
1026
1026
  if (!el) throw new Error('Element not found in iframe for ref ${o}');
@@ -1030,32 +1030,32 @@ Options:
1030
1030
  el.value = ${JSON.stringify(s)};
1031
1031
  el.dispatchEvent(new Event('input', { bubbles: true }));
1032
1032
  el.dispatchEvent(new Event('change', { bubbles: true }));
1033
- })()`),t.snapshots.delete(a.targetId),r.submit===`true`&&await _C(e),`Filled ${o} with: ${s} (in iframe)`}let l=n.refToBackendNodeId.get(o);if(l)return await yC(e,l,s),t.snapshots.delete(a.targetId),r.submit===`true`&&await _C(e),`Filled ${o} with: ${s}`;let u=n.refToSelector.get(o);if(!u)throw Error(`Unknown ref "${o}"`);return await bC(e,u,s),t.snapshots.delete(a.targetId),r.submit===`true`&&await _C(e),`Filled ${o} with: ${s}`})+`
1034
- `,stderr:``,exitCode:0}},wC=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=j(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}},TC=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=j(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}},EC=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=j(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}},DC=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=j(r);if(`error`in a)return{stdout:``,stderr:a.error,exitCode:1};let o=n[0],s=n[1]||`left`,c=gC(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}=bn(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 vC(e),`Filled ${o} with: ${s} (in iframe)`}let l=n.refToBackendNodeId.get(o);if(l)return await bC(e,l,s),t.snapshots.delete(a.targetId),r.submit===`true`&&await vC(e),`Filled ${o} with: ${s}`;let u=n.refToSelector.get(o);if(!u)throw Error(`Unknown ref "${o}"`);return await xC(e,u,s),t.snapshots.delete(a.targetId),r.submit===`true`&&await vC(e),`Filled ${o} with: ${s}`})+`
1034
+ `,stderr:``,exitCode:0}},TC=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=j(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}},EC=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=j(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}},DC=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=j(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}},OC=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=j(r);if(`error`in a)return{stdout:``,stderr:a.error,exitCode:1};let o=n[0],s=n[1]||`left`,c=_C(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}=bn(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() {
1039
1039
  var el = document.querySelector(${JSON.stringify(s)});
1040
1040
  if (!el) throw new Error('Element not found in iframe for ref ${o}');
1041
1041
  el.scrollIntoView({ block: 'center' });
1042
1042
  el.dispatchEvent(new MouseEvent('dblclick', { bubbles: true }));
1043
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}`})+`
1044
- `,stderr:``,exitCode:0}},OC=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}},kC=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)
1045
1045
  `,exitCode:1};let a=j(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}=bn(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() {
1046
1046
  var el = document.querySelector(${JSON.stringify(r)});
1047
1047
  if (!el) throw new Error('Element not found in iframe for ref ${o}');
1048
1048
  el.scrollIntoView({ block: 'center' });
1049
1049
  el.dispatchEvent(new MouseEvent('mouseover', { bubbles: true }));
1050
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}`})+`
1051
- `,stderr:``,exitCode:0}},kC=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}},AC=async({browser:e,state:t,positional:n,flags:r,onTab:i})=>{if(n.length<2)return{stdout:``,stderr:`select requires <ref> <value>
1052
1052
  `,exitCode:1};let a=j(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}=bn(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() {
1053
1053
  var el = document.querySelector(${JSON.stringify(c)});
1054
1054
  if (!el) throw new Error('Element not found in iframe for ref ${o}');
1055
1055
  el.value = ${JSON.stringify(s)};
1056
1056
  el.dispatchEvent(new Event('change', { bubbles: true }));
1057
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}`})+`
1058
- `,stderr:``,exitCode:0}},AC=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}},jC=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)
1059
1059
  `,exitCode:1};let a=j(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}=bn(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() {
1060
1060
  var el = document.querySelector(${JSON.stringify(s)});
1061
1061
  if (!el) throw new Error('Element not found in iframe for ref ${o}');
@@ -1065,7 +1065,7 @@ Options:
1065
1065
  el.dispatchEvent(new MouseEvent('click', { bubbles: true }));
1066
1066
  }
1067
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}`})+`
1068
- `,stderr:``,exitCode:0}},jC=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}},MC=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)
1069
1069
  `,exitCode:1};let a=j(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}=bn(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() {
1070
1070
  var el = document.querySelector(${JSON.stringify(s)});
1071
1071
  if (!el) throw new Error('Element not found in iframe for ref ${o}');
@@ -1075,14 +1075,14 @@ Options:
1075
1075
  el.dispatchEvent(new MouseEvent('click', { bubbles: true }));
1076
1076
  }
1077
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}`})+`
1078
- `,stderr:``,exitCode:0}},MC=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}},NC=async({browser:e,state:t,positional:n,flags:r,onTab:i})=>{if(n.length<2)return{stdout:``,stderr:`drag requires <startRef> <endRef>
1079
1079
  `,exitCode:1};let a=j(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}`})+`
1080
- `,stderr:``,exitCode:0}};async function NC(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 PC(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 FC={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 IC(e){let t=e.split(`.`).pop()?.toLowerCase()??``;return FC[t]??`application/octet-stream`}const LC=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 PC(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 FC(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 IC={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 LC(e){let t=e.split(`.`).pop()?.toLowerCase()??``;return IC[t]??`application/octet-stream`}const RC=async({browser:e,state:t,positional:n,flags:r,onTab:i})=>{if(n.length<2)return{stdout:``,stderr:`mousemove requires <x> <y>
1081
1081
  `,exitCode:1};let a=j(r);if(`error`in a)return{stdout:``,stderr:a.error,exitCode:1};let o=parseFloat(n[0]),s=parseFloat(n[1]);return isNaN(o)||isNaN(s)?{stdout:``,stderr:`x and y must be numbers
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})},RC=async({browser:e,state:t,positional:n,flags:r,onTab:i})=>{let a=j(r);if(`error`in a)return{stdout:``,stderr:a.error,exitCode:1};let o=PC(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}},zC=async({browser:e,state:t,positional:n,flags:r,onTab:i})=>{let a=j(r);if(`error`in a)return{stdout:``,stderr:a.error,exitCode:1};let o=PC(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}},BC=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})},zC=async({browser:e,state:t,positional:n,flags:r,onTab:i})=>{let a=j(r);if(`error`in a)return{stdout:``,stderr:a.error,exitCode:1};let o=FC(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}},BC=async({browser:e,state:t,positional:n,flags:r,onTab:i})=>{let a=j(r);if(`error`in a)return{stdout:``,stderr:a.error,exitCode:1};let o=FC(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}},VC=async({browser:e,state:t,positional:n,flags:r,onTab:i})=>{if(n.length<2)return{stdout:``,stderr:`mousewheel requires <dx> <dy>
1083
1083
  `,exitCode:1};let a=j(r);if(`error`in a)return{stdout:``,stderr:a.error,exitCode:1};let o=parseFloat(n[0]),s=parseFloat(n[1]);if(isNaN(o)||isNaN(s))return{stdout:``,stderr:`dx and dy must be numbers
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}},VC=async({browser:e,fs:n,state:r,positional:i,flags:a,onTab:o})=>{if(i.length===0)return{stdout:``,stderr:`drop requires a ref (e.g. e5)
1085
- `,exitCode:1};let s=j(a);if(`error`in s)return{stdout:``,stderr:s.error,exitCode:1};let c=i[0],l=a.path,u=a.data,d=[];if(l){let e=await NC(n,l),r=l.split(`/`).pop()??l;d.push({name:r,type:IC(r),base64:t(e)})}let f=[];if(u){let e=u.indexOf(`=`);if(e===-1)return{stdout:``,stderr:`--data format must be "mime/type=value"
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}},HC=async({browser:e,fs:n,state:r,positional:i,flags:a,onTab:o})=>{if(i.length===0)return{stdout:``,stderr:`drop requires a ref (e.g. e5)
1085
+ `,exitCode:1};let s=j(a);if(`error`in s)return{stdout:``,stderr:s.error,exitCode:1};let c=i[0],l=a.path,u=a.data,d=[];if(l){let e=await PC(n,l),r=l.split(`/`).pop()??l;d.push({name:r,type:LC(r),base64:t(e)})}let f=[];if(u){let e=u.indexOf(`=`);if(e===-1)return{stdout:``,stderr:`--data format must be "mime/type=value"
1086
1086
  `,exitCode:1};f.push({mimeType:u.slice(0,e),value:u.slice(e+1)})}return{stdout:await o(s.targetId,async({sessionId:e,transport:t})=>{let n=r.snapshots.get(s.targetId);if(!n)throw Error(`No snapshot available. Run "snapshot" first.`);let i=n.refToBackendNodeId.get(c);if(i){await t.send(`DOM.enable`,{},e);let n=await t.send(`DOM.resolveNode`,{backendNodeId:i},e),a=await t.send(`Runtime.callFunctionOn`,{objectId:n.object.objectId,functionDeclaration:`function(filesData, dataItems) {
1087
1087
  var dt = new DataTransfer();
1088
1088
  for (var i = 0; i < filesData.length; i++) {
@@ -1117,7 +1117,7 @@ Options:
1117
1117
  el.dispatchEvent(new DragEvent('drop', { bubbles: true, cancelable: true, dataTransfer: dt }));
1118
1118
  return true;
1119
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 r.snapshots.delete(s.targetId),`Dropped onto ${c}`})+`
1120
- `,stderr:``,exitCode:0}},HC=e(`playwright-teleport`),UC={origin:``,localStorage:{},sessionStorage:{}};function WC(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 GC(e){return Object.keys(e.localStorage).length+Object.keys(e.sessionStorage).length}function KC(e){if(!e)return null;try{return new URL(e).origin}catch{return null}}function qC(e){try{return new URL(`/favicon.ico`,e).toString()}catch{return e}}function JC(e,t,n){let r=KC(t);if(t&&r===e)return t;let i=KC(n);return n&&i===e?n:e||(t??n)}async function YC(e,t){let n=await e.evaluate(`(() => {
1120
+ `,stderr:``,exitCode:0}},UC=e(`playwright-teleport`),WC={origin:``,localStorage:{},sessionStorage:{}};function GC(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 KC(e){return Object.keys(e.localStorage).length+Object.keys(e.sessionStorage).length}function qC(e){if(!e)return null;try{return new URL(e).origin}catch{return null}}function JC(e){try{return new URL(`/favicon.ico`,e).toString()}catch{return e}}function YC(e,t,n){let r=qC(t);if(t&&r===e)return t;let i=qC(n);return n&&i===e?n:e||(t??n)}async function XC(e,t){let n=await e.evaluate(`(() => {
1121
1121
  const collect = (storage) => {
1122
1122
  const items = {};
1123
1123
  for (let i = 0; i < storage.length; i++) {
@@ -1131,7 +1131,7 @@ Options:
1131
1131
  localStorage: collect(window.localStorage),
1132
1132
  sessionStorage: collect(window.sessionStorage),
1133
1133
  });
1134
- })()`);if(typeof n!=`string`||n.length===0)return HC.warn(`Teleport storage capture returned non-string result`,{label:t,type:typeof n}),UC;try{let e=JSON.parse(n);return{origin:typeof e.origin==`string`?e.origin:``,localStorage:e.localStorage??{},sessionStorage:e.sessionStorage??{}}}catch(e){return HC.warn(`Could not parse teleport storage snapshot`,{label:t,error:String(e)}),UC}}function XC(e){return`(() => {
1134
+ })()`);if(typeof n!=`string`||n.length===0)return UC.warn(`Teleport storage capture returned non-string result`,{label:t,type:typeof n}),WC;try{let e=JSON.parse(n);return{origin:typeof e.origin==`string`?e.origin:``,localStorage:e.localStorage??{},sessionStorage:e.sessionStorage??{}}}catch(e){return UC.warn(`Could not parse teleport storage snapshot`,{label:t,error:String(e)}),WC}}function ZC(e){return`(() => {
1135
1135
  const snapshot = ${JSON.stringify(e)};
1136
1136
  if (!snapshot.origin || window.location.origin !== snapshot.origin) return;
1137
1137
  const markerKey = '__slicc_teleport_storage_applied__:' + snapshot.origin;
@@ -1147,7 +1147,7 @@ Options:
1147
1147
  apply(window.localStorage, snapshot.localStorage || {});
1148
1148
  apply(window.sessionStorage, snapshot.sessionStorage || {});
1149
1149
  try { window.sessionStorage.setItem(markerKey, '1'); } catch {}
1150
- })();`}function ZC(e){return`(() => {
1150
+ })();`}function QC(e){return`(() => {
1151
1151
  const snapshot = ${JSON.stringify(e)};
1152
1152
  if (!snapshot.origin || globalThis.location.origin !== snapshot.origin) {
1153
1153
  throw new Error('Teleport storage origin mismatch');
@@ -1165,88 +1165,88 @@ Options:
1165
1165
  localStorageCount: Object.keys(snapshot.localStorage || {}).length,
1166
1166
  sessionStorageCount: Object.keys(snapshot.sessionStorage || {}).length,
1167
1167
  });
1168
- })();`}async function QC(e,t,n){let r=GC(t);if(r===0)return;let i=await e.evaluate(ZC(t));HC.info(`Applied teleport storage snapshot on current page`,{target:n,totalEntries:r,resultType:typeof i}),HC.debug(`Applied teleport storage snapshot details`,{target:n,origin:t.origin||`(unknown)`,totalEntries:r,resultType:typeof i})}async function $C(e,t,n){let r=GC(t);if(r===0)return null;let i=await e.send(`Page.addScriptToEvaluateOnNewDocument`,{source:XC(t)}),a=typeof i.identifier==`string`?i.identifier:null;return HC.info(`Installed teleport storage init script`,{target:n,totalEntries:r,hasIdentifier:!!a}),HC.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 ew(e,t,n){if(t)try{await e.send(`Page.removeScriptToEvaluateOnNewDocument`,{identifier:t.identifier})}catch(e){HC.warn(`Failed to remove teleport storage init script`,{target:n,error:String(e)})}}async function tw(e){let t=await e.evaluate(`(() => JSON.stringify({
1168
+ })();`}async function $C(e,t,n){let r=KC(t);if(r===0)return;let i=await e.evaluate(QC(t));UC.info(`Applied teleport storage snapshot on current page`,{target:n,totalEntries:r,resultType:typeof i}),UC.debug(`Applied teleport storage snapshot details`,{target:n,origin:t.origin||`(unknown)`,totalEntries:r,resultType:typeof i})}async function ew(e,t,n){let r=KC(t);if(r===0)return null;let i=await e.send(`Page.addScriptToEvaluateOnNewDocument`,{source:ZC(t)}),a=typeof i.identifier==`string`?i.identifier:null;return UC.info(`Installed teleport storage init script`,{target:n,totalEntries:r,hasIdentifier:!!a}),UC.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 tw(e,t,n){if(t)try{await e.send(`Page.removeScriptToEvaluateOnNewDocument`,{identifier:t.identifier})}catch(e){UC.warn(`Failed to remove teleport storage init script`,{target:n,error:String(e)})}}async function nw(e){let t=await e.evaluate(`(() => JSON.stringify({
1169
1169
  url: window.location.href,
1170
1170
  title: document.title || '',
1171
1171
  bodySnippet: document.body?.innerText?.replace(/\\s+/g, ' ').trim().slice(0, 500) || '(empty)',
1172
- }))()`);if(typeof t!=`string`||t.length===0)return{url:``,title:``,bodySnippet:`(unavailable)`};try{let e=JSON.parse(t);return{url:typeof e.url==`string`?e.url:``,title:typeof e.title==`string`?e.title:``,bodySnippet:typeof e.bodySnippet==`string`&&e.bodySnippet.length>0?e.bodySnippet:`(empty)`}}catch{return{url:``,title:``,bodySnippet:`(unparseable)`}}}function nw(e){return/callback|authorize\/resume|error/i.test(e)}async function rw(e,t,n){try{let r=await tw(e),i=`${n}:${r.url}:${r.title}`;if(t.lastFollowerDiagnosticKey===i)return;t.lastFollowerDiagnosticKey=i,HC.debug(`Teleport follower diagnostics`,{reason:n,url:r.url,title:r.title,bodySnippet:r.bodySnippet})}catch(e){HC.warn(`Could not capture teleport follower diagnostics`,{reason:n,error:String(e)})}}async function iw(e,t,n){let r=t.followerStorageScript;if(r){t.followerStorageScript=null;try{await e.withTab(r.targetId,e=>ew(e,r,`follower`)),HC.info(`Removed follower teleport storage init script`,{reason:n})}catch(e){HC.warn(`Failed to remove follower teleport storage init script`,{reason:n,error:String(e)})}}}function aw(e){return Array.isArray(e)?e:[]}const V=e(`playwright-teleport`);let ow=null,sw=null;function cw(e){ow=e}function lw(e){sw=e}function uw(){return sw?.()??null}async function dw(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=>rw(e,t,`timeout`))}catch(e){V.warn(`Could not attach to follower for timeout diagnostics`,{error:String(e)})}await iw(e,t,`timeout`)}if(fw(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 fw(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 pw(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}),hw(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 mw(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}),nw(o)&&await e.withTab(r,e=>rw(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}),bw(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 hw(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=UC;try{a=aw((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=>YC(e,`leader`)),V.info(`Captured leader storage for follower`,{totalEntries:GC(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=ow?.();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 $C(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`)&&dw(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(()=>{mw(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 iw(e,n,`trigger-error`),n.phase=`done`,fw(n),n.rejectBlock?.(t instanceof Error?t:Error(String(t)))}}}async function gw(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=aw((await e.send(`Network.getCookies`)).cookies),a=i.length>0?WC(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=UC;try{o=await YC(e,`follower`),V.info(`Captured follower storage for leader`,{totalEntries:GC(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 rw(e,t,`capture`),await ew(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 _w(e,t,n,r){try{await e.navigate(n),await QC(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 $C(e,t,`leader`);try{r&&await e.navigate(r)}finally{await ew(e,a,`leader`)}}}async function vw(e,t,n,r,i){let a=e.targetId,o=await $C(e,n,`leader`);try{r&&(V.info(`Navigating leader after auth-state injection`,{hasLandingUrl:!0,storageEntries:GC(n)}),V.debug(`Navigating leader after auth-state injection details`,{landingUrl:r,originalLeaderUrl:t.originalLeaderUrl,finalUrl:i,leaderTargetId:a,storageOrigin:n.origin||`(unknown)`,storageEntries:GC(n)}),await e.navigate(r))}finally{await ew(e,o,`leader`)}}async function yw(e,t,n,r,i){let a=t.leaderTargetId,o=r.origin||``,s=JC(o,t.originalLeaderUrl,i),c=KC(t.originalLeaderUrl),l=!!o&&c!==o,u=l?qC(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:GC(r)}),V.debug(`Hydrating leader storage origin before landing details`,{hydrationUrl:u,landingUrl:s,originalLeaderUrl:t.originalLeaderUrl,finalUrl:i,leaderTargetId:a,storageOrigin:o,storageEntries:GC(r)}),await _w(e,r,u,s)):await vw(e,t,r,s,i)}),s):(V.warn(`No leader tab available for auth-state injection`),s)}async function bw(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 gw(e,n),o=GC(i),s=await yw(e,n,t,i,a);n.phase=`done`,fw(n);let c=t.length>0?` (${WC(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 iw(e,n,`capture-error`),n.phase=`done`,fw(n),n.rejectBlock?.(t instanceof Error?t:Error(String(t)))}}}const xw=e(`playwright`),Sw=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=j(i);if(`error`in o)return{stdout:``,stderr:o.error,exitCode:1};await a(o.targetId,e=>e.navigate(r[0])),n.snapshots.delete(o.targetId);let s=i[`teleport-start`],c=i[`teleport-return`];if(s&&c){xw.info(`Arming teleport via goto/navigate flags`),xw.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&&(fw(u),n.teleportWatchers.delete(o.targetId)),pw(e,n,t,a,l*1e3,i[`teleport-runtime`],r[0],o.targetId)}if(i.discover===`true`){let{browseShWarning:e,...n}=await mC(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}},Cw=async({browser:e,state:t,flags:n,onTab:r})=>{let i=j(n);return`error`in i?{stdout:``,stderr:i.error,exitCode:1}:(await r(i.targetId,async e=>{await e.evaluate(`history.back()`)}),t.snapshots.delete(i.targetId),{stdout:`Navigated back
1175
- `,stderr:``,exitCode:0})},ww=async({browser:e,state:t,flags:n,onTab:r})=>{let i=j(n);return`error`in i?{stdout:``,stderr:i.error,exitCode:1}:(await r(i.targetId,async e=>{await e.evaluate(`history.forward()`)}),t.snapshots.delete(i.targetId),{stdout:`Navigated forward
1176
- `,stderr:``,exitCode:0})},Tw=async({browser:e,flags:t,onTab:n})=>{let r=j(t);return`error`in r?{stdout:``,stderr:r.error,exitCode:1}:(await n(r.targetId,async e=>{await e.send(`Page.reload`)}),{stdout:`Reloaded
1177
- `,stderr:``,exitCode:0})},Ew=async({browser:e,flags:t,positional:n,onTab:r})=>{let i=j(t);if(`error`in i)return{stdout:``,stderr:i.error,exitCode:1};let a=n[0];return a!==`online`&&a!==`offline`?{stdout:``,stderr:`network-state-set requires "online" or "offline"
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})},Dw=[`image/`,`font/`,`text/css`,`application/javascript`,`text/javascript`];function Ow(e,t){if(e&&Dw.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 kw(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=BS({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:Ow(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=Ow(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 Aw(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 jw(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=Aw(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 Mw(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 Nw=async({browser:e,state:t,flags:n,onTab:r})=>{let i=j(n);if(`error`in i)return{stdout:``,stderr:i.error,exitCode:1};t.networkCleanup.has(i.targetId)||await r(i.targetId,async({sessionId:n,transport:r})=>{await r.send(`Network.enable`,{},n),kw(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 rw(e){return/callback|authorize\/resume|error/i.test(e)}async function iw(e,t,n){try{let r=await nw(e),i=`${n}:${r.url}:${r.title}`;if(t.lastFollowerDiagnosticKey===i)return;t.lastFollowerDiagnosticKey=i,UC.debug(`Teleport follower diagnostics`,{reason:n,url:r.url,title:r.title,bodySnippet:r.bodySnippet})}catch(e){UC.warn(`Could not capture teleport follower diagnostics`,{reason:n,error:String(e)})}}async function aw(e,t,n){let r=t.followerStorageScript;if(r){t.followerStorageScript=null;try{await e.withTab(r.targetId,e=>tw(e,r,`follower`)),UC.info(`Removed follower teleport storage init script`,{reason:n})}catch(e){UC.warn(`Failed to remove follower teleport storage init script`,{reason:n,error:String(e)})}}}function ow(e){return Array.isArray(e)?e:[]}const V=e(`playwright-teleport`);let sw=null,cw=null;function lw(e){sw=e}function uw(e){cw=e}function dw(){return cw?.()??null}async function fw(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=>iw(e,t,`timeout`))}catch(e){V.warn(`Could not attach to follower for timeout diagnostics`,{error:String(e)})}await aw(e,t,`timeout`)}if(pw(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 pw(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 mw(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}),gw(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 hw(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}),rw(o)&&await e.withTab(r,e=>iw(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}),xw(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 gw(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=WC;try{a=ow((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=>XC(e,`leader`)),V.info(`Captured leader storage for follower`,{totalEntries:KC(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=sw?.();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 ew(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`)&&fw(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(()=>{hw(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 aw(e,n,`trigger-error`),n.phase=`done`,pw(n),n.rejectBlock?.(t instanceof Error?t:Error(String(t)))}}}async function _w(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=ow((await e.send(`Network.getCookies`)).cookies),a=i.length>0?GC(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=WC;try{o=await XC(e,`follower`),V.info(`Captured follower storage for leader`,{totalEntries:KC(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 iw(e,t,`capture`),await tw(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 vw(e,t,n,r){try{await e.navigate(n),await $C(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 ew(e,t,`leader`);try{r&&await e.navigate(r)}finally{await tw(e,a,`leader`)}}}async function yw(e,t,n,r,i){let a=e.targetId,o=await ew(e,n,`leader`);try{r&&(V.info(`Navigating leader after auth-state injection`,{hasLandingUrl:!0,storageEntries:KC(n)}),V.debug(`Navigating leader after auth-state injection details`,{landingUrl:r,originalLeaderUrl:t.originalLeaderUrl,finalUrl:i,leaderTargetId:a,storageOrigin:n.origin||`(unknown)`,storageEntries:KC(n)}),await e.navigate(r))}finally{await tw(e,o,`leader`)}}async function bw(e,t,n,r,i){let a=t.leaderTargetId,o=r.origin||``,s=YC(o,t.originalLeaderUrl,i),c=qC(t.originalLeaderUrl),l=!!o&&c!==o,u=l?JC(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:KC(r)}),V.debug(`Hydrating leader storage origin before landing details`,{hydrationUrl:u,landingUrl:s,originalLeaderUrl:t.originalLeaderUrl,finalUrl:i,leaderTargetId:a,storageOrigin:o,storageEntries:KC(r)}),await vw(e,r,u,s)):await yw(e,t,r,s,i)}),s):(V.warn(`No leader tab available for auth-state injection`),s)}async function xw(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 _w(e,n),o=KC(i),s=await bw(e,n,t,i,a);n.phase=`done`,pw(n);let c=t.length>0?` (${GC(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 aw(e,n,`capture-error`),n.phase=`done`,pw(n),n.rejectBlock?.(t instanceof Error?t:Error(String(t)))}}}const Sw=e(`playwright`),Cw=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=j(i);if(`error`in o)return{stdout:``,stderr:o.error,exitCode:1};await a(o.targetId,e=>e.navigate(r[0])),n.snapshots.delete(o.targetId);let s=i[`teleport-start`],c=i[`teleport-return`];if(s&&c){Sw.info(`Arming teleport via goto/navigate flags`),Sw.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&&(pw(u),n.teleportWatchers.delete(o.targetId)),mw(e,n,t,a,l*1e3,i[`teleport-runtime`],r[0],o.targetId)}if(i.discover===`true`){let{browseShWarning:e,...n}=await hC(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}},ww=async({browser:e,state:t,flags:n,onTab:r})=>{let i=j(n);return`error`in i?{stdout:``,stderr:i.error,exitCode:1}:(await r(i.targetId,async e=>{await e.evaluate(`history.back()`)}),t.snapshots.delete(i.targetId),{stdout:`Navigated back
1175
+ `,stderr:``,exitCode:0})},Tw=async({browser:e,state:t,flags:n,onTab:r})=>{let i=j(n);return`error`in i?{stdout:``,stderr:i.error,exitCode:1}:(await r(i.targetId,async e=>{await e.evaluate(`history.forward()`)}),t.snapshots.delete(i.targetId),{stdout:`Navigated forward
1176
+ `,stderr:``,exitCode:0})},Ew=async({browser:e,flags:t,onTab:n})=>{let r=j(t);return`error`in r?{stdout:``,stderr:r.error,exitCode:1}:(await n(r.targetId,async e=>{await e.send(`Page.reload`)}),{stdout:`Reloaded
1177
+ `,stderr:``,exitCode:0})},Dw=async({browser:e,flags:t,positional:n,onTab:r})=>{let i=j(t);if(`error`in i)return{stdout:``,stderr:i.error,exitCode:1};let a=n[0];return a!==`online`&&a!==`offline`?{stdout:``,stderr:`network-state-set requires "online" or "offline"
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})},Ow=[`image/`,`font/`,`text/css`,`application/javascript`,`text/javascript`];function kw(e,t){if(e&&Ow.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 Aw(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=VS({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:kw(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=kw(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 jw(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 Mw(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=jw(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 Nw(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 Pw=async({browser:e,state:t,flags:n,onTab:r})=>{let i=j(n);if(`error`in i)return{stdout:``,stderr:i.error,exitCode:1};t.networkCleanup.has(i.targetId)||await r(i.targetId,async({sessionId:n,transport:r})=>{await r.send(`Network.enable`,{},n),Aw(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
1179
1179
  `,stderr:``,exitCode:0}:{stdout:c.map(e=>`${e.index} ${e.method} ${e.url} → ${e.status??`pending`}`).join(`
1180
1180
  `)+`
1181
- `,stderr:``,exitCode:0}},Pw=async({browser:e,state:t,positional:n,flags:r,fs:i,onTab:a})=>{let o=j(r);if(`error`in o)return{stdout:``,stderr:o.error,exitCode:1};t.networkCleanup.has(o.targetId)||await a(o.targetId,async({sessionId:n,transport:r})=>{await r.send(`Network.enable`,{},n),kw(e,t,r,o.targetId,n)});let s=n[0]??``,c=Mw(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}},Fw=async({browser:e,state:t,positional:n,flags:r,fs:i,onTab:a})=>{let o=j(r);if(`error`in o)return{stdout:``,stderr:o.error,exitCode:1};t.networkCleanup.has(o.targetId)||await a(o.targetId,async({sessionId:n,transport:r})=>{await r.send(`Network.enable`,{},n),Aw(e,t,r,o.targetId,n)});let s=n[0]??``,c=Nw(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)+`
1182
1182
  ... (truncated)`:e,n=c.responseBodyBase64?`Response Body (base64)`:`Response Body`;l.push(``,`${n}:\n${t}`)}let u=l.join(`
1183
1183
  `)+`
1184
- `,d=r.filename;return d?(await i.writeFile(d,u),{stdout:`Saved to ${d}\n`,stderr:``,exitCode:0}):{stdout:u,stderr:``,exitCode:0}},Fw=async({browser:e,state:t,positional:n,flags:r,fs:i,onTab:a})=>{let o=j(r);if(`error`in o)return{stdout:``,stderr:o.error,exitCode:1};t.networkCleanup.has(o.targetId)||await a(o.targetId,async({sessionId:n,transport:r})=>{await r.send(`Network.enable`,{},n),kw(e,t,r,o.targetId,n)});let s=n[0]??``,c=Mw(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}},Iw=async({browser:e,state:t,positional:n,flags:r,fs:i,onTab:a})=>{let o=j(r);if(`error`in o)return{stdout:``,stderr:o.error,exitCode:1};t.networkCleanup.has(o.targetId)||await a(o.targetId,async({sessionId:n,transport:r})=>{await r.send(`Network.enable`,{},n),Aw(e,t,r,o.targetId,n)});let s=n[0]??``,c=Nw(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(`
1185
1185
  `)+`
1186
- `,u=r.filename;return u?(await i.writeFile(u,l),{stdout:`Saved to ${u}\n`,stderr:``,exitCode:0}):{stdout:l,stderr:``,exitCode:0}},Iw=async({browser:e,state:t,positional:n,flags:r,fs:i,onTab:a})=>{let o=j(r);if(`error`in o)return{stdout:``,stderr:o.error,exitCode:1};t.networkCleanup.has(o.targetId)||await a(o.targetId,async({sessionId:n,transport:r})=>{await r.send(`Network.enable`,{},n),kw(e,t,r,o.targetId,n)});let s=n[0]??``,c=Mw(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}},Lw=async({browser:e,state:t,positional:n,flags:r,fs:i,onTab:a})=>{let o=j(r);if(`error`in o)return{stdout:``,stderr:o.error,exitCode:1};t.networkCleanup.has(o.targetId)||await a(o.targetId,async({sessionId:n,transport:r})=>{await r.send(`Network.enable`,{},n),Aw(e,t,r,o.targetId,n)});let s=n[0]??``,c=Nw(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)
1187
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+`
1188
- `,stderr:``,exitCode:0}},Lw=async({browser:e,state:t,positional:n,flags:r,fs:i,onTab:a})=>{let o=j(r);if(`error`in o)return{stdout:``,stderr:o.error,exitCode:1};t.networkCleanup.has(o.targetId)||await a(o.targetId,async({sessionId:n,transport:r})=>{await r.send(`Network.enable`,{},n),kw(e,t,r,o.targetId,n)});let s=n[0]??``,c=Mw(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}},Rw=async({browser:e,state:t,positional:n,flags:r,fs:i,onTab:a})=>{let o=j(r);if(`error`in o)return{stdout:``,stderr:o.error,exitCode:1};t.networkCleanup.has(o.targetId)||await a(o.targetId,async({sessionId:n,transport:r})=>{await r.send(`Network.enable`,{},n),Aw(e,t,r,o.targetId,n)});let s=n[0]??``,c=Nw(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)
1189
1189
  `,stderr:``,exitCode:0};let l=Object.entries(c.responseHeaders).map(([e,t])=>`${e}: ${t}`).join(`
1190
1190
  `)+`
1191
- `,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=j(r);if(`error`in o)return{stdout:``,stderr:o.error,exitCode:1};t.networkCleanup.has(o.targetId)||await a(o.targetId,async({sessionId:n,transport:r})=>{await r.send(`Network.enable`,{},n),kw(e,t,r,o.targetId,n)});let s=n[0]??``,c=Mw(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=jw(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}},zw=async({browser:e,state:t,positional:n,flags:r,fs:i,onTab:a})=>{let o=j(r);if(`error`in o)return{stdout:``,stderr:o.error,exitCode:1};t.networkCleanup.has(o.targetId)||await a(o.targetId,async({sessionId:n,transport:r})=>{await r.send(`Network.enable`,{},n),Aw(e,t,r,o.targetId,n)});let s=n[0]??``,c=Nw(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=Mw(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)+`
1193
1193
  ... (truncated)`:d)+`
1194
- `,stderr:``,exitCode:0}},zw=async({browser:e,fs:t,state:n,positional:r,flags:i,onTab:a,signal:o})=>{let s=r[0]||`about:blank`,c=i.filter;await ie(e,n),Sn(o,`about to open the recording tab`);let l=await e.createPage(s);try{let{transport:r,sessionId:i}=await a(l,async e=>{let t=await e.transport.send(`Target.attachToTarget`,{targetId:l,flatten:!0});return{transport:e.transport,sessionId:t.sessionId}});n.harRecorder||=e.createHarRecorder(t,r);let u=await n.harRecorder.startRecording(l,i,c,o);return{stdout:`Recording started (targetId: ${l}, recordingId: ${u}) at ${s}\nHAR saved to /recordings/${u}/\n`,stderr:``,exitCode:0}}catch(t){throw await e.closePage(l).catch(()=>void 0),t}},Bw=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}},Vw=e(`playwright-route`),Hw=[{urlPattern:`*`,requestStage:`Request`}];function Uw(e){let t=e.replace(/[.+?^${}()|[\]\\]/g,`\\$&`).replace(/\*\*/g,`@@`).replace(/\*/g,`[^/]*`).replace(/@@/g,`.*`);return RegExp(`^${t}$`)}async function Ww(e,n,r,i,a){if(a.sessionId!==n)return;let{requestId:o,request:s}=a,c=(r.routes.get(i)??[]).find(e=>e.regex.test(s.url));if(!c){await e.send(`Fetch.continueRequest`,{requestId:o},n).catch(e=>{Vw.warn(`Fetch.continueRequest failed — intercepted request may hang`,{requestId:o,err:e})});return}let l=[{name:`Content-Type`,value:c.contentType},...Object.entries(c.headers).map(([e,t])=>({name:e,value:t}))];await e.send(`Fetch.fulfillRequest`,{requestId:o,responseCode:c.status,responseHeaders:l,body:c.body?t(new TextEncoder().encode(c.body)):void 0},n).catch(e=>{Vw.warn(`Fetch.fulfillRequest failed`,{requestId:o,url:s.url,err:e})})}async function Gw(e,t,n,r){await t(r,async({sessionId:t,transport:i})=>{await i.send(`Fetch.enable`,{patterns:Hw},t);let a,o=e=>{a&&Ww(a.transport,a.sessionId,n,r,e)};try{a=BS({browser:e,targetId:r,transport:i,sessionId:t,listeners:[[`Fetch.requestPaused`,o]],enable:(e,t)=>e.send(`Fetch.enable`,{patterns:Hw},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 Kw=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=j(r);if(`error`in a)return{stdout:``,stderr:a.error,exitCode:1};let o=n[0],s={pattern:o,regex:Uw(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(`,`)&&Vw.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 Gw(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}},qw=async({state:e,flags:t})=>{let n=j(t);if(`error`in n)return{stdout:``,stderr:n.error,exitCode:1};let r=e.routes.get(n.targetId)??[];return r.length===0?{stdout:`No active routes
1194
+ `,stderr:``,exitCode:0}},Bw=async({browser:e,fs:t,state:n,positional:r,flags:i,onTab:a,signal:o})=>{let s=r[0]||`about:blank`,c=i.filter;await ie(e,n),Sn(o,`about to open the recording tab`);let l=await e.createPage(s);try{let{transport:r,sessionId:i}=await a(l,async e=>{let t=await e.transport.send(`Target.attachToTarget`,{targetId:l,flatten:!0});return{transport:e.transport,sessionId:t.sessionId}});n.harRecorder||=e.createHarRecorder(t,r);let u=await n.harRecorder.startRecording(l,i,c,o);return{stdout:`Recording started (targetId: ${l}, recordingId: ${u}) at ${s}\nHAR saved to /recordings/${u}/\n`,stderr:``,exitCode:0}}catch(t){throw await e.closePage(l).catch(()=>void 0),t}},Vw=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}},Hw=e(`playwright-route`),Uw=[{urlPattern:`*`,requestStage:`Request`}];function Ww(e){let t=e.replace(/[.+?^${}()|[\]\\]/g,`\\$&`).replace(/\*\*/g,`@@`).replace(/\*/g,`[^/]*`).replace(/@@/g,`.*`);return RegExp(`^${t}$`)}async function Gw(e,n,r,i,a){if(a.sessionId!==n)return;let{requestId:o,request:s}=a,c=(r.routes.get(i)??[]).find(e=>e.regex.test(s.url));if(!c){await e.send(`Fetch.continueRequest`,{requestId:o},n).catch(e=>{Hw.warn(`Fetch.continueRequest failed — intercepted request may hang`,{requestId:o,err:e})});return}let l=[{name:`Content-Type`,value:c.contentType},...Object.entries(c.headers).map(([e,t])=>({name:e,value:t}))];await e.send(`Fetch.fulfillRequest`,{requestId:o,responseCode:c.status,responseHeaders:l,body:c.body?t(new TextEncoder().encode(c.body)):void 0},n).catch(e=>{Hw.warn(`Fetch.fulfillRequest failed`,{requestId:o,url:s.url,err:e})})}async function Kw(e,t,n,r){await t(r,async({sessionId:t,transport:i})=>{await i.send(`Fetch.enable`,{patterns:Uw},t);let a,o=e=>{a&&Gw(a.transport,a.sessionId,n,r,e)};try{a=VS({browser:e,targetId:r,transport:i,sessionId:t,listeners:[[`Fetch.requestPaused`,o]],enable:(e,t)=>e.send(`Fetch.enable`,{patterns:Uw},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 qw=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=j(r);if(`error`in a)return{stdout:``,stderr:a.error,exitCode:1};let o=n[0],s={pattern:o,regex:Ww(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(`,`)&&Hw.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 Kw(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}},Jw=async({state:e,flags:t})=>{let n=j(t);if(`error`in n)return{stdout:``,stderr:n.error,exitCode:1};let r=e.routes.get(n.targetId)??[];return r.length===0?{stdout:`No active routes
1197
1197
  `,stderr:``,exitCode:0}:{stdout:r.map((e,t)=>`${t+1}. ${e.pattern} → ${e.status} ${e.contentType}`).join(`
1198
1198
  `)+`
1199
- `,stderr:``,exitCode:0}},Jw=async({state:e,positional:t,flags:n})=>{let r=j(n);if(`error`in r)return{stdout:``,stderr:r.error,exitCode:1};let i=t[0];if(!i){e.routes.set(r.targetId,[]);let t=e.routeCleanup.get(r.targetId);return t&&(t(),e.routeCleanup.delete(r.targetId)),{stdout:`All routes removed
1200
- `,stderr:``,exitCode:0}}let a=e.routes.get(r.targetId)??[],o=a.length,s=a.filter(e=>e.pattern!==i);if(e.routes.set(r.targetId,s),s.length===0){let t=e.routeCleanup.get(r.targetId);t&&(t(),e.routeCleanup.delete(r.targetId))}return{stdout:`Removed ${o-s.length} route(s) matching "${i}"\n`,stderr:``,exitCode:0}},Yw=`/.playwright`;function Xw(e,t){return e?`${t.replace(/\/+$/,``)}${Yw}`:Yw}async function Zw(e,t,n){if(!t.sessionDirsCreated.has(n)){for(let t of[n,`${n}/snapshots`,`${n}/screenshots`])try{await e.mkdir(t,{recursive:!0})}catch(e){if(!Tn(e))throw e}t.sessionDirsCreated.add(n)}}async function Qw(e,t,n,r,i){try{return await e.withTab(n,async e=>{let{url:a,title:o,text:s,refToSelector:c,refToBackendNodeId:l,refToFrameId:u}=await se(e),d={url:a,title:o,refToSelector:c,refToBackendNodeId:l,refToFrameId:u,content:s,timestamp:Date.now()};r.snapshots.set(n,d);let f=[`Page URL: ${a}`,`Page Title: ${o}`,``,s].join(`
1201
- `),p=`${i}/snapshots/page-${Cn(new Date)}.yml`;return await t.writeFile(p,f),p})}catch{return null}}async function $w(e,t,n,r){await Zw(e,t,n);let i=new Date().toISOString(),a=`playwright-cli ${r.command}${r.args.length?` `+r.args.join(` `):``}`,o=r.result.exitCode===0?r.result.stdout.trim()||`OK`:`Error: ${r.result.stderr.trim()}`,s=[`### ${a}`,`- **Time**: ${i}`];if(r.tabUrl||r.targetId){let e=r.tabUrl?`${r.tabUrl}${r.targetId?` (targetId: ${r.targetId})`:``}`:`targetId: ${r.targetId}`;s.push(`- **Tab**: ${e}`)}s.push(`- **Result**: ${o}`),r.snapshotPath&&s.push(``,`[Snapshot](${r.snapshotPath})`),s.push(`---`,``);let c=s.join(`
1199
+ `,stderr:``,exitCode:0}},Yw=async({state:e,positional:t,flags:n})=>{let r=j(n);if(`error`in r)return{stdout:``,stderr:r.error,exitCode:1};let i=t[0];if(!i){e.routes.set(r.targetId,[]);let t=e.routeCleanup.get(r.targetId);return t&&(t(),e.routeCleanup.delete(r.targetId)),{stdout:`All routes removed
1200
+ `,stderr:``,exitCode:0}}let a=e.routes.get(r.targetId)??[],o=a.length,s=a.filter(e=>e.pattern!==i);if(e.routes.set(r.targetId,s),s.length===0){let t=e.routeCleanup.get(r.targetId);t&&(t(),e.routeCleanup.delete(r.targetId))}return{stdout:`Removed ${o-s.length} route(s) matching "${i}"\n`,stderr:``,exitCode:0}},Xw=`/.playwright`;function Zw(e,t){return e?`${t.replace(/\/+$/,``)}${Xw}`:Xw}async function Qw(e,t,n){if(!t.sessionDirsCreated.has(n)){for(let t of[n,`${n}/snapshots`,`${n}/screenshots`])try{await e.mkdir(t,{recursive:!0})}catch(e){if(!Tn(e))throw e}t.sessionDirsCreated.add(n)}}async function $w(e,t,n,r,i){try{return await e.withTab(n,async e=>{let{url:a,title:o,text:s,refToSelector:c,refToBackendNodeId:l,refToFrameId:u}=await se(e),d={url:a,title:o,refToSelector:c,refToBackendNodeId:l,refToFrameId:u,content:s,timestamp:Date.now()};r.snapshots.set(n,d);let f=[`Page URL: ${a}`,`Page Title: ${o}`,``,s].join(`
1201
+ `),p=`${i}/snapshots/page-${Cn(new Date)}.yml`;return await t.writeFile(p,f),p})}catch{return null}}async function eT(e,t,n,r){await Qw(e,t,n);let i=new Date().toISOString(),a=`playwright-cli ${r.command}${r.args.length?` `+r.args.join(` `):``}`,o=r.result.exitCode===0?r.result.stdout.trim()||`OK`:`Error: ${r.result.stderr.trim()}`,s=[`### ${a}`,`- **Time**: ${i}`];if(r.tabUrl||r.targetId){let e=r.tabUrl?`${r.tabUrl}${r.targetId?` (targetId: ${r.targetId})`:``}`:`targetId: ${r.targetId}`;s.push(`- **Tab**: ${e}`)}s.push(`- **Result**: ${o}`),r.snapshotPath&&s.push(``,`[Snapshot](${r.snapshotPath})`),s.push(`---`,``);let c=s.join(`
1202
1202
  `)+`
1203
- `,l=`${n}/session.md`,u=``;try{let t=await e.readFile(l);u=typeof t==`string`?t:new TextDecoder().decode(t)}catch{}await e.writeFile(l,u+c)}function eT(){return import(`./snapshot-features-DAAZCatM.js`)}async function tT(e,t,n,r){let i=await e.getAccessibilityTreeForFrame(r.frameId),a=new Map,o=new Map,s=new Map,c=oe(i,a,o,{value:0},``,`f1`);for(let e of a.keys())s.set(e,r.frameId);let l=c.join(`
1204
- `);return t.snapshots.set(n,{url:r.url,title:r.name,refToSelector:a,refToBackendNodeId:o,refToFrameId:s,content:l,timestamp:Date.now()}),l}async function 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() {
1203
+ `,l=`${n}/session.md`,u=``;try{let t=await e.readFile(l);u=typeof t==`string`?t:new TextDecoder().decode(t)}catch{}await e.writeFile(l,u+c)}function tT(){return import(`./snapshot-features-BW4_xmHw.js`)}async function nT(e,t,n,r){let i=await e.getAccessibilityTreeForFrame(r.frameId),a=new Map,o=new Map,s=new Map,c=oe(i,a,o,{value:0},``,`f1`);for(let e of a.keys())s.set(e,r.frameId);let l=c.join(`
1204
+ `);return t.snapshots.set(n,{url:r.url,title:r.name,refToSelector:a,refToBackendNodeId:o,refToFrameId:s,content:l,timestamp:Date.now()}),l}async function rT(e,t){await e.send(`DOM.enable`),await e.send(`Runtime.enable`);let n=(await e.send(`DOM.resolveNode`,{backendNodeId:t})).object;if(n?.objectId)return(await e.send(`Runtime.callFunctionOn`,{objectId:n.objectId,functionDeclaration:`function() {
1205
1205
  this.scrollIntoView({ block: 'center' });
1206
1206
  const r = this.getBoundingClientRect();
1207
1207
  return { x: r.x + window.scrollX, y: r.y + window.scrollY, width: r.width, height: r.height };
1208
- }`,returnByValue:!0})).result?.value}async function rT(e,t){let n=await e.evaluate(`(function() {
1208
+ }`,returnByValue:!0})).result?.value}async function iT(e,t){let n=await e.evaluate(`(function() {
1209
1209
  const el = document.querySelector(${JSON.stringify(t.split(`,`)[0].trim())});
1210
1210
  if (!el) return null;
1211
1211
  el.scrollIntoView({ block: 'center' });
1212
1212
  const r = el.getBoundingClientRect();
1213
1213
  return JSON.stringify({ x: r.x + window.scrollX, y: r.y + window.scrollY, width: r.width, height: r.height });
1214
- })()`);return n?En(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:t,state:n,flags:r,onTab:i})=>{let a=j(r);if(`error`in a)return{stdout:``,stderr:a.error,exitCode:1};let o=r[`no-iframes`]===`true`,s=r.depth;if(s!==void 0&&!/^[1-9][0-9]*$/.test(s))return{stdout:``,stderr:`snapshot: --depth must be a positive integer, got "${s}"\n`,exitCode:1};let c=s===void 0?void 0:parseInt(s,10),l=r.boxes===`true`;if(l&&r.frame)return{stdout:``,stderr:`snapshot: --boxes is not supported with --frame (child-frame rects live in another coordinate space)
1215
- `,exitCode:1};let u=await i(a.targetId,async e=>{let t=await Ln(e,r);if(t)return tT(e,n,a.targetId,t);let{snapshot:i,output:s}=await re(e,n,a.targetId,{noIframes:o});if(!l)return s;let{annotateBoxes:c}=await eT();return c(e,i.refToBackendNodeId,s)});if(c!==void 0){let{limitSnapshotDepth:e}=await eT();u=e(u,c)}return r.filename?(await t.writeFile(r.filename,u),{stdout:`Snapshot saved to ${r.filename}\n`,stderr:``,exitCode:0}):{stdout:u+`
1216
- `,stderr:``,exitCode:0}},oT=async e=>{let{findHandlerImpl:t}=await eT();return t(e)},sT=async({browser:e,flags:t,onTab:n})=>{let r=j(t);return`error`in r?{stdout:``,stderr:r.error,exitCode:1}:{stdout:await n(r.targetId,async e=>`Frame IDs (use with --frame, never --tab):\n${(await e.getFrameTree()).map(e=>{let t=e.parentFrameId?`child`:`main`,n=e.parentFrameId?` parentFrameId=${e.parentFrameId}`:``;return` [${t}] frameId=${e.frameId}${n} - ${e.url}`}).join(`
1214
+ })()`);return n?En(n,`element clip rect`):void 0}async function aT(e,t,n){let r=t.refToBackendNodeId.get(n);if(r)return rT(e,r);let i=t.refToSelector.get(n);if(!i)throw Error(`Unknown ref "${n}"`);return iT(e,i)}const oT=async({browser:e,fs:t,state:n,flags:r,onTab:i})=>{let a=j(r);if(`error`in a)return{stdout:``,stderr:a.error,exitCode:1};let o=r[`no-iframes`]===`true`,s=r.depth;if(s!==void 0&&!/^[1-9][0-9]*$/.test(s))return{stdout:``,stderr:`snapshot: --depth must be a positive integer, got "${s}"\n`,exitCode:1};let c=s===void 0?void 0:parseInt(s,10),l=r.boxes===`true`;if(l&&r.frame)return{stdout:``,stderr:`snapshot: --boxes is not supported with --frame (child-frame rects live in another coordinate space)
1215
+ `,exitCode:1};let u=await i(a.targetId,async e=>{let t=await Ln(e,r);if(t)return nT(e,n,a.targetId,t);let{snapshot:i,output:s}=await re(e,n,a.targetId,{noIframes:o});if(!l)return s;let{annotateBoxes:c}=await tT();return c(e,i.refToBackendNodeId,s)});if(c!==void 0){let{limitSnapshotDepth:e}=await tT();u=e(u,c)}return r.filename?(await t.writeFile(r.filename,u),{stdout:`Snapshot saved to ${r.filename}\n`,stderr:``,exitCode:0}):{stdout:u+`
1216
+ `,stderr:``,exitCode:0}},sT=async e=>{let{findHandlerImpl:t}=await tT();return t(e)},cT=async({browser:e,flags:t,onTab:n})=>{let r=j(t);return`error`in r?{stdout:``,stderr:r.error,exitCode:1}:{stdout:await n(r.targetId,async e=>`Frame IDs (use with --frame, never --tab):\n${(await e.getFrameTree()).map(e=>{let t=e.parentFrameId?`child`:`main`,n=e.parentFrameId?` parentFrameId=${e.parentFrameId}`:``;return` [${t}] frameId=${e.frameId}${n} - ${e.url}`}).join(`
1217
1217
  `)}`)+`
1218
- `,stderr:``,exitCode:0}},cT=async({browser:e,fs:t,flags:n,scratchDir:r,onTab:i})=>{let a=j(n);if(`error`in a)return{stdout:``,stderr:a.error,exitCode:1};let o=n.filename||`${r}/page-${Cn(new Date)}.pdf`;try{await i(a.targetId,async({sessionId:e,transport:n})=>{let r=(await n.send(`Page.printToPDF`,{},e)).data,i=Pn(r);await t.writeFile(o,i)})}catch(e){let t=e instanceof Error?e.message:String(e);return v()?{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,sessionRoot:o,onTab:s})=>{let c=j(i);if(`error`in c)return{stdout:``,stderr:c.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 l=await s(c.targetId,async e=>{let s;if(r[0]?.startsWith(`e`)){let t=await lT(e,n,c.targetId,r[0]);if(`error`in t)return t;s=t.clip}let l=i.fullPage===`true`||i[`full-page`]===`true`;if(i.hires===`true`){let{hiresClip:t}=await eT();s=await t(e,s,l)}let u=i[`max-width`]?parseInt(i[`max-width`],10):void 0,d=dT(i),f=await e.screenshot({format:d,fullPage:l,...s?{clip:s}:{},...u?{maxWidth:u}:{}}),p=d===`jpeg`?`jpg`:d,m=i.filename||`${a}/screenshot-${Date.now()}.${p}`,h=Pn(f);await t.writeFile(m,h);try{await Zw(t,n,o);let e=`${o}/screenshots/screenshot-${Cn(new Date)}.${p}`;await t.writeFile(e,h)}catch{}return{message:`Screenshot saved to ${m} (${Math.round(h.length/1024)} KB)`}});return`error`in l?{stdout:``,stderr:`screenshot: ${l.error}\n`,exitCode:1}:{stdout:l.message+`
1221
- `,stderr:``,exitCode:0}},pT=async({browser:e,fs:t,positional:n,flags:r,sessionRoot:i,onTab:a})=>{let o=j(r);if(`error`in o)return{stdout:``,stderr:o.error,exitCode:1};let s=r.filename??n[0]??`${i}/storage-state.json`,c=[],l=[],u=``;await a(o.targetId,async e=>{c=(await e.send(`Network.getCookies`)).cookies??[];let{sessionId:t,transport:n}=e;u=(await n.send(`Runtime.evaluate`,{expression:`location.origin`,returnByValue:!0},t)).result.value??``;let r=(await n.send(`Runtime.evaluate`,{expression:`JSON.stringify(Object.entries(localStorage).map(([name,value])=>({name,value})))`,returnByValue:!0},t)).result.value??`[]`;l=JSON.parse(r)});let d=JSON.stringify({cookies:c,origins:u?[{origin:u,localStorage:l}]:[]},null,2);return await t.writeFile(s,d),{stdout:`Saved storage state to ${s}\n`,stderr:``,exitCode:0}},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
+ `,stderr:``,exitCode:0}},lT=async({browser:e,fs:t,flags:n,scratchDir:r,onTab:i})=>{let a=j(n);if(`error`in a)return{stdout:``,stderr:a.error,exitCode:1};let o=n.filename||`${r}/page-${Cn(new Date)}.pdf`;try{await i(a.targetId,async({sessionId:e,transport:n})=>{let r=(await n.send(`Page.printToPDF`,{},e)).data,i=Pn(r);await t.writeFile(o,i)})}catch(e){let t=e instanceof Error?e.message:String(e);return v()?{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 uT(e,t,n,r){let i=t.snapshots.get(n);if(!i)throw Error(`No snapshot available. Run "snapshot" first.`);let a=await aT(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 dT=new Set([`png`,`jpeg`,`webp`]);function fT(e){let t=e.type;if(t&&dT.has(t))return t;let n=e.filename??``;return/\.jpe?g$/i.test(n)?`jpeg`:/\.webp$/i.test(n)?`webp`:`png`}const pT=async({browser:e,fs:t,state:n,positional:r,flags:i,scratchDir:a,sessionRoot:o,onTab:s})=>{let c=j(i);if(`error`in c)return{stdout:``,stderr:c.error,exitCode:1};if(i.type&&!dT.has(i.type))return{stdout:``,stderr:`screenshot: --type must be png, jpeg, or webp, got "${i.type}"\n`,exitCode:1};if(i[`max-width`]&&fT(i)!==`png`)return{stdout:``,stderr:`screenshot: --max-width requires png output (the downscale pass measures PNG headers); drop --type/--filename extension or --max-width
1220
+ `,exitCode:1};let l=await s(c.targetId,async e=>{let s;if(r[0]?.startsWith(`e`)){let t=await uT(e,n,c.targetId,r[0]);if(`error`in t)return t;s=t.clip}let l=i.fullPage===`true`||i[`full-page`]===`true`;if(i.hires===`true`){let{hiresClip:t}=await tT();s=await t(e,s,l)}let u=i[`max-width`]?parseInt(i[`max-width`],10):void 0,d=fT(i),f=await e.screenshot({format:d,fullPage:l,...s?{clip:s}:{},...u?{maxWidth:u}:{}}),p=d===`jpeg`?`jpg`:d,m=i.filename||`${a}/screenshot-${Date.now()}.${p}`,h=Pn(f);await t.writeFile(m,h);try{await Qw(t,n,o);let e=`${o}/screenshots/screenshot-${Cn(new Date)}.${p}`;await t.writeFile(e,h)}catch{}return{message:`Screenshot saved to ${m} (${Math.round(h.length/1024)} KB)`}});return`error`in l?{stdout:``,stderr:`screenshot: ${l.error}\n`,exitCode:1}:{stdout:l.message+`
1221
+ `,stderr:``,exitCode:0}},mT=async({browser:e,fs:t,positional:n,flags:r,sessionRoot:i,onTab:a})=>{let o=j(r);if(`error`in o)return{stdout:``,stderr:o.error,exitCode:1};let s=r.filename??n[0]??`${i}/storage-state.json`,c=[],l=[],u=``;await a(o.targetId,async e=>{c=(await e.send(`Network.getCookies`)).cookies??[];let{sessionId:t,transport:n}=e;u=(await n.send(`Runtime.evaluate`,{expression:`location.origin`,returnByValue:!0},t)).result.value??``;let r=(await n.send(`Runtime.evaluate`,{expression:`JSON.stringify(Object.entries(localStorage).map(([name,value])=>({name,value})))`,returnByValue:!0},t)).result.value??`[]`;l=JSON.parse(r)});let d=JSON.stringify({cookies:c,origins:u?[{origin:u,localStorage:l}]:[]},null,2);return await t.writeFile(s,d),{stdout:`Saved storage state to ${s}\n`,stderr:``,exitCode:0}},hT=async({browser:e,fs:t,positional:n,flags:r,onTab:i})=>{if(n.length===0)return{stdout:``,stderr:`state-load requires a filename
1222
1222
  `,exitCode:1};let a=j(r);if(`error`in a)return{stdout:``,stderr:a.error,exitCode:1};let o=n[0],s;try{let e=await t.readTextFile(o);s=JSON.parse(e)}catch{return{stdout:``,stderr:`Failed to read storage state from ${o}\n`,exitCode:1}}let c=[];(s.cookies?.length||s.origins?.length)&&await i(a.targetId,async e=>{if(s.cookies?.length&&await e.send(`Network.setCookies`,{cookies:s.cookies}),!s.origins?.length)return;let{sessionId:t,transport:n}=e,r=(await n.send(`Runtime.evaluate`,{expression:`location.origin`,returnByValue:!0},t)).result.value??``,i=s.origins.filter(e=>e.origin===r);c=s.origins.filter(e=>e.origin!==r);for(let{localStorage:e}of i){let r=`(function() {
1223
1223
  var items = ${JSON.stringify(e)};
1224
1224
  for (var i = 0; i < items.length; i++) {
1225
1225
  localStorage.setItem(items[i].name, items[i].value);
1226
1226
  }
1227
- })()`;await n.send(`Runtime.evaluate`,{expression:r,returnByValue:!0},t)}});let l=``;return c.length>0&&(l=`Skipped localStorage for non-matching origins: ${c.map(e=>e.origin).join(`, `)}\n`),{stdout:`Loaded storage state from ${o}\n`,stderr:l,exitCode:0}};function hT(e,t){return{list:async({browser:e,flags:n,onTab:r})=>{let i=j(n);return`error`in i?{stdout:``,stderr:i.error,exitCode:1}:{stdout:await r(i.targetId,async e=>{let n=await e.evaluate(`JSON.stringify(Object.entries(${t}))`),r=JSON.parse(n);return r.length===0?`No ${t} entries`:r.map(([e,t])=>`${e}=${t}`).join(`
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 gT(e,t){return{list:async({browser:e,flags:n,onTab:r})=>{let i=j(n);return`error`in i?{stdout:``,stderr:i.error,exitCode:1}:{stdout:await r(i.targetId,async e=>{let n=await e.evaluate(`JSON.stringify(Object.entries(${t}))`),r=JSON.parse(n);return r.length===0?`No ${t} entries`:r.map(([e,t])=>`${e}=${t}`).join(`
1228
1228
  `)})+`
1229
1229
  `,stderr:``,exitCode:0}},get:async({browser:n,positional:r,flags:i,onTab:a})=>{if(r.length===0)return{stdout:``,stderr:`${e}-get requires a key\n`,exitCode:1};let o=j(i);return`error`in o?{stdout:``,stderr:o.error,exitCode:1}:{stdout:await a(o.targetId,async e=>{let n=await e.evaluate(`${t}.getItem(${JSON.stringify(r[0])})`);if(n===null)throw Error(`Key "${r[0]}" not found in ${t}`);return n})+`
1230
- `,stderr:``,exitCode:0}},set:async({browser:n,positional:r,flags:i,onTab:a})=>{if(r.length<2)return{stdout:``,stderr:`${e}-set requires <key> <value>\n`,exitCode:1};let o=j(i);return`error`in o?{stdout:``,stderr:o.error,exitCode:1}:(await a(o.targetId,async e=>{await e.evaluate(`${t}.setItem(${JSON.stringify(r[0])}, ${JSON.stringify(r.slice(1).join(` `))})`)}),{stdout:`${t} "${r[0]}" set\n`,stderr:``,exitCode:0})},del:async({browser:n,positional:r,flags:i,onTab:a})=>{if(r.length===0)return{stdout:``,stderr:`${e}-delete requires a key\n`,exitCode:1};let o=j(i);return`error`in o?{stdout:``,stderr:o.error,exitCode:1}:(await a(o.targetId,async e=>{await e.evaluate(`${t}.removeItem(${JSON.stringify(r[0])})`)}),{stdout:`${t} "${r[0]}" deleted\n`,stderr:``,exitCode:0})},clear:async({browser:e,flags:n,onTab:r})=>{let i=j(n);return`error`in i?{stdout:``,stderr:i.error,exitCode:1}:(await r(i.targetId,async e=>{await e.evaluate(`${t}.clear()`)}),{stdout:`${t} cleared\n`,stderr:``,exitCode:0})}}}const 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&&(fw(u),t.teleportWatchers.delete(i)),pw(e,t,s,c,l*1e3,n[`teleport-runtime`],r,i),null}const xT=async({browser:e,fs:t,state:n,positional:r,flags:i,onTab:a})=>{let o=r[0]||`about:blank`,s=i.runtime,c=i.mobile===`true`;await ie(e,n);let l=c?`about:blank`:o,u;if(u=s?await e.createRemotePage(s,l):await e.createPage(l),c&&await a(u,async e=>{await e.setViewportOverride(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`}),o!==`about:blank`&&await e.navigate(o)}),i.foreground===`true`||i.fg===`true`)try{await a(u,e=>e.bringToFront())}catch(e){vT.debug(`open/tab-new --foreground bringToFront failed`,{targetId:u,error:e instanceof Error?e.message:String(e)})}let d=bT(e,n,i,o,u);if(d)return d;if(i.discover===`true`){let{browseShWarning:e,...n}=await mC(o,{discover:!0,fs:t}),r={action:`open`,targetId:u,source:`auxiliary-fetch`,...n};return{stdout:JSON.stringify(r,null,2)+`
1231
- `,stderr:e?`${e}\n`:``,exitCode:0}}return{stdout:`Opened ${o} in new tab [targetId: ${u}]\n`,stderr:``,exitCode:0}},ST=async({browser:e,state:t})=>{let n=await ae(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=j(i);return`error`in o?{stdout:``,stderr:o.error,exitCode:1}:(await a(o.targetId,async e=>{await e.evaluate(`${t}.setItem(${JSON.stringify(r[0])}, ${JSON.stringify(r.slice(1).join(` `))})`)}),{stdout:`${t} "${r[0]}" set\n`,stderr:``,exitCode:0})},del:async({browser:n,positional:r,flags:i,onTab:a})=>{if(r.length===0)return{stdout:``,stderr:`${e}-delete requires a key\n`,exitCode:1};let o=j(i);return`error`in o?{stdout:``,stderr:o.error,exitCode:1}:(await a(o.targetId,async e=>{await e.evaluate(`${t}.removeItem(${JSON.stringify(r[0])})`)}),{stdout:`${t} "${r[0]}" deleted\n`,stderr:``,exitCode:0})},clear:async({browser:e,flags:n,onTab:r})=>{let i=j(n);return`error`in i?{stdout:``,stderr:i.error,exitCode:1}:(await r(i.targetId,async e=>{await e.evaluate(`${t}.clear()`)}),{stdout:`${t} cleared\n`,stderr:``,exitCode:0})}}}const _T=gT(`localstorage`,`localStorage`),vT=gT(`sessionstorage`,`sessionStorage`),yT=e(`playwright`),bT={width:412,height:915,deviceScaleFactor:2.625};function xT(e,t,n,r,i){let a=n[`teleport-start`],o=n[`teleport-return`];if(!a||!o)return null;yT.info(`Arming teleport via open/tab-new flags`),yT.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&&(pw(u),t.teleportWatchers.delete(i)),mw(e,t,s,c,l*1e3,n[`teleport-runtime`],r,i),null}const ST=async({browser:e,fs:t,state:n,positional:r,flags:i,onTab:a})=>{let o=r[0]||`about:blank`,s=i.runtime,c=i.mobile===`true`;await ie(e,n);let l=c?`about:blank`:o,u;if(u=s?await e.createRemotePage(s,l):await e.createPage(l),c&&await a(u,async e=>{await e.setViewportOverride(bT.width,bT.height,{deviceScaleFactor:bT.deviceScaleFactor,mobile:!0,userAgent:`Mozilla/5.0 (Linux; Android 14; Pixel 8) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Mobile Safari/537.36`}),o!==`about:blank`&&await e.navigate(o)}),i.foreground===`true`||i.fg===`true`)try{await a(u,e=>e.bringToFront())}catch(e){yT.debug(`open/tab-new --foreground bringToFront failed`,{targetId:u,error:e instanceof Error?e.message:String(e)})}let d=xT(e,n,i,o,u);if(d)return d;if(i.discover===`true`){let{browseShWarning:e,...n}=await hC(o,{discover:!0,fs:t}),r={action:`open`,targetId:u,source:`auxiliary-fetch`,...n};return{stdout:JSON.stringify(r,null,2)+`
1231
+ `,stderr:e?`${e}\n`:``,exitCode:0}}return{stdout:`Opened ${o} in new tab [targetId: ${u}]\n`,stderr:``,exitCode:0}},CT=async({browser:e,state:t})=>{let n=await ae(e,t);return n.length===0?{stdout:`No tabs open
1232
1232
  `,stderr:``,exitCode:0}:{stdout:n.map(e=>{let t=!!e.active,n=e.targetId.includes(`:`),r=t?` (active)`:``,i=n?` [remote:${e.targetId.substring(0,e.targetId.indexOf(`:`))}]`:``;return`[${e.targetId}] ${e.url} "${e.title}"${r}${i}`}).join(`
1233
1233
  `)+`
1234
- `,stderr:``,exitCode:0}},CT=async({browser:e,state:t,flags:n})=>{let r=j(n);if(`error`in r)return{stdout:``,stderr:r.error,exitCode:1};await e.closePage(r.targetId),t.snapshots.delete(r.targetId),t.teleportWatchers.delete(r.targetId),t.consoleMessages.delete(r.targetId);let i=t.consoleCleanup.get(r.targetId);i&&(i(),t.consoleCleanup.delete(r.targetId)),t.networkRequests.delete(r.targetId);let a=t.networkCleanup.get(r.targetId);a&&(a(),t.networkCleanup.delete(r.targetId));let o=t.routeCleanup.get(r.targetId);return o&&(o(),t.routeCleanup.delete(r.targetId)),t.routes.delete(r.targetId),t.lastMousePosition.delete(r.targetId),{stdout:`Closed tab ${r.targetId}\n`,stderr:``,exitCode:0}},wT=async({browser:e,state:t,positional:n,onTab:r})=>{if(n.length===0)return{stdout:``,stderr:`tab-select requires a tab index
1234
+ `,stderr:``,exitCode:0}},wT=async({browser:e,state:t,flags:n})=>{let r=j(n);if(`error`in r)return{stdout:``,stderr:r.error,exitCode:1};await e.closePage(r.targetId),t.snapshots.delete(r.targetId),t.teleportWatchers.delete(r.targetId),t.consoleMessages.delete(r.targetId);let i=t.consoleCleanup.get(r.targetId);i&&(i(),t.consoleCleanup.delete(r.targetId)),t.networkRequests.delete(r.targetId);let a=t.networkCleanup.get(r.targetId);a&&(a(),t.networkCleanup.delete(r.targetId));let o=t.routeCleanup.get(r.targetId);return o&&(o(),t.routeCleanup.delete(r.targetId)),t.routes.delete(r.targetId),t.lastMousePosition.delete(r.targetId),{stdout:`Closed tab ${r.targetId}\n`,stderr:``,exitCode:0}},TT=async({browser:e,state:t,positional:n,onTab:r})=>{if(n.length===0)return{stdout:``,stderr:`tab-select requires a tab index
1235
1235
  `,exitCode:1};let i=n[0];if(!/^[0-9]+$/.test(i))return{stdout:``,stderr:`tab-select index must be a positive integer
1236
1236
  `,exitCode:1};let a=parseInt(i,10);if(a<1)return{stdout:``,stderr:`tab-select index must be a positive integer
1237
- `,exitCode:1};let o=await ae(e,t);if(a>o.length)return{stdout:``,stderr:`tab-select index ${a} out of range (${o.length} tab${o.length===1?``:`s`} open)\n`,exitCode:1};let s=o[a-1].targetId;return await r(s,e=>e.bringToFront()),{stdout:`Selected tab ${a} [targetId: ${s}]\n`,stderr:``,exitCode:0}},TT=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 o=await ae(e,t);if(a>o.length)return{stdout:``,stderr:`tab-select index ${a} out of range (${o.length} tab${o.length===1?``:`s`} open)\n`,exitCode:1};let s=o[a-1].targetId;return await r(s,e=>e.bringToFront()),{stdout:`Selected tab ${a} [targetId: ${s}]\n`,stderr:``,exitCode:0}},ET=async({browser:e,state:t,positional:n,flags:r,onTab:i})=>{if(n.length<2)return{stdout:``,stderr:`resize requires <width> <height>
1238
1238
  `,exitCode:1};let a=j(r);if(`error`in a)return{stdout:``,stderr:a.error,exitCode:1};let o=parseInt(n[0],10),s=parseInt(n[1],10);return isNaN(o)||isNaN(s)||o<=0||s<=0?{stdout:``,stderr:`resize requires positive integer width and height
1239
- `,exitCode:1}:(await i(a.targetId,e=>e.setViewportOverride(o,s)),t.snapshots.delete(a.targetId),{stdout:`Resized viewport to ${o}x${s}\n`,stderr:``,exitCode:0})},ET=e(`playwright-teleport`);function DT(){ET.info(`Listing available follower runtimes`);let e=uw();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})},DT=e(`playwright-teleport`);function OT(){DT.info(`Listing available follower runtimes`);let e=dw();if(!e)return{stdout:``,stderr:`teleport: not connected to a tray
1240
1240
  `,exitCode:1};let t=e();if(t.length===0)return{stdout:`No followers connected to the tray.
1241
1241
  `,stderr:``,exitCode:0};let n=[`Available runtimes for teleport:`];for(let e of t){let t=[e.runtimeId];if(e.floatType&&t.push(`[${e.floatType}]`),e.runtime&&t.push(`(${e.runtime})`),e.lastActivity){let n=Math.round((Date.now()-e.lastActivity)/1e3);t.push(`active ${n}s ago`)}n.push(` ${t.join(` `)}`)}return{stdout:n.join(`
1242
1242
  `)+`
1243
- `,stderr:``,exitCode:0}}function OT({state:e,flags:t}){let n=j(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&&(fw(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(uw()?.()??[]).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=j(n);if(`error`in a)return{stdout:``,stderr:a.error,exitCode:1};let o=n.start||n[`teleport-start`],s=n.return||n[`teleport-return`];if(!o||!s)return{stdout:``,stderr:`teleport requires --start <regex> and --return <regex>
1245
- `,exitCode:1};let c=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}),fw(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}),Sn(i,`about to arm a teleport watcher on tab ${a.targetId}`),pw(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
+ `,stderr:``,exitCode:0}}function kT({state:e,flags:t}){let n=j(t);if(`error`in n)return{stdout:``,stderr:n.error,exitCode:1};DT.info(`Disarming teleport watcher via --off`,{targetId:n.targetId});let r=e.teleportWatchers.get(n.targetId);return r&&(pw(r),e.teleportWatchers.delete(n.targetId)),{stdout:`Teleport watcher disarmed
1244
+ `,stderr:``,exitCode:0}}function AT(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 jT(e){return(dw()?.()??[]).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 MT({browser:e,state:t,flags:n,onTab:r,signal:i}){let a=j(n);if(`error`in a)return{stdout:``,stderr:a.error,exitCode:1};let o=n.start||n[`teleport-start`],s=n.return||n[`teleport-return`];if(!o||!s)return{stdout:``,stderr:`teleport requires --start <regex> and --return <regex>
1245
+ `,exitCode:1};let c=AT(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=jT(u);if(e)return{stdout:``,stderr:e,exitCode:1}}let d=t.teleportWatchers.get(a.targetId);d&&(DT.info(`Disarming existing teleport watcher before re-arming`,{targetId:a.targetId}),pw(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 DT.info(`Arming teleport via explicit subcommand`,{targetId:a.targetId,timeoutSec:l,runtimeSelection:u?`explicit`:`auto`}),DT.debug(`Arming teleport via explicit subcommand details`,{targetId:a.targetId,startPattern:o,returnPattern:s,timeoutSec:l,runtimeId:u??`auto`,leaderUrl:f}),Sn(i,`about to arm a teleport watcher on tab ${a.targetId}`),mw(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 NT=async e=>e.flags.list===`true`?OT():e.flags.off===`true`?kT(e):MT(e),PT={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 FT(e){let t=e.split(`.`).pop()?.toLowerCase()??``;return PT[t]??`application/octet-stream`}function IT(e,t){if(e.length===0)return{error:`upload requires at least one file path
1247
1247
  `};if(!Mn(e[0]))return{targetRef:null,filePaths:e};let n=e[0],r=e.slice(1);return t?t.refToBackendNodeId.has(n)?r.length===0?{error:`upload requires at least one file path
1248
1248
  `}:{targetRef:n,filePaths:r}:{error:`Unknown ref "${n}"\n`}:{error:`No snapshot available. Run "snapshot" first.
1249
- `}}const IT=new Map([[`teleport`,MT],[`open`,xT],[`tab-new`,xT],[`fetch`,hC],[`goto`,Sw],[`navigate`,Sw],[`snapshot`,aT],[`find`,oT],[`frames`,sT],[`screenshot`,fT],[`click`,xC],[`type`,SC],[`fill`,CC],[`eval`,lC],[`eval-file`,uC],[`press`,wC],[`keydown`,TC],[`keyup`,EC],[`go-back`,Cw],[`go-forward`,ww],[`reload`,Tw],[`tab-list`,ST],[`tab-close`,CT],[`close`,CT],[`dblclick`,DC],[`hover`,OC],[`select`,kC],[`check`,AC],[`uncheck`,jC],[`drag`,MC],[`resize`,TT],[`dialog-accept`,rC],[`dialog-dismiss`,iC],[`cookie-list`,XS],[`cookie-get`,ZS],[`cookie-set`,QS],[`cookie-delete`,$S],[`cookie-clear`,eC],[`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`,zw],[`stop-recording`,Bw],[`tab-select`,wT],[`pdf`,cT],[`network-state-set`,Ew],[`upload`,async({browser:e,fs:n,state:r,positional:i,flags:a,onTab:o})=>{let s=j(a);if(`error`in s)return{stdout:``,stderr:s.error,exitCode:1};let c=r.snapshots.get(s.targetId),l=FT(i,c);if(`error`in l)return{stdout:``,stderr:l.error,exitCode:1};let{targetRef:u,filePaths:d}=l,f=[];for(let e of d){let r=await NC(n,e),i=e.split(`/`).pop()??e;f.push({name:i,type:PT(i),base64:t(r)})}if(u){let e=c.refToBackendNodeId.get(u);await o(s.targetId,async({sessionId:t,transport:n})=>{await n.send(`DOM.enable`,{},t);let{object:r}=await n.send(`DOM.resolveNode`,{backendNodeId:e},t),i=await n.send(`Runtime.callFunctionOn`,{objectId:r.objectId,functionDeclaration:`function(filesData) {
1249
+ `}}const LT=new Map([[`teleport`,NT],[`open`,ST],[`tab-new`,ST],[`fetch`,gC],[`goto`,Cw],[`navigate`,Cw],[`snapshot`,oT],[`find`,sT],[`frames`,cT],[`screenshot`,pT],[`click`,SC],[`type`,CC],[`fill`,wC],[`eval`,uC],[`eval-file`,dC],[`press`,TC],[`keydown`,EC],[`keyup`,DC],[`go-back`,ww],[`go-forward`,Tw],[`reload`,Ew],[`tab-list`,CT],[`tab-close`,wT],[`close`,wT],[`dblclick`,OC],[`hover`,kC],[`select`,AC],[`check`,jC],[`uncheck`,MC],[`drag`,NC],[`resize`,ET],[`dialog-accept`,iC],[`dialog-dismiss`,aC],[`cookie-list`,ZS],[`cookie-get`,QS],[`cookie-set`,$S],[`cookie-delete`,eC],[`cookie-clear`,tC],[`localstorage-list`,_T.list],[`localstorage-get`,_T.get],[`localstorage-set`,_T.set],[`localstorage-delete`,_T.del],[`localstorage-clear`,_T.clear],[`sessionstorage-list`,vT.list],[`sessionstorage-get`,vT.get],[`sessionstorage-set`,vT.set],[`sessionstorage-delete`,vT.del],[`sessionstorage-clear`,vT.clear],[`record`,Bw],[`stop-recording`,Vw],[`tab-select`,TT],[`pdf`,lT],[`network-state-set`,Dw],[`upload`,async({browser:e,fs:n,state:r,positional:i,flags:a,onTab:o})=>{let s=j(a);if(`error`in s)return{stdout:``,stderr:s.error,exitCode:1};let c=r.snapshots.get(s.targetId),l=IT(i,c);if(`error`in l)return{stdout:``,stderr:l.error,exitCode:1};let{targetRef:u,filePaths:d}=l,f=[];for(let e of d){let r=await PC(n,e),i=e.split(`/`).pop()??e;f.push({name:i,type:FT(i),base64:t(r)})}if(u){let e=c.refToBackendNodeId.get(u);await o(s.targetId,async({sessionId:t,transport:n})=>{await n.send(`DOM.enable`,{},t);let{object:r}=await n.send(`DOM.resolveNode`,{backendNodeId:e},t),i=await n.send(`Runtime.callFunctionOn`,{objectId:r.objectId,functionDeclaration:`function(filesData) {
1250
1250
  const el = this;
1251
1251
  if (el.tagName !== 'INPUT' || el.type !== 'file') {
1252
1252
  throw new Error('Element ' + el.tagName + ' is not a file input');
@@ -1277,12 +1277,12 @@ Options:
1277
1277
  el.dispatchEvent(new Event('change', { bubbles: true }));
1278
1278
  el.dispatchEvent(new Event('input', { bubbles: true }));
1279
1279
  return el.files.length;
1280
- })()`,r=await t.send(`Runtime.evaluate`,{expression:n,returnByValue:!0,awaitPromise:!1},e);if(r.exceptionDetails){let e=r.exceptionDetails.exception?.description??r.exceptionDetails.text??`File upload failed`;throw Error(e)}});let p=d.map(e=>e.split(`/`).pop()??e).join(`, `);return{stdout:`Uploaded ${d.length} file(s): ${p}\n`,stderr:``,exitCode:0}}],[`state-save`,pT],[`state-load`,mT],[`console`,GS],[`requests`,Nw],[`request`,Pw],[`request-headers`,Fw],[`request-body`,Iw],[`response-headers`,Lw],[`response-body`,Rw],[`mousemove`,LC],[`mousedown`,RC],[`mouseup`,zC],[`mousewheel`,BC],[`drop`,VC],[`route`,Kw],[`route-list`,qw],[`unroute`,Jw],[`generate-locator`,tC],[`highlight`,nC]]);function LT(){let e=(On.string??[]).map(e=>`--${e}`),t=new Set(On.boolean??[]);for(let[e,n]of Object.entries(On.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 kn(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=C(RT(n),zT(r));if(`error`in i)return{answer:{stdout:``,stderr:`${e} ${t}: ${i.error}\n`,exitCode:1}};let a;try{({flags:a}=Dn(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-BzLitoR9.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,r={}){let i=t?wn(t,n):null,a=LT();return S(e,async(o,s)=>{if(o.length===0||o[0]===`help`||o[0]===`--help`||o[0]===`-h`){let{formatHelp:t}=await import(`./help-BzLitoR9.js`);return{stdout:t(e)+`
1282
- `,stderr:``,exitCode:0}}let c=o[0],l=o.slice(1),u=await KT(e,c,l,a);if(`answer`in u)return u.answer;let{positional:d,flags:f}=u;if(!t||!i)return{stdout:``,stderr:`${e}: browser APIs are unavailable in this environment\n`,exitCode:1};let p=f.tab??null,m=VT(t,p),h=Bi(s.env),g=Xw(r.isScoop?.()??!1,h),_=await GT(e,c,{browser:t,fs:n,state:i,positional:d,flags:f,scratchDir:h,sessionRoot:g,onTab:(e,n)=>t.withTab(e,n,{signal:s.signal}),signal:s.signal}),v=f.tab??null,ee=null;Fn.has(c)&&_.exitCode===0&&v&&(ee=await Qw(t,n,v,i,g));try{await $w(n,i,g,{command:c,args:l,result:_,snapshotPath:ee,targetId:v})}catch{}return HT(t,m,p,_)})}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`,...Nn,`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)`,[...Bg]]]);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
+ })()`,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`,mT],[`state-load`,hT],[`console`,KS],[`requests`,Pw],[`request`,Fw],[`request-headers`,Iw],[`request-body`,Lw],[`response-headers`,Rw],[`response-body`,zw],[`mousemove`,RC],[`mousedown`,zC],[`mouseup`,BC],[`mousewheel`,VC],[`drop`,HC],[`route`,qw],[`route-list`,Jw],[`unroute`,Yw],[`generate-locator`,nC],[`highlight`,rC]]);function RT(){let e=(On.string??[]).map(e=>`--${e}`),t=new Set(On.boolean??[]);for(let[e,n]of Object.entries(On.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 zT(e){return e.map(e=>e===`--no-iframes`||e.startsWith(`--no-iframes=`)?e.replace(`--no-iframes`,`--_noiframes`):e)}function BT(e){return{...e,bool:[...e.bool??[],`--_noiframes`],value:[...e.value??[],`--_noiframes`]}}const VT=2e3;function HT(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 UT(e,t,n,r){if(!t||typeof e.getTabLockStats!=`function`)return r;let i=e.getTabLockStats(),a=i.totalWaitMs-t.totalWaitMs;if(a<VT)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>=VT?`${(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 WT(e,t,n){let r=n instanceof Error?n.message:String(n);return{stdout:``,stderr:`Error: ${(t.tab?await kn(e,t.tab,n):null)??r}\n`,exitCode:1}}function GT(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 KT(e,t,n){let r=LT.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?GT(e,t,void 0):a}catch(r){return i?.aborted?GT(e,t,r):await WT(n.browser,n.flags,r)}}async function qT(e,t,n,r){let i=C(zT(n),BT(r));if(`error`in i)return{answer:{stdout:``,stderr:`${e} ${t}: ${i.error}\n`,exitCode:1}};let a;try{({flags:a}=Dn(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-7RASyMg5.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 JT(e,t,n,r={}){let i=t?wn(t,n):null,a=RT();return S(e,async(o,s)=>{if(o.length===0||o[0]===`help`||o[0]===`--help`||o[0]===`-h`){let{formatHelp:t}=await import(`./help-7RASyMg5.js`);return{stdout:t(e)+`
1282
+ `,stderr:``,exitCode:0}}let c=o[0],l=o.slice(1),u=await qT(e,c,l,a);if(`answer`in u)return u.answer;let{positional:d,flags:f}=u;if(!t||!i)return{stdout:``,stderr:`${e}: browser APIs are unavailable in this environment\n`,exitCode:1};let p=f.tab??null,m=HT(t,p),h=Bi(s.env),g=Zw(r.isScoop?.()??!1,h),_=await KT(e,c,{browser:t,fs:n,state:i,positional:d,flags:f,scratchDir:h,sessionRoot:g,onTab:(e,n)=>t.withTab(e,n,{signal:s.signal}),signal:s.signal}),v=f.tab??null,ee=null;Fn.has(c)&&_.exitCode===0&&v&&(ee=await $w(t,n,v,i,g));try{await eT(n,i,g,{command:c,args:l,result:_,snapshotPath:ee,targetId:v})}catch{}return UT(t,m,p,_)})}const YT=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`,...Nn,`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)`,[...Bg]]]);function XT(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 YT){let n=t.filter(e=>i.has(e));if(n.length>0){r.push(` ${e}:`),r.push(` ${n.join(`, `)}\n`);for(let e of n)i.delete(e)}}for(let e of i)a.push(e);return a.length>0&&(r.push(` Other:`),r.push(` ${a.sort().join(`, `)}\n`)),t.length>0&&(r.push(` User scripts (.jsh):`),r.push(` ${t.sort().join(`, `)}\n`)),n.length>0&&(r.push(` Workflows:`),r.push(` ${n.sort().join(`, `)}\n`)),r.push(`Use '<command> --help' for details on a specific command.`),r.join(`
1284
1284
  `)+`
1285
- `}function XT(e={}){return S(`commands`,async(t,n)=>{if(t.includes(`--help`)||t.includes(`-h`))return{stdout:`commands - display available commands
1285
+ `}function ZT(e={}){return S(`commands`,async(t,n)=>{if(t.includes(`--help`)||t.includes(`-h`))return{stdout:`commands - display available commands
1286
1286
 
1287
1287
  Usage: commands [command]
1288
1288
 
@@ -1293,7 +1293,7 @@ If a command name is provided, shows help for that command.
1293
1293
  Otherwise, lists all available commands.
1294
1294
 
1295
1295
  Note: This is an enhanced version of 'help' that shows all custom commands.
1296
- `,stderr:``,exitCode:0};if(t.length>0&&n.exec){let e=t[0];return n.exec(`${e} --help`,{cwd:n.cwd})}return{stdout: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
1296
+ `,stderr:``,exitCode:0};if(t.length>0&&n.exec){let e=t[0];return n.exec(`${e} --help`,{cwd:n.cwd})}return{stdout:XT(n.getRegisteredCommands?.()??[],await e.getJshCommands?.()??[],await e.getWorkflowCommands?.()??[]),stderr:``,exitCode:0}})}function QT(e){return{stdout:`hf - download model repos from the Hugging Face Hub into the VFS
1297
1297
 
1298
1298
  Usage:
1299
1299
  hf download <repo> [files...] [--to <dir>] [--revision <rev>] [--force]
@@ -1324,7 +1324,7 @@ Notes:
1324
1324
  - Background-job logs get a progress line every few seconds.
1325
1325
  - Weights are read by the speech engines via the preview SW from the
1326
1326
  target directory; transformers expects <localModelPath>/<repo>/.
1327
- `,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,t){if(typeof t!=`string`)return{error:`${e} requires a value`};let n=Number(t);return!/^\d+$/.test(t)||!Number.isSafeInteger(n)||n<1?{error:`${e} must be a positive integer, got '${t}'`}:n}function tE(e){let t=null,n=`main`,r=!1,i,a,o=[],s=0;for(;s<e.length;){let c=e[s];if(c===`--concurrency`||c===`-j`||c===`--max-in-flight-mb`){let t=eE(c,e[s+1]);if(typeof t!=`number`)return t;c===`--max-in-flight-mb`?a=t:i=t,s+=2;continue}if(c===`--to`){let n=e[s+1];if(typeof n!=`string`)return{error:`--to requires a value`};t=n,s+=2;continue}if(c===`--revision`||c===`--rev`){let t=e[s+1];if(typeof t!=`string`)return{error:`${c} requires a value`};n=t,s+=2;continue}if(c===`--force`||c===`-f`){r=!0,s+=1;continue}if(c.startsWith(`--`))return{error:`unknown option: ${c}`};o.push(c),s+=1}if(o.length===0)return{error:`download requires <repo>`};let c=o[0];return $T.test(c)?{repo:c,files:o.slice(1),to:t,revision:n,force:r,concurrency:i,maxInFlightMb:a}:{error:`invalid repo '${c}' — expected <owner>/<name>`}}function nE(e){return e<1024?`${e} B`:e<1048576?`${(e/1024).toFixed(1)} KB`:e<1073741824?`${(e/1048576).toFixed(1)} MB`:`${(e/1073741824).toFixed(2)} GB`}function rE(e){let t=Math.max(0,Math.round(e/1e3));if(t<60)return`${t}s`;let n=Math.floor(t/60);return n<60?`${n}m ${t%60}s`:`${Math.floor(n/60)}h ${n%60}m`}var iE=class{filesTotal;bytesTotal;now;filesDone=0;bytesDone=0;bytesFetched=0;lastLineAt=-1/0;startedAt;constructor(e,t,n=Date.now){this.filesTotal=e,this.bytesTotal=t,this.now=n,this.startedAt=n()}listed(e,t){this.filesTotal=e,this.bytesTotal=t>0?t:void 0}file(e,t){this.filesDone+=1,this.bytesDone+=t,e===`downloaded`&&(this.bytesFetched+=t)}rate(){let e=(this.now()-this.startedAt)/1e3;return e>0?this.bytesFetched/e:0}elapsedMs(){return this.now()-this.startedAt}line(){let e=this.now();if(!(this.filesDone>=this.filesTotal)&&e-this.lastLineAt<5e3)return null;this.lastLineAt=e;let t=this.rate(),n=nE(this.bytesDone),r=``;if(this.bytesTotal!==void 0){n+=` of ${nE(this.bytesTotal)}`;let e=this.bytesTotal-this.bytesDone;t>0&&e>0&&(r=`, ~${rE(e/t*1e3)} left`)}return`hf: ${this.filesDone}/${this.filesTotal} files, ${n}, ${nE(t)}/s${r}\n`}};function aE(e){let t=e;return typeof t.writeStdout==`function`?t.writeStdout.bind(t):void 0}async function oE(e,t,n,r){let i=tE(e);if(`error`in i)return QT(i.error);let a=Vi(i.repo,i.to,t.cwd),{downloadHfRepo:o,HfFileDownloadError:s}=await import(`./hf-download-CNg2vD63.js`),c=aE(t),l=new iE(i.files.length,void 0,r),u=``;try{let e=await o({fetch:n.fetch,streamFetch:n.streamFetch,fs:t.fs,repo:i.repo,targetDir:a,files:i.files,revision:i.revision,force:i.force,concurrency:i.concurrency,maxBytesInFlight:i.maxInFlightMb===void 0?void 0:i.maxInFlightMb*1024*1024,signal:t.signal,endpoint:t.env.get(`HF_ENDPOINT`),progress:{onListed:({files:e,totalBytes:t})=>{l.listed(e.length,t);let n=`hf: ${e.length} file(s) listed in ${i.repo}@${i.revision}\n`;u+=n,c?.(n)},onFile:e=>{u+=e.status===`downloaded`?`hf: downloaded ${e.file} (${nE(e.bytes)})\n`:`hf: skipped ${e.file} (already at ${a})\n`,l.file(e.status,e.bytes);let t=c?l.line():null;t&&c?.(t)}}}),r=e.downloaded>0?` in ${rE(l.elapsedMs())} (${nE(l.rate())}/s)`:``,s=`hf: ${e.downloaded} downloaded, ${e.skipped} skipped, ${nE(e.totalBytes)} total into ${a}${r}\n`;return{stdout:``,stderr:u+s,exitCode:0}}catch(e){return e instanceof s?(u+=`hf: failed ${e.file}: ${e.message}\n`,{stdout:``,stderr:u,exitCode:1}):QT(e instanceof Error?e.message:String(e))}}const sE=[`--to`,`--revision`,`--rev`,`--concurrency`,`-j`,`--max-in-flight-mb`];function cE(e){let t=e.now??Date.now;return{name:`hf`,async execute(n,r){if(n.length===0||w(n,{valueFlags:sE}))return ZT(+(n.length===0));let i=n[0];return i===`download`?oE(n.slice(1),r,e,t):QT(`unknown subcommand: ${i}`)}}}const lE=new Set([`--vid`,`--pid`,`--usage-page`,`--usage`,`--__resolved`,`--timeout`]);function uE(e){return yn(e,lE)}function dE(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 fE(e){let t={};return e.has(`--vid`)&&(t.vendorId=dE(e.get(`--vid`),`vid`)),e.has(`--pid`)&&(t.productId=dE(e.get(`--pid`),`pid`)),e.has(`--usage-page`)&&(t.usagePage=dE(e.get(`--usage-page`),`usage-page`)),e.has(`--usage`)&&(t.usage=dE(e.get(`--usage`),`usage`)),Object.keys(t).length>0?[t]:[]}function pE(e){let t=ti(e.stdin),n=new Uint8Array(t.length);for(let e=0;e<t.length;e++)n[e]=t.charCodeAt(e)&255;return n}function mE(e){return Array.from(e,e=>e.toString(16).padStart(2,`0`)).join(` `)}function hE(e){return e.toString(16).padStart(2,`0`)}function gE(e){return`0x${e.toString(16).padStart(4,`0`)}`}function _E(e){let t=e.productName||`(unknown)`,n=e.opened?` [open]`:``,r=e.usagePage===void 0?``:`\t${gE(e.usagePage)}:${gE(e.usage??0)}`;return`${e.handle}\t${gE(e.vendorId)}:${gE(e.productId)}${r}\t${t}${n}`}function vE(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 yE(e){return`${e.map(_E).join(`
1327
+ `,stderr:``,exitCode:e}}function $T(e){return{stdout:``,stderr:`hf: ${e}\n`,exitCode:1}}const eE=/^[A-Za-z0-9_.-]+\/[A-Za-z0-9_.-]+$/;function tE(e,t){if(typeof t!=`string`)return{error:`${e} requires a value`};let n=Number(t);return!/^\d+$/.test(t)||!Number.isSafeInteger(n)||n<1?{error:`${e} must be a positive integer, got '${t}'`}:n}function nE(e){let t=null,n=`main`,r=!1,i,a,o=[],s=0;for(;s<e.length;){let c=e[s];if(c===`--concurrency`||c===`-j`||c===`--max-in-flight-mb`){let t=tE(c,e[s+1]);if(typeof t!=`number`)return t;c===`--max-in-flight-mb`?a=t:i=t,s+=2;continue}if(c===`--to`){let n=e[s+1];if(typeof n!=`string`)return{error:`--to requires a value`};t=n,s+=2;continue}if(c===`--revision`||c===`--rev`){let t=e[s+1];if(typeof t!=`string`)return{error:`${c} requires a value`};n=t,s+=2;continue}if(c===`--force`||c===`-f`){r=!0,s+=1;continue}if(c.startsWith(`--`))return{error:`unknown option: ${c}`};o.push(c),s+=1}if(o.length===0)return{error:`download requires <repo>`};let c=o[0];return eE.test(c)?{repo:c,files:o.slice(1),to:t,revision:n,force:r,concurrency:i,maxInFlightMb:a}:{error:`invalid repo '${c}' — expected <owner>/<name>`}}function rE(e){let t=Math.max(0,Math.round(e/1e3));if(t<60)return`${t}s`;let n=Math.floor(t/60);return n<60?`${n}m ${t%60}s`:`${Math.floor(n/60)}h ${n%60}m`}var iE=class{filesTotal;bytesTotal;now;filesDone=0;bytesDone=0;bytesFetched=0;lastLineAt=-1/0;startedAt;constructor(e,t,n=Date.now){this.filesTotal=e,this.bytesTotal=t,this.now=n,this.startedAt=n()}listed(e,t){this.filesTotal=e,this.bytesTotal=t>0?t:void 0}file(e,t){this.filesDone+=1,this.bytesDone+=t,e===`downloaded`&&(this.bytesFetched+=t)}rate(){let e=(this.now()-this.startedAt)/1e3;return e>0?this.bytesFetched/e:0}elapsedMs(){return this.now()-this.startedAt}line(){let e=this.now();if(!(this.filesDone>=this.filesTotal)&&e-this.lastLineAt<5e3)return null;this.lastLineAt=e;let t=this.rate(),n=gy(this.bytesDone),r=``;if(this.bytesTotal!==void 0){n+=` of ${gy(this.bytesTotal)}`;let e=this.bytesTotal-this.bytesDone;t>0&&e>0&&(r=`, ~${rE(e/t*1e3)} left`)}return`hf: ${this.filesDone}/${this.filesTotal} files, ${n}, ${gy(t)}/s${r}\n`}};function aE(e){let t=e;return typeof t.writeStdout==`function`?t.writeStdout.bind(t):void 0}async function oE(e,t,n,r){let i=nE(e);if(`error`in i)return $T(i.error);let a=Vi(i.repo,i.to,t.cwd),{downloadHfRepo:o,HfFileDownloadError:s}=await import(`./hf-download-CNg2vD63.js`),c=aE(t),l=new iE(i.files.length,void 0,r),u=``;try{let e=await o({fetch:n.fetch,streamFetch:n.streamFetch,fs:t.fs,repo:i.repo,targetDir:a,files:i.files,revision:i.revision,force:i.force,concurrency:i.concurrency,maxBytesInFlight:i.maxInFlightMb===void 0?void 0:i.maxInFlightMb*1024*1024,signal:t.signal,endpoint:t.env.get(`HF_ENDPOINT`),progress:{onListed:({files:e,totalBytes:t})=>{l.listed(e.length,t);let n=`hf: ${e.length} file(s) listed in ${i.repo}@${i.revision}\n`;u+=n,c?.(n)},onFile:e=>{u+=e.status===`downloaded`?`hf: downloaded ${e.file} (${gy(e.bytes)})\n`:`hf: skipped ${e.file} (already at ${a})\n`,l.file(e.status,e.bytes);let t=c?l.line():null;t&&c?.(t)}}}),r=e.downloaded>0?` in ${rE(l.elapsedMs())} (${gy(l.rate())}/s)`:``,s=`hf: ${e.downloaded} downloaded, ${e.skipped} skipped, ${gy(e.totalBytes)} total into ${a}${r}\n`;return{stdout:``,stderr:u+s,exitCode:0}}catch(e){return e instanceof s?(u+=`hf: failed ${e.file}: ${e.message}\n`,{stdout:``,stderr:u,exitCode:1}):$T(e instanceof Error?e.message:String(e))}}const sE=[`--to`,`--revision`,`--rev`,`--concurrency`,`-j`,`--max-in-flight-mb`];function cE(e){let t=e.now??Date.now;return{name:`hf`,async execute(n,r){if(n.length===0||w(n,{valueFlags:sE}))return QT(+(n.length===0));let i=n[0];return i===`download`?oE(n.slice(1),r,e,t):$T(`unknown subcommand: ${i}`)}}}const lE=new Set([`--vid`,`--pid`,`--usage-page`,`--usage`,`--__resolved`,`--timeout`]);function uE(e){return yn(e,lE)}function dE(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 fE(e){let t={};return e.has(`--vid`)&&(t.vendorId=dE(e.get(`--vid`),`vid`)),e.has(`--pid`)&&(t.productId=dE(e.get(`--pid`),`pid`)),e.has(`--usage-page`)&&(t.usagePage=dE(e.get(`--usage-page`),`usage-page`)),e.has(`--usage`)&&(t.usage=dE(e.get(`--usage`),`usage`)),Object.keys(t).length>0?[t]:[]}function pE(e){let t=ti(e.stdin),n=new Uint8Array(t.length);for(let e=0;e<t.length;e++)n[e]=t.charCodeAt(e)&255;return n}function mE(e){return Array.from(e,e=>e.toString(16).padStart(2,`0`)).join(` `)}function hE(e){return e.toString(16).padStart(2,`0`)}function gE(e){return`0x${e.toString(16).padStart(4,`0`)}`}function _E(e){let t=e.productName||`(unknown)`,n=e.opened?` [open]`:``,r=e.usagePage===void 0?``:`\t${gE(e.usagePage)}:${gE(e.usage??0)}`;return`${e.handle}\t${gE(e.vendorId)}:${gE(e.productId)}${r}\t${t}${n}`}function vE(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 yE(e){return`${e.map(_E).join(`
1328
1328
  `)}\n`}function bE(e){return`${hE(e.reportId)} ${mE(e.bytes)}`.trimEnd()}function xE(e){return{stdout:e,stderr:``,exitCode:0}}function H(e){return{stdout:``,stderr:`hid: ${e}\n`,exitCode:1}}const SE=`hid - access HID devices via WebHID
1329
1329
 
1330
1330
  Usage: hid <subcommand> [options]
@@ -1351,7 +1351,7 @@ Options:
1351
1351
  Report payloads are capped at ${Lr} bytes (4 MiB).
1352
1352
  `;function CE(e,t){if(t){let t=``;for(let n=0;n<e.length;n++)t+=String.fromCharCode(e[n]);return xE(t)}return xE(e.length?`${mE(e)}\n`:``)}function wE(e){return!e||e.aborted?Promise.resolve():new Promise(t=>{e.addEventListener(`abort`,()=>t(),{once:!0})})}async function TE(e){let t=await e.list();return t.length===0?xE(`no granted HID devices
1353
1353
  `):xE(`${t.map(_E).join(`
1354
- `)}\n`)}async function EE(e,t){let n=e.get(`--__resolved`),r=fE(e),i=r[0];if(n){let e=n.split(`,`).filter(e=>e.length>0);return e.length===0?H(`request: missing resolved handle`):xE(yE(vE(await Promise.all(e.map(e=>t.info(e))),i)))}let a=Se();return a?DE(r,i,a,t):xE(yE(vE(await t.request(r),i)))}async function DE(e,t,n,r){let i=await Cx(`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=Ir();if(!t)return H(`request: WebHID unavailable for device re-acquire`);let n=await t.getDevices(),r=Ar(),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=vE(s.length>0?s:[],t);return c.length===0?H(`request: granted device could not be re-acquired`):xE(yE(c))}async function OE(e,t,n){let r=t[1];return r?(e===`open`?await n.open(r):await n.close(r),xE(``)):H(`${e}: handle required`)}async function kE(e,t,n,r){let[,i,a]=t;if(!i||a===void 0)return H(`${e}: handle and report-id required`);let o=dE(a,`report-id`),s=pE(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),xE(``))}async function AE(e,t,n){let[,r,i]=e;return!r||i===void 0?H(`feature-get: handle and report-id required`):CE((await t.receiveFeatureReport(r,dE(i,`report-id`))).bytes,n)}async function jE(e,t,n){let r=e[1];if(!r)return H(`watch: handle required`);let i=[],a=await n.subscribeInputReports(r,e=>{i.push(bE(e))});try{await wE(t.signal)}finally{await a()}return xE(i.length?`${i.join(`
1354
+ `)}\n`)}async function EE(e,t){let n=e.get(`--__resolved`),r=fE(e),i=r[0];if(n){let e=n.split(`,`).filter(e=>e.length>0);return e.length===0?H(`request: missing resolved handle`):xE(yE(vE(await Promise.all(e.map(e=>t.info(e))),i)))}let a=Se();return a?DE(r,i,a,t):xE(yE(vE(await t.request(r),i)))}async function DE(e,t,n,r){let i=await wx(`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=Ir();if(!t)return H(`request: WebHID unavailable for device re-acquire`);let n=await t.getDevices(),r=Ar(),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=vE(s.length>0?s:[],t);return c.length===0?H(`request: granted device could not be re-acquired`):xE(yE(c))}async function OE(e,t,n){let r=t[1];return r?(e===`open`?await n.open(r):await n.close(r),xE(``)):H(`${e}: handle required`)}async function kE(e,t,n,r){let[,i,a]=t;if(!i||a===void 0)return H(`${e}: handle and report-id required`);let o=dE(a,`report-id`),s=pE(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),xE(``))}async function AE(e,t,n){let[,r,i]=e;return!r||i===void 0?H(`feature-get: handle and report-id required`):CE((await t.receiveFeatureReport(r,dE(i,`report-id`))).bytes,n)}async function jE(e,t,n){let r=e[1];if(!r)return H(`watch: handle required`);let i=[],a=await n.subscribeInputReports(r,e=>{i.push(bE(e))});try{await wE(t.signal)}finally{await a()}return xE(i.length?`${i.join(`
1355
1355
  `)}\n`:``)}async function ME(e,t,n,r,i){let[,a,o]=e;if(!a||o===void 0)return H(`query: handle and report-id required`);let s=dE(o,`report-id`),c=pE(t);if(c.length>4194304)return H(`query payload exceeds 4 MiB limit`);let l=n.has(`--timeout`)?dE(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?CE(t.bytes,!0):xE(`${bE(t)}\n`)}finally{p!==void 0&&clearTimeout(p),await f()}}async function NE(e,t,n){let{positionals:r,flags:i,bools:a}=uE(e),o=r[0],s=a.has(`--raw`);switch(o){case`list`:return TE(n);case`request`:return EE(i,n);case`open`:case`close`:return OE(o,r,n);case`send`:case`feature-send`:return kE(o,r,t,n);case`feature-get`:return AE(r,n,s);case`watch`:return jE(r,t,n);case`query`:return ME(r,t,i,n,s);default:return H(`unknown subcommand '${o??``}'. Try 'hid --help'.`)}}function PE(){return S(`hid`,async(e,t)=>{if(e.length===0||e.includes(`--help`)||e.includes(`-h`))return xE(SE);let n=zr(ce(),y());if(!n)return H(`WebHID is unavailable in this environment`);try{return await NE(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 FE=1e3,IE=`usage: id [-u|-g|-G] [-n] [-r] [USER]`,LE=`${IE}
1356
1356
 
1357
1357
  Print the user and group identity of this SLICC runtime.
@@ -1458,7 +1458,7 @@ manifest without rewriting it. With -g, packages go to /shared/lib/node_modules
1458
1458
  and deps are recorded in /shared/lib/package.json. Existing fields are
1459
1459
  preserved. Idempotent: re-installing an already-satisfied package is a clean
1460
1460
  no-op.
1461
- `}function BD(e){let t=C(e,{bool:RD,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 VD(e){let t=!1,n=[];for(let r of e){if(LD.has(r)){t=!0;continue}r.startsWith(`-`)||n.push(r)}return{global:t,specs:n}}function HD(e){return w(e)}function UD(e){return e instanceof Error?e.message:String(e)}async function WD(e){e.scriptCatalog?.invalidateJsh(),await e.syncScriptCommands?.()}function GD(e,t){let n=e===`i`;return S(e,async(r,i)=>{if(n)return HD(r)?{stdout:zD(e),stderr:``,exitCode:0}:qD(e,r,i,t);if(r[0]===`mamba`){let{runIpkMamba:n}=await import(`./ipk-mamba-BUmmgLut.js`);return n(e,r.slice(1),i,t)}if(HD(r))return{stdout:zD(e),stderr:``,exitCode:0};if(r.length===0)return{stdout:zD(e),stderr:`${e}: missing subcommand\n`,exitCode:1};let a=r[0],o=r.slice(1);return PD.has(a)?qD(e,o,i,t):FD.has(a)?YD(e,o,i,t):ID.has(a)?XD(e,o,i,t):a===`root`?ZD(e,o,i,t):rD.has(a)?ND(e,o,i,{fs:t.fs}):iD.has(a)?ND(e,r,i,{fs:t.fs}):{stdout:``,stderr:`${e}: unknown subcommand '${a}' (supported: install, uninstall, list, root, run, mamba)\n`,exitCode:1}})}async function KD(e,t,n){let r;try{r=await Gi({fs:n.fs,fetch:n.fetch,cwd:t.cwd})}catch(t){return t instanceof Ji?{stdout:``,stderr:`${e}: ${t.message}\n`,exitCode:1}:{stdout:``,stderr:`${e}: install failed: ${UD(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}: ${UD(t.error)}`);return{stdout:i.length>0?`${i.join(`
1461
+ `}function BD(e){let t=C(e,{bool:RD,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 VD(e){let t=!1,n=[];for(let r of e){if(LD.has(r)){t=!0;continue}r.startsWith(`-`)||n.push(r)}return{global:t,specs:n}}function HD(e){return w(e)}function UD(e){return e instanceof Error?e.message:String(e)}async function WD(e){e.scriptCatalog?.invalidateJsh(),await e.syncScriptCommands?.()}function GD(e,t){let n=e===`i`;return S(e,async(r,i)=>{if(n)return HD(r)?{stdout:zD(e),stderr:``,exitCode:0}:qD(e,r,i,t);if(r[0]===`mamba`){let{runIpkMamba:n}=await import(`./ipk-mamba-BW9dz94G.js`);return n(e,r.slice(1),i,t)}if(HD(r))return{stdout:zD(e),stderr:``,exitCode:0};if(r.length===0)return{stdout:zD(e),stderr:`${e}: missing subcommand\n`,exitCode:1};let a=r[0],o=r.slice(1);return PD.has(a)?qD(e,o,i,t):FD.has(a)?YD(e,o,i,t):ID.has(a)?XD(e,o,i,t):a===`root`?ZD(e,o,i,t):rD.has(a)?ND(e,o,i,{fs:t.fs}):iD.has(a)?ND(e,r,i,{fs:t.fs}):{stdout:``,stderr:`${e}: unknown subcommand '${a}' (supported: install, uninstall, list, root, run, mamba)\n`,exitCode:1}})}async function KD(e,t,n){let r;try{r=await Gi({fs:n.fs,fetch:n.fetch,cwd:t.cwd})}catch(t){return t instanceof Ji?{stdout:``,stderr:`${e}: ${t.message}\n`,exitCode:1}:{stdout:``,stderr:`${e}: install failed: ${UD(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}: ${UD(t.error)}`);return{stdout:i.length>0?`${i.join(`
1462
1462
  `)}\n`:``,stderr:a.length>0?`${a.join(`
1463
1463
  `)}\n`:``,exitCode:r.errors.length===0?0:1}}async function qD(e,t,n,r){let i=BD(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 KD(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: ${UD(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}: ${UD(t.error)}`);return a&&c.results.length>0&&await WD(r),{stdout:l.length>0?`${l.join(`
1464
1464
  `)}\n`:``,stderr:u.length>0?`${u.join(`
@@ -1480,7 +1480,7 @@ Options:
1480
1480
  --global Resolve only from the shared global prefix (/shared/lib/node_modules)
1481
1481
  -h, --help Show this help message
1482
1482
  `}async function yO(e,t){let n=await e.readFile(t);return typeof n==`string`?n:new TextDecoder().decode(n)}async function bO(e,t){try{return(await e.stat(t)).type===`file`}catch{return!1}}async function xO(e,t){try{return(await e.stat(t)).type===`directory`}catch{return!1}}function*SO(e,t=!1){if(t){yield qn;return}let n=b(e);for(;yield x(n,`node_modules`),n!==`/`;)n=Ee(n).dir;yield qn}async function CO(e,t,n,r=!1){for(let i of SO(t,r)){let t=x(i,`.bin`,n);if(!await bO(e,t))continue;let r=await yO(e,t),a=_O.exec(r),o=Ee(t).dir;return{binFilePath:a?x(o,a[1]):t,argvName:t}}return null}function wO(e){if(e.startsWith(`@`)){let t=e.indexOf(`/`);if(t!==-1)return e.slice(t+1)}return e}function TO(e,t){if(typeof e==`string`)return{binName:wO(t),binPath:e};if(typeof e!=`object`||!e)return null;let n=[t,wO(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 EO(e,t,n,r=!1){for(let i of SO(t,r)){let t=x(i,n),r=x(t,`package.json`);if(!await bO(e,r))continue;let a;try{a=JSON.parse(await yO(e,r))}catch{return null}let o=TO(a.bin,n);if(!o)return null;let s=o.binPath.replace(/^\.\//,``);return{binFilePath:x(t,s),argvName:x(i,`.bin`,o.binName)}}return null}async function DO(e,t,n,r=!1){return await CO(e,t,n,r)??await EO(e,t,n,r)}async function OO(e,t,n){for(let r of SO(t))if(await bO(e,x(r,n,`package.json`)))return!0;return!1}function kO(e){return e instanceof Error?e.message:String(e)}function AO(e,t){return{stdout:``,stderr:`${e}: ${t}\n`,exitCode:1}}async function jO(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:AO(e,`failed to install '${t}': ${kO(i.errors[0].error)}`)};let a=i.results.map(t=>`${e}: installed ${t.name}@${t.version}`);return{progress:a.length>0?`${a.join(`
1483
- `)}\n`:``}}catch(n){return{error:AO(e,`failed to install '${t}': ${kO(n)}`)}}}async function MO(e,t,n,r){return await bO(r,n)?null:await xO(r,n)?AO(e,`bin target '${n}' is a directory, not a file`):AO(e,`bin file '${n}' for '${t}' does not exist`)}async function NO(e,t,n,r,i,a){if(await OO(a.fs,i.cwd,t))return{error:AO(e,`package '${t}' does not expose an executable bin`)};let o=r?void 0:mO(t);if(o)return{error:{stdout:``,stderr:gO(e,t,n,o),exitCode:1}};let s=await jO(e,t,i,a);if(`error`in s)return s;let c=await DO(a.fs,i.cwd,t);return c?{resolved:c,installProgress:s.progress}:{error:AO(e,`package '${t}' was installed but does not expose an executable bin`)}}function PO(e,t){return{name:e,trusted:!0,async execute(n,r){if(n.length===0||n[0]===`--help`||n[0]===`-h`)return{stdout:vO(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:vO(e),stderr:``,exitCode:1};let c=s[0],l=s.slice(1),u;try{u=await DO(t.fs,r.cwd,c,o)}catch(t){return AO(e,kO(t))}let d=``;if(!u){if(o)return AO(e,`no global bin '${c}' found in ${qn}`);let n=await NO(e,c,l,i,r,t);if(`error`in n)return n.error;u=n.resolved,d=n.installProgress}let f=await MO(e,c,u.binFilePath,t.fs);if(f)return f;let p=Gr(await yO(t.fs,u.binFilePath)),m=[`node`,u.argvName,...l],h=await Ur(p,m,r,void 0,{filename:u.binFilePath});return{stdout:h.stdout,stderr:d+h.stderr,exitCode:h.exitCode}}}}function FO(e={}){return S(`jshd`,async(t,n)=>{let{runJshd:r}=await import(`./run-CskxSCIq.js`);return r(t,n,e)})}const IO=new Set([`SIGINT`,`SIGTERM`,`SIGKILL`,`SIGSTOP`,`SIGCONT`]);function LO(e={}){return S(`kill`,async t=>{if(t.length===0||t.includes(`--help`)||t.includes(`-h`))return UO();let n=e.processManager??RO();if(!n)return{stdout:``,stderr:`kill: no process manager available in this runtime
1483
+ `)}\n`:``}}catch(n){return{error:AO(e,`failed to install '${t}': ${kO(n)}`)}}}async function MO(e,t,n,r){return await bO(r,n)?null:await xO(r,n)?AO(e,`bin target '${n}' is a directory, not a file`):AO(e,`bin file '${n}' for '${t}' does not exist`)}async function NO(e,t,n,r,i,a){if(await OO(a.fs,i.cwd,t))return{error:AO(e,`package '${t}' does not expose an executable bin`)};let o=r?void 0:mO(t);if(o)return{error:{stdout:``,stderr:gO(e,t,n,o),exitCode:1}};let s=await jO(e,t,i,a);if(`error`in s)return s;let c=await DO(a.fs,i.cwd,t);return c?{resolved:c,installProgress:s.progress}:{error:AO(e,`package '${t}' was installed but does not expose an executable bin`)}}function PO(e,t){return{name:e,trusted:!0,async execute(n,r){if(n.length===0||n[0]===`--help`||n[0]===`-h`)return{stdout:vO(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:vO(e),stderr:``,exitCode:1};let c=s[0],l=s.slice(1),u;try{u=await DO(t.fs,r.cwd,c,o)}catch(t){return AO(e,kO(t))}let d=``;if(!u){if(o)return AO(e,`no global bin '${c}' found in ${qn}`);let n=await NO(e,c,l,i,r,t);if(`error`in n)return n.error;u=n.resolved,d=n.installProgress}let f=await MO(e,c,u.binFilePath,t.fs);if(f)return f;let p=Gr(await yO(t.fs,u.binFilePath)),m=[`node`,u.argvName,...l],h=await Ur(p,m,r,void 0,{filename:u.binFilePath});return{stdout:h.stdout,stderr:d+h.stderr,exitCode:h.exitCode}}}}function FO(e={}){return S(`jshd`,async(t,n)=>{let{runJshd:r}=await import(`./run-DMzBEiKS.js`);return r(t,n,e)})}const IO=new Set([`SIGINT`,`SIGTERM`,`SIGKILL`,`SIGSTOP`,`SIGCONT`]);function LO(e={}){return S(`kill`,async t=>{if(t.length===0||t.includes(`--help`)||t.includes(`-h`))return UO();let n=e.processManager??RO();if(!n)return{stdout:``,stderr:`kill: no process manager available in this runtime
1484
1484
  `,exitCode:1};let r=zO(t);if(!r.ok)return{stdout:``,stderr:r.stderr,exitCode:r.exitCode};let{allDelivered:i,errors:a}=BO(n,r.pids,r.signal);return{stdout:``,stderr:a.length?`${a.join(`
1485
1485
  `)}\n`:``,exitCode:+!i}})}function RO(){let e=globalThis.__slicc_pm;return e instanceof Object&&typeof e.signal==`function`?e:null}function zO(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
1486
1486
  `,exitCode:2};let i=VO(n);if(i instanceof Error)return{ok:!1,stderr:`kill: ${i.message}\n`,exitCode:2};t=i;continue}if(i.startsWith(`-`)){let e=HO(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
@@ -1553,7 +1553,7 @@ Common base URLs:
1553
1553
  `)+`
1554
1554
  `,stderr:``,exitCode:0}}function gk(e,t){let n=t.models.length;return{stdout:[`✓ ${e} (${fk(t.runtime,!1)})`,` Saved ${n} model${n===1?``:`s`} to Settings:`,...pk(t.models)].join(`
1555
1555
  `)+`
1556
- `,stderr:``,exitCode:0}}function _k(){return S(uk,async e=>{if(e.includes(`--help`)||e.includes(`-h`))return{stdout:dk(),stderr:``,exitCode:0};let{getApiKeyForProvider:t,getRawApiKeyForProvider:n,getBaseUrlForProvider:r,addAccount:i}=await import(`./account-store-CTatKxPN.js`).then(e=>e.t),{verifyConnection:a}=await import(`./local-llm-dyqHqRrI.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(uk);if(!s)return{stdout:``,stderr:`Local LLM is not configured. Open Settings → Providers → Local LLM and set a base URL.
1556
+ `,stderr:``,exitCode:0}}function _k(){return S(uk,async e=>{if(e.includes(`--help`)||e.includes(`-h`))return{stdout:dk(),stderr:``,exitCode:0};let{getApiKeyForProvider:t,getRawApiKeyForProvider:n,getBaseUrlForProvider:r,addAccount:i}=await import(`./account-store-DILjBx_6.js`).then(e=>e.t),{verifyConnection:a}=await import(`./local-llm-aJsOwp21.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(uk);if(!s)return{stdout:``,stderr:`Local LLM is not configured. Open Settings → Providers → Local LLM and set a base URL.
1557
1557
  `,exitCode:1};let c=await a(s,t(uk)??void 0);if(!c.ok)return mk(s,c);if(o===`discover`){let e=n(uk)??``;return i(uk,e,s,c.models.join(`, `)),gk(s,c)}return hk(s,c)})}function vk(){return{stdout:`usage: man <topic>
1558
1558
 
1559
1559
  Fetches documentation for a given topic from sliccy.com.
@@ -1591,20 +1591,20 @@ authorization-code flow, stores the access token, and retries.
1591
1591
  On success, the server is persisted to /workspace/.mcp/servers.json and
1592
1592
  an alias shim is written to /workspace/.mcp/aliases/<name>.jsh so the
1593
1593
  short name resolves on the PATH.
1594
- `);let n=C(e,{});if(`error`in n)return wk(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-IkZyI1oH.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-CwxmlQM-.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 Ok(r,i,e.resourceMetadataUrl,t),l=new s({url:r,fetchImpl:t.fetchImpl,getAuthHeader:()=>rA(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 cA(i,t);let m=await dA(i,f,t);if(u){let{registerMcpProvider:e}=await import(`./provider-DiIKNaWV.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: ${Ck}/${i}.jsh`,u?` auth: oauth (provider mcp:${i})`:` auth: none`].join(`
1594
+ `);let n=C(e,{});if(`error`in n)return wk(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-Miv4v_lU.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-CwxmlQM-.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 Ok(r,i,e.resourceMetadataUrl,t),l=new s({url:r,fetchImpl:t.fetchImpl,getAuthHeader:()=>rA(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 cA(i,t);let m=await dA(i,f,t);if(u){let{registerMcpProvider:e}=await import(`./provider--BIAlVcq.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: ${Ck}/${i}.jsh`,u?` auth: oauth (provider mcp:${i})`:` auth: none`].join(`
1595
1595
  `)+`
1596
- `)}async function Ok(e,t,n,r){let{discoverAuth:i,dynamicRegister:a,runAuthFlow:o}=await import(`./oauth-D20BEoY6.js`),{saveOAuthAccount:s}=await import(`./account-store-CTatKxPN.js`).then(e=>e.t),c=await aA(r.oauthFetchImpl),l=r.oauthLauncher??await iA(),u=await i(e,n,c);Sk.debug(`MCP OAuth discovery succeeded`,{name:t,serverUrl:e,discoveryPath:u.discoveryPath,issuer:u.issuer});let d=await na(_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 kk(e,t){if(w(e))return U(`usage: mcp list
1597
- `);let n=C(e,{});if(`error`in n)return wk(n.error);let{ensureAllMcpProvidersRegistered:r}=await import(`./provider-DiIKNaWV.js`);await r();let{listServers:i}=await import(`./store-IkZyI1oH.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(Ak(s))}function Ak(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(`
1596
+ `)}async function Ok(e,t,n,r){let{discoverAuth:i,dynamicRegister:a,runAuthFlow:o}=await import(`./oauth-D20BEoY6.js`),{saveOAuthAccount:s}=await import(`./account-store-DILjBx_6.js`).then(e=>e.t),c=await aA(r.oauthFetchImpl),l=r.oauthLauncher??await iA(),u=await i(e,n,c);Sk.debug(`MCP OAuth discovery succeeded`,{name:t,serverUrl:e,discoveryPath:u.discoveryPath,issuer:u.issuer});let d=await na(_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 kk(e,t){if(w(e))return U(`usage: mcp list
1597
+ `);let n=C(e,{});if(`error`in n)return wk(n.error);let{ensureAllMcpProvidersRegistered:r}=await import(`./provider--BIAlVcq.js`);await r();let{listServers:i}=await import(`./store-Miv4v_lU.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(Ak(s))}function Ak(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(`
1598
1598
  `)+`
1599
1599
  `}async function jk(e,t){if(w(e))return U(`usage: mcp search <query>
1600
1600
 
1601
1601
  Case-insensitive substring search across the cached tools of every
1602
1602
  registered MCP server. Matches tool name OR description and prints a
1603
1603
  table of (server, tool, description, match-field) rows.
1604
- `);let n=C(e,{});if(`error`in n)return wk(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-DiIKNaWV.js`);await a();let{listServers:o}=await import(`./store-IkZyI1oH.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,Mk(e.description),e.match]);return U(Ak(u))}function Mk(e){if(!e)return``;let t=e.replace(/\s+/g,` `).trim();return t.length<=60?t:t.slice(0,59)+`…`}async function Nk(e,t){if(e.length===0||w(e))return e.length===0?W(`mcp delete: expected <name>`):U(`usage: mcp delete <name>
1605
- `);let n=C(e,{});if(`error`in n)return wk(n.error);let r=n.positionals[0];if(!r)return W(`mcp delete: expected <name>`);let{ensureMcpProviderRegistered:i,removeMcpProvider:a}=await import(`./provider-DiIKNaWV.js`);await i(r);let{deleteServer:o}=await import(`./store-IkZyI1oH.js`).then(e=>e.r),s=await o(r,t.fs);await lA(r,t),await uA(r,t);let c=`mcp:${r}`,l=!1;try{let{removeAccount:e,getAccounts:t}=await import(`./account-store-CTatKxPN.js`).then(e=>e.t);t().some(e=>e.providerId===c)&&(await e(c),l=!0)}catch(e){Sk.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(`
1604
+ `);let n=C(e,{});if(`error`in n)return wk(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--BIAlVcq.js`);await a();let{listServers:o}=await import(`./store-Miv4v_lU.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,Mk(e.description),e.match]);return U(Ak(u))}function Mk(e){if(!e)return``;let t=e.replace(/\s+/g,` `).trim();return t.length<=60?t:t.slice(0,59)+`…`}async function Nk(e,t){if(e.length===0||w(e))return e.length===0?W(`mcp delete: expected <name>`):U(`usage: mcp delete <name>
1605
+ `);let n=C(e,{});if(`error`in n)return wk(n.error);let r=n.positionals[0];if(!r)return W(`mcp delete: expected <name>`);let{ensureMcpProviderRegistered:i,removeMcpProvider:a}=await import(`./provider--BIAlVcq.js`);await i(r);let{deleteServer:o}=await import(`./store-Miv4v_lU.js`).then(e=>e.r),s=await o(r,t.fs);await lA(r,t),await uA(r,t);let c=`mcp:${r}`,l=!1;try{let{removeAccount:e,getAccounts:t}=await import(`./account-store-DILjBx_6.js`).then(e=>e.t);t().some(e=>e.providerId===c)&&(await e(c),l=!0)}catch(e){Sk.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(`
1606
1606
  `)+`
1607
- `)}async function Pk(e,t){if(e.length===0)return W(`mcp invoke: expected <name>`);if(w(e.slice(0,1)))return U(Lk());let n=C([e[0]],{});if(`error`in n)return wk(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-DiIKNaWV.js`);await a(r);let{getServer:o}=await import(`./store-IkZyI1oH.js`).then(e=>e.r),s=await o(r,t.fs);if(!s)return W(`mcp invoke: unknown server "${r}" (run \`mcp add <url> ${r}\` first)`);let c=s.tools??[];if(i.length===0||w(i.slice(0,1)))return U(Rk(r,s,c));let l=C([i[0]],{});if(`error`in l)return wk(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}=Fk(i.slice(1));if(w(p))return U(Bk(r,d));let h=Vk(p,d.inputSchema);if(!h.ok)return W(`mcp invoke: ${h.error}`);let{McpClient:g}=await import(`./client-CwxmlQM-.js`).then(e=>e.n),_=new g({url:s.url,fetchImpl:t.fetchImpl,headers:s.headers,getAuthHeader:s.auth?()=>rA(r):void 0,...f===void 0?{}:{timeoutMs:f}});await _.initialize();let v=$k(await _.toolsCall(u,h.value));return m.length>0&&(v.stderr=m.map(e=>`${e}\n`).join(``)+v.stderr),v}function Fk(e){let t=[],n=[],r,i=0;for(;i<e.length;){let a=e[i];if(a.startsWith(`--timeout=`)){let e=Ik(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=Ik(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 Ik(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 Lk(){return`usage: mcp invoke <name> [tool] [--timeout <seconds>] [--flag value …]
1607
+ `)}async function Pk(e,t){if(e.length===0)return W(`mcp invoke: expected <name>`);if(w(e.slice(0,1)))return U(Lk());let n=C([e[0]],{});if(`error`in n)return wk(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--BIAlVcq.js`);await a(r);let{getServer:o}=await import(`./store-Miv4v_lU.js`).then(e=>e.r),s=await o(r,t.fs);if(!s)return W(`mcp invoke: unknown server "${r}" (run \`mcp add <url> ${r}\` first)`);let c=s.tools??[];if(i.length===0||w(i.slice(0,1)))return U(Rk(r,s,c));let l=C([i[0]],{});if(`error`in l)return wk(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}=Fk(i.slice(1));if(w(p))return U(Bk(r,d));let h=Vk(p,d.inputSchema);if(!h.ok)return W(`mcp invoke: ${h.error}`);let{McpClient:g}=await import(`./client-CwxmlQM-.js`).then(e=>e.n),_=new g({url:s.url,fetchImpl:t.fetchImpl,headers:s.headers,getAuthHeader:s.auth?()=>rA(r):void 0,...f===void 0?{}:{timeoutMs:f}});await _.initialize();let v=$k(await _.toolsCall(u,h.value));return m.length>0&&(v.stderr=m.map(e=>`${e}\n`).join(``)+v.stderr),v}function Fk(e){let t=[],n=[],r,i=0;for(;i<e.length;){let a=e[i];if(a.startsWith(`--timeout=`)){let e=Ik(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=Ik(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 Ik(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 Lk(){return`usage: mcp invoke <name> [tool] [--timeout <seconds>] [--flag value …]
1608
1608
 
1609
1609
  mcp invoke <name> List tools on <name>.
1610
1610
  mcp invoke <name> <tool> --help Show flags for <tool>.
@@ -1637,7 +1637,7 @@ Arguments are coerced according to the tool's JSON Schema:
1637
1637
 
1638
1638
  Re-fetches the tool catalog and \`apps/list\` for <name>. Does NOT refresh
1639
1639
  OAuth tokens — for OAuth token refresh use \`mcp auth <name>\`.
1640
- `);let n=C(e,{});if(`error`in n)return wk(n.error);let r=n.positionals[0];if(!r)return W(`mcp refresh: expected <name>`);let{ensureMcpProviderRegistered:i}=await import(`./provider-DiIKNaWV.js`);await i(r);let{getServer:a,setServer:o}=await import(`./store-IkZyI1oH.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-CwxmlQM-.js`).then(e=>e.n),u=new c({url:s.url,fetchImpl:t.fetchImpl,headers:s.headers,getAuthHeader:s.auth?()=>rA(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 dA(r,f,t);return U(`Refreshed "${r}" — tools: ${d.length}, apps: ${f.length} (${p} sprinkle${p===1?``:`s`})\n`)}async function tA(e,t){if(w(e))return U(`usage: mcp auth <name> [--silent | --interactive]
1640
+ `);let n=C(e,{});if(`error`in n)return wk(n.error);let r=n.positionals[0];if(!r)return W(`mcp refresh: expected <name>`);let{ensureMcpProviderRegistered:i}=await import(`./provider--BIAlVcq.js`);await i(r);let{getServer:a,setServer:o}=await import(`./store-Miv4v_lU.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-CwxmlQM-.js`).then(e=>e.n),u=new c({url:s.url,fetchImpl:t.fetchImpl,headers:s.headers,getAuthHeader:s.auth?()=>rA(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 dA(r,f,t);return U(`Refreshed "${r}" — tools: ${d.length}, apps: ${f.length} (${p} sprinkle${p===1?``:`s`})\n`)}async function tA(e,t){if(w(e))return U(`usage: mcp auth <name> [--silent | --interactive]
1641
1641
 
1642
1642
  Re-authenticate an existing MCP server. By default, attempts a silent
1643
1643
  token renewal using the persisted refresh_token; if that returns no
@@ -1649,7 +1649,7 @@ Options:
1649
1649
  -i, --interactive Skip silent renewal and open the OAuth popup
1650
1650
  directly. Use after revoking a refresh token or
1651
1651
  when the AS no longer accepts the cached one.
1652
- `);let n=C(e,{bool:xk});if(`error`in n)return wk(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-DiIKNaWV.js`),s=await o(r,{fetchImpl:t.oauthFetchImpl,launcher:t.oauthLauncher}),{getServer:c}=await import(`./store-IkZyI1oH.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-CBE-1T0O.js`).then(e=>e.r),f=d(u);if(!f)return W(`mcp auth: provider "${u}" is not registered`);if(a)return await nA(r,f,t);if(!f.onSilentRenew)return i?W(`mcp auth: provider "${u}" does not support silent renewal; retry without --silent`):await nA(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`);Sk.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 nA(r,f,t)}async function nA(e,t,n){if(!t.onOAuthLogin)return W(`mcp auth: provider "${t.id}" does not support interactive OAuth login`);let r=n.oauthLauncher??await iA(),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 rA(e){let t=`mcp:${e}`,{getOAuthAccountInfo:n}=await import(`./account-store-CTatKxPN.js`).then(e=>e.t),r=n(t);if(!r)return null;if(r.expired){try{let{getRegisteredProviderConfig:e}=await import(`./providers-CBE-1T0O.js`).then(e=>e.r),n=await e(t)?.onSilentRenew?.();if(n)return`Bearer ${n}`}catch(e){Sk.debug(`silent renewal threw`,{providerId:t,error:e instanceof Error?e.message:String(e)})}return null}return`Bearer ${r.token}`}async function iA(){let{createOAuthLauncher:e}=await import(`./oauth-service-DP3Rx6V_.js`);return e()}async function aA(e){if(e)return e;let{createProxiedFetch:t}=await import(`./proxied-fetch-DXaTHROw.js`).then(e=>e.a),n=t();return async(e,t)=>{let r=await n(e,{method:t?.method,headers:t?.headers,body:t?.body}),i=new TextDecoder().decode(r.body);return{ok:r.status>=200&&r.status<300,status:r.status,statusText:r.statusText,text:async()=>i,json:async()=>JSON.parse(i),headers:{get:e=>r.headers[e.toLowerCase()]??null}}}}async function oA(e){if(e)return e;let{VirtualFS:t}=await import(`./fs-BAUCLy_G.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 sA(e){return`// MCP alias for "${e}" — forwards args to \`mcp invoke ${e}\`.
1652
+ `);let n=C(e,{bool:xk});if(`error`in n)return wk(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--BIAlVcq.js`),s=await o(r,{fetchImpl:t.oauthFetchImpl,launcher:t.oauthLauncher}),{getServer:c}=await import(`./store-Miv4v_lU.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-ba6IyXlq.js`).then(e=>e.r),f=d(u);if(!f)return W(`mcp auth: provider "${u}" is not registered`);if(a)return await nA(r,f,t);if(!f.onSilentRenew)return i?W(`mcp auth: provider "${u}" does not support silent renewal; retry without --silent`):await nA(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`);Sk.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 nA(r,f,t)}async function nA(e,t,n){if(!t.onOAuthLogin)return W(`mcp auth: provider "${t.id}" does not support interactive OAuth login`);let r=n.oauthLauncher??await iA(),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 rA(e){let t=`mcp:${e}`,{getOAuthAccountInfo:n}=await import(`./account-store-DILjBx_6.js`).then(e=>e.t),r=n(t);if(!r)return null;if(r.expired){try{let{getRegisteredProviderConfig:e}=await import(`./providers-ba6IyXlq.js`).then(e=>e.r),n=await e(t)?.onSilentRenew?.();if(n)return`Bearer ${n}`}catch(e){Sk.debug(`silent renewal threw`,{providerId:t,error:e instanceof Error?e.message:String(e)})}return null}return`Bearer ${r.token}`}async function iA(){let{createOAuthLauncher:e}=await import(`./oauth-service-DP3Rx6V_.js`);return e()}async function aA(e){if(e)return e;let{createProxiedFetch:t}=await import(`./proxied-fetch-DXaTHROw.js`).then(e=>e.a),n=t();return async(e,t)=>{let r=await n(e,{method:t?.method,headers:t?.headers,body:t?.body}),i=new TextDecoder().decode(r.body);return{ok:r.status>=200&&r.status<300,status:r.status,statusText:r.statusText,text:async()=>i,json:async()=>JSON.parse(i),headers:{get:e=>r.headers[e.toLowerCase()]??null}}}}async function oA(e){if(e)return e;let{VirtualFS:t}=await import(`./fs-Cb2r5Gjw.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 sA(e){return`// MCP alias for "${e}" — forwards args to \`mcp invoke ${e}\`.
1653
1653
  // Auto-generated by \`mcp add ${e}\`; do not edit by hand.
1654
1654
  const { promisify } = require('util');
1655
1655
  const { exec } = require('child_process');
@@ -1678,8 +1678,8 @@ try {
1678
1678
  if (stdout) process.stdout.write(stdout);
1679
1679
  if (stderr) process.stderr.write(stderr);
1680
1680
  process.exit(exitCode);
1681
- `}async function cA(e,t){let n=await oA(t.fs);await n.mkdir(Ck,{recursive:!0}),await n.writeFile(`${Ck}/${e}.jsh`,sA(e)),t.scriptCatalog?.invalidateJsh()}async function lA(e,t){let n=await oA(t.fs),r=`${Ck}/${e}.jsh`;try{await n.exists(r)&&await n.rm(r)}catch(e){Sk.debug(`alias removal failed`,{path:r,error:e instanceof Error?e.message:String(e)})}t.scriptCatalog?.invalidateJsh()}async function uA(e,t){let{removeAppSprinkles:n}=await import(`./apps-DsnPdITH.js`);await n(e,t.fs)}async function dA(e,t,n){try{let{materializeAppSprinkles:r}=await import(`./apps-DsnPdITH.js`);return(await r(e,t,n.fs)).length}catch(t){return Sk.warn(`mcp: failed to materialize app sprinkles`,{name:e,error:t instanceof Error?t.message:String(t)}),0}}function fA(e){return{stdout:``,stderr:`meminfo: ${e}\n`,exitCode:1}}function pA(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 mA(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 hA(){let e=globalThis.performance,t=e?.measureUserAgentSpecificMemory;return t?t.bind(e):null}function gA(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 _A(e){let t=[`total: ${pA(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(`${pA(e.bytes).padEnd(10)} ${e.types.join(`,`).padEnd(20)} ${mA(e)}`)}return`${t.join(`
1682
- `)}\n`}function vA(e={}){return S(`meminfo`,async t=>{let n=gA(t);if(`error`in n)return fA(n.error);if(n.help)return{stdout:`meminfo - agent-cluster memory diagnostics
1681
+ `}async function cA(e,t){let n=await oA(t.fs);await n.mkdir(Ck,{recursive:!0}),await n.writeFile(`${Ck}/${e}.jsh`,sA(e)),t.scriptCatalog?.invalidateJsh()}async function lA(e,t){let n=await oA(t.fs),r=`${Ck}/${e}.jsh`;try{await n.exists(r)&&await n.rm(r)}catch(e){Sk.debug(`alias removal failed`,{path:r,error:e instanceof Error?e.message:String(e)})}t.scriptCatalog?.invalidateJsh()}async function uA(e,t){let{removeAppSprinkles:n}=await import(`./apps-DQOh9Fx7.js`);await n(e,t.fs)}async function dA(e,t,n){try{let{materializeAppSprinkles:r}=await import(`./apps-DQOh9Fx7.js`);return(await r(e,t,n.fs)).length}catch(t){return Sk.warn(`mcp: failed to materialize app sprinkles`,{name:e,error:t instanceof Error?t.message:String(t)}),0}}function fA(e){return{stdout:``,stderr:`meminfo: ${e}\n`,exitCode:1}}function pA(e){return e.attribution.length===0?`(shared)`:e.attribution.map(e=>{let t=e.container?.src??e.container?.id??e.url??`?`;return e.scope?`${e.scope} ${t}`:t}).join(`, `)}function mA(){let e=globalThis.performance,t=e?.measureUserAgentSpecificMemory;return t?t.bind(e):null}function hA(e){if(e[0]===`--help`||e[0]===`-h`||e[0]===`help`)return{help:!0};let t=!1;for(let n of e){if(n!==`--json`)return{error:`unknown option '${n}' — see \`meminfo --help\``};t=!0}return{help:!1,json:t}}function gA(e){let t=[`total: ${gy(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(`${gy(e.bytes).padEnd(10)} ${e.types.join(`,`).padEnd(20)} ${pA(e)}`)}return`${t.join(`
1682
+ `)}\n`}function _A(e={}){return S(`meminfo`,async t=>{let n=hA(t);if(`error`in n)return fA(n.error);if(n.help)return{stdout:`meminfo - agent-cluster memory diagnostics
1683
1683
 
1684
1684
  Usage:
1685
1685
  meminfo Human-readable breakdown (bytes, scope, types, url)
@@ -1690,8 +1690,8 @@ Notes:
1690
1690
  Document-Isolation-Policy). Embedded floats cannot be isolated and
1691
1691
  report why instead.
1692
1692
  - The browser randomizes measurement timing — expect a short delay.
1693
- `,stderr:``,exitCode:0};let r=e.isIsolated?e.isIsolated():globalThis.crossOriginIsolated===!0,i=e.measure??hA();if(!r&&!e.measure)return fA(`memory measurement requires a cross-origin-isolated runtime (Document-Isolation-Policy) — this runtime is not isolated`);if(!i)return fA(`performance.measureUserAgentSpecificMemory is not available in this browser`);let a;try{a=await i()}catch(e){return fA(e instanceof Error?e.message:String(e))}return n.json?{stdout:`${JSON.stringify(a,null,2)}\n`,stderr:``,exitCode:0}:{stdout:_A(a),stderr:``,exitCode:0}})}function yA(e){return S(`memory`,async t=>{let{runMemory:n}=await import(`./run-CweiB2_V.js`);return n(t,e)})}function bA(){return S(`mktemp`,async(e,t)=>{let{runMktemp:n}=await import(`./run-dAJe7sKp.js`);return n(e,t)})}const xA=`/.cache/artificial-analysis.json`,SA=[`--all`,`--all-versions`,`--json`,`--refresh`,`--no-benchmarks`,`--help`,`-h`],CA=[`--provider`];function wA(e){return{stdout:``,stderr:e.endsWith(`
1694
- `)?e:`${e}\n`,exitCode:1}}async function TA(e){try{let t=await e.readFile(xA),n=JSON.parse(t);if(Date.now()-n.fetchedAt<864e5)return n.models}catch{}return null}function EA(){try{return localStorage.getItem(`aa_api_key`)}catch{return null}}function DA(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 OA(e,t){let n={fetchedAt:Date.now(),models:t};try{await e.mkdir(`/.cache`,{recursive:!0}),await e.writeFile(xA,JSON.stringify(n))}catch{}}async function kA(e,t=!1){if(e&&!t){let t=await TA(e);if(t)return t}let n={Accept:`application/json`},r=EA();r&&(n[`x-api-key`]=r);let i=p(),a;try{a=await i(`https://artificialanalysis.ai/api/v2/data/llms/models`,{method:`GET`,headers:n})}catch{return[]}if(a.status===401||a.status<200||a.status>=300)return[];let o;try{o=JSON.parse(new TextDecoder().decode(a.body))}catch{return[]}if(typeof o!=`object`||!o)return[];let s=o,c=DA(Array.isArray(s)?s:s.data??s.models??[]);return e&&c.length>0&&await OA(e,c),c}function AA(e){return e.toLowerCase().replace(/\./g,`-`).replace(/-\d{8}$/,``).replace(/-\d{4}$/,``)}function jA(e,t){let n=e.toLowerCase(),r=t.find(e=>e.slug===n);if(r)return r;let i=AA(e),a=t.find(e=>AA(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 MA(){return`models - list available LLM models
1693
+ `,stderr:``,exitCode:0};let r=e.isIsolated?e.isIsolated():globalThis.crossOriginIsolated===!0,i=e.measure??mA();if(!r&&!e.measure)return fA(`memory measurement requires a cross-origin-isolated runtime (Document-Isolation-Policy) — this runtime is not isolated`);if(!i)return fA(`performance.measureUserAgentSpecificMemory is not available in this browser`);let a;try{a=await i()}catch(e){return fA(e instanceof Error?e.message:String(e))}return n.json?{stdout:`${JSON.stringify(a,null,2)}\n`,stderr:``,exitCode:0}:{stdout:gA(a),stderr:``,exitCode:0}})}function vA(e){return S(`memory`,async t=>{let{runMemory:n}=await import(`./run-vtJb7eHE.js`);return n(t,e)})}function yA(){return S(`mktemp`,async(e,t)=>{let{runMktemp:n}=await import(`./run-dAJe7sKp.js`);return n(e,t)})}const bA=`/.cache/artificial-analysis.json`,xA=[`--all`,`--all-versions`,`--json`,`--refresh`,`--no-benchmarks`,`--help`,`-h`],SA=[`--provider`];function CA(e){return{stdout:``,stderr:e.endsWith(`
1694
+ `)?e:`${e}\n`,exitCode:1}}async function wA(e){try{let t=await e.readFile(bA),n=JSON.parse(t);if(Date.now()-n.fetchedAt<864e5)return n.models}catch{}return null}function TA(){try{return localStorage.getItem(`aa_api_key`)}catch{return null}}function EA(e){return e.map(e=>{let t=e;return{slug:t.slug??``,name:t.name??``,creator_slug:t.model_creator?.slug??``,intelligence_index:t.evaluations?.artificial_analysis_intelligence_index??null,coding_index:t.evaluations?.artificial_analysis_coding_index??null,speed_tps:t.median_output_tokens_per_second??null}})}async function DA(e,t){let n={fetchedAt:Date.now(),models:t};try{await e.mkdir(`/.cache`,{recursive:!0}),await e.writeFile(bA,JSON.stringify(n))}catch{}}async function OA(e,t=!1){if(e&&!t){let t=await wA(e);if(t)return t}let n={Accept:`application/json`},r=TA();r&&(n[`x-api-key`]=r);let i=p(),a;try{a=await i(`https://artificialanalysis.ai/api/v2/data/llms/models`,{method:`GET`,headers:n})}catch{return[]}if(a.status===401||a.status<200||a.status>=300)return[];let o;try{o=JSON.parse(new TextDecoder().decode(a.body))}catch{return[]}if(typeof o!=`object`||!o)return[];let s=o,c=EA(Array.isArray(s)?s:s.data??s.models??[]);return e&&c.length>0&&await DA(e,c),c}function kA(e){return e.toLowerCase().replace(/\./g,`-`).replace(/-\d{8}$/,``).replace(/-\d{4}$/,``)}function AA(e,t){let n=e.toLowerCase(),r=t.find(e=>e.slug===n);if(r)return r;let i=kA(e),a=t.find(e=>kA(e.slug)===i);if(a)return a;let o=t.filter(e=>n.includes(e.slug)||e.slug.includes(n));if(o.length!==0)return o.sort((e,t)=>t.slug.length-e.slug.length),o[0]}function jA(){return`models - list available LLM models
1695
1695
 
1696
1696
  Usage: models [options]
1697
1697
 
@@ -1703,14 +1703,14 @@ Options:
1703
1703
  --refresh Force re-fetch benchmark data from Artificial Analysis
1704
1704
  --no-benchmarks Skip benchmark data enrichment (faster, works offline)
1705
1705
  -h, --help Show this help message
1706
- `}function NA(e){return e>=1e6?`${(e/1e6).toFixed(1)}M`.replace(`.0M`,`M`):e>=1e3?`${(e/1e3).toFixed(0)}K`:`${e}`}function PA(e){return`$${e.toFixed(2)}`}const FA=/\b(embedding|embed|tts|whisper|dall-e|image-gen|audio|vision-preview)\b/i;function IA(e){let t=`${e.id} ${e.name??``}`;return!FA.test(t)}function LA(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 RA(e){let t=e.toLowerCase();return t=t.replace(/-\d{8}$/,``),t=t.replace(/-\d{4}$/,``),t=t.replace(/-(preview|latest)$/,``),LA(t)??t.replace(/-[\d.]+$/,``)}function zA(e){let t=new Map;for(let n of e){let e=RA(n.id);(!t.has(e)||n.selected)&&t.set(e,n)}return[...t.values()]}function BA(e,t,n,r,i){let a=i?jA(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 VA(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=`${PA(e.cost.input)} / ${PA(e.cost.output)}`,a=`${NA(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(`
1706
+ `}function MA(e){return e>=1e6?`${(e/1e6).toFixed(1)}M`.replace(`.0M`,`M`):e>=1e3?`${(e/1e3).toFixed(0)}K`:`${e}`}function NA(e){return`$${e.toFixed(2)}`}const PA=/\b(embedding|embed|tts|whisper|dall-e|image-gen|audio|vision-preview)\b/i;function FA(e){let t=`${e.id} ${e.name??``}`;return!PA.test(t)}function IA(e){let t=e.match(/^(claude-(?:opus|sonnet|haiku))/);if(t)return t[1];let n=e.match(/^(gpt-\d+)(?:\.\d+)?(-[a-z][-a-z]*)?$/);if(n)return n[1]+(n[2]??``);let r=e.match(/^gemini-[\d.]+-(.+)$/);if(r)return`gemini-${r[1]}`;let i=e.match(/^gemini-(\d+)-(.+)$/);if(i)return`gemini-${i[2]}`;let a=e.match(/^grok-[\d.]+-([\w-]+)$/);if(a)return`grok-${a[1]}`;if(e.match(/^(grok)-[\d.]+$/))return`grok`;let o=e.match(/^(o\d+(?:-[a-z]+)?)(?:-\d.*)?$/);if(o)return o[1]}function LA(e){let t=e.toLowerCase();return t=t.replace(/-\d{8}$/,``),t=t.replace(/-\d{4}$/,``),t=t.replace(/-(preview|latest)$/,``),IA(t)??t.replace(/-[\d.]+$/,``)}function RA(e){let t=new Map;for(let n of e){let e=LA(n.id);(!t.has(e)||n.selected)&&t.set(e,n)}return[...t.values()]}function zA(e,t,n,r,i){let a=i?AA(e.id,i):void 0,o={id:e.id,name:e.name,provider:t,cost:e.cost??{input:0,output:0,cacheRead:0,cacheWrite:0},contextWindow:e.contextWindow??0,maxTokens:e.maxTokens??0,reasoning:!!e.reasoning,input:e.input??[`text`],selected:e.id===n&&t===r};return a?.intelligence_index!=null&&(o.intelligence=a.intelligence_index),a?.coding_index!=null&&(o.codingScore=a.coding_index),a?.speed_tps!=null&&(o.speed=a.speed_tps),o}function BA(e,t,n,r){let i=[];i.push(`Models for "${e}" (${t}):\n`);for(let e of n){let t=e.selected?` ► `:` `,n=e.id.padEnd(30),r=`${NA(e.cost.input)} / ${NA(e.cost.output)}`,a=`${MA(e.contextWindow)} ctx`,o=e.intelligence==null?``:`IQ:${e.intelligence}`,s=e.speed==null?``:`${Math.round(e.speed)} t/s`,c=e.reasoning?`reasoning`:``,l=o||s?`${o.padEnd(6)} ${s.padEnd(8)}`:``;i.push(`${t}${n} ${r.padEnd(16)} ${a.padEnd(10)} ${l} ${c}`)}return i.push(`\n ${n.length} model${n.length===1?``:`s`} available.`),r&&i.push(` Intelligence data: artificialanalysis.ai`),i.join(`
1707
1707
  `)+`
1708
- `}function HA(e){let t=C(e,{bool:SA,value:CA});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 UA(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 WA(e,t,n,r,i,a){let o=e.getProviderModels(t).filter(IA);if(o.length===0)return[];let s=o.map(e=>BA(e,t,n,r,i)).sort((e,t)=>t.cost.input-e.cost.input);return a||(s=zA(s)),s}function GA(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(w(e,{valueFlags:CA}))return{stdout:MA(),stderr:``,exitCode:0};let n=HA(e);if(`error`in n)return wA(`models: ${n.error}`);let r=await import(`./account-store-CTatKxPN.js`).then(e=>e.t);if(r.getAccounts().length===0)return wA(`No provider accounts configured. Run the provider settings to add one.
1709
- `);let i=r.resolveCurrentModel(),a=i.id,o=i.provider,s=r.getSelectedProvider(),c=r.getSelectedModelId(),l;if(!n.noBenchmarks){let e=await kA(t,n.forceRefresh);e.length>0&&(l=e)}let u=UA(r,n,s);if(`error`in u)return wA(u.error);let d=[],f=[];for(let e of u){let t=WA(r,e,a,o,l,n.allVersions);if(t.length===0){if(!n.allMode)return wA(`No models available for provider ${e}.\n`);continue}if(d.push(...t),!n.jsonMode){let n=r.getProviderConfig(e);f.push(VA(n.name,e,t,!!l))}}return n.jsonMode?{stdout:JSON.stringify(d,null,2)+`
1708
+ `}function VA(e){let t=C(e,{bool:xA,value:SA});return`error`in t?t:{jsonMode:t.bools.has(`--json`),allMode:t.bools.has(`--all`),allVersions:t.bools.has(`--all-versions`),forceRefresh:t.bools.has(`--refresh`),noBenchmarks:t.bools.has(`--no-benchmarks`),explicitProvider:t.values.get(`--provider`)}}function HA(e,t,n){if(t.explicitProvider){let n=e.getAvailableProviders();return n.includes(t.explicitProvider)?[t.explicitProvider]:{error:`Unknown provider: ${t.explicitProvider}. Available: ${n.join(`, `)}\n`}}return t.allMode?[...new Set(e.getAccounts().map(e=>e.providerId))]:[n]}function UA(e,t,n,r,i,a){let o=e.getProviderModels(t).filter(FA);if(o.length===0)return[];let s=o.map(e=>zA(e,t,n,r,i)).sort((e,t)=>t.cost.input-e.cost.input);return a||(s=RA(s)),s}function WA(e,t,n,r){let i=`${e}:${t}`,a=`${n}:${r}`;return i===a?`Currently using: ${i}\n`:`Currently using: ${i} (selected ${a} — resolved to a different model)\n`}async function GA(e,t){if(w(e,{valueFlags:SA}))return{stdout:jA(),stderr:``,exitCode:0};let n=VA(e);if(`error`in n)return CA(`models: ${n.error}`);let r=await import(`./account-store-DILjBx_6.js`).then(e=>e.t);if(r.getAccounts().length===0)return CA(`No provider accounts configured. Run the provider settings to add one.
1709
+ `);let i=r.resolveCurrentModel(),a=i.id,o=i.provider,s=r.getSelectedProvider(),c=r.getSelectedModelId(),l;if(!n.noBenchmarks){let e=await OA(t,n.forceRefresh);e.length>0&&(l=e)}let u=HA(r,n,s);if(`error`in u)return CA(u.error);let d=[],f=[];for(let e of u){let t=UA(r,e,a,o,l,n.allVersions);if(t.length===0){if(!n.allMode)return CA(`No models available for provider ${e}.\n`);continue}if(d.push(...t),!n.jsonMode){let n=r.getProviderConfig(e);f.push(BA(n.name,e,t,!!l))}}return n.jsonMode?{stdout:JSON.stringify(d,null,2)+`
1710
1710
  `,stderr:``,exitCode:0}:(n.allVersions||f.push(`Showing latest versions only. Use --all-versions to see all.
1711
- `),f.push(GA(o,a,s,c)),{stdout:f.join(`
1712
- `),stderr:``,exitCode:0})}function qA(e){return S(`models`,async t=>KA(t,e))}const JA=new Set([`-`,`/dev/stdin`,`/dev/fd/0`,`/proc/self/fd/0`]);function YA(e){return e===`-e`||e===`--eval`||JA.has(e)||!e.startsWith(`-`)}function XA(e){return{stdout:``,stderr:`node: ${e} is not a valid value for --input-type. Valid values are: 'commonjs' or 'module'.\n`,exitCode:9}}function ZA(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
1713
- `,exitCode:9}}:i!==`module`&&i!==`commonjs`?{nextIndex:a,error:XA(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(YA(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=ZA(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 $A(){return{stdout:`usage: node [options] [script.js] [args...]
1711
+ `),f.push(WA(o,a,s,c)),{stdout:f.join(`
1712
+ `),stderr:``,exitCode:0})}function KA(e){return S(`models`,async t=>GA(t,e))}const qA=new Set([`-`,`/dev/stdin`,`/dev/fd/0`,`/proc/self/fd/0`]);function JA(e){return e===`-e`||e===`--eval`||qA.has(e)||!e.startsWith(`-`)}function YA(e){return{stdout:``,stderr:`node: ${e} is not a valid value for --input-type. Valid values are: 'commonjs' or 'module'.\n`,exitCode:9}}function XA(e,t,n){let r=e.startsWith(`--input-type=`),i=r?e.slice(13):t,a=r?n+1:n+2;return i===void 0?{nextIndex:n+1,error:{stdout:``,stderr:`node: option --input-type requires an argument
1713
+ `,exitCode:9}}:i!==`module`&&i!==`commonjs`?{nextIndex:a,error:YA(i)}:{inputType:i,nextIndex:a}}function ZA(e){let t=!1,n=!1,r=!1,i,a=0;for(;a<e.length;){let o=e[a];if(JA(o))break;if(o===`-h`||o===`--help`){t=!0,a+=1;continue}if(o===`-v`||o===`--version`){n=!0,a+=1;continue}if(o===`-c`||o===`--check`){r=!0,a+=1;continue}if(o===`--input-type`||o.startsWith(`--input-type=`)){let s=XA(o,e[a+1],a);if(s.error)return{help:t,version:n,check:r,inputType:i,sourceIndex:s.nextIndex,error:s.error};i=s.inputType,a=s.nextIndex;continue}return{help:t,version:n,check:r,inputType:i,sourceIndex:a,error:{stdout:``,stderr:`node: unsupported option '${o}'\n`,exitCode:9}}}return{help:t,version:n,check:r,inputType:i,sourceIndex:a}}function QA(){return{stdout:`usage: node [options] [script.js] [args...]
1714
1714
  node [options] -e <code> [args...]
1715
1715
 
1716
1716
  Options:
@@ -1719,20 +1719,20 @@ Options:
1719
1719
  --input-type=TYPE module or commonjs (stdin / -e / .js)
1720
1720
  -h, --help print this help
1721
1721
  -v, --version print Node shim version
1722
- `,stderr:``,exitCode:0}}function ej(){return{stdout:`${ar}\n`,stderr:``,exitCode:0}}function tj(e,t){if(t){if(e.endsWith(`.mjs`)&&t===`commonjs`)return{stdout:``,stderr:`node: cannot set --input-type=commonjs for a .mjs file
1722
+ `,stderr:``,exitCode:0}}function $A(){return{stdout:`${ar}\n`,stderr:``,exitCode:0}}function ej(e,t){if(t){if(e.endsWith(`.mjs`)&&t===`commonjs`)return{stdout:``,stderr:`node: cannot set --input-type=commonjs for a .mjs file
1723
1723
  `,exitCode:9};if(e.endsWith(`.cjs`)&&t===`module`)return{stdout:``,stderr:`node: cannot set --input-type=module for a .cjs file
1724
- `,exitCode:9}}}function nj(e,t){if(!e.startsWith(`/`))return t;let n=e.lastIndexOf(`/`);return n<=0?`/`:e.slice(0,n)}function rj(e){return e instanceof Error?e.stack??e.message:String(e)}async function ij(e,t,n){if(!(Xn(e)||fr(e)||t.endsWith(`.mjs`)))return e;try{return(await(await Jr()).transform(e,{loader:`js`,format:`cjs`,sourcefile:`${t.replace(/\.[^./]+$/,``)}.js`,supported:{"dynamic-import":!1}})).code}catch(r){if(!/top-level await/i.test(rj(r)))throw r;return qr()({source:e,filename:t,fromDir:nj(t,n)})}}async function aj(e,t,n){let r=e;try{r=await ij(e,t,n)}catch(e){return{stdout:``,stderr:`${rj(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:`${rj(e)}\n`,exitCode:1}}}async function oj(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
1725
- `,exitCode:9}};if(e.length>0&&JA.has(e[0]))return{kind:`ok`,code:P(t.stdin),filename:`<stdin>`,argv:[`node`,e[0],...e.slice(1)],innerCtx:{...t,stdin:``}};if(e.length>0&&!e[0].startsWith(`-`)){let n=e[0],r=t.fs.resolvePath(t.cwd,n);return await t.fs.exists(r)?{kind:`ok`,code:await t.fs.readFile(r),filename:r,argv:[`node`,r,...e.slice(1)],innerCtx:t}:{kind:`result`,result:{stdout:``,stderr:`node: cannot find module '${n}'\n`,exitCode:1}}}return P(t.stdin).trim().length>0?{kind:`ok`,code:P(t.stdin),filename:`<stdin>`,argv:[`node`],innerCtx:{...t,stdin:``}}:e.length>0?{kind:`result`,result:{stdout:``,stderr:`node: unsupported option '${e[0]}'\n`,exitCode:9}}:{kind:`result`,result:{stdout:``,stderr:`node: REPL mode is not supported in this environment; use node -e "code"
1726
- `,exitCode:9}}}function sj(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 $A();if(r.version)return ej();let i=await oj(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
1727
- `,exitCode:9}:i.result;let{code:a,filename:o,argv:s,innerCtx:c}=i,l=tj(o,r.inputType);if(l)return l;let u=Gr(a);return r.check?aj(u,o,n.cwd):Ur(u,s,c,e.buildProcessConfig?.(n.env),{filename:o})}}}const cj=[`slicc:welcome-flow-fired`,`slicc.trayJoinUrl`,`slicc.trayWorkerBaseUrl`];async function lj(){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 uj=[],dj=[`--yes`];function fj(){return S(`nuke`,async e=>{if(w(e,{valueFlags:uj}))return{stdout:`Usage: nuke <launch-code>
1724
+ `,exitCode:9}}}function tj(e,t){if(!e.startsWith(`/`))return t;let n=e.lastIndexOf(`/`);return n<=0?`/`:e.slice(0,n)}function nj(e){return e instanceof Error?e.stack??e.message:String(e)}async function rj(e,t,n){if(!(Xn(e)||fr(e)||t.endsWith(`.mjs`)))return e;try{return(await(await Jr()).transform(e,{loader:`js`,format:`cjs`,sourcefile:`${t.replace(/\.[^./]+$/,``)}.js`,supported:{"dynamic-import":!1}})).code}catch(r){if(!/top-level await/i.test(nj(r)))throw r;return qr()({source:e,filename:t,fromDir:tj(t,n)})}}async function ij(e,t,n){let r=e;try{r=await rj(e,t,n)}catch(e){return{stdout:``,stderr:`${nj(e)}\n`,exitCode:1}}try{let e=Object.getPrototypeOf(async function(){}).constructor;return new e(r),{stdout:``,stderr:``,exitCode:0}}catch(e){return{stdout:``,stderr:`${nj(e)}\n`,exitCode:1}}}async function aj(e,t){if(e.length>0&&(e[0]===`-e`||e[0]===`--eval`))return e[1]?{kind:`ok`,code:e[1],filename:`[eval]`,argv:[`node`,...e.slice(2)],innerCtx:t}:{kind:`result`,result:{stdout:``,stderr:`node: option requires an argument -- eval
1725
+ `,exitCode:9}};if(e.length>0&&qA.has(e[0]))return{kind:`ok`,code:P(t.stdin),filename:`<stdin>`,argv:[`node`,e[0],...e.slice(1)],innerCtx:{...t,stdin:``}};if(e.length>0&&!e[0].startsWith(`-`)){let n=e[0],r=t.fs.resolvePath(t.cwd,n);return await t.fs.exists(r)?{kind:`ok`,code:await t.fs.readFile(r),filename:r,argv:[`node`,r,...e.slice(1)],innerCtx:t}:{kind:`result`,result:{stdout:``,stderr:`node: cannot find module '${n}'\n`,exitCode:1}}}return P(t.stdin).trim().length>0?{kind:`ok`,code:P(t.stdin),filename:`<stdin>`,argv:[`node`],innerCtx:{...t,stdin:``}}:e.length>0?{kind:`result`,result:{stdout:``,stderr:`node: unsupported option '${e[0]}'\n`,exitCode:9}}:{kind:`result`,result:{stdout:``,stderr:`node: REPL mode is not supported in this environment; use node -e "code"
1726
+ `,exitCode:9}}}function oj(e={},t=`node`){return{name:t,trusted:!0,async execute(t,n){let r=ZA(t);if(r.error)return r.error;if(r.help)return QA();if(r.version)return $A();let i=await aj(t.slice(r.sourceIndex),n);if(i.kind===`result`)return r.check&&i.result.exitCode===9&&t.slice(r.sourceIndex).length===0?{stdout:``,stderr:`node: -c/--check requires a filename or -e CODE
1727
+ `,exitCode:9}:i.result;let{code:a,filename:o,argv:s,innerCtx:c}=i,l=ej(o,r.inputType);if(l)return l;let u=Gr(a);return r.check?ij(u,o,n.cwd):Ur(u,s,c,e.buildProcessConfig?.(n.env),{filename:o})}}}const sj=[`slicc:welcome-flow-fired`,`slicc.trayJoinUrl`,`slicc.trayWorkerBaseUrl`];async function cj(){try{let e=await navigator.serviceWorker?.getRegistrations?.();e&&await Promise.all(e.map(e=>e.unregister().catch(()=>!1)))}catch{}try{let e=await indexedDB.databases();await Promise.all(e.filter(e=>!!e.name).map(e=>new Promise(t=>{let n=indexedDB.deleteDatabase(e.name);n.onsuccess=()=>t(),n.onerror=()=>t(),n.onblocked=()=>t()})))}catch{}try{let e=navigator.storage;if(typeof e?.getDirectory==`function`){let t=await e.getDirectory(),n=[];for await(let e of t.keys())n.push(e);await Promise.all(n.map(e=>t.removeEntry(e,{recursive:!0}).catch(()=>{})))}}catch{}}const lj=[],uj=[`--yes`];function dj(){return S(`nuke`,async e=>{if(w(e,{valueFlags:lj}))return{stdout:`Usage: nuke <launch-code>
1728
1728
 
1729
1729
  Completely reset the environment by deleting all local data and reloading.
1730
1730
  Destroys the file system, chat history, and scoops database.
1731
1731
  Requires the secret launch code to proceed.
1732
- `,stderr:``,exitCode:0};let t=C(e,{value:uj,bool:dj});return`error`in t?{stdout:``,stderr:`nuke: ${t.error}\n`,exitCode:1}:t.positionals.join(``).includes(`1234`)?((async()=>{await lj(),pj(cj)})(),{stdout:`Nuking everything…
1732
+ `,stderr:``,exitCode:0};let t=C(e,{value:lj,bool:uj});return`error`in t?{stdout:``,stderr:`nuke: ${t.error}\n`,exitCode:1}:t.positionals.join(``).includes(`1234`)?((async()=>{await cj(),fj(sj)})(),{stdout:`Nuking everything…
1733
1733
  `,stderr:``,exitCode:0}):{stdout:``,stderr:`⚠️ WARNING: this will reset the entire environment, file system, chats, and scoops.
1734
1734
  Run nuke again with the secret launch code to proceed.
1735
- `,exitCode:1}})}function pj(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 mj(){return`oauth-domain — manage extra allowed domains for OAuth-issued tokens
1735
+ `,exitCode:1}})}function fj(e=[]){let t=[...e];try{if(typeof BroadcastChannel==`function`){let e=new BroadcastChannel(`slicc-nuke-control`);e.postMessage({type:`nuke-reload`,keysToRemove:t}),setTimeout(()=>e.close(),100)}}catch{}for(let e of t)try{globalThis.localStorage?.removeItem(e)}catch{}try{globalThis.location?.reload?.()}catch{}}function pj(){return`oauth-domain — manage extra allowed domains for OAuth-issued tokens
1736
1736
 
1737
1737
  Usage:
1738
1738
  oauth-domain list List extra domains for every provider
@@ -1757,13 +1757,13 @@ Examples:
1757
1757
  oauth-domain add adobe '*.da.live'
1758
1758
  oauth-domain list adobe
1759
1759
  oauth-domain remove adobe admin.da.live
1760
- `}function hj(e){return{stdout:``,stderr:`oauth-domain: ${e}\n`,exitCode:1}}function gj(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(`
1760
+ `}function mj(e){return{stdout:``,stderr:`oauth-domain: ${e}\n`,exitCode:1}}function hj(e,t){if(t){let n=e.getExtraOAuthDomains(t);return n.length===0?{stdout:`(no extra domains configured for ${t})\n`,stderr:``,exitCode:0}:{stdout:`${n.join(`
1761
1761
  `)}\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)
1762
1762
  `,stderr:``,exitCode:0}:{stdout:`${n.map(([e,t])=>`${e}: ${t.join(`, `)}`).join(`
1763
- `)}\n`,stderr:``,exitCode:0}}async function _j(e,t,n){if(!t||!n)return{stdout:``,stderr:`oauth-domain add: requires <providerId> and <domain>
1764
- `,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 vj(e,t,n){if(!t||!n)return{stdout:``,stderr:`oauth-domain remove: requires <providerId> and <domain>
1765
- `,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 yj(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>
1766
- `,exitCode:1}}async function bj(e,t,n,r){switch(t){case`list`:return gj(e,n);case`add`:return _j(e,n,r);case`remove`:return vj(e,n,r);case`clear`:return yj(e,n);default:return{stdout:``,stderr:`oauth-domain: unknown subcommand "${t}"\n${mj()}`,exitCode:1}}}function xj(){return S(`oauth-domain`,async e=>{if(e.length===0||w(e))return{stdout:mj(),stderr:``,exitCode:0};let t=C(e);if(`error`in t)return hj(t.error);let[n,r,i]=t.positionals,a=await import(`./account-store-CTatKxPN.js`).then(e=>e.t);try{return await bj(a,n,r,i)}catch(e){return hj(e instanceof Error?e.message:String(e))}})}function Sj(){return S(`oauth-token`,async(e,t)=>{let{runOAuthToken:n}=await import(`./run-gFzqDdIk.js`);return n(e,t)})}const Cj=[`--download`,`-d`,`--view`,`-v`],wj=[`--size`],Tj={low:256,medium:768,high:1536};function Ej(){return{stdout:`usage: open [--download|-d] [--view|-v [--size <spec>]] <url|path> [url|path...]
1763
+ `)}\n`,stderr:``,exitCode:0}}async function gj(e,t,n){if(!t||!n)return{stdout:``,stderr:`oauth-domain add: requires <providerId> and <domain>
1764
+ `,exitCode:1};let r=e.getExtraOAuthDomains(t),i=n.toLowerCase();return r.some(e=>e.toLowerCase()===i)?{stdout:`(${n} already in ${t} extras)\n`,stderr:``,exitCode:0}:(await e.setExtraOAuthDomainsAsync(t,[...r,n]),{stdout:`Added ${n} to ${t}. Reload the page to apply.\n`,stderr:``,exitCode:0})}async function _j(e,t,n){if(!t||!n)return{stdout:``,stderr:`oauth-domain remove: requires <providerId> and <domain>
1765
+ `,exitCode:1};let r=e.getExtraOAuthDomains(t),i=n.toLowerCase(),a=r.filter(e=>e.toLowerCase()!==i);return a.length===r.length?{stdout:`(${n} not found in ${t} extras)\n`,stderr:``,exitCode:0}:(await e.setExtraOAuthDomainsAsync(t,a),{stdout:`Removed ${n} from ${t}. Reload the page to apply.\n`,stderr:``,exitCode:0})}async function vj(e,t){return t?(await e.setExtraOAuthDomainsAsync(t,[]),{stdout:`Cleared extra domains for ${t}. Reload the page to apply.\n`,stderr:``,exitCode:0}):{stdout:``,stderr:`oauth-domain clear: requires <providerId>
1766
+ `,exitCode:1}}async function yj(e,t,n,r){switch(t){case`list`:return hj(e,n);case`add`:return gj(e,n,r);case`remove`:return _j(e,n,r);case`clear`:return vj(e,n);default:return{stdout:``,stderr:`oauth-domain: unknown subcommand "${t}"\n${pj()}`,exitCode:1}}}function bj(){return S(`oauth-domain`,async e=>{if(e.length===0||w(e))return{stdout:pj(),stderr:``,exitCode:0};let t=C(e);if(`error`in t)return mj(t.error);let[n,r,i]=t.positionals,a=await import(`./account-store-DILjBx_6.js`).then(e=>e.t);try{return await yj(a,n,r,i)}catch(e){return mj(e instanceof Error?e.message:String(e))}})}function xj(){return S(`oauth-token`,async(e,t)=>{let{runOAuthToken:n}=await import(`./run-Bt3JWsKm.js`);return n(e,t)})}const Sj=[`--download`,`-d`,`--view`,`-v`],Cj=[`--size`],wj={low:256,medium:768,high:1536};function Tj(){return{stdout:`usage: open [--download|-d] [--view|-v [--size <spec>]] <url|path> [url|path...]
1767
1767
 
1768
1768
  VFS paths are served in a new browser tab via the preview service worker.
1769
1769
  URLs (http/https/etc.) are opened directly in a new tab.
@@ -1777,19 +1777,19 @@ Examples:
1777
1777
  medium (768x768), high (1536x1536), or a custom WxH
1778
1778
  box like 512x512. The image is fit inside the box
1779
1779
  with aspect ratio preserved and is never upscaled.
1780
- `,stderr:``,exitCode:0}}function Dj(e){if(e in Tj){let t=Tj[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 Oj(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 kj(){return`open --view requires --size to bound the inlined image. Use one of:
1780
+ `,stderr:``,exitCode:0}}function Ej(e){if(e in wj){let t=wj[e];return{maxW:t,maxH:t}}let t=/^(\d+)x(\d+)$/.exec(e);if(t){let e=parseInt(t[1],10),n=parseInt(t[2],10);if(e>0&&n>0)return{maxW:e,maxH:n}}return null}function Dj(e,t){if(t===`image/png`||t===`image/apng`){if(e.length<26)return!1;let t=e[25];return t===4||t===6}if(t===`image/webp`){if(e.length<16)return!1;let t=String.fromCharCode(e[12],e[13],e[14],e[15]);return t===`VP8L`?!0:t===`VP8X`?e.length<21?!1:!!(e[20]&16):!1}return!1}function Oj(){return`open --view requires --size to bound the inlined image. Use one of:
1781
1781
  --size low (256x256)
1782
1782
  --size medium (768x768)
1783
1783
  --size high (1536x1536)
1784
1784
  --size WxH (custom box, e.g. 512x512)
1785
- `}const Aj=new Set([`image/png`,`image/webp`]);function jj(e){let t=new ArrayBuffer(e.byteLength),n=new Uint8Array(t);return n.set(e),n}async function Mj(e,t){let n=jj(e),r=new Blob([n],{type:t}),i=await createImageBitmap(r);try{return{width:i.width,height:i.height}}finally{i.close?.()}}async function Nj(e,t,n,r){let i=jj(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=Oj(e,t)?Aj.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 Pj(e){let t=C(e,{bool:Cj,value:wj});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 Fj(e){return{ok:!0,message:e}}function G(e){return{ok:!1,result:{stdout:``,stderr:e,exitCode:1}}}function Ij(e){return e?` (targetId: ${e})`:``}function Lj(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 Rj(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),Fj(`opened sprinkle ${e} from ${a}`)}catch(e){return G(`open: ${e instanceof Error?e.message:String(e)}\n`)}}if(r){let e=await Zn(t.fs,or(a)),n=Or(a,e),r;try{r=await i(n)}catch(e){return G(`${e instanceof Error?e.message:String(e)}\n`)}return Fj(`opened ${a} → ${n}${Ij(r)}`)}return G(`open: sprinkle manager not initialized
1786
- `)}async function zj(e,t,n){if(!t)return G(`open: browser APIs are unavailable in this environment
1787
- `);let r;try{r=await n(e)}catch(e){return G(`${e instanceof Error?e.message:String(e)}\n`)}return Fj(`opened ${e}${Ij(r)}`)}async function Bj(e,n,r,i){let a;try{a=await r.fs.stat(n)}catch{return G(`open: no such file: ${e}\n`)}if(!a.isFile)return G(`open: not a file: ${e}\n`);let o;try{o=await r.fs.readFileBuffer(n)}catch{return G(`open: failed to read: ${e}\n`)}let s=Yn(n),c=new Uint8Array(o),l=null;if(i!==void 0&&(l=Dj(i),!l))return G(`open: invalid --size spec '${i}' (expected low|medium|high or WxH such as 512x512)\n`);if(!l){let t;try{t=await Mj(c,s)}catch(t){return G(`open: not an image or failed to decode: ${e} (${t instanceof Error?t.message:String(t)})\n`)}let r=Math.round(c.byteLength/1024);return G(`open --view: ${n} is ${t.width}x${t.height} (${r} KB, ${s})\n`+kj())}let u;try{u=await Nj(c,s,l.maxW,l.maxH)}catch(t){return G(`open: not an image or failed to decode: ${e} (${t instanceof Error?t.message:String(t)})\n`)}let d=t(u.bytes),f=Math.round(u.bytes.byteLength/1024);return Fj(`${n} (${u.nativeWidth}x${u.nativeHeight} → ${u.width}x${u.height}, ${f} KB, ${u.mime})\n<img:data:${u.mime};base64,${d}>`)}async function Vj(e,t,n,r){if(!r)return G(`open: --download requires the in-panel terminal (DOM-only)
1788
- `);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:Yn(t)}),c=URL.createObjectURL(s),l=document.createElement(`a`);return l.href=c,l.download=tr(t)||`download`,l.style.display=`none`,document.body.appendChild(l),l.click(),document.body.removeChild(l),setTimeout(()=>URL.revokeObjectURL(c),0),Fj(`downloaded ${t}`)}async function Hj(e,t,n,r){if(!n)return G(`open: browser APIs are unavailable in this environment
1789
- `);let i=!1;try{i=(await t.fs.stat(e)).isDirectory}catch{}let a=await Zn(t.fs,i?e:or(e)),o=Or(e,a),s;try{s=await r(o)}catch(e){return G(`${e instanceof Error?e.message:String(e)}\n`)}return Fj(`opened ${e} → ${o}${Ij(s)}`)}async function Uj(e,t,n,r){if(!$n(e)&&e.endsWith(`.shtml`)&&t.fs)return Rj(e,t,r.sprinkleManager,r.canOpenWindow,r.openExternal);if(!n.view&&!r.canOpenWindow)return G(`open: browser APIs are unavailable in this environment
1790
- `);if($n(e))return zj(e,r.canOpenWindow,r.openExternal);let i=t.fs.resolvePath(t.cwd,e);return n.view?Bj(e,i,t,n.sizeSpec):n.download?Vj(e,i,t,r.hasDom):Hj(i,t,r.canOpenWindow,r.openExternal)}function Wj(e){return S(`open`,async(t,n)=>{if(t.length===0||w(t,{valueFlags:wj}))return Ej();let r=Pj(t);if(`error`in r)return{stdout:``,stderr:`${r.error}\n`,exitCode:1};let{download:i,view:a,sizeSpec:o,targets:s}=r;if(s.length===0)return Ej();let c=globalThis.__slicc_sprinkleManager,l=typeof window<`u`&&typeof document<`u`,u=l?null:y(),d={canOpenWindow:!!e||l||!!u,hasDom:l,sprinkleManager:c,openExternal:Lj(e,l,u)},f=[];for(let e of s){let t=await Uj(e,n,{view:a,download:i,sizeSpec:o},d);if(!t.ok)return t.result;f.push(t.message)}return{stdout:f.join(`
1785
+ `}const kj=new Set([`image/png`,`image/webp`]);function Aj(e){let t=new ArrayBuffer(e.byteLength),n=new Uint8Array(t);return n.set(e),n}async function jj(e,t){let n=Aj(e),r=new Blob([n],{type:t}),i=await createImageBitmap(r);try{return{width:i.width,height:i.height}}finally{i.close?.()}}async function Mj(e,t,n,r){let i=Aj(e),a=new Blob([i],{type:t}),o=await createImageBitmap(a);try{let i=o.width,a=o.height,s=Math.min(n/i,r/a,1),c=Math.max(1,Math.round(i*s)),l=Math.max(1,Math.round(a*s)),u=new OffscreenCanvas(c,l),d=u.getContext(`2d`);if(!d)throw Error(`failed to acquire 2d context for resize`);d.drawImage(o,0,0,c,l);let f=Dj(e,t)?kj.has(t)?t:`image/png`:`image/jpeg`,p=await u.convertToBlob(f===`image/jpeg`?{type:`image/jpeg`,quality:.85}:{type:f});return{bytes:new Uint8Array(await p.arrayBuffer()),mime:f,width:c,height:l,nativeWidth:i,nativeHeight:a}}finally{o.close?.()}}function Nj(e){let t=C(e,{bool:Sj,value:Cj});if(`error`in t)return{error:`open: ${t.error}`};let n=t.values.get(`--size`);return n?.startsWith(`-`)&&n!==`-`?{error:`open: unknown flag: ${n}`}:{download:t.bools.has(`--download`)||t.bools.has(`-d`),view:t.bools.has(`--view`)||t.bools.has(`-v`),sizeSpec:n,targets:t.positionals}}function Pj(e){return{ok:!0,message:e}}function G(e){return{ok:!1,result:{stdout:``,stderr:e,exitCode:1}}}function Fj(e){return e?` (targetId: ${e})`:``}function Ij(e,t,n){return async r=>{if(e)return e.createPage(r);if(t){window.open(r,`_blank`,`noopener,noreferrer`);return}try{await n.call(`window-open`,{url:r,target:`_blank`,features:`noopener,noreferrer`})}catch(e){throw Error(`open: ${e instanceof Error?e.message:String(e)}`)}}}async function Lj(e,t,n,r,i){let a=t.fs.resolvePath(t.cwd,e);if(n){let e=(a.split(`/`).pop()??``).replace(/\.shtml$/,``);try{return await n.open(e),Pj(`opened sprinkle ${e} from ${a}`)}catch(e){return G(`open: ${e instanceof Error?e.message:String(e)}\n`)}}if(r){let e=await Zn(t.fs,or(a)),n=Or(a,e),r;try{r=await i(n)}catch(e){return G(`${e instanceof Error?e.message:String(e)}\n`)}return Pj(`opened ${a} → ${n}${Fj(r)}`)}return G(`open: sprinkle manager not initialized
1786
+ `)}async function Rj(e,t,n){if(!t)return G(`open: browser APIs are unavailable in this environment
1787
+ `);let r;try{r=await n(e)}catch(e){return G(`${e instanceof Error?e.message:String(e)}\n`)}return Pj(`opened ${e}${Fj(r)}`)}async function zj(e,n,r,i){let a;try{a=await r.fs.stat(n)}catch{return G(`open: no such file: ${e}\n`)}if(!a.isFile)return G(`open: not a file: ${e}\n`);let o;try{o=await r.fs.readFileBuffer(n)}catch{return G(`open: failed to read: ${e}\n`)}let s=Yn(n),c=new Uint8Array(o),l=null;if(i!==void 0&&(l=Ej(i),!l))return G(`open: invalid --size spec '${i}' (expected low|medium|high or WxH such as 512x512)\n`);if(!l){let t;try{t=await jj(c,s)}catch(t){return G(`open: not an image or failed to decode: ${e} (${t instanceof Error?t.message:String(t)})\n`)}let r=Math.round(c.byteLength/1024);return G(`open --view: ${n} is ${t.width}x${t.height} (${r} KB, ${s})\n`+Oj())}let u;try{u=await Mj(c,s,l.maxW,l.maxH)}catch(t){return G(`open: not an image or failed to decode: ${e} (${t instanceof Error?t.message:String(t)})\n`)}let d=t(u.bytes),f=Math.round(u.bytes.byteLength/1024);return Pj(`${n} (${u.nativeWidth}x${u.nativeHeight} → ${u.width}x${u.height}, ${f} KB, ${u.mime})\n<img:data:${u.mime};base64,${d}>`)}async function Bj(e,t,n,r){if(!r)return G(`open: --download requires the in-panel terminal (DOM-only)
1788
+ `);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:Yn(t)}),c=URL.createObjectURL(s),l=document.createElement(`a`);return l.href=c,l.download=tr(t)||`download`,l.style.display=`none`,document.body.appendChild(l),l.click(),document.body.removeChild(l),setTimeout(()=>URL.revokeObjectURL(c),0),Pj(`downloaded ${t}`)}async function Vj(e,t,n,r){if(!n)return G(`open: browser APIs are unavailable in this environment
1789
+ `);let i=!1;try{i=(await t.fs.stat(e)).isDirectory}catch{}let a=await Zn(t.fs,i?e:or(e)),o=Or(e,a),s;try{s=await r(o)}catch(e){return G(`${e instanceof Error?e.message:String(e)}\n`)}return Pj(`opened ${e} → ${o}${Fj(s)}`)}async function Hj(e,t,n,r){if(!$n(e)&&e.endsWith(`.shtml`)&&t.fs)return Lj(e,t,r.sprinkleManager,r.canOpenWindow,r.openExternal);if(!n.view&&!r.canOpenWindow)return G(`open: browser APIs are unavailable in this environment
1790
+ `);if($n(e))return Rj(e,r.canOpenWindow,r.openExternal);let i=t.fs.resolvePath(t.cwd,e);return n.view?zj(e,i,t,n.sizeSpec):n.download?Bj(e,i,t,r.hasDom):Vj(i,t,r.canOpenWindow,r.openExternal)}function Uj(e){return S(`open`,async(t,n)=>{if(t.length===0||w(t,{valueFlags:Cj}))return Tj();let r=Nj(t);if(`error`in r)return{stdout:``,stderr:`${r.error}\n`,exitCode:1};let{download:i,view:a,sizeSpec:o,targets:s}=r;if(s.length===0)return Tj();let c=globalThis.__slicc_sprinkleManager,l=typeof window<`u`&&typeof document<`u`,u=l?null:y(),d={canOpenWindow:!!e||l||!!u,hasDom:l,sprinkleManager:c,openExternal:Ij(e,l,u)},f=[];for(let e of s){let t=await Hj(e,n,{view:a,download:i,sizeSpec:o},d);if(!t.ok)return t.result;f.push(t.message)}return{stdout:f.join(`
1791
1791
  `)+`
1792
- `,stderr:``,exitCode:0}})}function Gj(){return S(`patch`,async(e,t)=>{let{runPatch:n}=await import(`./run-RD9OS2Ac.js`);return n(e,t)})}function Kj(e=`pdftk`){return S(e,async(t,n)=>{let{runPdftk:r}=await import(`./run-BEs473Sp.js`);return r(e,t,n)})}function qj(){return{stdout:`usage: pdftoppm [options] <input.pdf> [output-prefix]
1792
+ `,stderr:``,exitCode:0}})}function Wj(){return S(`patch`,async(e,t)=>{let{runPatch:n}=await import(`./run-DDPXLeHJ.js`);return n(e,t)})}function Gj(e=`pdftk`){return S(e,async(t,n)=>{let{runPdftk:r}=await import(`./run-BEs473Sp.js`);return r(e,t,n)})}function Kj(){return{stdout:`usage: pdftoppm [options] <input.pdf> [output-prefix]
1793
1793
 
1794
1794
  Rasterize PDF pages to images. Writes <prefix>-<n>.<ext> per page, where <n>
1795
1795
  is zero-padded to the digit width of the last page (out-1.png for a 9-page
@@ -1816,8 +1816,8 @@ Examples:
1816
1816
  pdftoppm -png -r 150 doc.pdf page
1817
1817
  pdftoppm -jpeg -jpegopt quality=80 -f 1 -l 3 doc.pdf out
1818
1818
  pdftoppm -png -singlefile -scale-to 1024 doc.pdf cover
1819
- `,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 Yj(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 Xj(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=Yj(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 Zj(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 $j(e){return e===`jpeg`?`jpg`:`png`}function eM(e){return e.scaleToX===void 0?e.scaleToY===void 0?e.scaleTo===void 0?{scale:Ri(e.dpi)}:{longEdge:e.scaleTo}:{height:e.scaleToY}:{width:e.scaleToX}}async function tM(e,t){let n=e.fs.resolvePath(e.cwd,t),r=await e.fs.readFileBuffer(n);if(!Ii(r))throw Error(`${t}: not a PDF file`);return r}function nM(e=`pdftoppm`){return S(e,async(t,n)=>{if(t.length===0||t.includes(`--help`)||t.includes(`-h`))return qj();let r;try{r=Xj(t)}catch(t){return{stdout:``,stderr:`${e}: ${t instanceof Error?t.message:String(t)}\n`,exitCode:1}}try{let t=await tM(n,r.inputPath),i=$j(r.format),a=r.outputRoot??Zj(tr(r.inputPath)),o=[];return await Fi(t,{firstPage:r.firstPage,lastPage:r.singleFile?r.firstPage??1:r.lastPage,format:r.format,quality:r.quality,...eM(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(`
1820
- `)}\n`,stderr:``,exitCode:0}}catch(t){return{stdout:``,stderr:`${e}: ${t instanceof Error?t.message:String(t)}\n`,exitCode:1}}})}function rM(e=`pdftotext`){return S(e,async(t,n)=>{let{runPdftotext:r}=await import(`./run-BVzzZSqz.js`);return r(e,t,n)})}function iM(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 aM(){lw(()=>()=>te()),cw(()=>()=>iM(te()))}const oM=`/workspace/.plugins/sources`;function sM(e){return{stdout:e,stderr:``,exitCode:0}}function K(e,t=1){return{stdout:``,stderr:`${e}\n`,exitCode:t}}function cM(e,t){let n=C(t,{});return`error`in n?K(`plugin ${e}: ${n.error}`):{ok:!0,positionals:n.positionals}}function lM(){return`usage: plugin <command> [args]
1819
+ `,stderr:``,exitCode:0}}function qj(e,t){if(e===void 0)throw Error(`missing argument for ${t}`);let n=Number(e);if(!Number.isFinite(n)||!Number.isInteger(n)||n<=0)throw Error(`invalid ${t} value: ${e}`);return n}function Jj(e){if(e===void 0)throw Error(`missing argument for -jpegopt`);for(let t of e.split(`,`)){let[e,n]=t.split(`=`);if(e?.trim()!==`quality`)continue;let r=Number(n);if(!Number.isFinite(r)||r<0||r>100)throw Error(`invalid -jpegopt quality: ${n}`);return r}throw Error(`unsupported -jpegopt: ${e}`)}function Yj(e){let t=`png`,n=150,r,i,a,o,s,c,l=!1,u=[];for(let d=0;d<e.length;d++){let f=e[d];switch(f){case`-png`:t=`png`;break;case`-jpeg`:t=`jpeg`;break;case`-jpegopt`:c=Jj(e[++d]),t=`jpeg`;break;case`-r`:n=qj(e[++d],`-r`);break;case`-f`:r=qj(e[++d],`-f`);break;case`-l`:i=qj(e[++d],`-l`);break;case`-scale-to`:a=qj(e[++d],`-scale-to`);break;case`-scale-to-x`:o=qj(e[++d],`-scale-to-x`);break;case`-scale-to-y`:s=qj(e[++d],`-scale-to-y`);break;case`-singlefile`:l=!0;break;default:if(f.startsWith(`-`))throw Error(`unsupported option ${f}`);u.push(f)}}if(u.length===0)throw Error(`expected an input PDF`);if(u.length>2)throw Error(`expected at most one input PDF and one output prefix`);if(r!==void 0&&i!==void 0&&r>i)throw Error(`invalid page range: ${r}-${i}`);return{inputPath:u[0],outputRoot:u[1],format:t,dpi:n,firstPage:r,lastPage:i,scaleTo:a,scaleToX:o,scaleToY:s,quality:c,singleFile:l}}function Xj(e){let t=e.lastIndexOf(`.`);return t>0?e.slice(0,t):e}function Zj(e,t,n,r){let i=String(n).length;return`${e}-${String(t).padStart(i,`0`)}.${r}`}function Qj(e){return e===`jpeg`?`jpg`:`png`}function $j(e){return e.scaleToX===void 0?e.scaleToY===void 0?e.scaleTo===void 0?{scale:Ri(e.dpi)}:{longEdge:e.scaleTo}:{height:e.scaleToY}:{width:e.scaleToX}}async function eM(e,t){let n=e.fs.resolvePath(e.cwd,t),r=await e.fs.readFileBuffer(n);if(!Ii(r))throw Error(`${t}: not a PDF file`);return r}function tM(e=`pdftoppm`){return S(e,async(t,n)=>{if(t.length===0||t.includes(`--help`)||t.includes(`-h`))return Kj();let r;try{r=Yj(t)}catch(t){return{stdout:``,stderr:`${e}: ${t instanceof Error?t.message:String(t)}\n`,exitCode:1}}try{let t=await eM(n,r.inputPath),i=Qj(r.format),a=r.outputRoot??Xj(tr(r.inputPath)),o=[];return await Fi(t,{firstPage:r.firstPage,lastPage:r.singleFile?r.firstPage??1:r.lastPage,format:r.format,quality:r.quality,...$j(r)},async(e,t)=>{let s=r.singleFile?`${a}.${i}`:Zj(a,e.pageNumber,t.lastPage,i);await n.fs.writeFile(n.fs.resolvePath(n.cwd,s),e.bytes),o.push(s)}),o.length===0?{stdout:``,stderr:`${e}: no pages to render\n`,exitCode:1}:{stdout:`${o.join(`
1820
+ `)}\n`,stderr:``,exitCode:0}}catch(t){return{stdout:``,stderr:`${e}: ${t instanceof Error?t.message:String(t)}\n`,exitCode:1}}})}function nM(e=`pdftotext`){return S(e,async(t,n)=>{let{runPdftotext:r}=await import(`./run-BVzzZSqz.js`);return r(e,t,n)})}function rM(e){let t=e.filter(e=>e.teleportEligible===!0&&e.bootstrapId&&e.floatType);if(t.length===0)return null;let n=t.filter(e=>e.floatType===`standalone`),r=n.length>0?n:t;r.sort((e,t)=>(t.lastActivity??0)-(e.lastActivity??0));let i=r[0];return{runtimeId:i.runtimeId,bootstrapId:i.bootstrapId,floatType:i.floatType}}function iM(){uw(()=>()=>te()),lw(()=>()=>rM(te()))}const aM=`/workspace/.plugins/sources`;function oM(e){return{stdout:e,stderr:``,exitCode:0}}function K(e,t=1){return{stdout:``,stderr:`${e}\n`,exitCode:t}}function sM(e,t){let n=C(t,{});return`error`in n?K(`plugin ${e}: ${n.error}`):{ok:!0,positionals:n.positionals}}function cM(){return`usage: plugin <command> [args]
1821
1821
 
1822
1822
  Load Agent Plugins packages (agent-plugins.org spec v1.0.0): portable
1823
1823
  directories bundling Agent Skills (skills/*/SKILL.md) and MCP servers
@@ -1827,7 +1827,7 @@ Commands:
1827
1827
  install <path|repo> Validate the plugin and register it. <repo> is a
1828
1828
  GitHub reference (owner/repo, owner/repo@branch, or
1829
1829
  https://github.com/owner/repo[/tree/branch[/dir]]),
1830
- downloaded into ${oM}/.
1830
+ downloaded into ${aM}/.
1831
1831
  Skills surface through the standard skills discovery;
1832
1832
  streamable-http MCP servers are added to the MCP
1833
1833
  store as "<plugin>:<server>".
@@ -1849,36 +1849,36 @@ Examples:
1849
1849
  plugin list
1850
1850
  plugin info my-plugin
1851
1851
  plugin remove my-plugin
1852
- `}function uM(e={}){return S(`plugin`,async(t,n)=>{if(t.length===0||t[0]===`--help`||t[0]===`-h`)return sM(lM());let r=t[0],i=t.slice(1),a=n?.cwd??`/`;try{switch(r){case`install`:case`add`:return await _M(i,a,e);case`list`:case`ls`:return await xM(i,e);case`info`:return await SM(i,e);case`validate`:return await CM(i,a,e,Bi(n?.env));case`remove`:case`rm`:case`delete`:return await wM(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 dM(e){if(e.fs)return e.fs;let{VirtualFS:t}=await import(`./fs-BAUCLy_G.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 fM(e,t,n){let r=TM(t,e);if(await n.exists(r))return{kind:`local`,root:r};let{parseGitHubRef:i}=await import(`./github-install-DV5Cxxb6.js`).then(e=>e.t),a=i(e);if(a){let e=`${a.owner}/${a.repo}${a.branch?`@${a.branch}`:``}${a.path?`/${a.path}`:``}`;return{kind:`github`,ref:{...a,display:e}}}return{kind:`error`,message:`${r} does not exist and "${e}" is not a GitHub reference (owner/repo[@branch] or https://github.com/owner/repo[/tree/branch[/dir]])`}}function pM(e){let t=e.replace(/[^A-Za-z0-9._-]+/g,`-`);return/^\.+$/.test(t)?t.replace(/\./g,`_`):t}function mM(e){let t=[e.owner,e.repo,...e.path?[e.path]:[]];return`${oM}/${t.map(pM).join(`--`)}`}async function hM(e,t,n,r){let{fetchRepoZip:i,stripZipPrefix:a,writeZipFilesToDir:o}=await import(`./github-zip-D-sld2PC.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 gM(e,t){try{await e.rm(t,{recursive:!0})}catch{}}async function _M(e,t,n){if(w(e))return sM(`usage: plugin install <path|repo>
1852
+ `}function lM(e={}){return S(`plugin`,async(t,n)=>{if(t.length===0||t[0]===`--help`||t[0]===`-h`)return oM(cM());let r=t[0],i=t.slice(1),a=n?.cwd??`/`;try{switch(r){case`install`:case`add`:return await gM(i,a,e);case`list`:case`ls`:return await bM(i,e);case`info`:return await xM(i,e);case`validate`:return await SM(i,a,e,Bi(n?.env));case`remove`:case`rm`:case`delete`:return await CM(i,e);default:return K(`plugin: unknown subcommand "${r}" (try \`plugin --help\`)`)}}catch(e){return K(`plugin ${r}: ${e instanceof Error?e.message:String(e)}`)}})}async function uM(e){if(e.fs)return e.fs;let{VirtualFS:t}=await import(`./fs-Cb2r5Gjw.js`).then(e=>e.t),{GLOBAL_FS_DB_NAME:n}=await import(`./global-db-DJXlpNui.js`).then(e=>e.n);return t.create({dbName:n})}async function dM(e,t,n){let r=wM(t,e);if(await n.exists(r))return{kind:`local`,root:r};let{parseGitHubRef:i}=await import(`./github-install-9oAKHScY.js`).then(e=>e.t),a=i(e);if(a){let e=`${a.owner}/${a.repo}${a.branch?`@${a.branch}`:``}${a.path?`/${a.path}`:``}`;return{kind:`github`,ref:{...a,display:e}}}return{kind:`error`,message:`${r} does not exist and "${e}" is not a GitHub reference (owner/repo[@branch] or https://github.com/owner/repo[/tree/branch[/dir]])`}}function fM(e){let t=e.replace(/[^A-Za-z0-9._-]+/g,`-`);return/^\.+$/.test(t)?t.replace(/\./g,`_`):t}function pM(e){let t=[e.owner,e.repo,...e.path?[e.path]:[]];return`${aM}/${t.map(fM).join(`--`)}`}async function mM(e,t,n,r){let{fetchRepoZip:i,stripZipPrefix:a,writeZipFilesToDir:o}=await import(`./github-zip-CaUDHE37.js`).then(e=>e.i),s=await i(e.owner,e.repo,r,e.branch);if(s.status===`error`)return`failed to download ${e.display}: ${s.message}`;let c=a(s.files),l=e.path?e.path.replace(/^\/|\/$/g,``)+`/`:``;if(!c[`${l}plugin.json`])return`no plugin.json found at ${e.display} — not an Agent Plugins package`;try{await n.rm(t,{recursive:!0})}catch{}return await n.mkdir(t,{recursive:!0}),(await o(c,l,t,n,!1)).length===0?`no files found at ${e.display}`:null}async function hM(e,t){try{await e.rm(t,{recursive:!0})}catch{}}async function gM(e,t,n){if(w(e))return oM(`usage: plugin install <path|repo>
1853
1853
 
1854
1854
  Loads the Agent Plugins package at <path>, or downloads it from a GitHub
1855
1855
  reference (owner/repo, owner/repo@branch, or
1856
1856
  https://github.com/owner/repo[/tree/branch[/dir]]) into
1857
- ${oM}/ first. Validates plugin.json (closed
1857
+ ${aM}/ first. Validates plugin.json (closed
1858
1858
  schema, name constraints), discovers skills/*/SKILL.md, and validates
1859
1859
  mcp.json. On success the plugin is recorded in
1860
1860
  /workspace/.plugins/plugins.json — its skills then surface through the
1861
1861
  standard skills discovery, and each supported streamable-http MCP server
1862
1862
  is registered in the MCP store as "<plugin>:<server>".
1863
- `);let r=cM(`install`,e);if(!(`ok`in r))return r;if(r.positionals.length<1)return K(`plugin install: expected <path|repo>`);let i=await dM(n),a=await fM(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=mM(a.ref),s=a.ref.display;let e=await hM(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 gM(i,o),K(`plugin install: plugin at ${s??o} was rejected:\n${EM(l.diagnostics)}`);let{plugin:u}=l,d=u.manifest.name,{getInstalledPlugin:f,setInstalledPlugin:p}=await import(`./store-D4NDUHdf.js`),m=await f(d,n.fs);if(m&&m.root!==o)return a.kind===`github`&&await gM(i,o),K(`plugin install: a plugin named "${d}" is already installed from ${m.root} (remove it first)`);let h=await bM(u,n),g=await yM(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),sM(vM(u,h,g,s??o,l.diagnostics))}function vM(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:`,EM(i)),c.join(`
1863
+ `);let r=sM(`install`,e);if(!(`ok`in r))return r;if(r.positionals.length<1)return K(`plugin install: expected <path|repo>`);let i=await uM(n),a=await dM(r.positionals[0],t,i);if(a.kind===`error`)return K(`plugin install: ${a.message}`);let o,s;if(a.kind===`github`){if(!n.fetch)return K(`plugin install: GitHub installs are unavailable (no network fetch configured)`);o=pM(a.ref),s=a.ref.display;let e=await mM(a.ref,o,i,n.fetch);if(e)return K(`plugin install: ${e}`)}else o=a.root;let{loadPluginFromDirectory:c}=await import(`./loader-Dw-TPPKt.js`),l=await c(i,o);if(!l.ok)return a.kind===`github`&&await hM(i,o),K(`plugin install: plugin at ${s??o} was rejected:\n${TM(l.diagnostics)}`);let{plugin:u}=l,d=u.manifest.name,{getInstalledPlugin:f,setInstalledPlugin:p}=await import(`./store-BaKaqZG4.js`),m=await f(d,n.fs);if(m&&m.root!==o)return a.kind===`github`&&await hM(i,o),K(`plugin install: a plugin named "${d}" is already installed from ${m.root} (remove it first)`);let h=await yM(u,n),g=await vM(d,m?.mcpServerNames,h.registered,n);return await p(d,{root:o,version:u.manifest.version,description:u.manifest.description,installedAt:new Date().toISOString(),mcpServerNames:h.registered,...s?{source:s}:{}},n.fs),oM(_M(u,h,g,s??o,l.diagnostics))}function _M(e,t,n,r,i){let a=e.manifest.name,o=t.registered,s=e.mcp.servers.filter(e=>e.status!==`supported`),c=[`Installed agent plugin "${a}"${e.manifest.version?` v${e.manifest.version}`:``} from ${r}`,` skills: ${e.skills.length}${e.skills.length>0?` (${e.skills.map(e=>e.name).join(`, `)})`:``}`,` mcp: ${o.length} registered${o.length>0?` (${o.join(`, `)})`:``}${s.length>0?`, ${s.length} skipped`:``}${n>0?`, ${n} removed from previous install`:``}`];return t.conflicts.length>0&&c.push(` warning: not bridged — MCP server name(s) already in use and not owned by this plugin: ${t.conflicts.join(`, `)} (remove them with \`mcp remove\` first)`),i.length>0&&c.push(`Diagnostics:`,TM(i)),c.join(`
1864
1864
  `)+`
1865
- `}async function yM(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-IkZyI1oH.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 bM(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-IkZyI1oH.js`).then(e=>e.r),{McpClient:a}=await import(`./client-CwxmlQM-.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 xM(e,t){if(w(e))return sM(`usage: plugin list
1866
- `);let n=cM(`list`,e);if(!(`ok`in n))return n;let{listInstalledPlugins:r}=await import(`./store-D4NDUHdf.js`),i=await r(t.fs),a=Object.keys(i).sort();if(a.length===0)return sM("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 sM(o.map(e=>e.map((e,t)=>e.padEnd(s[t])).join(` `)).join(`
1865
+ `}async function vM(e,t,n,r){let i=(t??[]).filter(e=>!n.includes(e));if(i.length===0)return 0;let{deleteServer:a,getServer:o}=await import(`./store-Miv4v_lU.js`).then(e=>e.r),s=0;for(let t of i)(await o(t,r.fs))?.pluginOrigin===e&&await a(t,r.fs)&&(s+=1);return s}async function yM(e,t){let n=e.mcp.servers.filter(e=>e.status===`supported`);if(n.length===0)return{registered:[],conflicts:[]};let{getServer:r,setServer:i}=await import(`./store-Miv4v_lU.js`).then(e=>e.r),{McpClient:a}=await import(`./client-CwxmlQM-.js`).then(e=>e.n),o=[],s=[];for(let c of n){let n=c.config,l=`${e.manifest.name}:${c.name}`,u=await r(l,t.fs);if(u&&u.pluginOrigin!==e.manifest.name){s.push(l);continue}let d=[];try{let e=new a({url:n.url,headers:n.headers});await e.initialize(),d=await e.toolsList()}catch{}await i(l,{url:n.url,...n.headers?{headers:n.headers}:{},tools:d,addedAt:new Date().toISOString(),pluginOrigin:e.manifest.name},t.fs),o.push(l)}return{registered:o,conflicts:s}}async function bM(e,t){if(w(e))return oM(`usage: plugin list
1866
+ `);let n=sM(`list`,e);if(!(`ok`in n))return n;let{listInstalledPlugins:r}=await import(`./store-BaKaqZG4.js`),i=await r(t.fs),a=Object.keys(i).sort();if(a.length===0)return oM("No agent plugins installed. Use `plugin install <path>`.\n");let o=[[`NAME`,`VERSION`,`ROOT`,`MCP`]];for(let e of a){let t=i[e];o.push([e,t.version??`-`,t.root,String(t.mcpServerNames?.length??0)])}let s=o[0].map((e,t)=>Math.max(...o.map(e=>e[t].length)));return oM(o.map(e=>e.map((e,t)=>e.padEnd(s[t])).join(` `)).join(`
1867
1867
  `)+`
1868
- `)}async function SM(e,t){if(w(e))return sM(`usage: plugin info <name>
1869
- `);let n=cM(`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-D4NDUHdf.js`),a=await i(r,t.fs);if(!a)return K(`plugin info: no installed plugin named "${r}"`);let o=await dM(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${EM(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:`,EM(c.diagnostics)),sM(d.join(`
1868
+ `)}async function xM(e,t){if(w(e))return oM(`usage: plugin info <name>
1869
+ `);let n=sM(`info`,e);if(!(`ok`in n))return n;if(n.positionals.length<1)return K(`plugin info: expected <name>`);let r=n.positionals[0],{getInstalledPlugin:i}=await import(`./store-BaKaqZG4.js`),a=await i(r,t.fs);if(!a)return K(`plugin info: no installed plugin named "${r}"`);let o=await uM(t),{loadPluginFromDirectory:s}=await import(`./loader-Dw-TPPKt.js`),c=await s(o,a.root);if(!c.ok)return K(`plugin info: plugin at ${a.root} no longer loads:\n${TM(c.diagnostics)}`);let{plugin:l}=c,u=l.manifest,d=[`${u.name}${u.version?` v${u.version}`:``}`,...u.description?[` ${u.description}`]:[],` root: ${l.root}`,...u.license?[` license: ${u.license}`]:[],...u.homepage?[` home: ${u.homepage}`]:[],``,`Skills (${l.skills.length}):`,...l.skills.map(e=>` ${e.name} ${e.description}`),``,`MCP servers (${l.mcp.servers.length}):`,...l.mcp.servers.map(e=>e.status===`supported`?` ${e.name} ${e.config.type} ${e.config.url}`:` ${e.name} [skipped: ${e.reason}]`)];return c.diagnostics.length>0&&d.push(``,`Diagnostics:`,TM(c.diagnostics)),oM(d.join(`
1870
1870
  `)+`
1871
- `)}async function CM(e,t,n,r){if(w(e))return sM(`usage: plugin validate <path|repo>
1872
- `);let i=cM(`validate`,e);if(!(`ok`in i))return i;if(i.positionals.length<1)return K(`plugin validate: expected <path|repo>`);let a=await dM(n),o=await fM(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/${mM(o.ref).split(`/`).pop()}`;let e=await hM(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 gM(a,c)}if(!u.ok)return{stdout:``,stderr:`plugin validate: REJECTED\n${EM(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:`,EM(u.diagnostics)),sM(p.join(`
1871
+ `)}async function SM(e,t,n,r){if(w(e))return oM(`usage: plugin validate <path|repo>
1872
+ `);let i=sM(`validate`,e);if(!(`ok`in i))return i;if(i.positionals.length<1)return K(`plugin validate: expected <path|repo>`);let a=await uM(n),o=await dM(i.positionals[0],t,a);if(o.kind===`error`)return K(`plugin validate: ${o.message}`);let s,c=null;if(o.kind===`github`){if(!n.fetch)return K(`plugin validate: GitHub sources are unavailable (no network fetch configured)`);c=`${r}/.plugin-validate/${pM(o.ref).split(`/`).pop()}`;let e=await mM(o.ref,c,a,n.fetch);if(e)return K(`plugin validate: ${e}`);s=c}else s=o.root;let{loadPluginFromDirectory:l}=await import(`./loader-Dw-TPPKt.js`),u;try{u=await l(a,s)}finally{c&&await hM(a,c)}if(!u.ok)return{stdout:``,stderr:`plugin validate: REJECTED\n${TM(u.diagnostics)}\n`,exitCode:1};let{plugin:d}=u,f=d.mcp.servers.filter(e=>e.status===`supported`).length,p=[`plugin validate: OK — "${d.manifest.name}"${d.manifest.version?` v${d.manifest.version}`:``}`,` skills: ${d.skills.length}`,` mcp servers: ${f} supported, ${d.mcp.servers.length-f} skipped (mcp.json ${d.mcp.status})`];return u.diagnostics.length>0&&p.push(`Diagnostics:`,TM(u.diagnostics)),oM(p.join(`
1873
1873
  `)+`
1874
- `)}async function wM(e,t){if(w(e))return sM(`usage: plugin remove <name>
1875
- `);let n=cM(`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-D4NDUHdf.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-IkZyI1oH.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(`${oM}/`);return c&&await gM(await dM(t),o.root),sM([`Removed agent plugin "${r}"`,` registry: removed`,` mcp servers: ${s} removed`,c?` files: removed (${o.root})`:` files: left in place (${o.root})`].join(`
1874
+ `)}async function CM(e,t){if(w(e))return oM(`usage: plugin remove <name>
1875
+ `);let n=sM(`remove`,e);if(!(`ok`in n))return n;if(n.positionals.length<1)return K(`plugin remove: expected <name>`);let r=n.positionals[0],{getInstalledPlugin:i,deleteInstalledPlugin:a}=await import(`./store-BaKaqZG4.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-Miv4v_lU.js`).then(e=>e.r);for(let i of o.mcpServerNames)(await n(i,t.fs))?.pluginOrigin===r&&await e(i,t.fs)&&(s+=1)}await a(r,t.fs);let c=o.root.startsWith(`${aM}/`);return c&&await hM(await uM(t),o.root),oM([`Removed agent plugin "${r}"`,` registry: removed`,` mcp servers: ${s} removed`,c?` files: removed (${o.root})`:` files: left in place (${o.root})`].join(`
1876
1876
  `)+`
1877
- `)}function TM(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 EM(e){return e.map(e=>` ${e.level===`error`?`error`:`warn `} [${e.component}] ${e.message}`).join(`
1878
- `)}const DM=[`pid`,`ppid`,`kind`,`stat`,`start`,`scoop`,`command`],OM=[`pid`,`ppid`,`stat`,`start`,`scoop`,`command`],kM={running:`R`,pending:`S`,exited:`Z`,killed:`K`},AM=[`-a`,`-A`,`-e`,`--all`,`-T`,`--tree`],jM=[`-o`,`--columns`];function MM(e={}){return S(`ps`,async t=>{if(w(t,{valueFlags:jM}))return KM();let n=e.processManager??NM();if(!n)return{stdout:``,stderr:`ps: no process manager available in this runtime
1879
- `,exitCode:1};let r=C(t,{bool:AM,value:jM});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=OM,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=PM(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?GM(l):l.map(e=>({proc:e,depth:0})),d=FM(i,u.map(({proc:e})=>e),s!==void 0),f=u.map(({proc:e,depth:t})=>RM(e,i,t,a,d));return{stdout:[IM(i,d),...f].join(`
1877
+ `)}function wM(e,t){let n=t.startsWith(`/`)?t:`${e.replace(/\/$/,``)}/${t}`,r=[];for(let e of n.split(`/`))e!==``&&e!==`.`&&(e===`..`?r.pop():r.push(e));return`/${r.join(`/`)}`}function TM(e){return e.map(e=>` ${e.level===`error`?`error`:`warn `} [${e.component}] ${e.message}`).join(`
1878
+ `)}const EM=[`pid`,`ppid`,`kind`,`stat`,`start`,`scoop`,`command`],DM=[`pid`,`ppid`,`stat`,`start`,`scoop`,`command`],OM={running:`R`,pending:`S`,exited:`Z`,killed:`K`},kM=[`-a`,`-A`,`-e`,`--all`,`-T`,`--tree`],AM=[`-o`,`--columns`];function jM(e={}){return S(`ps`,async t=>{if(w(t,{valueFlags:AM}))return GM();let n=e.processManager??MM();if(!n)return{stdout:``,stderr:`ps: no process manager available in this runtime
1879
+ `,exitCode:1};let r=C(t,{bool:kM,value:AM});if(`error`in r)return{stdout:``,stderr:`ps: ${r.error}\n`,exitCode:r.error.startsWith(`unknown flag:`)?1:2};if(r.positionals.length>0)return{stdout:``,stderr:`ps: unrecognized argument '${r.positionals[0]}'\n`,exitCode:2};let i=DM,a=r.bools.has(`-T`)||r.bools.has(`--tree`),o=r.bools.has(`-a`)||r.bools.has(`-A`)||r.bools.has(`-e`)||r.bools.has(`--all`),s=r.values.get(`-o`)??r.values.get(`--columns`);if(s!==void 0){let e=NM(s);if(e instanceof Error)return{stdout:``,stderr:`ps: ${e.message}\n`,exitCode:2};i=e}let c=n.list().sort((e,t)=>e.pid-t.pid),l=o?c:c.filter(e=>e.status===`running`||e.status===`pending`),u=a?WM(l):l.map(e=>({proc:e,depth:0})),d=PM(i,u.map(({proc:e})=>e),s!==void 0),f=u.map(({proc:e,depth:t})=>LM(e,i,t,a,d));return{stdout:[FM(i,d),...f].join(`
1880
1880
  `)+`
1881
- `,stderr:``,exitCode:0}})}function NM(){let e=globalThis.__slicc_pm;return e instanceof Object&&typeof e.list==`function`?e:null}function PM(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(!DM.includes(e))return Error(`unknown column '${e}'; supported: ${DM.join(`, `)}`);n.push(e)}return n}function FM(e,t,n){if(!(n&&e.includes(`scoop`)))return{full:!1,width:10};let r=5;for(let e of t)r=Math.max(r,VM(e).length);return{full:!0,width:r}}function IM(e,t){return e.map(e=>LM(e,t)).join(` `)}function LM(e,t){switch(e){case`pid`:return`PID`.padStart(5);case`ppid`:return`PPID`.padStart(5);case`kind`:return`KIND`.padEnd(10);case`stat`:return`STAT`;case`start`:return`START`;case`scoop`:return`SCOOP`.padEnd(t.width);case`command`:return`COMMAND`}}function RM(e,t,n,r,i){return t.map(t=>zM(e,t,n,r,i)).join(` `)}function zM(e,t,n,r,i){switch(t){case`pid`:return String(e.pid).padStart(5);case`ppid`:return String(e.ppid).padStart(5);case`kind`:return e.kind.padEnd(10);case`stat`:return kM[e.status];case`start`:return BM(e.startedAt);case`scoop`:return HM(e,i);case`command`:return UM(e,n,r)}}function BM(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 VM(e){return e.owner.kind===`cone`?`cone`:e.owner.kind===`system`?`system`:e.owner.kind===`jshd`?`jshd`:e.owner.scoopJid??`scoop`}function HM(e,t){let n=VM(e);return(t.full?n:n.slice(0,t.width)).padEnd(t.width)}function UM(e,t,n){let r=n&&t>0?` `.repeat(t-1)+`└─ `:``,i=e.argv.length===0?`[${e.kind}]`:e.argv.map(WM).join(` `);return r+(i.length>80?i.slice(0,79)+`…`:i)}function WM(e){return e===``?`''`:/^[A-Za-z0-9_./:=@%+-]+$/.test(e)?e:e.includes(`"`)&&!e.includes(`'`)?`'${e}'`:`"${e.replace(/\\/g,`\\\\`).replace(/"/g,`\\"`)}"`}function GM(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 KM(){return{stdout:`Usage: ps [-a] [-T] [-o col[,col…]]
1881
+ `,stderr:``,exitCode:0}})}function MM(){let e=globalThis.__slicc_pm;return e instanceof Object&&typeof e.list==`function`?e:null}function NM(e){let t=e.split(`,`).map(e=>e.trim().toLowerCase()).filter(Boolean);if(t.length===0)return Error(`-o requires at least one column`);let n=[];for(let e of t){if(!EM.includes(e))return Error(`unknown column '${e}'; supported: ${EM.join(`, `)}`);n.push(e)}return n}function PM(e,t,n){if(!(n&&e.includes(`scoop`)))return{full:!1,width:10};let r=5;for(let e of t)r=Math.max(r,BM(e).length);return{full:!0,width:r}}function FM(e,t){return e.map(e=>IM(e,t)).join(` `)}function IM(e,t){switch(e){case`pid`:return`PID`.padStart(5);case`ppid`:return`PPID`.padStart(5);case`kind`:return`KIND`.padEnd(10);case`stat`:return`STAT`;case`start`:return`START`;case`scoop`:return`SCOOP`.padEnd(t.width);case`command`:return`COMMAND`}}function LM(e,t,n,r,i){return t.map(t=>RM(e,t,n,r,i)).join(` `)}function RM(e,t,n,r,i){switch(t){case`pid`:return String(e.pid).padStart(5);case`ppid`:return String(e.ppid).padStart(5);case`kind`:return e.kind.padEnd(10);case`stat`:return OM[e.status];case`start`:return zM(e.startedAt);case`scoop`:return VM(e,i);case`command`:return HM(e,n,r)}}function zM(e){let t=new Date(e);return`${String(t.getHours()).padStart(2,`0`)}:${String(t.getMinutes()).padStart(2,`0`)}:${String(t.getSeconds()).padStart(2,`0`)}`}function BM(e){return e.owner.kind===`cone`?`cone`:e.owner.kind===`system`?`system`:e.owner.kind===`jshd`?`jshd`:e.owner.scoopJid??`scoop`}function VM(e,t){let n=BM(e);return(t.full?n:n.slice(0,t.width)).padEnd(t.width)}function HM(e,t,n){let r=n&&t>0?` `.repeat(t-1)+`└─ `:``,i=e.argv.length===0?`[${e.kind}]`:e.argv.map(UM).join(` `);return r+(i.length>80?i.slice(0,79)+`…`:i)}function UM(e){return e===``?`''`:/^[A-Za-z0-9_./:=@%+-]+$/.test(e)?e:e.includes(`"`)&&!e.includes(`'`)?`'${e}'`:`"${e.replace(/\\/g,`\\\\`).replace(/"/g,`\\"`)}"`}function WM(e){let t=new Map;for(let n of e)t.set(n.pid,n);let n=new Map,r=[];for(let i of e)if(t.has(i.ppid)){let e=n.get(i.ppid)??[];e.push(i),n.set(i.ppid,e)}else r.push(i);let i=[],a=new Set,o=(e,t)=>{if(a.has(e.pid))return;a.add(e.pid),i.push({proc:e,depth:t});let r=n.get(e.pid)??[];for(let e of r.sort((e,t)=>e.pid-t.pid))o(e,t+1)};for(let e of r.sort((e,t)=>e.pid-t.pid))o(e,0);return i}function GM(){return{stdout:`Usage: ps [-a] [-T] [-o col[,col…]]
1882
1882
 
1883
1883
  List processes tracked by the kernel.
1884
1884
 
@@ -1911,9 +1911,9 @@ Examples:
1911
1911
  ps -a -T full tree
1912
1912
  ps -o pid,kind,stat just three columns
1913
1913
  ps -o scoop,stat,pid full scoop jid, with STAT and PID
1914
- `,stderr:``,exitCode:0}}const qM=new Set([`dev`,`proc`,`lib`,`bin`,`usr`,`etc`,`home`,`tmp`]);async function JM(e,t=qM){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 YM(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 XM(){try{if(typeof globalThis.navigator?.storage?.getDirectory==`function`)return`slicc-fs`}catch{}}function ZM(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 QM(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 $M(e,t){return`installed pyodide ${e} is not the supported version ${t}: run \`ipk uninstall pyodide\` then \`ipk add pyodide@${t}\``}function eN(){return{stdout:`usage: python3 [-c code | script.py] [args...]
1915
- `,stderr:``,exitCode:0}}function tN(){return{stdout:`Python 3.14 (Pyodide)
1916
- `,stderr:``,exitCode:0}}async function nN(e,t,n){if(t[0]===`-c`){if(!t[1])return{kind:`result`,result:{stdout:``,stderr:`${e}: option requires an argument -- 'c'\n`,exitCode:2}};let n=t[1];return{kind:`ok`,code:n,filename:`-c`,sysArgv:[`-c`,...t.slice(2)],procArgv:[e,`-c`,n,...t.slice(2)]}}if(t.length>0&&!t[0].startsWith(`-`)){let r=t[0],i=n.fs.resolvePath(n.cwd,r);return await n.fs.exists(i)?{kind:`ok`,code:await n.fs.readFile(i),filename:r,sysArgv:[r,...t.slice(1)],procArgv:[e,r,...t.slice(1)]}:{kind:`result`,result:{stdout:``,stderr:`${e}: can't open file '${r}': [Errno 2] No such file or directory\n`,exitCode:2}}}return P(n.stdin).trim().length>0?{kind:`ok`,code:P(n.stdin),filename:`<stdin>`,sysArgv:[`<stdin>`],procArgv:[e]}:t.length>0?{kind:`result`,result:{stdout:``,stderr:`${e}: unsupported option '${t[0]}'\n`,exitCode:2}}:{kind:`result`,result:{stdout:``,stderr:`${e}: no input provided (use -c CODE, script path, or stdin)\n`,exitCode:2}}}async function rN(e){let t=ZM(e),n=await Tr(t);if(!n)return{kind:`result`,result:{stdout:``,stderr:`${wr}\n`,exitCode:1}};let r=await QM(t.reader,n);return r?r===mr?{kind:`ok`,assetRoot:n}:{kind:`result`,result:{stdout:``,stderr:`${$M(r,mr)}\n`,exitCode:1}}:{kind:`result`,result:{stdout:``,stderr:`${wr}\n`,exitCode:1}}}const iN=new Set(`EsSuBIPqObdR`);function aN(e){let t=0;for(;t<e.length&&/^-[A-Za-z]+$/.test(e[t]);){let n=e[t].slice(1);if(n===`W`||n===`X`){t+=2;continue}if(![...n].every(e=>iN.has(e)))break;t++}return t===0?e:e.slice(t)}function oN(e,t={}){return S(e,async(n,r)=>{let i=aN(n),a=i[0];if(a===`--help`||a===`-h`)return eN();if(a===`--version`||a===`-V`)return tN();let o=await nN(e,i,r);if(o.kind===`result`)return o.result;let{code:s,filename:c,sysArgv:l,procArgv:u}=o,d=await JM(r.fs),f=YM(r.fs,d),p=t.buildProcessConfig?.(r.env),m=p?.processManager??sN(),h=p?.owner??{kind:`system`},g=p?.getParentPid?.(),_=t.realmFactory??Mr(),v=t.pyodideIndexURL??Kr(),ee=t.pyodideAssetRoot;if(!ee&&v===void 0){let e=await rN(r);if(e.kind===`result`)return e.result;ee=e.assetRoot}let te=c===`<stdin>`?``:P(r.stdin),ne=XM();return m?Hr({pm:m,realmFactory:_,owner:h,kind:`py`,code:s,argv:u,realmArgv:l,env:Object.fromEntries(r.env.entries()),cwd:r.cwd,filename:c,ctx:r,stdin:te,pyodideIndexURL:v,pyodideAssetRoot:ee,pyodideMountDirs:d,opfsMountDbName:ne,mountPoints:f,procKind:`py`,ppid:g,syncFsBridgeEnabled:jr()}):lN({realmFactory:_,owner:h,code:s,argv:u,realmArgv:l,env:Object.fromEntries(r.env.entries()),cwd:r.cwd,filename:c,ctx:r,stdin:te,pyodideIndexURL:v,pyodideAssetRoot:ee,pyodideMountDirs:d,opfsMountDbName:ne,mountPoints:f})})}function sN(){let e=globalThis.__slicc_pm;return e&&typeof e==`object`&&typeof e.spawn==`function`&&typeof e.onSignal==`function`?e:null}let cN=null;async function lN(e){if(!cN){let{ProcessManager:e}=await import(`./process-manager-BkhAohXT.js`).then(e=>e.n);cN=new e}return Hr({pm:cN,realmFactory:e.realmFactory,owner:e.owner,kind:`py`,code:e.code,argv:e.argv,realmArgv:e.realmArgv,env:e.env,cwd:e.cwd,filename:e.filename,ctx:e.ctx,stdin:e.stdin,pyodideIndexURL:e.pyodideIndexURL,pyodideAssetRoot:e.pyodideAssetRoot,pyodideMountDirs:e.pyodideMountDirs,mountPoints:e.mountPoints,opfsMountDbName:e.opfsMountDbName,procKind:`py`,syncFsBridgeEnabled:jr()})}function uN(){return S(`rg`,async(e,t)=>{let{runRg:n}=await import(`./run-DniTiLYn.js`);return n(e,t)})}function dN(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 fN(){return null}function pN(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=mN(r),o=mN(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 mN(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 hN(){return{stdout:`rsync — sync files between local VFS and a remote tray runtime
1914
+ `,stderr:``,exitCode:0}}const KM=new Set([`dev`,`proc`,`lib`,`bin`,`usr`,`etc`,`home`,`tmp`]);async function qM(e,t=KM){let n=[],r=new Set;try{let i=await e.readdir(`/`);for(let a of i){if(!a||a.includes(`/`)||t.has(a))continue;let i=`/${a}`,o=!1;try{o=!!(await e.stat(i)).isDirectory}catch{continue}o&&(r.has(i)||(r.add(i),n.push(i)))}}catch{}return r.has(`/tmp`)||(r.add(`/tmp`),n.push(`/tmp`)),n}function JM(e,t){let n=e;if(typeof n.listMountPoints!=`function`)return[];let r=e=>{for(let n of t)if(e===n||e.startsWith(n===`/`?`/`:n+`/`)||n.startsWith(e+`/`))return!0;return!1},i=[];for(let e of n.listMountPoints())e.kind!==`proc`&&r(e.path)&&i.push({path:e.path,kind:e.kind});return i}function YM(){try{if(typeof globalThis.navigator?.storage?.getDirectory==`function`)return`slicc-fs`}catch{}}function XM(e){return{reader:{exists:t=>e.fs.exists(t),isDirectory:async t=>{try{return(await e.fs.stat(t)).isDirectory}catch{return!1}},readFile:t=>e.fs.readFile(t)},fromDir:e.cwd}}async function ZM(e,t){try{let n=await e.readFile(`${t}/package.json`),r=JSON.parse(n);return typeof r.version==`string`?r.version:null}catch{return null}}function QM(e,t){return`installed pyodide ${e} is not the supported version ${t}: run \`ipk uninstall pyodide\` then \`ipk add pyodide@${t}\``}function $M(){return{stdout:`usage: python3 [-c code | script.py] [args...]
1915
+ `,stderr:``,exitCode:0}}function eN(){return{stdout:`Python 3.14 (Pyodide)
1916
+ `,stderr:``,exitCode:0}}async function tN(e,t,n){if(t[0]===`-c`){if(!t[1])return{kind:`result`,result:{stdout:``,stderr:`${e}: option requires an argument -- 'c'\n`,exitCode:2}};let n=t[1];return{kind:`ok`,code:n,filename:`-c`,sysArgv:[`-c`,...t.slice(2)],procArgv:[e,`-c`,n,...t.slice(2)]}}if(t.length>0&&!t[0].startsWith(`-`)){let r=t[0],i=n.fs.resolvePath(n.cwd,r);return await n.fs.exists(i)?{kind:`ok`,code:await n.fs.readFile(i),filename:r,sysArgv:[r,...t.slice(1)],procArgv:[e,r,...t.slice(1)]}:{kind:`result`,result:{stdout:``,stderr:`${e}: can't open file '${r}': [Errno 2] No such file or directory\n`,exitCode:2}}}return P(n.stdin).trim().length>0?{kind:`ok`,code:P(n.stdin),filename:`<stdin>`,sysArgv:[`<stdin>`],procArgv:[e]}:t.length>0?{kind:`result`,result:{stdout:``,stderr:`${e}: unsupported option '${t[0]}'\n`,exitCode:2}}:{kind:`result`,result:{stdout:``,stderr:`${e}: no input provided (use -c CODE, script path, or stdin)\n`,exitCode:2}}}async function nN(e){let t=XM(e),n=await Tr(t);if(!n)return{kind:`result`,result:{stdout:``,stderr:`${wr}\n`,exitCode:1}};let r=await ZM(t.reader,n);return r?r===mr?{kind:`ok`,assetRoot:n}:{kind:`result`,result:{stdout:``,stderr:`${QM(r,mr)}\n`,exitCode:1}}:{kind:`result`,result:{stdout:``,stderr:`${wr}\n`,exitCode:1}}}const rN=new Set(`EsSuBIPqObdR`);function iN(e){let t=0;for(;t<e.length&&/^-[A-Za-z]+$/.test(e[t]);){let n=e[t].slice(1);if(n===`W`||n===`X`){t+=2;continue}if(![...n].every(e=>rN.has(e)))break;t++}return t===0?e:e.slice(t)}function aN(e,t={}){return S(e,async(n,r)=>{let i=iN(n),a=i[0];if(a===`--help`||a===`-h`)return $M();if(a===`--version`||a===`-V`)return eN();let o=await tN(e,i,r);if(o.kind===`result`)return o.result;let{code:s,filename:c,sysArgv:l,procArgv:u}=o,d=await qM(r.fs),f=JM(r.fs,d),p=t.buildProcessConfig?.(r.env),m=p?.processManager??oN(),h=p?.owner??{kind:`system`},g=p?.getParentPid?.(),_=t.realmFactory??Mr(),v=t.pyodideIndexURL??Kr(),ee=t.pyodideAssetRoot;if(!ee&&v===void 0){let e=await nN(r);if(e.kind===`result`)return e.result;ee=e.assetRoot}let te=c===`<stdin>`?``:P(r.stdin),ne=YM();return m?Hr({pm:m,realmFactory:_,owner:h,kind:`py`,code:s,argv:u,realmArgv:l,env:Object.fromEntries(r.env.entries()),cwd:r.cwd,filename:c,ctx:r,stdin:te,pyodideIndexURL:v,pyodideAssetRoot:ee,pyodideMountDirs:d,opfsMountDbName:ne,mountPoints:f,procKind:`py`,ppid:g,syncFsBridgeEnabled:jr()}):cN({realmFactory:_,owner:h,code:s,argv:u,realmArgv:l,env:Object.fromEntries(r.env.entries()),cwd:r.cwd,filename:c,ctx:r,stdin:te,pyodideIndexURL:v,pyodideAssetRoot:ee,pyodideMountDirs:d,opfsMountDbName:ne,mountPoints:f})})}function oN(){let e=globalThis.__slicc_pm;return e&&typeof e==`object`&&typeof e.spawn==`function`&&typeof e.onSignal==`function`?e:null}let sN=null;async function cN(e){if(!sN){let{ProcessManager:e}=await import(`./process-manager-BkhAohXT.js`).then(e=>e.n);sN=new e}return Hr({pm:sN,realmFactory:e.realmFactory,owner:e.owner,kind:`py`,code:e.code,argv:e.argv,realmArgv:e.realmArgv,env:e.env,cwd:e.cwd,filename:e.filename,ctx:e.ctx,stdin:e.stdin,pyodideIndexURL:e.pyodideIndexURL,pyodideAssetRoot:e.pyodideAssetRoot,pyodideMountDirs:e.pyodideMountDirs,mountPoints:e.mountPoints,opfsMountDbName:e.opfsMountDbName,procKind:`py`,syncFsBridgeEnabled:jr()})}function lN(){return S(`rg`,async(e,t)=>{let{runRg:n}=await import(`./run-DniTiLYn.js`);return n(e,t)})}function uN(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 dN(){return null}function fN(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=pN(r),o=pN(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 pN(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 mN(){return{stdout:`rsync — sync files between local VFS and a remote tray runtime
1917
1917
 
1918
1918
  Usage:
1919
1919
  rsync [flags] <local-path> <runtime-id>:<remote-path> # push
@@ -1929,21 +1929,21 @@ Examples:
1929
1929
  rsync /workspace follower-abc123:/workspace
1930
1930
  rsync --delete /shared leader:/shared
1931
1931
  rsync follower-abc123:/workspace/project /workspace/project
1932
- `,stderr:``,exitCode:0}}async function gN(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 _N(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 vN(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 yN(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 bN(e){let t=e.lastIndexOf(`/`);return t<=0?`/`:e.slice(0,t)}async function xN(e,n,r){let i=[],{localPath:a,remotePath:o,runtimeId:s,verbose:c,dryRun:l}=r,u=dN(await gN(e,a),await _N(n,s,o),{delete:r.delete});if(c||l){for(let e of u.toAdd)i.push(`+ ${e}`);for(let e of u.toUpdate)i.push(`~ ${e}`);for(let e of u.toDelete)i.push(`- ${e}`);if(c)for(let e of u.toSkip)i.push(` ${e} (up to date)`)}let d=u.toAdd.length+u.toUpdate.length+u.toDelete.length;if(l)return i.push(`\n(dry run) ${d} file(s) would be transferred, ${u.toSkip.length} up to date`),{stdout:i.join(`
1932
+ `,stderr:``,exitCode:0}}async function hN(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 gN(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 _N(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 vN(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 yN(e){let t=e.lastIndexOf(`/`);return t<=0?`/`:e.slice(0,t)}async function bN(e,n,r){let i=[],{localPath:a,remotePath:o,runtimeId:s,verbose:c,dryRun:l}=r,u=uN(await hN(e,a),await gN(n,s,o),{delete:r.delete});if(c||l){for(let e of u.toAdd)i.push(`+ ${e}`);for(let e of u.toUpdate)i.push(`~ ${e}`);for(let e of u.toDelete)i.push(`- ${e}`);if(c)for(let e of u.toSkip)i.push(` ${e} (up to date)`)}let d=u.toAdd.length+u.toUpdate.length+u.toDelete.length;if(l)return i.push(`\n(dry run) ${d} file(s) would be transferred, ${u.toSkip.length} up to date`),{stdout:i.join(`
1933
1933
  `)+`
1934
- `,stderr:``,exitCode:0};for(let r of[...u.toAdd,...u.toUpdate]){let c=a+`/`+r,l=o+`/`+r;await yN(n,s,bN(l));let u=await e.readFile(c,{encoding:`binary`}),d=await n(s,{op:`writeFile`,path:l,content:t(u),encoding:`base64`});if(!d[0].ok)return{stdout:i.join(`
1934
+ `,stderr:``,exitCode:0};for(let r of[...u.toAdd,...u.toUpdate]){let c=a+`/`+r,l=o+`/`+r;await vN(n,s,yN(l));let u=await e.readFile(c,{encoding:`binary`}),d=await n(s,{op:`writeFile`,path:l,content:t(u),encoding:`base64`});if(!d[0].ok)return{stdout:i.join(`
1935
1935
  `)+`
1936
1936
  `,stderr:`Error writing ${l}: ${d[0].error}\n`,exitCode:1}}for(let e of u.toDelete){let t=o+`/`+e,r=await n(s,{op:`rm`,path:t});if(!r[0].ok)return{stdout:i.join(`
1937
1937
  `)+`
1938
1938
  `,stderr:`Error deleting ${t}: ${r[0].error}\n`,exitCode:1}}return i.push(`${d} file(s) transferred, ${u.toSkip.length} up to date`),{stdout:i.join(`
1939
1939
  `)+`
1940
- `,stderr:``,exitCode:0}}async function SN(e,t,r){let i=[],{localPath:a,remotePath:o,runtimeId:s,verbose:c,dryRun:l}=r,u=dN(await _N(t,s,o),await gN(e,a),{delete:r.delete});if(c||l){for(let e of u.toAdd)i.push(`+ ${e}`);for(let e of u.toUpdate)i.push(`~ ${e}`);for(let e of u.toDelete)i.push(`- ${e}`);if(c)for(let e of u.toSkip)i.push(` ${e} (up to date)`)}let d=u.toAdd.length+u.toUpdate.length+u.toDelete.length;if(l)return i.push(`\n(dry run) ${d} file(s) would be transferred, ${u.toSkip.length} up to date`),{stdout:i.join(`
1940
+ `,stderr:``,exitCode:0}}async function xN(e,t,r){let i=[],{localPath:a,remotePath:o,runtimeId:s,verbose:c,dryRun:l}=r,u=uN(await gN(t,s,o),await hN(e,a),{delete:r.delete});if(c||l){for(let e of u.toAdd)i.push(`+ ${e}`);for(let e of u.toUpdate)i.push(`~ ${e}`);for(let e of u.toDelete)i.push(`- ${e}`);if(c)for(let e of u.toSkip)i.push(` ${e} (up to date)`)}let d=u.toAdd.length+u.toUpdate.length+u.toDelete.length;if(l)return i.push(`\n(dry run) ${d} file(s) would be transferred, ${u.toSkip.length} up to date`),{stdout:i.join(`
1941
1941
  `)+`
1942
- `,stderr:``,exitCode:0};for(let r of[...u.toAdd,...u.toUpdate]){let i=o+`/`+r,c=a+`/`+r,l=bN(c);await e.exists(l)||await e.mkdir(l,{recursive:!0});let u=await vN(t,s,i),d=n(u);await e.writeFile(c,d)}for(let t of u.toDelete){let n=a+`/`+t;await e.rm(n)}return i.push(`${d} file(s) transferred, ${u.toSkip.length} up to date`),{stdout:i.join(`
1942
+ `,stderr:``,exitCode:0};for(let r of[...u.toAdd,...u.toUpdate]){let i=o+`/`+r,c=a+`/`+r,l=yN(c);await e.exists(l)||await e.mkdir(l,{recursive:!0});let u=await _N(t,s,i),d=n(u);await e.writeFile(c,d)}for(let t of u.toDelete){let n=a+`/`+t;await e.rm(n)}return i.push(`${d} file(s) transferred, ${u.toSkip.length} up to date`),{stdout:i.join(`
1943
1943
  `)+`
1944
- `,stderr:``,exitCode:0}}function CN(e={}){let t=e.fs,n=e.getSendFsRequest??fN;return S(`rsync`,async e=>{if(e.includes(`--help`)||e.includes(`-h`)||e.length===0)return hN();if(!t)return{stdout:``,stderr:`rsync: no filesystem available
1944
+ `,stderr:``,exitCode:0}}function SN(e={}){let t=e.fs,n=e.getSendFsRequest??dN;return S(`rsync`,async e=>{if(e.includes(`--help`)||e.includes(`-h`)||e.length===0)return mN();if(!t)return{stdout:``,stderr:`rsync: no filesystem available
1945
1945
  `,exitCode:1};let r=n();if(!r)return{stdout:``,stderr:`rsync: not connected to a tray — rsync requires a tray connection
1946
- `,exitCode:1};let i=pN(e);if(`error`in i)return i.error===`__help__`?hN():{stdout:``,stderr:`rsync: ${i.error}\n`,exitCode:1};try{return i.direction===`push`?await xN(t,r,i):await SN(t,r,i)}catch(e){return{stdout:``,stderr:`rsync: ${e instanceof Error?e.message:String(e)}\n`,exitCode:1}}})}function wN(){return{stdout:`usage: say [-v voice] [-r rate] [-l lang] [-o file] [--list] <text>
1946
+ `,exitCode:1};let i=fN(e);if(`error`in i)return i.error===`__help__`?mN():{stdout:``,stderr:`rsync: ${i.error}\n`,exitCode:1};try{return i.direction===`push`?await bN(t,r,i):await xN(t,r,i)}catch(e){return{stdout:``,stderr:`rsync: ${e instanceof Error?e.message:String(e)}\n`,exitCode:1}}})}function CN(){return{stdout:`usage: say [-v voice] [-r rate] [-l lang] [-o file] [--list] <text>
1947
1947
  say --status | --warmup
1948
1948
 
1949
1949
  Speaks the given text. Uses on-device Kokoro voices when the model
@@ -1962,14 +1962,14 @@ Examples:
1962
1962
  [web speech] otherwise); kokoro voices lead when ready
1963
1963
  --status Show the on-device voice state (downloading/ready + ETA)
1964
1964
  --warmup Stage + start the on-device voice download in the background
1965
- `,stderr:``,exitCode:0}}function TN(e){switch(e.state){case`ready`:return`voice engine: ready
1965
+ `,stderr:``,exitCode:0}}function wN(e){switch(e.state){case`ready`:return`voice engine: ready
1966
1966
  `;case`failed`:return`voice engine: failed (re-run say --warmup to retry)
1967
1967
  `;case`idle`:return`voice engine: not downloaded (run say --warmup)
1968
- `;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 EN(e){return e instanceof Error?e.message:String(e)}let DN=!1,ON=null;function kN(){return DN?Promise.resolve(speechSynthesis.getVoices()):(ON||=new Promise(e=>{let t=speechSynthesis.getVoices();if(t.length>0){DN=!0,e(t);return}let n=()=>{DN=!0,speechSynthesis.removeEventListener(`voiceschanged`,n),e(speechSynthesis.getVoices())};speechSynthesis.addEventListener(`voiceschanged`,n),setTimeout(()=>{speechSynthesis.removeEventListener(`voiceschanged`,n),DN=!0,e(speechSynthesis.getVoices())},1e3)}),ON)}const AN={"-v":`a voice name`,"-r":`a rate value`,"-l":`a language tag`,"-o":`an output file path`,"--out":`an output file path`};function jN(e){return e!=null&&(!e.startsWith(`-`)||e===`-`)}function MN(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 NN(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 AN){let n=jN(r+1<e.length?e[r+1]:void 0)?e[++r]:null;if(n==null)return q(`${i} requires ${AN[i]}`);let a=MN(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 FN(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 kN()).map(e=>PN({name:e.name,lang:e.lang,onDevice:!1,default:e.default}));return{stdout:[...t,...n].join(`
1968
+ `;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 TN(e){return e instanceof Error?e.message:String(e)}let EN=!1,DN=null;function ON(){return EN?Promise.resolve(speechSynthesis.getVoices()):(DN||=new Promise(e=>{let t=speechSynthesis.getVoices();if(t.length>0){EN=!0,e(t);return}let n=()=>{EN=!0,speechSynthesis.removeEventListener(`voiceschanged`,n),e(speechSynthesis.getVoices())};speechSynthesis.addEventListener(`voiceschanged`,n),setTimeout(()=>{speechSynthesis.removeEventListener(`voiceschanged`,n),EN=!0,e(speechSynthesis.getVoices())},1e3)}),DN)}const kN={"-v":`a voice name`,"-r":`a rate value`,"-l":`a language tag`,"-o":`an output file path`,"--out":`an output file path`};function AN(e){return e!=null&&(!e.startsWith(`-`)||e===`-`)}function jN(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 MN(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 kN){let n=AN(r+1<e.length?e[r+1]:void 0)?e[++r]:null;if(n==null)return q(`${i} requires ${kN[i]}`);let a=jN(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 NN(e){let t=e.onDevice?`[kokoro]`:`[web speech]`;return`${e.name} (${e.lang}) ${t}${e.default?` [default]`:``}`}async function PN(e){if(e.local){let{kokoroVoicesIfReady:e}=await import(`./speech-page-realm-stub-C7EPKrHd.js`),t=e().map(e=>NN({name:e.id,lang:e.lang,onDevice:e.onDevice})),n=(await ON()).map(e=>NN({name:e.name,lang:e.lang,onDevice:!1,default:e.default}));return{stdout:[...t,...n].join(`
1969
1969
  `)+`
1970
- `,stderr:``,exitCode:0}}try{return{stdout:(await e.panelRpc.call(`list-voices`,void 0)).voices.map(e=>PN(e)).join(`
1970
+ `,stderr:``,exitCode:0}}try{return{stdout:(await e.panelRpc.call(`list-voices`,void 0)).voices.map(e=>NN(e)).join(`
1971
1971
  `)+`
1972
- `,stderr:``,exitCode:0}}catch(e){return q(EN(e))}}async function IN(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 kN()).map(e=>({name:e.name}));return[...n,...r]}async function LN(e,t){let n=(await IN(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 RN(e,t){try{if(e.local){let{kokoroStatus:e,kokoroWarmup:n}=await import(`./speech-page-realm-stub-C7EPKrHd.js`);return{stdout:TN(t?n():e()),stderr:``,exitCode:0}}return{stdout:TN(t?await e.panelRpc.call(`speak-warmup`,void 0):await e.panelRpc.call(`speak-status`,void 0)),stderr:``,exitCode:0}}catch(e){return q(EN(e))}}async function zN(e,t){return t.includes(`--list`)?FN(e):t.includes(`--status`)?RN(e,!1):t.includes(`--warmup`)?RN(e,!0):null}async function BN(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: ${EN(e)}`)}}async function VN(e,t){try{return await e.panelRpc.call(`speak-text`,t,{timeoutMs:3e5}),{stdout:``,stderr:``,exitCode:0}}catch(e){return q(EN(e))}}async function HN(e){let{synthesizeToWav:t}=await import(`./speech-page-realm-stub-C7EPKrHd.js`);try{return{bytes:await t(e)}}catch(e){return q(EN(e))}}async function UN(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(EN(e))}}async function WN(e,t){return e.local?HN(t):UN(e,t)}async function GN(e,t){let n=await WN(e,t);return`exitCode`in n?n:{...ri(n.bytes),stderr:``,exitCode:0}}async function KN(e,t,n,r){let i=await WN(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}: ${EN(e)}`)}return{stdout:`wrote ${Math.max(1,Math.round(i.bytes.byteLength/1024))} KB to ${a}\n`,stderr:``,exitCode:0}}async function qN(e,t,n){let r;if(n.voiceName){let{resolved:t,error:i}=await LN(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&&!xS(t)?GN(e,i):n.outFile?KN(e,t,n.outFile,i):e.local?BN(i):VN(e,i)}function JN(){return S(`say`,async(e,t)=>{if(e.includes(`--help`)||e.includes(`-h`))return wN();let n={local:typeof window<`u`&&typeof speechSynthesis<`u`,panelRpc:y()};if(!n.local&&!n.panelRpc)return q(`Web Speech API unavailable in this environment`);let r=await zN(n,e);if(r)return r;let i=NN(e);return`exitCode`in i?i:i.text?i.lang?qN(n,t,{...i,lang:i.lang}):q(`-l language tag is required`):wN()})}function YN(){return S(`screencapture`,async(e,t)=>{let{runScreencapture:n}=await import(`./screencapture-run-jNQom_As.js`);return n(e,t)})}function XN(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 ZN=1e4;async function QN(e,t,n){let r={method:e,headers:he({"Content-Type":`application/json`}),signal:AbortSignal.timeout(ZN)};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:$N(e)}}}}function $N(e){let t=e instanceof Error?e.name:``;return t===`TimeoutError`||t===`AbortError`?`no response from the secret store within ${ZN/1e3}s`:`secret store unreachable: ${e instanceof Error?e.message:String(e)}`}function eP(e,t){return`could not read ${e} secrets — ${t??`the bridge gave no reason`}`}function tP(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 nP(){return{async list(){let[e,t]=await Promise.all([QN(`GET`,``),QN(`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(eP(`saved`,oP(e.data)));if(t.ok)for(let e of t.data)n.push({name:e.name,domains:e.domains,persisted:!1});else r.push(eP(`session`,oP(t.data)));return{entries:n,warnings:r}},async getInfo(e){return tP(await this.list(),e)},async getMasked(e){let{ok:t,data:n}=await QN(`GET`,`/masked`);return t?n.find(t=>t.name===e)??null:null},async peek(e){let{ok:t,data:n}=await QN(`GET`,`/peek?name=${encodeURIComponent(e)}`);return t?n:null},async setSession(e,t,n){let{ok:r,data:i}=await QN(`POST`,`/session`,{name:e,value:t,domains:n});if(!r)throw Error(oP(i)??`failed to set session secret`)},async setPersisted(e,t,n){let{ok:r,data:i}=await QN(`POST`,``,{name:e,value:t,domains:n});if(!r)throw Error(oP(i)??`failed to persist secret`)},async setScope(e,t){let{ok:n,data:r}=await QN(`POST`,`/scope`,{name:e,domains:t});if(!n)throw Error(oP(r)??`failed to update scope`)},async delete(e){let{ok:t,status:n,data:r}=await QN(`DELETE`,`/${encodeURIComponent(e)}`);if(n===404)return{removed:!1};if(!t)throw Error(oP(r)??`failed to delete secret`);return{removed:!0,fromSession:r&&typeof r==`object`&&`fromSession`in r?!!r.fromSession:void 0}}}}function rP(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(eP(`saved`,e?.error)),n?.entries||i.push(eP(`session`,n?.error)),{entries:r,warnings:i}},async getInfo(e){return tP(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 iP(){return rP(e=>XN(e))}function aP(){return rP(e=>{let{type:t,...n}=e;return xe(t,n)})}function oP(e){if(e&&typeof e==`object`&&`error`in e){let t=e.error;if(typeof t==`string`)return t}}function sP(e){switch(e){case`extension-direct`:return iP();case`extension-delegate`:return aP();default:return nP()}}const cP=[`--domain`],lP=[`--persist`];function uP(){return`secret — manage secrets for the fetch proxy and mount backends
1972
+ `,stderr:``,exitCode:0}}catch(e){return q(TN(e))}}async function FN(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 ON()).map(e=>({name:e.name}));return[...n,...r]}async function IN(e,t){let n=(await FN(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 LN(e,t){try{if(e.local){let{kokoroStatus:e,kokoroWarmup:n}=await import(`./speech-page-realm-stub-C7EPKrHd.js`);return{stdout:wN(t?n():e()),stderr:``,exitCode:0}}return{stdout:wN(t?await e.panelRpc.call(`speak-warmup`,void 0):await e.panelRpc.call(`speak-status`,void 0)),stderr:``,exitCode:0}}catch(e){return q(TN(e))}}async function RN(e,t){return t.includes(`--list`)?PN(e):t.includes(`--status`)?LN(e,!1):t.includes(`--warmup`)?LN(e,!0):null}async function zN(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: ${TN(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(TN(e))}}async function VN(e){let{synthesizeToWav:t}=await import(`./speech-page-realm-stub-C7EPKrHd.js`);try{return{bytes:await t(e)}}catch(e){return q(TN(e))}}async function HN(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(TN(e))}}async function UN(e,t){return e.local?VN(t):HN(e,t)}async function WN(e,t){let n=await UN(e,t);return`exitCode`in n?n:{...ri(n.bytes),stderr:``,exitCode:0}}async function GN(e,t,n,r){let i=await UN(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}: ${TN(e)}`)}return{stdout:`wrote ${Math.max(1,Math.round(i.bytes.byteLength/1024))} KB to ${a}\n`,stderr:``,exitCode:0}}async function KN(e,t,n){let r;if(n.voiceName){let{resolved:t,error:i}=await IN(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&&!SS(t)?WN(e,i):n.outFile?GN(e,t,n.outFile,i):e.local?zN(i):BN(e,i)}function qN(){return S(`say`,async(e,t)=>{if(e.includes(`--help`)||e.includes(`-h`))return CN();let n={local:typeof window<`u`&&typeof speechSynthesis<`u`,panelRpc:y()};if(!n.local&&!n.panelRpc)return q(`Web Speech API unavailable in this environment`);let r=await RN(n,e);if(r)return r;let i=MN(e);return`exitCode`in i?i:i.text?i.lang?KN(n,t,{...i,lang:i.lang}):q(`-l language tag is required`):CN()})}function JN(){return S(`screencapture`,async(e,t)=>{let{runScreencapture:n}=await import(`./screencapture-run-jNQom_As.js`);return n(e,t)})}function YN(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 XN=1e4;async function ZN(e,t,n){let r={method:e,headers:he({"Content-Type":`application/json`}),signal:AbortSignal.timeout(XN)};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:QN(e)}}}}function QN(e){let t=e instanceof Error?e.name:``;return t===`TimeoutError`||t===`AbortError`?`no response from the secret store within ${XN/1e3}s`:`secret store unreachable: ${e instanceof Error?e.message:String(e)}`}function $N(e,t){return`could not read ${e} secrets — ${t??`the bridge gave no reason`}`}function eP(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 tP(){return{async list(){let[e,t]=await Promise.all([ZN(`GET`,``),ZN(`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($N(`saved`,aP(e.data)));if(t.ok)for(let e of t.data)n.push({name:e.name,domains:e.domains,persisted:!1});else r.push($N(`session`,aP(t.data)));return{entries:n,warnings:r}},async getInfo(e){return eP(await this.list(),e)},async getMasked(e){let{ok:t,data:n}=await ZN(`GET`,`/masked`);return t?n.find(t=>t.name===e)??null:null},async peek(e){let{ok:t,data:n}=await ZN(`GET`,`/peek?name=${encodeURIComponent(e)}`);return t?n:null},async setSession(e,t,n){let{ok:r,data:i}=await ZN(`POST`,`/session`,{name:e,value:t,domains:n});if(!r)throw Error(aP(i)??`failed to set session secret`)},async setPersisted(e,t,n){let{ok:r,data:i}=await ZN(`POST`,``,{name:e,value:t,domains:n});if(!r)throw Error(aP(i)??`failed to persist secret`)},async setScope(e,t){let{ok:n,data:r}=await ZN(`POST`,`/scope`,{name:e,domains:t});if(!n)throw Error(aP(r)??`failed to update scope`)},async delete(e){let{ok:t,status:n,data:r}=await ZN(`DELETE`,`/${encodeURIComponent(e)}`);if(n===404)return{removed:!1};if(!t)throw Error(aP(r)??`failed to delete secret`);return{removed:!0,fromSession:r&&typeof r==`object`&&`fromSession`in r?!!r.fromSession:void 0}}}}function nP(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($N(`saved`,e?.error)),n?.entries||i.push($N(`session`,n?.error)),{entries:r,warnings:i}},async getInfo(e){return eP(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 rP(){return nP(e=>YN(e))}function iP(){return nP(e=>{let{type:t,...n}=e;return xe(t,n)})}function aP(e){if(e&&typeof e==`object`&&`error`in e){let t=e.error;if(typeof t==`string`)return t}}function oP(e){switch(e){case`extension-direct`:return rP();case`extension-delegate`:return iP();default:return tP()}}const sP=[`--domain`],cP=[`--persist`];function lP(){return`secret — manage secrets for the fetch proxy and mount backends
1973
1973
 
1974
1974
  No approval (session-only, in-memory, never persisted):
1975
1975
  secret set <name> <value> --domain <pat> Set a session secret. Free for a
@@ -2006,23 +2006,23 @@ Examples:
2006
2006
  secret peek OPENAI_KEY
2007
2007
  secret set GITHUB_TOKEN ghp_… --domain "api.github.com" --persist # prompts
2008
2008
  secret scope GITHUB_TOKEN --domain "api.github.com,*.github.com" # prompts
2009
- `}function dP(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 fP(e){return{stdout:``,stderr:`secret: ${e}\n`,exitCode:1}}const pP={persist:`persist secret`,scope:`edit secret scope`,value:`change secret value`},mP=new Set;function hP(e,t){if(e===t)return!0;try{return ot(e).test(t)}catch{return!1}}function gP(e,t){for(let n of e)if(hP(n,t))return!0;return!1}function _P(e){return{stdout:``,stderr:`${lt(`secret`,e)}\n`,exitCode:1}}function vP(e){let t=_e(),n=e.isExtension??(t===`extension-direct`||t===`extension-delegate`),r=e.backend??sP(t),i=e.grants??mP,a=e.broker,o=()=>(a??=is(null),a);return{backend:r,inExtension:n,gate:async(e,t)=>{let n=`secret:${e}:${t}`;if(gP(i,n))return`ok`;let r=await o().requestApproval({kind:`secret`,detail:`${pP[e]}: ${t}`,suggestedPattern:n});if(r.decision===`deny`)return r;if(r.decision===`always`){let e=r.pattern?.trim();i.add(e&&hP(e,n)?e:n)}return`ok`},injectMaskedEnv:async t=>{if(e.setEnv&&hs(t))try{let n=await r.getMasked(t);n&&e.setEnv(t,n.maskedValue)}catch{}},clearMaskedEnv:t=>{e.unsetEnv&&hs(t)&&e.unsetEnv(t)}}}function yP(e){let t=P(e);if(t.length!==0)return t.endsWith(`\r
2009
+ `}function uP(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 dP(e){return{stdout:``,stderr:`secret: ${e}\n`,exitCode:1}}const fP={persist:`persist secret`,scope:`edit secret scope`,value:`change secret value`},pP=new Set;function mP(e,t){if(e===t)return!0;try{return ot(e).test(t)}catch{return!1}}function hP(e,t){for(let n of e)if(mP(n,t))return!0;return!1}function gP(e){return{stdout:``,stderr:`${lt(`secret`,e)}\n`,exitCode:1}}function _P(e){let t=_e(),n=e.isExtension??(t===`extension-direct`||t===`extension-delegate`),r=e.backend??oP(t),i=e.grants??pP,a=e.broker,o=()=>(a??=is(null),a);return{backend:r,inExtension:n,gate:async(e,t)=>{let n=`secret:${e}:${t}`;if(hP(i,n))return`ok`;let r=await o().requestApproval({kind:`secret`,detail:`${fP[e]}: ${t}`,suggestedPattern:n});if(r.decision===`deny`)return r;if(r.decision===`always`){let e=r.pattern?.trim();i.add(e&&mP(e,n)?e:n)}return`ok`},injectMaskedEnv:async t=>{if(e.setEnv&&hs(t))try{let n=await r.getMasked(t);n&&e.setEnv(t,n.maskedValue)}catch{}},clearMaskedEnv:t=>{e.unsetEnv&&hs(t)&&e.unsetEnv(t)}}}function vP(e){let t=P(e);if(t.length!==0)return t.endsWith(`\r
2010
2010
  `)?t.slice(0,-2):t.endsWith(`
2011
- `)?t.slice(0,-1):t}async function bP(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}):_P(i)}async function xP(e,t,n,r){if(await r.backend.getInfo(e)){let t=await r.gate(`value`,e);if(t!==`ok`)return _P(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 SP(e,t,n){let r=C(e.slice(1),{value:cP,bool:lP});if(`error`in r)return fP(r.error);let i=r.positionals[0];if(!i||i.startsWith(`-`))return{stdout:``,stderr:`secret: set requires a <name>
2012
- `,exitCode:1};let a=r.positionals[1],o=yP(t.stdin);if(a!==void 0&&o!==void 0)return{stdout:``,stderr:`secret: provide <value> as an argument OR via stdin, not both
2011
+ `)?t.slice(0,-1):t}async function yP(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}):gP(i)}async function bP(e,t,n,r){if(await r.backend.getInfo(e)){let t=await r.gate(`value`,e);if(t!==`ok`)return gP(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 xP(e,t,n){let r=C(e.slice(1),{value:sP,bool:cP});if(`error`in r)return dP(r.error);let i=r.positionals[0];if(!i||i.startsWith(`-`))return{stdout:``,stderr:`secret: set requires a <name>
2012
+ `,exitCode:1};let a=r.positionals[1],o=vP(t.stdin);if(a!==void 0&&o!==void 0)return{stdout:``,stderr:`secret: provide <value> as an argument OR via stdin, not both
2013
2013
  `,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]
2014
2014
  or pipe the value on stdin: echo "$TOKEN" | secret set <name> --domain <patterns>
2015
- `,exitCode:1};let c=dP(r.values.get(`--domain`));return c?r.bools.has(`--persist`)?bP(i,s,c,n):xP(i,s,c,n):{stdout:``,stderr:`secret: set requires --domain <patterns>
2016
- `,exitCode:1}}async function CP(e,t){let n=C(e.slice(1),{});if(`error`in n)return fP(n.error);let r=n.positionals[0];if(!r)return{stdout:``,stderr:`secret: get requires a <name>
2017
- `,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 wP(e,t){let n=C(e.slice(1),{});if(`error`in n)return fP(n.error);let r=n.positionals[0];if(!r)return{stdout:``,stderr:`secret: peek requires a <name>
2018
- `,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 TP(e,t){let n=C(e.slice(1),{value:cP});if(`error`in n)return fP(n.error);let r=n.positionals[0];if(!r||r.startsWith(`-`))return{stdout:``,stderr:`secret: scope requires a <name>
2019
- `,exitCode:1};let i=dP(n.values.get(`--domain`));if(!i)return{stdout:``,stderr:`secret: scope requires --domain <patterns>
2020
- `,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}):_P(a)}async function EP(e,t){let n=C(e.slice(1),{});if(`error`in n)return fP(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
2021
- `,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 DP(e,t,n){let r=C(e.slice(1),{});if(`error`in r)return fP(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 OP(e,t){let n=C(e.slice(1),{});if(`error`in n)return fP(n.error);let r=n.positionals[0],i=n.positionals[1];if(!r||!i)return{stdout:``,stderr:`secret: test requires <name> <url>
2022
- `,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?_a(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 kP(e,t){let n=C(e.slice(1),{});if(`error`in n)return fP(n.error);if(!t.inExtension)return{stdout:`secret: in CLI mode, edit ~/.slicc/secrets.env directly with your text editor.
2015
+ `,exitCode:1};let c=uP(r.values.get(`--domain`));return c?r.bools.has(`--persist`)?yP(i,s,c,n):bP(i,s,c,n):{stdout:``,stderr:`secret: set requires --domain <patterns>
2016
+ `,exitCode:1}}async function SP(e,t){let n=C(e.slice(1),{});if(`error`in n)return dP(n.error);let r=n.positionals[0];if(!r)return{stdout:``,stderr:`secret: get requires a <name>
2017
+ `,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 CP(e,t){let n=C(e.slice(1),{});if(`error`in n)return dP(n.error);let r=n.positionals[0];if(!r)return{stdout:``,stderr:`secret: peek requires a <name>
2018
+ `,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 wP(e,t){let n=C(e.slice(1),{value:sP});if(`error`in n)return dP(n.error);let r=n.positionals[0];if(!r||r.startsWith(`-`))return{stdout:``,stderr:`secret: scope requires a <name>
2019
+ `,exitCode:1};let i=uP(n.values.get(`--domain`));if(!i)return{stdout:``,stderr:`secret: scope requires --domain <patterns>
2020
+ `,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}):gP(a)}async function TP(e,t){let n=C(e.slice(1),{});if(`error`in n)return dP(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
2021
+ `,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 EP(e,t,n){let r=C(e.slice(1),{});if(`error`in r)return dP(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 DP(e,t){let n=C(e.slice(1),{});if(`error`in n)return dP(n.error);let r=n.positionals[0],i=n.positionals[1];if(!r||!i)return{stdout:``,stderr:`secret: test requires <name> <url>
2022
+ `,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?_a(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 OP(e,t){let n=C(e.slice(1),{});if(`error`in n)return dP(n.error);if(!t.inExtension)return{stdout:`secret: in CLI mode, edit ~/.slicc/secrets.env directly with your text editor.
2023
2023
  (changes are picked up on the next request — no restart needed)
2024
2024
  `,stderr:``,exitCode:0};try{return await chrome.runtime.openOptionsPage(),{stdout:`Opened Mount Secrets options page in a new tab.
2025
- `,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 AP(e,t,n){let r=e[0];switch(r){case`set`:return SP(e,t,n);case`get`:case`read`:return CP(e,n);case`peek`:return wP(e,n);case`scope`:return TP(e,n);case`list`:return EP(e,n);case`delete`:case`rm`:return DP(e,r,n);case`test`:return OP(e,n);case`edit`:return kP(e,n);default:return{stdout:``,stderr:`secret: unknown command "${r}"\n`,exitCode:1}}}function jP(e={}){let t=vP(e);return S(`secret`,async(e,n)=>{if(e.length===0||w(e,{valueFlags:cP}))return{stdout:uP(),stderr:``,exitCode:0};try{return await AP(e,n,t)}catch(e){return{stdout:``,stderr:`secret: ${e instanceof Error?e.message:String(e)}\n`,exitCode:1}}})}function MP(){return null}function NP(){return null}function PP(){return{stdout:`usage: serve [--entry <relative-path>] [--ttl <duration>] [--bridge | --no-bridge] [--max-tabs <n>] [--quiet] [--stop <token>] [--list] <directory>
2025
+ `,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 kP(e,t,n){let r=e[0];switch(r){case`set`:return xP(e,t,n);case`get`:case`read`:return SP(e,n);case`peek`:return CP(e,n);case`scope`:return wP(e,n);case`list`:return TP(e,n);case`delete`:case`rm`:return EP(e,r,n);case`test`:return DP(e,n);case`edit`:return OP(e,n);default:return{stdout:``,stderr:`secret: unknown command "${r}"\n`,exitCode:1}}}function AP(e={}){let t=_P(e);return S(`secret`,async(e,n)=>{if(e.length===0||w(e,{valueFlags:sP}))return{stdout:lP(),stderr:``,exitCode:0};try{return await kP(e,n,t)}catch(e){return{stdout:``,stderr:`secret: ${e instanceof Error?e.message:String(e)}\n`,exitCode:1}}})}function jP(){return null}function MP(){return null}function NP(){return{stdout:`usage: serve [--entry <relative-path>] [--ttl <duration>] [--bridge | --no-bridge] [--max-tabs <n>] [--quiet] [--stop <token>] [--list] <directory>
2026
2026
  serve --logs [<token>] [--lines <n>]
2027
2027
  serve --truncate [<token>]
2028
2028
 
@@ -2058,28 +2058,28 @@ Limits and lifetime:
2058
2058
  its TTL. Either can be removed sooner with \`serve --stop\`.
2059
2059
  - <token> is the "Preview token" printed at mint time or the TOKEN column
2060
2060
  of \`serve --list\`; \`--stop\` also accepts the preview URL.
2061
- `,stderr:``,exitCode:0}}function FP(e){return`error`in e}function IP(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
2062
- `}:(n.lines=i,{skip:+(e===`--lines`)})}}function LP(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
2061
+ `,stderr:``,exitCode:0}}function PP(e){return`error`in e}function FP(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
2062
+ `}:(n.lines=i,{skip:+(e===`--lines`)})}}function IP(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
2063
2063
  `};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)
2064
2064
  `};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.
2065
2065
  `}:(n.ttlMs=a,{skip:+(e===`--ttl`)}):{error:`serve: --ttl must be a positive whole duration (m, h, d, or w)
2066
- `}}function RP(e,t){let n={"--bridge":`bridge`,"--no-bridge":`noBridge`,"--project":`project`,"--quiet":`quiet`}[e];if(n)return t[n]=!0,{skip:0}}function zP(e,t,n){let r=LP(e,t,n);if(r)return r;let i=RP(e,n);if(i)return i;if(e===`--entry`)return t?(n.entry=t,{skip:1}):{error:`serve: missing value for --entry
2066
+ `}}function LP(e,t){let n={"--bridge":`bridge`,"--no-bridge":`noBridge`,"--project":`project`,"--quiet":`quiet`}[e];if(n)return t[n]=!0,{skip:0}}function RP(e,t,n){let r=IP(e,t,n);if(r)return r;let i=LP(e,n);if(i)return i;if(e===`--entry`)return t?(n.entry=t,{skip:1}):{error:`serve: missing value for --entry
2067
2067
  `};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
2068
- `};if(e.startsWith(`--stop=`))return n.stop=e.slice(7),{skip:0};let a=IP(e,t,n);if(a)return a;if(e===`--max-tabs`){if(!t)return{error:`serve: missing value for --max-tabs
2068
+ `};if(e.startsWith(`--stop=`))return n.stop=e.slice(7),{skip:0};let a=FP(e,t,n);if(a)return a;if(e===`--max-tabs`){if(!t)return{error:`serve: missing value for --max-tabs
2069
2069
  `};let e=Number.parseInt(t,10);return!Number.isFinite(e)||e<=0?{error:`serve: --max-tabs must be a positive integer
2070
2070
  `}:(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
2071
2071
  `}:(n.maxTabs=t,{skip:0})}return e.startsWith(`-`)?{error:`serve: unknown option: ${e}\n`}:n.directory?{error:`serve: expected a single directory argument
2072
- `}:(n.directory=e,{skip:0})}function BP(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=zP(e[n],e[n+1],t);if(FP(r))return{...t,error:r.error};n+=r.skip}return t}async function VP(e,t,n,r){if(!ir(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=dr(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 HP(e){return`exitCode`in e}async function UP(e){let t=ha(e)??e,n,r=NP();if(r)n=await r({type:`stop`,previewToken:t});else{let e=y();if(!e)return{stdout:``,stderr:"serve: no leader tray available. Enable multi-browser sync via `host enable` or the avatar popover.\n",exitCode:1};n=await e.call(`tray-revoke-preview`,{previewToken:t})}if(!n.revoked)return{stdout:``,stderr:`serve: preview token not found or already revoked
2073
- `,exitCode:1};if(n.webhookId){let e=await ty();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 WP(){let e=NP();if(e){let t=(await e({type:`list`})).previews??[];return t.length===0?{stdout:`No active previews
2074
- `,stderr:``,exitCode:0}:{stdout:KP(t),stderr:``,exitCode:0}}let t=y();if(!t)return{stdout:``,stderr:"serve: no leader tray available. Enable multi-browser sync via `host enable` or the avatar popover.\n",exitCode:1};let n=(await t.call(`tray-list-previews`,void 0)).previews??[];return n.length===0?{stdout:`No active previews
2075
- `,stderr:``,exitCode:0}:{stdout:KP(n),stderr:``,exitCode:0}}function GP(e){return e.mode===`persistent`?e.state===`pending`?`uploading`:`persistent`:`live`}function KP(e){return`Active previews:\n TOKEN MODE EXPIRES URL ROOT CREATED\n${e.map(e=>` ${e.previewToken} ${GP(e)} ${e.expiresAt??`-`} ${e.url} ${e.servedRoot} ${e.createdAt}\n`).join(``)}`}function qP(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 JP(e){let t,n=NP();if(n)t=(await n({type:`logs`,previewToken:e.previewToken})).lifecycleRecords??[];else{let n=y();if(!n)return{stdout:``,stderr:"serve --logs: no leader tray available. Enable multi-browser sync via `host enable` or the avatar popover.\n",exitCode:1};t=(await n.call(`tray-preview-logs`,{previewToken:e.previewToken})).lifecycleRecords}return e.lines!==void 0&&(t=t.slice(-e.lines)),t.length===0?{stdout:`No preview lifecycle records. The recorder is leader-memory-only and resets on leader restart.
2076
- `,stderr:``,exitCode:0}:{stdout:`Preview lifecycle records (oldest to newest):\n${t.map(qP).join(``)}`,stderr:``,exitCode:0}}async function YP(e){let t,n,r=NP();if(r){let i=await r({type:`truncate`,previewToken:e});t=i.cleared??0,n=i.rearmed??0}else{let r=y();if(!r)return{stdout:``,stderr:"serve --truncate: no leader tray available. Enable multi-browser sync via `host enable` or the avatar popover.\n",exitCode:1};let i=await r.call(`tray-preview-truncate`,{previewToken:e});t=i.cleared,n=i.rearmed}return{stdout:`Cleared ${t} preview lifecycle record${t===1?``:`s`}; re-armed ${n} preview announcement${n===1?``:`s`}.\n`,stderr:``,exitCode:0}}async function XP(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:Yn(s)})}return n}function ZP(e){return e().catch(e=>({stdout:``,stderr:`serve: ${e instanceof Error?e.message:String(e)}\n`,exitCode:1}))}async function QP(e){let t=MP();if(t)return t(e);let n=y();if(!n)throw Error("no leader tray available. Enable multi-browser sync via `host enable` or the avatar popover.");return e.ttlMs===void 0?n.call(`tray-open-preview`,e):n.call(`tray-open-preview`,e,{timeoutMs:6e5})}async function $P(e,t){if(t)return t.createPage(e);typeof window<`u`&&typeof window.open==`function`&&window.open(e,`_blank`,`noopener,noreferrer`)}async function eF(e,t){if(!e)return{ok:!0};let n=await ty();if(!n)return{ok:!1,result:{stdout:``,stderr:`${t}serve: --bridge requires an active lick manager\n`,exitCode:1}};try{return{ok:!0,webhookId:(await n.createWebhook(`preview-bridge`)).id}}catch(e){return{ok:!1,result:{stdout:``,stderr:`${t}serve: webhook creation failed: ${e instanceof Error?e.message:String(e)}\n`,exitCode:1}}}}async function tF(e,t,n,r,i,a,o){let s;try{s=await QP({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 ty();e&&await e.deleteWebhook(r).catch(()=>{})}return{stdout:``,stderr:`${i}serve: ${e instanceof Error?e.message:String(e)}\n`,exitCode:1}}let c=await $P(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 nF(e){if(e.stop){let t=e.stop;return ZP(()=>UP(t))}if(e.list)return ZP(()=>WP());if(e.logs&&e.truncate)return{stdout:``,stderr:`serve: --logs and --truncate are mutually exclusive
2072
+ `}:(n.directory=e,{skip:0})}function zP(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=RP(e[n],e[n+1],t);if(PP(r))return{...t,error:r.error};n+=r.skip}return t}async function BP(e,t,n,r){if(!ir(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=dr(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 VP(e){return`exitCode`in e}async function HP(e){let t=ha(e)??e,n,r=MP();if(r)n=await r({type:`stop`,previewToken:t});else{let e=y();if(!e)return{stdout:``,stderr:"serve: no leader tray available. Enable multi-browser sync via `host enable` or the avatar popover.\n",exitCode:1};n=await e.call(`tray-revoke-preview`,{previewToken:t})}if(!n.revoked)return{stdout:``,stderr:`serve: preview token not found or already revoked
2073
+ `,exitCode:1};if(n.webhookId){let e=await ty();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 UP(){let e=MP();if(e){let t=(await e({type:`list`})).previews??[];return t.length===0?{stdout:`No active previews
2074
+ `,stderr:``,exitCode:0}:{stdout:GP(t),stderr:``,exitCode:0}}let t=y();if(!t)return{stdout:``,stderr:"serve: no leader tray available. Enable multi-browser sync via `host enable` or the avatar popover.\n",exitCode:1};let n=(await t.call(`tray-list-previews`,void 0)).previews??[];return n.length===0?{stdout:`No active previews
2075
+ `,stderr:``,exitCode:0}:{stdout:GP(n),stderr:``,exitCode:0}}function WP(e){return e.mode===`persistent`?e.state===`pending`?`uploading`:`persistent`:`live`}function GP(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 KP(e){let t=e.announced?`announced`:`suppressed`,n=e.previewToken??`-`,r=e.lifecycle===`connected`?`origin=${e.origin??`-`} userAgent=${e.userAgent??`-`}`:`reason=${e.reason??`-`}`;return`${e.timestamp} ${e.lifecycle.padEnd(12)} ${t.padEnd(10)} preview=${n} conn=${e.connId} ${r}\n`}async function qP(e){let t,n=MP();if(n)t=(await n({type:`logs`,previewToken:e.previewToken})).lifecycleRecords??[];else{let n=y();if(!n)return{stdout:``,stderr:"serve --logs: no leader tray available. Enable multi-browser sync via `host enable` or the avatar popover.\n",exitCode:1};t=(await n.call(`tray-preview-logs`,{previewToken:e.previewToken})).lifecycleRecords}return e.lines!==void 0&&(t=t.slice(-e.lines)),t.length===0?{stdout:`No preview lifecycle records. The recorder is leader-memory-only and resets on leader restart.
2076
+ `,stderr:``,exitCode:0}:{stdout:`Preview lifecycle records (oldest to newest):\n${t.map(KP).join(``)}`,stderr:``,exitCode:0}}async function JP(e){let t,n,r=MP();if(r){let i=await r({type:`truncate`,previewToken:e});t=i.cleared??0,n=i.rearmed??0}else{let r=y();if(!r)return{stdout:``,stderr:"serve --truncate: no leader tray available. Enable multi-browser sync via `host enable` or the avatar popover.\n",exitCode:1};let i=await r.call(`tray-preview-truncate`,{previewToken:e});t=i.cleared,n=i.rearmed}return{stdout:`Cleared ${t} preview lifecycle record${t===1?``:`s`}; re-armed ${n} preview announcement${n===1?``:`s`}.\n`,stderr:``,exitCode:0}}async function YP(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:Yn(s)})}return n}function XP(e){return e().catch(e=>({stdout:``,stderr:`serve: ${e instanceof Error?e.message:String(e)}\n`,exitCode:1}))}async function ZP(e){let t=jP();if(t)return t(e);let n=y();if(!n)throw Error("no leader tray available. Enable multi-browser sync via `host enable` or the avatar popover.");return e.ttlMs===void 0?n.call(`tray-open-preview`,e):n.call(`tray-open-preview`,e,{timeoutMs:6e5})}async function QP(e,t){if(t)return t.createPage(e);typeof window<`u`&&typeof window.open==`function`&&window.open(e,`_blank`,`noopener,noreferrer`)}async function $P(e,t){if(!e)return{ok:!0};let n=await ty();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 eF(e,t,n,r,i,a,o){let s;try{s=await ZP({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 ty();e&&await e.deleteWebhook(r).catch(()=>{})}return{stdout:``,stderr:`${i}serve: ${e instanceof Error?e.message:String(e)}\n`,exitCode:1}}let c=await QP(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 tF(e){if(e.stop){let t=e.stop;return XP(()=>HP(t))}if(e.list)return XP(()=>UP());if(e.logs&&e.truncate)return{stdout:``,stderr:`serve: --logs and --truncate are mutually exclusive
2077
2077
  `,exitCode:1};if(e.lines!==void 0&&!e.logs)return{stdout:``,stderr:`serve: --lines requires --logs
2078
- `,exitCode:1};if(e.logs){let t=typeof e.logs==`string`?e.logs:void 0;return ZP(()=>JP({previewToken:t,lines:e.lines}))}if(e.truncate){let t=typeof e.truncate==`string`?e.truncate:void 0;return ZP(()=>YP(t))}}function rF(e){if(e.ttlMs!==void 0&&e.bridge)return{stdout:``,stderr:`serve: --ttl cannot be combined with --bridge
2078
+ `,exitCode:1};if(e.logs){let t=typeof e.logs==`string`?e.logs:void 0;return XP(()=>qP({previewToken:t,lines:e.lines}))}if(e.truncate){let t=typeof e.truncate==`string`?e.truncate:void 0;return XP(()=>JP(t))}}function nF(e){if(e.ttlMs!==void 0&&e.bridge)return{stdout:``,stderr:`serve: --ttl cannot be combined with --bridge
2079
2079
  `,exitCode:1};if(e.ttlMs!==void 0&&e.maxTabs!==void 0)return{stdout:``,stderr:`serve: --ttl cannot be combined with --max-tabs
2080
- `,exitCode:1}}async function iF(e,t,n){if(e.ttlMs!==void 0){if(!t)throw Error(`persistent snapshot filesystem unavailable`);return XP(t,n)}}async function aF(e,t,n,r){if(e.length===0||e.includes(`--help`)||e.includes(`-h`))return PP();let i=BP(e);if(i.error)return{stdout:``,stderr:i.error,exitCode:1};let a=await nF(i);if(a)return a;if(!i.directory)return PP();let o=rF(i);if(o)return o;let s=await VP(i.directory,i.entry,t.fs,t.cwd);if(HP(s))return s;let{fullDirectory:c,entryPath:l}=s,u;try{u=await iF(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)
2081
- `:``,f=await eF(!i.noBridge&&i.bridge,d);return f.ok?tF(i,c,l,f.webhookId,d,u,n):f.result}function oF(e,t){return S(`serve`,(n,r)=>aF(n,r,e,t))}const sF=`usage: session export [--id <id>] [--output <path>]
2082
- `;function cF(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 lF(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${sF}`};let n=r[e+1];if(!n||n.startsWith(`-`))return{ok:!1,stderr:`session export: --id requires a value\n${sF}`};t=n,e++}else if(i===`--output`){if(n!==null)return{ok:!1,stderr:`session export: duplicate flag --output\n${sF}`};let t=r[e+1];if(!t||t.startsWith(`-`))return{ok:!1,stderr:`session export: --output requires a path\n${sF}`};n=t,e++}else if(i.startsWith(`-`))return{ok:!1,stderr:`session export: unknown flag ${i}\n${sF}`};else return{ok:!1,stderr:`session export: unexpected argument ${JSON.stringify(i)}\n${sF}`}}return{ok:!0,args:{sessionId:t,outputPath:n}}}async function uF(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 Sa(`transfer-corrupt`);return r}async function dF(e,t){let n=lF(e);if(!n.ok)return{stdout:``,stderr:n.stderr,exitCode:1};let{sessionId:r,outputPath:i}=n.args;if(i!==null){let e=cF(i);if(!e.ok)return{stdout:``,stderr:`session export: --output ${e.reason}\n${sF}`,exitCode:1}}let a=r==null?{kind:`active`}:{kind:`frozen`,sessionId:r};try{let e=await cs().export(a,{}),n=await uF(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 Sa?e.code:e instanceof Error?e.message:String(e)}\n`,exitCode:1}}}function fF(){return S(`session`,async(e,t)=>{if(e[0]===`export`&&!w(e))return dF(e,t);let{dispatchSessionMemoryAware:n}=await import(`./session-command-memory-C5mfHghY.js`);return n(e,t,sF)})}function pF(){return S(`slicc`,async(e,t)=>{let{runSlicc:n}=await import(`./run-cvQKad0O.js`);return await n(e,t)})}const mF=`leader`;function hF(){try{let e=globalThis.localStorage?.getItem(`slicc.leaderSprinkleInstances`);if(e)return JSON.parse(e)}catch{}return[]}function gF(e){return+!!e.leader+e.followers.length}function _F(){return{stdout:`usage: sprinkle <subcommand> [args]
2080
+ `,exitCode:1}}async function rF(e,t,n){if(e.ttlMs!==void 0){if(!t)throw Error(`persistent snapshot filesystem unavailable`);return YP(t,n)}}async function iF(e,t,n,r){if(e.length===0||e.includes(`--help`)||e.includes(`-h`))return NP();let i=zP(e);if(i.error)return{stdout:``,stderr:i.error,exitCode:1};let a=await tF(i);if(a)return a;if(!i.directory)return NP();let o=nF(i);if(o)return o;let s=await BP(i.directory,i.entry,t.fs,t.cwd);if(VP(s))return s;let{fullDirectory:c,entryPath:l}=s,u;try{u=await rF(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)
2081
+ `:``,f=await $P(!i.noBridge&&i.bridge,d);return f.ok?eF(i,c,l,f.webhookId,d,u,n):f.result}function aF(e,t){return S(`serve`,(n,r)=>iF(n,r,e,t))}const oF=`usage: session export [--id <id>] [--output <path>]
2082
+ `;function sF(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 cF(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${oF}`};let n=r[e+1];if(!n||n.startsWith(`-`))return{ok:!1,stderr:`session export: --id requires a value\n${oF}`};t=n,e++}else if(i===`--output`){if(n!==null)return{ok:!1,stderr:`session export: duplicate flag --output\n${oF}`};let t=r[e+1];if(!t||t.startsWith(`-`))return{ok:!1,stderr:`session export: --output requires a path\n${oF}`};n=t,e++}else if(i.startsWith(`-`))return{ok:!1,stderr:`session export: unknown flag ${i}\n${oF}`};else return{ok:!1,stderr:`session export: unexpected argument ${JSON.stringify(i)}\n${oF}`}}return{ok:!0,args:{sessionId:t,outputPath:n}}}async function lF(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 Sa(`transfer-corrupt`);return r}async function uF(e,t){let n=cF(e);if(!n.ok)return{stdout:``,stderr:n.stderr,exitCode:1};let{sessionId:r,outputPath:i}=n.args;if(i!==null){let e=sF(i);if(!e.ok)return{stdout:``,stderr:`session export: --output ${e.reason}\n${oF}`,exitCode:1}}let a=r==null?{kind:`active`}:{kind:`frozen`,sessionId:r};try{let e=await cs().export(a,{}),n=await lF(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 Sa?e.code:e instanceof Error?e.message:String(e)}\n`,exitCode:1}}}function dF(){return S(`session`,async(e,t)=>{if(e[0]===`export`&&!w(e))return uF(e,t);let{dispatchSessionMemoryAware:n}=await import(`./session-command-memory-C3rtK1Zp.js`);return n(e,t,oF)})}function fF(){return S(`slicc`,async(e,t)=>{let{runSlicc:n}=await import(`./run-cvQKad0O.js`);return await n(e,t)})}const pF=`leader`;function mF(){try{let e=globalThis.localStorage?.getItem(`slicc.leaderSprinkleInstances`);if(e)return JSON.parse(e)}catch{}return[]}function hF(e){return+!!e.leader+e.followers.length}function gF(){return{stdout:`usage: sprinkle <subcommand> [args]
2083
2083
 
2084
2084
  list [--runtime <id>] List sprinkles + an instance line per runtime
2085
2085
  open <name> Open a sprinkle by name
@@ -2097,22 +2097,22 @@ Limits and lifetime:
2097
2097
  chat <html> Show inline HTML in chat (Tool UI)
2098
2098
  Use data-action="name" on buttons for callbacks
2099
2099
  Pipe HTML: echo "<div>...</div>" | sprinkle chat
2100
- `,stderr:``,exitCode:0}}function vF(){return globalThis.__slicc_sprinkleManager??null}function J(e,t){return{stdout:``,stderr:`sprinkle ${e}: ${t}\n`,exitCode:1}}function yF(){return[mF,...te().map(e=>e.runtimeId)]}function bF(e){return`unknown runtime "${e}"\nknown runtimes: ${yF().join(`, `)}\nRun \`host\` to see connected followers.`}async function xF(e,t){let n=e.slice(1).join(` `);if(!n){let e=P(t.stdin);e&&(n=e)}if(!n)return{stdout:``,stderr:`sprinkle chat: HTML content required
2100
+ `,stderr:``,exitCode:0}}function _F(){return globalThis.__slicc_sprinkleManager??null}function J(e,t){return{stdout:``,stderr:`sprinkle ${e}: ${t}\n`,exitCode:1}}function vF(){return[pF,...te().map(e=>e.runtimeId)]}function yF(e){return`unknown runtime "${e}"\nknown runtimes: ${vF().join(`, `)}\nRun \`host\` to see connected followers.`}async function bF(e,t){let n=e.slice(1).join(` `);if(!n){let e=P(t.stdin);e&&(n=e)}if(!n)return{stdout:``,stderr:`sprinkle chat: HTML content required
2101
2101
  `,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
2102
2102
  `,exitCode:1}:{stdout:JSON.stringify(r)+`
2103
- `,stderr:``,exitCode:0}}function SF(e){return e.map(e=>{let t=e.runtime?` (${e.runtime})`:``;return` instance: ${e.runtimeId}${t}`})}function CF(e){return[...e.map(e=>({name:e,runtimeId:mF})),...hF()]}async function wF(e,t){let n=C(t.slice(1),{value:[`--runtime`]});if(`error`in n)return J(`list`,n.error);let r=n.values.get(`--runtime`);if(r!==void 0&&!yF().includes(r))return J(`list`,bF(r));await e.refresh();let i=e.available();if(i.length===0)return{stdout:`No .shtml sprinkles found.
2104
- `,stderr:``,exitCode:0};let a=new Set(e.opened()),o=CF([...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(...SF(t))}return s.length===0?{stdout:`No sprinkles are open on runtime "${r}".\n`,stderr:``,exitCode:0}:{stdout:s.join(`
2103
+ `,stderr:``,exitCode:0}}function xF(e){return e.map(e=>{let t=e.runtime?` (${e.runtime})`:``;return` instance: ${e.runtimeId}${t}`})}function SF(e){return[...e.map(e=>({name:e,runtimeId:pF})),...mF()]}async function CF(e,t){let n=C(t.slice(1),{value:[`--runtime`]});if(`error`in n)return J(`list`,n.error);let r=n.values.get(`--runtime`);if(r!==void 0&&!vF().includes(r))return J(`list`,yF(r));await e.refresh();let i=e.available();if(i.length===0)return{stdout:`No .shtml sprinkles found.
2104
+ `,stderr:``,exitCode:0};let a=new Set(e.opened()),o=SF([...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(...xF(t))}return s.length===0?{stdout:`No sprinkles are open on runtime "${r}".\n`,stderr:``,exitCode:0}:{stdout:s.join(`
2105
2105
  `)+`
2106
- `,stderr:``,exitCode:0}}function TF(e,t){return!t||Do(e)?null:(Oo(e,t),Do(e)===t?t:null)}async function EF(e,t,n){let r=C(t.slice(1),{});if(`error`in r)return J(`open`,r.error);let i=r.positionals[0];if(!i)return J(`open`,`name required`);let a=zi(void 0,n),o=TF(i,a);try{a?await e.open(i,void 0,{lickOriginTarget:a}):await e.open(i)}catch(e){return o&&ko(i),J(`open`,e instanceof Error?e.message:String(e))}return{stdout:`Sprinkle "${i}" opened${o?`; licks route to "${o}"`:``}.\n`,stderr:``,exitCode:0}}function DF(e,t){let n=C(t.slice(1),{});if(`error`in n)return J(`close`,n.error);let r=n.positionals[0];return r?(e.close(r),{stdout:`Sprinkle "${r}" closed.\n`,stderr:``,exitCode:0}):J(`close`,`name required`)}async function OF(e,t){let n=C(t.slice(1),{});if(`error`in n)return J(`reload`,n.error);let r=n.positionals[0];if(!r)return J(`reload`,`name required`);try{return await e.reload(r),{stdout:`Sprinkle "${r}" reloaded.\n`,stderr:``,exitCode:0}}catch(e){return J(`reload`,e instanceof Error?e.message:String(e))}}async function kF(e,t){let n=C(t.slice(1),{});if(`error`in n)return J(`refresh`,n.error);await e.refresh();let r=e.available().length;return{stdout:`Found ${r} sprinkle${r===1?``:`s`}.\n`,stderr:``,exitCode:0}}function AF(e){let t=C(e.slice(1),{value:[`--scoop`],bool:[`--clear`]});if(`error`in t)return J(`route`,t.error);let n=t.positionals[0];if(!n){let e=Ao(),t=Object.entries(e);return t.length===0?{stdout:`No sprinkle routes configured (all licks go to cone).
2106
+ `,stderr:``,exitCode:0}}function wF(e,t){return!t||Do(e)?null:(Oo(e,t),Do(e)===t?t:null)}async function TF(e,t,n){let r=C(t.slice(1),{});if(`error`in r)return J(`open`,r.error);let i=r.positionals[0];if(!i)return J(`open`,`name required`);let a=zi(void 0,n),o=wF(i,a);try{a?await e.open(i,void 0,{lickOriginTarget:a}):await e.open(i)}catch(e){return o&&ko(i),J(`open`,e instanceof Error?e.message:String(e))}return{stdout:`Sprinkle "${i}" opened${o?`; licks route to "${o}"`:``}.\n`,stderr:``,exitCode:0}}function EF(e,t){let n=C(t.slice(1),{});if(`error`in n)return J(`close`,n.error);let r=n.positionals[0];return r?(e.close(r),{stdout:`Sprinkle "${r}" closed.\n`,stderr:``,exitCode:0}):J(`close`,`name required`)}async function DF(e,t){let n=C(t.slice(1),{});if(`error`in n)return J(`reload`,n.error);let r=n.positionals[0];if(!r)return J(`reload`,`name required`);try{return await e.reload(r),{stdout:`Sprinkle "${r}" reloaded.\n`,stderr:``,exitCode:0}}catch(e){return J(`reload`,e instanceof Error?e.message:String(e))}}async function OF(e,t){let n=C(t.slice(1),{});if(`error`in n)return J(`refresh`,n.error);await e.refresh();let r=e.available().length;return{stdout:`Found ${r} sprinkle${r===1?``:`s`}.\n`,stderr:``,exitCode:0}}function kF(e){let t=C(e.slice(1),{value:[`--scoop`],bool:[`--clear`]});if(`error`in t)return J(`route`,t.error);let n=t.positionals[0];if(!n){let e=Ao(),t=Object.entries(e);return t.length===0?{stdout:`No sprinkle routes configured (all licks go to cone).
2107
2107
  `,stderr:``,exitCode:0}:{stdout:`Sprinkle routes (applied to every runtime — the leader resolves the
2108
2108
  route for follower-forwarded licks too):
2109
2109
  `+t.map(([e,t])=>` ${e} -> ${t}`).join(`
2110
2110
  `)+`
2111
- `,stderr:``,exitCode:0}}if(t.bools.has(`--clear`))return ko(n),{stdout:`Route cleared for sprinkle "${n}" (licks will go to cone).\n`,stderr:``,exitCode:0};let r=t.values.get(`--scoop`);if(!r){let e=Do(n);return e?{stdout:`${n} -> ${e}\n`,stderr:``,exitCode:0}:{stdout:`${n} -> cone (default)\n`,stderr:``,exitCode:0}}return Oo(n,r),{stdout:`Sprinkle "${n}" lick events will route to scoop "${r}".\n`,stderr:``,exitCode:0}}function jF(e){let t=[];return e.leader&&t.push(mF),t.push(...e.followers),t.join(`, `)}async function MF(e,t){let n=C(t.slice(1),{value:[`--runtime`]});if(`error`in n)return J(`send`,n.error);let r=n.positionals[0];if(!r)return J(`send`,`name required`);let i=n.positionals.slice(1).join(` `);if(!i)return J(`send`,`JSON data required`);let a;try{a=JSON.parse(i)}catch{return J(`send`,`invalid JSON`)}let o=n.values.get(`--runtime`);if(o!==void 0&&!yF().includes(o))return J(`send`,bF(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`,bF(s.unknownRuntime));let c=gF(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`} (${jF(s)}).\n`,stderr:``,exitCode:0}}function NF(){return S(`sprinkle`,async(e,t)=>{if(e.length===0||e[0]===`--help`||e[0]===`-h`)return _F();let n=e[0];if(w(e.slice(1),{valueFlags:[`--scoop`,`--runtime`]}))return{stdout:et(`sprinkle`,n,_F().stdout),stderr:``,exitCode:0};if(n===`chat`)return xF($e(e),t);let r=vF();if(!r)return{stdout:``,stderr:`sprinkle: sprinkle manager not initialized
2112
- `,exitCode:1};switch(n){case`list`:return wF(r,e);case`open`:return EF(r,e,t.env);case`close`:return DF(r,e);case`reload`:return OF(r,e);case`refresh`:return kF(r,e);case`route`:return AF(e);case`send`:return MF(r,e);default:return{stdout:``,stderr:`sprinkle: unknown subcommand "${n}"\n`,exitCode:1}}})}function PF(){return{stdout:`usage: sqlite3 [database] [sql]
2113
- `,stderr:``,exitCode:0}}function FF(e,t){let n=e.length>0&&!e[0].startsWith(`-`);return{database:n?e[0]:`:memory:`,sql:(n?e.slice(1):e).join(` `).trim()||P(t.stdin).trim()}}function IF(e,t){return e===`:memory:`?e:t.fs.resolvePath(t.cwd,e)}async function LF(e,t,n){return t===`:memory:`||!await n.fs.exists(t)?new e.Database:new e.Database(await n.fs.readFileBuffer(t))}async function RF(e,t,n){t!==`:memory:`&&await n.fs.writeFile(t,e.export())}function zF(e){let t=e.flatMap(e=>e.values.map(e=>e.map(rr).join(`|`)));return t.length>0?`${t.join(`
2114
- `)}\n`:``}async function BF(e,t,n){let r=await ur(),i=IF(e,n),a=await LF(r,i,n),o=a.exec(t);return await RF(a,i,n),a.close(),zF(o)}function VF(e,t){return{stdout:``,stderr:`${e}: ${t instanceof Error?t.message:String(t)}\n`,exitCode:1}}function HF(e=`sqlite3`){return S(e,async(t,n)=>{if(t.includes(`--help`)||t.includes(`-h`))return PF();let{database:r,sql:i}=FF(t,n);if(!i)return VF(e,`interactive mode is not supported; provide SQL as argument or stdin`);try{return{stdout:await BF(r,i,n),stderr:``,exitCode:0}}catch(t){return VF(e,t)}})}function UF(e){return{stdout:``,stderr:e.endsWith(`
2115
- `)?e:`${e}\n`,exitCode:1}}function WF(){return{stdout:`ssh - run a command on a connected tray follower
2111
+ `,stderr:``,exitCode:0}}if(t.bools.has(`--clear`))return ko(n),{stdout:`Route cleared for sprinkle "${n}" (licks will go to cone).\n`,stderr:``,exitCode:0};let r=t.values.get(`--scoop`);if(!r){let e=Do(n);return e?{stdout:`${n} -> ${e}\n`,stderr:``,exitCode:0}:{stdout:`${n} -> cone (default)\n`,stderr:``,exitCode:0}}return Oo(n,r),{stdout:`Sprinkle "${n}" lick events will route to scoop "${r}".\n`,stderr:``,exitCode:0}}function AF(e){let t=[];return e.leader&&t.push(pF),t.push(...e.followers),t.join(`, `)}async function jF(e,t){let n=C(t.slice(1),{value:[`--runtime`]});if(`error`in n)return J(`send`,n.error);let r=n.positionals[0];if(!r)return J(`send`,`name required`);let i=n.positionals.slice(1).join(` `);if(!i)return J(`send`,`JSON data required`);let a;try{a=JSON.parse(i)}catch{return J(`send`,`invalid JSON`)}let o=n.values.get(`--runtime`);if(o!==void 0&&!vF().includes(o))return J(`send`,yF(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`,yF(s.unknownRuntime));let c=hF(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`} (${AF(s)}).\n`,stderr:``,exitCode:0}}function MF(){return S(`sprinkle`,async(e,t)=>{if(e.length===0||e[0]===`--help`||e[0]===`-h`)return gF();let n=e[0];if(w(e.slice(1),{valueFlags:[`--scoop`,`--runtime`]}))return{stdout:et(`sprinkle`,n,gF().stdout),stderr:``,exitCode:0};if(n===`chat`)return bF($e(e),t);let r=_F();if(!r)return{stdout:``,stderr:`sprinkle: sprinkle manager not initialized
2112
+ `,exitCode:1};switch(n){case`list`:return CF(r,e);case`open`:return TF(r,e,t.env);case`close`:return EF(r,e);case`reload`:return DF(r,e);case`refresh`:return OF(r,e);case`route`:return kF(e);case`send`:return jF(r,e);default:return{stdout:``,stderr:`sprinkle: unknown subcommand "${n}"\n`,exitCode:1}}})}function NF(){return{stdout:`usage: sqlite3 [database] [sql]
2113
+ `,stderr:``,exitCode:0}}function PF(e,t){let n=e.length>0&&!e[0].startsWith(`-`);return{database:n?e[0]:`:memory:`,sql:(n?e.slice(1):e).join(` `).trim()||P(t.stdin).trim()}}function FF(e,t){return e===`:memory:`?e:t.fs.resolvePath(t.cwd,e)}async function IF(e,t,n){return t===`:memory:`||!await n.fs.exists(t)?new e.Database:new e.Database(await n.fs.readFileBuffer(t))}async function LF(e,t,n){t!==`:memory:`&&await n.fs.writeFile(t,e.export())}function RF(e){let t=e.flatMap(e=>e.values.map(e=>e.map(rr).join(`|`)));return t.length>0?`${t.join(`
2114
+ `)}\n`:``}async function zF(e,t,n){let r=await ur(),i=FF(e,n),a=await IF(r,i,n),o=a.exec(t);return await LF(a,i,n),a.close(),RF(o)}function BF(e,t){return{stdout:``,stderr:`${e}: ${t instanceof Error?t.message:String(t)}\n`,exitCode:1}}function VF(e=`sqlite3`){return S(e,async(t,n)=>{if(t.includes(`--help`)||t.includes(`-h`))return NF();let{database:r,sql:i}=PF(t,n);if(!i)return BF(e,`interactive mode is not supported; provide SQL as argument or stdin`);try{return{stdout:await zF(r,i,n),stderr:``,exitCode:0}}catch(t){return BF(e,t)}})}function HF(e){return{stdout:``,stderr:e.endsWith(`
2115
+ `)?e:`${e}\n`,exitCode:1}}function UF(){return{stdout:`ssh - run a command on a connected tray follower
2116
2116
 
2117
2117
  Usage: ssh [--cwd <dir>] [--timeout <seconds>] <runtime-id> <command...>
2118
2118
  ssh --list
@@ -2135,11 +2135,11 @@ Examples:
2135
2135
  ssh --list
2136
2136
  ssh follower-abc123 "uname -a"
2137
2137
  ssh --cwd /tmp follower-abc123 "ls -la"
2138
- `,stderr:``,exitCode:0}}function GF(e){let t=e.filter(e=>e.exec);if(t.length===0)return`No exec-capable followers connected.
2138
+ `,stderr:``,exitCode:0}}function WF(e){let t=e.filter(e=>e.exec);if(t.length===0)return`No exec-capable followers connected.
2139
2139
  Start one with: slicc <join-url> follow sh -c
2140
2140
  `;let n=[`exec targets:`];for(let e of t){let t=[e.runtimeId];e.runtime&&t.push(`(${e.runtime})`),n.push(` - ${t.join(` `)}`),e.motd&&n.push(` ${e.motd}`),e.computerMotd&&n.push(` ${e.computerMotd}`)}return`${n.join(`
2141
- `)}\n`}function KF(e){if(e.stdin===void 0)return;let n=ti(e.stdin);if(n.length===0)return;let r=new Uint8Array(n.length);for(let e=0;e<n.length;e++)r[e]=n.charCodeAt(e)&255;return t(r)}function qF(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 JF(){return S(`ssh`,async(e,t)=>{let n=qF(e);if(`help`in n)return WF();if(`error`in n)return UF(n.error);if(n.list||n.runtimeId===void 0)return{stdout:GF(te()),stderr:``,exitCode:0};if(!n.command)return UF(`ssh: missing command
2142
- Usage: ssh <runtime-id> <command...>`);let r=y();if(!r)return UF(`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:KF(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 UF(`ssh: ${e instanceof Error?e.message:String(e)}`)}finally{t.signal?.removeEventListener(`abort`,a)}})}function YF(e){return{stdout:``,stderr:`${lt(`sudo`,e)}\n`,exitCode:77}}function XF(e={}){let{broker:t,persistGrant:n,suppressNextGate:r}=e;return S(`sudo`,async(e,i)=>{if(e.length===0)return{stdout:``,stderr:`sudo: usage: sudo <command> [args...]
2141
+ `)}\n`}function GF(e){if(e.stdin===void 0)return;let n=ti(e.stdin);if(n.length===0)return;let r=new Uint8Array(n.length);for(let e=0;e<n.length;e++)r[e]=n.charCodeAt(e)&255;return t(r)}function KF(e){let t=!1,n,r,i=0;for(;i<e.length;){let a=e[i];if(a===`--help`||a===`-h`)return{help:!0};if(a===`--list`||a===`-l`){t=!0,i+=1;continue}if(a===`--cwd`){let t=e[i+1];if(t===void 0)return{error:`ssh: --cwd requires a directory argument`};n=t,i+=2;continue}if(a===`--timeout`){let t=e[i+1],n=Number(t);if(t===void 0||!Number.isFinite(n)||n<=0)return{error:`ssh: --timeout requires a positive number of seconds`};r=n,i+=2;continue}if(a.startsWith(`-`)&&a!==`-`)return{error:`ssh: unknown flag: ${a}`};break}let a=e[i],o=e.slice(i+1).join(` `);return{list:t,cwd:n,timeoutSec:r,runtimeId:a,command:o}}function qF(){return S(`ssh`,async(e,t)=>{let n=KF(e);if(`help`in n)return UF();if(`error`in n)return HF(n.error);if(n.list||n.runtimeId===void 0)return{stdout:WF(te()),stderr:``,exitCode:0};if(!n.command)return HF(`ssh: missing command
2142
+ Usage: ssh <runtime-id> <command...>`);let r=y();if(!r)return HF(`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:GF(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 HF(`ssh: ${e instanceof Error?e.message:String(e)}`)}finally{t.signal?.removeEventListener(`abort`,a)}})}function JF(e){return{stdout:``,stderr:`${lt(`sudo`,e)}\n`,exitCode:77}}function YF(e={}){let{broker:t,persistGrant:n,suppressNextGate:r}=e;return S(`sudo`,async(e,i)=>{if(e.length===0)return{stdout:``,stderr:`sudo: usage: sudo <command> [args...]
2143
2143
  `,exitCode:1};if(e[0]===`--help`||e[0]===`-h`)return{stdout:`usage: sudo <command> [args...]
2144
2144
 
2145
2145
  Request human approval to run <command> with elevation. If approved, the
@@ -2156,14 +2156,14 @@ Options:
2156
2156
  -h, --help Show this help message and exit.
2157
2157
  `,stderr:``,exitCode:0};if(!t)return{stdout:``,stderr:`sudo: command-level approval is not configured
2158
2158
  `,exitCode:1};if(!i.exec)return{stdout:``,stderr:`sudo: cannot dispatch inner command in this context
2159
- `,exitCode:1};let a=Xp(e[0],e.slice(1)),o=i.env?.get(em),s=await t.requestApproval({kind:`command`,detail:a,...o?{reason:o}:{}});if(s.decision===`deny`)return YF(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 ZF(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 QF(e,t){return e.fs.lstat?e.fs.lstat(t):e.fs.stat(t)}function $F(e,t){return e.some(e=>/^-[^-]/.test(e)&&e.slice(1).includes(t))}async function eI(e,t,n){let r=e.fs.resolvePath(e.cwd,t);try{let i=await QF(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}': ${ZF(e)}\n`}}}function tI(){return S(`rm`,async(e,t)=>{let n={recursive:$F(e,`r`)||$F(e,`R`)||e.includes(`--recursive`),force:$F(e,`f`)||e.includes(`--force`),verbose:$F(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
2160
- `,exitCode:1};let i=await Promise.all(r.map(e=>eI(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 nI(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 rI(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 iI(e,t,n){try{let r=e.fs.resolvePath(e.cwd,t),i=n.follow?await e.fs.stat(r):await QF(e,r);return{stdout:n.format?`${nI(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 aI(){return S(`stat`,async(e,t)=>{let n=rI(e);if(n.paths.length===0)return{stdout:``,stderr:`stat: missing operand
2161
- `,exitCode:1};let r=await Promise.all(n.paths.map(e=>iI(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 oI(e){let t=e.replace(/\/+$/,``),n=t.lastIndexOf(`/`);return n<=0?`/`:t.slice(0,n)}async function sI(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 QF(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}': ${ZF(e)}\n`}}if(!n||s===i.length-1)return{stdout:o,stderr:``};a=oI(a)}return{stdout:o,stderr:``}}function cI(){return S(`rmdir`,async(e,t)=>{let n=e.some(e=>e===`-p`||e===`--parents`),r=e.some(e=>e===`-v`||e===`--verbose`),i=e.filter(e=>!e.startsWith(`-`));if(i.length===0)return{stdout:``,stderr:`rmdir: missing operand
2162
- `,exitCode:1};let a=await Promise.all(i.map(e=>sI(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 lI(){return{stdout:`usage: tar (-c|-x|-t) [-zv] -f <archive> [-C <dir>] [paths...]
2163
- `,stderr:``,exitCode:0}}function uI(e){return{stdout:``,stderr:`tar: ${e}\n`,exitCode:1}}function dI(e,t){if(e.mode)return uI(`exactly one of -c, -x, or -t is required`);e.mode=t}function fI(e,t,n){if(n)return[n,t];let r=e[t+1];return r===void 0?void 0:[r,t+1]}const pI={c:`create`,x:`extract`,t:`list`};function mI(e,t,n,r,i){let a=pI[e];if(a)return{nextIndex:r,error:dI(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:uI(`unsupported option -${e}`)};let o=fI(n,r,t);return o?(e===`f`?i.archive=o[0]:i.directory=o[0],{nextIndex:o[1],consumedValue:!0}):{nextIndex:r,error:uI(`option -${e} requires an argument`)}}function hI(e,t,n){let r=e[t];for(let i=1;i<r.length;i++){let a=mI(r[i],r.slice(i+1),e,t,n);if(a.error||a.consumedValue)return a}return{nextIndex:t}}const gI=/^[cxtzvfC]+$/;function _I(e){let t=e.length>0&&gI.test(e[0])?[`-${e[0]}`,...e.slice(1)]:e,n={gzip:!1,verbose:!1,directory:`.`,paths:[]};for(let e=0;e<t.length;e++){let r=t[e];if(!r.startsWith(`-`)||r===`-`){n.paths.push(r);continue}if(r.startsWith(`--`))return uI(`unsupported option ${r}`);let i=hI(t,e,n);if(i.error)return i.error;e=i.nextIndex}return n}function vI(e,t){let n=e.replace(/\\/g,`/`).replace(/^\/+/,``).replace(/^(?:\.\/)+/,``);return n?n===`.`?`.`:n.replace(/\/+$/,``):tr(t)}function yI(e){let t=e.mtime?.getTime();return t===void 0||Number.isNaN(t)?{}:{mtime:Math.floor(t/1e3)}}async function bI(e,t,n,r){let i=await e.fs.stat(t);if(i.isFile){let a=await e.fs.readFileBuffer(t),o=typeof i.mode==`number`?i.mode&511:void 0;r.push({path:n,bytes:a,...o===void 0?{}:{mode:o},...yI(i)});return}if(!i.isDirectory)throw Error(`unsupported file type: ${t}`);let a=n.endsWith(`/`)?n:`${n}/`,o=typeof i.mode==`number`?i.mode&511:void 0;r.push({path:a,bytes:new Uint8Array,directory:!0,...o===void 0?{}:{mode:o},...yI(i)});for(let n of await e.fs.readdir(t))await bI(e,er(t,n),`${a}${n}`,r)}function xI(e,t){let n=e.length>=2&&e[0]===31&&e[1]===139,r=t||n?Qi(e):e;return Zi(r,{stripNpmPrefix:!1,includeDirectories:!0,preserveRawPaths:!0})}function SI(e,t,n){let r=n.replace(/\\/g,`/`);if(!r||r.startsWith(`/`)||/^[a-zA-Z]:\//.test(r)||r.split(`/`).includes(`..`))return;let i=e.fs.resolvePath(t,r);return lr(t,i)?i:void 0}async function CI(e){try{await e()}catch(e){let t=e?.code;if(t===`ENOSYS`||t===`ENOTSUP`||t===`EOPNOTSUPP`)return;throw e}}async function wI(e,t,n,r){let i=new Map(t),a=new Map(n),o=[...new Set([...i.keys(),...a.keys()])];if(o.length===0)return;let s=o.map(e=>{let t=i.get(e),n=a.get(e),r=n===void 0?void 0:new Date(n*1e3);return{path:e,...t===void 0?{}:{mode:t},...r===void 0?{}:{atime:r,mtime:r}}});if(typeof r?.updateMetadataBatch==`function`){await CI(()=>r.updateMetadataBatch(s));return}let c=e.fs;if(typeof c.updateMetadataBatch==`function`){await CI(()=>c.updateMetadataBatch(s));return}for(let[e,n]of t)await CI(()=>c.chmod(e,n));for(let[e,t]of n){let n=new Date(t*1e3);await CI(()=>c.utimes(e,n,n))}}async function TI(e,t,n,r,i){let a=n.directory?493:420,o=n.mode===a&&await e.fs.exists(t),s=n.mode!==void 0&&(n.mode!==a||o);if(n.directory){await e.fs.mkdir(t,{recursive:!0}),s&&r.push([t,n.mode]);return}let c=or(t);c!==`/`&&await e.fs.mkdir(c,{recursive:!0}),await e.fs.writeFile(t,n.bytes),s&&i.push([t,n.mode])}async function EI(e,t){if(e.paths.length===0)return uI(`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 bI(t,e,vI(i,e),n)}let i=t.fs.resolvePath(t.cwd,e.archive),a=Yi(n);return await t.fs.writeFile(i,e.gzip?Xi(a):a),{stdout:e.verbose?`${n.map(e=>e.path).join(`
2164
- `)}\n`:``,stderr:``,exitCode:0}}function DI(e){let t=new Set,n=[];for(let r=e.length-1;r>=0;r--){let[i,a]=e[r];t.has(i)||(t.add(i),n.push([i,a]))}return n}async function OI(e,t,n){if(e.paths.length>0)return uI(`${e.mode} mode does not accept input paths`);let r=t.fs.resolvePath(t.cwd,e.archive),i=xI(await t.fs.readFileBuffer(r),e.gzip);if(e.mode===`list`){let e=i.map(e=>e.path).join(`
2165
- `);return{stdout:e?`${e}\n`:``,stderr:``,exitCode:0}}let a=t.fs.resolvePath(t.cwd,e.directory);await t.fs.mkdir(a,{recursive:!0});let o=[],s=[],c=[],l=[];for(let e of i){let n=SI(t,a,e.path);if(!n)return uI(`blocked suspicious path ${e.path}`);await TI(t,n,e,c,s),e.mtime!==void 0&&l.push([n,e.mtime]),o.push(e.path)}return await wI(t,[...DI(s),...DI(c)],DI(l),n),{stdout:e.verbose?`${o.join(`
2166
- `)}\n`:``,stderr:``,exitCode:0}}function kI(e={}){return S(`tar`,async(t,n)=>{if(t.length===0||t.includes(`--help`)||t.includes(`-h`))return lI();let r=_I(t);return`exitCode`in r?r:r.mode?r.archive?r.mode===`list`&&r.directory!==`.`?uI(`-C is only supported in create or extract mode`):r.mode===`create`?EI(r,n):OI(r,n,e.fs):uI(`option -f requires an archive path`):uI(`exactly one of -c, -x, or -t is required`)})}var AI=`/**
2159
+ `,exitCode:1};let a=Xp(e[0],e.slice(1)),o=i.env?.get(em),s=await t.requestApproval({kind:`command`,detail:a,...o?{reason:o}:{}});if(s.decision===`deny`)return JF(s);if(s.decision===`always`){let e=s.pattern?.trim()||a;if(n)try{await n(e)}catch{}}return r&&r(a),i.exec(e[0],{cwd:i.cwd,args:e.slice(1)})})}function XF(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 ZF(e,t){return e.fs.lstat?e.fs.lstat(t):e.fs.stat(t)}function QF(e,t){return e.some(e=>/^-[^-]/.test(e)&&e.slice(1).includes(t))}async function $F(e,t,n){let r=e.fs.resolvePath(e.cwd,t);try{let i=await ZF(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}': ${XF(e)}\n`}}}function eI(){return S(`rm`,async(e,t)=>{let n={recursive:QF(e,`r`)||QF(e,`R`)||e.includes(`--recursive`),force:QF(e,`f`)||e.includes(`--force`),verbose:QF(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
2160
+ `,exitCode:1};let i=await Promise.all(r.map(e=>$F(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 tI(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 nI(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 rI(e,t,n){try{let r=e.fs.resolvePath(e.cwd,t),i=n.follow?await e.fs.stat(r):await ZF(e,r);return{stdout:n.format?`${tI(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 iI(){return S(`stat`,async(e,t)=>{let n=nI(e);if(n.paths.length===0)return{stdout:``,stderr:`stat: missing operand
2161
+ `,exitCode:1};let r=await Promise.all(n.paths.map(e=>rI(t,e,n))),i=r.map(e=>e.stdout).join(``),a=r.map(e=>e.stderr).join(``);return{stdout:i,stderr:a,exitCode:+!!a}})}function aI(e){let t=e.replace(/\/+$/,``),n=t.lastIndexOf(`/`);return n<=0?`/`:t.slice(0,n)}async function oI(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 ZF(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}': ${XF(e)}\n`}}if(!n||s===i.length-1)return{stdout:o,stderr:``};a=aI(a)}return{stdout:o,stderr:``}}function sI(){return S(`rmdir`,async(e,t)=>{let n=e.some(e=>e===`-p`||e===`--parents`),r=e.some(e=>e===`-v`||e===`--verbose`),i=e.filter(e=>!e.startsWith(`-`));if(i.length===0)return{stdout:``,stderr:`rmdir: missing operand
2162
+ `,exitCode:1};let a=await Promise.all(i.map(e=>oI(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 cI(){return{stdout:`usage: tar (-c|-x|-t) [-zv] -f <archive> [-C <dir>] [paths...]
2163
+ `,stderr:``,exitCode:0}}function lI(e){return{stdout:``,stderr:`tar: ${e}\n`,exitCode:1}}function uI(e,t){if(e.mode)return lI(`exactly one of -c, -x, or -t is required`);e.mode=t}function dI(e,t,n){if(n)return[n,t];let r=e[t+1];return r===void 0?void 0:[r,t+1]}const fI={c:`create`,x:`extract`,t:`list`};function pI(e,t,n,r,i){let a=fI[e];if(a)return{nextIndex:r,error:uI(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:lI(`unsupported option -${e}`)};let o=dI(n,r,t);return o?(e===`f`?i.archive=o[0]:i.directory=o[0],{nextIndex:o[1],consumedValue:!0}):{nextIndex:r,error:lI(`option -${e} requires an argument`)}}function mI(e,t,n){let r=e[t];for(let i=1;i<r.length;i++){let a=pI(r[i],r.slice(i+1),e,t,n);if(a.error||a.consumedValue)return a}return{nextIndex:t}}const hI=/^[cxtzvfC]+$/;function gI(e){let t=e.length>0&&hI.test(e[0])?[`-${e[0]}`,...e.slice(1)]:e,n={gzip:!1,verbose:!1,directory:`.`,paths:[]};for(let e=0;e<t.length;e++){let r=t[e];if(!r.startsWith(`-`)||r===`-`){n.paths.push(r);continue}if(r.startsWith(`--`))return lI(`unsupported option ${r}`);let i=mI(t,e,n);if(i.error)return i.error;e=i.nextIndex}return n}function _I(e,t){let n=e.replace(/\\/g,`/`).replace(/^\/+/,``).replace(/^(?:\.\/)+/,``);return n?n===`.`?`.`:n.replace(/\/+$/,``):tr(t)}function vI(e){let t=e.mtime?.getTime();return t===void 0||Number.isNaN(t)?{}:{mtime:Math.floor(t/1e3)}}async function yI(e,t,n,r){let i=await e.fs.stat(t);if(i.isFile){let a=await e.fs.readFileBuffer(t),o=typeof i.mode==`number`?i.mode&511:void 0;r.push({path:n,bytes:a,...o===void 0?{}:{mode:o},...vI(i)});return}if(!i.isDirectory)throw Error(`unsupported file type: ${t}`);let a=n.endsWith(`/`)?n:`${n}/`,o=typeof i.mode==`number`?i.mode&511:void 0;r.push({path:a,bytes:new Uint8Array,directory:!0,...o===void 0?{}:{mode:o},...vI(i)});for(let n of await e.fs.readdir(t))await yI(e,er(t,n),`${a}${n}`,r)}function bI(e,t){let n=e.length>=2&&e[0]===31&&e[1]===139,r=t||n?Qi(e):e;return Zi(r,{stripNpmPrefix:!1,includeDirectories:!0,preserveRawPaths:!0})}function xI(e,t,n){let r=n.replace(/\\/g,`/`);if(!r||r.startsWith(`/`)||/^[a-zA-Z]:\//.test(r)||r.split(`/`).includes(`..`))return;let i=e.fs.resolvePath(t,r);return lr(t,i)?i:void 0}async function SI(e){try{await e()}catch(e){let t=e?.code;if(t===`ENOSYS`||t===`ENOTSUP`||t===`EOPNOTSUPP`)return;throw e}}async function CI(e,t,n,r){let i=new Map(t),a=new Map(n),o=[...new Set([...i.keys(),...a.keys()])];if(o.length===0)return;let s=o.map(e=>{let t=i.get(e),n=a.get(e),r=n===void 0?void 0:new Date(n*1e3);return{path:e,...t===void 0?{}:{mode:t},...r===void 0?{}:{atime:r,mtime:r}}});if(typeof r?.updateMetadataBatch==`function`){await SI(()=>r.updateMetadataBatch(s));return}let c=e.fs;if(typeof c.updateMetadataBatch==`function`){await SI(()=>c.updateMetadataBatch(s));return}for(let[e,n]of t)await SI(()=>c.chmod(e,n));for(let[e,t]of n){let n=new Date(t*1e3);await SI(()=>c.utimes(e,n,n))}}async function wI(e,t,n,r,i){let a=n.directory?493:420,o=n.mode===a&&await e.fs.exists(t),s=n.mode!==void 0&&(n.mode!==a||o);if(n.directory){await e.fs.mkdir(t,{recursive:!0}),s&&r.push([t,n.mode]);return}let c=or(t);c!==`/`&&await e.fs.mkdir(c,{recursive:!0}),await e.fs.writeFile(t,n.bytes),s&&i.push([t,n.mode])}async function TI(e,t){if(e.paths.length===0)return lI(`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 yI(t,e,_I(i,e),n)}let i=t.fs.resolvePath(t.cwd,e.archive),a=Yi(n);return await t.fs.writeFile(i,e.gzip?Xi(a):a),{stdout:e.verbose?`${n.map(e=>e.path).join(`
2164
+ `)}\n`:``,stderr:``,exitCode:0}}function EI(e){let t=new Set,n=[];for(let r=e.length-1;r>=0;r--){let[i,a]=e[r];t.has(i)||(t.add(i),n.push([i,a]))}return n}async function DI(e,t,n){if(e.paths.length>0)return lI(`${e.mode} mode does not accept input paths`);let r=t.fs.resolvePath(t.cwd,e.archive),i=bI(await t.fs.readFileBuffer(r),e.gzip);if(e.mode===`list`){let e=i.map(e=>e.path).join(`
2165
+ `);return{stdout:e?`${e}\n`:``,stderr:``,exitCode:0}}let a=t.fs.resolvePath(t.cwd,e.directory);await t.fs.mkdir(a,{recursive:!0});let o=[],s=[],c=[],l=[];for(let e of i){let n=xI(t,a,e.path);if(!n)return lI(`blocked suspicious path ${e.path}`);await wI(t,n,e,c,s),e.mtime!==void 0&&l.push([n,e.mtime]),o.push(e.path)}return await CI(t,[...EI(s),...EI(c)],EI(l),n),{stdout:e.verbose?`${o.join(`
2166
+ `)}\n`:``,stderr:``,exitCode:0}}function OI(e={}){return S(`tar`,async(t,n)=>{if(t.length===0||t.includes(`--help`)||t.includes(`-h`))return cI();let r=gI(t);return`exitCode`in r?r:r.mode?r.archive?r.mode===`list`&&r.directory!==`.`?lI(`-C is only supported in create or extract mode`):r.mode===`create`?TI(r,n):DI(r,n,e.fs):lI(`option -f requires an archive path`):lI(`exactly one of -c, -x, or -t is required`)})}var kI=`/**
2167
2167
  * Standalone assertions - no dependency on test runner
2168
2168
  *
2169
2169
  * Each assertion:
@@ -2351,7 +2351,7 @@ function sameMembers(a, b) {
2351
2351
  }
2352
2352
 
2353
2353
  const slice = a => (isPrimitive(a) ? a : a.slice ? a.slice() : Object.assign({}, a))
2354
- `,jI=`/**
2354
+ `,AI=`/**
2355
2355
  * tst - minimal test runner
2356
2356
  *
2357
2357
  * - Standalone assertions (assert.js works anywhere)
@@ -2981,7 +2981,7 @@ function scheduleAutoRun() {
2981
2981
  scheduleAutoRun()
2982
2982
 
2983
2983
  export * from './assert.js'
2984
- `;function MI(e){return{reader:{exists:t=>e.fs.exists(t),isDirectory:async t=>{try{return(await e.fs.stat(t)).isDirectory}catch{return!1}},readFile:t=>e.fs.readFile(t)},readBytes:t=>e.fs.readFileBuffer(t),fromDir:e.cwd}}const NI=`tsc - thin wrapper over the ipk-loaded TypeScript 6 package
2984
+ `;function jI(e){return{reader:{exists:t=>e.fs.exists(t),isDirectory:async t=>{try{return(await e.fs.stat(t)).isDirectory}catch{return!1}},readFile:t=>e.fs.readFile(t)},readBytes:t=>e.fs.readFileBuffer(t),fromDir:e.cwd}}const MI=`tsc - thin wrapper over the ipk-loaded TypeScript 6 package
2985
2985
 
2986
2986
  Usage:
2987
2987
  tsc [options] [files...]
@@ -3005,28 +3005,28 @@ Install:
3005
3005
  Then \`tsc --version\` and the transpile commands above. There is no
3006
3006
  bundled binary, no CDN fallback; a missing package exits non-zero
3007
3007
  with a clear \`ipk add\` hint.
3008
- `;function PI(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 FI(e,t){let n=`${tr(e).replace(/\.(ts|tsx|mts|cts)$/i,``)}.js`;return t?`${t.endsWith(`/`)?t.slice(0,-1):t}/${n}`:`${or(e)}/${n}`}async function II(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=or(n)}return null}function LI(e){return{target:e.ScriptTarget.ES2022,module:e.ModuleKind.ESNext,moduleResolution:e.ModuleResolutionKind.Bundler,esModuleInterop:!0,allowSyntheticDefaultImports:!0,isolatedModules:!0}}function RI(e){if(typeof e!=`object`||!e)return{};let{compilerOptions:t}=e;return t??{}}async function zI(e,t,n){let r=LI(t),i=await II(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,...RI(o)}}}function BI(e,t){let n=e.flattenDiagnosticMessageText(t.messageText,`
3009
- `);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 VI(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 UI(e,t,n,r){let{outputText:i,diagnostics:a}=HI(e,r,`<stdin>.ts`,n.compilerOptions,!0),o=a.map(t=>BI(e,t)),s=o.length>0?`${o.join(`
3010
- `)}\n`:``;return{stdout:t.noEmit?``:i,stderr:s,exitCode:+(a.length>0)}}async function WI(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}}VI(e,a);let{outputText:s,diagnostics:c}=HI(e,o,a,i.compilerOptions,!0),l=[];for(let t of c)l.push(`${BI(e,t)}\n`);let u=c.length>0;if(r.noEmit)return{stderr:l.join(``),hadError:u};let d=t.fs.resolvePath(t.cwd,FI(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 GI(e,t){let n;try{n=PI(e)}catch(e){return{done:{stdout:``,stderr:`${e instanceof Error?e.message:String(e)}\n`,exitCode:2}}}if(n.showHelp)return{done:{stdout:NI,stderr:``,exitCode:0}};let r;try{r=await Qn(MI(t))}catch(e){return{done:{stdout:``,stderr:`tsc: ${e instanceof Error?e.message:String(e)}\n`,exitCode:1}}}return n.showVersion?{done:{stdout:`Version ${r.version}\n`,stderr:``,exitCode:0}}:{parsed:n,ts:r}}function KI(){return S(`tsc`,async(e,t)=>{let n=await GI(e,t);if(`done`in n)return n.done;let{parsed:r,ts:i}=n,a=await zI(t.fs,i,t.cwd);if(r.files.length===0){let e=P(t.stdin);return e?UI(i,r,a,e):{stdout:NI,stderr:``,exitCode:0}}let o=[],s=!1;for(let e of r.files){let n=await WI(i,t,e,r,a);n.stderr&&o.push(n.stderr),n.hadError&&(s=!0)}return{stdout:``,stderr:o.join(``),exitCode:+!!s}})}const qI=[`**/*.test.{js,ts}`];function JI(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 YI(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 XI(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=JI(s,e[o+1]);if(c){n=c.reporter,c.consumed===2&&(o+=1);continue}let l=YI(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:[...qI],reporter:n,showHelp:r,coverage:i,coverageDir:a}}function ZI(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 ZI(`${r}${e}${i}`))o.push(t);return o}function QI(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 $I(e,t,n){let r=n.flatMap(ZI).map(QI),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 eL=null;async function tL(e){if(eL)return eL;let t={module:e.ModuleKind.CommonJS,target:e.ScriptTarget.ES2022,esModuleInterop:!0,isolatedModules:!1};return eL=`
3008
+ `;function NI(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 PI(e,t){let n=`${tr(e).replace(/\.(ts|tsx|mts|cts)$/i,``)}.js`;return t?`${t.endsWith(`/`)?t.slice(0,-1):t}/${n}`:`${or(e)}/${n}`}async function FI(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=or(n)}return null}function II(e){return{target:e.ScriptTarget.ES2022,module:e.ModuleKind.ESNext,moduleResolution:e.ModuleResolutionKind.Bundler,esModuleInterop:!0,allowSyntheticDefaultImports:!0,isolatedModules:!0}}function LI(e){if(typeof e!=`object`||!e)return{};let{compilerOptions:t}=e;return t??{}}async function RI(e,t,n){let r=II(t),i=await FI(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,...LI(o)}}}function zI(e,t){let n=e.flattenDiagnosticMessageText(t.messageText,`
3009
+ `);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 BI(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 VI(e,t,n,r,i){let a=e.transpileModule(t,{compilerOptions:r,fileName:n,reportDiagnostics:i});return{outputText:a.outputText,diagnostics:a.diagnostics??[]}}function HI(e,t,n,r){let{outputText:i,diagnostics:a}=VI(e,r,`<stdin>.ts`,n.compilerOptions,!0),o=a.map(t=>zI(e,t)),s=o.length>0?`${o.join(`
3010
+ `)}\n`:``;return{stdout:t.noEmit?``:i,stderr:s,exitCode:+(a.length>0)}}async function UI(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}}BI(e,a);let{outputText:s,diagnostics:c}=VI(e,o,a,i.compilerOptions,!0),l=[];for(let t of c)l.push(`${zI(e,t)}\n`);let u=c.length>0;if(r.noEmit)return{stderr:l.join(``),hadError:u};let d=t.fs.resolvePath(t.cwd,PI(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 WI(e,t){let n;try{n=NI(e)}catch(e){return{done:{stdout:``,stderr:`${e instanceof Error?e.message:String(e)}\n`,exitCode:2}}}if(n.showHelp)return{done:{stdout:MI,stderr:``,exitCode:0}};let r;try{r=await Qn(jI(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 GI(){return S(`tsc`,async(e,t)=>{let n=await WI(e,t);if(`done`in n)return n.done;let{parsed:r,ts:i}=n,a=await RI(t.fs,i,t.cwd);if(r.files.length===0){let e=P(t.stdin);return e?HI(i,r,a,e):{stdout:MI,stderr:``,exitCode:0}}let o=[],s=!1;for(let e of r.files){let n=await UI(i,t,e,r,a);n.stderr&&o.push(n.stderr),n.hadError&&(s=!0)}return{stdout:``,stderr:o.join(``),exitCode:+!!s}})}const KI=[`**/*.test.{js,ts}`];function qI(e,t){let n,r=1;if(e===`--reporter`)n=t,r=2;else if(e.startsWith(`--reporter=`))n=e.slice(11);else return null;if(n!==`tap`&&n!==`spec`)throw Error(`tst: --reporter must be tap or spec`);return{reporter:n,consumed:r}}function JI(e,t){return e===`--coverage`?{consumed:1}:e===`--coverage-dir`&&t!==void 0?{coverageDir:t,consumed:2}:e.startsWith(`--coverage-dir=`)?{coverageDir:e.slice(15),consumed:1}:null}function YI(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=qI(s,e[o+1]);if(c){n=c.reporter,c.consumed===2&&(o+=1);continue}let l=JI(s,e[o+1]);if(l){i=!0,l.coverageDir!==void 0&&(a=l.coverageDir),l.consumed===2&&(o+=1);continue}if(s.startsWith(`-`))throw Error(`tst: unknown option: ${s}`);t.push(s)}return{globs:t.length>0?t:[...KI],reporter:n,showHelp:r,coverage:i,coverageDir:a}}function XI(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 XI(`${r}${e}${i}`))o.push(t);return o}function ZI(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 QI(e,t,n){let r=n.flatMap(XI).map(ZI),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 $I=null;async function eL(e){if($I)return $I;let t={module:e.ModuleKind.CommonJS,target:e.ScriptTarget.ES2022,esModuleInterop:!0,isolatedModules:!1};return $I=`
3011
3011
  if (typeof process !== 'undefined' && !process.versions) {
3012
3012
  try { process.versions = { node: '20.0.0' }; } catch (_) { /* readonly process.versions is fine */ }
3013
3013
  }
3014
3014
  const __tst_assert_exports = (function () {
3015
3015
  const module = { exports: {} };
3016
3016
  const exports = module.exports;
3017
- ${e.transpileModule(AI,{compilerOptions:t,fileName:`assert.js`}).outputText}
3017
+ ${e.transpileModule(kI,{compilerOptions:t,fileName:`assert.js`}).outputText}
3018
3018
  return module.exports;
3019
3019
  })();
3020
3020
  const __tst_module_exports = (function () {
3021
3021
  const module = { exports: {} };
3022
3022
  const exports = module.exports;
3023
- ${e.transpileModule(jI,{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"))`)}
3023
+ ${e.transpileModule(AI,{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"))`)}
3024
3024
  return module.exports;
3025
3025
  })();
3026
3026
  const __tst = __tst_module_exports.default || __tst_module_exports;
3027
3027
  __tst.manual = true;
3028
- `.trim(),eL}function nL(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 rL(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 iL(e,t,n){let r=b(`${t}/${n}`),i=[r];r.endsWith(`.js`)&&i.push(`${r.slice(0,-3)}.ts`),/\.[a-zA-Z0-9]+$/.test(r)||i.push(`${r}.ts`,`${r}.js`);for(let t of i)if(await e.exists(t))return t;return null}async function aL(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=or(n),u=new Map;for(let n of rL(r)){if(!n.startsWith(`./`)&&!n.startsWith(`../`))continue;let r=await iL(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 oL(e,t,n,r,i,a,o=``,s=``){let c=r===`spec`?`pretty`:`tap`,l=[];for(let[e,t]of i.entries()){let n=nL(t,a.get(e)??new Map);l.push(`${JSON.stringify(e)}: function (module, exports, require) {\n${n}\n}`)}let u=`{${l.join(`,
3029
- `)}}`,d=nL(n,a.get(t)??new Map),f=o,p=s;return`"use strict";
3028
+ `.trim(),$I}function tL(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 nL(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 rL(e,t,n){let r=b(`${t}/${n}`),i=[r];r.endsWith(`.js`)&&i.push(`${r.slice(0,-3)}.ts`),/\.[a-zA-Z0-9]+$/.test(r)||i.push(`${r}.ts`,`${r}.js`);for(let t of i)if(await e.exists(t))return t;return null}async function iL(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=or(n),u=new Map;for(let n of nL(r)){if(!n.startsWith(`./`)&&!n.startsWith(`../`))continue;let r=await rL(e,l,n);if(!r||(u.set(n,r),o.has(r)))continue;let s=await e.readFile(r);a&&(s=a(s,r));let d=t.transpileModule(s,{compilerOptions:i,fileName:r}).outputText;o.set(r,d),c.push({path:r,cjs:d})}s.set(n,u)}return{modules:o,edgeRewrites:s}}function aL(e,t,n,r,i,a,o=``,s=``){let c=r===`spec`?`pretty`:`tap`,l=[];for(let[e,t]of i.entries()){let n=tL(t,a.get(e)??new Map);l.push(`${JSON.stringify(e)}: function (module, exports, require) {\n${n}\n}`)}let u=`{${l.join(`,
3029
+ `)}}`,d=tL(n,a.get(t)??new Map),f=o,p=s;return`"use strict";
3030
3030
  ${f}${e}
3031
3031
  const __realmRequire = require;
3032
3032
  const { createRequire: __createRequire } = __realmRequire("module");
@@ -3069,7 +3069,7 @@ await Promise.resolve();
3069
3069
  await new Promise((resolve) => setTimeout(resolve));
3070
3070
  ${p}
3071
3071
  if (__state && __state.failed && __state.failed.length > 0) process.exit(1);
3072
- `}const sL={esModuleInterop:!0,allowJs:!0,isolatedModules:!1};function cL(e){return{module:e.ModuleKind.CommonJS,target:e.ScriptTarget.ES2022,...sL}}async function lL(e,t){let n;try{n=XI(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
3072
+ `}const oL={esModuleInterop:!0,allowJs:!0,isolatedModules:!1};function sL(e){return{module:e.ModuleKind.CommonJS,target:e.ScriptTarget.ES2022,...oL}}async function cL(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:`tst - run *.test.{js,ts} files with the bundled tst runner
3073
3073
 
3074
3074
  Usage:
3075
3075
  tst [options] [glob...]
@@ -3091,7 +3091,7 @@ Notes:
3091
3091
  with statement counters. nyc/c8 cannot wrap this runner: it is not a
3092
3092
  Node child. Istanbul/Babel are not bundled (webapp size-limit); the
3093
3093
  TypeScript AST already in process does the rewrite.
3094
- `,stderr:``,exitCode:0}};let r=await $I(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 Qn(MI(t))}catch(e){return{done:{stdout:``,stderr:`tst: ${e instanceof Error?e.message:String(e)}\n`,exitCode:1}}}let a=await tL(i),o=n.coverage?await import(`./coverage-instrument-CjoHgKzK.js`):null;return{parsed:n,files:r,ts:i,harness:a,userOpts:cL(i),coverageMaps:{},coverageCounts:{},coverageMod:o}}function uL(e){return e.includes(`# fail `)||/(^|\n)not ok /.test(e)}async function dL(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 aL(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=oL(a,n,d,s.reporter,f,p,c?`${c.coverageRuntimeSource()}\n`:``,c?`\n${c.coverageDumpSource()}`:``),h=await Ur(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||uL(g)}}function fL(){return S(`tst`,async(e,t)=>{let n=await lL(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 dL(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 pL=[],mL=`usage: theme <subcommand> [args]
3094
+ `,stderr:``,exitCode:0}};let r=await QI(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 Qn(jI(t))}catch(e){return{done:{stdout:``,stderr:`tst: ${e instanceof Error?e.message:String(e)}\n`,exitCode:1}}}let a=await eL(i),o=n.coverage?await import(`./coverage-instrument-CjoHgKzK.js`):null;return{parsed:n,files:r,ts:i,harness:a,userOpts:sL(i),coverageMaps:{},coverageCounts:{},coverageMod:o}}function lL(e){return e.includes(`# fail `)||/(^|\n)not ok /.test(e)}async function uL(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 iL(e.fs,i,n,d,o,l))}catch(e){return{stdout:``,stderr:`tst: ${n}: local-require resolve error: ${e instanceof Error?e.message:String(e)}\n`,failed:!0}}let m=aL(a,n,d,s.reporter,f,p,c?`${c.coverageRuntimeSource()}\n`:``,c?`\n${c.coverageDumpSource()}`:``),h=await Ur(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||lL(g)}}function dL(){return S(`tst`,async(e,t)=>{let n=await cL(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 uL(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 fL=[],pL=`usage: theme <subcommand> [args]
3095
3095
 
3096
3096
  Subcommands:
3097
3097
  list List available preset and custom themes
@@ -3100,23 +3100,23 @@ Subcommands:
3100
3100
  reset Reset to the default theme
3101
3101
  current Show the currently active theme
3102
3102
  export <id> <path> Export a theme to a VFS path
3103
- `;function hL(e,t){return{stdout:``,stderr:`theme ${e}: ${t}\n`,exitCode:1}}function gL(){return S(`theme`,async(e,t)=>{if(e.length===0||e[0]===`--help`||e[0]===`-h`)return{stdout:mL,stderr:``,exitCode:0};let n=e[0];return w(e.slice(1),{valueFlags:pL})?{stdout:et(`theme`,n,mL),stderr:``,exitCode:0}:n===`list`?_L(e):n===`current`?vL(e):n===`reset`?yL(e):n===`apply`?bL(e.slice(1),t):n===`export`?xL(e.slice(1),t):{stdout:``,stderr:`theme: unknown subcommand "${n}"\n${mL}`,exitCode:1}})}async function _L(e){let t=C(e.slice(1),{value:pL});if(`error`in t)return hL(`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(`
3104
- `),stderr:``,exitCode:0}}async function vL(e){let t=C(e.slice(1),{value:pL});return`error`in t?hL(`current`,t.error):{stdout:`Check the Theme settings dialog for the active theme.
3105
- `,stderr:``,exitCode:0}}async function yL(e){let t=C(e.slice(1),{value:pL});if(`error`in t)return hL(`reset`,t.error);let n=y();return n?(await n.call(`theme-apply`,{action:`reset`}),{stdout:`Theme reset to default.
3103
+ `;function mL(e,t){return{stdout:``,stderr:`theme ${e}: ${t}\n`,exitCode:1}}function hL(){return S(`theme`,async(e,t)=>{if(e.length===0||e[0]===`--help`||e[0]===`-h`)return{stdout:pL,stderr:``,exitCode:0};let n=e[0];return w(e.slice(1),{valueFlags:fL})?{stdout:et(`theme`,n,pL),stderr:``,exitCode:0}:n===`list`?gL(e):n===`current`?_L(e):n===`reset`?vL(e):n===`apply`?yL(e.slice(1),t):n===`export`?bL(e.slice(1),t):{stdout:``,stderr:`theme: unknown subcommand "${n}"\n${pL}`,exitCode:1}})}async function gL(e){let t=C(e.slice(1),{value:fL});if(`error`in t)return mL(`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(`
3104
+ `),stderr:``,exitCode:0}}async function _L(e){let t=C(e.slice(1),{value:fL});return`error`in t?mL(`current`,t.error):{stdout:`Check the Theme settings dialog for the active theme.
3105
+ `,stderr:``,exitCode:0}}async function vL(e){let t=C(e.slice(1),{value:fL});if(`error`in t)return mL(`reset`,t.error);let n=y();return n?(await n.call(`theme-apply`,{action:`reset`}),{stdout:`Theme reset to default.
3106
3106
  `,stderr:``,exitCode:0}):{stdout:``,stderr:`theme: no panel-RPC connection available
3107
- `,exitCode:1}}async function bL(e,t){let n=C(e,{value:pL});if(`error`in n)return hL(`apply`,n.error);if(n.positionals.length===0)return{stdout:``,stderr:`theme apply: missing theme id or path
3107
+ `,exitCode:1}}async function yL(e,t){let n=C(e,{value:fL});if(`error`in n)return mL(`apply`,n.error);if(n.positionals.length===0)return{stdout:``,stderr:`theme apply: missing theme id or path
3108
3108
  `,exitCode:1};let r=y();if(!r)return{stdout:``,stderr:`theme: no panel-RPC connection available
3109
3109
  `,exitCode:1};let i=n.positionals[0],{PRESETS:a}=await import(`./theme-presets-xiOb9AFN.js`),o=a.find(e=>e.id===i);if(o){let e=JSON.stringify(o);return await r.call(`theme-apply`,{themeJson:e,action:`apply`}),{stdout:`Applied theme: ${o.name}\n`,stderr:``,exitCode:0}}let s=t.fs.resolvePath(t.cwd,i),c;try{c=await t.fs.readFile(s)}catch{return{stdout:``,stderr:`theme apply: "${i}" is not a known preset id and file not found at ${s}\n`,exitCode:1}}try{let e=JSON.parse(c);if(!e.id||!e.name||!e.base||!e.tokens)return{stdout:``,stderr:`theme apply: invalid theme file (missing id, name, base, or tokens)
3110
3110
  `,exitCode:1}}catch{return{stdout:``,stderr:`theme apply: file is not valid JSON
3111
- `,exitCode:1}}return{stdout:`Applied theme: ${(await r.call(`theme-apply`,{themeJson:c,action:`apply`})).applied}\n`,stderr:``,exitCode:0}}async function xL(e,t){let n=C(e,{value:pL});if(`error`in n)return hL(`export`,n.error);if(n.positionals.length<2)return{stdout:``,stderr:`theme export: usage: theme export <id> <path>
3112
- `,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]`,wL=[`s`,`n`,`r`,`v`,`m`,`o`];function TL(){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(`
3113
- `),stderr:``,exitCode:0}}function EL(){let{releasedAt:e,buildId:t}=qe();return e?`${t} (${e})`:t}function DL(){let e=globalThis.navigator,t=e?.userAgentData?.platform||e?.platform;return typeof t==`string`&&t.length>0?t:SL}function OL(){let e=globalThis.navigator?.userAgent;return typeof e==`string`&&e.length>0?e:SL}function kL(e){switch(e){case`s`:return`SLICC`;case`n`:return Ke();case`r`:return qe().version;case`v`:return EL();case`m`:return DL();case`o`:return OL()}}function AL(e){return{stdout:``,stderr:`uname: ${e}\n${CL}\n`,exitCode:1}}function jL(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 wL)t.add(e);continue}if(!wL.includes(e))return{error:`unrecognized option '-${e}'`};t.add(e)}}return t}function ML(){return S(`uname`,async e=>{if(e.includes(`--help`)||e.includes(`-h`))return TL();let t=jL(e);return`error`in t?AL(t.error):{stdout:`${(t.size>0?wL.filter(e=>t.has(e)):[`s`]).map(kL).join(` `)}\n`,stderr:``,exitCode:0}})}function NL(){return S(`unlink`,async(e,t)=>{if(e.includes(`--help`))return{stdout:`Usage: unlink FILE
3111
+ `,exitCode:1}}return{stdout:`Applied theme: ${(await r.call(`theme-apply`,{themeJson:c,action:`apply`})).applied}\n`,stderr:``,exitCode:0}}async function bL(e,t){let n=C(e,{value:fL});if(`error`in n)return mL(`export`,n.error);if(n.positionals.length<2)return{stdout:``,stderr:`theme export: usage: theme export <id> <path>
3112
+ `,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 xL=`unknown`,SL=`usage: uname [-amnorsv]`,CL=[`s`,`n`,`r`,`v`,`m`,`o`];function wL(){return{stdout:[SL,` -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(`
3113
+ `),stderr:``,exitCode:0}}function TL(){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:xL}function DL(){let e=globalThis.navigator?.userAgent;return typeof e==`string`&&e.length>0?e:xL}function OL(e){switch(e){case`s`:return`SLICC`;case`n`:return Ke();case`r`:return qe().version;case`v`:return TL();case`m`:return EL();case`o`:return DL()}}function kL(e){return{stdout:``,stderr:`uname: ${e}\n${SL}\n`,exitCode:1}}function AL(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 CL)t.add(e);continue}if(!CL.includes(e))return{error:`unrecognized option '-${e}'`};t.add(e)}}return t}function jL(){return S(`uname`,async e=>{if(e.includes(`--help`)||e.includes(`-h`))return wL();let t=AL(e);return`error`in t?kL(t.error):{stdout:`${(t.size>0?CL.filter(e=>t.has(e)):[`s`]).map(OL).join(` `)}\n`,stderr:``,exitCode:0}})}function ML(){return S(`unlink`,async(e,t)=>{if(e.includes(`--help`))return{stdout:`Usage: unlink FILE
3114
3114
  Remove FILE. Symbolic links are removed without following their target.
3115
3115
  `,stderr:``,exitCode:0};if(e.length!==1||e[0].startsWith(`-`))return{stdout:``,stderr:e.length===0?`unlink: missing operand
3116
3116
  `:`unlink: extra operand
3117
- `,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 PL(){return{stdout:`usage: unzip <archive.zip> [-d <destination>]
3118
- `,stderr:``,exitCode:0}}function FL(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
3119
- `,exitCode:1}}:{kind:`ok`,archive:n[0],destination:t||`.`}}async function IL(e,t,n,r){let i=n.replace(/\\/g,`/`);if(!i||i.endsWith(`/`))return!1;let a=e.fs.resolvePath(t,i);if(!lr(t,a))return{stdout:``,stderr:`unzip: blocked suspicious path ${n}\n`,exitCode:1};let o=or(a);return o!==`/`&&await e.fs.mkdir(o,{recursive:!0}),await e.fs.writeFile(a,r),!0}function LL(){return S(`unzip`,async(e,t)=>{if(e.length===0||e.includes(`--help`)||e.includes(`-h`))return PL();let n=FL(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 IL(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 RL=`ai-ecoverse/slicc`,zL=`usage: upgrade status | upgrade apply --from=<version> --to=<version>`,BL=`packages/vfs-root`,VL=3e4,HL=[`${BL}/workspace/skills/`,`${BL}/shared/sprinkles/`,`${BL}/shared/sounds/`,`${BL}/shared/GELATIERE.md`,`${BL}/shared/wiki/WIKI.md`,`${BL}/etc/`],UL=[`auto-applied`,`merged-clean`,`kept-local`,`needs-review`,`unchanged`,`added-new`];function WL(){return Object.fromEntries(UL.map(e=>[e,0]))}function GL(e,t,n,r){let i=WL();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 KL(e){if(e[0]!==`apply`)throw Error(zL);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 qL(e){return e.startsWith(`v`)?e:`v${e}`}function JL(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 YL(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 ${VL}ms`)),VL)})])}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 XL(e,t){let n=await YL(t,`https://api.github.com/repos/${RL}/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=JL(e.path);t&&i.set(t,e.path)}return i}function ZL(e,t){let n=t.split(`/`).map(encodeURIComponent).join(`/`);return`https://raw.githubusercontent.com/${RL}/${encodeURIComponent(e)}/${n}`}function QL(e,t){return!e||!t||e.byteLength!==t.byteLength?!1:e.every((e,n)=>e===t[n])}function $L(e){try{return new TextDecoder(`utf-8`,{fatal:!0}).decode(e)}catch{return null}}async function eR(e,t){if(!await e.exists(t))return;let n=await e.readFile(t,{encoding:`binary`});return n instanceof Uint8Array?n:new TextEncoder().encode(n)}async function tR(e,t,n,r,i){let a=`${t}.upgrade-${qL(n)}-to-${qL(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 nR(e,t,n,r,i,a,o){let s=await eR(e.fs,t);if(!a)return{path:t,classification:s?`kept-local`:`unchanged`};if(!i)return s?{path:t,classification:QL(s,a)?`unchanged`:`kept-local`}:{path:t,classification:`added-new`,content:a};if(QL(i,a)||QL(s,a))return{path:t,classification:`unchanged`};if(!s)return{path:t,classification:`kept-local`};if(QL(s,i))return{path:t,classification:`auto-applied`,content:a};let[c,l,u]=[s,i,a].map($L);if(c!==null&&l!==null&&u!==null){let i=Ae(c,l,u,{diff3:!0,labels:{current:`local:${t}`,base:`${qL(n)}:${t}`,other:`${qL(r)}:${t}`}}),a=new TextEncoder().encode(i.content);return i.conflicts===0?{path:t,classification:`merged-clean`,content:a}:{path:t,classification:`needs-review`,content:a,sidecar:await tR(e.fs,t,n,r,o)}}return{path:t,classification:`needs-review`,content:a,sidecar:await tR(e.fs,t,n,r,o)}}async function rR(e,t){t.content?await e.writeFile(t.path,t.content):await e.exists(t.path)&&await e.rm(t.path)}async function iR(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 eR(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 rR(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 aR(e,t,n){let r=qL(t),i=qL(n),[a,o]=await Promise.all([XL(r,e.fetch),XL(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)?YL(e.fetch,ZL(r,a.get(t))).then(e=>pe(e.body)):void 0,o.has(t)?YL(e.fetch,ZL(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 nR(e,r,t,n,i,a,l));return await iR(e.fs,u),u}async function oR(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 sR(e){return S(`upgrade`,async t=>{if(t.includes(`--help`)||t.includes(`-h`))return{stdout:`${zL}\n`,stderr:``,exitCode:0};if(t[0]===`status`)return t.length>1?{stdout:GL(``,``,[],[`unsupported argument: ${t[1]}`]),stderr:``,exitCode:1}:{stdout:await oR(e),stderr:``,exitCode:0};let n=``,r=``;try{({from:n,to:r}=KL(t));let i=await aR(e,n,r),a=i.some(e=>e.classification===`needs-review`);return{stdout:GL(n,r,i,[]),stderr:``,exitCode:+!!a}}catch(e){let t=e instanceof Error?e.message:String(e);return{stdout:GL(n,r,[],[t]),stderr:``,exitCode:1}}})}const cR=`usage: uptime [-p|--pretty] [-s|--since]`,lR=`${cR}
3117
+ `,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 NL(){return{stdout:`usage: unzip <archive.zip> [-d <destination>]
3118
+ `,stderr:``,exitCode:0}}function PL(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
3119
+ `,exitCode:1}}:{kind:`ok`,archive:n[0],destination:t||`.`}}async function FL(e,t,n,r){let i=n.replace(/\\/g,`/`);if(!i||i.endsWith(`/`))return!1;let a=e.fs.resolvePath(t,i);if(!lr(t,a))return{stdout:``,stderr:`unzip: blocked suspicious path ${n}\n`,exitCode:1};let o=or(a);return o!==`/`&&await e.fs.mkdir(o,{recursive:!0}),await e.fs.writeFile(a,r),!0}function IL(){return S(`unzip`,async(e,t)=>{if(e.length===0||e.includes(`--help`)||e.includes(`-h`))return NL();let n=PL(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 FL(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 LL=`ai-ecoverse/slicc`,RL=`usage: upgrade status | upgrade apply --from=<version> --to=<version>`,zL=`packages/vfs-root`,BL=3e4,VL=[`${zL}/workspace/skills/`,`${zL}/shared/sprinkles/`,`${zL}/shared/sounds/`,`${zL}/shared/GELATIERE.md`,`${zL}/shared/wiki/WIKI.md`,`${zL}/etc/`],HL=[`auto-applied`,`merged-clean`,`kept-local`,`needs-review`,`unchanged`,`added-new`];function UL(){return Object.fromEntries(HL.map(e=>[e,0]))}function WL(e,t,n,r){let i=UL();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 GL(e){if(e[0]!==`apply`)throw Error(RL);let t=new Map;for(let n of e.slice(1)){let e=n.match(/^--(from|to)=(.+)$/);if(!e)throw Error(`unsupported argument: ${n}`);t.set(e[1],e[2])}let n=t.get(`from`)??``,r=t.get(`to`)??``,i=/^v?[0-9][0-9A-Za-z.+_-]*$/;if(!i.test(n)||!i.test(r))throw Error(`both --from and --to must be release versions`);return{from:n,to:r}}function KL(e){return e.startsWith(`v`)?e:`v${e}`}function qL(e){if(!VL.some(t=>e.startsWith(t)))return null;let t=e.slice(17);return!t||t.split(`/`).some(e=>e===`.`||e===`..`)?null:t}async function JL(e,t){let n,r;try{n=await Promise.race([e(t,{method:`GET`,headers:{Accept:`application/json`}}),new Promise((e,t)=>{r=setTimeout(()=>t(Error(`request timed out after ${BL}ms`)),BL)})])}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 YL(e,t){let n=await JL(t,`https://api.github.com/repos/${LL}/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=qL(e.path);t&&i.set(t,e.path)}return i}function XL(e,t){let n=t.split(`/`).map(encodeURIComponent).join(`/`);return`https://raw.githubusercontent.com/${LL}/${encodeURIComponent(e)}/${n}`}function ZL(e,t){return!e||!t||e.byteLength!==t.byteLength?!1:e.every((e,n)=>e===t[n])}function QL(e){try{return new TextDecoder(`utf-8`,{fatal:!0}).decode(e)}catch{return null}}async function $L(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 eR(e,t,n,r,i){let a=`${t}.upgrade-${KL(n)}-to-${KL(r)}.conflict`;if(!i.has(a)&&!await e.exists(a))return i.add(a),a;for(let t=1;;t+=1){let n=`${a}.${t}`;if(!i.has(n)&&!await e.exists(n))return i.add(n),n}}async function tR(e,t,n,r,i,a,o){let s=await $L(e.fs,t);if(!a)return{path:t,classification:s?`kept-local`:`unchanged`};if(!i)return s?{path:t,classification:ZL(s,a)?`unchanged`:`kept-local`}:{path:t,classification:`added-new`,content:a};if(ZL(i,a)||ZL(s,a))return{path:t,classification:`unchanged`};if(!s)return{path:t,classification:`kept-local`};if(ZL(s,i))return{path:t,classification:`auto-applied`,content:a};let[c,l,u]=[s,i,a].map(QL);if(c!==null&&l!==null&&u!==null){let i=Ae(c,l,u,{diff3:!0,labels:{current:`local:${t}`,base:`${KL(n)}:${t}`,other:`${KL(r)}:${t}`}}),a=new TextEncoder().encode(i.content);return i.conflicts===0?{path:t,classification:`merged-clean`,content:a}:{path:t,classification:`needs-review`,content:a,sidecar:await eR(e.fs,t,n,r,o)}}return{path:t,classification:`needs-review`,content:a,sidecar:await eR(e.fs,t,n,r,o)}}async function nR(e,t){t.content?await e.writeFile(t.path,t.content):await e.exists(t.path)&&await e.rm(t.path)}async function rR(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 $L(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 nR(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 iR(e,t,n){let r=KL(t),i=KL(n),[a,o]=await Promise.all([YL(r,e.fetch),YL(i,e.fetch)]),s=[...new Set([...a.keys(),...o.keys()])].sort(),c=await Promise.all(s.map(async t=>{let[n,s]=await Promise.all([a.has(t)?JL(e.fetch,XL(r,a.get(t))).then(e=>pe(e.body)):void 0,o.has(t)?JL(e.fetch,XL(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 tR(e,r,t,n,i,a,l));return await rR(e.fs,u),u}async function aR(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 oR(e){return S(`upgrade`,async t=>{if(t.includes(`--help`)||t.includes(`-h`))return{stdout:`${RL}\n`,stderr:``,exitCode:0};if(t[0]===`status`)return t.length>1?{stdout:WL(``,``,[],[`unsupported argument: ${t[1]}`]),stderr:``,exitCode:1}:{stdout:await aR(e),stderr:``,exitCode:0};let n=``,r=``;try{({from:n,to:r}=GL(t));let i=await iR(e,n,r),a=i.some(e=>e.classification===`needs-review`);return{stdout:WL(n,r,i,[]),stderr:``,exitCode:+!!a}}catch(e){let t=e instanceof Error?e.message:String(e);return{stdout:WL(n,r,[],[t]),stderr:``,exitCode:1}}})}const sR=`usage: uptime [-p|--pretty] [-s|--since]`,cR=`${sR}
3120
3120
 
3121
3121
  Print how long this SLICC has been running. The clock starts when the browser
3122
3122
  window was last loaded — a reload is a reboot.
@@ -3132,7 +3132,7 @@ The load average is the average number of live kernel processes over the last
3132
3132
  processes are retained in bounded numbers, so a long burst of short commands
3133
3133
  can under-report the older windows. The user count is always 1: a SLICC
3134
3134
  runtime has one user identity (see \`id\`).
3135
- `,uR=[1,5,15],dR=6e4,fR=60*dR,pR=24*fR;function mR(){let e=globalThis.__slicc_pm;return e instanceof Object&&typeof e.list==`function`?e:null}function hR(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 gR(e){let t=Math.max(0,e),n=Math.floor(t/pR),r=Math.floor(t%pR/fR),i=Math.floor(t%fR/dR),a=r>0?`${r}:${String(i).padStart(2,`0`)}`:`${i} min`;return n===0?a:`${n} ${n===1?`day`:`days`}, ${a}`}function _R(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/pR),`day`),r(Math.floor(t%pR/fR),`hour`),r(Math.floor(t%fR/dR),`minute`),n.length===0?`up ${Math.floor(t/1e3)} seconds`:`up ${n.join(`, `)}`}function vR(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 yR(e){let t=new Date(e),n=e=>String(e).padStart(2,`0`);return`${n(t.getHours())}:${n(t.getMinutes())}:${n(t.getSeconds())}`}function bR(e,t,n){let r=uR.map(r=>hR(e,t,r*dR,n).toFixed(2));return` ${yR(t)} up ${gR(t-n)}, 1 user, load average: ${r.join(`, `)}\n`}function xR(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 S(`uptime`,async t=>{let n=xR(t);if(typeof n!=`string`)return{stdout:``,stderr:`uptime: ${n.error}\n${cR}\n`,exitCode:1};if(n===`help`)return{stdout:lR,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():pa();if(n===`since`)return CR(`${vR(i)}\n`);if(n===`pretty`)return CR(`${_R(r-i)}\n`);let a=e.processManager??mR();return CR(bR(a?a.list():[],r,i))})}function CR(e){return{stdout:e,stderr:``,exitCode:0}}const wR=new Set([`--vid`,`--pid`,`--class`,`--subclass`,`--protocol`,`--serial`,`--request-type`,`--recipient`,`--request`,`--value`,`--index`,`--__resolved`]);function TR(e){return yn(e,wR)}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 ER(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 DR=new Set([`standard`,`class`,`vendor`]),OR=new Set([`device`,`interface`,`endpoint`,`other`]);function kR(e){let t=e.get(`--request-type`)??`vendor`,n=e.get(`--recipient`)??`device`;if(!DR.has(t))throw Error(`invalid --request-type: '${t}'`);if(!OR.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 AR(e){let t=ti(e.stdin),n=new Uint8Array(t.length);for(let e=0;e<t.length;e++)n[e]=t.charCodeAt(e)&255;return n}function jR(e){return Array.from(e,e=>e.toString(16).padStart(2,`0`)).join(` `)}function MR(e){return`0x${e.toString(16).padStart(4,`0`)}`}function NR(e){let t=[e.manufacturerName,e.productName].filter(Boolean).join(` `)||`(unknown)`,n=e.serialNumber?` serial=${e.serialNumber}`:``,r=e.opened?` [open]`:``;return`${e.handle}\t${MR(e.vendorId)}:${MR(e.productId)}\t${t}${n}${r}`}function X(e){return{stdout:e,stderr:``,exitCode:0}}function Z(e){return{stdout:``,stderr:`usb: ${e}\n`,exitCode:1}}const PR=`usb - access USB devices via WebUSB
3135
+ `,lR=[1,5,15],uR=6e4,dR=60*uR,fR=24*dR;function pR(){let e=globalThis.__slicc_pm;return e instanceof Object&&typeof e.list==`function`?e:null}function mR(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 hR(e){let t=Math.max(0,e),n=Math.floor(t/fR),r=Math.floor(t%fR/dR),i=Math.floor(t%dR/uR),a=r>0?`${r}:${String(i).padStart(2,`0`)}`:`${i} min`;return n===0?a:`${n} ${n===1?`day`:`days`}, ${a}`}function gR(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/fR),`day`),r(Math.floor(t%fR/dR),`hour`),r(Math.floor(t%dR/uR),`minute`),n.length===0?`up ${Math.floor(t/1e3)} seconds`:`up ${n.join(`, `)}`}function _R(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 vR(e){let t=new Date(e),n=e=>String(e).padStart(2,`0`);return`${n(t.getHours())}:${n(t.getMinutes())}:${n(t.getSeconds())}`}function yR(e,t,n){let r=lR.map(r=>mR(e,t,r*uR,n).toFixed(2));return` ${vR(t)} up ${hR(t-n)}, 1 user, load average: ${r.join(`, `)}\n`}function bR(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 xR(e={}){return S(`uptime`,async t=>{let n=bR(t);if(typeof n!=`string`)return{stdout:``,stderr:`uptime: ${n.error}\n${sR}\n`,exitCode:1};if(n===`help`)return{stdout:cR,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():pa();if(n===`since`)return SR(`${_R(i)}\n`);if(n===`pretty`)return SR(`${gR(r-i)}\n`);let a=e.processManager??pR();return SR(yR(a?a.list():[],r,i))})}function SR(e){return{stdout:e,stderr:``,exitCode:0}}const CR=new Set([`--vid`,`--pid`,`--class`,`--subclass`,`--protocol`,`--serial`,`--request-type`,`--recipient`,`--request`,`--value`,`--index`,`--__resolved`]);function wR(e){return yn(e,CR)}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 TR(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`]),DR=new Set([`device`,`interface`,`endpoint`,`other`]);function OR(e){let t=e.get(`--request-type`)??`vendor`,n=e.get(`--recipient`)??`device`;if(!ER.has(t))throw Error(`invalid --request-type: '${t}'`);if(!DR.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 kR(e){let t=ti(e.stdin),n=new Uint8Array(t.length);for(let e=0;e<t.length;e++)n[e]=t.charCodeAt(e)&255;return n}function AR(e){return Array.from(e,e=>e.toString(16).padStart(2,`0`)).join(` `)}function jR(e){return`0x${e.toString(16).padStart(4,`0`)}`}function MR(e){let t=[e.manufacturerName,e.productName].filter(Boolean).join(` `)||`(unknown)`,n=e.serialNumber?` serial=${e.serialNumber}`:``,r=e.opened?` [open]`:``;return`${e.handle}\t${jR(e.vendorId)}:${jR(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 NR=`usb - access USB devices via WebUSB
3136
3136
 
3137
3137
  Usage: usb <subcommand> [options]
3138
3138
 
@@ -3171,9 +3171,9 @@ Options:
3171
3171
  -h, --help
3172
3172
 
3173
3173
  Transfers are capped at ${ei} bytes (4 MiB).
3174
- `;function FR(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?`${jR(e)}\n`:``)}async function IR(e){let t=await e.list();return t.length===0?X(`no granted USB devices
3175
- `):X(`${t.map(NR).join(`
3176
- `)}\n`)}async function LR(e,t){let n=e.get(`--__resolved`);if(n)return X(`${NR(await t.info(n))}\n`);let r=ER(e),i=Se();if(i){let e=await Cx(`usb-device`,r,i);if(e.handle)return X(`${NR(await t.info(e.handle))}\n`);let n=e.info,a=Qr();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=$r().register(o);return X(`${NR(Zr(s,o))}\n`)}return X(`${NR(await t.request(r))}\n`)}async function RR(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 zR(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 BR(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 VR(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`):FR((await n.controlIn(i,kR(t),o)).bytes,r)}async function UR(e,t,n,r){let i=e[1];if(!i)return Z(`control-out: handle required`);let a=AR(t);return a.length>4194304?Z(`control-out payload exceeds 4 MiB limit`):X(`${(await r.controlOut(i,kR(n),a)).bytesWritten} bytes written\n`)}async function WR(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`):FR((await n.transferIn(i,Y(a,`endpoint`),s)).bytes,r)}async function GR(e,t,n,r){let[,i,a]=e;if(!i||a===void 0)return Z(`transfer-out: handle and endpoint required`);let o=AR(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 KR(e,t,n){let{positionals:r,flags:i,bools:a}=TR(e),o=r[0],s=a.has(`--raw`);switch(o){case`list`:return IR(n);case`request`:return LR(i,n);case`open`:case`close`:case`reset`:return RR(o,r,n,a);case`clear-halt`:return zR(r,n);case`select-config`:return BR(r,n);case`claim`:case`release`:return VR(o,r,n,a);case`control-in`:return HR(r,i,n,s);case`control-out`:return UR(r,t,i,n);case`transfer-in`:return WR(r,i,n,s);case`transfer-out`:return GR(r,t,i,n);default:return Z(`unknown subcommand '${o??``}'. Try 'usb --help'.`)}}function qR(){return S(`usb`,async(e,t)=>{if(e.length===0||e.includes(`--help`)||e.includes(`-h`))return X(PR);let n=Nr(ce(),y());if(!n)return Z(`WebUSB is unavailable in this environment`);try{return await KR(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 JR=`/workspace/.v86`,YR=`v86 - run an x86 virtual machine (v86 wasm engine)
3174
+ `;function PR(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?`${AR(e)}\n`:``)}async function FR(e){let t=await e.list();return t.length===0?X(`no granted USB devices
3175
+ `):X(`${t.map(MR).join(`
3176
+ `)}\n`)}async function IR(e,t){let n=e.get(`--__resolved`);if(n)return X(`${MR(await t.info(n))}\n`);let r=TR(e),i=Se();if(i){let e=await wx(`usb-device`,r,i);if(e.handle)return X(`${MR(await t.info(e.handle))}\n`);let n=e.info,a=Qr();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=$r().register(o);return X(`${MR(Zr(s,o))}\n`)}return X(`${MR(await t.request(r))}\n`)}async function LR(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 RR(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 zR(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 BR(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 VR(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`):PR((await n.controlIn(i,OR(t),o)).bytes,r)}async function HR(e,t,n,r){let i=e[1];if(!i)return Z(`control-out: handle required`);let a=kR(t);return a.length>4194304?Z(`control-out payload exceeds 4 MiB limit`):X(`${(await r.controlOut(i,OR(n),a)).bytesWritten} bytes written\n`)}async function UR(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`):PR((await n.transferIn(i,Y(a,`endpoint`),s)).bytes,r)}async function WR(e,t,n,r){let[,i,a]=e;if(!i||a===void 0)return Z(`transfer-out: handle and endpoint required`);let o=kR(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 GR(e,t,n){let{positionals:r,flags:i,bools:a}=wR(e),o=r[0],s=a.has(`--raw`);switch(o){case`list`:return FR(n);case`request`:return IR(i,n);case`open`:case`close`:case`reset`:return LR(o,r,n,a);case`clear-halt`:return RR(r,n);case`select-config`:return zR(r,n);case`claim`:case`release`:return BR(o,r,n,a);case`control-in`:return VR(r,i,n,s);case`control-out`:return HR(r,t,i,n);case`transfer-in`:return UR(r,i,n,s);case`transfer-out`:return WR(r,t,i,n);default:return Z(`unknown subcommand '${o??``}'. Try 'usb --help'.`)}}function KR(){return S(`usb`,async(e,t)=>{if(e.length===0||e.includes(`--help`)||e.includes(`-h`))return X(NR);let n=Nr(ce(),y());if(!n)return Z(`WebUSB is unavailable in this environment`);try{return await GR(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 qR=`/workspace/.v86`,JR=`v86 - run an x86 virtual machine (v86 wasm engine)
3177
3177
 
3178
3178
  Requires: ${N} v86@${QD}
3179
3179
 
@@ -3209,7 +3209,7 @@ Boot options (QEMU-flavored):
3209
3209
  proxy — no gateway needed, https upstream via the proxy
3210
3210
  -vga <MiB> SVGA/VBE video memory (default 8, max 64) —
3211
3211
  raise for high-res VESA modes (1080p32 needs ~9)
3212
- -bios <path> -vgabios <path> BIOS blobs (default ${JR}/{seabios,vgabios}.bin)
3212
+ -bios <path> -vgabios <path> BIOS blobs (default ${qR}/{seabios,vgabios}.bin)
3213
3213
  -nographic Serial-only guest (skip VGA)
3214
3214
 
3215
3215
  Notes:
@@ -3217,19 +3217,19 @@ Notes:
3217
3217
  (Alpine, FreeDOS, Buildroot Linux) work best.
3218
3218
  - The copy.sh Arch Linux image boots via -state + -fs9p; see the v86 skill.
3219
3219
  - BIOS blobs are not bundled; download once:
3220
- mkdir -p ${JR}
3221
- curl -o ${JR}/seabios.bin https://raw.githubusercontent.com/copy/v86/master/bios/seabios.bin
3222
- curl -o ${JR}/vgabios.bin https://raw.githubusercontent.com/copy/v86/master/bios/vgabios.bin
3223
- `,XR=`v86: BIOS images not found. Download them once:
3224
- mkdir -p ${JR}
3225
- curl -o ${JR}/seabios.bin https://raw.githubusercontent.com/copy/v86/master/bios/seabios.bin
3226
- curl -o ${JR}/vgabios.bin https://raw.githubusercontent.com/copy/v86/master/bios/vgabios.bin
3227
- or pass -bios / -vgabios with explicit VFS paths.`,ZR={"-n":QR,"-name":QR,"--name":QR,"-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)=>$R(e,`cdrom`,t),"-hda":(e,t)=>$R(e,`hda`,t),"-fda":(e,t)=>$R(e,`fda`,t),"-kernel":(e,t)=>$R(e,`kernel`,t),"-initrd":(e,t)=>$R(e,`initrd`,t),"-append":(e,t)=>$R(e,`append`,t),"-bios":(e,t)=>$R(e,`bios`,t),"-vgabios":(e,t)=>$R(e,`vgabios`,t),"-state":(e,t)=>$R(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 QR(e,t){return/^[A-Za-z0-9_-]+$/.test(t)?(e.name=t,null):`invalid VM name '${t}'`}function $R(e,t,n){return e[t]=n,null}const ez=[...Object.keys(ZR),`--fps`,`--tail`,`--send`,`--to`];function tz(e){let t={name:`vm0`,memoryMib:128,vgaMemoryMib:8,nographic:!1};for(let n=0;n<e.length;n++){let r=e[n];if(r===`-nographic`){t.nographic=!0;continue}let i=Object.hasOwn(ZR,r)?ZR[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 nz(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 rz(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 iz(e){return sa(e)||Q(`no VM named '${e}' — boot one with \`v86 start -n ${e} ...\``)}function az(e){return`exitCode`in e}async function oz(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 sz={a:801,c:306,d:531};function cz(){let e=globalThis.__slicc_pm;return e instanceof Object&&typeof e.signal==`function`?e:null}function lz(e={}){return S(`v86`,async(t,n)=>{if(t.length===0||t[0]===`--help`||t[0]===`-h`||t[0]===`help`)return $(YR);if(t[0]===`--version`)return uz(n,e);let r=t[0];if(w(t.slice(1),{valueFlags:ez}))return $(et(`v86`,r,YR,{prefix:`v86`}));let i=$e(t.slice(1));try{switch(r){case`start`:return await gz(i,n,e);case`ls`:return vz();case`type`:return await Sz(i,n);case`key`:return await Cz(i,n);case`mouse`:return await Tz(i,n);case`screenshot`:return await Ez(i,n);case`text`:return await Dz(i,n);case`serve`:return Oz(i);case`serial`:return kz(i);case`state`:return await Az(i,n);case`stop`:return await jz(i,e);default:return Q(`unknown subcommand '${r}' — see \`v86 --help\``)}}catch(e){return Q(e instanceof Error?e.message:String(e))}})}async function uz(e,t){if(t.loadEngine)return $(`v86 ${(await t.loadEngine(nz(e))).version} (qemu-flavored CLI)\n`);let n=await iO(nz(e));return n?$(`v86 ${n.version} (qemu-flavored CLI)\n`):Q($D)}async function dz(e,t,n){if(e.state&&!e.bios&&!e.vgabios)return null;let r=await oz(t,e.bios??`${JR}/seabios.bin`,`-bios`);if(`exitCode`in r)return e.bios?r:Q(XR.replace(/^v86: /u,``));if(n.bios=r,e.nographic)return null;let i=await oz(t,e.vgabios??`${JR}/vgabios.bin`,`-vgabios`);return`exitCode`in i?e.vgabios?i:Q(XR.replace(/^v86: /u,``)):(n.vga_bios=i,null)}async function fz(e,t,n){let r=await dz(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 oz(t,a,`-${r}`);if(`exitCode`in o)return o;n[i]=o}if(e.append&&(n.cmdline=e.append),e.boot&&(n.boot_order=sz[e.boot]),e.state){let r=await oz(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 pz=6e4;function mz(e){return e.v86?Promise.resolve():new Promise((t,n)=>{let r=setTimeout(()=>n(Error(`engine init timed out after ${pz/1e3}s`)),pz);e.add_listener(`emulator-loaded`,()=>{clearTimeout(r),t()})})}function hz(e,t){let n=e.network_adapter;if(!n||typeof n.fetch!=`function`)return Q(`relay=fetch: engine exposed no fetch-relay network adapter`);let r=t.proxiedFetch??p();return n.fetch=async(e,t)=>{let n=e.replace(/^http:\/\/(?!localhost[:/]|127\.0\.0\.1[:/])/u,`https://`),i={};t?.headers?.forEach((e,t)=>{i[t]=e});let a;if(t?.body){let e=``;for(let n of t.body)e+=String.fromCharCode(n);a=e}let o=await r(n,{method:t?.method,headers:i,body:a}),s=o.body,c=s.buffer.slice(s.byteOffset,s.byteOffset+s.byteLength);return{status:o.status,statusText:o.statusText,headers:new Headers(o.headers),redirected:!1,url:o.url,arrayBuffer:async()=>c}},null}async function gz(e,t,n){let r=tz(e);if(!r.ok)return Q(r.error);let i=r.parsed;if(sa(i.name))return Q(`VM '${i.name}' already running — stop it first or pick another -n name`);let a=nz(t),o=n.loadEngine?await n.loadEngine(a):await tO({ipk:a}),s={wasm_fn:oO(o.wasmModule),memory_size:i.memoryMib*1024*1024,vga_memory_size:i.vgaMemoryMib*1024*1024,autostart:!1,disable_speaker:!0,fastboot:!0},c=await fz(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??cz();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`,()=>{_z(u,d)})}oa(u);try{if(await mz(l),i.netRelay===`fetch`){let e=hz(l,n);if(e)return await _z(u,d),e}aa(u),await l.run()}catch(e){return await _z(u,d),Q(`boot failed: ${e instanceof Error?e.message:String(e)}`)}u.onScreenChange=()=>{import(`./registry-DfuJBCKY.js`).then(({getComputerRegistry:e})=>{e()?.refresh(`v86:${u.name}`)})},import(`./v86-DKE8ZbX9.js`).then(({registerV86Computer:e})=>e(u)).catch(()=>{});let f=u.pid===null?``:` (pid ${u.pid})`;return $(`VM '${i.name}' booting in the background${f}.\nDrive it with: v86 text -n ${i.name} | v86 screenshot -n ${i.name} | v86 type -n ${i.name} "..."\n`)}async function _z(e,t){ca(e),ia(e.name),import(`./v86-DKE8ZbX9.js`).then(({unregisterV86Computer:t})=>t(e.name)).catch(()=>{});try{e.emulator.is_running()&&await e.emulator.stop()}catch{}try{await e.emulator.destroy()}catch{}t&&e.pid!==null&&t.exit(e.pid,null)}function vz(){let e=ra();if(e.length===0)return $(`no VMs running
3220
+ mkdir -p ${qR}
3221
+ curl -o ${qR}/seabios.bin https://raw.githubusercontent.com/copy/v86/master/bios/seabios.bin
3222
+ curl -o ${qR}/vgabios.bin https://raw.githubusercontent.com/copy/v86/master/bios/vgabios.bin
3223
+ `,YR=`v86: BIOS images not found. Download them once:
3224
+ mkdir -p ${qR}
3225
+ curl -o ${qR}/seabios.bin https://raw.githubusercontent.com/copy/v86/master/bios/seabios.bin
3226
+ curl -o ${qR}/vgabios.bin https://raw.githubusercontent.com/copy/v86/master/bios/vgabios.bin
3227
+ or pass -bios / -vgabios with explicit VFS paths.`,XR={"-n":ZR,"-name":ZR,"--name":ZR,"-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)=>QR(e,`cdrom`,t),"-hda":(e,t)=>QR(e,`hda`,t),"-fda":(e,t)=>QR(e,`fda`,t),"-kernel":(e,t)=>QR(e,`kernel`,t),"-initrd":(e,t)=>QR(e,`initrd`,t),"-append":(e,t)=>QR(e,`append`,t),"-bios":(e,t)=>QR(e,`bios`,t),"-vgabios":(e,t)=>QR(e,`vgabios`,t),"-state":(e,t)=>QR(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 ZR(e,t){return/^[A-Za-z0-9_-]+$/.test(t)?(e.name=t,null):`invalid VM name '${t}'`}function QR(e,t,n){return e[t]=n,null}const $R=[...Object.keys(XR),`--fps`,`--tail`,`--send`,`--to`];function ez(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(XR,r)?XR[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 tz(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 nz(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 rz(e){return sa(e)||Q(`no VM named '${e}' — boot one with \`v86 start -n ${e} ...\``)}function iz(e){return`exitCode`in e}async function az(e,t,n){let r=e.fs.resolvePath(e.cwd,t);if(!await e.fs.exists(r))return Q(`${n}: no such file: ${t}`);let i=await e.fs.readFileBuffer(r),a=new ArrayBuffer(i.byteLength);return new Uint8Array(a).set(i),{buffer:a}}const oz={a:801,c:306,d:531};function sz(){let e=globalThis.__slicc_pm;return e instanceof Object&&typeof e.signal==`function`?e:null}function cz(e={}){return S(`v86`,async(t,n)=>{if(t.length===0||t[0]===`--help`||t[0]===`-h`||t[0]===`help`)return $(JR);if(t[0]===`--version`)return lz(n,e);let r=t[0];if(w(t.slice(1),{valueFlags:$R}))return $(et(`v86`,r,JR,{prefix:`v86`}));let i=$e(t.slice(1));try{switch(r){case`start`:return await hz(i,n,e);case`ls`:return _z();case`type`:return await xz(i,n);case`key`:return await Sz(i,n);case`mouse`:return await wz(i,n);case`screenshot`:return await Tz(i,n);case`text`:return await Ez(i,n);case`serve`:return Dz(i);case`serial`:return Oz(i);case`state`:return await kz(i,n);case`stop`:return await Az(i,e);default:return Q(`unknown subcommand '${r}' — see \`v86 --help\``)}}catch(e){return Q(e instanceof Error?e.message:String(e))}})}async function lz(e,t){if(t.loadEngine)return $(`v86 ${(await t.loadEngine(tz(e))).version} (qemu-flavored CLI)\n`);let n=await iO(tz(e));return n?$(`v86 ${n.version} (qemu-flavored CLI)\n`):Q($D)}async function uz(e,t,n){if(e.state&&!e.bios&&!e.vgabios)return null;let r=await az(t,e.bios??`${qR}/seabios.bin`,`-bios`);if(`exitCode`in r)return e.bios?r:Q(YR.replace(/^v86: /u,``));if(n.bios=r,e.nographic)return null;let i=await az(t,e.vgabios??`${qR}/vgabios.bin`,`-vgabios`);return`exitCode`in i?e.vgabios?i:Q(YR.replace(/^v86: /u,``)):(n.vga_bios=i,null)}async function dz(e,t,n){let r=await uz(e,t,n);if(r)return r;for(let[r,i]of[[`cdrom`,`cdrom`],[`hda`,`hda`],[`fda`,`fda`],[`kernel`,`bzimage`],[`initrd`,`initrd`]]){let a=e[r];if(!a)continue;let o=await az(t,a,`-${r}`);if(`exitCode`in o)return o;n[i]=o}if(e.append&&(n.cmdline=e.append),e.boot&&(n.boot_order=oz[e.boot]),e.state){let r=await az(t,e.state,`-state`);if(`exitCode`in r)return r;n.initial_state=r}return e.fs9p&&(n.filesystem={baseurl:e.fs9p}),e.net&&(n.net_device=e.netRelay===`fetch`?{type:e.net,relay_url:`fetch`}:{type:e.net}),null}const fz=6e4;function pz(e){return e.v86?Promise.resolve():new Promise((t,n)=>{let r=setTimeout(()=>n(Error(`engine init timed out after ${fz/1e3}s`)),fz);e.add_listener(`emulator-loaded`,()=>{clearTimeout(r),t()})})}function mz(e,t){let n=e.network_adapter;if(!n||typeof n.fetch!=`function`)return Q(`relay=fetch: engine exposed no fetch-relay network adapter`);let r=t.proxiedFetch??p();return n.fetch=async(e,t)=>{let n=e.replace(/^http:\/\/(?!localhost[:/]|127\.0\.0\.1[:/])/u,`https://`),i={};t?.headers?.forEach((e,t)=>{i[t]=e});let a;if(t?.body){let e=``;for(let n of t.body)e+=String.fromCharCode(n);a=e}let o=await r(n,{method:t?.method,headers:i,body:a}),s=o.body,c=s.buffer.slice(s.byteOffset,s.byteOffset+s.byteLength);return{status:o.status,statusText:o.statusText,headers:new Headers(o.headers),redirected:!1,url:o.url,arrayBuffer:async()=>c}},null}async function hz(e,t,n){let r=ez(e);if(!r.ok)return Q(r.error);let i=r.parsed;if(sa(i.name))return Q(`VM '${i.name}' already running — stop it first or pick another -n name`);let a=tz(t),o=n.loadEngine?await n.loadEngine(a):await tO({ipk:a}),s={wasm_fn:oO(o.wasmModule),memory_size:i.memoryMib*1024*1024,vga_memory_size:i.vgaMemoryMib*1024*1024,autostart:!1,disable_speaker:!0,fastboot:!0},c=await dz(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??sz();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`,()=>{gz(u,d)})}oa(u);try{if(await pz(l),i.netRelay===`fetch`){let e=mz(l,n);if(e)return await gz(u,d),e}aa(u),await l.run()}catch(e){return await gz(u,d),Q(`boot failed: ${e instanceof Error?e.message:String(e)}`)}u.onScreenChange=()=>{import(`./registry-DfuJBCKY.js`).then(({getComputerRegistry:e})=>{e()?.refresh(`v86:${u.name}`)})},import(`./v86-DKE8ZbX9.js`).then(({registerV86Computer:e})=>e(u)).catch(()=>{});let f=u.pid===null?``:` (pid ${u.pid})`;return $(`VM '${i.name}' booting in the background${f}.\nDrive it with: v86 text -n ${i.name} | v86 screenshot -n ${i.name} | v86 type -n ${i.name} "..."\n`)}async function gz(e,t){ca(e),ia(e.name),import(`./v86-DKE8ZbX9.js`).then(({unregisterV86Computer:t})=>t(e.name)).catch(()=>{});try{e.emulator.is_running()&&await e.emulator.stop()}catch{}try{await e.emulator.destroy()}catch{}t&&e.pid!==null&&t.exit(e.pid,null)}function _z(){let e=ra();if(e.length===0)return $(`no VMs running
3228
3228
  `);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(`
3229
- `)}\n`)}function yz(e,t){return`prefer: computer ${e} -c ${t}\n`}async function bz(e,t,n,r){let i=iz(t);if(az(i))return i;let[{runComputer:a},{getComputerRegistry:o,installComputerRegistry:s},c]=await Promise.all([import(`./run-C-SsGj7G.js`).then(e=>e.t),import(`./registry-DfuJBCKY.js`),import(`./v86-DKE8ZbX9.js`)]),l=c.v86ComputerId(t),u=o()??s(null);return u.get(l)||c.registerV86Computer(i,u),xz(await a([`-c`,l,...n],e,{registry:u}),r,l)}function xz(e,t,n){let r=yz(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}=rz(e);if(r.length===0){let e=iz(n);return az(e)?e:Q(`type: no text supplied`)}return bz(t,n,[`type`,`--`,...r],`type`)}async function Cz(e,t){let{name:n,rest:r}=rz(e);if(r.length===0){let e=iz(n);return az(e)?e:Q(`key: no chord supplied`)}return bz(t,n,[`key`,...r],`key`)}const wz=[`left`,`middle`,`right`];async function Tz(e,t){let{name:n,rest:r}=rz(e),i=iz(n);if(az(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?bz(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>`):bz(t,n,[`--native`,`mousemove`,e,i,`--relative`],`mousemove`)}if(o===`click`){let e=r[1]??`left`;if(!wz.includes(e))return Q(`mouse: unknown button '${r[1]}'`);let i=[`click`,e];return r.includes(`--double`)&&i.push(`--repeat`,`2`),bz(t,n,i,`click`)}return Q(`mouse: expected move <dx> <dy>, click [button], or --to <x>,<y>`)}async function Ez(e,t){let{name:n,rest:r}=rz(e);return bz(t,n,[`screenshot`,...r],`screenshot`)}async function Dz(e,t){let{name:n}=rz(e);return bz(t,n,[`text`],`text`)}function Oz(e){let{name:t}=rz(e);return $(`v86 serve is retired.\nUse: computer watch -c v86:${t}\nLive frames go to the overlay, lightbox, and bash rows.\n`)}function kz(e){let{name:t,rest:n}=rz(e),r=iz(t);if(az(r))return r;let i=n.indexOf(`--send`);if(i!==-1){let e=n.slice(i+1).join(` `).replace(/\\n/gu,`
3229
+ `)}\n`)}function vz(e,t){return`prefer: computer ${e} -c ${t}\n`}async function yz(e,t,n,r){let i=rz(t);if(iz(i))return i;let[{runComputer:a},{getComputerRegistry:o,installComputerRegistry:s},c]=await Promise.all([import(`./run-C-SsGj7G.js`).then(e=>e.t),import(`./registry-DfuJBCKY.js`),import(`./v86-DKE8ZbX9.js`)]),l=c.v86ComputerId(t),u=o()??s(null);return u.get(l)||c.registerV86Computer(i,u),bz(await a([`-c`,l,...n],e,{registry:u}),r,l)}function bz(e,t,n){let r=vz(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 xz(e,t){let{name:n,rest:r}=nz(e);if(r.length===0){let e=rz(n);return iz(e)?e:Q(`type: no text supplied`)}return yz(t,n,[`type`,`--`,...r],`type`)}async function Sz(e,t){let{name:n,rest:r}=nz(e);if(r.length===0){let e=rz(n);return iz(e)?e:Q(`key: no chord supplied`)}return yz(t,n,[`key`,...r],`key`)}const Cz=[`left`,`middle`,`right`];async function wz(e,t){let{name:n,rest:r}=nz(e),i=rz(n);if(iz(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?yz(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>`):yz(t,n,[`--native`,`mousemove`,e,i,`--relative`],`mousemove`)}if(o===`click`){let e=r[1]??`left`;if(!Cz.includes(e))return Q(`mouse: unknown button '${r[1]}'`);let i=[`click`,e];return r.includes(`--double`)&&i.push(`--repeat`,`2`),yz(t,n,i,`click`)}return Q(`mouse: expected move <dx> <dy>, click [button], or --to <x>,<y>`)}async function Tz(e,t){let{name:n,rest:r}=nz(e);return yz(t,n,[`screenshot`,...r],`screenshot`)}async function Ez(e,t){let{name:n}=nz(e);return yz(t,n,[`text`],`text`)}function Dz(e){let{name:t}=nz(e);return $(`v86 serve is retired.\nUse: computer watch -c v86:${t}\nLive frames go to the overlay, lightbox, and bash rows.\n`)}function Oz(e){let{name:t,rest:n}=nz(e),r=rz(t);if(iz(r))return r;let i=n.indexOf(`--send`);if(i!==-1){let e=n.slice(i+1).join(` `).replace(/\\n/gu,`
3230
3230
  `);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(`
3231
3231
  `).slice(-Math.max(1,e)).join(`
3232
- `)}\n`)}return $(r.serial.buffer?`${r.serial.buffer}\n`:``)}async function Az(e,t){let{name:n,rest:r}=rz(e),i=iz(n);if(az(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 jz(e,t){let{name:n,rest:r}=rz(e),i=iz(n);if(az(i))return i;let a=t.processManager??cz();return r.includes(`--force`)&&a&&i.pid!==null?(a.signal(i.pid,`SIGKILL`),$(`VM '${n}' killed\n`)):(await _z(i,a),$(`VM '${n}' stopped\n`))}const Mz=[`--name`,`--filter`,`--scoop`],Nz={state:`inactive`,session:null};function Pz(){return{stdout:`usage: webhook <command> [options]
3232
+ `)}\n`)}return $(r.serial.buffer?`${r.serial.buffer}\n`:``)}async function kz(e,t){let{name:n,rest:r}=nz(e),i=rz(n);if(iz(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 Az(e,t){let{name:n,rest:r}=nz(e),i=rz(n);if(iz(i))return i;let a=t.processManager??sz();return r.includes(`--force`)&&a&&i.pid!==null?(a.signal(i.pid,`SIGKILL`),$(`VM '${n}' killed\n`)):(await gz(i,a),$(`VM '${n}' stopped\n`))}const jz=[`--name`,`--filter`,`--scoop`],Mz={state:`inactive`,session:null};function Nz(){return{stdout:`usage: webhook <command> [options]
3233
3233
 
3234
3234
  Commands:
3235
3235
  create [--scoop <name>] [--name <name>] [--filter <code>] Create a new webhook endpoint
@@ -3249,21 +3249,21 @@ Examples:
3249
3249
  webhook create --scoop slack-relay --name slack --filter "(e) => ({ text: e.body.text, user: e.body.user })"
3250
3250
  webhook list
3251
3251
  webhook delete abc123
3252
- `,stderr:``,exitCode:0}}function Fz(e){return e().session?.webhookUrl??null}function Iz(e,t,n){return t?la(t,e):n()?ua(self.location.href,e):`(URL unavailable — connect a leader tray)`}function Lz(e){return{stdout:``,stderr:`webhook ${e}: kernel host has not booted yet — try again in a moment\n`,exitCode:1}}async function Rz(e){if(e.length!==1)return{stdout:``,stderr:`webhook rotate: takes no arguments
3252
+ `,stderr:``,exitCode:0}}function Pz(e){return e().session?.webhookUrl??null}function Fz(e,t,n){return t?la(t,e):n()?ua(self.location.href,e):`(URL unavailable — connect a leader tray)`}function Iz(e){return{stdout:``,stderr:`webhook ${e}: kernel host has not booted yet — try again in a moment\n`,exitCode:1}}async function Lz(e){if(e.length!==1)return{stdout:``,stderr:`webhook rotate: takes no arguments
3253
3253
  `,exitCode:1};let t=y();if(!t)return{stdout:``,stderr:`webhook rotate: no leader panel connected
3254
3254
  `,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.
3255
3255
  `,stderr:``,exitCode:0}}catch{return{stdout:``,stderr:`webhook rotate: rotation failed; reconnect the leader and retry
3256
- `,exitCode:1}}}async function zz(e,t,n){let r=C(e.slice(1),{value:Mz});if(`error`in r)return{stdout:``,stderr:`webhook create: ${r.error}\n`,exitCode:1};let i=r.values.get(`--name`)??`default`,a=r.values.get(`--filter`),o=zi(r.values.get(`--scoop`),n);if(!t.hasLocalNodeServer()&&a)return{stdout:``,stderr:`webhook create: --filter is not supported in extension mode (CSP forbids dynamic eval) — drop --filter, or use standalone CLI mode
3257
- `,exitCode:1};let s=Hz(t);if(s)return s;let c=await ty();if(!c)return Lz(`create`);let l=await ry(c,`webhook create`,r.values.get(`--scoop`));if(l)return{stdout:``,stderr:l,exitCode:1};let u=await c.createWebhook(i,o,a),d=Uz(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 Bz(e,t){let n=C(e.slice(1),{});if(`error`in n)return{stdout:``,stderr:`webhook list: ${n.error}\n`,exitCode:1};let r=await ty();if(!r)return Lz(`list`);let i=await r.listWebhooks();if(i.length===0)return{stdout:`No active webhooks
3258
- `,stderr:``,exitCode:0};let{trayUrlBase:a,urlResolutionError:o}=Wz(t);return{stdout:Gz(i.map(e=>({id:e.id,name:e.name,url:Iz(e.id,a,t.hasLocalNodeServer),createdAt:e.createdAt,filter:e.filter,scoop:e.scoop})),a,o,t.hasLocalNodeServer),stderr:``,exitCode:0}}async function Vz(e,t){let n=C(e.slice(1),{});if(`error`in n)return{stdout:``,stderr:`webhook delete: ${n.error}\n`,exitCode:1};let r=n.positionals[0];if(n.positionals.length>1)return{stdout:``,stderr:`webhook delete: requires exactly one ID
3256
+ `,exitCode:1}}}async function Rz(e,t,n){let r=C(e.slice(1),{value:jz});if(`error`in r)return{stdout:``,stderr:`webhook create: ${r.error}\n`,exitCode:1};let i=r.values.get(`--name`)??`default`,a=r.values.get(`--filter`),o=zi(r.values.get(`--scoop`),n);if(!t.hasLocalNodeServer()&&a)return{stdout:``,stderr:`webhook create: --filter is not supported in extension mode (CSP forbids dynamic eval) — drop --filter, or use standalone CLI mode
3257
+ `,exitCode:1};let s=Vz(t);if(s)return s;let c=await ty();if(!c)return Iz(`create`);let l=await ry(c,`webhook create`,r.values.get(`--scoop`));if(l)return{stdout:``,stderr:l,exitCode:1};let u=await c.createWebhook(i,o,a),d=Hz(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 zz(e,t){let n=C(e.slice(1),{});if(`error`in n)return{stdout:``,stderr:`webhook list: ${n.error}\n`,exitCode:1};let r=await ty();if(!r)return Iz(`list`);let i=await r.listWebhooks();if(i.length===0)return{stdout:`No active webhooks
3258
+ `,stderr:``,exitCode:0};let{trayUrlBase:a,urlResolutionError:o}=Uz(t);return{stdout:Wz(i.map(e=>({id:e.id,name:e.name,url:Fz(e.id,a,t.hasLocalNodeServer),createdAt:e.createdAt,filter:e.filter,scoop:e.scoop})),a,o,t.hasLocalNodeServer),stderr:``,exitCode:0}}async function Bz(e,t){let n=C(e.slice(1),{});if(`error`in n)return{stdout:``,stderr:`webhook delete: ${n.error}\n`,exitCode:1};let r=n.positionals[0];if(n.positionals.length>1)return{stdout:``,stderr:`webhook delete: requires exactly one ID
3259
3259
  `,exitCode:1};if(!r)return{stdout:``,stderr:`webhook delete: requires an ID
3260
- `,exitCode:1};let i=await ty();if(!i)return Lz(`delete`);let a=y();try{if(a){if((await a.call(`tray-webhook-revoke`,{webhookId:r}))?.ok!==!0)throw Error(`revocation not acknowledged`)}else if(t.getLeaderStatus().session?.webhookUrl?.includes(`/wh/`))throw Error(`no leader panel`)}catch{return{stdout:``,stderr:`webhook delete: revocation failed; registration retained, reconnect the leader and retry
3261
- `,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(!Fz(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}")`)+`
3262
- `,exitCode:1}}return null}function Uz(e,t){try{return Iz(e,Fz(t.getLeaderStatus),t.hasLocalNodeServer)}catch(e){return`(URL resolution failed: ${e instanceof Error?e.message:String(e)})`}}function Wz(e){try{return{trayUrlBase:Fz(e.getLeaderStatus),urlResolutionError:null}}catch(e){return{trayUrlBase:null,urlResolutionError:e instanceof Error?e.message:String(e)}}}function Gz(e,t,n,r){let i=`Active webhooks:
3260
+ `,exitCode:1};let i=await ty();if(!i)return Iz(`delete`);let a=y();try{if(a){if((await a.call(`tray-webhook-revoke`,{webhookId:r}))?.ok!==!0)throw Error(`revocation not acknowledged`)}else if(t.getLeaderStatus().session?.webhookUrl?.includes(`/wh/`))throw Error(`no leader panel`)}catch{return{stdout:``,stderr:`webhook delete: revocation failed; registration retained, reconnect the leader and retry
3261
+ `,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 Vz(e){if(e.hasLocalNodeServer())return null;if(!Pz(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}")`)+`
3262
+ `,exitCode:1}}return null}function Hz(e,t){try{return Fz(e,Pz(t.getLeaderStatus),t.hasLocalNodeServer)}catch(e){return`(URL resolution failed: ${e instanceof Error?e.message:String(e)})`}}function Uz(e){try{return{trayUrlBase:Pz(e.getLeaderStatus),urlResolutionError:null}}catch(e){return{trayUrlBase:null,urlResolutionError:e instanceof Error?e.message:String(e)}}}function Wz(e,t,n,r){let i=`Active webhooks:
3263
3263
  `;for(let t of e)i+=` ${t.id} ${t.name.padEnd(20)} ${t.url}`,t.scoop&&(i+=` -> ${t.scoop}`),t.filter&&(i+=` [filtered]`),i+=`
3264
3264
  `;return n?i+=`\nNote: webhook URL resolution failed (${n}). Try again once the tray is connected.\n`:!r()&&!t&&(i+=`
3265
3265
  Note: webhook URLs require a leader tray. Configure one in Settings to expose POST endpoints.
3266
- `),i}function Kz(e={}){let t={hasLocalNodeServer:e.hasLocalNodeServer??(()=>!0),getLeaderStatus:e.getLeaderStatus??(()=>Nz)};return S(`webhook`,async(e,n)=>{if(e.length===0)return Pz();let r=e[0];if(w(e,{valueFlags:r===`create`?Mz:void 0}))return Pz();try{switch(r){case`create`:return await zz(e,t,n.env);case`list`:return await Bz(e,t);case`delete`:return await Vz(e,t);case`rotate`:return await Rz(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 qz(){return{text:!0,binary:!1,oneMessage:!1,noClose:!1,exitOnEof:!1,unidirectional:!1,unidirectionalReverse:!1,insecure:!1,quiet:!1,verbose:0,nullTerminated:!1,base64:!1,jsonrpc:!1,jsonrpcOmit:!1,bufferSize:65536,connTimeoutMs:3e4,customHeaders:[],showHelp:!1}}function Jz(){return{stdout:`usage: websocat [FLAGS] [OPTIONS] <ws://URL | wss://URL>
3266
+ `),i}function Gz(e={}){let t={hasLocalNodeServer:e.hasLocalNodeServer??(()=>!0),getLeaderStatus:e.getLeaderStatus??(()=>Mz)};return S(`webhook`,async(e,n)=>{if(e.length===0)return Nz();let r=e[0];if(w(e,{valueFlags:r===`create`?jz:void 0}))return Nz();try{switch(r){case`create`:return await Rz(e,t,n.env);case`list`:return await zz(e,t);case`delete`:return await Bz(e,t);case`rotate`:return await Lz(e);default:return{stdout:``,stderr:`webhook: unknown command "${r}"\n`,exitCode:1}}}catch(e){let t=e instanceof Error?e.message:String(e);return{stdout:``,stderr:`webhook ${r??`?`}: ${t}\n`,exitCode:1}}})}function Kz(){return{text:!0,binary:!1,oneMessage:!1,noClose:!1,exitOnEof:!1,unidirectional:!1,unidirectionalReverse:!1,insecure:!1,quiet:!1,verbose:0,nullTerminated:!1,base64:!1,jsonrpc:!1,jsonrpcOmit:!1,bufferSize:65536,connTimeoutMs:3e4,customHeaders:[],showHelp:!1}}function qz(){return{stdout:`usage: websocat [FLAGS] [OPTIONS] <ws://URL | wss://URL>
3267
3267
 
3268
3268
  Minimal websocat client. Sends stdin lines as WebSocket messages and prints
3269
3269
  received messages to stdout. Server mode and advanced specifiers (exec:, tcp:,
@@ -3305,14 +3305,14 @@ EXAMPLES:
3305
3305
  echo 'Page.navigate {"url":"https://example.com"}' \\
3306
3306
  | websocat -1 --jsonrpc --jsonrpc-omit-jsonrpc \\
3307
3307
  ws://127.0.0.1:9222/devtools/page/<id>
3308
- `,stderr:``,exitCode:0}}const Yz=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 Xz(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 Zz(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 Qz(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 $z(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 eB(e,t){return t===`-v`?(e.verbose+=1,!0):t===`-vv`&&(e.verbose+=2,!0)}function tB(e,t,n,r,i){let a=Xz(t,n,r,e);return a?(i(a.value),{nextIndex:a.next}):{stop:!0}}function nB(e,t,n,r,i,a,o){let s=Xz(t,n,r,e);if(!s)return{stop:!0};let c=Zz(e,s.value,i,o);return c===null?{stop:!0}:(a(c),{nextIndex:s.next})}function rB(e,t){return t.some(t=>e===t||e.startsWith(`${t}=`))}const iB=[(e,t,n,r)=>{if(!rB(r,[`--close-status-code`]))return null;let i=Xz(t,n,`--close-status-code`,e);if(!i)return{stop:!0};let a=Qz(e,i.value);return a===null?{stop:!0}:(e.closeStatus=a,{nextIndex:i.next})},(e,t,n,r)=>rB(r,[`--close-reason`])?tB(e,t,n,`--close-reason`,t=>{e.closeReason=t}):null,(e,t,n,r)=>rB(r,[`-B`,`--buffer-size`])?nB(e,t,n,r===`-B`?`-B`:`--buffer-size`,`--buffer-size`,t=>{e.bufferSize=t}):null,(e,t,n,r)=>rB(r,[`--max-messages`])?nB(e,t,n,`--max-messages`,`--max-messages`,t=>{e.maxMessages=t}):null,(e,t,n,r)=>rB(r,[`--protocol`])?tB(e,t,n,`--protocol`,t=>{e.protocol=t}):null,(e,t,n,r)=>{if(!rB(r,[`--ping-interval`]))return null;let i=Xz(t,n,`--ping-interval`,e);return i?(e.pingInterval=Number(i.value),{nextIndex:i.next}):{stop:!0}},(e,t,n,r)=>rB(r,[`--conn-timeout`])?nB(e,t,n,`--conn-timeout`,`--conn-timeout`,t=>{e.connTimeoutMs=Math.round(t*1e3)},`positive seconds`):null,(e,t,n,r)=>rB(r,[`-H`,`--header`])?tB(e,t,n,r===`-H`?`-H`:`--header`,t=>{e.customHeaders.push(t)}):null];function aB(e,t,n,r){for(let i of iB){let a=i(e,t,n,r);if(a)return a}return null}function oB(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)
3309
- `)}function sB(e){let t=qz();for(let n=0;n<e.length;n+=1){let r=e[n];if(r===`-h`||r===`--help`)return t.showHelp=!0,t;if(Yz.has(r)||Yz.has(r.split(`=`)[0]))return t.error=`websocat: flag '${r}' is not supported in slicc's minimal client\n`,t;if($z(t,r)||eB(t,r))continue;let i=aB(t,e,n,r);if(i){if(`stop`in i)return t;n=i.nextIndex;continue}if(r.startsWith(`-`))return t.error=`websocat: unknown flag '${r}'\n`,t;if(t.url)return t.error=`websocat: extra positional argument '${r}' — advanced mode is not supported\n`,t;t.url=r}return oB(t),t}function cB(e,t){if(!e)return[];let n=t?`\0`:`
3310
- `,r=e.split(n);return r.length>0&&r[r.length-1]===``&&r.pop(),r}function lB(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 uB(e){try{return new TextDecoder(`utf-8`,{fatal:!1}).decode(e)}catch{return t(e)}}function dB(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 fB=1e4;function pB(){let e,t;return{promise:new Promise((n,r)=>{e=n,t=r}),resolve:e,reject:t}}function mB(){let e=!1,t=pB();return{...t,settle:n=>{e||(e=!0,t.resolve(n))}}}function hB(e,t){return e.length?e.join(t)+t:``}function gB(e){return e.length?e.join(`
3308
+ `,stderr:``,exitCode:0}}const Jz=new Set([`-s`,`--server-mode`,`--oneshot`,`--socks5`,`--basic-auth`,`--basic-auth-file`,`--header-to-env`,`--server-header`,`--exec`,`--ws-c-uri`,`--restrict-uri`,`--unlink`,`--strict`,`-S`]);function Yz(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 Xz(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 Zz(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 Qz(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 $z(e,t){return t===`-v`?(e.verbose+=1,!0):t===`-vv`&&(e.verbose+=2,!0)}function eB(e,t,n,r,i){let a=Yz(t,n,r,e);return a?(i(a.value),{nextIndex:a.next}):{stop:!0}}function tB(e,t,n,r,i,a,o){let s=Yz(t,n,r,e);if(!s)return{stop:!0};let c=Xz(e,s.value,i,o);return c===null?{stop:!0}:(a(c),{nextIndex:s.next})}function nB(e,t){return t.some(t=>e===t||e.startsWith(`${t}=`))}const rB=[(e,t,n,r)=>{if(!nB(r,[`--close-status-code`]))return null;let i=Yz(t,n,`--close-status-code`,e);if(!i)return{stop:!0};let a=Zz(e,i.value);return a===null?{stop:!0}:(e.closeStatus=a,{nextIndex:i.next})},(e,t,n,r)=>nB(r,[`--close-reason`])?eB(e,t,n,`--close-reason`,t=>{e.closeReason=t}):null,(e,t,n,r)=>nB(r,[`-B`,`--buffer-size`])?tB(e,t,n,r===`-B`?`-B`:`--buffer-size`,`--buffer-size`,t=>{e.bufferSize=t}):null,(e,t,n,r)=>nB(r,[`--max-messages`])?tB(e,t,n,`--max-messages`,`--max-messages`,t=>{e.maxMessages=t}):null,(e,t,n,r)=>nB(r,[`--protocol`])?eB(e,t,n,`--protocol`,t=>{e.protocol=t}):null,(e,t,n,r)=>{if(!nB(r,[`--ping-interval`]))return null;let i=Yz(t,n,`--ping-interval`,e);return i?(e.pingInterval=Number(i.value),{nextIndex:i.next}):{stop:!0}},(e,t,n,r)=>nB(r,[`--conn-timeout`])?tB(e,t,n,`--conn-timeout`,`--conn-timeout`,t=>{e.connTimeoutMs=Math.round(t*1e3)},`positive seconds`):null,(e,t,n,r)=>nB(r,[`-H`,`--header`])?eB(e,t,n,r===`-H`?`-H`:`--header`,t=>{e.customHeaders.push(t)}):null];function iB(e,t,n,r){for(let i of rB){let a=i(e,t,n,r);if(a)return a}return null}function aB(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)
3309
+ `)}function oB(e){let t=Kz();for(let n=0;n<e.length;n+=1){let r=e[n];if(r===`-h`||r===`--help`)return t.showHelp=!0,t;if(Jz.has(r)||Jz.has(r.split(`=`)[0]))return t.error=`websocat: flag '${r}' is not supported in slicc's minimal client\n`,t;if(Qz(t,r)||$z(t,r))continue;let i=iB(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 aB(t),t}function sB(e,t){if(!e)return[];let n=t?`\0`:`
3310
+ `,r=e.split(n);return r.length>0&&r[r.length-1]===``&&r.pop(),r}function cB(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 lB(e){try{return new TextDecoder(`utf-8`,{fatal:!1}).decode(e)}catch{return t(e)}}function uB(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 dB=1e4;function fB(){let e,t;return{promise:new Promise((n,r)=>{e=n,t=r}),resolve:e,reject:t}}function pB(){let e=!1,t=fB();return{...t,settle:n=>{e||(e=!0,t.resolve(n))}}}function mB(e,t){return e.length?e.join(t)+t:``}function hB(e){return e.length?e.join(`
3311
3311
  `)+`
3312
- `:``}function _B(e,t,n){e.quiet||t.push(`websocat: ${n}`)}function vB(e,t){e.verbose<1||(e.customHeaders.length>0&&_B(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&&_B(e,t,`--ping-interval has no effect in browsers (no ping API exposed)`),e.insecure&&_B(e,t,`-k/--insecure has no effect in browsers`))}function yB(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 bB(e,t,n,r){if(n.outLines.length<fB){n.outLines.push(r);return}n.droppedForOverflow===0&&_B(e,t,`output buffer reached ${fB} 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 xB(e,n,r){let{bytes:i,isBinary:a}=dB(r);return i.length>e.bufferSize&&(_B(e,n,`inbound message of ${i.length} bytes exceeds --buffer-size ${e.bufferSize}; truncating`),i=i.slice(0,e.bufferSize)),a&&e.base64?t(i):uB(i)}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 wB(e,t){setTimeout(()=>{CB(t,e.closeStatus??1e3,e.closeReason)},0)}function TB(e,t,n){let r=cB(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=lB(n,i,t.jsonrpcOmit),i+=1),t.binary?e.send(new TextEncoder().encode(r).buffer):e.send(r),a+=1}return a}function EB(e,t,n){!t.oneMessage&&!t.noClose&&(t.exitOnEof||n===0)&&wB(t,e)}async function DB(e,t,n){let r=[];vB(e,r);let i=e.nullTerminated?`\0`:`
3313
- `,a=yB(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=pB(),u=mB(),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=xB(e,r,t.data);bB(e,r,s,n)}s.received+=1,SB(e,s.received)&&(s.finishing=!0,m())}},o.onerror=()=>{f||(_B(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&&_B(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:hB(s.outLines,i),stderr:gB(r.concat([`websocat: ${t}`])),exitCode:t===`connect timeout`?124:1}}e.unidirectionalReverse?!e.noClose&&e.exitOnEof&&!e.oneMessage&&wB(e,o):EB(o,e,TB(o,e,t));let h=await u.promise;return s.droppedForOverflow>0&&_B(e,r,`dropped ${s.droppedForOverflow} inbound message(s) due to output buffer cap`),{stdout:hB(s.outLines,i),stderr:gB(r),exitCode:h}}function OB(e){return{stdout:``,stderr:e,exitCode:2}}function kB(e){return e.WebSocketCtor??(typeof WebSocket<`u`?WebSocket:void 0)}async function AB(e,t,n={}){let r=sB(e);if(r.showHelp)return Jz();if(r.error)return OB(r.error);if(!r.url)return OB(`websocat: missing ws:// or wss:// URL (use --help for usage)
3314
- `);if(!/^wss?:\/\//i.test(r.url))return OB(`websocat: URL must start with ws:// or wss://, got '${r.url}'\n`);let i=kB(n);return i?DB(r,t.stdin,i):{stdout:``,stderr:`websocat: no WebSocket implementation available in this runtime
3315
- `,exitCode:1}}function jB(){return S(`websocat`,async(e,t)=>AB(e,{stdin:P(t.stdin)}))}function MB(){return S(`__wf_progress`,async()=>({stdout:``,stderr:``,exitCode:0}))}const NB={commands:new Map,collisions:[]};async function PB(e,t){let n=Hn(t);return e.scriptCatalog?e.scriptCatalog.getJshIndex(n):e.fs?Gn(e.fs,n):NB}async function FB(e){return e.scriptCatalog?e.scriptCatalog.getWorkflowCommands():e.fs?ii(e.fs):new Map}function IB(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 LB(e={}){let t=e.scriptCatalog!==void 0||e.fs!==void 0?e:typeof e.walk==`function`&&typeof e.exists==`function`?{fs:e}:{};return S(`which`,async(e,n)=>{if(w(e))return{stdout:`which - locate a command
3312
+ `:``}function gB(e,t,n){e.quiet||t.push(`websocat: ${n}`)}function _B(e,t){e.verbose<1||(e.customHeaders.length>0&&gB(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&&gB(e,t,`--ping-interval has no effect in browsers (no ping API exposed)`),e.insecure&&gB(e,t,`-k/--insecure has no effect in browsers`))}function vB(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 yB(e,t,n,r){if(n.outLines.length<dB){n.outLines.push(r);return}n.droppedForOverflow===0&&gB(e,t,`output buffer reached ${dB} 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 bB(e,n,r){let{bytes:i,isBinary:a}=uB(r);return i.length>e.bufferSize&&(gB(e,n,`inbound message of ${i.length} bytes exceeds --buffer-size ${e.bufferSize}; truncating`),i=i.slice(0,e.bufferSize)),a&&e.base64?t(i):lB(i)}function xB(e,t){return e.maxMessages!==void 0&&t>=e.maxMessages||e.oneMessage}function SB(e,t,n){try{n===void 0?e.close(t):e.close(t,n)}catch{}}function CB(e,t){setTimeout(()=>{SB(t,e.closeStatus??1e3,e.closeReason)},0)}function wB(e,t,n){let r=sB(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=cB(n,i,t.jsonrpcOmit),i+=1),t.binary?e.send(new TextEncoder().encode(r).buffer):e.send(r),a+=1}return a}function TB(e,t,n){!t.oneMessage&&!t.noClose&&(t.exitOnEof||n===0)&&CB(t,e)}async function EB(e,t,n){let r=[];_B(e,r);let i=e.nullTerminated?`\0`:`
3313
+ `,a=vB(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=fB(),u=pB(),d=0,f=!1,p=setTimeout(()=>{f=!0,SB(o,1e3),c||l.reject(Error(`connect timeout`))},e.connTimeoutMs),m=()=>{if(e.noClose){u.settle(d);return}SB(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=bB(e,r,t.data);yB(e,r,s,n)}s.received+=1,xB(e,s.received)&&(s.finishing=!0,m())}},o.onerror=()=>{f||(gB(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&&gB(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:mB(s.outLines,i),stderr:hB(r.concat([`websocat: ${t}`])),exitCode:t===`connect timeout`?124:1}}e.unidirectionalReverse?!e.noClose&&e.exitOnEof&&!e.oneMessage&&CB(e,o):TB(o,e,wB(o,e,t));let h=await u.promise;return s.droppedForOverflow>0&&gB(e,r,`dropped ${s.droppedForOverflow} inbound message(s) due to output buffer cap`),{stdout:mB(s.outLines,i),stderr:hB(r),exitCode:h}}function DB(e){return{stdout:``,stderr:e,exitCode:2}}function OB(e){return e.WebSocketCtor??(typeof WebSocket<`u`?WebSocket:void 0)}async function kB(e,t,n={}){let r=oB(e);if(r.showHelp)return qz();if(r.error)return DB(r.error);if(!r.url)return DB(`websocat: missing ws:// or wss:// URL (use --help for usage)
3314
+ `);if(!/^wss?:\/\//i.test(r.url))return DB(`websocat: URL must start with ws:// or wss://, got '${r.url}'\n`);let i=OB(n);return i?EB(r,t.stdin,i):{stdout:``,stderr:`websocat: no WebSocket implementation available in this runtime
3315
+ `,exitCode:1}}function AB(){return S(`websocat`,async(e,t)=>kB(e,{stdin:P(t.stdin)}))}function jB(){return S(`__wf_progress`,async()=>({stdout:``,stderr:``,exitCode:0}))}const MB={commands:new Map,collisions:[]};async function NB(e,t){let n=Hn(t);return e.scriptCatalog?e.scriptCatalog.getJshIndex(n):e.fs?Gn(e.fs,n):MB}async function PB(e){return e.scriptCatalog?e.scriptCatalog.getWorkflowCommands():e.fs?ii(e.fs):new Map}function FB(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 IB(e={}){let t=e.scriptCatalog!==void 0||e.fs!==void 0?e:typeof e.walk==`function`&&typeof e.exists==`function`?{fs:e}:{};return S(`which`,async(e,n)=>{if(w(e))return{stdout:`which - locate a command
3316
3316
 
3317
3317
  Usage: which <command> [command...]
3318
3318
 
@@ -3323,9 +3323,9 @@ Prints the path of the given command(s).
3323
3323
 
3324
3324
  Exit code 0 if all commands found, 1 if any not found.
3325
3325
  `,stderr:``,exitCode:0};let r=C(e,{});if(`error`in r)return{stdout:``,stderr:`which: ${r.error}\n`,exitCode:1};if(r.positionals.length===0)return{stdout:``,stderr:`which: missing argument
3326
- `,exitCode:1};let i=n.getRegisteredCommands?.()??[],a=new Set(i),o=await PB(t,n.env.get(`PATH`)),s=o.commands,c=new Map(o.collisions.map(e=>[e.name,e])),l=await FB(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=IB(e,t,c.get(e),n,u,a,d);f.push(...r.lines),r.found||(p=!1)}return{stdout:f.length>0?f.join(`
3326
+ `,exitCode:1};let i=n.getRegisteredCommands?.()??[],a=new Set(i),o=await NB(t,n.env.get(`PATH`)),s=o.commands,c=new Map(o.collisions.map(e=>[e.name,e])),l=await PB(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=FB(e,t,c.get(e),n,u,a,d);f.push(...r.lines),r.found||(p=!1)}return{stdout:f.length>0?f.join(`
3327
3327
  `)+`
3328
- `:``,stderr:``,exitCode:+!p}})}const RB=`__slicc_workflows`,zB=String.raw`
3328
+ `:``,stderr:``,exitCode:+!p}})}const LB=`__slicc_workflows`,RB=String.raw`
3329
3329
  class WorkflowError extends Error {}
3330
3330
  class WorkflowDeterminismError extends WorkflowError {}
3331
3331
  class WorkflowAgentCapError extends WorkflowError {}
@@ -3438,40 +3438,40 @@ function log(message) {
3438
3438
  }
3439
3439
  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()); } };
3440
3440
  function workflow() { throw new WorkflowNestingUnsupportedError('nested workflow() unsupported in SP1'); }
3441
- `;function BB(){return`WF_RESULT_${globalThis.crypto?.randomUUID?.()??`${Date.now().toString(36)}${Math.random().toString(36).slice(2)}`}`}function VB(e){let t=GB(e);return t===null?{name:null,description:null}:{name:KB(t,`name`),description:KB(t,`description`)}}function HB(e){return e.replace(/\bexport\s+(const|let|var|function|async\s+function|class)\b/g,`$1`)}function UB(e){return`const __emit = console.log.bind(console);
3441
+ `;function zB(){return`WF_RESULT_${globalThis.crypto?.randomUUID?.()??`${Date.now().toString(36)}${Math.random().toString(36).slice(2)}`}`}function BB(e){let t=WB(e);return t===null?{name:null,description:null}:{name:GB(t,`name`),description:GB(t,`description`)}}function VB(e){return e.replace(/\bexport\s+(const|let|var|function|async\s+function|class)\b/g,`$1`)}function HB(e){return`const __emit = console.log.bind(console);
3442
3442
  const __stringify = JSON.stringify.bind(JSON);
3443
- 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 WB(e,t){let n=e.split(`
3443
+ const __WF = ${JSON.stringify(e.config)};\n${e.prelude}\nconst __r = await (async () => {\n${VB(e.body)}\n})();\n__emit(${JSON.stringify(e.sentinel)} + __stringify(__r ?? null));\n`}function UB(e,t){let n=e.split(`
3444
3444
  `);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(`
3445
- `).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 GB(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 KB(e,t){let n=RegExp(`\\b${t}\\s*:\\s*(['"\\\`])((?:\\\\.|(?!\\1).)*)\\1`).exec(e);return n?n[2]:null}const qB=e(`workflow-command`),JB=`usage: workflow run <file.js> [--args <json>] [--budget <n>] [--concurrency <n>] [--wait]
3445
+ `).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 WB(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 GB(e,t){let n=RegExp(`\\b${t}\\s*:\\s*(['"\\\`])((?:\\\\.|(?!\\1).)*)\\1`).exec(e);return n?n[2]:null}const KB=e(`workflow-command`),qB=`usage: workflow run <file.js> [--args <json>] [--budget <n>] [--concurrency <n>] [--wait]
3446
3446
  workflow run --script '<inline js>' [...]
3447
3447
  workflow list
3448
3448
  workflow status <runId>
3449
3449
  workflow stop <runId>
3450
3450
  workflow save <runId> <name> [--force]
3451
3451
  Runs a Claude-Code-format dynamic workflow. Default is non-blocking (returns a run id);
3452
- pass --wait to block and print the full result.`,YB=new Set([`list`,`status`,`stop`,`save`]);function XB(){return globalThis[RB]}function ZB(){let e=globalThis.navigator?.hardwareConcurrency??8;return Math.min(16,Math.max(8,e*4))}function QB(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 $B(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=ZB(),n={budget:null,cap:Math.min(8,t)};for(let r=1;r<e.length;r++){let i=QB(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 eV(e={}){return S(`workflow`,async(t,n)=>{if(YB.has(t[0])&&w(t.slice(1)))return{stdout:JB+`
3453
- `,stderr:``,exitCode:0};if(t[0]===`list`||t[0]===`status`||t[0]===`stop`)return oV(t,n);if(t[0]===`save`)return aV(t,n,e);let r=$B(t);if(r.help)return{stdout:JB+`
3452
+ pass --wait to block and print the full result.`,JB=new Set([`list`,`status`,`stop`,`save`]);function YB(){return globalThis[LB]}function XB(){let e=globalThis.navigator?.hardwareConcurrency??8;return Math.min(16,Math.max(8,e*4))}function ZB(e,t,n,r){let i=t[n];switch(i){case`-h`:case`--help`:return{i:n,help:!0};case`--script`:return e.script=t[++n],{i:n};case`--wait`:return e.wait=!0,{i:n};case`--args`:try{e.args=JSON.parse(t[++n]??``),e.hasArgs=!0}catch{return{i:n,error:`workflow: --args must be valid JSON`}}return{i:n};case`--budget`:{let r=Number(t[++n]);return Number.isFinite(r)?(e.budget=r,{i:n}):{i:n,error:`workflow: --budget must be a number`}}case`--concurrency`:{let i=Number(t[++n]);return Number.isFinite(i)?(e.cap=Math.min(r,Math.max(1,Math.trunc(i))),{i:n}):{i:n,error:`workflow: --concurrency must be a number`}}default:return i.startsWith(`-`)?{i:n,error:`workflow: unknown flag '${i}'`}:e.file===void 0?(e.file=i,{i:n}):{i:n,error:`workflow: too many arguments`}}}function QB(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=XB(),n={budget:null,cap:Math.min(8,t)};for(let r=1;r<e.length;r++){let i=ZB(n,e,r,t);if(i.help)return{help:!0};if(i.error)return{error:i.error};r=i.i}return n.script===void 0&&n.file===void 0?{error:`workflow: a <file.js> or --script is required`}:n}function $B(e={}){return S(`workflow`,async(t,n)=>{if(JB.has(t[0])&&w(t.slice(1)))return{stdout:qB+`
3453
+ `,stderr:``,exitCode:0};if(t[0]===`list`||t[0]===`status`||t[0]===`stop`)return aV(t,n);if(t[0]===`save`)return iV(t,n,e);let r=QB(t);if(r.help)return{stdout:qB+`
3454
3454
  `,stderr:``,exitCode:0};if(r.error)return{stdout:``,stderr:r.error+`
3455
- `,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=VB(i);if(!o.name)return{stdout:``,stderr:`workflow: script must define a meta block with a name (description optional)
3456
- `,exitCode:1};let s=BB().slice(10,22),c=`/shared/workflow-runs/${s}/scratch/`;await n.fs.mkdir(c,{recursive:!0});let l=BB(),u=UB({prelude:zB,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?tV(u,a,l,o,n):nV({code:u,source:i,name:o.name,filename:a,sentinel:l,runId:s,ctx:n,options:e})})}async function tV(e,t,n,r,i){let a;try{a=await Ur(e,[`workflow`,t],i,void 0,{filename:t})}catch(e){return qB.error(`workflow run failed`,e),{stdout:``,stderr:`workflow: ${e instanceof Error?e.message:String(e)}\n`,exitCode:1}}return sV(r,a,n)}async function nV(e){let t=XB();if(!t)return{stdout:``,stderr:`workflow: run manager not available
3457
- `,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 rV=/^[a-z0-9][a-z0-9-]*$/,iV=`/workspace/.workflows`;async function aV(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]
3458
- `,exitCode:1};if(!rV.test(o))return{stdout:``,stderr:`workflow: invalid name '${o}' (use [a-z0-9][a-z0-9-]*)\n`,exitCode:1};let c=XB()?.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=`${iV}/${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(iV,{recursive:!0}),await t.fs.writeFile(l,c.source);try{await n.syncScriptCommands?.()}catch(e){qB.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 oV(e,t){let n=XB();if(e[0]===`list`){if(!n)return{stdout:``,stderr:`workflow: run manager not available
3455
+ `,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=BB(i);if(!o.name)return{stdout:``,stderr:`workflow: script must define a meta block with a name (description optional)
3456
+ `,exitCode:1};let s=zB().slice(10,22),c=`/shared/workflow-runs/${s}/scratch/`;await n.fs.mkdir(c,{recursive:!0});let l=zB(),u=HB({prelude:RB,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?eV(u,a,l,o,n):tV({code:u,source:i,name:o.name,filename:a,sentinel:l,runId:s,ctx:n,options:e})})}async function eV(e,t,n,r,i){let a;try{a=await Ur(e,[`workflow`,t],i,void 0,{filename:t})}catch(e){return KB.error(`workflow run failed`,e),{stdout:``,stderr:`workflow: ${e instanceof Error?e.message:String(e)}\n`,exitCode:1}}return oV(r,a,n)}async function tV(e){let t=YB();if(!t)return{stdout:``,stderr:`workflow: run manager not available
3457
+ `,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 nV=/^[a-z0-9][a-z0-9-]*$/,rV=`/workspace/.workflows`;async function iV(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]
3458
+ `,exitCode:1};if(!nV.test(o))return{stdout:``,stderr:`workflow: invalid name '${o}' (use [a-z0-9][a-z0-9-]*)\n`,exitCode:1};let c=YB()?.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=`${rV}/${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(rV,{recursive:!0}),await t.fs.writeFile(l,c.source);try{await n.syncScriptCommands?.()}catch(e){KB.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 aV(e,t){let n=YB();if(e[0]===`list`){if(!n)return{stdout:``,stderr:`workflow: run manager not available
3459
3459
  `,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(`
3460
3460
  `):`(no runs)`)+`
3461
3461
  `,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(`
3462
3462
  `)+`
3463
- `,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 sV(e,t,n){let{result:r,log:i,hadResult:a}=WB(t.stdout,n),o=e.name?`workflow: ${e.name}${e.description?` — `+e.description:``}\n`:``,s=i?cV(i)+`
3463
+ `,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 oV(e,t,n){let{result:r,log:i,hadResult:a}=UB(t.stdout,n),o=e.name?`workflow: ${e.name}${e.description?` — `+e.description:``}\n`:``,s=i?sV(i)+`
3464
3464
  `:``;return t.exitCode!==0||!a?{stdout:o+s,stderr:t.stderr||(a?``:`workflow: script produced no result
3465
3465
  `),exitCode:t.exitCode||1}:{stdout:o+s+(typeof r==`string`?r:JSON.stringify(r))+`
3466
- `,stderr:t.stderr,exitCode:0}}function cV(e){return e.split(`
3466
+ `,stderr:t.stderr,exitCode:0}}function sV(e){return e.split(`
3467
3467
  `).map(e=>e.replace(/^WFPHASE/,`▸ `).replace(/^WFLOG/,`· `)).join(`
3468
- `)}function lV(e){return{stdout:``,stderr:`xxd: ${e}\n`,exitCode:1}}function uV(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 dV(e,t){let n=e.toString(16).padStart(2,`0`);return t?n.toUpperCase():n}function fV(e){let t=``;for(let n=0;n<e.length;n++)t+=String.fromCharCode(e[n]);return t}function pV(e){return e.replace(/[^0-9a-zA-Z]/g,`_`)}function mV(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?dV(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(`
3468
+ `)}function cV(e){return{stdout:``,stderr:`xxd: ${e}\n`,exitCode:1}}function lV(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 uV(e,t){let n=e.toString(16).padStart(2,`0`);return t?n.toUpperCase():n}function dV(e){let t=``;for(let n=0;n<e.length;n++)t+=String.fromCharCode(e[n]);return t}function fV(e){return e.replace(/[^0-9a-zA-Z]/g,`_`)}function pV(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?uV(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(`
3469
3469
  `)+`
3470
- `:``}function hV(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+=dV(e[i+r],n);r+=a+`
3471
- `}return r}function gV(e,t,n,r){let i=Array.from(e,e=>`0x${dV(e,n)}`),a=[];for(let e=0;e<i.length;e+=t)a.push(` `+i.slice(e,e+t).join(`, `));let o=a.join(`,
3470
+ `:``}function mV(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+=uV(e[i+r],n);r+=a+`
3471
+ `}return r}function hV(e,t,n,r){let i=Array.from(e,e=>`0x${uV(e,n)}`),a=[];for(let e=0;e<i.length;e+=t)a.push(` `+i.slice(e,e+t).join(`, `));let o=a.join(`,
3472
3472
  `);return r===null?i.length?o+`
3473
- `:``:`unsigned char ${r}[] = {\n${o}\n};\nunsigned int ${r}_len = ${e.length};\n`}function _V(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 vV(e){let t=[],n=0;for(let r of e.split(`
3474
- `)){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 yV={"-u":`upper`,"-p":`plain`,"-ps":`plain`,"-postscript":`plain`,"-i":`include`,"-include":`include`,"-r":`revert`,"-revert":`revert`},bV=[{key:`cols`,exact:[`-c`,`-cols`],attached:/^-c(0x)?[0-9]/},{key:`group`,exact:[`-g`,`-groupsize`],attached:/^-g(0x)?[0-9]/},{key:`length`,exact:[`-l`,`-len`],attached:/^-l(0x)?[0-9]/},{key:`seek`,exact:[`-s`,`-seek`],attached:/^-s[+-]?(0x)?[0-9]/}];function xV(e){let t={upper:!1,plain:!1,include:!1,revert:!1,positional:[]};for(let n=0;n<e.length;n++){let r=e[n],i=yV[r];if(i){t[i]=!0;continue}let a=bV.find(e=>e.exact.includes(r)||e.attached.test(r));if(a){t[a.key]=uV(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=ti(e.stdin),i=new Uint8Array(r.length);for(let e=0;e<r.length;e++)i[e]=r.charCodeAt(e)&255;return i}function wV(e,t,n,r,i){let a=e.cols&&e.cols>0?e.cols:e.plain?30:e.include?12:16;return e.plain?hV(t,a,e.upper):e.include?gV(t,a,e.upper,i?null:pV(r??``)):mV(t,a,e.group!=null&&e.group>=0?e.group:2,e.upper,n)}function TV(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 EV(){return S(`xxd`,async(e,t)=>{if(SV(e))return{stdout:`usage: xxd [options] [infile [outfile]]
3473
+ `:``:`unsigned char ${r}[] = {\n${o}\n};\nunsigned int ${r}_len = ${e.length};\n`}function gV(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 _V(e){let t=[],n=0;for(let r of e.split(`
3474
+ `)){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 vV={"-u":`upper`,"-p":`plain`,"-ps":`plain`,"-postscript":`plain`,"-i":`include`,"-include":`include`,"-r":`revert`,"-revert":`revert`},yV=[{key:`cols`,exact:[`-c`,`-cols`],attached:/^-c(0x)?[0-9]/},{key:`group`,exact:[`-g`,`-groupsize`],attached:/^-g(0x)?[0-9]/},{key:`length`,exact:[`-l`,`-len`],attached:/^-l(0x)?[0-9]/},{key:`seek`,exact:[`-s`,`-seek`],attached:/^-s[+-]?(0x)?[0-9]/}];function bV(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=vV[r];if(i){t[i]=!0;continue}let a=yV.find(e=>e.exact.includes(r)||e.attached.test(r));if(a){t[a.key]=lV(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 xV(e){return e.includes(`-h`)||e.includes(`--help`)||e.includes(`-help`)}async function SV(e,t,n){if(!n&&t)return e.fs.readFileBuffer(e.fs.resolvePath(e.cwd,t));let r=ti(e.stdin),i=new Uint8Array(r.length);for(let e=0;e<r.length;e++)i[e]=r.charCodeAt(e)&255;return i}function CV(e,t,n,r,i){let a=e.cols&&e.cols>0?e.cols:e.plain?30:e.include?12:16;return e.plain?mV(t,a,e.upper):e.include?hV(t,a,e.upper,i?null:fV(r??``)):pV(t,a,e.group!=null&&e.group>=0?e.group:2,e.upper,n)}function wV(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 TV(){return S(`xxd`,async(e,t)=>{if(xV(e))return{stdout:`usage: xxd [options] [infile [outfile]]
3475
3475
  -c cols number of octets per line (default 16; 30 for -p; 12 for -i)
3476
3476
  -g bytes number of octets per group (default 2; 0 disables grouping)
3477
3477
  -l len stop after len octets
@@ -3481,8 +3481,8 @@ pass --wait to block and print the full result.`,YB=new Set([`list`,`status`,`st
3481
3481
  -i output in C include style
3482
3482
  -r reverse: convert a hex dump back to binary (-r -p for plain)
3483
3483
  -h show this help
3484
- `,stderr:``,exitCode:0};let n;try{n=xV(e)}catch(e){return lV(e.message)}let r=n.positional[0],i=n.positional[1],a=!r||r===`-`,o;try{o=await CV(t,r,a)}catch{return lV(`${r}: No such file or directory`)}if(n.revert){let e=fV(o),r=n.plain?_V(e):vV(e);return i?(await t.fs.writeFile(t.fs.resolvePath(t.cwd,i),r),{stdout:``,stderr:``,exitCode:0}):{stdout:fV(r),stderr:``,exitCode:0}}let{data:s,base:c}=TV(n,o),l=wV(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 DV(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=er(t,o),s=n?`${n}/${o}`:o;a+=await DV(e,i,s,r)}return a}function OV(){return{stdout:`usage: zip [-r] <archive.zip> <path> [path...]
3485
- `,stderr:``,exitCode:0}}function kV(){return S(`zip`,async(e,t)=>{if(e.length===0||e.includes(`--help`)||e.includes(`-h`))return OV();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
3486
- `,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(/^\.\//,``))||tr(r);if(i.isDirectory&&!n)return{stdout:``,stderr:`zip: ${e} is a directory (use -r)\n`,exitCode:1};s+=await DV(t,r,a,o)}if(s===0)return{stdout:``,stderr:`zip: nothing to do
3487
- `,exitCode:1};let c=Ct(o);return await t.fs.writeFile(i,c),{stdout:`created ${i} (${s} file(s))\n`,stderr:``,exitCode:0}})}function AV(e){return{setEnv:e.setEnv,unsetEnv:e.unsetEnv,broker:e.sudoCommand?.broker}}function jV(e){let{fs:t,fetch:n}=e;if(!t||!n)return[];let r={fs:t,fetch:n,scriptCatalog:e.scriptCatalog,syncScriptCommands:e.syncScriptCommands};return[GD(`ipk`,r),GD(`npm`,r),GD(`i`,r),PO(`ipx`,{fs:t,fetch:n}),PO(`npx`,{fs:t,fetch:n}),Qy(`di`,{fs:t,fetch:n}),Qy(`uv`,{fs:t,fetch:n}),sR({fs:t,fetch:n})]}function MV(e={}){let t=[XT({getJshCommands:e.getJshCommands,getWorkflowCommands:e.getWorkflowCommands}),ne(),JF(),pF(),oF(e.browserAPI,e.fs),Wj(e.browserAPI),my(e.browserAPI),nD(e),kV(),LL(),kI(e.fs?{fs:e.fs}:{}),tI(),cI(),aI(),lv(),EV(),HF(`sqlite3`),HF(`sqllite`),KI(),fL(),mx(),G_(),sj({buildProcessConfig:e.buildProcessConfig}),sj({buildProcessConfig:e.buildProcessConfig},`jsh`),oN(`python3`,{buildProcessConfig:e.buildProcessConfig}),oN(`python`,{buildProcessConfig:e.buildProcessConfig}),...jV(e),...e.fs?[bS({fs:e.fs})]:[],...e.fs?[yA({fs:e.fs})]:[],...e.fetch?[cE({fetch:e.fetch,streamFetch:e.streamFetch})]:[],sS(),cS(),Kz(e.webhook),jB(),py(e.crontask),Ek({fs:e.fs,scriptCatalog:e.scriptCatalog}),uM({fs:e.fs,fetch:e.fetch}),yS(),NF(),Gj(),Kj(`pdftk`),Kj(`pdf`),K_(`biscotto`),K_(`biscotti`),nM(`pdftoppm`),nM(`pdftocairo`),rM(`pdftotext`),Zv(`convert`),Zv(`magick`),LB({fs:e.fs,scriptCatalog:e.scriptCatalog,getStaticBuiltins:e.getStaticBuiltins,getScriptRegisteredNames:e.getScriptRegisteredNames}),gL(),ML(),QE(),$E(),NL(),bA(),uN(),bk(),zb(),Sj(),xj(),_k(),jP(AV(e)),CN({fs:e.fs}),YN(),ov(),sv(),cv(`xclip`),cv(`xsel`),JN(),RS(),_g(),vg(),qA(e.fs),tt(),fj(),Rg({getParentJid:e.getParentJid}),qb(),MM({processManager:e.processManager}),SR({processManager:e.processManager}),LO({processManager:e.processManager}),FO({processManager:e.processManager,scriptCatalog:e.scriptCatalog}),...Vg(),vA(),lk(),qR(),PE(),Yx(),lz({processManager:e.processManager}),fv({processManager:e.processManager,browser:e.browserAPI,sudoBroker:e.sudoCommand?.broker}),oS(),$_({registry:e.cherryRuntimeRegistry}),xy(),Oy({fs:e.fs}),ky({fs:e.fs}),XF(e.sudoCommand),eV({getParentJid:e.getParentJid,syncScriptCommands:e.syncScriptCommands}),MB(),fF()];return e.fs&&(aM(),t.push(...Nn.map(t=>qT(t,e.browserAPI,e.fs,{isScoop:e.isScoop})))),t}let NV=null;function PV(e){NV=e}function FV(e){NV?.(e)}var IV=Dt();const LV=Reflect.get(Ye,`DefenseInDepthBox`);function RV(e){return(typeof e==`string`?e:e?.encoding)??`utf8`}function zV(e,t){if(typeof e!=`string`)return e;let n=RV(t);if(n===`binary`||n===`latin1`){let t=ue(e);if(t)return t}return IV.Buffer.from(e,n)}function BV(e){return e===`/bin`?`/usr/bin`:e.startsWith(`/bin/`)?`/usr${e}`:e}var VV=class{vfs;registeredCommandsFn=null;listingStats=new Map;listingStatsMax;listingStatsTtlMs;constructor(e,t){this.vfs=e,this.listingStatsMax=Math.max(1,t?.listingStatsMax??2e4),this.listingStatsTtlMs=t?.listingStatsTtlMs??1e3,this.updateMetadataBatch=this.updateMetadataBatch.bind(this)}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){let t=BV(e);if(t===`/usr`||t===`/usr/bin`)return{isFile:!1,isDirectory:!0,isSymbolicLink:!1,mode:493,size:0,mtime:new Date(0)};if(t.startsWith(`/usr/bin/`)){let e=t.slice(9);if(e.length>0&&!e.includes(`/`)&&this.getVirtualBinCommands().includes(e))return{isFile:!0,isDirectory:!1,isSymbolicLink:!1,mode:493,size:0,mtime:new Date(0)}}return null}canWrite(e){let t=this.vfs;return typeof t.canWrite!=`function`||t.canWrite(e)}listMountPoints(){let e=this.vfs;return typeof e.listMountPoints==`function`?e.listMountPoints():[]}trusted(e){let t=LV?.runTrustedAsync;return t?t(e):Promise.resolve().then(e)}async readFile(e,t){return this.trusted(async()=>{let n=b(e),r=await this.vfs.readFile(n,{encoding:`binary`}),i=r instanceof Uint8Array?r:new TextEncoder().encode(r),a=RV(t),o=IV.Buffer.from(i.buffer,i.byteOffset,i.byteLength).toString(a);return a!==`hex`&&a!==`base64`&&g(o,i),o})}async readFileBuffer(e){return this.trusted(async()=>{let t=b(e),n=await this.vfs.readFile(t,{encoding:`binary`});return n instanceof Uint8Array?n:new TextEncoder().encode(n)})}async readFileBytes(e){let t=await this.readFileBuffer(e);return IV.Buffer.from(t.buffer,t.byteOffset,t.byteLength).toString(`latin1`)}async getNativeFile(e){return this.trusted(()=>this.vfs.getNativeFile(b(e)))}async readFileRange(e,t,n){return this.trusted(()=>this.vfs.readFileRange(b(e),t,n))}async writeFile(e,t,n){return this.dropListingStats(),this.trusted(async()=>{let r=b(e);await this.vfs.writeFile(r,zV(t,n))})}async appendFile(e,t,n){return this.dropListingStats(),this.trusted(()=>this.vfs.appendFile(b(e),zV(t,n)))}async exists(e){return this.trusted(async()=>{let t=b(e);return this.virtualUsrStat(t)?!0:this.vfs.exists(t)})}async stat(e){return this.trusted(async()=>{let t=b(e),n=this.virtualUsrStat(t);if(n)return n;let r=this.vfs.statSync(t);if(r)return{isFile:r.type===`file`,isDirectory:r.type===`directory`,isSymbolicLink:!!r.isSymlink,mode:r.mode??(r.type===`directory`?493:420),size:r.size,mtime:new Date(r.mtime),identity:r.identity,dev:r.dev,ino:r.identity===void 0?void 0:r.ino};let i=this.primedStats(t)??await this.vfs.stat(t);return{isFile:i.type===`file`,isDirectory:i.type===`directory`,isSymbolicLink:!!i.isSymlink,mode:i.mode??(i.type===`directory`?493:420),size:i.size,mtime:new Date(i.mtime),identity:i.identity,dev:i.dev,ino:i.identity===void 0?void 0:i.ino}})}async lstat(e){return this.trusted(async()=>{let t=b(e),n=this.virtualUsrStat(t);if(n)return n;let r=this.vfs.lstatSync(t);if(r)return{isFile:r.type===`file`,isDirectory:r.type===`directory`,isSymbolicLink:r.type===`symlink`,mode:r.mode??(r.type===`directory`?493:r.type===`symlink`?511:420),size:r.size,mtime:new Date(r.mtime),identity:r.identity,dev:r.dev,ino:r.identity===void 0?void 0:r.ino};let i=this.primedStats(t)??await this.vfs.lstat(t);return{isFile:i.type===`file`,isDirectory:i.type===`directory`,isSymbolicLink:i.type===`symlink`,mode:i.mode??(i.type===`directory`?493:i.type===`symlink`?511:420),size:i.size,mtime:new Date(i.mtime),identity:i.identity,dev:i.dev,ino:i.identity===void 0?void 0:i.ino}})}async mkdir(e,t){return this.dropListingStats(),this.trusted(async()=>{await this.vfs.mkdir(b(e),t)})}async readdir(e){return this.trusted(async()=>{let t=b(e);if(t===`/usr`)return[`bin`];if(BV(t)===`/usr/bin`)return this.getVirtualBinCommands().slice().sort();let n=this.vfs.readDirSync(t);if(n!==null)return n.map(e=>e.name);let r=await this.vfs.readDir(t,{includeStats:!0});return this.primeListingStats(t,r),r.map(e=>e.name)})}async readdirWithFileTypes(e){return this.trusted(async()=>{let t=b(e);if(t===`/usr`)return[{name:`bin`,isFile:!1,isDirectory:!0,isSymbolicLink:!1}];if(BV(t)===`/usr/bin`)return this.getVirtualBinCommands().slice().sort().map(e=>({name:e,isFile:!0,isDirectory:!1,isSymbolicLink:!1}));let n=this.vfs.readDirSync(t);if(n!==null)return this.mapFastEntriesToDirents(n);let r=await this.vfs.readDir(t,{includeStats:!0});return this.primeListingStats(t,r),this.mapAsyncEntriesToDirents(r)})}mapFastEntriesToDirents(e){return e.map(e=>this.entryToDirent(e))}mapAsyncEntriesToDirents(e){return e.map(e=>this.entryToDirent(e))}entryToDirent(e){return e.type===`symlink`?{name:e.name,isFile:!1,isDirectory:!1,isSymbolicLink:!0}:{name:e.name,isFile:e.type===`file`,isDirectory:e.type===`directory`,isSymbolicLink:!1}}async rm(e,t){return this.dropListingStats(),this.trusted(async()=>{await this.vfs.rm(b(e),t)})}async cp(e,t,n){return this.dropListingStats(),this.trusted(async()=>{let r=b(e),i=b(t);if((await this.vfs.stat(r)).type===`directory`){if(!n?.recursive)throw new 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=x(e,r.name),i=x(t,r.name);r.type===`directory`?await this.cpDir(n,i):await this.vfs.copyFile(n,i)}}async mv(e,t){return this.dropListingStats(),this.trusted(async()=>{await this.vfs.rename(b(e),b(t))})}async rename(e,t){return this.mv(e,t)}resolvePath(e,t){return t.startsWith(`/`)?b(t):b(x(e,t))}getAllPaths(){return[]}async chmod(e,t){return this.dropListingStats(),this.trusted(()=>this.vfs.chmod(b(e),t))}async updateMetadataBatch(e){return this.dropListingStats(),this.trusted(()=>this.vfs.updateMetadataBatch(e.map(e=>({...e,path:b(e.path)}))))}async symlink(e,t){return this.dropListingStats(),this.trusted(async()=>{await this.vfs.symlink(e,b(t))})}async link(e,t){throw Error(`Hard links not supported in VirtualFS`)}async readlink(e){return this.trusted(async()=>this.vfs.readlink(b(e)))}async realpath(e){return this.trusted(async()=>this.vfs.realpath(b(e)))}async utimes(e,t,n){return this.dropListingStats(),this.trusted(()=>this.vfs.utimes(b(e),t,n))}invalidatePaths(e){this.dropListingStats();let t=this.vfs;t.invalidatePaths&&t.invalidatePaths(e)}async forgetSidecarConsistency(){await this.vfs.forgetSidecarConsistency?.()}};function HV(e){return e&&typeof e.getWatcher==`function`?e.getWatcher?.()??null:e&&typeof e.getUnderlyingFS==`function`?HV(e.getUnderlyingFS?.()):null}async function UV(e){let t=le(`github`);if(t){if(e?.force){await t.onSilentRenew?.();return}await t.getValidAccessToken?.()}}const WV=e(`almost-bash-shell`),GV=`__SLICC_RUN_PID`,KV=`__SLICC_OUTPUT_TEE__`;function qV(e){let t=e?.get(GV);if(t===void 0)return;let n=Number.parseInt(t,10);return Number.isSafeInteger(n)&&n>0?n:void 0}function JV(e){if(!(GV in e)&&!(KV in e)&&!(`__SLICC_SUDO_REASON`in e)&&!(`__SLICC_PIPESTATUS`in e)&&!(`__SLICC_PIPESTATUS_EX`in e))return{...e};let{[GV]:t,[KV]:n,[em]:r,[ip]:i,[ap]:a,...o}=e;return o}var YV=class e{options;bash;vfsAdapter;gitCommands;mountCommands;lastEnv;cwd;umask=18;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(qV(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:ep,PATH:Un,USER:`user`,SHELL:`/bin/bash`,TMPDIR:`/tmp`,PWD:t,...e.env}}buildSupplementalCommands(e,t,n){return MV({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,streamFetch:n,scriptCatalog:this.scriptCatalog,browserAPI:e.browserAPI,webhook:e.webhook,crontask:e.crontask,getParentJid:e.getParentJid,isScoop:e.isScoop,buildProcessConfig:this.resolveJshProcessConfig,processManager:e.processManager,sudoCommand:e.sudo?{broker:e.sudo.broker,persistGrant:async e=>{this.pendingCommandGrants.push(e)},suppressNextGate:e=>this.registerSudoBypass(e)}:void 0,setEnv:(e,t)=>{this.pendingEnvWrites.set(e,t),this.lastEnv[e]=t},unsetEnv:e=>{this.pendingEnvWrites.set(e,null),delete this.lastEnv[e]}})}constructor(t){this.options=t,this.vfsAdapter=new VV(t.fs),this.progress=new gp({scrubLabel:t.scrubProgressLabel}),this.allowedCommands=e.buildAllowedCommandSet(t);let n=t.cwd??`/`,r=e.buildInitialEnv(t,n);this.gitCommands=new Zf({fs:t.fs,authorName:r.GIT_AUTHOR_NAME??`User`,authorEmail:r.GIT_AUTHOR_EMAIL??`user@example.com`,ensureFreshGithubToken:UV}),this.mountCommands=new Cs({fs:t.fs,isScoop:t.isScoop,acquireLocalMountViaToolUI:sm});let i=t.jshDiscoveryFs??t.fs,a=t.bshDiscoveryFs??t.fs,o=HV(i)??HV(a);this.scriptCatalog=t.scriptCatalog??new oi({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=p({progress:xp(this.progress)}),l=h({progress:xp(this.progress)}),u=this.buildSupplementalCommands(t,c,l),d=[s,this.createMountCustomCommand(),this.createUmountCustomCommand(),th(t.fs),Qh(t.fs,c,t.browserAPI),...u].filter(e=>this.isCommandAllowed(e.name)),f=[...Ze(),...Xe()],m=this.allowedCommands?f.filter(e=>this.isCommandAllowed(e)):void 0;if(this.bash=new Qe({fs:this.vfsAdapter,cwd:n,env:{},fetch:c,commands:m,customCommands:d,sleep:Hp(this.progress,{isAborted:()=>this.activeRunSignal?.aborted??!1}),executionLimitProfile:t.executionLimitProfile,executionLimits:$f(t.isScoop?.()??!1,t.executionLimits)}),this.bash.registerTransformPlugin(hm),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 g=d.map(e=>e.name),_=m??[...Ze(),...Xe()];this.builtinCommandNames=new Set([..._,...g]),this.staticBuiltinNames=new Set(this.builtinCommandNames),this.vfsAdapter.setRegisteredCommandsFn(()=>[...this.builtinCommandNames]),this.lastEnv={...r},this.cwd=n,this.startInitialJshSync()}getBash(){return this.bash}getCwd(){return this.cwd}getScriptCatalog(){return this.scriptCatalog}getEnv(){return{...this.lastEnv}}setMaskedEnvVar(e,t){this.pendingEnvWrites.set(e,t),this.lastEnv[e]=t}applySessionOverrides(e){e.cwd!==void 0&&(this.cwd=e.cwd,this.lastEnv.PWD=e.cwd),e.env&&Object.assign(this.lastEnv,e.env)}async getJshCommandNames(){return[...(await this.getFilteredJshCommands()).keys()]}async syncJshCommands(){return this.jshSyncInflight===null?(this.jshSyncInflight=this.doSyncJshCommands(),this.jshSyncInflight):(this.jshSyncDirty=!0,this.jshSyncInflight)}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 Br(e,t,{fs:this.vfsAdapter,cwd:this.cwd,env:new Map(Object.entries(this.lastEnv)),stdin:``,exec:(e,t)=>this.bash.exec(e,{env:t?.env??this.lastEnv,cwd:t?.cwd??this.cwd,umask:this.umask,...t?.env===void 0?{}:{replaceEnv:!0}})},this.buildJshProcessConfig())}dispose(){this.ownsScriptCatalog&&this.scriptCatalog.dispose()}async renderMediaPreview(e){throw Error(`terminal preview is unavailable in headless mode`)}currentScanRoots(){return Wn(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 tp(e);this.lastEnv.HOME=t,this.options.env?.USER||(this.lastEnv.USER=np(t));let n=`${t.replace(/\/+$/,``)}/.profile`;if(!await e.exists(n).catch(()=>!1))return;let r=await this.bash.exec(`. "$HOME/.profile"`,{env:this.lastEnv,cwd:this.cwd,umask:this.umask});if(typeof r.umask==`number`&&(this.umask=r.umask),r.env){let{PWD:e,...t}=r.env;this.lastEnv={...t,PWD:this.lastEnv.PWD??this.cwd}}}catch(e){WV.warn(`HOME/profile init failed; continuing with defaults`,e)}}async waitForInitialJshSync(e){let t=this.initialJshSync;if(t===null)return;if(!e){await t;return}if(e.aborted)return;let n;try{await new Promise(r=>{n=()=>r(),e.addEventListener(`abort`,n,{once:!0}),t.then(()=>r(),()=>r())})}finally{n&&e.removeEventListener(`abort`,n)}}async runCommand(e,t,n,r=``,i,a=!1){FV(e.trim().split(/\s+/)[0]||`unknown`),m(),await this.waitForInitialJshSync(t);let o=nm(e),s={env:{...this.lastEnv,...n===void 0?{}:{[GV]:String(n)},...i===void 0?{}:{[KV]:i},...o?{[em]:o}:{}},cwd:this.cwd,umask:this.umask,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(up(e,a),s)}finally{this.activeRunSignal===t&&(this.activeRunSignal=void 0),this.endScriptRun(l)}if(await this.flushPendingCommandGrants(),u=dp(u,a),typeof u.umask==`number`&&(this.umask=u.umask),u.env&&(this.lastEnv=JV(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 fp(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`?Kp(t,this.progress):Jp(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(KV),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(KV);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=Lp(this.bash.transform(e).ast,this.registryNames)}catch{t={totalSteps:null}}return this.scriptRun=new zp(t,this.progress,Rp(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(em))||e.execute(n,r)}}}async gateCommandDispatch(e,t,n){let r=this.options.sudo;if(!r)return null;let i=Xp(e,t);if(this.consumeSudoBypass(i))return null;let a=r.getPolicy();if(!a)return null;let o=await Qp(i,{policy:a,broker:r.broker,persistGrant:async e=>{this.pendingCommandGrants.push(e)},defaultDisposition:r.defaultDisposition,...n?{reason:n}:{}});return o.allowed?null:{stdout:``,stderr:`${o.message}\n`,exitCode:o.exitCode??77}}registerSudoBypass(e){let t=e.trim();t&&this.pendingSudoBypasses.set(t,(this.pendingSudoBypasses.get(t)??0)+1)}consumeSudoBypass(e){let t=this.pendingSudoBypasses.get(e);return t?(t===1?this.pendingSudoBypasses.delete(e):this.pendingSudoBypasses.set(e,t-1),!0):!1}async flushPendingCommandGrants(){if(this.pendingCommandGrants.length===0)return;let e=this.pendingCommandGrants;this.pendingCommandGrants=[];for(let t of e)try{await this.persistCommandGrant(t)}catch{}}async persistCommandGrant(e){let t=this.options.sudo?.persistCommandGrant;if(t){await t(e);return}let n=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(`
3488
- `)?`${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)WV.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 Ur(t,[`node`,o,...e],{fs:i.fs,cwd:i.cwd,env:i.env,stdin:i.stdin,exec:a},this.buildJshProcessConfig(qV(i.env)))}let s=(await t.getWorkflowCommands()).get(r);if(s){let t=ai(s.path,e);return a(t[0],{args:t.slice(1),cwd:i.cwd})}return{stdout:``,stderr:`${r}: command no longer exists\n`,exitCode:127}};return{name:e,trusted:!0,async execute(e,t){try{return await i(e,t)}catch(e){let t=e instanceof Error?e.message:String(e);return{stdout:``,stderr:`${r}: ${t}\n`,exitCode:1}}}}}createGitCustomCommand(){let e=this.gitCommands;return S(`git`,async(t,n)=>{let r=n.cwd,i=await e.execute(t,r,n.env,P(n.stdin));return{stdout:i.stdout,stderr:i.stderr,exitCode:i.exitCode}})}createMountCustomCommand(){let e=this.mountCommands;return S(`mount`,async(t,n)=>{let r=n.cwd,i=await e.execute(t,r,n.env);return{stdout:i.stdout,stderr:i.stderr,exitCode:i.exitCode}})}createUmountCustomCommand(){let e=this.mountCommands;return S(`umount`,async(t,n)=>{let r=n.cwd,i=await e.executeUmount(t,r);return{stdout:i.stdout,stderr:i.stderr,exitCode:i.exitCode}})}async getFilteredJshCommands(){let e=await this.scriptCatalog.getJshCommands(this.currentScanRoots()),t=new Map;for(let[n,r]of e)this.builtinCommandNames.has(n)||this.isCommandAllowed(n)&&t.set(n,r);return t}async getFilteredWorkflowCommands(){let e=await this.scriptCatalog.getWorkflowCommands(),t=new Map;for(let[n,r]of e)this.isCommandAllowed(n)&&t.set(n,r);return t}async getWorkflowCommandNames(){return[...(await this.getFilteredWorkflowCommands()).keys()]}async tryJshFallback(e,t){let n=e.trim(),r=n.indexOf(` `),i=r>=0?n.slice(0,r):n,a=r>=0?n.slice(r+1).trim():``,o=(await this.getFilteredJshCommands()).get(i);if(!o)return null;let s=a?rp(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 Ur(l,u,{fs:this.vfsAdapter,cwd:this.cwd,env:new Map(Object.entries(this.lastEnv)),stdin:``,exec:(e,t)=>this.bash.exec(e,{env:t?.env??this.lastEnv,cwd:t?.cwd??this.cwd,umask:this.umask,...t?.env===void 0?{}:{replaceEnv:!0}})},this.buildJshProcessConfig(t));return{stdout:d.stdout,stderr:d.stderr,exitCode:d.exitCode,env:this.lastEnv}}buildJshProcessConfig(e){if(!(!this.options.processManager||!this.options.processOwner))return{processManager:this.options.processManager,owner:this.options.processOwner,getParentPid:()=>e??this.activeShellPid??this.options.getCurrentShellPid?.()}}};export{fa as C,xo as S,Io as _,WB as a,Sa as b,hp as c,ms as d,ss as f,Lo as g,ts as h,BB as i,ep as l,rs as m,VV as n,RB as o,is as p,PV as r,$p as s,YV as t,hs as u,Do as v,xa as x,va as y};
3484
+ `,stderr:``,exitCode:0};let n;try{n=bV(e)}catch(e){return cV(e.message)}let r=n.positional[0],i=n.positional[1],a=!r||r===`-`,o;try{o=await SV(t,r,a)}catch{return cV(`${r}: No such file or directory`)}if(n.revert){let e=dV(o),r=n.plain?gV(e):_V(e);return i?(await t.fs.writeFile(t.fs.resolvePath(t.cwd,i),r),{stdout:``,stderr:``,exitCode:0}):{stdout:dV(r),stderr:``,exitCode:0}}let{data:s,base:c}=wV(n,o),l=CV(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=er(t,o),s=n?`${n}/${o}`:o;a+=await EV(e,i,s,r)}return a}function DV(){return{stdout:`usage: zip [-r] <archive.zip> <path> [path...]
3485
+ `,stderr:``,exitCode:0}}function OV(){return S(`zip`,async(e,t)=>{if(e.length===0||e.includes(`--help`)||e.includes(`-h`))return DV();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
3486
+ `,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(/^\.\//,``))||tr(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
3487
+ `,exitCode:1};let c=Ct(o);return await t.fs.writeFile(i,c),{stdout:`created ${i} (${s} file(s))\n`,stderr:``,exitCode:0}})}function kV(e){return{setEnv:e.setEnv,unsetEnv:e.unsetEnv,broker:e.sudoCommand?.broker}}function AV(e){let{fs:t,fetch:n}=e;if(!t||!n)return[];let r={fs:t,fetch:n,scriptCatalog:e.scriptCatalog,syncScriptCommands:e.syncScriptCommands};return[GD(`ipk`,r),GD(`npm`,r),GD(`i`,r),PO(`ipx`,{fs:t,fetch:n}),PO(`npx`,{fs:t,fetch:n}),$y(`di`,{fs:t,fetch:n}),$y(`uv`,{fs:t,fetch:n}),oR({fs:t,fetch:n})]}function jV(e={}){let t=[ZT({getJshCommands:e.getJshCommands,getWorkflowCommands:e.getWorkflowCommands}),ne(),qF(),fF(),aF(e.browserAPI,e.fs),Uj(e.browserAPI),my(e.browserAPI),nD(e),OV(),IL(),OI(e.fs?{fs:e.fs}:{}),eI(),sI(),iI(),lv(),TV(),VF(`sqlite3`),VF(`sqllite`),GI(),dL(),hx(),G_(),oj({buildProcessConfig:e.buildProcessConfig}),oj({buildProcessConfig:e.buildProcessConfig},`jsh`),aN(`python3`,{buildProcessConfig:e.buildProcessConfig}),aN(`python`,{buildProcessConfig:e.buildProcessConfig}),...AV(e),...e.fs?[xS({fs:e.fs})]:[],...e.fs?[vA({fs:e.fs})]:[],...e.fetch?[cE({fetch:e.fetch,streamFetch:e.streamFetch})]:[],cS(),lS(),Gz(e.webhook),AB(),py(e.crontask),Ek({fs:e.fs,scriptCatalog:e.scriptCatalog}),lM({fs:e.fs,fetch:e.fetch}),bS(),MF(),Wj(),Gj(`pdftk`),Gj(`pdf`),K_(`biscotto`),K_(`biscotti`),tM(`pdftoppm`),tM(`pdftocairo`),nM(`pdftotext`),Zv(`convert`),Zv(`magick`),IB({fs:e.fs,scriptCatalog:e.scriptCatalog,getStaticBuiltins:e.getStaticBuiltins,getScriptRegisteredNames:e.getScriptRegisteredNames}),hL(),jL(),QE(),$E(),ML(),yA(),lN(),bk(),Bb(),xj(),bj(),_k(),AP(kV(e)),SN({fs:e.fs}),JN(),ov(),sv(),cv(`xclip`),cv(`xsel`),qN(),zS(),_g(),vg(),KA(e.fs),tt(),dj(),Rg({getParentJid:e.getParentJid}),Jb(),jM({processManager:e.processManager}),xR({processManager:e.processManager}),LO({processManager:e.processManager}),FO({processManager:e.processManager,scriptCatalog:e.scriptCatalog}),...Vg(),_A(),lk(),KR(),PE(),Xx(),cz({processManager:e.processManager}),fv({processManager:e.processManager,browser:e.browserAPI,sudoBroker:e.sudoCommand?.broker}),sS(),$_({registry:e.cherryRuntimeRegistry}),Cy(),ky({fs:e.fs}),Ay({fs:e.fs}),YF(e.sudoCommand),$B({getParentJid:e.getParentJid,syncScriptCommands:e.syncScriptCommands}),jB(),dF()];return e.fs&&(iM(),t.push(...Nn.map(t=>JT(t,e.browserAPI,e.fs,{isScoop:e.isScoop})))),t}let MV=null;function NV(e){MV=e}function PV(e){MV?.(e)}var FV=Dt();const IV=Reflect.get(Ye,`DefenseInDepthBox`);function LV(e){return(typeof e==`string`?e:e?.encoding)??`utf8`}function RV(e,t){if(typeof e!=`string`)return e;let n=LV(t);if(n===`binary`||n===`latin1`){let t=ue(e);if(t)return t}return FV.Buffer.from(e,n)}function zV(e){return e===`/bin`?`/usr/bin`:e.startsWith(`/bin/`)?`/usr${e}`:e}var BV=class{vfs;registeredCommandsFn=null;listingStats=new Map;listingStatsMax;listingStatsTtlMs;constructor(e,t){this.vfs=e,this.listingStatsMax=Math.max(1,t?.listingStatsMax??2e4),this.listingStatsTtlMs=t?.listingStatsTtlMs??1e3,this.updateMetadataBatch=this.updateMetadataBatch.bind(this),this.symlinkBatch=this.symlinkBatch.bind(this)}get listingStatsSize(){return this.listingStats.size}primeListingStats(e,t){let n=Date.now();if(t.length>this.listingStatsMax){this.listingStats.clear();return}this.sweepExpiredListingStats(n),this.listingStats.size+t.length>this.listingStatsMax&&this.listingStats.clear();let r=e===`/`?`/`:`${e}/`;for(let e of t){let t=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){let t=zV(e);if(t===`/usr`||t===`/usr/bin`)return{isFile:!1,isDirectory:!0,isSymbolicLink:!1,mode:493,size:0,mtime:new Date(0)};if(t.startsWith(`/usr/bin/`)){let e=t.slice(9);if(e.length>0&&!e.includes(`/`)&&this.getVirtualBinCommands().includes(e))return{isFile:!0,isDirectory:!1,isSymbolicLink:!1,mode:493,size:0,mtime:new Date(0)}}return null}canWrite(e){let t=this.vfs;return typeof t.canWrite!=`function`||t.canWrite(e)}listMountPoints(){let e=this.vfs;return typeof e.listMountPoints==`function`?e.listMountPoints():[]}trusted(e){let t=IV?.runTrustedAsync;return t?t(e):Promise.resolve().then(e)}async readFile(e,t){return this.trusted(async()=>{let n=b(e),r=await this.vfs.readFile(n,{encoding:`binary`}),i=r instanceof Uint8Array?r:new TextEncoder().encode(r),a=LV(t),o=FV.Buffer.from(i.buffer,i.byteOffset,i.byteLength).toString(a);return a!==`hex`&&a!==`base64`&&g(o,i),o})}async readFileBuffer(e){return this.trusted(async()=>{let t=b(e),n=await this.vfs.readFile(t,{encoding:`binary`});return n instanceof Uint8Array?n:new TextEncoder().encode(n)})}async readFileBytes(e){let t=await this.readFileBuffer(e);return FV.Buffer.from(t.buffer,t.byteOffset,t.byteLength).toString(`latin1`)}async getNativeFile(e){return this.trusted(()=>this.vfs.getNativeFile(b(e)))}async readFileRange(e,t,n){return this.trusted(()=>this.vfs.readFileRange(b(e),t,n))}async writeFile(e,t,n){return this.dropListingStats(),this.trusted(async()=>{let r=b(e);await this.vfs.writeFile(r,RV(t,n))})}async appendFile(e,t,n){return this.dropListingStats(),this.trusted(()=>this.vfs.appendFile(b(e),RV(t,n)))}async exists(e){return this.trusted(async()=>{let t=b(e);return this.virtualUsrStat(t)?!0:this.vfs.exists(t)})}async stat(e){return this.trusted(async()=>{let t=b(e),n=this.virtualUsrStat(t);if(n)return n;let r=this.vfs.statSync(t);if(r)return{isFile:r.type===`file`,isDirectory:r.type===`directory`,isSymbolicLink:!!r.isSymlink,mode:r.mode??(r.type===`directory`?493:420),size:r.size,mtime:new Date(r.mtime),identity:r.identity,dev:r.dev,ino:r.identity===void 0?void 0:r.ino};let i=this.primedStats(t)??await this.vfs.stat(t);return{isFile:i.type===`file`,isDirectory:i.type===`directory`,isSymbolicLink:!!i.isSymlink,mode:i.mode??(i.type===`directory`?493:420),size:i.size,mtime:new Date(i.mtime),identity:i.identity,dev:i.dev,ino:i.identity===void 0?void 0:i.ino}})}async lstat(e){return this.trusted(async()=>{let t=b(e),n=this.virtualUsrStat(t);if(n)return n;let r=this.vfs.lstatSync(t);if(r)return{isFile:r.type===`file`,isDirectory:r.type===`directory`,isSymbolicLink:r.type===`symlink`,mode:r.mode??(r.type===`directory`?493:r.type===`symlink`?511:420),size:r.size,mtime:new Date(r.mtime),identity:r.identity,dev:r.dev,ino:r.identity===void 0?void 0:r.ino};let i=this.primedStats(t)??await this.vfs.lstat(t);return{isFile:i.type===`file`,isDirectory:i.type===`directory`,isSymbolicLink:i.type===`symlink`,mode:i.mode??(i.type===`directory`?493:i.type===`symlink`?511:420),size:i.size,mtime:new Date(i.mtime),identity:i.identity,dev:i.dev,ino:i.identity===void 0?void 0:i.ino}})}async mkdir(e,t){return this.dropListingStats(),this.trusted(async()=>{await this.vfs.mkdir(b(e),t)})}async readdir(e){return this.trusted(async()=>{let t=b(e);if(t===`/usr`)return[`bin`];if(zV(t)===`/usr/bin`)return this.getVirtualBinCommands().slice().sort();let n=this.vfs.readDirSync(t);if(n!==null)return n.map(e=>e.name);let r=await this.vfs.readDir(t,{includeStats:!0});return this.primeListingStats(t,r),r.map(e=>e.name)})}async readdirWithFileTypes(e){return this.trusted(async()=>{let t=b(e);if(t===`/usr`)return[{name:`bin`,isFile:!1,isDirectory:!0,isSymbolicLink:!1}];if(zV(t)===`/usr/bin`)return this.getVirtualBinCommands().slice().sort().map(e=>({name:e,isFile:!0,isDirectory:!1,isSymbolicLink:!1}));let n=this.vfs.readDirSync(t);if(n!==null)return this.mapFastEntriesToDirents(n);let r=await this.vfs.readDir(t,{includeStats:!0});return this.primeListingStats(t,r),this.mapAsyncEntriesToDirents(r)})}mapFastEntriesToDirents(e){return e.map(e=>this.entryToDirent(e))}mapAsyncEntriesToDirents(e){return e.map(e=>this.entryToDirent(e))}entryToDirent(e){return e.type===`symlink`?{name:e.name,isFile:!1,isDirectory:!1,isSymbolicLink:!0}:{name:e.name,isFile:e.type===`file`,isDirectory:e.type===`directory`,isSymbolicLink:!1}}async rm(e,t){return this.dropListingStats(),this.trusted(async()=>{await this.vfs.rm(b(e),t)})}async cp(e,t,n){return this.dropListingStats(),this.trusted(async()=>{let r=b(e),i=b(t);if((await this.vfs.stat(r)).type===`directory`){if(!n?.recursive)throw new 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=x(e,r.name),i=x(t,r.name);r.type===`directory`?await this.cpDir(n,i):await this.vfs.copyFile(n,i)}}async mv(e,t){return this.dropListingStats(),this.trusted(async()=>{await this.vfs.rename(b(e),b(t))})}async rename(e,t){return this.mv(e,t)}resolvePath(e,t){return t.startsWith(`/`)?b(t):b(x(e,t))}getAllPaths(){return[]}async chmod(e,t){return this.dropListingStats(),this.trusted(()=>this.vfs.chmod(b(e),t))}async updateMetadataBatch(e){return this.dropListingStats(),this.trusted(()=>this.vfs.updateMetadataBatch(e.map(e=>({...e,path:b(e.path)}))))}async symlinkBatch(e){return this.dropListingStats(),this.trusted(()=>this.vfs.symlinkBatch(e.map(e=>({target:e.target,path:b(e.path)}))))}async symlink(e,t){return this.dropListingStats(),this.trusted(async()=>{await this.vfs.symlink(e,b(t))})}async link(e,t){throw Error(`Hard links not supported in VirtualFS`)}async readlink(e){return this.trusted(async()=>this.vfs.readlink(b(e)))}async realpath(e){return this.trusted(async()=>this.vfs.realpath(b(e)))}async utimes(e,t,n){return this.dropListingStats(),this.trusted(()=>this.vfs.utimes(b(e),t,n))}invalidatePaths(e){this.dropListingStats();let t=this.vfs;t.invalidatePaths&&t.invalidatePaths(e)}async forgetSidecarConsistency(){await this.vfs.forgetSidecarConsistency?.()}};function VV(e){return e&&typeof e.getWatcher==`function`?e.getWatcher?.()??null:e&&typeof e.getUnderlyingFS==`function`?VV(e.getUnderlyingFS?.()):null}async function HV(e){let t=le(`github`);if(t){if(e?.force){await t.onSilentRenew?.();return}await t.getValidAccessToken?.()}}const UV=e(`almost-bash-shell`),WV=`__SLICC_RUN_PID`,GV=`__SLICC_OUTPUT_TEE__`;function KV(e){let t=e?.get(WV);if(t===void 0)return;let n=Number.parseInt(t,10);return Number.isSafeInteger(n)&&n>0?n:void 0}function qV(e){if(!(WV in e)&&!(GV in e)&&!(`__SLICC_SUDO_REASON`in e)&&!(`__SLICC_PIPESTATUS`in e)&&!(`__SLICC_PIPESTATUS_EX`in e))return{...e};let{[WV]:t,[GV]:n,[em]:r,[ip]:i,[ap]:a,...o}=e;return o}var JV=class e{options;bash;vfsAdapter;gitCommands;mountCommands;lastEnv;cwd;umask=18;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(KV(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:ep,PATH:Un,USER:`user`,SHELL:`/bin/bash`,TMPDIR:`/tmp`,PWD:t,...e.env}}buildSupplementalCommands(e,t,n){return jV({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,streamFetch:n,scriptCatalog:this.scriptCatalog,browserAPI:e.browserAPI,webhook:e.webhook,crontask:e.crontask,getParentJid:e.getParentJid,isScoop:e.isScoop,buildProcessConfig:this.resolveJshProcessConfig,processManager:e.processManager,sudoCommand:e.sudo?{broker:e.sudo.broker,persistGrant:async e=>{this.pendingCommandGrants.push(e)},suppressNextGate:e=>this.registerSudoBypass(e)}:void 0,setEnv:(e,t)=>{this.pendingEnvWrites.set(e,t),this.lastEnv[e]=t},unsetEnv:e=>{this.pendingEnvWrites.set(e,null),delete this.lastEnv[e]}})}constructor(t){this.options=t,this.vfsAdapter=new BV(t.fs),this.progress=new gp({scrubLabel:t.scrubProgressLabel}),this.allowedCommands=e.buildAllowedCommandSet(t);let n=t.cwd??`/`,r=e.buildInitialEnv(t,n);this.gitCommands=new Zf({fs:t.fs,authorName:r.GIT_AUTHOR_NAME??`User`,authorEmail:r.GIT_AUTHOR_EMAIL??`user@example.com`,ensureFreshGithubToken:HV}),this.mountCommands=new Cs({fs:t.fs,isScoop:t.isScoop,acquireLocalMountViaToolUI:sm});let i=t.jshDiscoveryFs??t.fs,a=t.bshDiscoveryFs??t.fs,o=VV(i)??VV(a);this.scriptCatalog=t.scriptCatalog??new oi({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=p({progress:xp(this.progress)}),l=h({progress:xp(this.progress)}),u=this.buildSupplementalCommands(t,c,l),d=[s,this.createMountCustomCommand(),this.createUmountCustomCommand(),th(t.fs),Qh(t.fs,c,t.browserAPI),...u].filter(e=>this.isCommandAllowed(e.name)),f=[...Ze(),...Xe()],m=this.allowedCommands?f.filter(e=>this.isCommandAllowed(e)):void 0;if(this.bash=new Qe({fs:this.vfsAdapter,cwd:n,env:{},fetch:c,commands:m,customCommands:d,sleep:Hp(this.progress,{isAborted:()=>this.activeRunSignal?.aborted??!1}),executionLimitProfile:t.executionLimitProfile,executionLimits:$f(t.isScoop?.()??!1,t.executionLimits)}),this.bash.registerTransformPlugin(hm),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 g=d.map(e=>e.name),_=m??[...Ze(),...Xe()];this.builtinCommandNames=new Set([..._,...g]),this.staticBuiltinNames=new Set(this.builtinCommandNames),this.vfsAdapter.setRegisteredCommandsFn(()=>[...this.builtinCommandNames]),this.lastEnv={...r},this.cwd=n,this.startInitialJshSync()}getBash(){return this.bash}getCwd(){return this.cwd}getScriptCatalog(){return this.scriptCatalog}getEnv(){return{...this.lastEnv}}setMaskedEnvVar(e,t){this.pendingEnvWrites.set(e,t),this.lastEnv[e]=t}applySessionOverrides(e){e.cwd!==void 0&&(this.cwd=e.cwd,this.lastEnv.PWD=e.cwd),e.env&&Object.assign(this.lastEnv,e.env)}async getJshCommandNames(){return[...(await this.getFilteredJshCommands()).keys()]}async syncJshCommands(){return this.jshSyncInflight===null?(this.jshSyncInflight=this.doSyncJshCommands(),this.jshSyncInflight):(this.jshSyncDirty=!0,this.jshSyncInflight)}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 Br(e,t,{fs:this.vfsAdapter,cwd:this.cwd,env:new Map(Object.entries(this.lastEnv)),stdin:``,exec:(e,t)=>this.bash.exec(e,{env:t?.env??this.lastEnv,cwd:t?.cwd??this.cwd,umask:this.umask,...t?.env===void 0?{}:{replaceEnv:!0}})},this.buildJshProcessConfig())}dispose(){this.ownsScriptCatalog&&this.scriptCatalog.dispose()}async renderMediaPreview(e){throw Error(`terminal preview is unavailable in headless mode`)}currentScanRoots(){return Wn(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 tp(e);this.lastEnv.HOME=t,this.options.env?.USER||(this.lastEnv.USER=np(t));let n=`${t.replace(/\/+$/,``)}/.profile`;if(!await e.exists(n).catch(()=>!1))return;let r=await this.bash.exec(`. "$HOME/.profile"`,{env:this.lastEnv,cwd:this.cwd,umask:this.umask});if(typeof r.umask==`number`&&(this.umask=r.umask),r.env){let{PWD:e,...t}=r.env;this.lastEnv={...t,PWD:this.lastEnv.PWD??this.cwd}}}catch(e){UV.warn(`HOME/profile init failed; continuing with defaults`,e)}}async waitForInitialJshSync(e){let t=this.initialJshSync;if(t===null)return;if(!e){await t;return}if(e.aborted)return;let n;try{await new Promise(r=>{n=()=>r(),e.addEventListener(`abort`,n,{once:!0}),t.then(()=>r(),()=>r())})}finally{n&&e.removeEventListener(`abort`,n)}}async runCommand(e,t,n,r=``,i,a=!1){PV(e.trim().split(/\s+/)[0]||`unknown`),m(),await this.waitForInitialJshSync(t);let o=nm(e),s={env:{...this.lastEnv,...n===void 0?{}:{[WV]:String(n)},...i===void 0?{}:{[GV]:i},...o?{[em]:o}:{}},cwd:this.cwd,umask:this.umask,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(up(e,a),s)}finally{this.activeRunSignal===t&&(this.activeRunSignal=void 0),this.endScriptRun(l)}if(await this.flushPendingCommandGrants(),u=dp(u,a),typeof u.umask==`number`&&(this.umask=u.umask),u.env&&(this.lastEnv=qV(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 fp(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`?Kp(t,this.progress):Jp(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(GV),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(GV);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=Lp(this.bash.transform(e).ast,this.registryNames)}catch{t={totalSteps:null}}return this.scriptRun=new zp(t,this.progress,Rp(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(em))||e.execute(n,r)}}}async gateCommandDispatch(e,t,n){let r=this.options.sudo;if(!r)return null;let i=Xp(e,t);if(this.consumeSudoBypass(i))return null;let a=r.getPolicy();if(!a)return null;let o=await Qp(i,{policy:a,broker:r.broker,persistGrant:async e=>{this.pendingCommandGrants.push(e)},defaultDisposition:r.defaultDisposition,...n?{reason:n}:{}});return o.allowed?null:{stdout:``,stderr:`${o.message}\n`,exitCode:o.exitCode??77}}registerSudoBypass(e){let t=e.trim();t&&this.pendingSudoBypasses.set(t,(this.pendingSudoBypasses.get(t)??0)+1)}consumeSudoBypass(e){let t=this.pendingSudoBypasses.get(e);return t?(t===1?this.pendingSudoBypasses.delete(e):this.pendingSudoBypasses.set(e,t-1),!0):!1}async flushPendingCommandGrants(){if(this.pendingCommandGrants.length===0)return;let e=this.pendingCommandGrants;this.pendingCommandGrants=[];for(let t of e)try{await this.persistCommandGrant(t)}catch{}}async persistCommandGrant(e){let t=this.options.sudo?.persistCommandGrant;if(t){await t(e);return}let n=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(`
3488
+ `)?`${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)UV.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 Ur(t,[`node`,o,...e],{fs:i.fs,cwd:i.cwd,env:i.env,stdin:i.stdin,exec:a},this.buildJshProcessConfig(KV(i.env)))}let s=(await t.getWorkflowCommands()).get(r);if(s){let t=ai(s.path,e);return a(t[0],{args:t.slice(1),cwd:i.cwd})}return{stdout:``,stderr:`${r}: command no longer exists\n`,exitCode:127}};return{name:e,trusted:!0,async execute(e,t){try{return await i(e,t)}catch(e){let t=e instanceof Error?e.message:String(e);return{stdout:``,stderr:`${r}: ${t}\n`,exitCode:1}}}}}createGitCustomCommand(){let e=this.gitCommands;return S(`git`,async(t,n)=>{let r=n.cwd,i=await e.execute(t,r,n.env,P(n.stdin));return{stdout:i.stdout,stderr:i.stderr,exitCode:i.exitCode}})}createMountCustomCommand(){let e=this.mountCommands;return S(`mount`,async(t,n)=>{let r=n.cwd,i=await e.execute(t,r,n.env);return{stdout:i.stdout,stderr:i.stderr,exitCode:i.exitCode}})}createUmountCustomCommand(){let e=this.mountCommands;return S(`umount`,async(t,n)=>{let r=n.cwd,i=await e.executeUmount(t,r);return{stdout:i.stdout,stderr:i.stderr,exitCode:i.exitCode}})}async getFilteredJshCommands(){let e=await this.scriptCatalog.getJshCommands(this.currentScanRoots()),t=new Map;for(let[n,r]of e)this.builtinCommandNames.has(n)||this.isCommandAllowed(n)&&t.set(n,r);return t}async getFilteredWorkflowCommands(){let e=await this.scriptCatalog.getWorkflowCommands(),t=new Map;for(let[n,r]of e)this.isCommandAllowed(n)&&t.set(n,r);return t}async getWorkflowCommandNames(){return[...(await this.getFilteredWorkflowCommands()).keys()]}async tryJshFallback(e,t){let n=e.trim(),r=n.indexOf(` `),i=r>=0?n.slice(0,r):n,a=r>=0?n.slice(r+1).trim():``,o=(await this.getFilteredJshCommands()).get(i);if(!o)return null;let s=a?rp(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 Ur(l,u,{fs:this.vfsAdapter,cwd:this.cwd,env:new Map(Object.entries(this.lastEnv)),stdin:``,exec:(e,t)=>this.bash.exec(e,{env:t?.env??this.lastEnv,cwd:t?.cwd??this.cwd,umask:this.umask,...t?.env===void 0?{}:{replaceEnv:!0}})},this.buildJshProcessConfig(t));return{stdout:d.stdout,stderr:d.stderr,exitCode:d.exitCode,env:this.lastEnv}}buildJshProcessConfig(e){if(!(!this.options.processManager||!this.options.processOwner))return{processManager:this.options.processManager,owner:this.options.processOwner,getParentPid:()=>e??this.activeShellPid??this.options.getCurrentShellPid?.()}}};export{fa as C,xo as S,Io as _,UB as a,Sa as b,hp as c,ms as d,ss as f,Lo as g,ts as h,zB as i,ep as l,rs as m,BV as n,LB as o,is as p,NV as r,$p as s,JV as t,hs as u,Do as v,xa as x,va as y};