sliccy 6.226.2 → 6.226.4

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 (148) hide show
  1. package/dist/ui/.vite/manifest.json +182 -182
  2. package/dist/ui/assets/{SKILL-CG7Xvjv7.js → SKILL-DLrI4y2g.js} +1 -1
  3. package/dist/ui/assets/{account-store-DP_9wI9F.js → account-store-CqKfWDow.js} +1 -1
  4. package/dist/ui/assets/{account-store-CckwuDB2.js → account-store-DtP5_zcC.js} +1 -1
  5. package/dist/ui/assets/{adobe-CpN64YaE.js → adobe-CakRZi3Z.js} +1 -1
  6. package/dist/ui/assets/{adobe-BX6MOOVZ.js → adobe-Csub1Mq2.js} +1 -1
  7. package/dist/ui/assets/{agent-panels-CGXjqFbQ.js → agent-panels-BsbSd_Bc.js} +1 -1
  8. package/dist/ui/assets/{almost-bash-shell-headless-DANvPMM_.js → almost-bash-shell-headless-B9L2TCmL.js} +309 -289
  9. package/dist/ui/assets/{apply-layout-BqFOBUKs.js → apply-layout-BxoXOQwo.js} +1 -1
  10. package/dist/ui/assets/{apps-C4Y2CDb2.js → apps-CWQK35id.js} +1 -1
  11. package/dist/ui/assets/{azure-openai-Djld28cS.js → azure-openai-B1BILILZ.js} +1 -1
  12. package/dist/ui/assets/{azure-openai-Wvaw8FEs.js → azure-openai-C8_duqKu.js} +1 -1
  13. package/dist/ui/assets/{backend-hostfs-B383ob12.js → backend-hostfs-BmwQZTgH.js} +1 -1
  14. package/dist/ui/assets/{cdp-B_M-UmZ-.js → cdp-Be3yJaZS.js} +1 -1
  15. package/dist/ui/assets/{cerebras-CYnqzV28.js → cerebras-CnBXxZAk.js} +1 -1
  16. package/dist/ui/assets/{cerebras-CnYplQcE.js → cerebras-G8UhkZcQ.js} +1 -1
  17. package/dist/ui/assets/{composer-speech-F0aNDREI.js → composer-speech-CO-U-3PP.js} +1 -1
  18. package/dist/ui/assets/{connect-surface-BnTWpdsP.js → connect-surface-xpPAUM1h.js} +1 -1
  19. package/dist/ui/assets/{directed-approval-ClnG3YEs.js → directed-approval-BBOfwL7o.js} +1 -1
  20. package/dist/ui/assets/{emscripten-vfs-hook-d03P2Jrb.js → emscripten-vfs-hook-gFKvX0SY.js} +1 -1
  21. package/dist/ui/assets/{ensure-speech-assets-BAwQVUZ-.js → ensure-speech-assets-Cv5w_6Cs.js} +1 -1
  22. package/dist/ui/assets/{frozen-archive-writer-DlQ2pWzw.js → frozen-archive-writer-DKdMEKnu.js} +1 -1
  23. package/dist/ui/assets/{fs-B6V0zxAV.js → fs-Dh2iUJ-I.js} +2 -2
  24. package/dist/ui/assets/{fs-DFXgS-c1.js → fs-DjMlnfEu.js} +1 -1
  25. package/dist/ui/assets/{gelatiere-store-aggur0yp.js → gelatiere-store-QDXLhcIh.js} +1 -1
  26. package/dist/ui/assets/{gelatiere-unit-is8dhW-d.js → gelatiere-unit-cDv5RtM9.js} +1 -1
  27. package/dist/ui/assets/{github-pVY7MyJd.js → github-CBim-rA9.js} +1 -1
  28. package/dist/ui/assets/{github-auth-yNHDwebn.js → github-auth-Cy2cTRMV.js} +1 -1
  29. package/dist/ui/assets/{github-copilot-BADuy5GH.js → github-copilot-BQhAeZoY.js} +1 -1
  30. package/dist/ui/assets/{github-copilot-BOrHa5RN.js → github-copilot-I2nKVzpw.js} +1 -1
  31. package/dist/ui/assets/{github-install-BIoofnjZ.js → github-install-C77mWn6S.js} +1 -1
  32. package/dist/ui/assets/{github-CWBn99Bd.js → github-nzjWzA2U.js} +2 -2
  33. package/dist/ui/assets/{github-zip-TmRPTM75.js → github-zip-UZeZ-voR.js} +1 -1
  34. package/dist/ui/assets/{hear-JttBNQ7c.js → hear-CLBz15R3.js} +1 -1
  35. package/dist/ui/assets/{help-DvETwJex.js → help-Da2S8Plv.js} +1 -1
  36. package/dist/ui/assets/{installer-CmAHuSft.js → installer-ZC2UV-cH.js} +1 -1
  37. package/dist/ui/assets/{ipk-mamba-D1bLinsh.js → ipk-mamba-BDqOegY1.js} +1 -1
  38. package/dist/ui/assets/{js-realm-worker-CsvflECa.js → js-realm-worker-BP3b2BW6.js} +2 -2
  39. package/dist/ui/assets/{jsh-executor-CEkiOk4d.js → jsh-executor-BnG9duV7.js} +2 -2
  40. package/dist/ui/assets/{kernel-worker-CSRynihq.js → kernel-worker-Dt0qVVA4.js} +10 -10
  41. package/dist/ui/assets/{lick-ws-bridge-C_07Sgiv.js → lick-ws-bridge-CNZGtU-G.js} +1 -1
  42. package/dist/ui/assets/{lick-ws-bridge-ZBncAqka.js → lick-ws-bridge-DSv0KPA7.js} +1 -1
  43. package/dist/ui/assets/{live-session-curation-lunfYQqv.js → live-session-curation-C8ic_T_L.js} +1 -1
  44. package/dist/ui/assets/{live-session-snapshot-BMzJEYH6.js → live-session-snapshot-BfgdULN4.js} +1 -1
  45. package/dist/ui/assets/{local-llm-DYEdgnfp.js → local-llm-BEhlvNyE.js} +1 -1
  46. package/dist/ui/assets/{local-llm-FyJMIUux.js → local-llm-BIA90YgO.js} +1 -1
  47. package/dist/ui/assets/{main-mYxYChCJ.js → main-CcsDAmx4.js} +3 -3
  48. package/dist/ui/assets/{main-cherry-BknGKE1w.js → main-cherry-wVsCzmMd.js} +1 -1
  49. package/dist/ui/assets/{memory-curation-seam-ff-huuyf.js → memory-curation-seam-CKuRq6kM.js} +1 -1
  50. package/dist/ui/assets/{memory-health-hO_nQaAH.js → memory-health-DPNqb4XW.js} +1 -1
  51. package/dist/ui/assets/{memory-write-execute-CotJ6gZQ.js → memory-write-execute-Ddchxax4.js} +1 -1
  52. package/dist/ui/assets/{merge-folded-cost-into-frozen-85Z0pknu.js → merge-folded-cost-into-frozen-W9HxDZuw.js} +1 -1
  53. package/dist/ui/assets/{mount-dHmWGrgT.js → mount-BJ6v5c1U.js} +3 -3
  54. package/dist/ui/assets/{mount-BXI8X7dl.js → mount-BSXUu8ny.js} +1 -1
  55. package/dist/ui/assets/{new-session-CwPpsslH.js → new-session-Bi-WSHjF.js} +2 -2
  56. package/dist/ui/assets/{oauth-bootstrap-DFH58dMK.js → oauth-bootstrap-C7l4ahaH.js} +2 -2
  57. package/dist/ui/assets/{onboarding-orchestrator-IM_eYwPO.js → onboarding-orchestrator-CXG_pKvN.js} +1 -1
  58. package/dist/ui/assets/{openai-codex-B5TF7s7X.js → openai-codex-BmCp3jbS.js} +1 -1
  59. package/dist/ui/assets/{openai-codex-DOLy2I4o.js → openai-codex-BxSwMCUp.js} +1 -1
  60. package/dist/ui/assets/{openrouter-DQpeSY-A.js → openrouter-CSg8e6bc.js} +1 -1
  61. package/dist/ui/assets/{openrouter-CQSD-mOw.js → openrouter-CzE_jMo1.js} +1 -1
  62. package/dist/ui/assets/{openrouter-free-DB3Go5D-.js → openrouter-free-C6j87AW6.js} +1 -1
  63. package/dist/ui/assets/{openrouter-free-cjPrMokY.js → openrouter-free-DCnJbpR6.js} +1 -1
  64. package/dist/ui/assets/{openrouter-oauth-B_Qr_P-V.js → openrouter-oauth-BicjWPKx.js} +1 -1
  65. package/dist/ui/assets/{openrouter-oauth-DQeQAIy-.js → openrouter-oauth-_hLJp2xE.js} +1 -1
  66. package/dist/ui/assets/{opfs-mount-tnswXF8V.js → opfs-mount-mh0nq9w9.js} +1 -1
  67. package/dist/ui/assets/{panel-rpc-handlers-DWiTg8Ql.js → panel-rpc-handlers-Dxfsk5di.js} +2 -2
  68. package/dist/ui/assets/{panelize-shell-BKkiVZiC.js → panelize-shell-Dv9wG2yx.js} +1 -1
  69. package/dist/ui/assets/{pi-edit-execution-DoPTCkJU.js → pi-edit-execution-CPQR1_rI.js} +1 -1
  70. package/dist/ui/assets/{provider-DHEg3RIC.js → provider-C6A_QvgY.js} +2 -2
  71. package/dist/ui/assets/{provider-Do8hIn0m.js → provider-DKLBs-rm.js} +1 -1
  72. package/dist/ui/assets/{provider-settings-x2iD9c0h.js → provider-settings-B10w9vry.js} +1 -1
  73. package/dist/ui/assets/provider-store-access-B1aRkFuC.js +1 -0
  74. package/dist/ui/assets/provider-store-access-DJ_XxgCD.js +1 -0
  75. package/dist/ui/assets/{providers-B8axP5LK.js → providers-C32V1tu8.js} +2 -2
  76. package/dist/ui/assets/{providers-ChXzAurS.js → providers-CSGLxatZ.js} +1 -1
  77. package/dist/ui/assets/{quick-llm-DbTW7_qg.js → quick-llm-C55s80C1.js} +1 -1
  78. package/dist/ui/assets/{realm-inprocess-Ck6ydQwT.js → realm-inprocess-R-7UQxWy.js} +2 -2
  79. package/dist/ui/assets/{realm-unhandled-rejections-CeAkuLUL.js → realm-unhandled-rejections-CcTUfDlL.js} +1 -1
  80. package/dist/ui/assets/{realm-unhandled-rejections-CnU72aPe.js → realm-unhandled-rejections-MJQ577ZB.js} +1 -1
  81. package/dist/ui/assets/{recovery-screen-ty-N4sk6.js → recovery-screen-CjvEqRSh.js} +1 -1
  82. package/dist/ui/assets/{remote-terminal-view-CNpjHeSR.js → remote-terminal-view-B9Iehf9R.js} +2 -2
  83. package/dist/ui/assets/{restore-CGbZluMQ.js → restore-ClVrGUO_.js} +1 -1
  84. package/dist/ui/assets/{run-Cka1zPhr.js → run-BedH4wf2.js} +1 -1
  85. package/dist/ui/assets/{run-DPEU0mPp.js → run-BhUNOe2w.js} +2 -2
  86. package/dist/ui/assets/{run-DHBSR6nH.js → run-CmnvjepF.js} +1 -1
  87. package/dist/ui/assets/{run-BKqnD09g.js → run-CpuIjsuc.js} +1 -1
  88. package/dist/ui/assets/{run-DGl39wQp.js → run-DVSJbV2i.js} +1 -1
  89. package/dist/ui/assets/{run-B9eYT4Oj.js → run-DiYNywB4.js} +2 -2
  90. package/dist/ui/assets/{session-command-memory-NaC_Sdn0.js → session-command-memory-CVBwVZ62.js} +2 -2
  91. package/dist/ui/assets/{session-jsonl-CK1nnZwL.js → session-jsonl-BccYkSi6.js} +1 -1
  92. package/dist/ui/assets/{session-jsonl-iSVMsOx7.js → session-jsonl-CY233b8_.js} +1 -1
  93. package/dist/ui/assets/{session-search-index-MELCgtJ1.js → session-search-index-Ch3pCEwc.js} +1 -1
  94. package/dist/ui/assets/{setup-feature-flags-remote-DGeAaOhE.js → setup-feature-flags-remote-CODtZG_r.js} +1 -1
  95. package/dist/ui/assets/{setup-model-catalog-B1uR2ova.js → setup-model-catalog-B3nHaQyu.js} +1 -1
  96. package/dist/ui/assets/{signed-fetch-bUBxSCEr.js → signed-fetch-BScOrFAI.js} +1 -1
  97. package/dist/ui/assets/{silent-renew-backoff-k-_ROUgc.js → silent-renew-backoff-Du_Xl4_2.js} +1 -1
  98. package/dist/ui/assets/slicc-version-CTGV3KxX.js +1 -0
  99. package/dist/ui/assets/{snapshot-DQ087sVE.js → snapshot-DOjH_Br5.js} +1 -1
  100. package/dist/ui/assets/{snapshot-features-DeJe8uji.js → snapshot-features-Ha3qZYi5.js} +1 -1
  101. package/dist/ui/assets/{soundscape-BnFzEyFw.js → soundscape-DZdmw_5a.js} +1 -1
  102. package/dist/ui/assets/{speak-dfd9BW6L.js → speak-OzKJ4LDt.js} +1 -1
  103. package/dist/ui/assets/{sprinkle-manager-yEepkH2c.js → sprinkle-manager-CdstazgG.js} +1 -1
  104. package/dist/ui/assets/{sprinkle-renderer-k4VuPxiX.js → sprinkle-renderer-Bs6XZuJN.js} +1 -1
  105. package/dist/ui/assets/{state-DOWkJUEg.js → state-CvCDVCdM.js} +1 -1
  106. package/dist/ui/assets/{store-CD8HQQi0.js → store-Ci5uqDiF.js} +1 -1
  107. package/dist/ui/assets/{store-DMPHri86.js → store-vMYCG7nS.js} +1 -1
  108. package/dist/ui/assets/{sudo-ChxuFQrD.js → sudo-omGZ62M-.js} +1 -1
  109. package/dist/ui/assets/{supervisor-DsGHAeFb.js → supervisor-gHwvuVqr.js} +1 -1
  110. package/dist/ui/assets/{sync-dialog-DJlE-_Qu.js → sync-dialog-BuomvIrD.js} +1 -1
  111. package/dist/ui/assets/{transformers-env-CrD3F-k5.js → transformers-env-DK81KZ-_.js} +1 -1
  112. package/dist/ui/assets/{tray-leader-Cj5ylIFZ.js → tray-leader-4bul7Ct2.js} +1 -1
  113. package/dist/ui/assets/{tray-leave-runtime-B86ntR2C.js → tray-leave-runtime-B4WKKash.js} +1 -1
  114. package/dist/ui/assets/{tray-sidecar-BuTgfmG-.js → tray-sidecar-BJwCQVGH.js} +1 -1
  115. package/dist/ui/assets/{upgrade-detection-CdnTlzbk.js → upgrade-detection-Df_g87L1.js} +1 -1
  116. package/dist/ui/assets/{upskill-lick-skip-CwWHxj2D.js → upskill-lick-skip-BqQyWVKm.js} +1 -1
  117. package/dist/ui/assets/{voice-reply-Ba6fFHwZ.js → voice-reply-BehdeJ03.js} +1 -1
  118. package/dist/ui/assets/{wc-attach-ClqP_QLV.js → wc-attach-3a4N2dfx.js} +2 -2
  119. package/dist/ui/assets/{wc-browser-DcJYOuwt.js → wc-browser-lL-L_txI.js} +1 -1
  120. package/dist/ui/assets/{wc-computers-DZ8F8APM.js → wc-computers-B9-zQ4JW.js} +1 -1
  121. package/dist/ui/assets/{wc-detached-CqurijdL.js → wc-detached-BlMowfY3.js} +1 -1
  122. package/dist/ui/assets/{wc-extension-upUnhYIA.js → wc-extension-BeNvD6FE.js} +2 -2
  123. package/dist/ui/assets/{wc-follower-lb7m208l.js → wc-follower-EFSJs2OJ.js} +3 -3
  124. package/dist/ui/assets/{wc-follower-oauth-T2WVyWZD.js → wc-follower-oauth-bXKWVQGm.js} +1 -1
  125. package/dist/ui/assets/{wc-gelatiere-DsLb5fF7.js → wc-gelatiere-EOAqp9kU.js} +1 -1
  126. package/dist/ui/assets/{wc-live-_82dhqx_.js → wc-live-CZeagRhy.js} +5 -5
  127. package/dist/ui/assets/{wc-nav-CWlfBhcg.js → wc-nav-DAH24DXh.js} +2 -2
  128. package/dist/ui/assets/{wc-onboarding-4dwuoncC.js → wc-onboarding-CcKDzrfa.js} +2 -2
  129. package/dist/ui/assets/{wc-permissions-BxfEjmt-.js → wc-permissions-J-xSpeyH.js} +2 -2
  130. package/dist/ui/assets/{wc-placeholder-Co5efYux.js → wc-placeholder-Bu4ryZw7.js} +3 -3
  131. package/dist/ui/assets/{wc-secret-request-BwJvFf3r.js → wc-secret-request-BSxQu1_l.js} +1 -1
  132. package/dist/ui/assets/{wc-settings-CIwPnJJ7.js → wc-settings-C2GmNXu1.js} +3 -3
  133. package/dist/ui/assets/{wc-shell-DAAFPsyf.js → wc-shell-D1w_xNlG.js} +3 -3
  134. package/dist/ui/assets/{wc-shortcut-config-DIYpCAoK.js → wc-shortcut-config-C7N1oz-m.js} +1 -1
  135. package/dist/ui/assets/{wc-sprinkles-B6Lpsc3h.js → wc-sprinkles-C1i11O8r.js} +2 -2
  136. package/dist/ui/assets/{wc-transcript-export-Dk603hfy.js → wc-transcript-export-CZRr6hcJ.js} +2 -2
  137. package/dist/ui/assets/{wc-tray-tSlRM35e.js → wc-tray-xbj9CuSO.js} +4 -4
  138. package/dist/ui/assets/welcome-detection-C0csMKau.js +1 -0
  139. package/dist/ui/assets/{whisper-session-DO32dZVE.js → whisper-session-xb1YrAUl.js} +2 -2
  140. package/dist/ui/assets/{xai-grok-CGWMCUeC.js → xai-grok-B8X1-rs-.js} +1 -1
  141. package/dist/ui/assets/{xai-grok-C5i9rD2B.js → xai-grok-bN_nbILL.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 +2 -2
  145. package/dist/ui/assets/provider-store-access-4-s6k7tf.js +0 -1
  146. package/dist/ui/assets/provider-store-access-DXOTVVCa.js +0 -1
  147. package/dist/ui/assets/slicc-version-DwS1sP4C.js +0 -1
  148. package/dist/ui/assets/welcome-detection-DZ0LEfXq.js +0 -1
@@ -1,4 +1,4 @@
1
- import{t as e}from"./logger-LESFN7Hj.js";import{r as t,t as n}from"./base64-BPBW1Gzr.js";import{n as r}from"./bridge-protocol-31SWTdS5.js";import{a as i,n as a,o,s,t as c}from"./handoff-link-B3It6xQY.js";import{C as l,d as u,f as d,i as f,u as p}from"./account-store-CckwuDB2.js";import{c as m,d as h,n as g,r as _,s as v}from"./proxied-fetch-CoZ8jHud.js";import{t as ee}from"./runtime-env-DadgceZk.js";import{t as te}from"./slugify-BYJ6QVAt.js";import{n as ne,t as re}from"./host-command-Dn-Z4AbC.js";import{a as ie,i as ae,n as oe,r as se,t as ce}from"./snapshot-DQ087sVE.js";import{i as le,r as y}from"./panel-rpc-DW7W4w6_.js";import{a as ue,c as de,n as fe,o as pe,s as me,t as he}from"./feature-flags-QlgHaQc1.js";import{t as ge}from"./providers-ChXzAurS.js";import{r as _e}from"./binary-cache-bSOhqXB1.js";import{i as ve,n as ye,r as be}from"./fetch-body-CuwTaJC_.js";import{s as xe,t as Se}from"./api-endpoint-D8lUKmPu.js";import{t as Ce}from"./compat-CGK4SwF8.js";import{a as we,i as Te}from"./core-E6pC-3NP.js";import{n as Ee,t as De}from"./mime-types-D7IV6i7k.js";import{t as Oe}from"./secrets-bridge-client-EgBSROu5.js";import{a as ke,i as Ae,n as je,r as Me}from"./tool-ui-DRnUkp2g.js";import{a as Ne,i as Pe,n as b,t as x}from"./path-utils-DNJG-zQf.js";import{n as Fe,r as Ie,t as Le}from"./merge-file-core-VJlzucJY.js";import{r as Re}from"./workspace-mode-D0kUKBVS.js";import{n as ze,t as Be}from"./thinking-level-5x0UAu9N.js";import{n as Ve,t as He}from"./types-D8gIX-W-.js";import{i as Ue}from"./mount-index-CQfmUPuZ.js";import{a as We,i as Ge,n as Ke,o as qe,s as Je,t as Ye}from"./signed-fetch-bUBxSCEr.js";import{o as Xe}from"./mount-table-store-DrF_Ifaz.js";import{t as Ze}from"./remote-cache-UwMD8EkX.js";import{n as Qe}from"./fs-DFXgS-c1.js";import{a as $e}from"./tray-leader-status-CpkFr6n7.js";import{n as et,t as tt}from"./slicc-version-DwS1sP4C.js";import{a as nt,i as rt,o as it,r as S,t as at}from"./browser-Jlk38XAj.js";import{t as C}from"./subcommand-flags-BZi7j78Q.js";import{n as ot,r as st,t as w}from"./subcommand-help-CgO7wRS5.js";import{n as ct}from"./cost-command-C_1fldSP.js";import{d as lt,g as ut,i as dt,n as ft,o as pt}from"./sudoers-BdBYQPUn.js";import{n as mt}from"./types-Dj5TU-Qg.js";import{n as ht,r as gt,t as _t}from"./approval-timeout-CeQbGMnv.js";import{a as vt,c as yt,i as bt,l as xt,n as St,o as Ct,r as wt,t as Tt}from"./types-JfhqX7lD.js";import{n as T,t as Et}from"./boundary-DjgipyWT.js";import"./rest-paths-Dia19u9P.js";import{t as Dt}from"./html-B_Hg2WOy.js";import{n as Ot}from"./llm-session-id-BZyXP_j2.js";import{t as kt}from"./src-CUSndb9K.js";import{i as At,o as jt}from"./browser-DuyhpHbR.js";import{i as Mt,r as Nt,t as Pt}from"./mount-picker-popup-BMils9JY.js";import{t as Ft}from"./buffer-B5d1xHaH.js";import"./buffer-polyfill-BwLbCySD.js";import{A as It,B as E,C as Lt,D,E as Rt,F as zt,G as Bt,H as O,I as k,J as Vt,K as Ht,L as Ut,M as Wt,N as Gt,O as Kt,P as qt,R as Jt,S as Yt,T as Xt,U as Zt,V as Qt,W as $t,Y as en,_ as tn,a as nn,b as rn,c as an,d as on,f as sn,g as cn,h as ln,i as un,j as dn,k as fn,l as pn,m as mn,n as hn,o as gn,p as A,q as _n,r as vn,s as yn,t as bn,u as xn,v as Sn,w as Cn,x as wn,y as Tn,z as En}from"./isomorphic-git-r9mnHMnp.js";import"./global-db-DJXlpNui.js";import{S as Dn,_ as On,a as kn,b as An,c as jn,d as Mn,f as Nn,g as Pn,h as Fn,i as In,l as Ln,n as Rn,o as zn,p as Bn,r as Vn,s as Hn,t as Un,u as Wn,v as j,x as M,y as Gn}from"./state-DOWkJUEg.js";import{a as Kn,i as qn,r as Jn,t as Yn}from"./git-config-Bdgu8kD2.js";import{i as Xn,m as Zn,r as Qn}from"./stdio-tty-CA5sZxWL.js";import{i as $n,r as er}from"./global-prefix-DqCuANmV.js";import{t as tr}from"./wasm-programs-k6khOGzw.js";import{a as nr,n as rr,o as ir,r as ar,s as or}from"./jsh-discovery-CnvNKojr.js";import{C as sr,a as cr,b as lr,c as ur,d as dr,f as fr,h as pr,i as mr,l as hr,m as gr,n as _r,o as vr,p as yr,r as br,s as xr,t as N,u as Sr,v as Cr,y as wr}from"./shared-D-ZRFYou.js";import{_ as Tr,a as Er,b as Dr,d as Or,f as kr,g as Ar,h as jr,i as Mr,l as Nr,m as Pr,p as Fr,r as Ir,s as Lr,u as Rr,v as zr,x as Br,y as Vr}from"./require-guards-CMPvNDQg.js";import{_ as Hr,a as Ur,b as Wr,c as Gr,d as Kr,f as qr,g as Jr,h as Yr,l as Xr,m as Zr,n as Qr,p as $r,s as ei,t as ti,u as ni,v as ri,x as ii,y as ai}from"./jsh-executor-CEkiOk4d.js";import{n as oi,t as si}from"./esbuild-wasm-DeTghvWH.js";import{n as ci}from"./wasm-compiler-Ct7QZURL.js";import{a as li,o as ui,s as di,t as fi}from"./usb-device-registry-DFzxaOky.js";import{a as P,i as pi,r as mi,t as hi}from"./just-bash-compat-B-SPHuh_.js";import{i as gi,r as _i,t as vi}from"./script-catalog-B5BTq3Ma.js";import{a as yi,c as bi,o as xi,s as Si,t as Ci}from"./types-Dzr0qYl3.js";import{a as wi,c as Ti,d as Ei,f as Di,n as Oi,r as ki,u as Ai}from"./github-zip-TmRPTM75.js";import{i as ji,t as Mi}from"./github-auth-yNHDwebn.js";import{a as Ni,i as Pi,o as Fi,r as Ii,t as Li}from"./provenance-DdmsQ3Nr.js";import{a as Ri,c as zi,i as Bi,n as Vi,o as Hi,r as Ui,s as Wi}from"./github-install-BIoofnjZ.js";import{n as Gi,t as Ki}from"./magick-wasm-BbnwhVj1.js";import{i as qi,n as Ji,r as Yi,t as Xi}from"./pdf-raster-BWk6ezTX.js";import{n as Zi}from"./lick-target-env-8JxfVcIV.js";import{t as Qi}from"./tmpdir-env-ate4iNcK.js";import{n as $i,t as ea}from"./hf-defaults-BwJdGLgk.js";import{t as ta}from"./ffmpeg-wasm-sx-3yVAE.js";import{t as na}from"./local-llm-FyJMIUux.js";import{t as ra}from"./client-C4_ggaf5.js";import{t as ia}from"./redirect-uri-31pXIMS9.js";import{i as aa,n as oa,r as sa,t as ca}from"./tar-BWIPCxI2.js";import{a as la,c as ua,i as da,o as fa,r as pa,s as ma}from"./v86-vm-DCm7zA2r.js";import{n as ha,r as ga}from"./lick-urls-CgPiVwD-.js";let _a=null;function va(e){_a=e!==null&&Number.isFinite(e)&&e>0?e:null}function ya(){if(_a!==null)return _a;let e=globalThis.performance?.timeOrigin;return typeof e==`number`&&Number.isFinite(e)&&e>0?e:Date.now()}new URL(r).hostname;const ba=/^([0-9a-f]{32})--(?:[0-9a-f]{8}-)?([0-9a-f]+)$/i;function xa(e){let t;try{t=new URL(e.includes(`://`)?e:`https://${e}`).hostname}catch{return null}let n=ba.exec(t.split(`.`)[0]??``);if(!n||!t.includes(`.`))return null;let r=n[1].toLowerCase();return`${[r.slice(0,8),r.slice(8,12),r.slice(12,16),r.slice(16,20),r.slice(20)].join(`-`)}.${n[2].toLowerCase()}`}[`ghp_`,`gho_`,`ghu_`,`ghs_`,`ghr_`,`github_pat_`,`sk-`,`pk-`,`xoxb-`,`xoxp-`,`xoxa-`,`xoxs-`,`AKIA`,`ABIA`,`ACCA`,`ASIA`,`sk-ant-`,`Bearer `].sort((e,t)=>t.length-e.length);function Sa(e,t){let n=e.toLowerCase(),r=t.toLowerCase();if(n===`*`)return!0;if(!n.startsWith(`*.`))return n===r;let i=n.slice(1);return r.length>i.length&&r.endsWith(i)}function Ca(e,t){return e.some(e=>Sa(e,t))}const wa=`slicc-transcript`,Ta=[`canonical-agent-history-unavailable`,`tool-data-may-be-truncated`,`model-metadata-unavailable`,`scoop-history-unavailable`,`attachment-file-missing`,`attachment-association-unavailable`,`complete-snapshot-unavailable`],Ea=new Set(`/export/format./export/producer/application./session/id./session/state./session/completeness/status./session/completeness/missing/*./conversations/*/id./conversations/*/kind./conversations/*/parentConversationId./conversations/*/messages/*/id./conversations/*/messages/*/role./conversations/*/messages/*/timestamp./conversations/*/messages/*/toolCallId./conversations/*/messages/*/content/*/type./conversations/*/messages/*/content/*/id./conversations/*/messages/*/content/*/name./conversations/*/messages/*/content/*/attachmentId./delegations/*/sourceConversationId./delegations/*/targetConversationId./delegations/*/toolCallId./attachments/*/id./attachments/*/path./attachments/*/sha256./attachments/*/sourceConversationId./attachments/*/sourceMessageId./attachments/*/handling./attachments/*/missingReason`.split(`.`));function Da(e){return Ea.has(e.replace(/\/\d+(?=\/|$)/g,`/*`))}var Oa=class extends Error{code;detail;constructor(e,t){super(t?`${e}: ${t}`:e),this.code=e,this.detail=t,this.name=`TranscriptExportError`}};const ka=new Set(Ta),Aa=/^[0-9a-fA-F]{64}$/,ja=/^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}/;function F(e){return typeof e==`object`&&!!e&&!Array.isArray(e)}function Ma(e){return typeof e==`string`&&Aa.test(e)}function Na(e){return ja.test(e)&&Number.isFinite(Date.parse(e))}function Pa(e,t){let n=t.map(e=>`"${e}"`),r=n[n.length-1];return n.length===2?`${e} must be ${n[0]} or ${r}`:`${e} must be ${n.slice(0,-1).join(`, `)}, or ${r}`}function Fa(e,t,n){return typeof e!=`string`||!t.includes(e)?{ok:!1,error:Pa(n,t)}:{ok:!0}}function Ia(e,t,n){for(let r=0;r<e.length;r++){let i=t(e[r],`${n}[${r}]`);if(!i.ok)return i}return{ok:!0}}function La(e,t){let n=e.type;if(n===`text`){if(typeof e.text!=`string`)return{ok:!1,error:`${t}.text must be a string`}}else if(n===`tool-call`){if(typeof e.id!=`string`||e.id===``)return{ok:!1,error:`${t}.id must be a non-empty string`};if(typeof e.name!=`string`||e.name===``)return{ok:!1,error:`${t}.name must be a non-empty string`};if(!(`input`in e))return{ok:!1,error:`${t}.input must be present`}}else if(typeof e.attachmentId!=`string`||e.attachmentId===``)return{ok:!1,error:`${t}.attachmentId must be a non-empty string`};return{ok:!0}}function Ra(e,t){if(!F(e))return{ok:!1,error:`${t} must be a non-null object`};let n=Fa(e.type,[`text`,`tool-call`,`attachment-ref`],`${t}.type`);return n.ok?La(e,t):n}function za(e,t){for(let n of[`input`,`output`,`cacheRead`,`cacheWrite`,`totalTokens`]){let r=e[n];if(typeof r!=`number`)return{ok:!1,error:`${t}.${n} must be a number`};if(!Number.isInteger(r)||r<0)return{ok:!1,error:`${t}.${n} must be a non-negative integer`}}return{ok:!0}}function Ba(e,t){for(let n of[`input`,`output`,`cacheRead`,`cacheWrite`,`total`]){let r=e[n];if(typeof r!=`number`)return{ok:!1,error:`${t}.${n} must be a number`};if(!Number.isFinite(r)||r<0)return{ok:!1,error:`${t}.${n} must be a finite non-negative number`}}return{ok:!0}}function Va(e,t){let n=za(e,t);if(!n.ok)return n;let r=e.cost;return F(r)?Ba(r,`${t}.cost`):{ok:!1,error:`${t}.cost must be a non-null object`}}function Ha(e,t){if(typeof e.id!=`string`)return{ok:!1,error:`${t}.id must be a string`};if(typeof e.sequence!=`number`)return{ok:!1,error:`${t}.sequence must be a number`};let n=e.sequence;return!Number.isInteger(n)||n<1?{ok:!1,error:`${t}.sequence must be a positive integer`}:typeof e.timestamp==`string`?Na(e.timestamp)?{ok:!0}:{ok:!1,error:`${t}.timestamp must be a valid ISO 8601 date-time string`}:{ok:!1,error:`${t}.timestamp must be a string`}}function Ua(e,t){let n=e.toolCallId;return typeof n!=`string`||n===``?{ok:!1,error:`${t}.toolCallId must be a non-empty string for tool-result messages`}:{ok:!0}}function Wa(e,t){let n=e.usage;return n===void 0?{ok:!0}:F(n)?Va(n,`${t}.usage`):{ok:!1,error:`${t}.usage must be a non-null object`}}function Ga(e,t){if(!F(e))return{ok:!1,error:`${t} must be a non-null object`};let n=Fa(e.role,[`user`,`assistant`,`tool-result`],`${t}.role`);if(!n.ok)return n;if(e.role===`tool-result`){let n=Ua(e,t);if(!n.ok)return n}let r=Ha(e,t);if(!r.ok)return r;let i=e.content;if(!Array.isArray(i))return{ok:!1,error:`${t}.content must be an array`};let a=Ia(i,Ra,`${t}.content`);return a.ok?Wa(e,t):a}function Ka(e,t){if(!F(e))return{ok:!1,error:`${t} must be a non-null object`};if(typeof e.id!=`string`)return{ok:!1,error:`${t}.id must be a string`};if(typeof e.name!=`string`)return{ok:!1,error:`${t}.name must be a string`};let n=Fa(e.kind,[`cone`,`scoop`],`${t}.kind`);if(!n.ok)return n;let r=e.messages;return Array.isArray(r)?Ia(r,Ga,`${t}.messages`):{ok:!1,error:`${t}.messages must be an array`}}function qa(e,t){for(let n of[`id`,`path`,`originalName`,`mimeType`,`sha256`,`sourceConversationId`,`sourceMessageId`])if(typeof e[n]!=`string`)return{ok:!1,error:`${t}.${n} must be a string`};return{ok:!0}}function Ja(e,t){let n=e.path,r=e.sha256,i=e.byteLength;return n===``?{ok:!1,error:`${t}.path must be non-empty when present`}:Ma(r)?!Number.isInteger(i)||i<0?{ok:!1,error:`${t}.byteLength must be a non-negative integer when present`}:e.missingReason===void 0?{ok:!0}:{ok:!1,error:`${t}.missingReason must be absent when present is true`}:{ok:!1,error:`${t}.sha256 must be a 64-char hex string when present`}}const Ya=[`attachment-file-missing`,`attachment-association-unavailable`];function Xa(e,t){let n=e.path,r=e.sha256,i=e.byteLength;return n===``?r===``?i===0?Fa(e.missingReason,Ya,`${t}.missingReason`):{ok:!1,error:`${t}.byteLength must be zero when not present`}:{ok:!1,error:`${t}.sha256 must be empty when not present`}:{ok:!1,error:`${t}.path must be empty when not present`}}function Za(e,t){return e.present?Ja(e,t):Xa(e,t)}function Qa(e,t){if(!F(e))return{ok:!1,error:`${t} must be a non-null object`};let n=qa(e,t);if(!n.ok)return n;if(typeof e.byteLength!=`number`)return{ok:!1,error:`${t}.byteLength must be a number`};if(typeof e.present!=`boolean`)return{ok:!1,error:`${t}.present must be a boolean`};let r=Fa(e.handling,[`text-redacted`,`binary-unchanged`],`${t}.handling`);return r.ok?Za(e,t):r}function $a(e,t){let n=Fa(e.kind,[`json`,`attachment`],`${t}.kind`);if(!n.ok)return n;if(e.kind===`json`){if(typeof e.pointer!=`string`)return{ok:!1,error:`${t}.pointer must be a string`};let n=e.pointer;if(n!==``&&!n.startsWith(`/`))return{ok:!1,error:`${t}.pointer must be a valid RFC 6901 JSON pointer`}}else if(typeof e.attachmentId!=`string`||e.attachmentId===``)return{ok:!1,error:`${t}.attachmentId must be a non-empty string`};return{ok:!0}}function eo(e,t){if(!F(e))return{ok:!1,error:`${t} must be a non-null object`};if(typeof e.id!=`string`)return{ok:!1,error:`${t}.id must be a string`};if(typeof e.category!=`string`)return{ok:!1,error:`${t}.category must be a string`};let n=Fa(e.detector,[`known-secret`,`credential-pattern`,`pre-obfuscated`],`${t}.detector`);if(!n.ok)return n;let r=e.target;return F(r)?$a(r,`${t}.target`):{ok:!1,error:`${t}.target must be a non-null object`}}function to(e,t){return F(e)?typeof e.sourceConversationId==`string`?typeof e.targetConversationId==`string`?{ok:!0}:{ok:!1,error:`${t}.targetConversationId must be a string`}:{ok:!1,error:`${t}.sourceConversationId must be a string`}:{ok:!1,error:`${t} must be a non-null object`}}function no(e,t){return typeof e!=`string`||!ka.has(e)?{ok:!1,error:`${t} is not a valid completeness reason`}:{ok:!0}}function ro(e){if(!F(e))return{ok:!1,error:`export must be a non-null object`};if(typeof e.id!=`string`)return{ok:!1,error:`export.id must be a string`};if(typeof e.generatedAt!=`string`)return{ok:!1,error:`export.generatedAt must be a string`};if(e.format!==`slicc-transcript`)return{ok:!1,error:`export.format must equal "slicc-transcript"`};let t=e.producer;return F(t)?t.application===`slicc`?typeof t.version==`string`?{ok:!0}:{ok:!1,error:`export.producer.version must be a string`}:{ok:!1,error:`export.producer.application must equal "slicc"`}:{ok:!1,error:`export.producer must be a non-null object`}}function io(e){if(!F(e))return{ok:!1,error:`session.completeness must be a non-null object`};let t=Fa(e.status,[`complete`,`partial`],`session.completeness.status`);return t.ok?Array.isArray(e.missing)?Ia(e.missing,no,`session.completeness.missing`):{ok:!1,error:`session.completeness.missing must be an array`}:t}function ao(e){if(!F(e))return{ok:!1,error:`session must be a non-null object`};if(typeof e.id!=`string`)return{ok:!1,error:`session.id must be a string`};if(typeof e.title!=`string`)return{ok:!1,error:`session.title must be a string`};let t=Fa(e.state,[`active`,`frozen`],`session.state`);return t.ok?io(e.completeness):t}function oo(e){if(!F(e))return{ok:!1,error:`privacy must be a non-null object`};if(e.reasoningExcluded!==!0)return{ok:!1,error:`privacy.reasoningExcluded must be true`};let t=e.excludedReasoningBlocks;if(typeof t!=`number`)return{ok:!1,error:`privacy.excludedReasoningBlocks must be a number`};if(!Number.isInteger(t)||t<0)return{ok:!1,error:`privacy.excludedReasoningBlocks must be a non-negative integer`};if(e.binaryAttachments!==`included-unchanged`)return{ok:!1,error:`privacy.binaryAttachments must equal "included-unchanged"`};if(!F(e.redactionCounts))return{ok:!1,error:`privacy.redactionCounts must be a non-null object`};let n=e.redactions;return Array.isArray(n)?Ia(n,eo,`privacy.redactions`):{ok:!1,error:`privacy.redactions must be an array`}}function so(e){let t=e.conversations;if(!Array.isArray(t))return{ok:!1,error:`conversations must be an array`};let n=Ia(t,Ka,`conversations`);if(!n.ok)return n;let r=e.delegations;if(!Array.isArray(r))return{ok:!1,error:`delegations must be an array`};let i=Ia(r,to,`delegations`);if(!i.ok)return i;let a=e.attachments;return Array.isArray(a)?Ia(a,Qa,`attachments`):{ok:!1,error:`attachments must be an array`}}function co(e){let t=new Set,n=new Set;for(let r of e){if(!F(r)||typeof r.id!=`string`)continue;if(t.has(r.id))return{ok:!1,error:`duplicate conversation id "${r.id}"`};t.add(r.id);let e=r.messages;if(Array.isArray(e)){for(let t of e)if(!(!F(t)||typeof t.id!=`string`)){if(n.has(t.id))return{ok:!1,error:`duplicate message id "${t.id}"`};n.add(t.id)}}}return{ok:!0}}function lo(e){for(let t of e){if(!F(t))continue;let e=t.messages;if(!Array.isArray(e))continue;let n=typeof t.id==`string`?t.id:`?`,r=0;for(let t of e){if(!F(t)||typeof t.sequence!=`number`)continue;let e=t.sequence;if(e<=r)return{ok:!1,error:`sequences in conversation "${n}" must be strictly increasing`};r=e}}return{ok:!0}}function uo(e){let t=[];for(let n of e){if(!F(n))continue;let e=n.content;if(Array.isArray(e))for(let n of e)F(n)&&n.type===`tool-call`&&typeof n.id==`string`&&t.push(n.id)}return t}function fo(e){let t=new Set;for(let n of e){if(!F(n))continue;let e=n.messages;if(Array.isArray(e))for(let n of uo(e))t.add(n)}return t}function po(e,t){for(let n of e){if(!F(n))continue;let e=n.messages;if(Array.isArray(e))for(let n of e){if(!F(n)||n.role!==`tool-result`)continue;let e=n.toolCallId;if(typeof e==`string`&&e!==``&&!t.has(e))return{ok:!1,error:`tool-result message references unknown toolCallId "${e}"`}}}return{ok:!0}}function mo(e){return po(e,fo(e))}function ho(e,t){for(let n of e){if(!F(n)||n.type!==`attachment-ref`)continue;let e=n.attachmentId;if(typeof e!=`string`||!t.has(e))return{ok:!1,error:`attachment-ref references unknown attachmentId "${e}"`}}return{ok:!0}}function go(e,t){for(let n of e){if(!F(n))continue;let e=n.messages;if(Array.isArray(e))for(let n of e){if(!F(n))continue;let e=n.content;if(!Array.isArray(e))continue;let r=ho(e,t);if(!r.ok)return r}}return{ok:!0}}function _o(e,t){let n=new Set;for(let e of t)F(e)&&typeof e.id==`string`&&n.add(e.id);return go(e,n)}function vo(e){let t=new Map;for(let n of e){if(!F(n)||typeof n.id!=`string`)continue;let e=new Set,r=n.messages;if(Array.isArray(r))for(let t of r)F(t)&&typeof t.id==`string`&&e.add(t.id);t.set(n.id,e)}return t}function yo(e,t){let n=vo(t);for(let t=0;t<e.length;t++){let r=e[t];if(!F(r))continue;let i=r.sourceConversationId,a=r.sourceMessageId;if(typeof i!=`string`||typeof a!=`string`)continue;let o=n.get(i);if(!o)return{ok:!1,error:`attachments[${t}].sourceConversationId "${i}" does not exist`};if(!o.has(a))return{ok:!1,error:`attachments[${t}].sourceMessageId "${a}" does not exist in conversation "${i}"`}}return{ok:!0}}function bo(e){let t=new Map;for(let n of e){if(!F(n)||typeof n.id!=`string`)continue;let e=Array.isArray(n.messages)?n.messages:[];t.set(n.id,new Set(uo(e)))}return t}function xo(e,t,n){for(let r=0;r<e.length;r++){let i=e[r];if(!F(i))continue;let a=i.sourceConversationId,o=i.targetConversationId;if(typeof a!=`string`||!t.has(a))return{ok:!1,error:`delegations[${r}].sourceConversationId "${a}" does not exist`};if(typeof o!=`string`||!t.has(o))return{ok:!1,error:`delegations[${r}].targetConversationId "${o}" does not exist`};let s=i.toolCallId;if(typeof s==`string`&&s!==``&&!n.get(a)?.has(s))return{ok:!1,error:`delegations[${r}].toolCallId "${s}" does not exist in source conversation "${a}"`}}return{ok:!0}}function So(e,t){let n=new Set;for(let e of t)F(e)&&typeof e.id==`string`&&n.add(e.id);return xo(e,n,bo(t))}function Co(e,t,n){if(e.kind!==`attachment`)return{ok:!0};let r=e.attachmentId;return typeof r!=`string`||!t.has(r)?{ok:!1,error:`${n}.attachmentId "${r}" does not reference a known attachment`}:{ok:!0}}function wo(e,t){let n=new Set;for(let e of t)F(e)&&typeof e.id==`string`&&n.add(e.id);for(let t=0;t<e.length;t++){let r=e[t];if(!F(r))continue;let i=r.target;if(!F(i))continue;let a=Co(i,n,`privacy.redactions[${t}].target`);if(!a.ok)return a}return{ok:!0}}function To(e){let t=e.conversations,n=e.attachments,r=e.delegations,i=e.privacy,a=Array.isArray(i?.redactions)?i.redactions:[],o=co(t);if(!o.ok)return o;let s=lo(t);if(!s.ok)return s;let c=mo(t);if(!c.ok)return c;let l=_o(t,n);if(!l.ok)return l;let u=yo(n,t);if(!u.ok)return u;let d=So(r,t);return d.ok?wo(a,n):d}function Eo(e){let t=so(e);return t.ok?To(e):t}function Do(e){if(!F(e))return{ok:!1,error:`document must be a non-null object`};if(e.schemaVersion!==1)return{ok:!1,error:`schemaVersion must equal 1`};let t=ro(e.export);if(!t.ok)return t;let n=ao(e.session);if(!n.ok)return n;let r=oo(e.privacy);return r.ok?Eo(e):r}async function Oo(e,t,n){let r=await n({method:`GET`,path:`/${e}/sites/${t}/config.json`,origin:qe});if(r.status===401||r.status===403)throw Error(`not authorized to read the site config for ${e}/${t} — log in via Settings → Providers → Adobe, or pass --backend to skip the probe`);if(r.status===404)throw Error(`no site config for ${e}/${t} — check the org and site names`);if(r.status>=400)throw Error(`site config probe failed for ${e}/${t}: ${r.status}`);let i;try{i=await r.json()}catch(n){throw Error(`site config for ${e}/${t} is not JSON: ${n instanceof Error?n.message:String(n)}`)}let a=i.content?.source?.url;return{backend:ko(a),sourceUrl:a}}function ko(e){if(!e)return`da`;let t;try{t=new URL(e).host}catch{return`da`}return t===`api.aem.live`?`aem`:`da`}const Ao=`slicc-sprinkle-routes`;function jo(){try{let e=localStorage.getItem(Ao);return e?JSON.parse(e):{}}catch{return{}}}function Mo(e){try{localStorage.setItem(Ao,JSON.stringify(e))}catch{}}function No(e){return jo()[e]}function Po(e,t){let n=jo();n[e]=t,Mo(n)}function Fo(e){let t=jo();delete t[e],Mo(t)}function Io(){return jo()}function Lo(e,t,n){return yt(t,n,`${e} adapter does not implement ${t}.${n}`)}function Ro(e,t,n,r){let i=n.filter(e=>typeof r?.[e]==`function`),a=n.map(n=>{let i=r?.[n];return[n,typeof i==`function`?i:()=>Promise.resolve(Lo(e,t,n))]});return{...Object.fromEntries(a),allowlist:i,supports:e=>i.includes(e)}}function zo(e){let{adapter:t,pageGestures:n}=e,r=n??{};return{adapter:t,browser:Ro(t,`browser`,St,e.browser),network:Ro(t,`network`,vt,e.network),secrets:Ro(t,`secrets`,Ct,e.secrets),devices:Ro(t,`devices`,wt,{usbRequest:r.usbRequest,serialRequest:r.serialRequest,hidRequest:r.hidRequest,...e.devices}),mounts:Ro(t,`mounts`,bt,{pickDirectory:r.pickDirectory,...e.mounts}),approvals:Ro(t,`approvals`,Tt,e.approvals)}}function Bo(e={}){return zo({adapter:`connect`,pageGestures:e.pageGestures})}function Vo(e){let t=Et(()=>import(`./extension-ops-Ded2__AC.js`).then(t=>t.createExtensionOps(e)));return zo({adapter:e.adapter,pageGestures:e.pageGestures,network:{crossOriginFetch:e=>T(`network`,`crossOriginFetch`,async()=>(await t()).crossOriginFetch(e))},secrets:{listMaskedEnv:()=>T(`secrets`,`listMaskedEnv`,async()=>(await t()).secrets.listMaskedEnv()),getMasked:e=>T(`secrets`,`getMasked`,async()=>(await t()).secrets.getMasked(e)),set:e=>T(`secrets`,`set`,async()=>(await t()).secrets.set(e)),delete:e=>T(`secrets`,`delete`,async()=>(await t()).secrets.delete(e))},mounts:{signRequest:e=>T(`mounts`,`signRequest`,async()=>(await t()).signRequest(e))},approvals:{request:e=>T(`approvals`,`request`,async()=>(await t()).requestApproval(e))}})}function Ho(e={}){let t=Et(()=>import(`./rest-ops-DyAkn44S.js`).then(t=>t.createRestOps(e)),e.controlTimeoutMs??1e4);return zo({adapter:`node-rest`,pageGestures:e.pageGestures,network:{localNodeServer:()=>Promise.resolve({ok:!0,value:{available:!0}}),crossOriginFetch:e=>T(`network`,`crossOriginFetch`,async()=>(await t()).crossOriginFetch(e))},secrets:{listMaskedEnv:()=>T(`secrets`,`listMaskedEnv`,async()=>(await t()).secrets.listMaskedEnv()),getMasked:e=>T(`secrets`,`getMasked`,async()=>(await t()).secrets.getMasked(e)),set:e=>T(`secrets`,`set`,async()=>(await t()).secrets.set(e)),delete:e=>T(`secrets`,`delete`,async()=>(await t()).secrets.delete(e))},mounts:{signRequest:e=>T(`mounts`,`signRequest`,async()=>(await t()).signRequest(e))},approvals:{request:e=>T(`approvals`,`request`,async()=>(await t()).requestApproval(e))}})}function Uo(e,t={}){let{pageGestures:n}=t;switch(e){case`node-rest`:return Ho({pageGestures:n});case`extension-direct`:case`extension-delegate`:return Vo({adapter:e,pageGestures:n});case`connect`:return Bo({pageGestures:n})}}const Wo=e(`quick-llm`);async function Go(e){let t=f();if(!t)return Wo.debug(`No API key for active provider — skipping`),null;let n=d(),r=u(),i;if(i=e.modelId?Yo(n,e.modelId)??Yo(n,r):Ko(n,r),!i)return Wo.debug(`No model available for provider`,{providerId:n}),null;let a={role:`user`,content:e.prompt,timestamp:Date.now()},o={};i.provider===`adobe`&&(o[`X-Session-Id`]=Xo());try{let n=(await Ce(i,{systemPrompt:e.system,messages:[a]},{apiKey:t,maxTokens:e.maxTokens??60,temperature:e.temperature??.3,signal:e.signal,headers:Object.keys(o).length>0?o:void 0})).content.filter(e=>e.type===`text`).map(e=>e.text).join(``).trim();return n.length>0?n:null}catch(e){return Wo.debug(`Quick label call failed`,{error:e instanceof Error?e.message:String(e)}),null}}function Ko(e,t){let n=p(e);if(n.length===0)return;let r=n.find(e=>e.id===t)??n[0],i=Jo(r.id),a=n.filter(e=>qo(e,r,i));return a.length===0?r:(a.sort((e,t)=>(e.cost?.input??0)-(t.cost?.input??0)),a[0])}function qo(e,t,n){if(e.id===t.id)return!1;let r=t.cost?.input??1/0;if((e.cost?.input??1/0)>=r)return!1;let i=e.id.toLowerCase();switch(n){case`claude`:return i.includes(`haiku`);case`gpt`:return/(^|-)mini(-|$)|(^|-)nano(-|$)/.test(i);case`gemini`:return i.includes(`flash`);case`grok`:return/(^|-)mini(-|$)|(^|-)fast(-|$)/.test(i);case`unknown`:return!0}}function Jo(e){let t=e.toLowerCase();return t.includes(`claude`)?`claude`:t.includes(`gemini`)?`gemini`:t.includes(`grok`)?`grok`:/^(gpt|o\d)/.test(t)?`gpt`:`unknown`}function Yo(e,t){return p(e).find(e=>e.id===t)}function Xo(){return Ot(`ui-quick-llm`)}const Zo=e(`sudo-suggest`),Qo=[`You generalize a single shell command into a minimal glob pattern for an`,`allow-list rule. Output ONLY the pattern on one line — no prose, no quotes,`,`no backticks. Keep the leading command/sub-command verbatim and replace only`,`the volatile tail (args, paths, refs) with a single trailing "*".`,`Examples:`,` git push origin main -> git push*`,` rm -rf build/cache -> rm -rf*`,` npm install left-pad -> npm install*`].join(`
1
+ import{t as e}from"./logger-LESFN7Hj.js";import{r as t,t as n}from"./base64-BPBW1Gzr.js";import{n as r}from"./bridge-protocol-31SWTdS5.js";import{a as i,n as a,o,s,t as c}from"./handoff-link-B3It6xQY.js";import{C as l,d as u,f as d,i as f,u as p}from"./account-store-DtP5_zcC.js";import{c as m,d as h,n as g,r as _,s as v}from"./proxied-fetch-CoZ8jHud.js";import{t as ee}from"./runtime-env-DadgceZk.js";import{t as te}from"./slugify-BYJ6QVAt.js";import{n as ne,t as re}from"./host-command-Dn-Z4AbC.js";import{a as ie,i as ae,n as oe,r as se,t as ce}from"./snapshot-DOjH_Br5.js";import{i as le,r as y}from"./panel-rpc-DW7W4w6_.js";import{a as ue,c as de,n as fe,o as pe,s as me,t as he}from"./feature-flags-QlgHaQc1.js";import{t as ge}from"./providers-CSGLxatZ.js";import{r as _e}from"./binary-cache-bSOhqXB1.js";import{i as ve,n as ye,r as be}from"./fetch-body-CuwTaJC_.js";import{s as xe,t as Se}from"./api-endpoint-D8lUKmPu.js";import{t as Ce}from"./compat-CGK4SwF8.js";import{a as we,i as Te}from"./core-E6pC-3NP.js";import{n as Ee,t as De}from"./mime-types-D7IV6i7k.js";import{t as Oe}from"./secrets-bridge-client-EgBSROu5.js";import{a as ke,i as Ae,n as je,r as Me}from"./tool-ui-DRnUkp2g.js";import{a as Ne,i as Pe,n as b,t as x}from"./path-utils-DNJG-zQf.js";import{n as Fe,r as Ie,t as Le}from"./merge-file-core-VJlzucJY.js";import{r as Re}from"./workspace-mode-D0kUKBVS.js";import{n as ze,t as Be}from"./thinking-level-5x0UAu9N.js";import{n as Ve,t as He}from"./types-D8gIX-W-.js";import{i as Ue}from"./mount-index-CQfmUPuZ.js";import{a as We,i as Ge,n as Ke,o as qe,s as Je,t as Ye}from"./signed-fetch-BScOrFAI.js";import{o as Xe}from"./mount-table-store-DrF_Ifaz.js";import{t as Ze}from"./remote-cache-UwMD8EkX.js";import{n as Qe}from"./fs-DjMlnfEu.js";import{a as $e}from"./tray-leader-status-CpkFr6n7.js";import{n as et,t as tt}from"./slicc-version-CTGV3KxX.js";import{a as nt,i as rt,o as it,r as S,t as at}from"./browser-Jlk38XAj.js";import{t as C}from"./subcommand-flags-BZi7j78Q.js";import{n as ot,r as st,t as w}from"./subcommand-help-CgO7wRS5.js";import{n as ct}from"./cost-command-C_1fldSP.js";import{d as lt,g as ut,i as dt,n as ft,o as pt}from"./sudoers-BdBYQPUn.js";import{n as mt}from"./types-Dj5TU-Qg.js";import{n as ht,r as gt,t as _t}from"./approval-timeout-CeQbGMnv.js";import{a as vt,c as yt,i as bt,l as xt,n as St,o as Ct,r as wt,t as Tt}from"./types-JfhqX7lD.js";import{n as T,t as Et}from"./boundary-DjgipyWT.js";import"./rest-paths-Dia19u9P.js";import{t as Dt}from"./html-B_Hg2WOy.js";import{n as Ot}from"./llm-session-id-BZyXP_j2.js";import{t as kt}from"./src-CUSndb9K.js";import{i as At,o as jt}from"./browser-DuyhpHbR.js";import{i as Mt,r as Nt,t as Pt}from"./mount-picker-popup-BMils9JY.js";import{t as Ft}from"./buffer-B5d1xHaH.js";import"./buffer-polyfill-BwLbCySD.js";import{A as It,B as E,C as Lt,D,E as Rt,F as zt,G as Bt,H as O,I as k,J as Vt,K as Ht,L as Ut,M as Wt,N as Gt,O as Kt,P as qt,R as Jt,S as Yt,T as Xt,U as Zt,V as Qt,W as $t,Y as en,_ as tn,a as nn,b as rn,c as an,d as on,f as sn,g as cn,h as ln,i as un,j as dn,k as fn,l as pn,m as mn,n as hn,o as gn,p as A,q as _n,r as vn,s as yn,t as bn,u as xn,v as Sn,w as Cn,x as wn,y as Tn,z as En}from"./isomorphic-git-r9mnHMnp.js";import"./global-db-DJXlpNui.js";import{S as Dn,_ as On,a as kn,b as An,c as jn,d as Mn,f as Nn,g as Pn,h as Fn,i as In,l as Ln,n as Rn,o as zn,p as Bn,r as Vn,s as Hn,t as Un,u as Wn,v as j,x as M,y as Gn}from"./state-CvCDVCdM.js";import{a as Kn,i as qn,r as Jn,t as Yn}from"./git-config-Bdgu8kD2.js";import{i as Xn,m as Zn,r as Qn}from"./stdio-tty-CA5sZxWL.js";import{i as $n,r as er}from"./global-prefix-DqCuANmV.js";import{t as tr}from"./wasm-programs-k6khOGzw.js";import{a as nr,n as rr,o as ir,r as ar,s as or}from"./jsh-discovery-CnvNKojr.js";import{C as sr,a as cr,b as lr,c as ur,d as dr,f as fr,h as pr,i as mr,l as hr,m as gr,n as _r,o as vr,p as yr,r as br,s as xr,t as N,u as Sr,v as Cr,y as wr}from"./shared-D-ZRFYou.js";import{_ as Tr,a as Er,b as Dr,d as Or,f as kr,g as Ar,h as jr,i as Mr,l as Nr,m as Pr,p as Fr,r as Ir,s as Lr,u as Rr,v as zr,x as Br,y as Vr}from"./require-guards-CMPvNDQg.js";import{_ as Hr,a as Ur,b as Wr,c as Gr,d as Kr,f as qr,g as Jr,h as Yr,l as Xr,m as Zr,n as Qr,p as $r,s as ei,t as ti,u as ni,v as ri,x as ii,y as ai}from"./jsh-executor-BnG9duV7.js";import{n as oi,t as si}from"./esbuild-wasm-DeTghvWH.js";import{n as ci}from"./wasm-compiler-Ct7QZURL.js";import{a as li,o as ui,s as di,t as fi}from"./usb-device-registry-DFzxaOky.js";import{a as P,i as pi,r as mi,t as hi}from"./just-bash-compat-B-SPHuh_.js";import{i as gi,r as _i,t as vi}from"./script-catalog-B5BTq3Ma.js";import{a as yi,c as bi,o as xi,s as Si,t as Ci}from"./types-Dzr0qYl3.js";import{a as wi,c as Ti,d as Ei,f as Di,n as Oi,r as ki,u as Ai}from"./github-zip-UZeZ-voR.js";import{i as ji,t as Mi}from"./github-auth-Cy2cTRMV.js";import{a as Ni,i as Pi,o as Fi,r as Ii,t as Li}from"./provenance-DdmsQ3Nr.js";import{a as Ri,c as zi,i as Bi,n as Vi,o as Hi,r as Ui,s as Wi}from"./github-install-C77mWn6S.js";import{n as Gi,t as Ki}from"./magick-wasm-BbnwhVj1.js";import{i as qi,n as Ji,r as Yi,t as Xi}from"./pdf-raster-BWk6ezTX.js";import{n as Zi}from"./lick-target-env-8JxfVcIV.js";import{t as Qi}from"./tmpdir-env-ate4iNcK.js";import{n as $i,t as ea}from"./hf-defaults-BwJdGLgk.js";import{t as ta}from"./ffmpeg-wasm-sx-3yVAE.js";import{t as na}from"./local-llm-BIA90YgO.js";import{t as ra}from"./client-C4_ggaf5.js";import{t as ia}from"./redirect-uri-31pXIMS9.js";import{i as aa,n as oa,r as sa,t as ca}from"./tar-BWIPCxI2.js";import{a as la,c as ua,i as da,o as fa,r as pa,s as ma}from"./v86-vm-DCm7zA2r.js";import{n as ha,r as ga}from"./lick-urls-CgPiVwD-.js";let _a=null;function va(e){_a=e!==null&&Number.isFinite(e)&&e>0?e:null}function ya(){if(_a!==null)return _a;let e=globalThis.performance?.timeOrigin;return typeof e==`number`&&Number.isFinite(e)&&e>0?e:Date.now()}new URL(r).hostname;const ba=/^([0-9a-f]{32})--(?:[0-9a-f]{8}-)?([0-9a-f]+)$/i;function xa(e){let t;try{t=new URL(e.includes(`://`)?e:`https://${e}`).hostname}catch{return null}let n=ba.exec(t.split(`.`)[0]??``);if(!n||!t.includes(`.`))return null;let r=n[1].toLowerCase();return`${[r.slice(0,8),r.slice(8,12),r.slice(12,16),r.slice(16,20),r.slice(20)].join(`-`)}.${n[2].toLowerCase()}`}[`ghp_`,`gho_`,`ghu_`,`ghs_`,`ghr_`,`github_pat_`,`sk-`,`pk-`,`xoxb-`,`xoxp-`,`xoxa-`,`xoxs-`,`AKIA`,`ABIA`,`ACCA`,`ASIA`,`sk-ant-`,`Bearer `].sort((e,t)=>t.length-e.length);function Sa(e,t){let n=e.toLowerCase(),r=t.toLowerCase();if(n===`*`)return!0;if(!n.startsWith(`*.`))return n===r;let i=n.slice(1);return r.length>i.length&&r.endsWith(i)}function Ca(e,t){return e.some(e=>Sa(e,t))}const wa=`slicc-transcript`,Ta=[`canonical-agent-history-unavailable`,`tool-data-may-be-truncated`,`model-metadata-unavailable`,`scoop-history-unavailable`,`attachment-file-missing`,`attachment-association-unavailable`,`complete-snapshot-unavailable`],Ea=new Set(`/export/format./export/producer/application./session/id./session/state./session/completeness/status./session/completeness/missing/*./conversations/*/id./conversations/*/kind./conversations/*/parentConversationId./conversations/*/messages/*/id./conversations/*/messages/*/role./conversations/*/messages/*/timestamp./conversations/*/messages/*/toolCallId./conversations/*/messages/*/content/*/type./conversations/*/messages/*/content/*/id./conversations/*/messages/*/content/*/name./conversations/*/messages/*/content/*/attachmentId./delegations/*/sourceConversationId./delegations/*/targetConversationId./delegations/*/toolCallId./attachments/*/id./attachments/*/path./attachments/*/sha256./attachments/*/sourceConversationId./attachments/*/sourceMessageId./attachments/*/handling./attachments/*/missingReason`.split(`.`));function Da(e){return Ea.has(e.replace(/\/\d+(?=\/|$)/g,`/*`))}var Oa=class extends Error{code;detail;constructor(e,t){super(t?`${e}: ${t}`:e),this.code=e,this.detail=t,this.name=`TranscriptExportError`}};const ka=new Set(Ta),Aa=/^[0-9a-fA-F]{64}$/,ja=/^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}/;function F(e){return typeof e==`object`&&!!e&&!Array.isArray(e)}function Ma(e){return typeof e==`string`&&Aa.test(e)}function Na(e){return ja.test(e)&&Number.isFinite(Date.parse(e))}function Pa(e,t){let n=t.map(e=>`"${e}"`),r=n[n.length-1];return n.length===2?`${e} must be ${n[0]} or ${r}`:`${e} must be ${n.slice(0,-1).join(`, `)}, or ${r}`}function Fa(e,t,n){return typeof e!=`string`||!t.includes(e)?{ok:!1,error:Pa(n,t)}:{ok:!0}}function Ia(e,t,n){for(let r=0;r<e.length;r++){let i=t(e[r],`${n}[${r}]`);if(!i.ok)return i}return{ok:!0}}function La(e,t){let n=e.type;if(n===`text`){if(typeof e.text!=`string`)return{ok:!1,error:`${t}.text must be a string`}}else if(n===`tool-call`){if(typeof e.id!=`string`||e.id===``)return{ok:!1,error:`${t}.id must be a non-empty string`};if(typeof e.name!=`string`||e.name===``)return{ok:!1,error:`${t}.name must be a non-empty string`};if(!(`input`in e))return{ok:!1,error:`${t}.input must be present`}}else if(typeof e.attachmentId!=`string`||e.attachmentId===``)return{ok:!1,error:`${t}.attachmentId must be a non-empty string`};return{ok:!0}}function Ra(e,t){if(!F(e))return{ok:!1,error:`${t} must be a non-null object`};let n=Fa(e.type,[`text`,`tool-call`,`attachment-ref`],`${t}.type`);return n.ok?La(e,t):n}function za(e,t){for(let n of[`input`,`output`,`cacheRead`,`cacheWrite`,`totalTokens`]){let r=e[n];if(typeof r!=`number`)return{ok:!1,error:`${t}.${n} must be a number`};if(!Number.isInteger(r)||r<0)return{ok:!1,error:`${t}.${n} must be a non-negative integer`}}return{ok:!0}}function Ba(e,t){for(let n of[`input`,`output`,`cacheRead`,`cacheWrite`,`total`]){let r=e[n];if(typeof r!=`number`)return{ok:!1,error:`${t}.${n} must be a number`};if(!Number.isFinite(r)||r<0)return{ok:!1,error:`${t}.${n} must be a finite non-negative number`}}return{ok:!0}}function Va(e,t){let n=za(e,t);if(!n.ok)return n;let r=e.cost;return F(r)?Ba(r,`${t}.cost`):{ok:!1,error:`${t}.cost must be a non-null object`}}function Ha(e,t){if(typeof e.id!=`string`)return{ok:!1,error:`${t}.id must be a string`};if(typeof e.sequence!=`number`)return{ok:!1,error:`${t}.sequence must be a number`};let n=e.sequence;return!Number.isInteger(n)||n<1?{ok:!1,error:`${t}.sequence must be a positive integer`}:typeof e.timestamp==`string`?Na(e.timestamp)?{ok:!0}:{ok:!1,error:`${t}.timestamp must be a valid ISO 8601 date-time string`}:{ok:!1,error:`${t}.timestamp must be a string`}}function Ua(e,t){let n=e.toolCallId;return typeof n!=`string`||n===``?{ok:!1,error:`${t}.toolCallId must be a non-empty string for tool-result messages`}:{ok:!0}}function Wa(e,t){let n=e.usage;return n===void 0?{ok:!0}:F(n)?Va(n,`${t}.usage`):{ok:!1,error:`${t}.usage must be a non-null object`}}function Ga(e,t){if(!F(e))return{ok:!1,error:`${t} must be a non-null object`};let n=Fa(e.role,[`user`,`assistant`,`tool-result`],`${t}.role`);if(!n.ok)return n;if(e.role===`tool-result`){let n=Ua(e,t);if(!n.ok)return n}let r=Ha(e,t);if(!r.ok)return r;let i=e.content;if(!Array.isArray(i))return{ok:!1,error:`${t}.content must be an array`};let a=Ia(i,Ra,`${t}.content`);return a.ok?Wa(e,t):a}function Ka(e,t){if(!F(e))return{ok:!1,error:`${t} must be a non-null object`};if(typeof e.id!=`string`)return{ok:!1,error:`${t}.id must be a string`};if(typeof e.name!=`string`)return{ok:!1,error:`${t}.name must be a string`};let n=Fa(e.kind,[`cone`,`scoop`],`${t}.kind`);if(!n.ok)return n;let r=e.messages;return Array.isArray(r)?Ia(r,Ga,`${t}.messages`):{ok:!1,error:`${t}.messages must be an array`}}function qa(e,t){for(let n of[`id`,`path`,`originalName`,`mimeType`,`sha256`,`sourceConversationId`,`sourceMessageId`])if(typeof e[n]!=`string`)return{ok:!1,error:`${t}.${n} must be a string`};return{ok:!0}}function Ja(e,t){let n=e.path,r=e.sha256,i=e.byteLength;return n===``?{ok:!1,error:`${t}.path must be non-empty when present`}:Ma(r)?!Number.isInteger(i)||i<0?{ok:!1,error:`${t}.byteLength must be a non-negative integer when present`}:e.missingReason===void 0?{ok:!0}:{ok:!1,error:`${t}.missingReason must be absent when present is true`}:{ok:!1,error:`${t}.sha256 must be a 64-char hex string when present`}}const Ya=[`attachment-file-missing`,`attachment-association-unavailable`];function Xa(e,t){let n=e.path,r=e.sha256,i=e.byteLength;return n===``?r===``?i===0?Fa(e.missingReason,Ya,`${t}.missingReason`):{ok:!1,error:`${t}.byteLength must be zero when not present`}:{ok:!1,error:`${t}.sha256 must be empty when not present`}:{ok:!1,error:`${t}.path must be empty when not present`}}function Za(e,t){return e.present?Ja(e,t):Xa(e,t)}function Qa(e,t){if(!F(e))return{ok:!1,error:`${t} must be a non-null object`};let n=qa(e,t);if(!n.ok)return n;if(typeof e.byteLength!=`number`)return{ok:!1,error:`${t}.byteLength must be a number`};if(typeof e.present!=`boolean`)return{ok:!1,error:`${t}.present must be a boolean`};let r=Fa(e.handling,[`text-redacted`,`binary-unchanged`],`${t}.handling`);return r.ok?Za(e,t):r}function $a(e,t){let n=Fa(e.kind,[`json`,`attachment`],`${t}.kind`);if(!n.ok)return n;if(e.kind===`json`){if(typeof e.pointer!=`string`)return{ok:!1,error:`${t}.pointer must be a string`};let n=e.pointer;if(n!==``&&!n.startsWith(`/`))return{ok:!1,error:`${t}.pointer must be a valid RFC 6901 JSON pointer`}}else if(typeof e.attachmentId!=`string`||e.attachmentId===``)return{ok:!1,error:`${t}.attachmentId must be a non-empty string`};return{ok:!0}}function eo(e,t){if(!F(e))return{ok:!1,error:`${t} must be a non-null object`};if(typeof e.id!=`string`)return{ok:!1,error:`${t}.id must be a string`};if(typeof e.category!=`string`)return{ok:!1,error:`${t}.category must be a string`};let n=Fa(e.detector,[`known-secret`,`credential-pattern`,`pre-obfuscated`],`${t}.detector`);if(!n.ok)return n;let r=e.target;return F(r)?$a(r,`${t}.target`):{ok:!1,error:`${t}.target must be a non-null object`}}function to(e,t){return F(e)?typeof e.sourceConversationId==`string`?typeof e.targetConversationId==`string`?{ok:!0}:{ok:!1,error:`${t}.targetConversationId must be a string`}:{ok:!1,error:`${t}.sourceConversationId must be a string`}:{ok:!1,error:`${t} must be a non-null object`}}function no(e,t){return typeof e!=`string`||!ka.has(e)?{ok:!1,error:`${t} is not a valid completeness reason`}:{ok:!0}}function ro(e){if(!F(e))return{ok:!1,error:`export must be a non-null object`};if(typeof e.id!=`string`)return{ok:!1,error:`export.id must be a string`};if(typeof e.generatedAt!=`string`)return{ok:!1,error:`export.generatedAt must be a string`};if(e.format!==`slicc-transcript`)return{ok:!1,error:`export.format must equal "slicc-transcript"`};let t=e.producer;return F(t)?t.application===`slicc`?typeof t.version==`string`?{ok:!0}:{ok:!1,error:`export.producer.version must be a string`}:{ok:!1,error:`export.producer.application must equal "slicc"`}:{ok:!1,error:`export.producer must be a non-null object`}}function io(e){if(!F(e))return{ok:!1,error:`session.completeness must be a non-null object`};let t=Fa(e.status,[`complete`,`partial`],`session.completeness.status`);return t.ok?Array.isArray(e.missing)?Ia(e.missing,no,`session.completeness.missing`):{ok:!1,error:`session.completeness.missing must be an array`}:t}function ao(e){if(!F(e))return{ok:!1,error:`session must be a non-null object`};if(typeof e.id!=`string`)return{ok:!1,error:`session.id must be a string`};if(typeof e.title!=`string`)return{ok:!1,error:`session.title must be a string`};let t=Fa(e.state,[`active`,`frozen`],`session.state`);return t.ok?io(e.completeness):t}function oo(e){if(!F(e))return{ok:!1,error:`privacy must be a non-null object`};if(e.reasoningExcluded!==!0)return{ok:!1,error:`privacy.reasoningExcluded must be true`};let t=e.excludedReasoningBlocks;if(typeof t!=`number`)return{ok:!1,error:`privacy.excludedReasoningBlocks must be a number`};if(!Number.isInteger(t)||t<0)return{ok:!1,error:`privacy.excludedReasoningBlocks must be a non-negative integer`};if(e.binaryAttachments!==`included-unchanged`)return{ok:!1,error:`privacy.binaryAttachments must equal "included-unchanged"`};if(!F(e.redactionCounts))return{ok:!1,error:`privacy.redactionCounts must be a non-null object`};let n=e.redactions;return Array.isArray(n)?Ia(n,eo,`privacy.redactions`):{ok:!1,error:`privacy.redactions must be an array`}}function so(e){let t=e.conversations;if(!Array.isArray(t))return{ok:!1,error:`conversations must be an array`};let n=Ia(t,Ka,`conversations`);if(!n.ok)return n;let r=e.delegations;if(!Array.isArray(r))return{ok:!1,error:`delegations must be an array`};let i=Ia(r,to,`delegations`);if(!i.ok)return i;let a=e.attachments;return Array.isArray(a)?Ia(a,Qa,`attachments`):{ok:!1,error:`attachments must be an array`}}function co(e){let t=new Set,n=new Set;for(let r of e){if(!F(r)||typeof r.id!=`string`)continue;if(t.has(r.id))return{ok:!1,error:`duplicate conversation id "${r.id}"`};t.add(r.id);let e=r.messages;if(Array.isArray(e)){for(let t of e)if(!(!F(t)||typeof t.id!=`string`)){if(n.has(t.id))return{ok:!1,error:`duplicate message id "${t.id}"`};n.add(t.id)}}}return{ok:!0}}function lo(e){for(let t of e){if(!F(t))continue;let e=t.messages;if(!Array.isArray(e))continue;let n=typeof t.id==`string`?t.id:`?`,r=0;for(let t of e){if(!F(t)||typeof t.sequence!=`number`)continue;let e=t.sequence;if(e<=r)return{ok:!1,error:`sequences in conversation "${n}" must be strictly increasing`};r=e}}return{ok:!0}}function uo(e){let t=[];for(let n of e){if(!F(n))continue;let e=n.content;if(Array.isArray(e))for(let n of e)F(n)&&n.type===`tool-call`&&typeof n.id==`string`&&t.push(n.id)}return t}function fo(e){let t=new Set;for(let n of e){if(!F(n))continue;let e=n.messages;if(Array.isArray(e))for(let n of uo(e))t.add(n)}return t}function po(e,t){for(let n of e){if(!F(n))continue;let e=n.messages;if(Array.isArray(e))for(let n of e){if(!F(n)||n.role!==`tool-result`)continue;let e=n.toolCallId;if(typeof e==`string`&&e!==``&&!t.has(e))return{ok:!1,error:`tool-result message references unknown toolCallId "${e}"`}}}return{ok:!0}}function mo(e){return po(e,fo(e))}function ho(e,t){for(let n of e){if(!F(n)||n.type!==`attachment-ref`)continue;let e=n.attachmentId;if(typeof e!=`string`||!t.has(e))return{ok:!1,error:`attachment-ref references unknown attachmentId "${e}"`}}return{ok:!0}}function go(e,t){for(let n of e){if(!F(n))continue;let e=n.messages;if(Array.isArray(e))for(let n of e){if(!F(n))continue;let e=n.content;if(!Array.isArray(e))continue;let r=ho(e,t);if(!r.ok)return r}}return{ok:!0}}function _o(e,t){let n=new Set;for(let e of t)F(e)&&typeof e.id==`string`&&n.add(e.id);return go(e,n)}function vo(e){let t=new Map;for(let n of e){if(!F(n)||typeof n.id!=`string`)continue;let e=new Set,r=n.messages;if(Array.isArray(r))for(let t of r)F(t)&&typeof t.id==`string`&&e.add(t.id);t.set(n.id,e)}return t}function yo(e,t){let n=vo(t);for(let t=0;t<e.length;t++){let r=e[t];if(!F(r))continue;let i=r.sourceConversationId,a=r.sourceMessageId;if(typeof i!=`string`||typeof a!=`string`)continue;let o=n.get(i);if(!o)return{ok:!1,error:`attachments[${t}].sourceConversationId "${i}" does not exist`};if(!o.has(a))return{ok:!1,error:`attachments[${t}].sourceMessageId "${a}" does not exist in conversation "${i}"`}}return{ok:!0}}function bo(e){let t=new Map;for(let n of e){if(!F(n)||typeof n.id!=`string`)continue;let e=Array.isArray(n.messages)?n.messages:[];t.set(n.id,new Set(uo(e)))}return t}function xo(e,t,n){for(let r=0;r<e.length;r++){let i=e[r];if(!F(i))continue;let a=i.sourceConversationId,o=i.targetConversationId;if(typeof a!=`string`||!t.has(a))return{ok:!1,error:`delegations[${r}].sourceConversationId "${a}" does not exist`};if(typeof o!=`string`||!t.has(o))return{ok:!1,error:`delegations[${r}].targetConversationId "${o}" does not exist`};let s=i.toolCallId;if(typeof s==`string`&&s!==``&&!n.get(a)?.has(s))return{ok:!1,error:`delegations[${r}].toolCallId "${s}" does not exist in source conversation "${a}"`}}return{ok:!0}}function So(e,t){let n=new Set;for(let e of t)F(e)&&typeof e.id==`string`&&n.add(e.id);return xo(e,n,bo(t))}function Co(e,t,n){if(e.kind!==`attachment`)return{ok:!0};let r=e.attachmentId;return typeof r!=`string`||!t.has(r)?{ok:!1,error:`${n}.attachmentId "${r}" does not reference a known attachment`}:{ok:!0}}function wo(e,t){let n=new Set;for(let e of t)F(e)&&typeof e.id==`string`&&n.add(e.id);for(let t=0;t<e.length;t++){let r=e[t];if(!F(r))continue;let i=r.target;if(!F(i))continue;let a=Co(i,n,`privacy.redactions[${t}].target`);if(!a.ok)return a}return{ok:!0}}function To(e){let t=e.conversations,n=e.attachments,r=e.delegations,i=e.privacy,a=Array.isArray(i?.redactions)?i.redactions:[],o=co(t);if(!o.ok)return o;let s=lo(t);if(!s.ok)return s;let c=mo(t);if(!c.ok)return c;let l=_o(t,n);if(!l.ok)return l;let u=yo(n,t);if(!u.ok)return u;let d=So(r,t);return d.ok?wo(a,n):d}function Eo(e){let t=so(e);return t.ok?To(e):t}function Do(e){if(!F(e))return{ok:!1,error:`document must be a non-null object`};if(e.schemaVersion!==1)return{ok:!1,error:`schemaVersion must equal 1`};let t=ro(e.export);if(!t.ok)return t;let n=ao(e.session);if(!n.ok)return n;let r=oo(e.privacy);return r.ok?Eo(e):r}async function Oo(e,t,n){let r=await n({method:`GET`,path:`/${e}/sites/${t}/config.json`,origin:qe});if(r.status===401||r.status===403)throw Error(`not authorized to read the site config for ${e}/${t} — log in via Settings → Providers → Adobe, or pass --backend to skip the probe`);if(r.status===404)throw Error(`no site config for ${e}/${t} — check the org and site names`);if(r.status>=400)throw Error(`site config probe failed for ${e}/${t}: ${r.status}`);let i;try{i=await r.json()}catch(n){throw Error(`site config for ${e}/${t} is not JSON: ${n instanceof Error?n.message:String(n)}`)}let a=i.content?.source?.url;return{backend:ko(a),sourceUrl:a}}function ko(e){if(!e)return`da`;let t;try{t=new URL(e).host}catch{return`da`}return t===`api.aem.live`?`aem`:`da`}const Ao=`slicc-sprinkle-routes`;function jo(){try{let e=localStorage.getItem(Ao);return e?JSON.parse(e):{}}catch{return{}}}function Mo(e){try{localStorage.setItem(Ao,JSON.stringify(e))}catch{}}function No(e){return jo()[e]}function Po(e,t){let n=jo();n[e]=t,Mo(n)}function Fo(e){let t=jo();delete t[e],Mo(t)}function Io(){return jo()}function Lo(e,t,n){return yt(t,n,`${e} adapter does not implement ${t}.${n}`)}function Ro(e,t,n,r){let i=n.filter(e=>typeof r?.[e]==`function`),a=n.map(n=>{let i=r?.[n];return[n,typeof i==`function`?i:()=>Promise.resolve(Lo(e,t,n))]});return{...Object.fromEntries(a),allowlist:i,supports:e=>i.includes(e)}}function zo(e){let{adapter:t,pageGestures:n}=e,r=n??{};return{adapter:t,browser:Ro(t,`browser`,St,e.browser),network:Ro(t,`network`,vt,e.network),secrets:Ro(t,`secrets`,Ct,e.secrets),devices:Ro(t,`devices`,wt,{usbRequest:r.usbRequest,serialRequest:r.serialRequest,hidRequest:r.hidRequest,...e.devices}),mounts:Ro(t,`mounts`,bt,{pickDirectory:r.pickDirectory,...e.mounts}),approvals:Ro(t,`approvals`,Tt,e.approvals)}}function Bo(e={}){return zo({adapter:`connect`,pageGestures:e.pageGestures})}function Vo(e){let t=Et(()=>import(`./extension-ops-Ded2__AC.js`).then(t=>t.createExtensionOps(e)));return zo({adapter:e.adapter,pageGestures:e.pageGestures,network:{crossOriginFetch:e=>T(`network`,`crossOriginFetch`,async()=>(await t()).crossOriginFetch(e))},secrets:{listMaskedEnv:()=>T(`secrets`,`listMaskedEnv`,async()=>(await t()).secrets.listMaskedEnv()),getMasked:e=>T(`secrets`,`getMasked`,async()=>(await t()).secrets.getMasked(e)),set:e=>T(`secrets`,`set`,async()=>(await t()).secrets.set(e)),delete:e=>T(`secrets`,`delete`,async()=>(await t()).secrets.delete(e))},mounts:{signRequest:e=>T(`mounts`,`signRequest`,async()=>(await t()).signRequest(e))},approvals:{request:e=>T(`approvals`,`request`,async()=>(await t()).requestApproval(e))}})}function Ho(e={}){let t=Et(()=>import(`./rest-ops-DyAkn44S.js`).then(t=>t.createRestOps(e)),e.controlTimeoutMs??1e4);return zo({adapter:`node-rest`,pageGestures:e.pageGestures,network:{localNodeServer:()=>Promise.resolve({ok:!0,value:{available:!0}}),crossOriginFetch:e=>T(`network`,`crossOriginFetch`,async()=>(await t()).crossOriginFetch(e))},secrets:{listMaskedEnv:()=>T(`secrets`,`listMaskedEnv`,async()=>(await t()).secrets.listMaskedEnv()),getMasked:e=>T(`secrets`,`getMasked`,async()=>(await t()).secrets.getMasked(e)),set:e=>T(`secrets`,`set`,async()=>(await t()).secrets.set(e)),delete:e=>T(`secrets`,`delete`,async()=>(await t()).secrets.delete(e))},mounts:{signRequest:e=>T(`mounts`,`signRequest`,async()=>(await t()).signRequest(e))},approvals:{request:e=>T(`approvals`,`request`,async()=>(await t()).requestApproval(e))}})}function Uo(e,t={}){let{pageGestures:n}=t;switch(e){case`node-rest`:return Ho({pageGestures:n});case`extension-direct`:case`extension-delegate`:return Vo({adapter:e,pageGestures:n});case`connect`:return Bo({pageGestures:n})}}const Wo=e(`quick-llm`);async function Go(e){let t=f();if(!t)return Wo.debug(`No API key for active provider — skipping`),null;let n=d(),r=u(),i;if(i=e.modelId?Yo(n,e.modelId)??Yo(n,r):Ko(n,r),!i)return Wo.debug(`No model available for provider`,{providerId:n}),null;let a={role:`user`,content:e.prompt,timestamp:Date.now()},o={};i.provider===`adobe`&&(o[`X-Session-Id`]=Xo());try{let n=(await Ce(i,{systemPrompt:e.system,messages:[a]},{apiKey:t,maxTokens:e.maxTokens??60,temperature:e.temperature??.3,signal:e.signal,headers:Object.keys(o).length>0?o:void 0})).content.filter(e=>e.type===`text`).map(e=>e.text).join(``).trim();return n.length>0?n:null}catch(e){return Wo.debug(`Quick label call failed`,{error:e instanceof Error?e.message:String(e)}),null}}function Ko(e,t){let n=p(e);if(n.length===0)return;let r=n.find(e=>e.id===t)??n[0],i=Jo(r.id),a=n.filter(e=>qo(e,r,i));return a.length===0?r:(a.sort((e,t)=>(e.cost?.input??0)-(t.cost?.input??0)),a[0])}function qo(e,t,n){if(e.id===t.id)return!1;let r=t.cost?.input??1/0;if((e.cost?.input??1/0)>=r)return!1;let i=e.id.toLowerCase();switch(n){case`claude`:return i.includes(`haiku`);case`gpt`:return/(^|-)mini(-|$)|(^|-)nano(-|$)/.test(i);case`gemini`:return i.includes(`flash`);case`grok`:return/(^|-)mini(-|$)|(^|-)fast(-|$)/.test(i);case`unknown`:return!0}}function Jo(e){let t=e.toLowerCase();return t.includes(`claude`)?`claude`:t.includes(`gemini`)?`gemini`:t.includes(`grok`)?`grok`:/^(gpt|o\d)/.test(t)?`gpt`:`unknown`}function Yo(e,t){return p(e).find(e=>e.id===t)}function Xo(){return Ot(`ui-quick-llm`)}const Zo=e(`sudo-suggest`),Qo=[`You generalize a single shell command into a minimal glob pattern for an`,`allow-list rule. Output ONLY the pattern on one line — no prose, no quotes,`,`no backticks. Keep the leading command/sub-command verbatim and replace only`,`the volatile tail (args, paths, refs) with a single trailing "*".`,`Examples:`,` git push origin main -> git push*`,` rm -rf build/cache -> rm -rf*`,` npm install left-pad -> npm install*`].join(`
2
2
  `),$o=[`You generalize a single filesystem path into a minimal glob pattern for an`,`allow-list rule. Output ONLY the pattern on one line — no prose, no quotes,`,`no backticks. Keep the meaningful directory prefix and replace the volatile`,`leaf (and below) with "**". Examples:`,` /workspace/.git/config -> /workspace/.git/**`,` /shared/secrets/openai.key -> /shared/secrets/**`,` /workspace/src/app/main.ts -> /workspace/src/**`].join(`
3
3
  `);async function es(e,t){if(e.suggestedPattern&&e.suggestedPattern.trim().length>0)return e.suggestedPattern.trim();let n=e.detail.trim();if(e.kind===`guest-message`||e.kind===`guest-tool`)return n;let r=e.kind===`command`?Qo:$o,i=null;try{i=await Go({prompt:n,system:r,maxTokens:40,temperature:0,signal:t})}catch(e){Zo.debug(`suggestPattern: quickLabel threw`,{error:e instanceof Error?e.message:String(e)}),i=null}return ts(i)||n}function ts(e){if(!e)return null;let t=(e.split(`
4
4
  `,1)[0]?.trim()??``).replace(/^`+/,``).replace(/`+$/,``).replace(/^["']/,``).replace(/["']$/,``).trim();return t.length===0?null:t}const ns=e(`sudo:capability-gesture`);function rs(e,t={}){let n=t.suggest??es;return{async requestApproval(t,r){let i=r?.signal,a;if(t.suggestedPattern)a=t.suggestedPattern;else try{a=await n(t,i)}catch{a=t.detail}if(i?.aborted)return ns.warn(`sudo approval aborted before prompting — denying`,{detail:t.detail}),mt();if(!e)return ns.warn(`no CapabilityBroker injected for the sudo gesture hop — denying (composition bug, never a guessed transport)`,{detail:t.detail}),mt();let o=await e.approvals.request({kind:t.kind,detail:t.detail,suggestedPattern:a,...t.requester?{requester:t.requester}:{},...t.reason?{reason:t.reason}:{},...t.approver?{approver:t.approver}:{},...i?{signal:i}:{}});return o.ok?xt(o.value,a):(ns.warn(`capability broker approvals.request failed — denying`,{message:o.message}),mt())}}}const is=e(`sudo:tray-first`);function as(e,t={}){let n=t.suggest??es,r=t.timeoutMs??6e5,i=t.getClient??(async()=>{let{getPanelRpcClient:e}=await import(`./panel-rpc-DW7W4w6_.js`).then(e=>e.a);return e()});return{async requestApproval(t,a){if(a?.signal?.aborted)return mt();let o=t.suggestedPattern;if(!o)try{o=await n(t,a?.signal)}catch{o=t.detail}let s={...t,suggestedPattern:o},c=null;try{c=await i()}catch(e){is.debug?.(`panel-RPC client lookup threw — using native broker`,{error:e instanceof Error?e.message:String(e)})}if(c)try{let e=await c.call(`sudo-request`,{request:s,mode:`tray-first`},{timeoutMs:r});if(e?.handled!==!1)return ss(e?.decision,o)}catch(e){is.warn(`tray-first sudo probe failed — using native broker`,{error:e instanceof Error?e.message:String(e)})}return e.requestApproval(s,a)}}}const os=[`user-timeout`,`cone-timeout`,`unavailable`];function ss(e,t){if(!e||typeof e!=`object`)return mt();let n=e,r=n.attestation===`biometric`||n.attestation===`passcode`||n.attestation===`none`?n.attestation:void 0;if(n.decision===`allow`)return{decision:`allow`,...r?{attestation:r}:{}};if(n.decision===`always`)return{decision:`always`,pattern:typeof n.pattern==`string`&&n.pattern.trim().length>0?n.pattern.trim():t,...r?{attestation:r}:{}};if(n.decision!==`deny`)return mt();let i=os.find(e=>e===n.reason);return i?{decision:`deny`,reason:i}:{decision:`deny`}}function cs(e,t){return{requestApproval(n){return t.enqueueSudoRequest(e,n)}}}function ls(){return`lick-${Date.now()}-${Math.random().toString(36).slice(2,10)}`}var us=class{pending=new Map;timeoutMs;newId;setTimer;clearTimer;onAutoSettle;constructor(e={}){this.timeoutMs=e.timeoutMs??3e5,this.newId=e.newId??ls,this.setTimer=e.setTimer??((e,t)=>setTimeout(e,t)),this.clearTimer=e.clearTimer??(e=>clearTimeout(e)),this.onAutoSettle=e.onAutoSettle??(()=>{})}notifyAutoSettle(e,t,n){try{this.onAutoSettle(e,t,n)}catch{}}register(e,t,n){let r=this.newId();return{id:r,pending:new Promise(i=>{let a=null;Number.isFinite(this.timeoutMs)&&this.timeoutMs>0&&(a=this.setTimer(()=>{let e=this.pending.get(r);e&&(this.pending.delete(r),e.resolve(ht(`cone-timeout`)),this.notifyAutoSettle(r,`expired`,e.scoopJid))},this.timeoutMs)),this.pending.set(r,{scoopJid:e,request:t,resolve:i,timerHandle:a,approverJid:n})})}}resolve(e,t){let n=this.pending.get(e);return n?(this.pending.delete(e),n.timerHandle!=null&&this.clearTimer(n.timerHandle),n.resolve(t),!0):!1}failScoop(e){let t=0;for(let[n,r]of this.pending)r.scoopJid===e&&(this.pending.delete(n),r.timerHandle!=null&&this.clearTimer(r.timerHandle),r.resolve({decision:`deny`,reason:`unavailable`}),this.notifyAutoSettle(n,`scoop-dropped`,r.scoopJid),t++);return t}failAll(){let e=0;for(let[t,n]of this.pending)n.timerHandle!=null&&this.clearTimer(n.timerHandle),n.resolve({decision:`deny`,reason:`unavailable`}),this.notifyAutoSettle(t,`shutdown`,n.scoopJid),e++;return this.pending.clear(),e}get(e){let t=this.pending.get(e);return t?{id:e,scoopJid:t.scoopJid,request:t.request,...t.approverJid?{approverJid:t.approverJid}:{}}:null}list(){let e=[];for(let[t,n]of this.pending)e.push({id:t,scoopJid:n.scoopJid,request:n.request,...n.approverJid?{approverJid:n.approverJid}:{}});return e}size(){return this.pending.size}};e(`sudo-panel`),typeof globalThis.confirm==`function`&&globalThis.confirm.bind(globalThis),typeof globalThis.prompt==`function`&&globalThis.prompt.bind(globalThis),e(`sudo:page`),e(`sudo`);function ds(e){return gt(fs(e))}function fs(e){let t=rs(e);return e?.adapter===`extension-direct`||e?.adapter===`extension-delegate`?t:as(t)}let ps=null;function ms(e){return ps=e,()=>{ps===e&&(ps=null)}}function hs(){if(!ps)throw new Oa(`session-not-found`);return ps}const gs=`focus`,_s={type:`leaf`,surfaceId:`chat`};function vs(e,t={},n={}){return{zones:{top:null,left:null,middle:null,right:null,bottom:null,...e},rowFr:{top:1,center:1,bottom:1,...n},colFr:{left:1,middle:1,right:1,...t}}}const ys={focus:{name:`focus`,tree:vs({left:_s},{left:3,middle:1})}};function bs(e){return ys[e]??null}const xs=`progress`;function Ss(e){return/^[A-Za-z_][A-Za-z0-9_]*$/.test(e)}async function Cs(){try{let e=await Nt();if(e.cancelled)throw Error(`mount: cancelled`);if(e.error)throw Error(`mount: ${e.error}`);if(e.handleInIdb&&typeof e.idbKey==`string`){let t=await Pt(e.idbKey);if(!t)throw Error(`mount: no directory handle found in storage`);return await Mt(t),t}throw Error(`mount: unexpected popup result`)}catch(e){throw Error(`mount: ${e instanceof Error?e.message:String(e)}`)}}async function ws(){if(typeof window>`u`||!(`showDirectoryPicker`in window))throw Error(`mount: local picker requires a user gesture in the panel (unavailable in this runtime). Ask the agent to mount it instead.`);try{return await window.showDirectoryPicker({mode:`readwrite`})}catch(e){throw e instanceof Error&&e.name===`AbortError`?Error(`mount: cancelled`):Error(`mount: ${e instanceof Error?e.message:String(e)}`)}}async function Ts(e,t){let n;try{({grants:n}=await e.call(`permission-request`,{kinds:[`filesystem`],description:`A command in the terminal asks to mount a local directory at ${t}.`},{timeoutMs:3e5}))}catch(e){let t=e instanceof Error?e.message:String(e);throw Error(t.replace(/^permission-request: /,``))}let r=n.find(e=>e.kind===`filesystem`);if(!r||!(`idbKey`in r))throw Error(`no directory selected`);let i=await Pt(r.idbKey);if(!i)throw Error(`no directory handle found in storage`);return await Mt(i),i}function Es(e){let t={positional:[],noProbe:!1,clearCache:!1,bodies:!1,json:!1};for(let n=0;n<e.length;n++){let r=e[n];if(r===`--source`)t.source=e[++n];else if(r===`--profile`)t.profile=e[++n];else if(r===`--backend`){let r=e[++n];r===`da`||r===`aem`?t.backend=r:t.backendError=r}else r===`--no-probe`?t.noProbe=!0:r===`--max-body-mb`?t.maxBodyMb=Number(e[++n]):r===`--clear-cache`?t.clearCache=!0:r===`--bodies`?t.bodies=!0:r===`--json`?t.json=!0:t.positional.push(r)}return t}function Ds(e){let t=e.match(/^(da|aem):\/\/([^/]+)\/([^/]+)(?:\/(.*))?$/);return t?{scheme:t[1],org:t[2],name:t[3],path:(t[4]??``).replace(/^\/+/,``).replace(/\/+$/,``)}:null}const Os=new Set([`--source`,`--profile`,`--backend`,`--max-body-mb`]);function ks(e){for(let t=0;t<e.length;t++){let n=e[t];if(n===`--`)return!1;if(n===`--help`||n===`-h`)return!0;Os.has(n)&&t++}return!1}function As(e){return`aem://${e.org}/${e.name}${e.path?`/${e.path}`:``}`}var js=class{options;signedFetchS3;signedFetchDa;constructor(e){this.options=e,this.signedFetchS3=e.signedFetchS3,this.signedFetchDa=e.signedFetchDa}async execute(e,t,n){let r=e[0];if(r===`--help`||r===`-h`)return this.help();if(r===`unmount`||r===`-u`)return this.handleUnmount(e.slice(1),t,`mount unmount`);if(r===`list`||r===`-l`||r===`--list`)return this.handleList();if(r===`refresh`)return this.handleRefresh(e.slice(1),t,n);if(r===`info`)return this.handleInfo(e.slice(1),t);let i=Es(e);if(i.positional.length===0)return this.usageError(`mount: mount point required`);let a=this.resolvePath(i.positional[0],t);return i.backendError===void 0?i.source?i.source.startsWith(`s3://`)?this.mountS3(a,i):i.source.startsWith(`da://`)||i.source.startsWith(`aem://`)?this.mountAdobe(a,i):this.usageError(`mount: invalid source '${i.source}' — expected s3://..., da://... or aem://...`):this.mountLocal(a,n):this.usageError(`mount: invalid --backend '${i.backendError}' — expected 'da' or 'aem'`)}async executeUmount(e,t){return this.handleUnmount(e,t,`umount`)}async mountLocal(e,t){try{if((this.options.isScoop??(()=>!1))())throw Error(`mount: cannot mount local directories from a scoop (no UI). Ask the cone.`);let n=ke();if(!n){let n=await Ms(e);if(n)return await this.options.fs.mount(e,n,{env:t}),{stdout:`Mounted '${n.describe().displayName}' → ${e}\nIndexing in background for fast file discovery.\nNote: External changes are not auto-detected — use 'mount refresh ${e}' after modifying files outside the browser.\n`,stderr:``,exitCode:0}}let r=le()?null:y(),i;if(n){let t=this.options.acquireLocalMountViaToolUI;if(!t)throw Error(`mount: tool UI not available in this runtime`);i=await t(n,e)}else i=ee()?await Cs():r?await Ts(r,e):await ws();let a=Ue.fromHandle(i,{mountId:Xe()});return await this.options.fs.mount(e,a,{env:t}),{stdout:`Mounted '${a.describe().displayName}' → ${e}\nIndexing in background for fast file discovery.\nNote: External changes are not auto-detected — use 'mount refresh ${e}' after modifying files outside the browser.\n`,stderr:``,exitCode:0}}catch(e){return{stdout:``,stderr:`mount: ${e instanceof Error?e.message:String(e)}\n`,exitCode:1}}}async mountS3(e,t){if(!t.source)return this.usageError(`mount: --source required`);let n=t.profile??`default`,r=Xe(),i=new Ze({mountId:r,ttlMs:3e4}),a=new Ge({source:t.source,profile:n,cache:i,maxBodyBytes:t.maxBodyMb?t.maxBodyMb*1024*1024:void 0,mountId:r,signedFetch:this.signedFetchS3??Ke(n)});if(!t.noProbe)try{await a.readDir(`/`)}catch(e){return await a.close(),{stdout:``,stderr:`mount: probe failed for ${t.source} — ${e instanceof Error?e.message:String(e)}\n`,exitCode:1}}return await this.options.fs.mount(e,a),{stdout:`Mounted '${a.describe().displayName}' → ${e} (profile: ${n})\n`,stderr:``,exitCode:0}}async mountAdobe(e,t){if(!t.source)return this.usageError(`mount: --source required`);let n=t.profile??`default`,r=this.signedFetchDa??Ye(),i=Ds(t.source);if(!i)return this.usageError(`mount: invalid source '${t.source}' — expected da://org/repo or aem://org/site`);let a=i.scheme===`aem`?`aem`:`da`,o=``;if(t.backend)a=t.backend;else if(i.scheme===`da`)try{a=(await Oo(i.org,i.name,r)).backend,a===`aem`&&(o=`mount: ${i.org}/${i.name} is on Helix 6 — its content lives in the Source Bus at https://api.aem.live/${i.org}/sites/${i.name}/source, not admin.da.live. Mounting through aem://${i.org}/${i.name}. Pass --backend da to force the old endpoint.\n`)}catch(e){return{stdout:``,stderr:`mount: could not determine the content source for ${t.source} — ${e instanceof Error?e.message:String(e)}. Pass --backend da or --backend aem to skip this probe.\n`,exitCode:1}}let s=Xe(),c=new Ze({mountId:s,ttlMs:3e4}),l={source:a===`aem`?As(i):`da://${i.org}/${i.name}${i.path?`/${i.path}`:``}`,profile:n,cache:c,maxBodyBytes:t.maxBodyMb?t.maxBodyMb*1024*1024:void 0,mountId:s,signedFetch:r},u=a===`aem`?new Je(l):new We(l);if(!t.noProbe)try{await u.readDir(`/`)}catch(e){return await u.close(),{stdout:``,stderr:o+`mount: probe failed for ${l.source} — ${e instanceof Error?e.message:String(e)}\n`,exitCode:1}}return await this.options.fs.mount(e,u),{stdout:`Mounted '${u.describe().displayName}' → ${e} (profile: ${n})\n`,stderr:o,exitCode:0}}async handleUnmount(e,t,n){if(ks(e))return n===`umount`?this.umountHelp():this.help();let r=Es(e);if(r.positional.length===0)return{stdout:``,stderr:`${n}: path required\n`,exitCode:1};let i=this.resolvePath(r.positional[0],t);try{let e,t;if(r.clearCache){let{getAllMountEntries:n}=await import(`./mount-table-store-DrF_Ifaz.js`).then(e=>e.r),r=(await n()).find(e=>e.targetPath===i),a=r?.descriptor.kind;r&&(a===`s3`||a===`da`||a===`aem`)&&(e=r.descriptor.mountId,t=r.descriptor.kind)}await this.options.fs.unmount(i);let n=``;if(r.clearCache&&e&&t){let{RemoteMountCache:t}=await import(`./remote-cache-UwMD8EkX.js`).then(e=>e.n);await new t({mountId:e,ttlMs:3e4}).clearMount(),n=` (cache cleared)`}else r.clearCache&&(n=` (no remote cache to clear)`);return{stdout:`Unmounted ${i}${n}\n`,stderr:``,exitCode:0}}catch(e){return{stdout:``,stderr:`${n}: ${e instanceof Error?e.message:String(e)}\n`,exitCode:1}}}async handleList(){try{let e=this.options.fs.listMounts();if(e.length===0)return{stdout:`No active mounts
@@ -291,7 +291,7 @@ Examples:
291
291
  skill list
292
292
  skill info bluebubbles
293
293
  skill read bluebubbles
294
- `,stderr:``,exitCode:0};let r=t[0],i=await import(`./kernel-worker-CSRynihq.js`).then(e=>e.r);try{switch(r){case`list`:return Rh(t,e,i,n.env.get(`PATH`));case`info`:{let n=t[1];if(!n)return{stdout:``,stderr:`skill: info requires a skill name
294
+ `,stderr:``,exitCode:0};let r=t[0],i=await import(`./kernel-worker-Dt0qVVA4.js`).then(e=>e.r);try{switch(r){case`list`:return Rh(t,e,i,n.env.get(`PATH`));case`info`:{let n=t[1];if(!n)return{stdout:``,stderr:`skill: info requires a skill name
295
295
  `,exitCode:1};let r=await i.getSkillInfo(e,n);return r?{stdout:Ih(r),stderr:``,exitCode:0}:{stdout:``,stderr:`skill: "${n}" not found\n`,exitCode:1}}case`read`:{let n=t[1];if(!n)return{stdout:``,stderr:`skill: read requires a skill name
296
296
  `,exitCode:1};let r=await i.readSkillInstructions(e,n);return r===null?{stdout:``,stderr:`skill: no SKILL.md found for "${n}"\n`,exitCode:1}:{stdout:r+`
297
297
  `,stderr:``,exitCode:0}}default:return{stdout:``,stderr:`skill: unknown command "${r}"\n`,exitCode:1}}}catch(e){return{stdout:``,stderr:`skill: ${e instanceof Error?e.message:String(e)}\n`,exitCode:1}}})}const Bh=[{names:[`--branch`,`-b`],validate:e=>!e.startsWith(`-`)&&i(e),error:`upskill: --branch must be a git ref of [A-Za-z0-9._/-]+ with no "..", leading "-"/"/", trailing "/" or ".lock", or shell metacharacters`,apply:(e,t)=>{e.branch=t}},{names:[`--from`],validate:e=>Bi(e)!==null,error:`upskill: --from requires a GitHub source (owner/repo, owner/repo@branch, or a github.com URL)`,apply:(e,t)=>{e.from=t}},{names:[`--path`,`-p`],validate:e=>o(e),error:`upskill: --path must be a repo-relative sub-path of [A-Za-z0-9._/-]+ with no "..", leading "-"/"/", or shell metacharacters`,apply:(e,t)=>{e.path=t}}];function Vh(e){let t={skills:[],dryRun:!1,json:!1};for(let n=0;n<e.length;n++){let r=e[n],i=Bh.find(e=>e.names.includes(r));if(i){let r=e[++n];if(!r||!i.validate(r))return t.error=i.error,t;i.apply(t,r)}else if(r===`--dry-run`||r===`-n`)t.dryRun=!0;else if(r===`--json`)t.json=!0;else if(r.startsWith(`-`))return t.error=`upskill: unknown option "${r}" for update`,t;else t.skills.push(r)}return t}function Hh(e,t){return!e||!t||e.byteLength!==t.byteLength?!1:e.every((e,n)=>e===t[n])}async function Uh(e,t){try{let n=await e.readFile(t,{encoding:`binary`});return n instanceof Uint8Array?n:new TextEncoder().encode(String(n))}catch{return}}async function Wh(e,t,n,r){let i=await Uh(e,t);return Ei(n)?i?{status:`kept-local`,write:!1}:{status:`added`,write:!0}:i?Hh(i,r)?{status:`unchanged`,write:!1}:{status:`updated`,write:!0}:{status:`added`,write:!0}}async function Gh(e,t,n,r){let i={changes:[],writes:[],removals:[]};for(let[r,a]of n){let n=`${t}/${r}`,{status:o,write:s}=await Wh(e,n,r,a);i.changes.push({path:r,status:o}),s&&i.writes.push({path:n,content:a})}let a=new Set(r.files??[]);for(let r of await Di(e,t)){if(n.has(r))continue;let e=a.has(r);i.changes.push({path:r,status:e?`removed`:`kept-local`}),e&&i.removals.push(`${t}/${r}`)}return i.changes.sort((e,t)=>e.path.localeCompare(t.path)),i}async function Kh(e,t,n,r,i,a){let o={skill:n,source:`${r.kind}:${r.source}`,ref:i??r.ref,from:r.sha,outcome:`current`,changes:[]},[s,c]=r.source.split(`/`);if(!s||!c)return{...o,outcome:`error`,error:`unusable source "${r.source}"`};let l=(r.path??``).replace(/^\/|\/$/g,``),u=await Mi(t),d=await Pi(s,c,o.ref,u,!0,l||void 0);if(d&&r.sha===d&&await qh(e,n,r))return{...o,to:d,outcome:`current`,changes:[]};let f=await Jh(s,c,l,n,o.ref,t,u);if(`error`in f)return{...o,outcome:`error`,error:f.error};let p=f.files,m=f.path;if(p.size===0)return{...o,outcome:`error`,error:`no files at ${s}/${c}${m?`/${m}`:``} — the skill may have moved or been removed upstream`};let{changes:h,writes:g,removals:_}=await Gh(e,`${yi}/${n}`,p,r),v=g.length>0||_.length>0;if(a)return{...o,outcome:v?`updated`:`current`,changes:h};let ee=d??r.sha;return v&&await $h(e,{changes:h,writes:g,removals:_}),await Fi(e,n,{...r,ref:o.ref,path:m,sha:ee,files:[...p.keys()].sort()}),{...o,to:ee,outcome:v?`updated`:`current`,changes:h}}async function qh(e,t,n){if(!n.files?.length)return!1;for(let r of n.files)if(!await e.exists(`/workspace/skills/${t}/${r}`))return!1;return!0}async function Jh(e,t,n,r,i,a,o){let s=await ki(e,t,a,i??`main`);if(s.status===`ok`){let i=wi(s.files),a=n||Yh(i,r);return a===null?{error:`could not find "${r}/SKILL.md" in ${e}/${t} — pass --path <dir> to say where the skill lives`}:{files:Qh(i,a),path:a}}try{return{files:Zh(Xh(await Oi(e,t,n,i,o))),path:n}}catch(e){let t=e instanceof Error?e.message:String(e);return{error:`${s.message}; Contents API fallback failed: ${t}`}}}function Yh(e,t){let n=[];for(let r of Object.keys(e))r===`SKILL.md`?n.push(``):(r.endsWith(`/${t}/SKILL.md`)||r===`${t}/SKILL.md`)&&n.push(r.slice(0,-9));return n.length===0?null:(n.sort((e,t)=>e.split(`/`).length-t.split(`/`).length||e.localeCompare(t)),n[0])}function Xh(e){return new Map([...e].filter(([e])=>Ti(e)))}function Zh(e){return new Map([...e].sort(([e],[t])=>e.localeCompare(t)))}function Qh(e,t){let n=t?`${t}/`:``,r=new Map;for(let[t,i]of Object.entries(e)){if(!t.startsWith(n)||t.endsWith(`/`))continue;let e=t.slice(n.length);Ti(e)&&r.set(e,i)}return Zh(r)}async function $h(e,t){for(let n of t.writes){let t=n.path.slice(0,n.path.lastIndexOf(`/`));await e.mkdir(t,{recursive:!0}),await e.writeFile(n.path,n.content)}for(let n of t.removals)await e.rm(n).catch(()=>{})}async function eg(e,t,n,r,i){let a={skill:n,source:`${r.kind}:${r.source}`,outcome:`current`,changes:[]},[o,s]=r.source.split(`/`);if(!o||!s)return{...a,outcome:`error`,error:`unusable source "${r.source}"`};let c=await jh(o,s,t);if(!c.ok)return{...a,outcome:`error`,error:c.error};let l=`${yi}/${n}/SKILL.md`,u=await Uh(e,l),d=new TextEncoder().encode(c.content),f=u!==void 0&&kh(new TextDecoder().decode(u))===kh(c.content);if(Hh(u,d)||f)return{...a,changes:[{path:`SKILL.md`,status:`unchanged`}]};let p=u?`updated`:`added`;return i||(await e.mkdir(`${yi}/${n}`,{recursive:!0}),await e.writeFile(l,d),await Fi(e,n,{...r,files:[`SKILL.md`]})),{...a,outcome:`updated`,changes:[{path:`SKILL.md`,status:p}]}}function tg(e,t){if(e.outcome===`error`)return` ${e.skill}: failed — ${e.error}\n`;let n=new Map;for(let t of e.changes)n.set(t.status,(n.get(t.status)??0)+1);let r=e.to&&e.to!==e.from?` → ${e.to.slice(0,7)}`:``;if(e.outcome===`current`)return` ${e.skill}: already current (${e.source}${r})\n`;let i=t?`would update`:`updated`,a=` ${e.skill}: ${i} from ${e.source}${r}\n`;for(let t of e.changes)t.status!==`unchanged`&&(a+=` ${t.status.padEnd(10)} ${t.path}\n`);let o=n.get(`kept-local`)??0;return o>0&&(a+=` (${o} kept-local — dotfiles and local additions are never touched)\n`),a}function ng(e,t,n,r){let i=Bi(t);return i?{version:1,kind:`github`,source:`${i.owner}/${i.repo}`,skill:e,ref:r??i.branch,path:n??i.path,installed:new Date().toISOString()}:null}async function rg(e,t,n){if(t.length===0){let t=await Ni(e);return{targets:t.provenanced,missing:[],skipped:t.unattributed}}let r=[],i=[];for(let a of t){let t=await Ii(e,a);if(t){r.push({name:a,provenance:t});continue}if(!await e.exists(`/workspace/skills/${a}`)){i.push({name:a,reason:`not-installed`});continue}let o=n.from?ng(a,n.from,n.path,n.branch):null;o?r.push({name:a,provenance:o}):i.push({name:a,reason:`no-provenance`})}return{targets:r,missing:i,skipped:[]}}function ig(e){return e.reason===`not-installed`?`upskill: no skill named "${e.name}" is installed — check \`upskill list\`
@@ -302,7 +302,7 @@ Examples:
302
302
  `}function sg(e,t,n,r,i){let a=t?`Skill update (dry run — nothing written):
303
303
  `:`Skill update:
304
304
  `;for(let n of e)a+=tg(n,t);if(i.length>0&&(a+=og(i)),!n&&r&&e.length>0){let n=i.length>0?`all ${ag(e.length,`skill`)} with provenance ${e.length===1?`is`:`are`}`:`all skills are`;a+=t?`\n${n.charAt(0).toUpperCase()}${n.slice(1)} current.\n`:`\nNothing to update — ${n} current.\n`}return a}async function cg(e,t,n){let{targets:r,missing:i,skipped:a}=await rg(e,n.skills,{skills:n.skills,dryRun:n.dryRun,json:!1,branch:n.branch,from:n.from,path:n.path}),o=[];for(let i of r)o.push(i.provenance.kind===`browse.sh`?await eg(e,t,i.name,i.provenance,n.dryRun):await Kh(e,t,i.name,i.provenance,n.branch,n.dryRun));return{results:o,skipped:a,missing:i}}async function lg(e,t,n){let r=Vh(e);if(r.error)return{stdout:``,stderr:`${r.error}\n`,exitCode:1};let{results:i,missing:a,skipped:o}=await cg(t,n,r);if(i.length===0)return a.length===0&&o.length>0?{stdout:r.json?`${JSON.stringify({ok:!0,dryRun:r.dryRun,results:[],skipped:o})}\n`:sg([],r.dryRun,!1,!0,o),stderr:``,exitCode:0}:{stdout:``,stderr:a.length?a.map(ig).join(``):"upskill: no skill has install provenance yet — reinstall a skill, or run `upskill update <skill> --from <owner>/<repo>`, to record its source\n",exitCode:1};let s=i.filter(e=>e.outcome===`error`),c=i.some(e=>e.outcome===`updated`);c&&!r.dryRun&&await zi();let l=a.map(ig).join(``)+s.map(e=>`upskill: ${e.skill}: ${e.error}\n`).join(``),u=s.length===0&&a.length===0;return r.json?{stdout:`${JSON.stringify({ok:u,dryRun:r.dryRun,results:i,skipped:o})}\n`,stderr:l,exitCode:+!u}:{stdout:sg(i,r.dryRun,c,u,o),stderr:l,exitCode:+!u}}function ug(e){let t={outdated:!1,json:!1};for(let n of e)if(n===`--outdated`)t.outdated=!0;else if(n===`--json`)t.json=!0;else if(n.startsWith(`-`))return t.error=`upskill: unknown option "${n}" for list`,t;else return t.error=`upskill: unexpected argument "${n}" for list`,t;return t}function dg(e){return e.to&&e.from&&e.to!==e.from?` ${e.from.slice(0,7)} → ${e.to.slice(0,7)}`:e.to?` ${e.to.slice(0,7)}`:``}function fg(e,t){let n=e.filter(e=>e.outcome===`updated`),r=[];if(n.length===0)r.push(`No outdated skills.`);else{r.push(`Outdated skills:`,``);for(let e of n)r.push(` ${e.skill} ${e.source}${dg(e)}`)}if(t.length>0){let e=t.length===1?`skill`:`skills`;r.push(``,`Skipped ${t.length} ${e} with no install provenance — not checked.`)}let i=e.filter(e=>e.outcome===`error`);if(i.length>0){let e=i.length===1?`skill`:`skills`;r.push(``,`Could not check ${i.length} ${e}:`);for(let e of i)r.push(` ${e.skill}: failed — ${e.error}`)}return`${r.join(`
305
- `)}\n`}async function pg(e,t,n){let r=await(await import(`./kernel-worker-CSRynihq.js`).then(e=>e.r)).discoverSkills(e),{collisions:i}=await ar(e,nr(n));return t?{stdout:`${JSON.stringify({ok:!0,skills:r,commandCollisions:i})}\n`,stderr:``,exitCode:0}:r.length===0?{stdout:`No discoverable local skills found.\n\n${Nh()}`,stderr:``,exitCode:0}:{...or(`upskill`,Fh(r,`Discoverable local skills`),i,{builtinNames:new Set(it())}),exitCode:0}}async function mg(e,t,n){let{results:r,skipped:i}=await cg(e,t,{skills:[],dryRun:!0}),a=r.filter(e=>e.outcome===`updated`),o=r.filter(e=>e.outcome===`error`),s=o.length===0,c=o.map(e=>`upskill: ${e.skill}: ${e.error}\n`).join(``);return n?{stdout:`${JSON.stringify({ok:s,results:[...a,...o],skipped:i})}\n`,stderr:c,exitCode:+!s}:{stdout:fg(r,i),stderr:c,exitCode:+!s}}async function hg(e,t,n,r){let i=ug(e);return i.error?{stdout:``,stderr:`${i.error}\n`,exitCode:1}:i.outdated?mg(t,n,i.json):pg(t,i.json,r)}async function gg(e,t){let n=`${bi}/experimental/search?q=${encodeURIComponent(e)}&contentType=skills&page%5Bsize%5D=20`,r;try{r=await t(n,{headers:{Accept:`application/json`}})}catch(e){throw Error(ji(e,n))}if(r.status!==200)throw Error(`Tessl returned HTTP ${r.status}`);let i=ve(r.body);if(!i.data)return[];let a=new Map;for(let e of i.data){if(e.type!==`skill`)continue;let t=e.attributes,n=Ri(t.sourceUrl),r=n?`${n.owner}/${n.repo}`:void 0,i=t.scores.aggregate==null?null:Math.round(t.scores.aggregate*100),o=t.sourceUrl||e.id,s=a.get(o);if(s&&s.qualityScore!=null&&i!=null&&s.qualityScore>=i)continue;let c=t.path.replace(/\/SKILL\.md$/i,``),l=c.split(`/`).pop()||t.name,u=n?`upskill ${n.owner}/${n.repo} --path ${c.split(`/`).slice(0,-1).join(`/`)||`.`} --skill ${l}`:`upskill tessl:${t.name}`;a.set(o,{name:t.name,displayName:t.name,summary:t.description||``,source:`tessl`,qualityScore:i,installHint:u,featured:t.featured,sourceRepo:r})}return Array.from(a.values())}async function _g(e,t){let n=`${bi}/experimental/search?q=${encodeURIComponent(e)}&contentType=skills&page%5Bsize%5D=5`,r;try{r=await t(n,{headers:{Accept:`application/json`}})}catch(e){return{error:`Tessl search failed: ${ji(e,n)}`}}if(r.status!==200)return{error:`Tessl search failed (HTTP ${r.status})`};let i=ve(r.body).data?.find(t=>t.type===`skill`&&t.attributes.name===e);if(!i)return{error:`skill "${e}" not found on Tessl registry`};let a=Ri(i.attributes.sourceUrl);if(!a)return{error:`skill "${e}" has no GitHub source URL`};let o=i.attributes.path.replace(/\/SKILL\.md$/i,``);return{owner:a.owner,repo:a.repo,skillPath:o,skillName:e}}const vg=[{label:`Tessl`,host:new URL(bi).host,fetch:gg},{label:`browse.sh`,host:new URL(Ci).host,fetch:Ch}];function yg(e){let t=[],n=e.reduce((e,t)=>Math.max(e,t.length),0);for(let r=0;r<n;r++)for(let n of e)r<n.length&&t.push(n[r]);return t}async function bg(e,t,n=1){let r=await Promise.allSettled(vg.map(n=>n.fetch(e,t))),i=r.map(e=>e.status===`fulfilled`?e.value:[]),a=r.every(e=>e.status===`rejected`),o=yg(i),s=``;for(let e=0;e<r.length;e++){let t=r[e];if(t.status===`rejected`){let n=vg[e],r=t.reason instanceof Error?t.reason.message:String(t.reason);s+=`warning: ${n.label} registry unavailable (${n.host}): ${r}\n`}}if(o.length===0){let t=a?`${s}upskill: registries failed to respond\n`:s;return{stdout:`No skills found for "${e}"\n\nTry a different search term or browse the registries at https://tessl.io/registry or https://browse.sh\n`,stderr:t,exitCode:+!!a}}let c=o.length,l=Math.ceil(c/10),u=Math.max(1,Math.min(n,l)),d=(u-1)*10,f=o.slice(d,d+10),p=`Search results for "${e}" (page ${u}/${l}, ${c} total):\n\n`;for(let e of f){let t=e.qualityScore==null?` `:String(e.qualityScore).padStart(3),n=`[${e.source}]`,r=e.sourceRepo?` ${e.sourceRepo}`:``;p+=` ${e.name.padEnd(30)} ${t} ${n.padEnd(10)}${r}\n`,e.summary&&(p+=` ${e.summary}\n`),p+=`
305
+ `)}\n`}async function pg(e,t,n){let r=await(await import(`./kernel-worker-Dt0qVVA4.js`).then(e=>e.r)).discoverSkills(e),{collisions:i}=await ar(e,nr(n));return t?{stdout:`${JSON.stringify({ok:!0,skills:r,commandCollisions:i})}\n`,stderr:``,exitCode:0}:r.length===0?{stdout:`No discoverable local skills found.\n\n${Nh()}`,stderr:``,exitCode:0}:{...or(`upskill`,Fh(r,`Discoverable local skills`),i,{builtinNames:new Set(it())}),exitCode:0}}async function mg(e,t,n){let{results:r,skipped:i}=await cg(e,t,{skills:[],dryRun:!0}),a=r.filter(e=>e.outcome===`updated`),o=r.filter(e=>e.outcome===`error`),s=o.length===0,c=o.map(e=>`upskill: ${e.skill}: ${e.error}\n`).join(``);return n?{stdout:`${JSON.stringify({ok:s,results:[...a,...o],skipped:i})}\n`,stderr:c,exitCode:+!s}:{stdout:fg(r,i),stderr:c,exitCode:+!s}}async function hg(e,t,n,r){let i=ug(e);return i.error?{stdout:``,stderr:`${i.error}\n`,exitCode:1}:i.outdated?mg(t,n,i.json):pg(t,i.json,r)}async function gg(e,t){let n=`${bi}/experimental/search?q=${encodeURIComponent(e)}&contentType=skills&page%5Bsize%5D=20`,r;try{r=await t(n,{headers:{Accept:`application/json`}})}catch(e){throw Error(ji(e,n))}if(r.status!==200)throw Error(`Tessl returned HTTP ${r.status}`);let i=ve(r.body);if(!i.data)return[];let a=new Map;for(let e of i.data){if(e.type!==`skill`)continue;let t=e.attributes,n=Ri(t.sourceUrl),r=n?`${n.owner}/${n.repo}`:void 0,i=t.scores.aggregate==null?null:Math.round(t.scores.aggregate*100),o=t.sourceUrl||e.id,s=a.get(o);if(s&&s.qualityScore!=null&&i!=null&&s.qualityScore>=i)continue;let c=t.path.replace(/\/SKILL\.md$/i,``),l=c.split(`/`).pop()||t.name,u=n?`upskill ${n.owner}/${n.repo} --path ${c.split(`/`).slice(0,-1).join(`/`)||`.`} --skill ${l}`:`upskill tessl:${t.name}`;a.set(o,{name:t.name,displayName:t.name,summary:t.description||``,source:`tessl`,qualityScore:i,installHint:u,featured:t.featured,sourceRepo:r})}return Array.from(a.values())}async function _g(e,t){let n=`${bi}/experimental/search?q=${encodeURIComponent(e)}&contentType=skills&page%5Bsize%5D=5`,r;try{r=await t(n,{headers:{Accept:`application/json`}})}catch(e){return{error:`Tessl search failed: ${ji(e,n)}`}}if(r.status!==200)return{error:`Tessl search failed (HTTP ${r.status})`};let i=ve(r.body).data?.find(t=>t.type===`skill`&&t.attributes.name===e);if(!i)return{error:`skill "${e}" not found on Tessl registry`};let a=Ri(i.attributes.sourceUrl);if(!a)return{error:`skill "${e}" has no GitHub source URL`};let o=i.attributes.path.replace(/\/SKILL\.md$/i,``);return{owner:a.owner,repo:a.repo,skillPath:o,skillName:e}}const vg=[{label:`Tessl`,host:new URL(bi).host,fetch:gg},{label:`browse.sh`,host:new URL(Ci).host,fetch:Ch}];function yg(e){let t=[],n=e.reduce((e,t)=>Math.max(e,t.length),0);for(let r=0;r<n;r++)for(let n of e)r<n.length&&t.push(n[r]);return t}async function bg(e,t,n=1){let r=await Promise.allSettled(vg.map(n=>n.fetch(e,t))),i=r.map(e=>e.status===`fulfilled`?e.value:[]),a=r.every(e=>e.status===`rejected`),o=yg(i),s=``;for(let e=0;e<r.length;e++){let t=r[e];if(t.status===`rejected`){let n=vg[e],r=t.reason instanceof Error?t.reason.message:String(t.reason);s+=`warning: ${n.label} registry unavailable (${n.host}): ${r}\n`}}if(o.length===0){let t=a?`${s}upskill: registries failed to respond\n`:s;return{stdout:`No skills found for "${e}"\n\nTry a different search term or browse the registries at https://tessl.io/registry or https://browse.sh\n`,stderr:t,exitCode:+!!a}}let c=o.length,l=Math.ceil(c/10),u=Math.max(1,Math.min(n,l)),d=(u-1)*10,f=o.slice(d,d+10),p=`Search results for "${e}" (page ${u}/${l}, ${c} total):\n\n`;for(let e of f){let t=e.qualityScore==null?` `:String(e.qualityScore).padStart(3),n=`[${e.source}]`,r=e.sourceRepo?` ${e.sourceRepo}`:``;p+=` ${e.name.padEnd(30)} ${t} ${n.padEnd(10)}${r}\n`,e.summary&&(p+=` ${e.summary}\n`),p+=`
306
306
  `}return u<l&&(p+=`Showing ${d+1}-${d+f.length} of ${c}. `,p+=`Next page: upskill search ${e} --page ${u+1}\n\n`),p+=`To install:
307
307
  `,p+=` From Tessl: upskill <owner/repo> --skill <name>
308
308
  `,p+=` From browse.sh: upskill browse:<hostname>/<task>
@@ -325,7 +325,7 @@ Examples:
325
325
  `,{stdout:s,stderr:``,exitCode:0}}function Dg(e){return!e||e.startsWith(`-`)?{stdout:``,stderr:`upskill: --branch requires a value
326
326
  `,exitCode:1}:i(e)?null:{stdout:``,stderr:`upskill: --branch must be a git ref of [A-Za-z0-9._/-]+ with no "..", leading "-"/"/", trailing "/" or ".lock", or shell metacharacters
327
327
  `,exitCode:1}}function Og(e){let t={selectedSkills:[],listOnly:!1,installAll:!1,force:!1,sourceRef:``},n=0;for(;n<e.length;){let r=e[n];if(r===`--skill`)t.selectedSkills.push(e[++n]);else if(r===`--path`||r===`-p`){let r=e[++n];if(typeof r!=`string`||!o(r))return t.earlyReturn={stdout:``,stderr:`upskill: --path must be a repo-relative sub-path of [A-Za-z0-9._/-]+ with no "..", leading "-"/"/", or shell metacharacters
328
- `,exitCode:1},t;t.subPath=r}else if(r===`--list`)t.listOnly=!0;else if(r===`--all`)t.installAll=!0;else if(r===`--force`)t.force=!0;else if(r===`--branch`||r===`-b`){let r=Dg(e[n+1]);if(r)return t.earlyReturn=r,t;t.branch=e[++n]}else r.startsWith(`-`)||(t.sourceRef=r);n++}return t}async function kg(e,t,n){if(!t)return{stdout:``,stderr:`upskill: ${e} requires a skill name\n`,exitCode:1};let r=await import(`./kernel-worker-CSRynihq.js`).then(e=>e.r);if(e===`info`){let e=await r.getSkillInfo(n,t);if(!e)return{stdout:``,stderr:`upskill: skill "${t}" not found\n`,exitCode:1};let i=await Ii(n,t),a=i?Li(i):"Installed from: (no provenance recorded — reinstall to enable `upskill update`)\n";return{stdout:Ih(e)+a,stderr:``,exitCode:0}}let i=await r.readSkillInstructions(n,t);return i===null?{stdout:``,stderr:`upskill: no SKILL.md found for "${t}"\n`,exitCode:1}:{stdout:i+`
328
+ `,exitCode:1},t;t.subPath=r}else if(r===`--list`)t.listOnly=!0;else if(r===`--all`)t.installAll=!0;else if(r===`--force`)t.force=!0;else if(r===`--branch`||r===`-b`){let r=Dg(e[n+1]);if(r)return t.earlyReturn=r,t;t.branch=e[++n]}else r.startsWith(`-`)||(t.sourceRef=r);n++}return t}async function kg(e,t,n){if(!t)return{stdout:``,stderr:`upskill: ${e} requires a skill name\n`,exitCode:1};let r=await import(`./kernel-worker-Dt0qVVA4.js`).then(e=>e.r);if(e===`info`){let e=await r.getSkillInfo(n,t);if(!e)return{stdout:``,stderr:`upskill: skill "${t}" not found\n`,exitCode:1};let i=await Ii(n,t),a=i?Li(i):"Installed from: (no provenance recorded — reinstall to enable `upskill update`)\n";return{stdout:Ih(e)+a,stderr:``,exitCode:0}}let i=await r.readSkillInstructions(n,t);return i===null?{stdout:``,stderr:`upskill: no SKILL.md found for "${t}"\n`,exitCode:1}:{stdout:i+`
329
329
  `,stderr:``,exitCode:0}}async function Ag(e,t,n,r,i,a,o,s){let c=``,l=``,u=0,d=e.length;for(let f=0;f<e.length;f++){let p=e[f],m=await Hi(p.path,p.name,r,i,a,s?{...s,path:p.path}:void 0),h=f+1,g=((Date.now()-o)/1e3).toFixed(1),_=(Date.now()-o)/h,v=h<d?` (~${Math.round((d-h)*_/1e3)}s remaining)`:``;m.ok?(c+=`[${h}/${d}] Installed "${p.name}" from ${t}/${n} (${g}s)${v}\n`,u++):(c+=`[${h}/${d}] Failed "${p.name}": ${m.error}${v}\n`,l+=`upskill: ${m.error}\n`)}return{output:c,errors:l,successCount:u}}async function jg(e,t,n,r,i,a,o,s){let c=``,l=``,u=0,d=e.length;for(let f=0;f<e.length;f++){let p=e[f],m=await Vi(t,n,p.path,p.name,i,r,a,void 0,o),h=f+1,g=((Date.now()-s)/1e3).toFixed(1),_=(Date.now()-s)/h,v=h<d?` (~${Math.round((d-h)*_/1e3)}s remaining)`:``;m.exitCode===0?(c+=`[${h}/${d}] Installed "${p.name}" from ${t}/${n} (${g}s)${v}\n`,u++):(c+=`[${h}/${d}] Failed "${p.name}": ${m.stderr.trim()}${v}\n`,l+=m.stderr)}return{output:c,errors:l,successCount:u}}async function Mg(e,t,n,r,i,a,o,s){let c=``,l=``,u=0;for(let d of e){let e=await Vi(t,n,d.path,d.name,i,r,a,o,s);e.exitCode===0?(c+=e.stdout,u++):l+=e.stderr}return{output:c,errors:l,successCount:u}}function Ng(e,t,n){let r=`Available skills in ${t}/${n}:\n\n`;for(let t of e)r+=` ${t.name.padEnd(30)} ${t.path}\n`;return r+=`\nFound ${e.length} skill(s)\n`,r}async function Pg(e,t,n,r){let{owner:i,repo:a}=e,o=t.branch??e.branch,s=t.subPath??e.path,c=await Mi(r),l=await Ui(i,a,c,s,r,o);if(l.error)return{stdout:``,stderr:`upskill: failed to list skills: ${l.error}\n`,exitCode:1};if(l.skills.length===0)return{stdout:`No skills found in ${i}/${a}${s?`/`+s:``}\n`,stderr:``,exitCode:0};if(t.listOnly)return{stdout:Ng(l.skills,i,a)+`\nTo install: upskill ${t.sourceRef} --skill <name>\nTo install all: upskill ${t.sourceRef} --all\n`,stderr:``,exitCode:0};let u=l.skills;if(t.selectedSkills.length>0){u=l.skills.filter(e=>t.selectedSkills.includes(e.name));for(let e of t.selectedSkills)if(!l.skills.find(t=>t.name===e))return{stdout:``,stderr:`upskill: skill "${e}" not found in ${i}/${a}\n`,exitCode:1}}else if(!t.installAll)return{stdout:Ng(l.skills,i,a)+`\nTo install specific skills: upskill ${t.sourceRef} --skill <name>\nTo install all: upskill ${t.sourceRef} --all\n`,stderr:``,exitCode:0};let d=u.length,f=Date.now(),p=``,m=``,h=0;if(d>1){let e=await ki(i,a,r,o);if(e.status===`ok`){let r=await Pi(i,a,o,c,!0,s),l=await Ag(u,i,a,wi(e.files),n,t.force,f,{kind:`github`,source:`${i}/${a}`,ref:o,sha:r});({output:p,errors:m,successCount:h}=l)}else{let e=await jg(u,i,a,c,n,t.force,o,f);({output:p,errors:m,successCount:h}=e)}}else({output:p,errors:m,successCount:h}=await Mg(u,i,a,c,n,t.force,r,o));let g=((Date.now()-f)/1e3).toFixed(1);return h>0&&(p+=`\nInstalled ${h} skill(s)${d>1?` in ${g}s`:``}\n`,await zi()),{stdout:p,stderr:m,exitCode:+!!m}}async function Fg(e,t,n,r,i){switch(e[0]){case`tabs`:return Tg(t,n,r,e.includes(`--json`));case`recommendations`:return Eg(t,n,e.includes(`--install`));case`update`:case`upgrade`:return lg(e.slice(1),t,n);case`list`:return hg(e.slice(1),t,n,i);case`info`:case`read`:return kg(e[0],e[1],t);case`search`:return Lg(e,n);default:return null}}function Ig(e,t,n){return S(`upskill`,async(r,i)=>{if(r.length===0||r.includes(`--help`)||r.includes(`-h`))return Lh();let a=await Fg(r,e,t,n,i.env.get(`PATH`));if(a)return a;let o=Og(r);if(o.earlyReturn)return o.earlyReturn;if(!o.sourceRef)return Lh();if(o.sourceRef.startsWith(`tessl:`))return Rg(o.sourceRef,o.force,e,t);let s=Eh(o.sourceRef);if(s)return Mh(s.hostname,s.task,e,t,o.force);let c=Bi(o.sourceRef);return c?Pg(c,o,e,t):{stdout:``,stderr:`upskill: unrecognized source "${o.sourceRef}"\n\nExpected: owner/repo, tessl:<name>, or browse:<hostname>/<task>\n`,exitCode:1}})}async function Lg(e,t){let n=[...e.slice(1)],r=n.indexOf(`--page`),i=1;r>=0&&(i=parseInt(n[r+1],10)||1,n.splice(r,2));let a=n.join(` `);return a?bg(a,t,i):Lh()}async function Rg(e,t,n,r){let i=e.slice(6);if(!i)return{stdout:``,stderr:`upskill: tessl: requires a skill name
330
330
  `,exitCode:1};let a=await _g(i,r);if(`error`in a)return{stdout:``,stderr:`upskill: ${a.error}\n`,exitCode:1};let o=await Mi(r);return Vi(a.owner,a.repo,a.skillPath,a.skillName,n,o,t,r)}function zg(){return{stdout:`usage: afplay [-v volume] [-r rate] <file>
331
331
 
@@ -719,7 +719,7 @@ Examples:
719
719
  `;for(let n of e)t+=` ${n.id} ${n.name.padEnd(20)} ${n.cron.padEnd(15)}`,n.scoop&&(t+=` -> ${n.scoop}`),n.filter&&(t+=` [filtered]`),t+=` (${n.status})`,n.nextRun&&(t+=` next: ${new Date(n.nextRun).toLocaleString()}`),t+=`
720
720
  `;return t}async function Yy(e,t){let n=C(e.slice(1),{});if(`error`in n)return Ky(n.error);if(!t()){let e=await zy();if(!e)return Hy(`list`);let t=await e.listCronTasks();return t.length===0?{stdout:`No active cron tasks
721
721
  `,stderr:``,exitCode:0}:{stdout:Jy(t),stderr:``,exitCode:0}}let{ok:r,data:i}=await Wy(`GET`,``);if(!r)return{stdout:``,stderr:`crontask: failed to list: ${i.error??`unknown error`}\n`,exitCode:1};let a=i;return a.length===0?{stdout:`No active cron tasks
722
- `,stderr:``,exitCode:0}:{stdout:Jy(a),stderr:``,exitCode:0}}async function Xy(e,t){let n=e[0],r=C(e.slice(1),{});if(`error`in r)return Ky(r.error);let i=r.positionals[0];if(!i)return{stdout:``,stderr:`crontask: ${n} requires an ID\n`,exitCode:1};if(!t()){let e=await zy();return e?await e.deleteCronTask(i)?{stdout:`Deleted cron task "${i}"\n`,stderr:``,exitCode:0}:{stdout:``,stderr:`crontask: task "${i}" not found\n`,exitCode:1}:Hy(`delete`)}let{ok:a,status:o,data:s}=await Wy(`DELETE`,`/${i}`);return a?{stdout:`Deleted cron task "${i}"\n`,stderr:``,exitCode:0}:o===404?{stdout:``,stderr:`crontask: task "${i}" not found\n`,exitCode:1}:{stdout:``,stderr:`crontask: failed to delete: ${s.error??`unknown error`}\n`,exitCode:1}}function Zy(e={}){let t=e.hasLocalNodeServer??(()=>!1);return S(`crontask`,async(e,n)=>{let r=e[0];if(!r||w(e,{valueFlags:Gy}))return Uy();try{switch(r){case`create`:return await qy(e,n.env,t);case`list`:return await Yy(e,t);case`delete`:case`kill`:return await Xy(e,t);default:return{stdout:``,stderr:`crontask: unknown command "${r}"\n`,exitCode:1}}}catch(e){return{stdout:``,stderr:`crontask: ${e instanceof Error?e.message:String(e)}\n`,exitCode:1}}})}function Qy(e){return S(`curlwright`,async(t,n)=>{let{runCurlwright:r}=await import(`./run-DGl39wQp.js`);return r(e,t,n)})}function $y(e,t={}){if(!Number.isFinite(e)||e<0)return``;if(t.si){if(e<1e3)return`${Math.round(e)} B`;let t=[`kB`,`MB`,`GB`,`TB`],n=e/1e3,r=0;for(;n>=1e3&&r<t.length-1;)n/=1e3,r+=1;return`${n<10?n.toFixed(1):Math.round(n)} ${t[r]}`}if(e<1024)return Number.isInteger(e)?`${e} B`:e>=.1?`${e.toFixed(1)} B`:e>0?`${Math.max(.01,Number(e.toFixed(2)))} B`:`0 B`;let n=[`KB`,`MB`,`GB`,`TB`,`PB`],r=e,i=-1;for(;r>=1024&&i<n.length-1;)r/=1024,i+=1;return`${r.toFixed(1)} ${n[i]}`}function eb(e){return $y(e,{si:!1})}const tb=`slicc-fs`;async function nb(){try{let e=globalThis.indexedDB;if(!e)return!1;let t=e.databases;return typeof t!=`function`||(await t.call(e)).some(e=>e.name===tb)}catch{return!0}}async function rb(){let e=globalThis.indexedDB;return e?new Promise(t=>{let n;try{n=e.deleteDatabase(tb)}catch{t(`error`);return}n.onsuccess=()=>t(`deleted`),n.onerror=()=>t(`error`),n.onblocked=()=>t(`blocked`)}):`error`}async function ib(){if(!await nb())return{kind:`absent`,message:`legacy slicc-fs IDB not present — nothing to clean`};let e=await rb();return e===`deleted`?{kind:`deleted`,message:`legacy slicc-fs IDB deleted`}:e===`blocked`?{kind:`blocked`,message:`legacy slicc-fs IDB delete blocked by another connection — close other tabs and retry`}:{kind:`error`,message:`legacy slicc-fs IDB delete failed`}}function ab(){return`slicc-fs-cleanup — delete the legacy slicc-fs IndexedDB
722
+ `,stderr:``,exitCode:0}:{stdout:Jy(a),stderr:``,exitCode:0}}async function Xy(e,t){let n=e[0],r=C(e.slice(1),{});if(`error`in r)return Ky(r.error);let i=r.positionals[0];if(!i)return{stdout:``,stderr:`crontask: ${n} requires an ID\n`,exitCode:1};if(!t()){let e=await zy();return e?await e.deleteCronTask(i)?{stdout:`Deleted cron task "${i}"\n`,stderr:``,exitCode:0}:{stdout:``,stderr:`crontask: task "${i}" not found\n`,exitCode:1}:Hy(`delete`)}let{ok:a,status:o,data:s}=await Wy(`DELETE`,`/${i}`);return a?{stdout:`Deleted cron task "${i}"\n`,stderr:``,exitCode:0}:o===404?{stdout:``,stderr:`crontask: task "${i}" not found\n`,exitCode:1}:{stdout:``,stderr:`crontask: failed to delete: ${s.error??`unknown error`}\n`,exitCode:1}}function Zy(e={}){let t=e.hasLocalNodeServer??(()=>!1);return S(`crontask`,async(e,n)=>{let r=e[0];if(!r||w(e,{valueFlags:Gy}))return Uy();try{switch(r){case`create`:return await qy(e,n.env,t);case`list`:return await Yy(e,t);case`delete`:case`kill`:return await Xy(e,t);default:return{stdout:``,stderr:`crontask: unknown command "${r}"\n`,exitCode:1}}}catch(e){return{stdout:``,stderr:`crontask: ${e instanceof Error?e.message:String(e)}\n`,exitCode:1}}})}function Qy(e){return S(`curlwright`,async(t,n)=>{let{runCurlwright:r}=await import(`./run-DVSJbV2i.js`);return r(e,t,n)})}function $y(e,t={}){if(!Number.isFinite(e)||e<0)return``;if(t.si){if(e<1e3)return`${Math.round(e)} B`;let t=[`kB`,`MB`,`GB`,`TB`],n=e/1e3,r=0;for(;n>=1e3&&r<t.length-1;)n/=1e3,r+=1;return`${n<10?n.toFixed(1):Math.round(n)} ${t[r]}`}if(e<1024)return Number.isInteger(e)?`${e} B`:e>=.1?`${e.toFixed(1)} B`:e>0?`${Math.max(.01,Number(e.toFixed(2)))} B`:`0 B`;let n=[`KB`,`MB`,`GB`,`TB`,`PB`],r=e,i=-1;for(;r>=1024&&i<n.length-1;)r/=1024,i+=1;return`${r.toFixed(1)} ${n[i]}`}function eb(e){return $y(e,{si:!1})}const tb=`slicc-fs`;async function nb(){try{let e=globalThis.indexedDB;if(!e)return!1;let t=e.databases;return typeof t!=`function`||(await t.call(e)).some(e=>e.name===tb)}catch{return!0}}async function rb(){let e=globalThis.indexedDB;return e?new Promise(t=>{let n;try{n=e.deleteDatabase(tb)}catch{t(`error`);return}n.onsuccess=()=>t(`deleted`),n.onerror=()=>t(`error`),n.onblocked=()=>t(`blocked`)}):`error`}async function ib(){if(!await nb())return{kind:`absent`,message:`legacy slicc-fs IDB not present — nothing to clean`};let e=await rb();return e===`deleted`?{kind:`deleted`,message:`legacy slicc-fs IDB deleted`}:e===`blocked`?{kind:`blocked`,message:`legacy slicc-fs IDB delete blocked by another connection — close other tabs and retry`}:{kind:`error`,message:`legacy slicc-fs IDB delete failed`}}function ab(){return`slicc-fs-cleanup — delete the legacy slicc-fs IndexedDB
723
723
 
724
724
  Usage:
725
725
  slicc-fs-cleanup Delete the legacy slicc-fs IDB.
@@ -936,7 +936,7 @@ Options:
936
936
  --pattern <glob> File pattern to match, e.g. "*.md", "*.bsh" (required)
937
937
  --scoop <target> Scoop name, cone name, or folder. Omit for your own cone.
938
938
  --name <name> Human-readable name for the watcher
939
- `);switch(n){case`list`:return dC(e);case`delete`:return fC(e);case`create`:return await hC(e,t.env);default:return lC(`unknown command: ${n}`)}})}function _C(e){return S(`gelatiere`,async(t,n)=>{let{runGelatiere:r}=await import(`./run-DHBSR6nH.js`);return r(t,n,e)})}function vC(e={}){return S(`go`,async(t,n)=>{let{runGoCommand:r}=await import(`./go-driver-CYR67gv1.js`);return r(t,n,{processConfig:e.buildProcessConfig?.(n.env),terminal:e.terminal,gate:e.gate,commands:e.commands,gitIdentity:e.gitIdentity})})}function yC(){return{stdout:`usage: hear [-i file] [-l lang] [-T seconds] [-d deviceId] [--engine name]
939
+ `);switch(n){case`list`:return dC(e);case`delete`:return fC(e);case`create`:return await hC(e,t.env);default:return lC(`unknown command: ${n}`)}})}function _C(e){return S(`gelatiere`,async(t,n)=>{let{runGelatiere:r}=await import(`./run-CmnvjepF.js`);return r(t,n,e)})}function vC(e={}){return S(`go`,async(t,n)=>{let{runGoCommand:r}=await import(`./go-driver-CYR67gv1.js`);return r(t,n,{processConfig:e.buildProcessConfig?.(n.env),terminal:e.terminal,gate:e.gate,commands:e.commands,gitIdentity:e.gitIdentity})})}function yC(){return{stdout:`usage: hear [-i file] [-l lang] [-T seconds] [-d deviceId] [--engine name]
940
940
  hear --devices | --status | --warmup
941
941
 
942
942
  Speech recognition: listens on the microphone until you pause, then
@@ -1102,7 +1102,27 @@ Options:
1102
1102
  `,exitCode:1};let a=j(r);if(`error`in a)return{stdout:``,stderr:a.error,exitCode:1};let o=parseFloat(n[0]),s=parseFloat(n[1]);return isNaN(o)||isNaN(s)?{stdout:``,stderr:`x and y must be numbers
1103
1103
  `,exitCode:1}:(await i(a.targetId,async({sessionId:e,transport:t})=>{await t.send(`Input.dispatchMouseEvent`,{type:`mouseMoved`,x:o,y:s,button:`none`,modifiers:0},e)}),t.lastMousePosition.set(a.targetId,{x:o,y:s}),{stdout:`Mouse moved to (${o}, ${s})\n`,stderr:``,exitCode:0})},Pw=async({browser:e,state:t,positional:n,flags:r,onTab:i})=>{let a=j(r);if(`error`in a)return{stdout:``,stderr:a.error,exitCode:1};let o=Aw(n[0]);if(typeof o==`object`)return{stdout:``,stderr:o.error,exitCode:1};let s=t.lastMousePosition.get(a.targetId)??{x:0,y:0};return await i(a.targetId,async({sessionId:e,transport:t})=>{await t.send(`Input.dispatchMouseEvent`,{type:`mousePressed`,button:o,clickCount:1,x:s.x,y:s.y,modifiers:0},e)}),{stdout:`Mouse button ${o} pressed\n`,stderr:``,exitCode:0}},Fw=async({browser:e,state:t,positional:n,flags:r,onTab:i})=>{let a=j(r);if(`error`in a)return{stdout:``,stderr:a.error,exitCode:1};let o=Aw(n[0]);if(typeof o==`object`)return{stdout:``,stderr:o.error,exitCode:1};let s=t.lastMousePosition.get(a.targetId)??{x:0,y:0};return await i(a.targetId,async({sessionId:e,transport:t})=>{await t.send(`Input.dispatchMouseEvent`,{type:`mouseReleased`,button:o,clickCount:1,x:s.x,y:s.y,modifiers:0},e)}),{stdout:`Mouse button ${o} released\n`,stderr:``,exitCode:0}},Iw=async({browser:e,state:t,positional:n,flags:r,onTab:i})=>{if(n.length<2)return{stdout:``,stderr:`mousewheel requires <dx> <dy>
1104
1104
  `,exitCode:1};let a=j(r);if(`error`in a)return{stdout:``,stderr:a.error,exitCode:1};let o=parseFloat(n[0]),s=parseFloat(n[1]);if(isNaN(o)||isNaN(s))return{stdout:``,stderr:`dx and dy must be numbers
1105
- `,exitCode:1};let c=t.lastMousePosition.get(a.targetId)??{x:0,y:0};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}},Lw=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)
1105
+ `,exitCode:1};let c=t.lastMousePosition.get(a.targetId)??{x:0,y:0},l=``;return await i(a.targetId,async({sessionId:e,transport:t})=>{if((await t.send(`Runtime.evaluate`,{expression:`document.visibilityState`,returnByValue:!0},e)).result?.value===`hidden`){let n=await t.send(`Runtime.evaluate`,{expression:Lw(c.x,c.y,o,s),returnByValue:!0},e);if(n.exceptionDetails)throw Error(n.exceptionDetails.exception?.description??n.exceptionDetails.text??`Page scroll failed`);l=`note: the tab is in the background, so the wheel was applied as a page scroll
1106
+ `;return}await t.send(`Input.dispatchMouseEvent`,{type:`mouseWheel`,deltaX:o,deltaY:s,x:c.x,y:c.y,modifiers:0},e)}),{stdout:`Mouse wheel scrolled (dx=${o}, dy=${s})\n`,stderr:l,exitCode:0}};function Lw(e,t,n,r){return`(() => {
1107
+ const dx = ${JSON.stringify(n)}, dy = ${JSON.stringify(r)};
1108
+ const canScroll = (el) => {
1109
+ const style = getComputedStyle(el);
1110
+ const y = /(auto|scroll|overlay)/.test(style.overflowY) &&
1111
+ (dy > 0 ? el.scrollTop + el.clientHeight < el.scrollHeight : dy < 0 && el.scrollTop > 0);
1112
+ const x = /(auto|scroll|overlay)/.test(style.overflowX) &&
1113
+ (dx > 0 ? el.scrollLeft + el.clientWidth < el.scrollWidth : dx < 0 && el.scrollLeft > 0);
1114
+ return y || x;
1115
+ };
1116
+ let el = document.elementFromPoint(${JSON.stringify(e)}, ${JSON.stringify(t)});
1117
+ while (el && el !== document.body && el !== document.documentElement && !canScroll(el)) {
1118
+ el = el.parentElement;
1119
+ }
1120
+ const target = el && el !== document.body && el !== document.documentElement
1121
+ ? el
1122
+ : (document.scrollingElement || document.documentElement);
1123
+ target.scrollBy({ left: dx, top: dy, behavior: 'instant' });
1124
+ return true;
1125
+ })()`}const Rw=async({browser:e,fs:n,state:r,positional:i,flags:a,onTab:o})=>{if(i.length===0)return{stdout:``,stderr:`drop requires a ref (e.g. e5)
1106
1126
  `,exitCode:1};let s=j(a);if(`error`in s)return{stdout:``,stderr:s.error,exitCode:1};let c=i[0],l=a.path,u=a.data,d=[];if(l){let e=await kw(n,l),r=l.split(`/`).pop()??l;d.push({name:r,type:Mw(r),base64:t(e)})}let f=[];if(u){let e=u.indexOf(`=`);if(e===-1)return{stdout:``,stderr:`--data format must be "mime/type=value"
1107
1127
  `,exitCode:1};f.push({mimeType:u.slice(0,e),value:u.slice(e+1)})}return{stdout:await o(s.targetId,async({sessionId:e,transport:t})=>{let n=r.snapshots.get(s.targetId);if(!n)throw Error(`No snapshot available. Run "snapshot" first.`);let i=n.refToBackendNodeId.get(c);if(i){await t.send(`DOM.enable`,{},e);let n=await t.send(`DOM.resolveNode`,{backendNodeId:i},e),a=await t.send(`Runtime.callFunctionOn`,{objectId:n.object.objectId,functionDeclaration:`function(filesData, dataItems) {
1108
1128
  var dt = new DataTransfer();
@@ -1138,7 +1158,7 @@ Options:
1138
1158
  el.dispatchEvent(new DragEvent('drop', { bubbles: true, cancelable: true, dataTransfer: dt }));
1139
1159
  return true;
1140
1160
  })()`,h=await t.send(`Runtime.evaluate`,{expression:m,returnByValue:!0,awaitPromise:!1},e);if(h.exceptionDetails){let e=h.exceptionDetails.exception?.description??h.exceptionDetails.text??`Drop failed`;throw Error(e)}return r.snapshots.delete(s.targetId),`Dropped onto ${c}`})+`
1141
- `,stderr:``,exitCode:0}},Rw=e(`playwright-teleport`),zw={origin:``,localStorage:{},sessionStorage:{}};function Bw(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 Vw(e){return Object.keys(e.localStorage).length+Object.keys(e.sessionStorage).length}function Hw(e){if(!e)return null;try{return new URL(e).origin}catch{return null}}function Uw(e){try{return new URL(`/favicon.ico`,e).toString()}catch{return e}}function Ww(e,t,n){let r=Hw(t);if(t&&r===e)return t;let i=Hw(n);return n&&i===e?n:e||(t??n)}async function Gw(e,t){let n=await e.evaluate(`(() => {
1161
+ `,stderr:``,exitCode:0}},zw=e(`playwright-teleport`),Bw={origin:``,localStorage:{},sessionStorage:{}};function Vw(e){let t=new Map;for(let n of e){let e=n.domain??`unknown`;t.set(e,(t.get(e)??0)+1)}return[...t.entries()].sort((e,t)=>t[1]-e[1]).map(([e,t])=>`${t} ${e}`).join(`, `)}function Hw(e){return Object.keys(e.localStorage).length+Object.keys(e.sessionStorage).length}function Uw(e){if(!e)return null;try{return new URL(e).origin}catch{return null}}function Ww(e){try{return new URL(`/favicon.ico`,e).toString()}catch{return e}}function Gw(e,t,n){let r=Uw(t);if(t&&r===e)return t;let i=Uw(n);return n&&i===e?n:e||(t??n)}async function Kw(e,t){let n=await e.evaluate(`(() => {
1142
1162
  const collect = (storage) => {
1143
1163
  const items = {};
1144
1164
  for (let i = 0; i < storage.length; i++) {
@@ -1152,7 +1172,7 @@ Options:
1152
1172
  localStorage: collect(window.localStorage),
1153
1173
  sessionStorage: collect(window.sessionStorage),
1154
1174
  });
1155
- })()`);if(typeof n!=`string`||n.length===0)return Rw.warn(`Teleport storage capture returned non-string result`,{label:t,type:typeof n}),zw;try{let e=JSON.parse(n);return{origin:typeof e.origin==`string`?e.origin:``,localStorage:e.localStorage??{},sessionStorage:e.sessionStorage??{}}}catch(e){return Rw.warn(`Could not parse teleport storage snapshot`,{label:t,error:String(e)}),zw}}function Kw(e){return`(() => {
1175
+ })()`);if(typeof n!=`string`||n.length===0)return zw.warn(`Teleport storage capture returned non-string result`,{label:t,type:typeof n}),Bw;try{let e=JSON.parse(n);return{origin:typeof e.origin==`string`?e.origin:``,localStorage:e.localStorage??{},sessionStorage:e.sessionStorage??{}}}catch(e){return zw.warn(`Could not parse teleport storage snapshot`,{label:t,error:String(e)}),Bw}}function qw(e){return`(() => {
1156
1176
  const snapshot = ${JSON.stringify(e)};
1157
1177
  if (!snapshot.origin || window.location.origin !== snapshot.origin) return;
1158
1178
  const markerKey = '__slicc_teleport_storage_applied__:' + snapshot.origin;
@@ -1168,7 +1188,7 @@ Options:
1168
1188
  apply(window.localStorage, snapshot.localStorage || {});
1169
1189
  apply(window.sessionStorage, snapshot.sessionStorage || {});
1170
1190
  try { window.sessionStorage.setItem(markerKey, '1'); } catch {}
1171
- })();`}function qw(e){return`(() => {
1191
+ })();`}function Jw(e){return`(() => {
1172
1192
  const snapshot = ${JSON.stringify(e)};
1173
1193
  if (!snapshot.origin || globalThis.location.origin !== snapshot.origin) {
1174
1194
  throw new Error('Teleport storage origin mismatch');
@@ -1186,88 +1206,88 @@ Options:
1186
1206
  localStorageCount: Object.keys(snapshot.localStorage || {}).length,
1187
1207
  sessionStorageCount: Object.keys(snapshot.sessionStorage || {}).length,
1188
1208
  });
1189
- })();`}async function Jw(e,t,n){let r=Vw(t);if(r===0)return;let i=await e.evaluate(qw(t));Rw.info(`Applied teleport storage snapshot on current page`,{target:n,totalEntries:r,resultType:typeof i}),Rw.debug(`Applied teleport storage snapshot details`,{target:n,origin:t.origin||`(unknown)`,totalEntries:r,resultType:typeof i})}async function Yw(e,t,n){let r=Vw(t);if(r===0)return null;let i=await e.send(`Page.addScriptToEvaluateOnNewDocument`,{source:Kw(t)}),a=typeof i.identifier==`string`?i.identifier:null;return Rw.info(`Installed teleport storage init script`,{target:n,totalEntries:r,hasIdentifier:!!a}),Rw.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 Xw(e,t,n){if(t)try{await e.send(`Page.removeScriptToEvaluateOnNewDocument`,{identifier:t.identifier})}catch(e){Rw.warn(`Failed to remove teleport storage init script`,{target:n,error:String(e)})}}async function Zw(e){let t=await e.evaluate(`(() => JSON.stringify({
1209
+ })();`}async function Yw(e,t,n){let r=Hw(t);if(r===0)return;let i=await e.evaluate(Jw(t));zw.info(`Applied teleport storage snapshot on current page`,{target:n,totalEntries:r,resultType:typeof i}),zw.debug(`Applied teleport storage snapshot details`,{target:n,origin:t.origin||`(unknown)`,totalEntries:r,resultType:typeof i})}async function Xw(e,t,n){let r=Hw(t);if(r===0)return null;let i=await e.send(`Page.addScriptToEvaluateOnNewDocument`,{source:qw(t)}),a=typeof i.identifier==`string`?i.identifier:null;return zw.info(`Installed teleport storage init script`,{target:n,totalEntries:r,hasIdentifier:!!a}),zw.debug(`Installed teleport storage init script details`,{target:n,origin:t.origin||`(unknown)`,localStorageCount:Object.keys(t.localStorage).length,sessionStorageCount:Object.keys(t.sessionStorage).length,hasIdentifier:!!a}),a?{identifier:a,targetId:e.targetId}:null}async function Zw(e,t,n){if(t)try{await e.send(`Page.removeScriptToEvaluateOnNewDocument`,{identifier:t.identifier})}catch(e){zw.warn(`Failed to remove teleport storage init script`,{target:n,error:String(e)})}}async function Qw(e){let t=await e.evaluate(`(() => JSON.stringify({
1190
1210
  url: window.location.href,
1191
1211
  title: document.title || '',
1192
1212
  bodySnippet: document.body?.innerText?.replace(/\\s+/g, ' ').trim().slice(0, 500) || '(empty)',
1193
- }))()`);if(typeof t!=`string`||t.length===0)return{url:``,title:``,bodySnippet:`(unavailable)`};try{let e=JSON.parse(t);return{url:typeof e.url==`string`?e.url:``,title:typeof e.title==`string`?e.title:``,bodySnippet:typeof e.bodySnippet==`string`&&e.bodySnippet.length>0?e.bodySnippet:`(empty)`}}catch{return{url:``,title:``,bodySnippet:`(unparseable)`}}}function Qw(e){return/callback|authorize\/resume|error/i.test(e)}async function $w(e,t,n){try{let r=await Zw(e),i=`${n}:${r.url}:${r.title}`;if(t.lastFollowerDiagnosticKey===i)return;t.lastFollowerDiagnosticKey=i,Rw.debug(`Teleport follower diagnostics`,{reason:n,url:r.url,title:r.title,bodySnippet:r.bodySnippet})}catch(e){Rw.warn(`Could not capture teleport follower diagnostics`,{reason:n,error:String(e)})}}async function eT(e,t,n){let r=t.followerStorageScript;if(r){t.followerStorageScript=null;try{await e.withTab(r.targetId,e=>Xw(e,r,`follower`)),Rw.info(`Removed follower teleport storage init script`,{reason:n})}catch(e){Rw.warn(`Failed to remove follower teleport storage init script`,{reason:n,error:String(e)})}}}function tT(e){return Array.isArray(e)?e:[]}const H=e(`playwright-teleport`);let nT=null,rT=null;function iT(e){nT=e}function aT(e){rT=e}function oT(){return rT?.()??null}async function sT(e,t){if(H.warn(`Teleport timed out`,{timeoutMs:t.timeoutMs,phase:t.phase}),H.debug(`Teleport timeout details`,{timeoutMs:t.timeoutMs,phase:t.phase,followerTargetId:t.followerTargetId}),t.phase=`timedOut`,t.followerTargetId){try{await e.withTab(t.followerTargetId,e=>$w(e,t,`timeout`))}catch(e){H.warn(`Could not attach to follower for timeout diagnostics`,{error:String(e)})}await eT(e,t,`timeout`)}if(cT(t),t.followerTargetId)try{await e.closePage(t.followerTargetId)}catch(e){H.warn(`Failed to close follower tab after timeout`,{error:String(e)})}t.rejectBlock?.(Error(`Teleport timed out after ${Math.round(t.timeoutMs/1e3)}s — human did not complete auth`))}function cT(e){H.info(`Cleaning up teleport watcher`,{phase:e.phase,hadPoll:!!e.pollInterval,hadTimeout:!!e.timeoutTimer,hadListener:!!e.cleanupListener}),e.pollInterval&&=(clearInterval(e.pollInterval),void 0),e.timeoutTimer&&=(clearTimeout(e.timeoutTimer),void 0),e.cleanupListener&&=(e.cleanupListener(),void 0)}function lT(e,t,n,r,i,a,o,s){if(a===`preview`)throw Error(`cannot teleport to a preview target (no Network.*)`);H.info(`Arming teleport watcher`,{timeoutMs:i,runtimeSelection:a?`explicit`:`auto`}),H.debug(`Arming teleport watcher details`,{startPattern:n.source,returnPattern:r.source,timeoutMs:i,runtimeId:a??`auto`,originalUrl:o});let c={startPattern:n,returnPattern:r,timeoutMs:i,runtimeId:a,phase:`armed`,leaderTargetId:s,originalLeaderUrl:o};return c.completionPromise=new Promise((e,t)=>{c.resolveBlock=e,c.rejectBlock=t}),c.completionPromise.catch(()=>{}),c.pollInterval=setInterval(()=>{(async()=>{if(c.phase!==`armed`)return;let r=c.leaderTargetId;if(r)try{let i=await e.withTab(r,e=>e.evaluate(`window.location.href`)),a=typeof i==`string`?i:String(i);H.debug(`Polling leader tab URL`,{targetId:r,href:a,startPattern:n.source}),n.test(a)&&(H.info(`Teleport start pattern matched on leader`),H.debug(`Teleport start pattern matched on leader details`,{targetId:r,href:a,startPattern:n.source}),dT(e,t,c,a).catch(e=>{H.error(`Unhandled teleport trigger error`,{error:String(e)})}))}catch(e){H.warn(`Error polling leader tab URL`,{targetId:r,error:String(e)})}})().catch(e=>{H.warn(`Leader teleport poll failed`,{error:String(e)})})},1e3),s&&t.teleportWatchers.set(s,c),c}async function uT(e,t,n,r,i){if(n.phase===`waitingForAuth`||n.phase===`waitingForReturn`)try{let a=await e.withTab(r,e=>e.evaluate(`window.location.href`)),o=typeof a==`string`?a:String(a);if(!o)return;if(n.lastFollowerUrl!==o&&(n.lastFollowerUrl=o,H.debug(`Follower teleport navigation`,{href:o,phase:n.phase})),n.phase===`waitingForAuth`){n.startPattern.test(o)?(n.phase=`waitingForReturn`,H.info(`Follower reached auth provider; waiting for return pattern`),H.debug(`Follower reached auth provider details`,{href:o,startPattern:n.startPattern.source})):H.debug(`Waiting for auth redirect on follower`,{href:o,startPattern:n.startPattern.source});return}H.debug(`Polling follower tab URL for return`,{href:o,returnPattern:n.returnPattern.source}),Qw(o)&&await e.withTab(r,e=>$w(e,n,`waiting-for-return`)),n.returnPattern.test(o)&&(H.info(`Follower return pattern matched after auth`),H.debug(`Follower return pattern matched after auth details`,{href:o,returnPattern:n.returnPattern.source}),gT(e,t,n,i).catch(e=>{H.error(`Unhandled teleport capture error`,{error:String(e)})}))}catch(e){H.warn(`Error polling follower tab URL`,{error:String(e)})}}async function dT(e,t,n,r){if(n.phase===`armed`){n.phase=`teleporting`,H.info(`Teleport triggered`),H.debug(`Teleport trigger details`,{triggerUrl:r}),n.pollInterval&&=(clearInterval(n.pollInterval),void 0);try{let i=n.leaderTargetId;if(!i)throw Error(`teleport has no leader tab to capture from`);let a=[],o=zw;try{a=tT((await e.withTab(i,e=>e.send(`Network.getCookies`,{}))).cookies),H.info(`Captured leader cookies for follower`,{count:a.length})}catch(e){H.warn(`Could not capture leader cookies`,{error:String(e)})}try{o=await e.withTab(i,e=>Gw(e,`leader`)),H.info(`Captured leader storage for follower`,{totalEntries:Vw(o),localStorageCount:Object.keys(o.localStorage).length,sessionStorageCount:Object.keys(o.sessionStorage).length}),H.debug(`Captured leader storage for follower details`,{origin:o.origin||`(unknown)`,localStorageCount:Object.keys(o.localStorage).length,sessionStorageCount:Object.keys(o.sessionStorage).length})}catch(e){H.warn(`Could not capture leader storage`,{error:String(e)})}let s=n.runtimeId;if(!s){let e=nT?.();if(!e)throw Error(`No follower selection available — not connected to a tray`);let t=e();if(!t)throw Error(`No followers connected to teleport to`);s=t.runtimeId}H.info(`Selected follower for teleport`),H.debug(`Selected follower for teleport details`,{runtimeId:s});let c=await e.createRemotePage(s,`about:blank`),l=c.includes(`:`)?c:`${s}:${c}`;n.followerTargetId=l,H.info(`Opened follower tab for teleport`),H.debug(`Opened follower tab for teleport details`,{followerTargetId:l});let u=r;await e.withTab(l,async e=>{if(await e.send(`Page.enable`),a.length>0)try{await e.send(`Network.setCookies`,{cookies:a}),H.info(`Injected leader cookies into follower`,{count:a.length})}catch(e){H.warn(`Could not inject leader cookies into follower`,{error:String(e)})}n.followerStorageScript=await Yw(e,o,`follower`),H.info(`Navigating follower to intercepted auth URL`),H.debug(`Navigating follower to intercepted auth URL details`,{url:u,originalLeaderUrl:n.originalLeaderUrl,triggerUrl:r,storageOrigin:o.origin||`(unknown)`}),await e.send(`Page.navigate`,{url:u})}),H.info(`Starting teleport timeout timer`,{timeoutMs:n.timeoutMs}),n.timeoutTimer=setTimeout(()=>{(n.phase===`teleporting`||n.phase===`waitingForAuth`||n.phase===`waitingForReturn`)&&sT(e,n).catch(e=>{H.error(`Teleport timeout handler failed`,{error:String(e)})})},n.timeoutMs),n.phase=`waitingForAuth`,H.info(`Teleport waiting for follower auth redirect`),H.debug(`Teleport waiting for follower auth redirect details`,{startPattern:n.startPattern.source}),n.pollInterval=setInterval(()=>{uT(e,t,n,l,s).catch(e=>{H.warn(`Follower teleport poll failed`,{error:String(e)})})},1e3)}catch(t){H.error(`Teleport trigger failed`,{error:String(t)}),await eT(e,n,`trigger-error`),n.phase=`done`,cT(n),n.rejectBlock?.(t instanceof Error?t:Error(String(t)))}}}async function fT(e,t){H.info(`Waiting for redirect chain to settle (2s)`),await new Promise(e=>setTimeout(e,2e3));let n=t.followerTargetId,r=t.followerStorageScript??null;t.followerStorageScript=null;let{cookies:i,followerStorage:a,finalUrl:o}=await e.withTab(n,async e=>{let n;try{let t=await e.evaluate(`window.location.href`);n=typeof t==`string`?t:String(t),H.debug(`Captured final URL from follower`,{finalUrl:n})}catch(e){H.warn(`Could not read follower URL (may be mid-navigation)`,{error:String(e)})}try{let t=await e.evaluate(`document.body?.innerText?.substring(0, 500) || "(empty)"`);H.debug(`Follower page content at capture time`,{bodyText:t})}catch(e){H.warn(`Could not read follower page content`,{error:String(e)})}let i=tT((await e.send(`Network.getCookies`)).cookies),a=i.length>0?Bw(i):`none`;H.info(`Captured cookies from follower`,{count:i.length}),H.debug(`Captured cookies from follower details`,{count:i.length,domains:a});let o=zw;try{o=await Gw(e,`follower`),H.info(`Captured follower storage for leader`,{totalEntries:Vw(o),localStorageCount:Object.keys(o.localStorage).length,sessionStorageCount:Object.keys(o.sessionStorage).length}),H.debug(`Captured follower storage for leader details`,{origin:o.origin||`(unknown)`,localStorageCount:Object.keys(o.localStorage).length,sessionStorageCount:Object.keys(o.sessionStorage).length})}catch(e){H.warn(`Could not capture follower storage`,{error:String(e)})}return await $w(e,t,`capture`),await Xw(e,r,`follower`),{cookies:i,followerStorage:o,finalUrl:n}});try{await e.closePage(t.followerTargetId),H.info(`Closed follower tab after teleport`),H.debug(`Closed follower tab after teleport details`,{followerTargetId:t.followerTargetId})}catch(e){H.warn(`Failed to close follower tab`,{error:String(e)})}return{cookies:i,followerStorage:a,finalUrl:o}}async function pT(e,t,n,r){try{await e.navigate(n),await Jw(e,t,`leader`),r&&r!==n&&await e.navigate(r)}catch(i){H.warn(`Direct leader origin hydration failed, falling back to init-script replay`,{error:String(i)}),H.debug(`Direct leader origin hydration fallback details`,{hydrationUrl:n,landingUrl:r,error:String(i)});let a=await Yw(e,t,`leader`);try{r&&await e.navigate(r)}finally{await Xw(e,a,`leader`)}}}async function mT(e,t,n,r,i){let a=e.targetId,o=await Yw(e,n,`leader`);try{r&&(H.info(`Navigating leader after auth-state injection`,{hasLandingUrl:!0,storageEntries:Vw(n)}),H.debug(`Navigating leader after auth-state injection details`,{landingUrl:r,originalLeaderUrl:t.originalLeaderUrl,finalUrl:i,leaderTargetId:a,storageOrigin:n.origin||`(unknown)`,storageEntries:Vw(n)}),await e.navigate(r))}finally{await Xw(e,o,`leader`)}}async function hT(e,t,n,r,i){let a=t.leaderTargetId,o=r.origin||``,s=Ww(o,t.originalLeaderUrl,i),c=Hw(t.originalLeaderUrl),l=!!o&&c!==o,u=l?Uw(o):null;return a?(await e.withTab(a,async e=>{n.length>0&&(await e.send(`Network.setCookies`,{cookies:n}),H.info(`Injected cookies into leader tab`,{count:n.length}),H.debug(`Injected cookies into leader tab details`,{count:n.length,leaderTargetId:a})),l&&u?(H.info(`Hydrating leader storage origin before landing`,{storageEntries:Vw(r)}),H.debug(`Hydrating leader storage origin before landing details`,{hydrationUrl:u,landingUrl:s,originalLeaderUrl:t.originalLeaderUrl,finalUrl:i,leaderTargetId:a,storageOrigin:o,storageEntries:Vw(r)}),await pT(e,r,u,s)):await mT(e,t,r,s,i)}),s):(H.warn(`No leader tab available for auth-state injection`),s)}async function gT(e,t,n,r){if(n.phase===`teleporting`||n.phase===`waitingForReturn`){n.phase=`capturing`,H.info(`Capturing auth state from follower`),H.debug(`Capturing auth state from follower details`,{followerTargetId:n.followerTargetId,runtimeId:r}),n.pollInterval&&=(clearInterval(n.pollInterval),void 0),n.timeoutTimer&&=(clearTimeout(n.timeoutTimer),void 0);try{let{cookies:t,followerStorage:i,finalUrl:a}=await fT(e,n),o=Vw(i),s=await hT(e,n,t,i,a);n.phase=`done`,cT(n);let c=t.length>0?` (${Bw(t)})`:``,l=o>0?` + ${o} storage entr${o===1?`y`:`ies`}`:``,u=s?` (navigated to ${s})`:``,d=`Teleported ${t.length} cookie(s)${c}${l} from ${r}${u}`;H.info(`Teleport completed successfully`,{cookieCount:t.length,storageEntries:o,landed:!!s}),H.debug(`Teleport completed successfully details`,{result:d}),n.resolveBlock?.(d)}catch(t){H.error(`Teleport auth-state capture failed`,{error:String(t)}),await eT(e,n,`capture-error`),n.phase=`done`,cT(n),n.rejectBlock?.(t instanceof Error?t:Error(String(t)))}}}const _T=e(`playwright`),vT=async({browser:e,fs:t,state:n,positional:r,flags:i,onTab:a})=>{if(r.length===0)return{stdout:``,stderr:`goto requires a URL
1194
- `,exitCode:1};let o=j(i);if(`error`in o)return{stdout:``,stderr:o.error,exitCode:1};await a(o.targetId,e=>e.navigate(r[0])),n.snapshots.delete(o.targetId);let s=i[`teleport-start`],c=i[`teleport-return`];if(s&&c){_T.info(`Arming teleport via goto/navigate flags`),_T.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&&(cT(u),n.teleportWatchers.delete(o.targetId)),lT(e,n,t,a,l*1e3,i[`teleport-runtime`],r[0],o.targetId)}if(i.discover===`true`){let{browseShWarning:e,...n}=await uw(r[0],{discover:!0,fs:t}),i={action:`navigate`,targetId:o.targetId,source:`auxiliary-fetch`,...n};return{stdout:JSON.stringify(i,null,2)+`
1195
- `,stderr:e?`${e}\n`:``,exitCode:0}}return{stdout:`Navigated to ${r[0]}\n`,stderr:``,exitCode:0}},yT=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
1196
- `,stderr:``,exitCode:0})},bT=async({browser:e,state:t,flags:n,onTab:r})=>{let i=j(n);return`error`in i?{stdout:``,stderr:i.error,exitCode:1}:(await r(i.targetId,async e=>{await e.evaluate(`history.forward()`)}),t.snapshots.delete(i.targetId),{stdout:`Navigated forward
1197
- `,stderr:``,exitCode:0})},xT=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
1198
- `,stderr:``,exitCode:0})},ST=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"
1199
- `,exitCode:1}:(await r(i.targetId,async({sessionId:e,transport:t})=>{await t.send(`Network.enable`,{},e),await t.send(`Network.emulateNetworkConditions`,{offline:a===`offline`,latency:0,downloadThroughput:-1,uploadThroughput:-1},e)}),{stdout:`Network set to ${a}\n`,stderr:``,exitCode:0})},CT=[`image/`,`font/`,`text/css`,`application/javascript`,`text/javascript`];function wT(e,t){if(e&&CT.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 TT(e,t,n,r,i){if(t.networkCleanup.has(r))return;t.networkRequests.set(r,[]),t.networkRequestIndex.set(r,new Map);let a=1,o=IC({browser:e,targetId:r,transport:n,sessionId:i,listeners:[[`Network.requestWillBeSent`,e=>{let n=e;if(n.sessionId!==o.sessionId)return;let i=n.requestId,s=n.request;if(!i||!s)return;let c=t.networkRequests.get(r),l=t.networkRequestIndex.get(r);if(!c||!l)return;let u=s.url??``,d={index:a++,requestId:i,method:s.method??`GET`,url:u,requestHeaders:s.headers??{},requestBody:s.postData==null?null:String(s.postData),status:null,responseHeaders:null,responseBody:null,responseBodyBase64:!1,mimeType:null,isStatic:wT(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=wT(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 ET(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 DT(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=ET(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 OT(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 kT=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),TT(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
1213
+ }))()`);if(typeof t!=`string`||t.length===0)return{url:``,title:``,bodySnippet:`(unavailable)`};try{let e=JSON.parse(t);return{url:typeof e.url==`string`?e.url:``,title:typeof e.title==`string`?e.title:``,bodySnippet:typeof e.bodySnippet==`string`&&e.bodySnippet.length>0?e.bodySnippet:`(empty)`}}catch{return{url:``,title:``,bodySnippet:`(unparseable)`}}}function $w(e){return/callback|authorize\/resume|error/i.test(e)}async function eT(e,t,n){try{let r=await Qw(e),i=`${n}:${r.url}:${r.title}`;if(t.lastFollowerDiagnosticKey===i)return;t.lastFollowerDiagnosticKey=i,zw.debug(`Teleport follower diagnostics`,{reason:n,url:r.url,title:r.title,bodySnippet:r.bodySnippet})}catch(e){zw.warn(`Could not capture teleport follower diagnostics`,{reason:n,error:String(e)})}}async function tT(e,t,n){let r=t.followerStorageScript;if(r){t.followerStorageScript=null;try{await e.withTab(r.targetId,e=>Zw(e,r,`follower`)),zw.info(`Removed follower teleport storage init script`,{reason:n})}catch(e){zw.warn(`Failed to remove follower teleport storage init script`,{reason:n,error:String(e)})}}}function nT(e){return Array.isArray(e)?e:[]}const H=e(`playwright-teleport`);let rT=null,iT=null;function aT(e){rT=e}function oT(e){iT=e}function sT(){return iT?.()??null}async function cT(e,t){if(H.warn(`Teleport timed out`,{timeoutMs:t.timeoutMs,phase:t.phase}),H.debug(`Teleport timeout details`,{timeoutMs:t.timeoutMs,phase:t.phase,followerTargetId:t.followerTargetId}),t.phase=`timedOut`,t.followerTargetId){try{await e.withTab(t.followerTargetId,e=>eT(e,t,`timeout`))}catch(e){H.warn(`Could not attach to follower for timeout diagnostics`,{error:String(e)})}await tT(e,t,`timeout`)}if(lT(t),t.followerTargetId)try{await e.closePage(t.followerTargetId)}catch(e){H.warn(`Failed to close follower tab after timeout`,{error:String(e)})}t.rejectBlock?.(Error(`Teleport timed out after ${Math.round(t.timeoutMs/1e3)}s — human did not complete auth`))}function lT(e){H.info(`Cleaning up teleport watcher`,{phase:e.phase,hadPoll:!!e.pollInterval,hadTimeout:!!e.timeoutTimer,hadListener:!!e.cleanupListener}),e.pollInterval&&=(clearInterval(e.pollInterval),void 0),e.timeoutTimer&&=(clearTimeout(e.timeoutTimer),void 0),e.cleanupListener&&=(e.cleanupListener(),void 0)}function uT(e,t,n,r,i,a,o,s){if(a===`preview`)throw Error(`cannot teleport to a preview target (no Network.*)`);H.info(`Arming teleport watcher`,{timeoutMs:i,runtimeSelection:a?`explicit`:`auto`}),H.debug(`Arming teleport watcher details`,{startPattern:n.source,returnPattern:r.source,timeoutMs:i,runtimeId:a??`auto`,originalUrl:o});let c={startPattern:n,returnPattern:r,timeoutMs:i,runtimeId:a,phase:`armed`,leaderTargetId:s,originalLeaderUrl:o};return c.completionPromise=new Promise((e,t)=>{c.resolveBlock=e,c.rejectBlock=t}),c.completionPromise.catch(()=>{}),c.pollInterval=setInterval(()=>{(async()=>{if(c.phase!==`armed`)return;let r=c.leaderTargetId;if(r)try{let i=await e.withTab(r,e=>e.evaluate(`window.location.href`)),a=typeof i==`string`?i:String(i);H.debug(`Polling leader tab URL`,{targetId:r,href:a,startPattern:n.source}),n.test(a)&&(H.info(`Teleport start pattern matched on leader`),H.debug(`Teleport start pattern matched on leader details`,{targetId:r,href:a,startPattern:n.source}),fT(e,t,c,a).catch(e=>{H.error(`Unhandled teleport trigger error`,{error:String(e)})}))}catch(e){H.warn(`Error polling leader tab URL`,{targetId:r,error:String(e)})}})().catch(e=>{H.warn(`Leader teleport poll failed`,{error:String(e)})})},1e3),s&&t.teleportWatchers.set(s,c),c}async function dT(e,t,n,r,i){if(n.phase===`waitingForAuth`||n.phase===`waitingForReturn`)try{let a=await e.withTab(r,e=>e.evaluate(`window.location.href`)),o=typeof a==`string`?a:String(a);if(!o)return;if(n.lastFollowerUrl!==o&&(n.lastFollowerUrl=o,H.debug(`Follower teleport navigation`,{href:o,phase:n.phase})),n.phase===`waitingForAuth`){n.startPattern.test(o)?(n.phase=`waitingForReturn`,H.info(`Follower reached auth provider; waiting for return pattern`),H.debug(`Follower reached auth provider details`,{href:o,startPattern:n.startPattern.source})):H.debug(`Waiting for auth redirect on follower`,{href:o,startPattern:n.startPattern.source});return}H.debug(`Polling follower tab URL for return`,{href:o,returnPattern:n.returnPattern.source}),$w(o)&&await e.withTab(r,e=>eT(e,n,`waiting-for-return`)),n.returnPattern.test(o)&&(H.info(`Follower return pattern matched after auth`),H.debug(`Follower return pattern matched after auth details`,{href:o,returnPattern:n.returnPattern.source}),_T(e,t,n,i).catch(e=>{H.error(`Unhandled teleport capture error`,{error:String(e)})}))}catch(e){H.warn(`Error polling follower tab URL`,{error:String(e)})}}async function fT(e,t,n,r){if(n.phase===`armed`){n.phase=`teleporting`,H.info(`Teleport triggered`),H.debug(`Teleport trigger details`,{triggerUrl:r}),n.pollInterval&&=(clearInterval(n.pollInterval),void 0);try{let i=n.leaderTargetId;if(!i)throw Error(`teleport has no leader tab to capture from`);let a=[],o=Bw;try{a=nT((await e.withTab(i,e=>e.send(`Network.getCookies`,{}))).cookies),H.info(`Captured leader cookies for follower`,{count:a.length})}catch(e){H.warn(`Could not capture leader cookies`,{error:String(e)})}try{o=await e.withTab(i,e=>Kw(e,`leader`)),H.info(`Captured leader storage for follower`,{totalEntries:Hw(o),localStorageCount:Object.keys(o.localStorage).length,sessionStorageCount:Object.keys(o.sessionStorage).length}),H.debug(`Captured leader storage for follower details`,{origin:o.origin||`(unknown)`,localStorageCount:Object.keys(o.localStorage).length,sessionStorageCount:Object.keys(o.sessionStorage).length})}catch(e){H.warn(`Could not capture leader storage`,{error:String(e)})}let s=n.runtimeId;if(!s){let e=rT?.();if(!e)throw Error(`No follower selection available — not connected to a tray`);let t=e();if(!t)throw Error(`No followers connected to teleport to`);s=t.runtimeId}H.info(`Selected follower for teleport`),H.debug(`Selected follower for teleport details`,{runtimeId:s});let c=await e.createRemotePage(s,`about:blank`),l=c.includes(`:`)?c:`${s}:${c}`;n.followerTargetId=l,H.info(`Opened follower tab for teleport`),H.debug(`Opened follower tab for teleport details`,{followerTargetId:l});let u=r;await e.withTab(l,async e=>{if(await e.send(`Page.enable`),a.length>0)try{await e.send(`Network.setCookies`,{cookies:a}),H.info(`Injected leader cookies into follower`,{count:a.length})}catch(e){H.warn(`Could not inject leader cookies into follower`,{error:String(e)})}n.followerStorageScript=await Xw(e,o,`follower`),H.info(`Navigating follower to intercepted auth URL`),H.debug(`Navigating follower to intercepted auth URL details`,{url:u,originalLeaderUrl:n.originalLeaderUrl,triggerUrl:r,storageOrigin:o.origin||`(unknown)`}),await e.send(`Page.navigate`,{url:u})}),H.info(`Starting teleport timeout timer`,{timeoutMs:n.timeoutMs}),n.timeoutTimer=setTimeout(()=>{(n.phase===`teleporting`||n.phase===`waitingForAuth`||n.phase===`waitingForReturn`)&&cT(e,n).catch(e=>{H.error(`Teleport timeout handler failed`,{error:String(e)})})},n.timeoutMs),n.phase=`waitingForAuth`,H.info(`Teleport waiting for follower auth redirect`),H.debug(`Teleport waiting for follower auth redirect details`,{startPattern:n.startPattern.source}),n.pollInterval=setInterval(()=>{dT(e,t,n,l,s).catch(e=>{H.warn(`Follower teleport poll failed`,{error:String(e)})})},1e3)}catch(t){H.error(`Teleport trigger failed`,{error:String(t)}),await tT(e,n,`trigger-error`),n.phase=`done`,lT(n),n.rejectBlock?.(t instanceof Error?t:Error(String(t)))}}}async function pT(e,t){H.info(`Waiting for redirect chain to settle (2s)`),await new Promise(e=>setTimeout(e,2e3));let n=t.followerTargetId,r=t.followerStorageScript??null;t.followerStorageScript=null;let{cookies:i,followerStorage:a,finalUrl:o}=await e.withTab(n,async e=>{let n;try{let t=await e.evaluate(`window.location.href`);n=typeof t==`string`?t:String(t),H.debug(`Captured final URL from follower`,{finalUrl:n})}catch(e){H.warn(`Could not read follower URL (may be mid-navigation)`,{error:String(e)})}try{let t=await e.evaluate(`document.body?.innerText?.substring(0, 500) || "(empty)"`);H.debug(`Follower page content at capture time`,{bodyText:t})}catch(e){H.warn(`Could not read follower page content`,{error:String(e)})}let i=nT((await e.send(`Network.getCookies`)).cookies),a=i.length>0?Vw(i):`none`;H.info(`Captured cookies from follower`,{count:i.length}),H.debug(`Captured cookies from follower details`,{count:i.length,domains:a});let o=Bw;try{o=await Kw(e,`follower`),H.info(`Captured follower storage for leader`,{totalEntries:Hw(o),localStorageCount:Object.keys(o.localStorage).length,sessionStorageCount:Object.keys(o.sessionStorage).length}),H.debug(`Captured follower storage for leader details`,{origin:o.origin||`(unknown)`,localStorageCount:Object.keys(o.localStorage).length,sessionStorageCount:Object.keys(o.sessionStorage).length})}catch(e){H.warn(`Could not capture follower storage`,{error:String(e)})}return await eT(e,t,`capture`),await Zw(e,r,`follower`),{cookies:i,followerStorage:o,finalUrl:n}});try{await e.closePage(t.followerTargetId),H.info(`Closed follower tab after teleport`),H.debug(`Closed follower tab after teleport details`,{followerTargetId:t.followerTargetId})}catch(e){H.warn(`Failed to close follower tab`,{error:String(e)})}return{cookies:i,followerStorage:a,finalUrl:o}}async function mT(e,t,n,r){try{await e.navigate(n),await Yw(e,t,`leader`),r&&r!==n&&await e.navigate(r)}catch(i){H.warn(`Direct leader origin hydration failed, falling back to init-script replay`,{error:String(i)}),H.debug(`Direct leader origin hydration fallback details`,{hydrationUrl:n,landingUrl:r,error:String(i)});let a=await Xw(e,t,`leader`);try{r&&await e.navigate(r)}finally{await Zw(e,a,`leader`)}}}async function hT(e,t,n,r,i){let a=e.targetId,o=await Xw(e,n,`leader`);try{r&&(H.info(`Navigating leader after auth-state injection`,{hasLandingUrl:!0,storageEntries:Hw(n)}),H.debug(`Navigating leader after auth-state injection details`,{landingUrl:r,originalLeaderUrl:t.originalLeaderUrl,finalUrl:i,leaderTargetId:a,storageOrigin:n.origin||`(unknown)`,storageEntries:Hw(n)}),await e.navigate(r))}finally{await Zw(e,o,`leader`)}}async function gT(e,t,n,r,i){let a=t.leaderTargetId,o=r.origin||``,s=Gw(o,t.originalLeaderUrl,i),c=Uw(t.originalLeaderUrl),l=!!o&&c!==o,u=l?Ww(o):null;return a?(await e.withTab(a,async e=>{n.length>0&&(await e.send(`Network.setCookies`,{cookies:n}),H.info(`Injected cookies into leader tab`,{count:n.length}),H.debug(`Injected cookies into leader tab details`,{count:n.length,leaderTargetId:a})),l&&u?(H.info(`Hydrating leader storage origin before landing`,{storageEntries:Hw(r)}),H.debug(`Hydrating leader storage origin before landing details`,{hydrationUrl:u,landingUrl:s,originalLeaderUrl:t.originalLeaderUrl,finalUrl:i,leaderTargetId:a,storageOrigin:o,storageEntries:Hw(r)}),await mT(e,r,u,s)):await hT(e,t,r,s,i)}),s):(H.warn(`No leader tab available for auth-state injection`),s)}async function _T(e,t,n,r){if(n.phase===`teleporting`||n.phase===`waitingForReturn`){n.phase=`capturing`,H.info(`Capturing auth state from follower`),H.debug(`Capturing auth state from follower details`,{followerTargetId:n.followerTargetId,runtimeId:r}),n.pollInterval&&=(clearInterval(n.pollInterval),void 0),n.timeoutTimer&&=(clearTimeout(n.timeoutTimer),void 0);try{let{cookies:t,followerStorage:i,finalUrl:a}=await pT(e,n),o=Hw(i),s=await gT(e,n,t,i,a);n.phase=`done`,lT(n);let c=t.length>0?` (${Vw(t)})`:``,l=o>0?` + ${o} storage entr${o===1?`y`:`ies`}`:``,u=s?` (navigated to ${s})`:``,d=`Teleported ${t.length} cookie(s)${c}${l} from ${r}${u}`;H.info(`Teleport completed successfully`,{cookieCount:t.length,storageEntries:o,landed:!!s}),H.debug(`Teleport completed successfully details`,{result:d}),n.resolveBlock?.(d)}catch(t){H.error(`Teleport auth-state capture failed`,{error:String(t)}),await tT(e,n,`capture-error`),n.phase=`done`,lT(n),n.rejectBlock?.(t instanceof Error?t:Error(String(t)))}}}const vT=e(`playwright`),yT=async({browser:e,fs:t,state:n,positional:r,flags:i,onTab:a})=>{if(r.length===0)return{stdout:``,stderr:`goto requires a URL
1214
+ `,exitCode:1};let o=j(i);if(`error`in o)return{stdout:``,stderr:o.error,exitCode:1};await a(o.targetId,e=>e.navigate(r[0])),n.snapshots.delete(o.targetId);let s=i[`teleport-start`],c=i[`teleport-return`];if(s&&c){vT.info(`Arming teleport via goto/navigate flags`),vT.debug(`Arming teleport via goto/navigate flags details`,{targetId:o.targetId,startPattern:s,returnPattern:c});let t,a;try{t=new RegExp(s)}catch{return{stdout:``,stderr:`Invalid regex for --teleport-start: ${s}\n`,exitCode:1}}try{a=new RegExp(c)}catch{return{stdout:``,stderr:`Invalid regex for --teleport-return: ${c}\n`,exitCode:1}}let l=i.timeout?parseInt(i.timeout,10):300,u=n.teleportWatchers.get(o.targetId);u&&(lT(u),n.teleportWatchers.delete(o.targetId)),uT(e,n,t,a,l*1e3,i[`teleport-runtime`],r[0],o.targetId)}if(i.discover===`true`){let{browseShWarning:e,...n}=await uw(r[0],{discover:!0,fs:t}),i={action:`navigate`,targetId:o.targetId,source:`auxiliary-fetch`,...n};return{stdout:JSON.stringify(i,null,2)+`
1215
+ `,stderr:e?`${e}\n`:``,exitCode:0}}return{stdout:`Navigated to ${r[0]}\n`,stderr:``,exitCode:0}},bT=async({browser:e,state:t,flags:n,onTab:r})=>{let i=j(n);return`error`in i?{stdout:``,stderr:i.error,exitCode:1}:(await r(i.targetId,async e=>{await e.evaluate(`history.back()`)}),t.snapshots.delete(i.targetId),{stdout:`Navigated back
1216
+ `,stderr:``,exitCode:0})},xT=async({browser:e,state:t,flags:n,onTab:r})=>{let i=j(n);return`error`in i?{stdout:``,stderr:i.error,exitCode:1}:(await r(i.targetId,async e=>{await e.evaluate(`history.forward()`)}),t.snapshots.delete(i.targetId),{stdout:`Navigated forward
1217
+ `,stderr:``,exitCode:0})},ST=async({browser:e,flags:t,onTab:n})=>{let r=j(t);return`error`in r?{stdout:``,stderr:r.error,exitCode:1}:(await n(r.targetId,async e=>{await e.send(`Page.reload`)}),{stdout:`Reloaded
1218
+ `,stderr:``,exitCode:0})},CT=async({browser:e,flags:t,positional:n,onTab:r})=>{let i=j(t);if(`error`in i)return{stdout:``,stderr:i.error,exitCode:1};let a=n[0];return a!==`online`&&a!==`offline`?{stdout:``,stderr:`network-state-set requires "online" or "offline"
1219
+ `,exitCode:1}:(await r(i.targetId,async({sessionId:e,transport:t})=>{await t.send(`Network.enable`,{},e),await t.send(`Network.emulateNetworkConditions`,{offline:a===`offline`,latency:0,downloadThroughput:-1,uploadThroughput:-1},e)}),{stdout:`Network set to ${a}\n`,stderr:``,exitCode:0})},wT=[`image/`,`font/`,`text/css`,`application/javascript`,`text/javascript`];function TT(e,t){if(e&&wT.some(t=>e.startsWith(t)))return!0;try{let e=new URL(t).pathname;return/\.(png|jpe?g|gif|webp|svg|ico|woff2?|ttf|eot|otf|css|js|mjs)$/i.test(e)}catch{return!1}}function ET(e,t,n,r,i){if(t.networkCleanup.has(r))return;t.networkRequests.set(r,[]),t.networkRequestIndex.set(r,new Map);let a=1,o=IC({browser:e,targetId:r,transport:n,sessionId:i,listeners:[[`Network.requestWillBeSent`,e=>{let n=e;if(n.sessionId!==o.sessionId)return;let i=n.requestId,s=n.request;if(!i||!s)return;let c=t.networkRequests.get(r),l=t.networkRequestIndex.get(r);if(!c||!l)return;let u=s.url??``,d={index:a++,requestId:i,method:s.method??`GET`,url:u,requestHeaders:s.headers??{},requestBody:s.postData==null?null:String(s.postData),status:null,responseHeaders:null,responseBody:null,responseBodyBase64:!1,mimeType:null,isStatic:TT(null,u),timestamp:Date.now()};if(c.push(d),l.set(i,d),c.length>500){let e=c.splice(0,c.length-500);for(let t of e)l.delete(t.requestId)}}],[`Network.responseReceived`,e=>{let n=e;if(n.sessionId!==o.sessionId)return;let i=n.requestId,a=n.response;if(!i||!a)return;let s=t.networkRequestIndex.get(r)?.get(i);s&&(s.status=a.status??null,s.responseHeaders=a.headers??null,s.mimeType=a.mimeType??null,s.isStatic=TT(s.mimeType,s.url))}],[`Network.loadingFinished`,e=>{let n=e;if(n.sessionId!==o.sessionId)return;let i=n.requestId;if(!i)return;let a=t.networkRequestIndex.get(r)?.get(i);!a||a.isStatic||a.responseBody!==null||o.transport.send(`Network.getResponseBody`,{requestId:i},o.sessionId).then(e=>{let t=e;t&&(a.responseBody=t.body??null,a.responseBodyBase64=t.base64Encoded===!0)}).catch(()=>{})}]],enable:(e,t)=>e.send(`Network.enable`,{},t)});t.networkCleanup.set(r,()=>o.stop())}function DT(e){for(let t=0;t<e.length;t++){let n=e.charCodeAt(t);if(n<55296||n>57343)continue;if(n>=56320)return t;let r=e.charCodeAt(t+1);if(Number.isNaN(r)||r<56320||r>57343)return t;t++}return-1}function OT(e,t){if(t){let t;try{t=atob(e)}catch{return{error:`response body is flagged base64 but is not valid base64`}}let n=new Uint8Array(t.length);for(let e=0;e<t.length;e++)n[e]=t.charCodeAt(e)&255;return{bytes:n}}let n=DT(e);return n>=0?{error:`response body has an unpaired surrogate at index ${n} and cannot be saved without substituting U+FFFD`}:{bytes:new TextEncoder().encode(e)}}function kT(e,t,n){let r=parseInt(n,10);return!Number.isFinite(r)||r<1?null:(e.networkRequests.get(t)??[]).find(e=>e.index===r)??null}const AT=async({browser:e,state:t,flags:n,onTab:r})=>{let i=j(n);if(`error`in i)return{stdout:``,stderr:i.error,exitCode:1};t.networkCleanup.has(i.targetId)||await r(i.targetId,async({sessionId:n,transport:r})=>{await r.send(`Network.enable`,{},n),ET(e,t,r,i.targetId,n)});let a=n.static===`true`,o=n.filter,s=n.clear===`true`,c=t.networkRequests.get(i.targetId)??[];if(a||(c=c.filter(e=>!e.isStatic)),o){let e;try{e=new RegExp(o)}catch{return{stdout:``,stderr:`Invalid filter regex: ${o}\n`,exitCode:1}}c=c.filter(t=>e.test(t.url))}return s&&(t.networkRequests.set(i.targetId,[]),t.networkRequestIndex.set(i.targetId,new Map)),c.length===0?{stdout:`No requests
1200
1220
  `,stderr:``,exitCode:0}:{stdout:c.map(e=>`${e.index} ${e.method} ${e.url} → ${e.status??`pending`}`).join(`
1201
1221
  `)+`
1202
- `,stderr:``,exitCode:0}},AT=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),TT(e,t,r,o.targetId,n)});let s=n[0]??``,c=OT(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)+`
1222
+ `,stderr:``,exitCode:0}},jT=async({browser:e,state:t,positional:n,flags:r,fs:i,onTab:a})=>{let o=j(r);if(`error`in o)return{stdout:``,stderr:o.error,exitCode:1};t.networkCleanup.has(o.targetId)||await a(o.targetId,async({sessionId:n,transport:r})=>{await r.send(`Network.enable`,{},n),ET(e,t,r,o.targetId,n)});let s=n[0]??``,c=kT(t,o.targetId,s);if(!c)return{stdout:``,stderr:`No request at index ${s}\n`,exitCode:1};let l=[`Method: ${c.method}`,`URL: ${c.url}`,`Status: ${c.status??`pending`}`,``,`Request Headers:`,...Object.entries(c.requestHeaders).map(([e,t])=>` ${e}: ${t}`)];if(c.requestBody!==null&&l.push(``,`Request Body: ${c.requestBody}`),c.responseHeaders!==null&&(l.push(``,`Response Headers:`),l.push(...Object.entries(c.responseHeaders).map(([e,t])=>` ${e}: ${t}`))),c.responseBody!==null){let e=c.responseBody,t=e.length>4096?e.slice(0,4096)+`
1203
1223
  ... (truncated)`:e,n=c.responseBodyBase64?`Response Body (base64)`:`Response Body`;l.push(``,`${n}:\n${t}`)}let u=l.join(`
1204
1224
  `)+`
1205
- `,d=r.filename;return d?(await i.writeFile(d,u),{stdout:`Saved to ${d}\n`,stderr:``,exitCode:0}):{stdout:u,stderr:``,exitCode:0}},jT=async({browser:e,state:t,positional:n,flags:r,fs:i,onTab:a})=>{let o=j(r);if(`error`in o)return{stdout:``,stderr:o.error,exitCode:1};t.networkCleanup.has(o.targetId)||await a(o.targetId,async({sessionId:n,transport:r})=>{await r.send(`Network.enable`,{},n),TT(e,t,r,o.targetId,n)});let s=n[0]??``,c=OT(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(`
1225
+ `,d=r.filename;return d?(await i.writeFile(d,u),{stdout:`Saved to ${d}\n`,stderr:``,exitCode:0}):{stdout:u,stderr:``,exitCode:0}},MT=async({browser:e,state:t,positional:n,flags:r,fs:i,onTab:a})=>{let o=j(r);if(`error`in o)return{stdout:``,stderr:o.error,exitCode:1};t.networkCleanup.has(o.targetId)||await a(o.targetId,async({sessionId:n,transport:r})=>{await r.send(`Network.enable`,{},n),ET(e,t,r,o.targetId,n)});let s=n[0]??``,c=kT(t,o.targetId,s);if(!c)return{stdout:``,stderr:`No request at index ${s}\n`,exitCode:1};let l=Object.entries(c.requestHeaders).map(([e,t])=>`${e}: ${t}`).join(`
1206
1226
  `)+`
1207
- `,u=r.filename;return u?(await i.writeFile(u,l),{stdout:`Saved to ${u}\n`,stderr:``,exitCode:0}):{stdout:l,stderr:``,exitCode:0}},MT=async({browser:e,state:t,positional:n,flags:r,fs:i,onTab:a})=>{let o=j(r);if(`error`in o)return{stdout:``,stderr:o.error,exitCode:1};t.networkCleanup.has(o.targetId)||await a(o.targetId,async({sessionId:n,transport:r})=>{await r.send(`Network.enable`,{},n),TT(e,t,r,o.targetId,n)});let s=n[0]??``,c=OT(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)
1227
+ `,u=r.filename;return u?(await i.writeFile(u,l),{stdout:`Saved to ${u}\n`,stderr:``,exitCode:0}):{stdout:l,stderr:``,exitCode:0}},NT=async({browser:e,state:t,positional:n,flags:r,fs:i,onTab:a})=>{let o=j(r);if(`error`in o)return{stdout:``,stderr:o.error,exitCode:1};t.networkCleanup.has(o.targetId)||await a(o.targetId,async({sessionId:n,transport:r})=>{await r.send(`Network.enable`,{},n),ET(e,t,r,o.targetId,n)});let s=n[0]??``,c=kT(t,o.targetId,s);if(!c)return{stdout:``,stderr:`No request at index ${s}\n`,exitCode:1};if(c.requestBody===null)return{stdout:`(no request body)
1208
1228
  `,stderr:``,exitCode:0};let l=r.filename;return l?(await i.writeFile(l,c.requestBody),{stdout:`Saved to ${l}\n`,stderr:``,exitCode:0}):{stdout:c.requestBody+`
1209
- `,stderr:``,exitCode:0}},NT=async({browser:e,state:t,positional:n,flags:r,fs:i,onTab:a})=>{let o=j(r);if(`error`in o)return{stdout:``,stderr:o.error,exitCode:1};t.networkCleanup.has(o.targetId)||await a(o.targetId,async({sessionId:n,transport:r})=>{await r.send(`Network.enable`,{},n),TT(e,t,r,o.targetId,n)});let s=n[0]??``,c=OT(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)
1229
+ `,stderr:``,exitCode:0}},PT=async({browser:e,state:t,positional:n,flags:r,fs:i,onTab:a})=>{let o=j(r);if(`error`in o)return{stdout:``,stderr:o.error,exitCode:1};t.networkCleanup.has(o.targetId)||await a(o.targetId,async({sessionId:n,transport:r})=>{await r.send(`Network.enable`,{},n),ET(e,t,r,o.targetId,n)});let s=n[0]??``,c=kT(t,o.targetId,s);if(!c)return{stdout:``,stderr:`No request at index ${s}\n`,exitCode:1};if(c.responseHeaders===null)return{stdout:`(response not yet received)
1210
1230
  `,stderr:``,exitCode:0};let l=Object.entries(c.responseHeaders).map(([e,t])=>`${e}: ${t}`).join(`
1211
1231
  `)+`
1212
- `,u=r.filename;return u?(await i.writeFile(u,l),{stdout:`Saved to ${u}\n`,stderr:``,exitCode:0}):{stdout:l,stderr:``,exitCode:0}},PT=async({browser:e,state:t,positional:n,flags:r,fs:i,onTab:a})=>{let o=j(r);if(`error`in o)return{stdout:``,stderr:o.error,exitCode:1};t.networkCleanup.has(o.targetId)||await a(o.targetId,async({sessionId:n,transport:r})=>{await r.send(`Network.enable`,{},n),TT(e,t,r,o.targetId,n)});let s=n[0]??``,c=OT(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)
1213
- `,stderr:``,exitCode:0};let l=r.filename,u=DT(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)+`
1232
+ `,u=r.filename;return u?(await i.writeFile(u,l),{stdout:`Saved to ${u}\n`,stderr:``,exitCode:0}):{stdout:l,stderr:``,exitCode:0}},FT=async({browser:e,state:t,positional:n,flags:r,fs:i,onTab:a})=>{let o=j(r);if(`error`in o)return{stdout:``,stderr:o.error,exitCode:1};t.networkCleanup.has(o.targetId)||await a(o.targetId,async({sessionId:n,transport:r})=>{await r.send(`Network.enable`,{},n),ET(e,t,r,o.targetId,n)});let s=n[0]??``,c=kT(t,o.targetId,s);if(!c)return{stdout:``,stderr:`No request at index ${s}\n`,exitCode:1};if(c.responseBody===null)return{stdout:`(response body not yet available)
1233
+ `,stderr:``,exitCode:0};let l=r.filename,u=OT(c.responseBody,c.responseBodyBase64);if(`error`in u)return{stdout:``,stderr:`Request ${s}: ${u.error}\n`,exitCode:1};if(l)return await i.writeFile(l,u.bytes),{stdout:`Saved to ${l}\n`,stderr:``,exitCode:0};if(c.mimeType!==null&&!c.mimeType.startsWith(`text/`)&&!c.mimeType.includes(`json`)&&!c.mimeType.includes(`javascript`)&&!c.mimeType.includes(`xml`))return{stdout:`[binary body, ${u.bytes.length} bytes]\n`,stderr:``,exitCode:0};let d=c.responseBodyBase64?new TextDecoder().decode(u.bytes):c.responseBody;return{stdout:(d.length>4096?d.slice(0,4096)+`
1214
1234
  ... (truncated)`:d)+`
1215
- `,stderr:``,exitCode:0}},FT=async({browser:e,fs:t,state:n,positional:r,flags:i,onTab:a,signal:o})=>{let s=r[0]||`about:blank`,c=i.filter;await ae(e,n),An(o,`about to open the recording tab`);let l=await e.createPage(s);try{let{transport:r,sessionId:i}=await a(l,async e=>{let t=await e.transport.send(`Target.attachToTarget`,{targetId:l,flatten:!0});return{transport:e.transport,sessionId:t.sessionId}});n.harRecorder||=e.createHarRecorder(t,r);let u=await n.harRecorder.startRecording(l,i,c,o);return{stdout:`Recording started (targetId: ${l}, recordingId: ${u}) at ${s}\nHAR saved to /recordings/${u}/\n`,stderr:``,exitCode:0}}catch(t){throw await e.closePage(l).catch(()=>void 0),t}},IT=async({state:e,positional:t})=>{if(t.length===0)return{stdout:``,stderr:`stop-recording requires a recordingId
1216
- `,exitCode:1};let n=t[0];return e.harRecorder?{stdout:`Recording stopped. HAR files saved to ${await e.harRecorder.stopRecording(n)}\n`,stderr:``,exitCode:0}:{stdout:``,stderr:`Recording not found: ${n}\n`,exitCode:1}},LT=e(`playwright-route`),RT=[{urlPattern:`*`,requestStage:`Request`}];function zT(e){let t=e.replace(/[.+?^${}()|[\]\\]/g,`\\$&`).replace(/\*\*/g,`@@`).replace(/\*/g,`[^/]*`).replace(/@@/g,`.*`);return RegExp(`^${t}$`)}async function BT(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=>{LT.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=>{LT.warn(`Fetch.fulfillRequest failed`,{requestId:o,url:s.url,err:e})})}async function VT(e,t,n,r){await t(r,async({sessionId:t,transport:i})=>{await i.send(`Fetch.enable`,{patterns:RT},t);let a,o=e=>{a&&BT(a.transport,a.sessionId,n,r,e)};try{a=IC({browser:e,targetId:r,transport:i,sessionId:t,listeners:[[`Fetch.requestPaused`,o]],enable:(e,t)=>e.send(`Fetch.enable`,{patterns:RT},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 HT=async({browser:e,state:t,positional:n,flags:r,onTab:i})=>{if(n.length===0)return{stdout:``,stderr:`route requires a URL pattern
1217
- `,exitCode:1};let a=j(r);if(`error`in a)return{stdout:``,stderr:a.error,exitCode:1};let o=n[0],s={pattern:o,regex:zT(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(`,`)&&LT.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 VT(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}},UT=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
1235
+ `,stderr:``,exitCode:0}},IT=async({browser:e,fs:t,state:n,positional:r,flags:i,onTab:a,signal:o})=>{let s=r[0]||`about:blank`,c=i.filter;await ae(e,n),An(o,`about to open the recording tab`);let l=await e.createPage(s);try{let{transport:r,sessionId:i}=await a(l,async e=>{let t=await e.transport.send(`Target.attachToTarget`,{targetId:l,flatten:!0});return{transport:e.transport,sessionId:t.sessionId}});n.harRecorder||=e.createHarRecorder(t,r);let u=await n.harRecorder.startRecording(l,i,c,o);return{stdout:`Recording started (targetId: ${l}, recordingId: ${u}) at ${s}\nHAR saved to /recordings/${u}/\n`,stderr:``,exitCode:0}}catch(t){throw await e.closePage(l).catch(()=>void 0),t}},LT=async({state:e,positional:t})=>{if(t.length===0)return{stdout:``,stderr:`stop-recording requires a recordingId
1236
+ `,exitCode:1};let n=t[0];return e.harRecorder?{stdout:`Recording stopped. HAR files saved to ${await e.harRecorder.stopRecording(n)}\n`,stderr:``,exitCode:0}:{stdout:``,stderr:`Recording not found: ${n}\n`,exitCode:1}},RT=e(`playwright-route`),zT=[{urlPattern:`*`,requestStage:`Request`}];function BT(e){let t=e.replace(/[.+?^${}()|[\]\\]/g,`\\$&`).replace(/\*\*/g,`@@`).replace(/\*/g,`[^/]*`).replace(/@@/g,`.*`);return RegExp(`^${t}$`)}async function VT(e,n,r,i,a){if(a.sessionId!==n)return;let{requestId:o,request:s}=a,c=(r.routes.get(i)??[]).find(e=>e.regex.test(s.url));if(!c){await e.send(`Fetch.continueRequest`,{requestId:o},n).catch(e=>{RT.warn(`Fetch.continueRequest failed — intercepted request may hang`,{requestId:o,err:e})});return}let l=[{name:`Content-Type`,value:c.contentType},...Object.entries(c.headers).map(([e,t])=>({name:e,value:t}))];await e.send(`Fetch.fulfillRequest`,{requestId:o,responseCode:c.status,responseHeaders:l,body:c.body?t(new TextEncoder().encode(c.body)):void 0},n).catch(e=>{RT.warn(`Fetch.fulfillRequest failed`,{requestId:o,url:s.url,err:e})})}async function HT(e,t,n,r){await t(r,async({sessionId:t,transport:i})=>{await i.send(`Fetch.enable`,{patterns:zT},t);let a,o=e=>{a&&VT(a.transport,a.sessionId,n,r,e)};try{a=IC({browser:e,targetId:r,transport:i,sessionId:t,listeners:[[`Fetch.requestPaused`,o]],enable:(e,t)=>e.send(`Fetch.enable`,{patterns:zT},t)})}catch(e){throw await i.send(`Fetch.disable`,{},t).catch(()=>void 0),e}let s=a;n.routeCleanup.set(r,()=>{s.stop(),s.transport.send(`Fetch.disable`,{},s.sessionId).catch(()=>void 0)})})}const UT=async({browser:e,state:t,positional:n,flags:r,onTab:i})=>{if(n.length===0)return{stdout:``,stderr:`route requires a URL pattern
1237
+ `,exitCode:1};let a=j(r);if(`error`in a)return{stdout:``,stderr:a.error,exitCode:1};let o=n[0],s={pattern:o,regex:BT(o),status:r.status?parseInt(r.status,10):200,body:r.body??``,contentType:r[`content-type`]??`text/plain`,headers:{}};if(r.header){r.header.includes(`,`)&&RT.warn(`--header value contains comma — only last segment used. Use separate route calls for multiple headers.`);for(let e of r.header.split(`,`)){let t=e.indexOf(`:`);if(t>0){let n=e.slice(0,t).trim(),r=e.slice(t+1).trim();s.headers[n]=r}}}t.routeCleanup.has(a.targetId)||(t.routes.has(a.targetId)||t.routes.set(a.targetId,[]),await HT(e,i,t,a.targetId));let c=t.routes.get(a.targetId)??[];return c.unshift(s),t.routes.set(a.targetId,c),{stdout:`Route added: ${o}\n`,stderr:``,exitCode:0}},WT=async({state:e,flags:t})=>{let n=j(t);if(`error`in n)return{stdout:``,stderr:n.error,exitCode:1};let r=e.routes.get(n.targetId)??[];return r.length===0?{stdout:`No active routes
1218
1238
  `,stderr:``,exitCode:0}:{stdout:r.map((e,t)=>`${t+1}. ${e.pattern} → ${e.status} ${e.contentType}`).join(`
1219
1239
  `)+`
1220
- `,stderr:``,exitCode:0}},WT=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
1221
- `,stderr:``,exitCode:0}}let a=e.routes.get(r.targetId)??[],o=a.length,s=a.filter(e=>e.pattern!==i);if(e.routes.set(r.targetId,s),s.length===0){let t=e.routeCleanup.get(r.targetId);t&&(t(),e.routeCleanup.delete(r.targetId))}return{stdout:`Removed ${o-s.length} route(s) matching "${i}"\n`,stderr:``,exitCode:0}},GT=`/.playwright`;function KT(e,t){return e?`${t.replace(/\/+$/,``)}${GT}`:GT}async function qT(e,t,n){if(!t.sessionDirsCreated.has(n)){for(let t of[n,`${n}/snapshots`,`${n}/screenshots`])try{await e.mkdir(t,{recursive:!0})}catch(e){if(!Nn(e))throw e}t.sessionDirsCreated.add(n)}}async function JT(e,t,n,r,i){try{return await e.withTab(n,async e=>{let{url:a,title:o,text:s,refToSelector:c,refToBackendNodeId:l,refToFrameId:u}=await ce(e),d={url:a,title:o,refToSelector:c,refToBackendNodeId:l,refToFrameId:u,content:s,timestamp:Date.now()};r.snapshots.set(n,d);let f=[`Page URL: ${a}`,`Page Title: ${o}`,``,s].join(`
1222
- `),p=`${i}/snapshots/page-${jn(new Date)}.yml`;return await t.writeFile(p,f),p})}catch{return null}}async function YT(e,t,n,r){await qT(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(`
1240
+ `,stderr:``,exitCode:0}},GT=async({state:e,positional:t,flags:n})=>{let r=j(n);if(`error`in r)return{stdout:``,stderr:r.error,exitCode:1};let i=t[0];if(!i){e.routes.set(r.targetId,[]);let t=e.routeCleanup.get(r.targetId);return t&&(t(),e.routeCleanup.delete(r.targetId)),{stdout:`All routes removed
1241
+ `,stderr:``,exitCode:0}}let a=e.routes.get(r.targetId)??[],o=a.length,s=a.filter(e=>e.pattern!==i);if(e.routes.set(r.targetId,s),s.length===0){let t=e.routeCleanup.get(r.targetId);t&&(t(),e.routeCleanup.delete(r.targetId))}return{stdout:`Removed ${o-s.length} route(s) matching "${i}"\n`,stderr:``,exitCode:0}},KT=`/.playwright`;function qT(e,t){return e?`${t.replace(/\/+$/,``)}${KT}`:KT}async function JT(e,t,n){if(!t.sessionDirsCreated.has(n)){for(let t of[n,`${n}/snapshots`,`${n}/screenshots`])try{await e.mkdir(t,{recursive:!0})}catch(e){if(!Nn(e))throw e}t.sessionDirsCreated.add(n)}}async function YT(e,t,n,r,i){try{return await e.withTab(n,async e=>{let{url:a,title:o,text:s,refToSelector:c,refToBackendNodeId:l,refToFrameId:u}=await ce(e),d={url:a,title:o,refToSelector:c,refToBackendNodeId:l,refToFrameId:u,content:s,timestamp:Date.now()};r.snapshots.set(n,d);let f=[`Page URL: ${a}`,`Page Title: ${o}`,``,s].join(`
1242
+ `),p=`${i}/snapshots/page-${jn(new Date)}.yml`;return await t.writeFile(p,f),p})}catch{return null}}async function XT(e,t,n,r){await JT(e,t,n);let i=new Date().toISOString(),a=`playwright-cli ${r.command}${r.args.length?` `+r.args.join(` `):``}`,o=r.result.exitCode===0?r.result.stdout.trim()||`OK`:`Error: ${r.result.stderr.trim()}`,s=[`### ${a}`,`- **Time**: ${i}`];if(r.tabUrl||r.targetId){let e=r.tabUrl?`${r.tabUrl}${r.targetId?` (targetId: ${r.targetId})`:``}`:`targetId: ${r.targetId}`;s.push(`- **Tab**: ${e}`)}s.push(`- **Result**: ${o}`),r.snapshotPath&&s.push(``,`[Snapshot](${r.snapshotPath})`),s.push(`---`,``);let c=s.join(`
1223
1243
  `)+`
1224
- `,l=`${n}/session.md`,u=``;try{let t=await e.readFile(l);u=typeof t==`string`?t:new TextDecoder().decode(t)}catch{}await e.writeFile(l,u+c)}function XT(){return import(`./snapshot-features-DeJe8uji.js`)}async function ZT(e,t,n,r){let i=await e.getAccessibilityTreeForFrame(r.frameId),a=new Map,o=new Map,s=new Map,c=se(i,a,o,{value:0},``,`f1`);for(let e of a.keys())s.set(e,r.frameId);let l=c.join(`
1225
- `);return t.snapshots.set(n,{url:r.url,title:r.name,refToSelector:a,refToBackendNodeId:o,refToFrameId:s,content:l,timestamp:Date.now()}),l}async function QT(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() {
1244
+ `,l=`${n}/session.md`,u=``;try{let t=await e.readFile(l);u=typeof t==`string`?t:new TextDecoder().decode(t)}catch{}await e.writeFile(l,u+c)}function ZT(){return import(`./snapshot-features-Ha3qZYi5.js`)}async function QT(e,t,n,r){let i=await e.getAccessibilityTreeForFrame(r.frameId),a=new Map,o=new Map,s=new Map,c=se(i,a,o,{value:0},``,`f1`);for(let e of a.keys())s.set(e,r.frameId);let l=c.join(`
1245
+ `);return t.snapshots.set(n,{url:r.url,title:r.name,refToSelector:a,refToBackendNodeId:o,refToFrameId:s,content:l,timestamp:Date.now()}),l}async function $T(e,t){await e.send(`DOM.enable`),await e.send(`Runtime.enable`);let n=(await e.send(`DOM.resolveNode`,{backendNodeId:t})).object;if(n?.objectId)return(await e.send(`Runtime.callFunctionOn`,{objectId:n.objectId,functionDeclaration:`function() {
1226
1246
  this.scrollIntoView({ block: 'center' });
1227
1247
  const r = this.getBoundingClientRect();
1228
1248
  return { x: r.x + window.scrollX, y: r.y + window.scrollY, width: r.width, height: r.height };
1229
- }`,returnByValue:!0})).result?.value}async function $T(e,t){let n=await e.evaluate(`(function() {
1249
+ }`,returnByValue:!0})).result?.value}async function eE(e,t){let n=await e.evaluate(`(function() {
1230
1250
  const el = document.querySelector(${JSON.stringify(t.split(`,`)[0].trim())});
1231
1251
  if (!el) return null;
1232
1252
  el.scrollIntoView({ block: 'center' });
1233
1253
  const r = el.getBoundingClientRect();
1234
1254
  return JSON.stringify({ x: r.x + window.scrollX, y: r.y + window.scrollY, width: r.width, height: r.height });
1235
- })()`);return n?Pn(n,`element clip rect`):void 0}async function eE(e,t,n){let r=t.refToBackendNodeId.get(n);if(r)return QT(e,r);let i=t.refToSelector.get(n);if(!i)throw Error(`Unknown ref "${n}"`);return $T(e,i)}const tE=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)
1236
- `,exitCode:1};let u=await i(a.targetId,async e=>{let t=await Gn(e,r);if(t)return ZT(e,n,a.targetId,t);let{snapshot:i,output:s}=await ie(e,n,a.targetId,{noIframes:o});if(!l)return s;let{annotateBoxes:c}=await XT();return c(e,i.refToBackendNodeId,s)});if(c!==void 0){let{limitSnapshotDepth:e}=await XT();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+`
1237
- `,stderr:``,exitCode:0}},nE=async e=>{let{findHandlerImpl:t}=await XT();return t(e)},rE=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(`
1255
+ })()`);return n?Pn(n,`element clip rect`):void 0}async function tE(e,t,n){let r=t.refToBackendNodeId.get(n);if(r)return $T(e,r);let i=t.refToSelector.get(n);if(!i)throw Error(`Unknown ref "${n}"`);return eE(e,i)}const nE=async({browser:e,fs:t,state:n,flags:r,onTab:i})=>{let a=j(r);if(`error`in a)return{stdout:``,stderr:a.error,exitCode:1};let o=r[`no-iframes`]===`true`,s=r.depth;if(s!==void 0&&!/^[1-9][0-9]*$/.test(s))return{stdout:``,stderr:`snapshot: --depth must be a positive integer, got "${s}"\n`,exitCode:1};let c=s===void 0?void 0:parseInt(s,10),l=r.boxes===`true`;if(l&&r.frame)return{stdout:``,stderr:`snapshot: --boxes is not supported with --frame (child-frame rects live in another coordinate space)
1256
+ `,exitCode:1};let u=await i(a.targetId,async e=>{let t=await Gn(e,r);if(t)return QT(e,n,a.targetId,t);let{snapshot:i,output:s}=await ie(e,n,a.targetId,{noIframes:o});if(!l)return s;let{annotateBoxes:c}=await ZT();return c(e,i.refToBackendNodeId,s)});if(c!==void 0){let{limitSnapshotDepth:e}=await ZT();u=e(u,c)}return r.filename?(await t.writeFile(r.filename,u),{stdout:`Snapshot saved to ${r.filename}\n`,stderr:``,exitCode:0}):{stdout:u+`
1257
+ `,stderr:``,exitCode:0}},rE=async e=>{let{findHandlerImpl:t}=await ZT();return t(e)},iE=async({browser:e,flags:t,onTab:n})=>{let r=j(t);return`error`in r?{stdout:``,stderr:r.error,exitCode:1}:{stdout:await n(r.targetId,async e=>`Frame IDs (use with --frame, never --tab):\n${(await e.getFrameTree()).map(e=>{let t=e.parentFrameId?`child`:`main`,n=e.parentFrameId?` parentFrameId=${e.parentFrameId}`:``;return` [${t}] frameId=${e.frameId}${n} - ${e.url}`}).join(`
1238
1258
  `)}`)+`
1239
- `,stderr:``,exitCode:0}},iE=async({browser:e,fs:t,flags:n,scratchDir:r,onTab:i})=>{let a=j(n);if(`error`in a)return{stdout:``,stderr:a.error,exitCode:1};let o=n.filename||`${r}/page-${jn(new Date)}.pdf`;try{await i(a.targetId,async({sessionId:e,transport:n})=>{let r=(await n.send(`Page.printToPDF`,{},e)).data,i=Hn(r);await t.writeFile(o,i)})}catch(e){let t=e instanceof Error?e.message:String(e);return ee()?{stdout:``,stderr:`pdf: not available in extension mode — use screenshot --full-page
1240
- `,exitCode:1}:{stdout:``,stderr:`pdf: ${t}\n`,exitCode:1}}return{stdout:`Saved PDF to ${o}\n`,stderr:``,exitCode:0}};async function aE(e,t,n,r){let i=t.snapshots.get(n);if(!i)throw Error(`No snapshot available. Run "snapshot" first.`);let a=await eE(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 oE=new Set([`png`,`jpeg`,`webp`]);function sE(e){let t=e.type;if(t&&oE.has(t))return t;let n=e.filename??``;return/\.jpe?g$/i.test(n)?`jpeg`:/\.webp$/i.test(n)?`webp`:`png`}const cE=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&&!oE.has(i.type))return{stdout:``,stderr:`screenshot: --type must be png, jpeg, or webp, got "${i.type}"\n`,exitCode:1};if(i[`max-width`]&&sE(i)!==`png`)return{stdout:``,stderr:`screenshot: --max-width requires png output (the downscale pass measures PNG headers); drop --type/--filename extension or --max-width
1241
- `,exitCode:1};let l=await s(c.targetId,async e=>{let s;if(r[0]?.startsWith(`e`)){let t=await aE(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 XT();s=await t(e,s,l)}let u=i[`max-width`]?parseInt(i[`max-width`],10):void 0,d=sE(i),f=await e.screenshot({format:d,fullPage:l,...s?{clip:s}:{},...u?{maxWidth:u}:{}}),p=d===`jpeg`?`jpg`:d,m=i.filename||`${a}/screenshot-${Date.now()}.${p}`,h=Hn(f);await t.writeFile(m,h);try{await qT(t,n,o);let e=`${o}/screenshots/screenshot-${jn(new Date)}.${p}`;await t.writeFile(e,h)}catch{}return{message:`Screenshot saved to ${m} (${Math.round(h.length/1024)} KB)`}});return`error`in l?{stdout:``,stderr:`screenshot: ${l.error}\n`,exitCode:1}:{stdout:l.message+`
1242
- `,stderr:``,exitCode:0}},lE=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}},uE=async({browser:e,fs:t,positional:n,flags:r,onTab:i})=>{if(n.length===0)return{stdout:``,stderr:`state-load requires a filename
1259
+ `,stderr:``,exitCode:0}},aE=async({browser:e,fs:t,flags:n,scratchDir:r,onTab:i})=>{let a=j(n);if(`error`in a)return{stdout:``,stderr:a.error,exitCode:1};let o=n.filename||`${r}/page-${jn(new Date)}.pdf`;try{await i(a.targetId,async({sessionId:e,transport:n})=>{let r=(await n.send(`Page.printToPDF`,{},e)).data,i=Hn(r);await t.writeFile(o,i)})}catch(e){let t=e instanceof Error?e.message:String(e);return ee()?{stdout:``,stderr:`pdf: not available in extension mode — use screenshot --full-page
1260
+ `,exitCode:1}:{stdout:``,stderr:`pdf: ${t}\n`,exitCode:1}}return{stdout:`Saved PDF to ${o}\n`,stderr:``,exitCode:0}};async function oE(e,t,n,r){let i=t.snapshots.get(n);if(!i)throw Error(`No snapshot available. Run "snapshot" first.`);let a=await tE(e,i,r);return!a||a.width<=0||a.height<=0?{error:`could not resolve element ${r} to a visible box — the snapshot is likely stale (navigation, reload, or layout change). Re-run "snapshot" and retry with a fresh ref, or omit the ref to capture the viewport deliberately.`}:{clip:a}}const sE=new Set([`png`,`jpeg`,`webp`]);function cE(e){let t=e.type;if(t&&sE.has(t))return t;let n=e.filename??``;return/\.jpe?g$/i.test(n)?`jpeg`:/\.webp$/i.test(n)?`webp`:`png`}const lE=async({browser:e,fs:t,state:n,positional:r,flags:i,scratchDir:a,sessionRoot:o,onTab:s})=>{let c=j(i);if(`error`in c)return{stdout:``,stderr:c.error,exitCode:1};if(i.type&&!sE.has(i.type))return{stdout:``,stderr:`screenshot: --type must be png, jpeg, or webp, got "${i.type}"\n`,exitCode:1};if(i[`max-width`]&&cE(i)!==`png`)return{stdout:``,stderr:`screenshot: --max-width requires png output (the downscale pass measures PNG headers); drop --type/--filename extension or --max-width
1261
+ `,exitCode:1};let l=await s(c.targetId,async e=>{let s;if(r[0]?.startsWith(`e`)){let t=await oE(e,n,c.targetId,r[0]);if(`error`in t)return t;s=t.clip}let l=i.fullPage===`true`||i[`full-page`]===`true`;if(i.hires===`true`){let{hiresClip:t}=await ZT();s=await t(e,s,l)}let u=i[`max-width`]?parseInt(i[`max-width`],10):void 0,d=cE(i),f=await e.screenshot({format:d,fullPage:l,...s?{clip:s}:{},...u?{maxWidth:u}:{}}),p=d===`jpeg`?`jpg`:d,m=i.filename||`${a}/screenshot-${Date.now()}.${p}`,h=Hn(f);await t.writeFile(m,h);try{await JT(t,n,o);let e=`${o}/screenshots/screenshot-${jn(new Date)}.${p}`;await t.writeFile(e,h)}catch{}return{message:`Screenshot saved to ${m} (${Math.round(h.length/1024)} KB)`}});return`error`in l?{stdout:``,stderr:`screenshot: ${l.error}\n`,exitCode:1}:{stdout:l.message+`
1262
+ `,stderr:``,exitCode:0}},uE=async({browser:e,fs:t,positional:n,flags:r,sessionRoot:i,onTab:a})=>{let o=j(r);if(`error`in o)return{stdout:``,stderr:o.error,exitCode:1};let s=r.filename??n[0]??`${i}/storage-state.json`,c=[],l=[],u=``;await a(o.targetId,async e=>{c=(await e.send(`Network.getCookies`)).cookies??[];let{sessionId:t,transport:n}=e;u=(await n.send(`Runtime.evaluate`,{expression:`location.origin`,returnByValue:!0},t)).result.value??``;let r=(await n.send(`Runtime.evaluate`,{expression:`JSON.stringify(Object.entries(localStorage).map(([name,value])=>({name,value})))`,returnByValue:!0},t)).result.value??`[]`;l=JSON.parse(r)});let d=JSON.stringify({cookies:c,origins:u?[{origin:u,localStorage:l}]:[]},null,2);return await t.writeFile(s,d),{stdout:`Saved storage state to ${s}\n`,stderr:``,exitCode:0}},dE=async({browser:e,fs:t,positional:n,flags:r,onTab:i})=>{if(n.length===0)return{stdout:``,stderr:`state-load requires a filename
1243
1263
  `,exitCode:1};let a=j(r);if(`error`in a)return{stdout:``,stderr:a.error,exitCode:1};let o=n[0],s;try{let e=await t.readTextFile(o);s=JSON.parse(e)}catch{return{stdout:``,stderr:`Failed to read storage state from ${o}\n`,exitCode:1}}let c=[];(s.cookies?.length||s.origins?.length)&&await i(a.targetId,async e=>{if(s.cookies?.length&&await e.send(`Network.setCookies`,{cookies:s.cookies}),!s.origins?.length)return;let{sessionId:t,transport:n}=e,r=(await n.send(`Runtime.evaluate`,{expression:`location.origin`,returnByValue:!0},t)).result.value??``,i=s.origins.filter(e=>e.origin===r);c=s.origins.filter(e=>e.origin!==r);for(let{localStorage:e}of i){let r=`(function() {
1244
1264
  var items = ${JSON.stringify(e)};
1245
1265
  for (var i = 0; i < items.length; i++) {
1246
1266
  localStorage.setItem(items[i].name, items[i].value);
1247
1267
  }
1248
- })()`;await n.send(`Runtime.evaluate`,{expression:r,returnByValue:!0},t)}});let l=``;return c.length>0&&(l=`Skipped localStorage for non-matching origins: ${c.map(e=>e.origin).join(`, `)}\n`),{stdout:`Loaded storage state from ${o}\n`,stderr:l,exitCode:0}};function dE(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(`
1268
+ })()`;await n.send(`Runtime.evaluate`,{expression:r,returnByValue:!0},t)}});let l=``;return c.length>0&&(l=`Skipped localStorage for non-matching origins: ${c.map(e=>e.origin).join(`, `)}\n`),{stdout:`Loaded storage state from ${o}\n`,stderr:l,exitCode:0}};function fE(e,t){return{list:async({browser:e,flags:n,onTab:r})=>{let i=j(n);return`error`in i?{stdout:``,stderr:i.error,exitCode:1}:{stdout:await r(i.targetId,async e=>{let n=await e.evaluate(`JSON.stringify(Object.entries(${t}))`),r=JSON.parse(n);return r.length===0?`No ${t} entries`:r.map(([e,t])=>`${e}=${t}`).join(`
1249
1269
  `)})+`
1250
1270
  `,stderr:``,exitCode:0}},get:async({browser:n,positional:r,flags:i,onTab:a})=>{if(r.length===0)return{stdout:``,stderr:`${e}-get requires a key\n`,exitCode:1};let o=j(i);return`error`in o?{stdout:``,stderr:o.error,exitCode:1}:{stdout:await a(o.targetId,async e=>{let n=await e.evaluate(`${t}.getItem(${JSON.stringify(r[0])})`);if(n===null)throw Error(`Key "${r[0]}" not found in ${t}`);return n})+`
1251
- `,stderr:``,exitCode:0}},set:async({browser:n,positional:r,flags:i,onTab:a})=>{if(r.length<2)return{stdout:``,stderr:`${e}-set requires <key> <value>\n`,exitCode:1};let o=j(i);return`error`in o?{stdout:``,stderr:o.error,exitCode:1}:(await a(o.targetId,async e=>{await e.evaluate(`${t}.setItem(${JSON.stringify(r[0])}, ${JSON.stringify(r.slice(1).join(` `))})`)}),{stdout:`${t} "${r[0]}" set\n`,stderr:``,exitCode:0})},del:async({browser:n,positional:r,flags:i,onTab:a})=>{if(r.length===0)return{stdout:``,stderr:`${e}-delete requires a key\n`,exitCode:1};let o=j(i);return`error`in o?{stdout:``,stderr:o.error,exitCode:1}:(await a(o.targetId,async e=>{await e.evaluate(`${t}.removeItem(${JSON.stringify(r[0])})`)}),{stdout:`${t} "${r[0]}" deleted\n`,stderr:``,exitCode:0})},clear:async({browser:e,flags:n,onTab:r})=>{let i=j(n);return`error`in i?{stdout:``,stderr:i.error,exitCode:1}:(await r(i.targetId,async e=>{await e.evaluate(`${t}.clear()`)}),{stdout:`${t} cleared\n`,stderr:``,exitCode:0})}}}const fE=dE(`localstorage`,`localStorage`),pE=dE(`sessionstorage`,`sessionStorage`),mE=e(`playwright`),hE={width:412,height:915,deviceScaleFactor:2.625};function gE(e,t,n,r,i){let a=n[`teleport-start`],o=n[`teleport-return`];if(!a||!o)return null;mE.info(`Arming teleport via open/tab-new flags`),mE.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&&(cT(u),t.teleportWatchers.delete(i)),lT(e,t,s,c,l*1e3,n[`teleport-runtime`],r,i),null}const _E=async({browser:e,fs:t,state:n,positional:r,flags:i,onTab:a})=>{let o=r[0]||`about:blank`,s=i.runtime,c=i.mobile===`true`;await ae(e,n);let l=c?`about:blank`:o,u;if(u=s?await e.createRemotePage(s,l):await e.createPage(l),c&&await a(u,async e=>{await e.setViewportOverride(hE.width,hE.height,{deviceScaleFactor:hE.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){mE.debug(`open/tab-new --foreground bringToFront failed`,{targetId:u,error:e instanceof Error?e.message:String(e)})}let d=gE(e,n,i,o,u);if(d)return d;if(i.discover===`true`){let{browseShWarning:e,...n}=await uw(o,{discover:!0,fs:t}),r={action:`open`,targetId:u,source:`auxiliary-fetch`,...n};return{stdout:JSON.stringify(r,null,2)+`
1252
- `,stderr:e?`${e}\n`:``,exitCode:0}}return{stdout:`Opened ${o} in new tab [targetId: ${u}]\n`,stderr:``,exitCode:0}},vE=async({browser:e,state:t})=>{let n=await oe(e,t);return n.length===0?{stdout:`No tabs open
1271
+ `,stderr:``,exitCode:0}},set:async({browser:n,positional:r,flags:i,onTab:a})=>{if(r.length<2)return{stdout:``,stderr:`${e}-set requires <key> <value>\n`,exitCode:1};let o=j(i);return`error`in o?{stdout:``,stderr:o.error,exitCode:1}:(await a(o.targetId,async e=>{await e.evaluate(`${t}.setItem(${JSON.stringify(r[0])}, ${JSON.stringify(r.slice(1).join(` `))})`)}),{stdout:`${t} "${r[0]}" set\n`,stderr:``,exitCode:0})},del:async({browser:n,positional:r,flags:i,onTab:a})=>{if(r.length===0)return{stdout:``,stderr:`${e}-delete requires a key\n`,exitCode:1};let o=j(i);return`error`in o?{stdout:``,stderr:o.error,exitCode:1}:(await a(o.targetId,async e=>{await e.evaluate(`${t}.removeItem(${JSON.stringify(r[0])})`)}),{stdout:`${t} "${r[0]}" deleted\n`,stderr:``,exitCode:0})},clear:async({browser:e,flags:n,onTab:r})=>{let i=j(n);return`error`in i?{stdout:``,stderr:i.error,exitCode:1}:(await r(i.targetId,async e=>{await e.evaluate(`${t}.clear()`)}),{stdout:`${t} cleared\n`,stderr:``,exitCode:0})}}}const pE=fE(`localstorage`,`localStorage`),mE=fE(`sessionstorage`,`sessionStorage`),hE=e(`playwright`),gE={width:412,height:915,deviceScaleFactor:2.625};function _E(e,t,n,r,i){let a=n[`teleport-start`],o=n[`teleport-return`];if(!a||!o)return null;hE.info(`Arming teleport via open/tab-new flags`),hE.debug(`Arming teleport via open/tab-new flags details`,{targetId:i,startPattern:a,returnPattern:o});let s,c;try{s=new RegExp(a)}catch{return{stdout:``,stderr:`Invalid regex for --teleport-start: ${a}\n`,exitCode:1}}try{c=new RegExp(o)}catch{return{stdout:``,stderr:`Invalid regex for --teleport-return: ${o}\n`,exitCode:1}}let l=n.timeout?parseInt(n.timeout,10):300,u=t.teleportWatchers.get(i);return u&&(lT(u),t.teleportWatchers.delete(i)),uT(e,t,s,c,l*1e3,n[`teleport-runtime`],r,i),null}const vE=async({browser:e,fs:t,state:n,positional:r,flags:i,onTab:a})=>{let o=r[0]||`about:blank`,s=i.runtime,c=i.mobile===`true`;await ae(e,n);let l=c?`about:blank`:o,u;if(u=s?await e.createRemotePage(s,l):await e.createPage(l),c&&await a(u,async e=>{await e.setViewportOverride(gE.width,gE.height,{deviceScaleFactor:gE.deviceScaleFactor,mobile:!0,userAgent:`Mozilla/5.0 (Linux; Android 14; Pixel 8) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Mobile Safari/537.36`}),o!==`about:blank`&&await e.navigate(o)}),i.foreground===`true`||i.fg===`true`)try{await a(u,e=>e.bringToFront())}catch(e){hE.debug(`open/tab-new --foreground bringToFront failed`,{targetId:u,error:e instanceof Error?e.message:String(e)})}let d=_E(e,n,i,o,u);if(d)return d;if(i.discover===`true`){let{browseShWarning:e,...n}=await uw(o,{discover:!0,fs:t}),r={action:`open`,targetId:u,source:`auxiliary-fetch`,...n};return{stdout:JSON.stringify(r,null,2)+`
1272
+ `,stderr:e?`${e}\n`:``,exitCode:0}}return{stdout:`Opened ${o} in new tab [targetId: ${u}]\n`,stderr:``,exitCode:0}},yE=async({browser:e,state:t})=>{let n=await oe(e,t);return n.length===0?{stdout:`No tabs open
1253
1273
  `,stderr:``,exitCode:0}:{stdout:n.map(e=>{let t=!!e.active,n=e.targetId.includes(`:`),r=t?` (active)`:``,i=n?` [remote:${e.targetId.substring(0,e.targetId.indexOf(`:`))}]`:``;return`[${e.targetId}] ${e.url} "${e.title}"${r}${i}`}).join(`
1254
1274
  `)+`
1255
- `,stderr:``,exitCode:0}},yE=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}},bE=async({browser:e,state:t,positional:n,onTab:r})=>{if(n.length===0)return{stdout:``,stderr:`tab-select requires a tab index
1275
+ `,stderr:``,exitCode:0}},bE=async({browser:e,state:t,flags:n})=>{let r=j(n);if(`error`in r)return{stdout:``,stderr:r.error,exitCode:1};await e.closePage(r.targetId),t.snapshots.delete(r.targetId),t.teleportWatchers.delete(r.targetId),t.consoleMessages.delete(r.targetId);let i=t.consoleCleanup.get(r.targetId);i&&(i(),t.consoleCleanup.delete(r.targetId)),t.networkRequests.delete(r.targetId);let a=t.networkCleanup.get(r.targetId);a&&(a(),t.networkCleanup.delete(r.targetId));let o=t.routeCleanup.get(r.targetId);return o&&(o(),t.routeCleanup.delete(r.targetId)),t.routes.delete(r.targetId),t.lastMousePosition.delete(r.targetId),{stdout:`Closed tab ${r.targetId}\n`,stderr:``,exitCode:0}},xE=async({browser:e,state:t,positional:n,onTab:r})=>{if(n.length===0)return{stdout:``,stderr:`tab-select requires a tab index
1256
1276
  `,exitCode:1};let i=n[0];if(!/^[0-9]+$/.test(i))return{stdout:``,stderr:`tab-select index must be a positive integer
1257
1277
  `,exitCode:1};let a=parseInt(i,10);if(a<1)return{stdout:``,stderr:`tab-select index must be a positive integer
1258
- `,exitCode:1};let o=await oe(e,t);if(a>o.length)return{stdout:``,stderr:`tab-select index ${a} out of range (${o.length} tab${o.length===1?``:`s`} open)\n`,exitCode:1};let s=o[a-1].targetId;return await r(s,e=>e.bringToFront()),{stdout:`Selected tab ${a} [targetId: ${s}]\n`,stderr:``,exitCode:0}},xE=async({browser:e,state:t,positional:n,flags:r,onTab:i})=>{if(n.length<2)return{stdout:``,stderr:`resize requires <width> <height>
1278
+ `,exitCode:1};let o=await oe(e,t);if(a>o.length)return{stdout:``,stderr:`tab-select index ${a} out of range (${o.length} tab${o.length===1?``:`s`} open)\n`,exitCode:1};let s=o[a-1].targetId;return await r(s,e=>e.bringToFront()),{stdout:`Selected tab ${a} [targetId: ${s}]\n`,stderr:``,exitCode:0}},SE=async({browser:e,state:t,positional:n,flags:r,onTab:i})=>{if(n.length<2)return{stdout:``,stderr:`resize requires <width> <height>
1259
1279
  `,exitCode:1};let a=j(r);if(`error`in a)return{stdout:``,stderr:a.error,exitCode:1};let o=parseInt(n[0],10),s=parseInt(n[1],10);return isNaN(o)||isNaN(s)||o<=0||s<=0?{stdout:``,stderr:`resize requires positive integer width and height
1260
- `,exitCode:1}:(await i(a.targetId,e=>e.setViewportOverride(o,s)),t.snapshots.delete(a.targetId),{stdout:`Resized viewport to ${o}x${s}\n`,stderr:``,exitCode:0})},SE=e(`playwright-teleport`);function CE(){SE.info(`Listing available follower runtimes`);let e=oT();if(!e)return{stdout:``,stderr:`teleport: not connected to a tray
1280
+ `,exitCode:1}:(await i(a.targetId,e=>e.setViewportOverride(o,s)),t.snapshots.delete(a.targetId),{stdout:`Resized viewport to ${o}x${s}\n`,stderr:``,exitCode:0})},CE=e(`playwright-teleport`);function wE(){CE.info(`Listing available follower runtimes`);let e=sT();if(!e)return{stdout:``,stderr:`teleport: not connected to a tray
1261
1281
  `,exitCode:1};let t=e();if(t.length===0)return{stdout:`No followers connected to the tray.
1262
1282
  `,stderr:``,exitCode:0};let n=[`Available runtimes for teleport:`];for(let e of t){let t=[e.runtimeId];if(e.floatType&&t.push(`[${e.floatType}]`),e.runtime&&t.push(`(${e.runtime})`),e.lastActivity){let n=Math.round((Date.now()-e.lastActivity)/1e3);t.push(`active ${n}s ago`)}n.push(` ${t.join(` `)}`)}return{stdout:n.join(`
1263
1283
  `)+`
1264
- `,stderr:``,exitCode:0}}function wE({state:e,flags:t}){let n=j(t);if(`error`in n)return{stdout:``,stderr:n.error,exitCode:1};SE.info(`Disarming teleport watcher via --off`,{targetId:n.targetId});let r=e.teleportWatchers.get(n.targetId);return r&&(cT(r),e.teleportWatchers.delete(n.targetId)),{stdout:`Teleport watcher disarmed
1265
- `,stderr:``,exitCode:0}}function TE(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 EE(e){return(oT()?.()??[]).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 DE({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>
1266
- `,exitCode:1};let c=TE(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
1267
- `,exitCode:1};let u=n.runtime;if(u){let e=EE(u);if(e)return{stdout:``,stderr:e,exitCode:1}}let d=t.teleportWatchers.get(a.targetId);d&&(SE.info(`Disarming existing teleport watcher before re-arming`,{targetId:a.targetId}),cT(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 SE.info(`Arming teleport via explicit subcommand`,{targetId:a.targetId,timeoutSec:l,runtimeSelection:u?`explicit`:`auto`}),SE.debug(`Arming teleport via explicit subcommand details`,{targetId:a.targetId,startPattern:o,returnPattern:s,timeoutSec:l,runtimeId:u??`auto`,leaderUrl:f}),An(i,`about to arm a teleport watcher on tab ${a.targetId}`),lT(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 OE=async e=>e.flags.list===`true`?CE():e.flags.off===`true`?wE(e):DE(e),kE={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 AE(e){let t=e.split(`.`).pop()?.toLowerCase()??``;return kE[t]??`application/octet-stream`}function jE(e,t){if(e.length===0)return{error:`upload requires at least one file path
1284
+ `,stderr:``,exitCode:0}}function TE({state:e,flags:t}){let n=j(t);if(`error`in n)return{stdout:``,stderr:n.error,exitCode:1};CE.info(`Disarming teleport watcher via --off`,{targetId:n.targetId});let r=e.teleportWatchers.get(n.targetId);return r&&(lT(r),e.teleportWatchers.delete(n.targetId)),{stdout:`Teleport watcher disarmed
1285
+ `,stderr:``,exitCode:0}}function EE(e,t){let n,r;try{n=new RegExp(e)}catch{return{error:`Invalid regex for --start: ${e}\n`}}try{r=new RegExp(t)}catch{return{error:`Invalid regex for --return: ${t}\n`}}return{startPattern:n,returnPattern:r}}function DE(e){return(sT()?.()??[]).find(t=>t.runtimeId===e)?.runtime===`slicc-cherry`?`teleport: runtime ${e} is a cherry host and cannot serve a cookie teleport (no Network.* access)\n`:null}async function OE({browser:e,state:t,flags:n,onTab:r,signal:i}){let a=j(n);if(`error`in a)return{stdout:``,stderr:a.error,exitCode:1};let o=n.start||n[`teleport-start`],s=n.return||n[`teleport-return`];if(!o||!s)return{stdout:``,stderr:`teleport requires --start <regex> and --return <regex>
1286
+ `,exitCode:1};let c=EE(o,s);if(`error`in c)return{stdout:``,stderr:c.error,exitCode:1};let l=n.timeout?parseInt(n.timeout,10):300;if(isNaN(l)||l<=0)return{stdout:``,stderr:`--timeout must be a positive number
1287
+ `,exitCode:1};let u=n.runtime;if(u){let e=DE(u);if(e)return{stdout:``,stderr:e,exitCode:1}}let d=t.teleportWatchers.get(a.targetId);d&&(CE.info(`Disarming existing teleport watcher before re-arming`,{targetId:a.targetId}),lT(d),t.teleportWatchers.delete(a.targetId));let f;try{let e=await r(a.targetId,e=>e.evaluate(`window.location.href`));f=typeof e==`string`?e:String(e)}catch{}return CE.info(`Arming teleport via explicit subcommand`,{targetId:a.targetId,timeoutSec:l,runtimeSelection:u?`explicit`:`auto`}),CE.debug(`Arming teleport via explicit subcommand details`,{targetId:a.targetId,startPattern:o,returnPattern:s,timeoutSec:l,runtimeId:u??`auto`,leaderUrl:f}),An(i,`about to arm a teleport watcher on tab ${a.targetId}`),uT(e,t,c.startPattern,c.returnPattern,l*1e3,u,f,a.targetId),{stdout:`Teleport armed on tab ${a.targetId}. Will trigger when URL matches ${o}\n`,stderr:``,exitCode:0}}const kE=async e=>e.flags.list===`true`?wE():e.flags.off===`true`?TE(e):OE(e),AE={png:`image/png`,jpg:`image/jpeg`,jpeg:`image/jpeg`,gif:`image/gif`,webp:`image/webp`,svg:`image/svg+xml`,pdf:`application/pdf`,txt:`text/plain`,json:`application/json`,csv:`text/csv`,html:`text/html`,htm:`text/html`,xml:`application/xml`,zip:`application/zip`,mp4:`video/mp4`,mp3:`audio/mpeg`};function jE(e){let t=e.split(`.`).pop()?.toLowerCase()??``;return AE[t]??`application/octet-stream`}function ME(e,t){if(e.length===0)return{error:`upload requires at least one file path
1268
1288
  `};if(!Bn(e[0]))return{targetRef:null,filePaths:e};let n=e[0],r=e.slice(1);return t?t.refToBackendNodeId.has(n)?r.length===0?{error:`upload requires at least one file path
1269
1289
  `}:{targetRef:n,filePaths:r}:{error:`Unknown ref "${n}"\n`}:{error:`No snapshot available. Run "snapshot" first.
1270
- `}}const ME=new Map([[`teleport`,OE],[`open`,_E],[`tab-new`,_E],[`fetch`,dw],[`goto`,vT],[`navigate`,vT],[`snapshot`,tE],[`find`,nE],[`frames`,rE],[`screenshot`,cE],[`click`,_w],[`type`,vw],[`fill`,yw],[`eval`,aw],[`eval-file`,ow],[`press`,bw],[`keydown`,xw],[`keyup`,Sw],[`go-back`,yT],[`go-forward`,bT],[`reload`,xT],[`tab-list`,vE],[`tab-close`,yE],[`close`,yE],[`dblclick`,Cw],[`hover`,ww],[`select`,Tw],[`check`,Ew],[`uncheck`,Dw],[`drag`,Ow],[`resize`,xE],[`dialog-accept`,$C],[`dialog-dismiss`,ew],[`cookie-list`,KC],[`cookie-get`,qC],[`cookie-set`,JC],[`cookie-delete`,YC],[`cookie-clear`,XC],[`localstorage-list`,fE.list],[`localstorage-get`,fE.get],[`localstorage-set`,fE.set],[`localstorage-delete`,fE.del],[`localstorage-clear`,fE.clear],[`sessionstorage-list`,pE.list],[`sessionstorage-get`,pE.get],[`sessionstorage-set`,pE.set],[`sessionstorage-delete`,pE.del],[`sessionstorage-clear`,pE.clear],[`record`,FT],[`stop-recording`,IT],[`tab-select`,bE],[`pdf`,iE],[`network-state-set`,ST],[`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=jE(i,c);if(`error`in l)return{stdout:``,stderr:l.error,exitCode:1};let{targetRef:u,filePaths:d}=l,f=[];for(let e of d){let r=await kw(n,e),i=e.split(`/`).pop()??e;f.push({name:i,type:AE(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) {
1290
+ `}}const NE=new Map([[`teleport`,kE],[`open`,vE],[`tab-new`,vE],[`fetch`,dw],[`goto`,yT],[`navigate`,yT],[`snapshot`,nE],[`find`,rE],[`frames`,iE],[`screenshot`,lE],[`click`,_w],[`type`,vw],[`fill`,yw],[`eval`,aw],[`eval-file`,ow],[`press`,bw],[`keydown`,xw],[`keyup`,Sw],[`go-back`,bT],[`go-forward`,xT],[`reload`,ST],[`tab-list`,yE],[`tab-close`,bE],[`close`,bE],[`dblclick`,Cw],[`hover`,ww],[`select`,Tw],[`check`,Ew],[`uncheck`,Dw],[`drag`,Ow],[`resize`,SE],[`dialog-accept`,$C],[`dialog-dismiss`,ew],[`cookie-list`,KC],[`cookie-get`,qC],[`cookie-set`,JC],[`cookie-delete`,YC],[`cookie-clear`,XC],[`localstorage-list`,pE.list],[`localstorage-get`,pE.get],[`localstorage-set`,pE.set],[`localstorage-delete`,pE.del],[`localstorage-clear`,pE.clear],[`sessionstorage-list`,mE.list],[`sessionstorage-get`,mE.get],[`sessionstorage-set`,mE.set],[`sessionstorage-delete`,mE.del],[`sessionstorage-clear`,mE.clear],[`record`,IT],[`stop-recording`,LT],[`tab-select`,xE],[`pdf`,aE],[`network-state-set`,CT],[`upload`,async({browser:e,fs:n,state:r,positional:i,flags:a,onTab:o})=>{let s=j(a);if(`error`in s)return{stdout:``,stderr:s.error,exitCode:1};let c=r.snapshots.get(s.targetId),l=ME(i,c);if(`error`in l)return{stdout:``,stderr:l.error,exitCode:1};let{targetRef:u,filePaths:d}=l,f=[];for(let e of d){let r=await kw(n,e),i=e.split(`/`).pop()??e;f.push({name:i,type:jE(i),base64:t(r)})}if(u){let e=c.refToBackendNodeId.get(u);await o(s.targetId,async({sessionId:t,transport:n})=>{await n.send(`DOM.enable`,{},t);let{object:r}=await n.send(`DOM.resolveNode`,{backendNodeId:e},t),i=await n.send(`Runtime.callFunctionOn`,{objectId:r.objectId,functionDeclaration:`function(filesData) {
1271
1291
  const el = this;
1272
1292
  if (el.tagName !== 'INPUT' || el.type !== 'file') {
1273
1293
  throw new Error('Element ' + el.tagName + ' is not a file input');
@@ -1298,12 +1318,12 @@ Options:
1298
1318
  el.dispatchEvent(new Event('change', { bubbles: true }));
1299
1319
  el.dispatchEvent(new Event('input', { bubbles: true }));
1300
1320
  return el.files.length;
1301
- })()`,r=await t.send(`Runtime.evaluate`,{expression:n,returnByValue:!0,awaitPromise:!1},e);if(r.exceptionDetails){let e=r.exceptionDetails.exception?.description??r.exceptionDetails.text??`File upload failed`;throw Error(e)}});let p=d.map(e=>e.split(`/`).pop()??e).join(`, `);return{stdout:`Uploaded ${d.length} file(s): ${p}\n`,stderr:``,exitCode:0}}],[`state-save`,lE],[`state-load`,uE],[`console`,VC],[`requests`,kT],[`request`,AT],[`request-headers`,jT],[`request-body`,MT],[`response-headers`,NT],[`response-body`,PT],[`mousemove`,Nw],[`mousedown`,Pw],[`mouseup`,Fw],[`mousewheel`,Iw],[`drop`,Lw],[`route`,HT],[`route-list`,UT],[`unroute`,WT],[`generate-locator`,ZC],[`highlight`,QC]]);function NE(){let e=(In.string??[]).map(e=>`--${e}`),t=new Set(In.boolean??[]);for(let[e,n]of Object.entries(In.alias??{})){let r=[e,...Array.isArray(n)?n:[n]];if(r.some(e=>t.has(e)))for(let e of r)t.add(e)}return{value:e,bool:[...[...t].map(e=>`--${e}`),`--help`,`-h`,`--no-iframes`]}}function PE(e){return e.map(e=>e===`--no-iframes`||e.startsWith(`--no-iframes=`)?e.replace(`--no-iframes`,`--_noiframes`):e)}function FE(e){return{...e,bool:[...e.bool??[],`--_noiframes`],value:[...e.value??[],`--_noiframes`]}}const IE=2e3;function LE(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 RE(e,t,n,r){if(!t||typeof e.getTabLockStats!=`function`)return r;let i=e.getTabLockStats(),a=i.totalWaitMs-t.totalWaitMs;if(a<IE)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>=IE?`${(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.
1302
- `;return{...r,stderr:r.stderr+c}}async function zE(e,t,n){let r=n instanceof Error?n.message:String(n);return{stdout:``,stderr:`Error: ${(t.tab?await Ln(e,t.tab,n):null)??r}\n`,exitCode:1}}function BE(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 VE(e,t,n){let r=ME.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?BE(e,t,void 0):a}catch(r){return i?.aborted?BE(e,t,r):await zE(n.browser,n.flags,r)}}async function HE(e,t,n,r){let i=C(PE(n),FE(r));if(`error`in i)return{answer:{stdout:``,stderr:`${e} ${t}: ${i.error}\n`,exitCode:1}};let a;try{({flags:a}=Fn(n))}catch(n){return{answer:{stdout:``,stderr:`${e} ${t}: ${n instanceof Error?n.message:String(n)}\n`,exitCode:1}}}if(a.help===`true`||a.h===`true`){let{formatSubcommandHelp:n}=await import(`./help-DvETwJex.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 UE(e,t,n,r={}){let i=t?Mn(t,n):null,a=NE();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-DvETwJex.js`);return{stdout:t(e)+`
1303
- `,stderr:``,exitCode:0}}let c=o[0],l=o.slice(1),u=await HE(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=LE(t,p),h=Qi(s.env),g=KT(r.isScoop?.()??!1,h),_=await VE(e,c,{browser:t,fs:n,state:i,positional:d,flags:f,scratchDir:h,sessionRoot:g,onTab:(e,n)=>t.withTab(e,n,{signal:s.signal}),signal:s.signal}),v=f.tab??null,ee=null;Un.has(c)&&_.exitCode===0&&v&&(ee=await JT(t,n,v,i,g));try{await YT(n,i,g,{command:c,args:l,result:_,snapshotPath:ee,targetId:v})}catch{}return RE(t,m,p,_)})}const WE=new Map([[`File operations`,[`ls`,`cat`,`head`,`tail`,`wc`,`touch`,`mkdir`,`rm`,`cp`,`mv`,`ln`,`chmod`,`stat`,`readlink`,`file`,`rmdir`,`rsync`]],[`Text processing`,[`grep`,`sed`,`awk`,`sort`,`uniq`,`cut`,`tr`,`tee`,`diff`,`patch`,`column`,`comm`,`egrep`,`fgrep`,`expand`,`unexpand`,`fold`,`join`,`nl`,`od`,`paste`,`rev`,`split`,`strings`,`tac`]],[`Search`,[`find`,`rg`]],[`Navigation & paths`,[`pwd`,`basename`,`dirname`,`tree`,`du`,`cd`]],[`Archives`,[`zip`,`unzip`,`pdftk`,`pdf`,`gunzip`,`gzip`,`zcat`]],[`Media`,[`convert`,`magick`,`pdftoppm`,`pdftocairo`,`pdftotext`,`ffmpeg`,`ffprobe`,`screencapture`]],[`Audio`,[`say`,`hear`,`afplay`,`chime`]],[`Environment & shell`,`echo.printf.env.printenv.export.alias.unalias.history.clear.true.false.bash.sh.commands.which.uname.man.host.oauth-token.secret.nuke.models.local-llm.cost.hostname.whoami.id.help.sleep.time.timeout.oauth-domain`.split(`.`)],[`Data processing`,[`xargs`,`jq`,`base64`,`date`,`expr`,`seq`]],[`Hashes`,[`md5sum`,`sha1sum`,`sha256sum`]],[`Network`,[`curl`,`curlwright`,`wget`,`dig`,`websocat`,`html-to-markdown`]],[`Version control`,[`git`]],[`Languages`,[`node`,`jsh`,`python`,`python3`,`pyodide`,`sqlite3`]],[`Virtualization`,[`v86`,`computer`]],[`Build tools`,[`tsc`,`tst`,`esbuild`,`biome`]],[`Packages`,[`ipk`,`hf`,`npm`,`i`,`ipx`,`npx`]],[`Skills`,[`skill`,`upskill`]],[`Browser & UI`,[`serve`,`open`,`imgcat`,...Vn,`sprinkle`]],[`Clipboard`,[`pbcopy`,`pbpaste`,`xclip`,`xsel`]],[`Filesystem`,[`mount`,`umount`,`fswatch`]],[`Scoops & agents`,[`agent`,`gelatiere`,`mcp`,`webhook`,`crontask`]],[`Process`,[`ps`,`kill`,`jshd`,`meminfo`,`uptime`]],[`Shell builtins (limited)`,[...w_]]]);function GE(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:
1304
- `);let a=[];for(let[e,t]of WE){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(`
1321
+ })()`,r=await t.send(`Runtime.evaluate`,{expression:n,returnByValue:!0,awaitPromise:!1},e);if(r.exceptionDetails){let e=r.exceptionDetails.exception?.description??r.exceptionDetails.text??`File upload failed`;throw Error(e)}});let p=d.map(e=>e.split(`/`).pop()??e).join(`, `);return{stdout:`Uploaded ${d.length} file(s): ${p}\n`,stderr:``,exitCode:0}}],[`state-save`,uE],[`state-load`,dE],[`console`,VC],[`requests`,AT],[`request`,jT],[`request-headers`,MT],[`request-body`,NT],[`response-headers`,PT],[`response-body`,FT],[`mousemove`,Nw],[`mousedown`,Pw],[`mouseup`,Fw],[`mousewheel`,Iw],[`drop`,Rw],[`route`,UT],[`route-list`,WT],[`unroute`,GT],[`generate-locator`,ZC],[`highlight`,QC]]);function PE(){let e=(In.string??[]).map(e=>`--${e}`),t=new Set(In.boolean??[]);for(let[e,n]of Object.entries(In.alias??{})){let r=[e,...Array.isArray(n)?n:[n]];if(r.some(e=>t.has(e)))for(let e of r)t.add(e)}return{value:e,bool:[...[...t].map(e=>`--${e}`),`--help`,`-h`,`--no-iframes`]}}function FE(e){return e.map(e=>e===`--no-iframes`||e.startsWith(`--no-iframes=`)?e.replace(`--no-iframes`,`--_noiframes`):e)}function IE(e){return{...e,bool:[...e.bool??[],`--_noiframes`],value:[...e.value??[],`--_noiframes`]}}const LE=2e3;function RE(e,t){if(typeof e.getTabLockStats!=`function`)return;let n=e.getTabLockStats();return t?{totalWaitMs:n.totalWaitMs,tabWaitMs:e.getTabLockStats(t).tabWaitMs}:{totalWaitMs:n.totalWaitMs}}function zE(e,t,n,r){if(!t||typeof e.getTabLockStats!=`function`)return r;let i=e.getTabLockStats(),a=i.totalWaitMs-t.totalWaitMs;if(a<LE)return r;let o=(a/1e3).toFixed(1),s=n&&t.tabWaitMs!==void 0?e.getTabLockStats(n).tabWaitMs-t.tabWaitMs:0,c=`note: browser bridge contended — lock waits totaled ${o}s while this command ran, ${s>=LE?`${(s/1e3).toFixed(1)}s of it waiting on this tab (--tab=${n})`:`all of it waiting on the bridge, not on this tab`} (queue depth ${i.queueDepth}). Commands on the same tab serialize; commands on different tabs run in parallel — stagger callers on THIS tab, or give each caller its own tab.
1322
+ `;return{...r,stderr:r.stderr+c}}async function BE(e,t,n){let r=n instanceof Error?n.message:String(n);return{stdout:``,stderr:`Error: ${(t.tab?await Ln(e,t.tab,n):null)??r}\n`,exitCode:1}}function VE(e,t,n){return{stdout:``,stderr:`${e} ${t}: ${n===void 0?`aborted: the caller stopped waiting for it`:n instanceof Error?n.message:String(n)}\n`,exitCode:130}}async function HE(e,t,n){let r=NE.get(t);if(!r)return{stdout:``,stderr:`Unknown command: ${t}\nRun "playwright-cli help" for usage.\n`,exitCode:1};let{signal:i}=n;try{let a=await r(n);return i?.aborted?VE(e,t,void 0):a}catch(r){return i?.aborted?VE(e,t,r):await BE(n.browser,n.flags,r)}}async function UE(e,t,n,r){let i=C(FE(n),IE(r));if(`error`in i)return{answer:{stdout:``,stderr:`${e} ${t}: ${i.error}\n`,exitCode:1}};let a;try{({flags:a}=Fn(n))}catch(n){return{answer:{stdout:``,stderr:`${e} ${t}: ${n instanceof Error?n.message:String(n)}\n`,exitCode:1}}}if(a.help===`true`||a.h===`true`){let{formatSubcommandHelp:n}=await import(`./help-Da2S8Plv.js`);return{answer:{stdout:n(e,t),stderr:``,exitCode:0}}}let o=null;try{let{validateSubcommandArgs:r}=await import(`./validate-args-BcxRh84E.js`);o=r(e,t,n,i.positionals)}catch{o=null}return o?{answer:{stdout:``,stderr:o,exitCode:1}}:{positional:i.positionals,flags:a}}function WE(e,t,n,r={}){let i=t?Mn(t,n):null,a=PE();return S(e,async(o,s)=>{if(o.length===0||o[0]===`help`||o[0]===`--help`||o[0]===`-h`){let{formatHelp:t}=await import(`./help-Da2S8Plv.js`);return{stdout:t(e)+`
1323
+ `,stderr:``,exitCode:0}}let c=o[0],l=o.slice(1),u=await UE(e,c,l,a);if(`answer`in u)return u.answer;let{positional:d,flags:f}=u;if(!t||!i)return{stdout:``,stderr:`${e}: browser APIs are unavailable in this environment\n`,exitCode:1};let p=f.tab??null,m=RE(t,p),h=Qi(s.env),g=qT(r.isScoop?.()??!1,h),_=await HE(e,c,{browser:t,fs:n,state:i,positional:d,flags:f,scratchDir:h,sessionRoot:g,onTab:(e,n)=>t.withTab(e,n,{signal:s.signal}),signal:s.signal}),v=f.tab??null,ee=null;Un.has(c)&&_.exitCode===0&&v&&(ee=await YT(t,n,v,i,g));try{await XT(n,i,g,{command:c,args:l,result:_,snapshotPath:ee,targetId:v})}catch{}return zE(t,m,p,_)})}const GE=new Map([[`File operations`,[`ls`,`cat`,`head`,`tail`,`wc`,`touch`,`mkdir`,`rm`,`cp`,`mv`,`ln`,`chmod`,`stat`,`readlink`,`file`,`rmdir`,`rsync`]],[`Text processing`,[`grep`,`sed`,`awk`,`sort`,`uniq`,`cut`,`tr`,`tee`,`diff`,`patch`,`column`,`comm`,`egrep`,`fgrep`,`expand`,`unexpand`,`fold`,`join`,`nl`,`od`,`paste`,`rev`,`split`,`strings`,`tac`]],[`Search`,[`find`,`rg`]],[`Navigation & paths`,[`pwd`,`basename`,`dirname`,`tree`,`du`,`cd`]],[`Archives`,[`zip`,`unzip`,`pdftk`,`pdf`,`gunzip`,`gzip`,`zcat`]],[`Media`,[`convert`,`magick`,`pdftoppm`,`pdftocairo`,`pdftotext`,`ffmpeg`,`ffprobe`,`screencapture`]],[`Audio`,[`say`,`hear`,`afplay`,`chime`]],[`Environment & shell`,`echo.printf.env.printenv.export.alias.unalias.history.clear.true.false.bash.sh.commands.which.uname.man.host.oauth-token.secret.nuke.models.local-llm.cost.hostname.whoami.id.help.sleep.time.timeout.oauth-domain`.split(`.`)],[`Data processing`,[`xargs`,`jq`,`base64`,`date`,`expr`,`seq`]],[`Hashes`,[`md5sum`,`sha1sum`,`sha256sum`]],[`Network`,[`curl`,`curlwright`,`wget`,`dig`,`websocat`,`html-to-markdown`]],[`Version control`,[`git`]],[`Languages`,[`node`,`jsh`,`python`,`python3`,`pyodide`,`sqlite3`]],[`Virtualization`,[`v86`,`computer`]],[`Build tools`,[`tsc`,`tst`,`esbuild`,`biome`]],[`Packages`,[`ipk`,`hf`,`npm`,`i`,`ipx`,`npx`]],[`Skills`,[`skill`,`upskill`]],[`Browser & UI`,[`serve`,`open`,`imgcat`,...Vn,`sprinkle`]],[`Clipboard`,[`pbcopy`,`pbpaste`,`xclip`,`xsel`]],[`Filesystem`,[`mount`,`umount`,`fswatch`]],[`Scoops & agents`,[`agent`,`gelatiere`,`mcp`,`webhook`,`crontask`]],[`Process`,[`ps`,`kill`,`jshd`,`meminfo`,`uptime`]],[`Shell builtins (limited)`,[...w_]]]);function KE(e,t=[],n=[]){let r=[],i=new Set(e);for(let e of t)i.delete(e);for(let e of n)i.delete(e);r.push(`Available commands:
1324
+ `);let a=[];for(let[e,t]of GE){let n=t.filter(e=>i.has(e));if(n.length>0){r.push(` ${e}:`),r.push(` ${n.join(`, `)}\n`);for(let e of n)i.delete(e)}}for(let e of i)a.push(e);return a.length>0&&(r.push(` Other:`),r.push(` ${a.sort().join(`, `)}\n`)),t.length>0&&(r.push(` User scripts (.jsh):`),r.push(` ${t.sort().join(`, `)}\n`)),n.length>0&&(r.push(` Workflows:`),r.push(` ${n.sort().join(`, `)}\n`)),r.push(`Use '<command> --help' for details on a specific command.`),r.join(`
1305
1325
  `)+`
1306
- `}function KE(e={}){return S(`commands`,async(t,n)=>{if(t.includes(`--help`)||t.includes(`-h`))return{stdout:`commands - display available commands
1326
+ `}function qE(e={}){return S(`commands`,async(t,n)=>{if(t.includes(`--help`)||t.includes(`-h`))return{stdout:`commands - display available commands
1307
1327
 
1308
1328
  Usage: commands [command]
1309
1329
 
@@ -1314,7 +1334,7 @@ If a command name is provided, shows help for that command.
1314
1334
  Otherwise, lists all available commands.
1315
1335
 
1316
1336
  Note: This is an enhanced version of 'help' that shows all custom commands.
1317
- `,stderr:``,exitCode:0};if(t.length>0&&n.exec){let e=t[0];return n.exec(`${e} --help`,{cwd:n.cwd})}return{stdout:GE(n.getRegisteredCommands?.()??[],await e.getJshCommands?.()??[],await e.getWorkflowCommands?.()??[]),stderr:``,exitCode:0}})}function qE(e){return{stdout:`hf - download model repos from the Hugging Face Hub into the VFS
1337
+ `,stderr:``,exitCode:0};if(t.length>0&&n.exec){let e=t[0];return n.exec(`${e} --help`,{cwd:n.cwd})}return{stdout:KE(n.getRegisteredCommands?.()??[],await e.getJshCommands?.()??[],await e.getWorkflowCommands?.()??[]),stderr:``,exitCode:0}})}function JE(e){return{stdout:`hf - download model repos from the Hugging Face Hub into the VFS
1318
1338
 
1319
1339
  Usage:
1320
1340
  hf download <repo> [files...] [--to <dir>] [--revision <rev>] [--force]
@@ -1345,8 +1365,8 @@ Notes:
1345
1365
  - Background-job logs get a progress line every few seconds.
1346
1366
  - Weights are read by the speech engines via the preview SW from the
1347
1367
  target directory; transformers expects <localModelPath>/<repo>/.
1348
- `,stderr:``,exitCode:e}}function JE(e){return{stdout:``,stderr:`hf: ${e}\n`,exitCode:1}}const YE=/^[A-Za-z0-9_.-]+\/[A-Za-z0-9_.-]+$/;function XE(e,t){if(typeof t!=`string`)return{error:`${e} requires a value`};let n=Number(t);return!/^\d+$/.test(t)||!Number.isSafeInteger(n)||n<1?{error:`${e} must be a positive integer, got '${t}'`}:n}function ZE(e){let t=null,n=`main`,r=!1,i,a,o=[],s=0;for(;s<e.length;){let c=e[s];if(c===`--concurrency`||c===`-j`||c===`--max-in-flight-mb`){let t=XE(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 YE.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 QE(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 $E=class{filesTotal;bytesTotal;now;filesDone=0;bytesDone=0;bytesFetched=0;lastLineAt=-1/0;startedAt;constructor(e,t,n=Date.now){this.filesTotal=e,this.bytesTotal=t,this.now=n,this.startedAt=n()}listed(e,t){this.filesTotal=e,this.bytesTotal=t>0?t:void 0}file(e,t){this.filesDone+=1,this.bytesDone+=t,e===`downloaded`&&(this.bytesFetched+=t)}rate(){let e=(this.now()-this.startedAt)/1e3;return e>0?this.bytesFetched/e:0}elapsedMs(){return this.now()-this.startedAt}line(){let e=this.now();if(!(this.filesDone>=this.filesTotal)&&e-this.lastLineAt<5e3)return null;this.lastLineAt=e;let t=this.rate(),n=eb(this.bytesDone),r=``;if(this.bytesTotal!==void 0){n+=` of ${eb(this.bytesTotal)}`;let e=this.bytesTotal-this.bytesDone;t>0&&e>0&&(r=`, ~${QE(e/t*1e3)} left`)}return`hf: ${this.filesDone}/${this.filesTotal} files, ${n}, ${eb(t)}/s${r}\n`}};function eD(e){let t=e;return typeof t.writeStdout==`function`?t.writeStdout.bind(t):void 0}async function tD(e,t,n,r){let i=ZE(e);if(`error`in i)return JE(i.error);let a=$i(i.repo,i.to,t.cwd),{downloadHfRepo:o,HfFileDownloadError:s}=await import(`./hf-download-CNg2vD63.js`),c=eD(t),l=new $E(i.files.length,void 0,r),u=``;try{let e=await o({fetch:n.fetch,streamFetch:n.streamFetch,fs:t.fs,repo:i.repo,targetDir:a,files:i.files,revision:i.revision,force:i.force,concurrency:i.concurrency,maxBytesInFlight:i.maxInFlightMb===void 0?void 0:i.maxInFlightMb*1024*1024,signal:t.signal,endpoint:t.env.get(`HF_ENDPOINT`),progress:{onListed:({files:e,totalBytes:t})=>{l.listed(e.length,t);let n=`hf: ${e.length} file(s) listed in ${i.repo}@${i.revision}\n`;u+=n,c?.(n)},onFile:e=>{u+=e.status===`downloaded`?`hf: downloaded ${e.file} (${eb(e.bytes)})\n`:`hf: skipped ${e.file} (already at ${a})\n`,l.file(e.status,e.bytes);let t=c?l.line():null;t&&c?.(t)}}}),r=e.downloaded>0?` in ${QE(l.elapsedMs())} (${eb(l.rate())}/s)`:``,s=`hf: ${e.downloaded} downloaded, ${e.skipped} skipped, ${eb(e.totalBytes)} total into ${a}${r}\n`;return{stdout:``,stderr:u+s,exitCode:0}}catch(e){return e instanceof s?(u+=`hf: failed ${e.file}: ${e.message}\n`,{stdout:``,stderr:u,exitCode:1}):JE(e instanceof Error?e.message:String(e))}}const nD=[`--to`,`--revision`,`--rev`,`--concurrency`,`-j`,`--max-in-flight-mb`];function rD(e){let t=e.now??Date.now;return{name:`hf`,async execute(n,r){if(n.length===0||w(n,{valueFlags:nD}))return qE(+(n.length===0));let i=n[0];return i===`download`?tD(n.slice(1),r,e,t):JE(`unknown subcommand: ${i}`)}}}const iD=new Set([`--vid`,`--pid`,`--usage-page`,`--usage`,`--__resolved`,`--timeout`]);function aD(e){return Dn(e,iD)}function oD(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 sD(e){let t={};return e.has(`--vid`)&&(t.vendorId=oD(e.get(`--vid`),`vid`)),e.has(`--pid`)&&(t.productId=oD(e.get(`--pid`),`pid`)),e.has(`--usage-page`)&&(t.usagePage=oD(e.get(`--usage-page`),`usage-page`)),e.has(`--usage`)&&(t.usage=oD(e.get(`--usage`),`usage`)),Object.keys(t).length>0?[t]:[]}function cD(e){let t=pi(e.stdin),n=new Uint8Array(t.length);for(let e=0;e<t.length;e++)n[e]=t.charCodeAt(e)&255;return n}function lD(e){return Array.from(e,e=>e.toString(16).padStart(2,`0`)).join(` `)}function uD(e){return e.toString(16).padStart(2,`0`)}function dD(e){return`0x${e.toString(16).padStart(4,`0`)}`}function fD(e){let t=e.productName||`(unknown)`,n=e.opened?` [open]`:``,r=e.usagePage===void 0?``:`\t${dD(e.usagePage)}:${dD(e.usage??0)}`;return`${e.handle}\t${dD(e.vendorId)}:${dD(e.productId)}${r}\t${t}${n}`}function pD(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 mD(e){return`${e.map(fD).join(`
1349
- `)}\n`}function hD(e){return`${uD(e.reportId)} ${lD(e.bytes)}`.trimEnd()}function gD(e){return{stdout:e,stderr:``,exitCode:0}}function U(e){return{stdout:``,stderr:`hid: ${e}\n`,exitCode:1}}const _D=`hid - access HID devices via WebHID
1368
+ `,stderr:``,exitCode:e}}function YE(e){return{stdout:``,stderr:`hf: ${e}\n`,exitCode:1}}const XE=/^[A-Za-z0-9_.-]+\/[A-Za-z0-9_.-]+$/;function ZE(e,t){if(typeof t!=`string`)return{error:`${e} requires a value`};let n=Number(t);return!/^\d+$/.test(t)||!Number.isSafeInteger(n)||n<1?{error:`${e} must be a positive integer, got '${t}'`}:n}function QE(e){let t=null,n=`main`,r=!1,i,a,o=[],s=0;for(;s<e.length;){let c=e[s];if(c===`--concurrency`||c===`-j`||c===`--max-in-flight-mb`){let t=ZE(c,e[s+1]);if(typeof t!=`number`)return t;c===`--max-in-flight-mb`?a=t:i=t,s+=2;continue}if(c===`--to`){let n=e[s+1];if(typeof n!=`string`)return{error:`--to requires a value`};t=n,s+=2;continue}if(c===`--revision`||c===`--rev`){let t=e[s+1];if(typeof t!=`string`)return{error:`${c} requires a value`};n=t,s+=2;continue}if(c===`--force`||c===`-f`){r=!0,s+=1;continue}if(c.startsWith(`--`))return{error:`unknown option: ${c}`};o.push(c),s+=1}if(o.length===0)return{error:`download requires <repo>`};let c=o[0];return XE.test(c)?{repo:c,files:o.slice(1),to:t,revision:n,force:r,concurrency:i,maxInFlightMb:a}:{error:`invalid repo '${c}' — expected <owner>/<name>`}}function $E(e){let t=Math.max(0,Math.round(e/1e3));if(t<60)return`${t}s`;let n=Math.floor(t/60);return n<60?`${n}m ${t%60}s`:`${Math.floor(n/60)}h ${n%60}m`}var eD=class{filesTotal;bytesTotal;now;filesDone=0;bytesDone=0;bytesFetched=0;lastLineAt=-1/0;startedAt;constructor(e,t,n=Date.now){this.filesTotal=e,this.bytesTotal=t,this.now=n,this.startedAt=n()}listed(e,t){this.filesTotal=e,this.bytesTotal=t>0?t:void 0}file(e,t){this.filesDone+=1,this.bytesDone+=t,e===`downloaded`&&(this.bytesFetched+=t)}rate(){let e=(this.now()-this.startedAt)/1e3;return e>0?this.bytesFetched/e:0}elapsedMs(){return this.now()-this.startedAt}line(){let e=this.now();if(!(this.filesDone>=this.filesTotal)&&e-this.lastLineAt<5e3)return null;this.lastLineAt=e;let t=this.rate(),n=eb(this.bytesDone),r=``;if(this.bytesTotal!==void 0){n+=` of ${eb(this.bytesTotal)}`;let e=this.bytesTotal-this.bytesDone;t>0&&e>0&&(r=`, ~${$E(e/t*1e3)} left`)}return`hf: ${this.filesDone}/${this.filesTotal} files, ${n}, ${eb(t)}/s${r}\n`}};function tD(e){let t=e;return typeof t.writeStdout==`function`?t.writeStdout.bind(t):void 0}async function nD(e,t,n,r){let i=QE(e);if(`error`in i)return YE(i.error);let a=$i(i.repo,i.to,t.cwd),{downloadHfRepo:o,HfFileDownloadError:s}=await import(`./hf-download-CNg2vD63.js`),c=tD(t),l=new eD(i.files.length,void 0,r),u=``;try{let e=await o({fetch:n.fetch,streamFetch:n.streamFetch,fs:t.fs,repo:i.repo,targetDir:a,files:i.files,revision:i.revision,force:i.force,concurrency:i.concurrency,maxBytesInFlight:i.maxInFlightMb===void 0?void 0:i.maxInFlightMb*1024*1024,signal:t.signal,endpoint:t.env.get(`HF_ENDPOINT`),progress:{onListed:({files:e,totalBytes:t})=>{l.listed(e.length,t);let n=`hf: ${e.length} file(s) listed in ${i.repo}@${i.revision}\n`;u+=n,c?.(n)},onFile:e=>{u+=e.status===`downloaded`?`hf: downloaded ${e.file} (${eb(e.bytes)})\n`:`hf: skipped ${e.file} (already at ${a})\n`,l.file(e.status,e.bytes);let t=c?l.line():null;t&&c?.(t)}}}),r=e.downloaded>0?` in ${$E(l.elapsedMs())} (${eb(l.rate())}/s)`:``,s=`hf: ${e.downloaded} downloaded, ${e.skipped} skipped, ${eb(e.totalBytes)} total into ${a}${r}\n`;return{stdout:``,stderr:u+s,exitCode:0}}catch(e){return e instanceof s?(u+=`hf: failed ${e.file}: ${e.message}\n`,{stdout:``,stderr:u,exitCode:1}):YE(e instanceof Error?e.message:String(e))}}const rD=[`--to`,`--revision`,`--rev`,`--concurrency`,`-j`,`--max-in-flight-mb`];function iD(e){let t=e.now??Date.now;return{name:`hf`,async execute(n,r){if(n.length===0||w(n,{valueFlags:rD}))return JE(+(n.length===0));let i=n[0];return i===`download`?nD(n.slice(1),r,e,t):YE(`unknown subcommand: ${i}`)}}}const aD=new Set([`--vid`,`--pid`,`--usage-page`,`--usage`,`--__resolved`,`--timeout`]);function oD(e){return Dn(e,aD)}function sD(e,t){let n=/^0x/i.test(e)?parseInt(e,16):parseInt(e,10);if(!Number.isFinite(n)||Number.isNaN(n))throw Error(`invalid ${t}: '${e}'`);return n}function cD(e){let t={};return e.has(`--vid`)&&(t.vendorId=sD(e.get(`--vid`),`vid`)),e.has(`--pid`)&&(t.productId=sD(e.get(`--pid`),`pid`)),e.has(`--usage-page`)&&(t.usagePage=sD(e.get(`--usage-page`),`usage-page`)),e.has(`--usage`)&&(t.usage=sD(e.get(`--usage`),`usage`)),Object.keys(t).length>0?[t]:[]}function lD(e){let t=pi(e.stdin),n=new Uint8Array(t.length);for(let e=0;e<t.length;e++)n[e]=t.charCodeAt(e)&255;return n}function uD(e){return Array.from(e,e=>e.toString(16).padStart(2,`0`)).join(` `)}function dD(e){return e.toString(16).padStart(2,`0`)}function fD(e){return`0x${e.toString(16).padStart(4,`0`)}`}function pD(e){let t=e.productName||`(unknown)`,n=e.opened?` [open]`:``,r=e.usagePage===void 0?``:`\t${fD(e.usagePage)}:${fD(e.usage??0)}`;return`${e.handle}\t${fD(e.vendorId)}:${fD(e.productId)}${r}\t${t}${n}`}function mD(e,t){let n=t?.usagePage,r=t?.usage;if(n===void 0&&r===void 0)return e;let i=e.findIndex(e=>(n===void 0||e.usagePage===n)&&(r===void 0||e.usage===r));if(i<=0)return e;let a=e.slice(),[o]=a.splice(i,1);return a.unshift(o),a}function hD(e){return`${e.map(pD).join(`
1369
+ `)}\n`}function gD(e){return`${dD(e.reportId)} ${uD(e.bytes)}`.trimEnd()}function _D(e){return{stdout:e,stderr:``,exitCode:0}}function U(e){return{stdout:``,stderr:`hid: ${e}\n`,exitCode:1}}const vD=`hid - access HID devices via WebHID
1350
1370
 
1351
1371
  Usage: hid <subcommand> [options]
1352
1372
 
@@ -1370,10 +1390,10 @@ Options:
1370
1390
  -h, --help
1371
1391
 
1372
1392
  Report payloads are capped at ${Yr} bytes (4 MiB).
1373
- `;function vD(e,t){if(t){let t=``;for(let n=0;n<e.length;n++)t+=String.fromCharCode(e[n]);return gD(t)}return gD(e.length?`${lD(e)}\n`:``)}function yD(e){return!e||e.aborted?Promise.resolve():new Promise(t=>{e.addEventListener(`abort`,()=>t(),{once:!0})})}async function bD(e){let t=await e.list();return t.length===0?gD(`no granted HID devices
1374
- `):gD(`${t.map(fD).join(`
1375
- `)}\n`)}async function xD(e,t){let n=e.get(`--__resolved`),r=sD(e),i=r[0];if(n){let e=n.split(`,`).filter(e=>e.length>0);return e.length===0?U(`request: missing resolved handle`):gD(mD(pD(await Promise.all(e.map(e=>t.info(e))),i)))}let a=ke();return a?SD(r,i,a,t):gD(mD(pD(await t.request(r),i)))}async function SD(e,t,n,r){let i=await cS(`hid-device`,e,n),a,o;if(i.handle){let e=await r.info(i.handle);a=e.vendorId,o=e.productId}else{let e=i.info,t=Jr();if(!t)return U(`request: WebHID unavailable for device re-acquire`);let n=await t.getDevices(),r=Hr(),s=n.filter(t=>t.vendorId===e.vendorId&&t.productId===e.productId);if(s.length===0)return U(`request: granted device could not be re-acquired`);for(let e of s)r.register(e);a=e.vendorId,o=e.productId}let s=(await r.list()).filter(e=>e.vendorId===a&&e.productId===o),c=pD(s.length>0?s:[],t);return c.length===0?U(`request: granted device could not be re-acquired`):gD(mD(c))}async function CD(e,t,n){let r=t[1];return r?(e===`open`?await n.open(r):await n.close(r),gD(``)):U(`${e}: handle required`)}async function wD(e,t,n,r){let[,i,a]=t;if(!i||a===void 0)return U(`${e}: handle and report-id required`);let o=oD(a,`report-id`),s=cD(n);return s.length>4194304?U(`${e} payload exceeds 4 MiB limit`):(e===`send`?await r.sendReport(i,o,s):await r.sendFeatureReport(i,o,s),gD(``))}async function TD(e,t,n){let[,r,i]=e;return!r||i===void 0?U(`feature-get: handle and report-id required`):vD((await t.receiveFeatureReport(r,oD(i,`report-id`))).bytes,n)}async function ED(e,t,n){let r=e[1];if(!r)return U(`watch: handle required`);let i=[],a=await n.subscribeInputReports(r,e=>{i.push(hD(e))});try{await yD(t.signal)}finally{await a()}return gD(i.length?`${i.join(`
1376
- `)}\n`:``)}async function DD(e,t,n,r,i){let[,a,o]=e;if(!a||o===void 0)return U(`query: handle and report-id required`);let s=oD(o,`report-id`),c=cD(t);if(c.length>4194304)return U(`query payload exceeds 4 MiB limit`);let l=n.has(`--timeout`)?oD(n.get(`--timeout`),`timeout`):1e3,u=()=>{},d=new Promise(e=>{u=e}),f=await r.subscribeInputReports(a,e=>{u(e)}),p;try{await r.sendReport(a,s,c);let e=new Promise(e=>{p=setTimeout(()=>e(`timeout`),l)}),t=await Promise.race([d,e]);return t===`timeout`?U(`query: no input report within ${l}ms`):i?vD(t.bytes,!0):gD(`${hD(t)}\n`)}finally{p!==void 0&&clearTimeout(p),await f()}}async function OD(e,t,n){let{positionals:r,flags:i,bools:a}=aD(e),o=r[0],s=a.has(`--raw`);switch(o){case`list`:return bD(n);case`request`:return xD(i,n);case`open`:case`close`:return CD(o,r,n);case`send`:case`feature-send`:return wD(o,r,t,n);case`feature-get`:return TD(r,n,s);case`watch`:return ED(r,t,n);case`query`:return DD(r,t,i,n,s);default:return U(`unknown subcommand '${o??``}'. Try 'hid --help'.`)}}function kD(){return S(`hid`,async(e,t)=>{if(e.length===0||e.includes(`--help`)||e.includes(`-h`))return gD(_D);let n=Zr(le(),y());if(!n)return U(`WebHID is unavailable in this environment`);try{return await OD(e,t,n)}catch(e){let t=e instanceof Error?e.message:String(e);return/cancelled|NotFoundError|No device selected/i.test(t)?U(`user cancelled or no device selected`):U(t)}})}const AD=1e3,jD=`usage: id [-u|-g|-G] [-n] [-r] [USER]`,MD=`${jD}
1393
+ `;function yD(e,t){if(t){let t=``;for(let n=0;n<e.length;n++)t+=String.fromCharCode(e[n]);return _D(t)}return _D(e.length?`${uD(e)}\n`:``)}function bD(e){return!e||e.aborted?Promise.resolve():new Promise(t=>{e.addEventListener(`abort`,()=>t(),{once:!0})})}async function xD(e){let t=await e.list();return t.length===0?_D(`no granted HID devices
1394
+ `):_D(`${t.map(pD).join(`
1395
+ `)}\n`)}async function SD(e,t){let n=e.get(`--__resolved`),r=cD(e),i=r[0];if(n){let e=n.split(`,`).filter(e=>e.length>0);return e.length===0?U(`request: missing resolved handle`):_D(hD(mD(await Promise.all(e.map(e=>t.info(e))),i)))}let a=ke();return a?CD(r,i,a,t):_D(hD(mD(await t.request(r),i)))}async function CD(e,t,n,r){let i=await cS(`hid-device`,e,n),a,o;if(i.handle){let e=await r.info(i.handle);a=e.vendorId,o=e.productId}else{let e=i.info,t=Jr();if(!t)return U(`request: WebHID unavailable for device re-acquire`);let n=await t.getDevices(),r=Hr(),s=n.filter(t=>t.vendorId===e.vendorId&&t.productId===e.productId);if(s.length===0)return U(`request: granted device could not be re-acquired`);for(let e of s)r.register(e);a=e.vendorId,o=e.productId}let s=(await r.list()).filter(e=>e.vendorId===a&&e.productId===o),c=mD(s.length>0?s:[],t);return c.length===0?U(`request: granted device could not be re-acquired`):_D(hD(c))}async function wD(e,t,n){let r=t[1];return r?(e===`open`?await n.open(r):await n.close(r),_D(``)):U(`${e}: handle required`)}async function TD(e,t,n,r){let[,i,a]=t;if(!i||a===void 0)return U(`${e}: handle and report-id required`);let o=sD(a,`report-id`),s=lD(n);return s.length>4194304?U(`${e} payload exceeds 4 MiB limit`):(e===`send`?await r.sendReport(i,o,s):await r.sendFeatureReport(i,o,s),_D(``))}async function ED(e,t,n){let[,r,i]=e;return!r||i===void 0?U(`feature-get: handle and report-id required`):yD((await t.receiveFeatureReport(r,sD(i,`report-id`))).bytes,n)}async function DD(e,t,n){let r=e[1];if(!r)return U(`watch: handle required`);let i=[],a=await n.subscribeInputReports(r,e=>{i.push(gD(e))});try{await bD(t.signal)}finally{await a()}return _D(i.length?`${i.join(`
1396
+ `)}\n`:``)}async function OD(e,t,n,r,i){let[,a,o]=e;if(!a||o===void 0)return U(`query: handle and report-id required`);let s=sD(o,`report-id`),c=lD(t);if(c.length>4194304)return U(`query payload exceeds 4 MiB limit`);let l=n.has(`--timeout`)?sD(n.get(`--timeout`),`timeout`):1e3,u=()=>{},d=new Promise(e=>{u=e}),f=await r.subscribeInputReports(a,e=>{u(e)}),p;try{await r.sendReport(a,s,c);let e=new Promise(e=>{p=setTimeout(()=>e(`timeout`),l)}),t=await Promise.race([d,e]);return t===`timeout`?U(`query: no input report within ${l}ms`):i?yD(t.bytes,!0):_D(`${gD(t)}\n`)}finally{p!==void 0&&clearTimeout(p),await f()}}async function kD(e,t,n){let{positionals:r,flags:i,bools:a}=oD(e),o=r[0],s=a.has(`--raw`);switch(o){case`list`:return xD(n);case`request`:return SD(i,n);case`open`:case`close`:return wD(o,r,n);case`send`:case`feature-send`:return TD(o,r,t,n);case`feature-get`:return ED(r,n,s);case`watch`:return DD(r,t,n);case`query`:return OD(r,t,i,n,s);default:return U(`unknown subcommand '${o??``}'. Try 'hid --help'.`)}}function AD(){return S(`hid`,async(e,t)=>{if(e.length===0||e.includes(`--help`)||e.includes(`-h`))return _D(vD);let n=Zr(le(),y());if(!n)return U(`WebHID is unavailable in this environment`);try{return await kD(e,t,n)}catch(e){let t=e instanceof Error?e.message:String(e);return/cancelled|NotFoundError|No device selected/i.test(t)?U(`user cancelled or no device selected`):U(t)}})}const jD=1e3,MD=`usage: id [-u|-g|-G] [-n] [-r] [USER]`,ND=`${MD}
1377
1397
 
1378
1398
  Print the user and group identity of this SLICC runtime.
1379
1399
 
@@ -1388,22 +1408,22 @@ Options:
1388
1408
  --version Print the SLICC build.
1389
1409
 
1390
1410
  Identity comes from the home directory, which is where the rest of the shell
1391
- gets it too. A cone is the human user (uid ${AD}, one per runtime, since every
1411
+ gets it too. A cone is the human user (uid ${jD}, one per runtime, since every
1392
1412
  cone shares one home); a scoop is a service identity whose uid is derived from
1393
1413
  its folder name, so it is stable across reloads and distinct per scoop.
1394
1414
  Every user is in a user-private group of the same name, plus the role group
1395
1415
  \`cone\` (10) or \`scoop\` (20).
1396
- `,ND=`/scoops/`;function PD(e){let t=2166136261;for(let n=0;n<e.length;n++)t^=e.charCodeAt(n),t=Math.imul(t,16777619)>>>0;return 2e3+t%58e3}function FD(e,t){return{name:e,uid:t===`cone`?AD:PD(e),role:t}}function ID(e){return[{gid:e.uid,name:e.name},e.role===`cone`?{gid:10,name:`cone`}:{gid:20,name:`scoop`}]}function LD(e,t){return`${e}(${t})`}function RD(e){let t=ID(e),n=t[0];return`uid=${LD(e.uid,e.name)} gid=${LD(n.gid,n.name)} groups=${t.map(e=>LD(e.gid,e.name)).join(`,`)}\n`}async function zD(e){let t=e.env.get(`HOME`)??``,n=t.startsWith(ND)?`scoop`:`cone`,r=e.env.get(`USER`)||BD(t,n);return r?FD(r,n):FD(mp(await pp(VD(e.fs))),`cone`)}function BD(e,t){return e===``?``:t===`cone`?mp(e):e.slice(8).split(`/`)[0]??``}function VD(e){return{readDir:async t=>(await e.readdirWithFileTypes?.(t)??[]).map(e=>({name:e.name,type:e.isDirectory?`directory`:`file`})),stat:async t=>({mtime:(await e.stat(t)).mtime.getTime()})}}async function HD(e,t){return await e.fs.exists(`/home/${t}`).catch(()=>!1)?FD(t,`cone`):await e.fs.exists(`${ND}${t}`).catch(()=>!1)?FD(t,`scoop`):null}function UD(e){let t={select:`all`,names:!1,mode:`run`},n=[];for(let r of e){if(r===`--help`||r===`-h`)return{...t,mode:`help`};if(r===`--version`)return{...t,mode:`version`};let e=GD[r];if(e){e(t);continue}if(r.length>1&&r.startsWith(`-`)){for(let e of r.slice(1)){let n=WD[e];if(!n)return{error:`unrecognized option '-${e}'`};n(t)}continue}n.push(r)}return n.length>1?{error:`extra operand '${n[1]}'`}:(n[0]!==void 0&&(t.operand=n[0]),t.names&&t.select===`all`?{error:`cannot print only names in default format`}:t)}const WD={u:e=>{e.select=`user`},g:e=>{e.select=`group`},G:e=>{e.select=`groups`},n:e=>{e.names=!0},r:()=>void 0},GD={"--user":WD.u,"--group":WD.g,"--groups":WD.G,"--name":WD.n,"--real":WD.r};function KD(e,t){let n=ID(e),r=(e,n)=>t.names?n:String(e);switch(t.select){case`user`:return`${r(e.uid,e.name)}\n`;case`group`:return`${r(n[0].gid,n[0].name)}\n`;case`groups`:return`${n.map(e=>r(e.gid,e.name)).join(` `)}\n`;case`all`:return RD(e)}}function qD(){return S(`id`,async(e,t)=>{let n=UD(e);if(`error`in n)return{stdout:``,stderr:`id: ${n.error}\n${jD}\n`,exitCode:1};if(n.mode===`help`)return YD(MD);if(n.mode===`version`)return YD(`id (SLICC) ${et().version}\n`);let r=n.operand===void 0?await zD(t):await HD(t,n.operand);return r?YD(KD(r,n)):{stdout:``,stderr:`id: '${n.operand}': no such user\n`,exitCode:1}})}function JD(){return S(`whoami`,async(e,t)=>YD(`${(await zD(t)).name}\n`))}function YD(e){return{stdout:e,stderr:``,exitCode:0}}function XD(){return{stdout:`imgcat - preview image and video files in the preview tab
1416
+ `,PD=`/scoops/`;function FD(e){let t=2166136261;for(let n=0;n<e.length;n++)t^=e.charCodeAt(n),t=Math.imul(t,16777619)>>>0;return 2e3+t%58e3}function ID(e,t){return{name:e,uid:t===`cone`?jD:FD(e),role:t}}function LD(e){return[{gid:e.uid,name:e.name},e.role===`cone`?{gid:10,name:`cone`}:{gid:20,name:`scoop`}]}function RD(e,t){return`${e}(${t})`}function zD(e){let t=LD(e),n=t[0];return`uid=${RD(e.uid,e.name)} gid=${RD(n.gid,n.name)} groups=${t.map(e=>RD(e.gid,e.name)).join(`,`)}\n`}async function BD(e){let t=e.env.get(`HOME`)??``,n=t.startsWith(PD)?`scoop`:`cone`,r=e.env.get(`USER`)||VD(t,n);return r?ID(r,n):ID(mp(await pp(HD(e.fs))),`cone`)}function VD(e,t){return e===``?``:t===`cone`?mp(e):e.slice(8).split(`/`)[0]??``}function HD(e){return{readDir:async t=>(await e.readdirWithFileTypes?.(t)??[]).map(e=>({name:e.name,type:e.isDirectory?`directory`:`file`})),stat:async t=>({mtime:(await e.stat(t)).mtime.getTime()})}}async function UD(e,t){return await e.fs.exists(`/home/${t}`).catch(()=>!1)?ID(t,`cone`):await e.fs.exists(`${PD}${t}`).catch(()=>!1)?ID(t,`scoop`):null}function WD(e){let t={select:`all`,names:!1,mode:`run`},n=[];for(let r of e){if(r===`--help`||r===`-h`)return{...t,mode:`help`};if(r===`--version`)return{...t,mode:`version`};let e=KD[r];if(e){e(t);continue}if(r.length>1&&r.startsWith(`-`)){for(let e of r.slice(1)){let n=GD[e];if(!n)return{error:`unrecognized option '-${e}'`};n(t)}continue}n.push(r)}return n.length>1?{error:`extra operand '${n[1]}'`}:(n[0]!==void 0&&(t.operand=n[0]),t.names&&t.select===`all`?{error:`cannot print only names in default format`}:t)}const GD={u:e=>{e.select=`user`},g:e=>{e.select=`group`},G:e=>{e.select=`groups`},n:e=>{e.names=!0},r:()=>void 0},KD={"--user":GD.u,"--group":GD.g,"--groups":GD.G,"--name":GD.n,"--real":GD.r};function qD(e,t){let n=LD(e),r=(e,n)=>t.names?n:String(e);switch(t.select){case`user`:return`${r(e.uid,e.name)}\n`;case`group`:return`${r(n[0].gid,n[0].name)}\n`;case`groups`:return`${n.map(e=>r(e.gid,e.name)).join(` `)}\n`;case`all`:return zD(e)}}function JD(){return S(`id`,async(e,t)=>{let n=WD(e);if(`error`in n)return{stdout:``,stderr:`id: ${n.error}\n${MD}\n`,exitCode:1};if(n.mode===`help`)return XD(ND);if(n.mode===`version`)return XD(`id (SLICC) ${et().version}\n`);let r=n.operand===void 0?await BD(t):await UD(t,n.operand);return r?XD(qD(r,n)):{stdout:``,stderr:`id: '${n.operand}': no such user\n`,exitCode:1}})}function YD(){return S(`whoami`,async(e,t)=>XD(`${(await BD(t)).name}\n`))}function XD(e){return{stdout:e,stderr:``,exitCode:0}}function ZD(){return{stdout:`imgcat - preview image and video files in the preview tab
1397
1417
 
1398
1418
  Usage: imgcat <path> [path...]
1399
1419
 
1400
1420
  Options:
1401
1421
  -h, --help Show this help message
1402
- `,stderr:``,exitCode:0}}function ZD(e={}){return S(`imgcat`,async(t,n)=>{if(t.length===0||w(t))return XD();let r=C(t);if(`error`in r)return{stdout:``,stderr:`imgcat: ${r.error}\n`,exitCode:1};if(r.positionals.length===0)return XD();if(!e.onMediaPreview)return{stdout:``,stderr:`imgcat: terminal preview is unavailable
1403
- `,exitCode:1};let i=[];for(let e of r.positionals){let t=n.fs.resolvePath(n.cwd,e);if(!(await n.fs.stat(t)).isFile)return{stdout:``,stderr:`imgcat: not a file: ${e}\n`,exitCode:1};let r=De(t);if(!Ee(r))return{stdout:``,stderr:`imgcat: unsupported media type: ${e}\n`,exitCode:1};let a=await n.fs.readFileBuffer(t),o=new Uint8Array(a.byteLength);o.set(a),i.push({path:t,mimeType:r,bytes:o})}try{return await e.onMediaPreview(i),{stdout:``,stderr:``,exitCode:0}}catch(e){return{stdout:``,stderr:`imgcat: ${e instanceof Error?e.message:String(e)}\n`,exitCode:1}}})}const QD=new Set([`run`,`run-script`]),$D=new Set([`test`,`start`,`stop`,`restart`]),eO=new Set([` `,` `,`
1404
- `,`;`,`|`,`&`,`(`,`)`,`{`,`}`,`<`,`>`]),tO=new Set([`;`,`|`,`&`,`(`,`)`,`{`,`
1405
- `]),nO=/^[A-Za-z_][A-Za-z0-9_]*=/,rO=/^[@A-Za-z0-9._-]+$/,iO=new Set([`if`,`then`,`else`,`elif`,`fi`,`for`,`while`,`until`,`do`,`done`,`case`,`in`,`esac`,`function`,`time`,`!`]),aO=new Set([`if`,`then`,`else`,`elif`,`while`,`until`,`do`,`time`,`!`]),oO=new Set([`ipx`,`npx`]);function sO(e){return`'${e.replace(/'/g,`'\\''`)}'`}async function cO(e,t){let n=await e.readFile(t);return typeof n==`string`?n:new TextDecoder().decode(n)}function*lO(e){let t=b(e);for(;yield t,t!==`/`;)t=Ne(t).dir}function uO(e){if(typeof e!=`object`||!e)return{};let t={};for(let[n,r]of Object.entries(e))typeof r==`string`&&(t[n]=r);return t}function dO(e){return typeof e==`string`?e:void 0}async function fO(e,t){for(let n of lO(t)){let t=x(n,`package.json`);if(!await e.exists(t))continue;let r;try{r=JSON.parse(await cO(e,t))}catch(e){throw Error(`${t} is not valid JSON: ${e instanceof Error?e.message:String(e)}`)}return{dir:n,name:dO(r.name),version:dO(r.version),scripts:uO(r.scripts)}}return null}function pO(e,t){let n=t,r=``;for(;n<e.length;){let t=e[n];if(r!==``){t===`\\`&&r===`"`?n++:t===r&&(r=``),n++;continue}if(t===`'`||t===`"`){r=t,n++;continue}if(t===`\\`){n+=2;continue}if(eO.has(t))break;n++}return{start:t,end:n,text:e.slice(t,n)}}function mO(e){let t=[],n=0,r=!0;for(;n<e.length;){let i=e[n];if(i===` `||i===` `){n++;continue}if(tO.has(i)){r=!0,n++;continue}let a=pO(e,n);if(a.end===a.start){n++;continue}if(r&&!nO.test(a.text)){if(aO.has(a.text)){n=a.end;continue}t.push(a),r=!1}n=a.end}return t}function hO(e,t){return!rO.test(e)||iO.has(e)||oO.has(e)?!1:!t.isRegistered(e)}async function gO(e,t){let n=mO(e).filter(e=>hO(e.text,t));if(n.length===0)return e;let r=[];for(let e of n)await t.hasLocalBin(e.text)&&r.push(e);if(r.length===0)return e;let i=e;for(let e of[...r].reverse())i=`${i.slice(0,e.start)}ipx ${i.slice(e.start)}`;return i}function _O(e){let t=[];for(let n of lO(e))t.push(x(n,`node_modules`,`.bin`));return t}function vO(e,t,n,r){let i=r.env.get(`PATH`)??``,a={PATH:[..._O(e.dir),i].filter(e=>e!==``).join(`:`),npm_lifecycle_event:t,npm_lifecycle_script:n};return e.name!==void 0&&(a.npm_package_name=e.name),e.version!==void 0&&(a.npm_package_version=e.version),a}function yO(e){return e.name===void 0?e.dir:e.version===void 0?e.name:`${e.name}@${e.version}`}function bO(e,t){let n=Object.entries(t.scripts);if(n.length===0)return`${e}: no scripts defined in ${x(t.dir,`package.json`)}\n`;let r=[`Scripts available in ${yO(t)} via \`${e} run\`:`];for(let[e,t]of n)r.push(` ${e}`),r.push(` ${t}`);return`${r.join(`
1406
- `)}\n`}function xO(e,t){return t===`--silent`||t===`-s`?(e.silent=!0,!0):t===`--if-present`&&(e.ifPresent=!0,!0)}function SO(e){let t={silent:!1,ifPresent:!1},n=[],r,i=!1;for(let a of e){if(i){n.push(a);continue}if(a===`--`){i=!0;continue}xO(t,a)||(r===void 0?r=a:n.push(a))}return{flags:t,script:r,extraArgs:n}}function CO(e,t){return{stdout:``,stderr:`${e}: ${t}\n`,exitCode:1}}function wO(e,t,n,r){let i=r.length>0?` ${r.map(sO).join(` `)}`:``,a=[],o=e.scripts[`pre${t}`];o!==void 0&&a.push({event:`pre${t}`,body:o}),a.push({event:t,body:`${n}${i}`});let s=e.scripts[`post${t}`];return s!==void 0&&a.push({event:`post${t}`,body:s}),a}async function TO(e,t,n,r){if(n===`start`&&await r.exists(x(t.dir,`server.js`)))return`node server.js`;if(n===`restart`)return`${e} stop --if-present && ${e} start`}function EO(e,t,n){let r=new Set(n.getRegisteredCommands?.()??[]);return{isRegistered:e=>r.has(e),hasLocalBin:async n=>{for(let r of _O(t.dir))if(await e.exists(x(r,n)))return!0;return!1}}}async function DO(e,t,n,r,i,a){let o=i.exec;if(!o)return CO(e,`run requires shell exec support, which this context does not provide`);let s=EO(a.fs,t,i),c=yO(t),l=``,u=``;for(let a of n){r.silent||(l+=`\n> ${c} ${a.event}\n> ${a.body}\n\n`);let n=await o(await gO(a.body,s),{cwd:t.dir,env:vO(t,a.event,a.body,i),stdin:pi(i.stdin),stdinKind:`bytes`});if(l+=n.stdout,u+=n.stderr,n.exitCode!==0)return u+=`${e}: script '${a.event}' exited with code ${n.exitCode}\n`,{stdout:l,stderr:u,exitCode:n.exitCode}}return{stdout:l,stderr:u,exitCode:0}}async function OO(e,t,n,r){let i;try{i=await fO(r.fs,n.cwd)}catch(t){return CO(e,t instanceof Error?t.message:String(t))}if(!i)return CO(e,`no package.json found in ${n.cwd} or any parent directory — nothing to run`);let{flags:a,script:o,extraArgs:s}=SO(t);if(o===void 0)return{stdout:bO(e,i),stderr:``,exitCode:0};let c=i.scripts[o]??await TO(e,i,o,r.fs)??void 0;if(c===void 0){if(a.ifPresent)return{stdout:``,stderr:``,exitCode:0};let t=Object.keys(i.scripts);return CO(e,`missing script: ${o}${t.length>0?` (available: ${t.join(`, `)})`:` (${x(i.dir,`package.json`)} defines no scripts)`}`)}return DO(e,i,wO(i,o,c,s),a,n,r)}const kO=()=>import(`./installer-CmAHuSft.js`),AO=new Set([`install`,`i`,`add`]),jO=new Set([`uninstall`,`remove`,`rm`,`un`]),MO=new Set([`list`,`ls`]),NO=new Set([`-g`,`--global`,`--location=global`]),PO=[`-g`,`--global`,`-D`,`--save-dev`];function FO(e){return`${e} - install packages from the npm registry into node_modules
1422
+ `,stderr:``,exitCode:0}}function QD(e={}){return S(`imgcat`,async(t,n)=>{if(t.length===0||w(t))return ZD();let r=C(t);if(`error`in r)return{stdout:``,stderr:`imgcat: ${r.error}\n`,exitCode:1};if(r.positionals.length===0)return ZD();if(!e.onMediaPreview)return{stdout:``,stderr:`imgcat: terminal preview is unavailable
1423
+ `,exitCode:1};let i=[];for(let e of r.positionals){let t=n.fs.resolvePath(n.cwd,e);if(!(await n.fs.stat(t)).isFile)return{stdout:``,stderr:`imgcat: not a file: ${e}\n`,exitCode:1};let r=De(t);if(!Ee(r))return{stdout:``,stderr:`imgcat: unsupported media type: ${e}\n`,exitCode:1};let a=await n.fs.readFileBuffer(t),o=new Uint8Array(a.byteLength);o.set(a),i.push({path:t,mimeType:r,bytes:o})}try{return await e.onMediaPreview(i),{stdout:``,stderr:``,exitCode:0}}catch(e){return{stdout:``,stderr:`imgcat: ${e instanceof Error?e.message:String(e)}\n`,exitCode:1}}})}const $D=new Set([`run`,`run-script`]),eO=new Set([`test`,`start`,`stop`,`restart`]),tO=new Set([` `,` `,`
1424
+ `,`;`,`|`,`&`,`(`,`)`,`{`,`}`,`<`,`>`]),nO=new Set([`;`,`|`,`&`,`(`,`)`,`{`,`
1425
+ `]),rO=/^[A-Za-z_][A-Za-z0-9_]*=/,iO=/^[@A-Za-z0-9._-]+$/,aO=new Set([`if`,`then`,`else`,`elif`,`fi`,`for`,`while`,`until`,`do`,`done`,`case`,`in`,`esac`,`function`,`time`,`!`]),oO=new Set([`if`,`then`,`else`,`elif`,`while`,`until`,`do`,`time`,`!`]),sO=new Set([`ipx`,`npx`]);function cO(e){return`'${e.replace(/'/g,`'\\''`)}'`}async function lO(e,t){let n=await e.readFile(t);return typeof n==`string`?n:new TextDecoder().decode(n)}function*uO(e){let t=b(e);for(;yield t,t!==`/`;)t=Ne(t).dir}function dO(e){if(typeof e!=`object`||!e)return{};let t={};for(let[n,r]of Object.entries(e))typeof r==`string`&&(t[n]=r);return t}function fO(e){return typeof e==`string`?e:void 0}async function pO(e,t){for(let n of uO(t)){let t=x(n,`package.json`);if(!await e.exists(t))continue;let r;try{r=JSON.parse(await lO(e,t))}catch(e){throw Error(`${t} is not valid JSON: ${e instanceof Error?e.message:String(e)}`)}return{dir:n,name:fO(r.name),version:fO(r.version),scripts:dO(r.scripts)}}return null}function mO(e,t){let n=t,r=``;for(;n<e.length;){let t=e[n];if(r!==``){t===`\\`&&r===`"`?n++:t===r&&(r=``),n++;continue}if(t===`'`||t===`"`){r=t,n++;continue}if(t===`\\`){n+=2;continue}if(tO.has(t))break;n++}return{start:t,end:n,text:e.slice(t,n)}}function hO(e){let t=[],n=0,r=!0;for(;n<e.length;){let i=e[n];if(i===` `||i===` `){n++;continue}if(nO.has(i)){r=!0,n++;continue}let a=mO(e,n);if(a.end===a.start){n++;continue}if(r&&!rO.test(a.text)){if(oO.has(a.text)){n=a.end;continue}t.push(a),r=!1}n=a.end}return t}function gO(e,t){return!iO.test(e)||aO.has(e)||sO.has(e)?!1:!t.isRegistered(e)}async function _O(e,t){let n=hO(e).filter(e=>gO(e.text,t));if(n.length===0)return e;let r=[];for(let e of n)await t.hasLocalBin(e.text)&&r.push(e);if(r.length===0)return e;let i=e;for(let e of[...r].reverse())i=`${i.slice(0,e.start)}ipx ${i.slice(e.start)}`;return i}function vO(e){let t=[];for(let n of uO(e))t.push(x(n,`node_modules`,`.bin`));return t}function yO(e,t,n,r){let i=r.env.get(`PATH`)??``,a={PATH:[...vO(e.dir),i].filter(e=>e!==``).join(`:`),npm_lifecycle_event:t,npm_lifecycle_script:n};return e.name!==void 0&&(a.npm_package_name=e.name),e.version!==void 0&&(a.npm_package_version=e.version),a}function bO(e){return e.name===void 0?e.dir:e.version===void 0?e.name:`${e.name}@${e.version}`}function xO(e,t){let n=Object.entries(t.scripts);if(n.length===0)return`${e}: no scripts defined in ${x(t.dir,`package.json`)}\n`;let r=[`Scripts available in ${bO(t)} via \`${e} run\`:`];for(let[e,t]of n)r.push(` ${e}`),r.push(` ${t}`);return`${r.join(`
1426
+ `)}\n`}function SO(e,t){return t===`--silent`||t===`-s`?(e.silent=!0,!0):t===`--if-present`&&(e.ifPresent=!0,!0)}function CO(e){let t={silent:!1,ifPresent:!1},n=[],r,i=!1;for(let a of e){if(i){n.push(a);continue}if(a===`--`){i=!0;continue}SO(t,a)||(r===void 0?r=a:n.push(a))}return{flags:t,script:r,extraArgs:n}}function wO(e,t){return{stdout:``,stderr:`${e}: ${t}\n`,exitCode:1}}function TO(e,t,n,r){let i=r.length>0?` ${r.map(cO).join(` `)}`:``,a=[],o=e.scripts[`pre${t}`];o!==void 0&&a.push({event:`pre${t}`,body:o}),a.push({event:t,body:`${n}${i}`});let s=e.scripts[`post${t}`];return s!==void 0&&a.push({event:`post${t}`,body:s}),a}async function EO(e,t,n,r){if(n===`start`&&await r.exists(x(t.dir,`server.js`)))return`node server.js`;if(n===`restart`)return`${e} stop --if-present && ${e} start`}function DO(e,t,n){let r=new Set(n.getRegisteredCommands?.()??[]);return{isRegistered:e=>r.has(e),hasLocalBin:async n=>{for(let r of vO(t.dir))if(await e.exists(x(r,n)))return!0;return!1}}}async function OO(e,t,n,r,i,a){let o=i.exec;if(!o)return wO(e,`run requires shell exec support, which this context does not provide`);let s=DO(a.fs,t,i),c=bO(t),l=``,u=``;for(let a of n){r.silent||(l+=`\n> ${c} ${a.event}\n> ${a.body}\n\n`);let n=await o(await _O(a.body,s),{cwd:t.dir,env:yO(t,a.event,a.body,i),stdin:pi(i.stdin),stdinKind:`bytes`});if(l+=n.stdout,u+=n.stderr,n.exitCode!==0)return u+=`${e}: script '${a.event}' exited with code ${n.exitCode}\n`,{stdout:l,stderr:u,exitCode:n.exitCode}}return{stdout:l,stderr:u,exitCode:0}}async function kO(e,t,n,r){let i;try{i=await pO(r.fs,n.cwd)}catch(t){return wO(e,t instanceof Error?t.message:String(t))}if(!i)return wO(e,`no package.json found in ${n.cwd} or any parent directory — nothing to run`);let{flags:a,script:o,extraArgs:s}=CO(t);if(o===void 0)return{stdout:xO(e,i),stderr:``,exitCode:0};let c=i.scripts[o]??await EO(e,i,o,r.fs)??void 0;if(c===void 0){if(a.ifPresent)return{stdout:``,stderr:``,exitCode:0};let t=Object.keys(i.scripts);return wO(e,`missing script: ${o}${t.length>0?` (available: ${t.join(`, `)})`:` (${x(i.dir,`package.json`)} defines no scripts)`}`)}return OO(e,i,TO(i,o,c,s),a,n,r)}const AO=()=>import(`./installer-ZC2UV-cH.js`),jO=new Set([`install`,`i`,`add`]),MO=new Set([`uninstall`,`remove`,`rm`,`un`]),NO=new Set([`list`,`ls`]),PO=new Set([`-g`,`--global`,`--location=global`]),FO=[`-g`,`--global`,`-D`,`--save-dev`];function IO(e){return`${e} - install packages from the npm registry into node_modules
1407
1427
  and run package.json scripts; also install conda/emscripten-forge
1408
1428
  packages via '${e} mamba'
1409
1429
 
@@ -1479,15 +1499,15 @@ manifest without rewriting it. With -g, packages go to /shared/lib/node_modules
1479
1499
  and deps are recorded in /shared/lib/package.json. Existing fields are
1480
1500
  preserved. Idempotent: re-installing an already-satisfied package is a clean
1481
1501
  no-op.
1482
- `}function IO(e){let t=C(e,{bool:PO,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 LO(e){let t=!1,n=[];for(let r of e){if(NO.has(r)){t=!0;continue}r.startsWith(`-`)||n.push(r)}return{global:t,specs:n}}function RO(e){return w(e)}function zO(e){return e instanceof Error?e.message:String(e)}async function BO(e){e.scriptCatalog?.invalidateJsh(),await e.syncScriptCommands?.()}function VO(e,t){let n=e===`i`;return S(e,async(r,i)=>{if(n)return RO(r)?{stdout:FO(e),stderr:``,exitCode:0}:UO(e,r,i,t);if(r[0]===`mamba`){let{runIpkMamba:n}=await import(`./ipk-mamba-D1bLinsh.js`);return n(e,r.slice(1),i,t)}if(RO(r))return{stdout:FO(e),stderr:``,exitCode:0};if(r.length===0)return{stdout:FO(e),stderr:`${e}: missing subcommand\n`,exitCode:1};let a=r[0],o=r.slice(1);return AO.has(a)?UO(e,o,i,t):jO.has(a)?GO(e,o,i,t):MO.has(a)?KO(e,o,i,t):a===`root`?qO(e,o,i,t):QD.has(a)?OO(e,o,i,{fs:t.fs}):$D.has(a)?OO(e,r,i,{fs:t.fs}):{stdout:``,stderr:`${e}: unknown subcommand '${a}' (supported: install, uninstall, list, root, run, mamba)\n`,exitCode:1}})}async function HO(e,t,n){let{installFromManifest:r,ManifestNotFoundError:i}=await kO(),a;try{a=await r({fs:n.fs,fetch:n.fetch,cwd:t.cwd})}catch(t){return t instanceof i?{stdout:``,stderr:`${e}: ${t.message}\n`,exitCode:1}:{stdout:``,stderr:`${e}: install failed: ${zO(t)}\n`,exitCode:1}}if(a.empty&&a.errors.length===0)return{stdout:`${e}: nothing to install (package.json declares no dependencies)\n`,stderr:``,exitCode:0};let o=a.results.map(t=>`${e}: installed ${t.name}@${t.version} -> ${t.installPath}`),s=[...(a.notes??[]).map(t=>`${e}: ${t}`),...a.errors.map(t=>`${e}: failed to install ${t.spec}: ${zO(t.error)}`)];return{stdout:o.length>0?`${o.join(`
1502
+ `}function LO(e){let t=C(e,{bool:FO,value:[`--location`]});if(`error`in t)return t;let n=t.values.get(`--location`);return n!==void 0&&n!==`global`?{error:`unknown flag: --location=${n}`}:{global:t.bools.has(`-g`)||t.bools.has(`--global`)||n===`global`,saveDev:t.bools.has(`-D`)||t.bools.has(`--save-dev`),specs:t.positionals}}function RO(e){let t=!1,n=[];for(let r of e){if(PO.has(r)){t=!0;continue}r.startsWith(`-`)||n.push(r)}return{global:t,specs:n}}function zO(e){return w(e)}function BO(e){return e instanceof Error?e.message:String(e)}async function VO(e){e.scriptCatalog?.invalidateJsh(),await e.syncScriptCommands?.()}function HO(e,t){let n=e===`i`;return S(e,async(r,i)=>{if(n)return zO(r)?{stdout:IO(e),stderr:``,exitCode:0}:WO(e,r,i,t);if(r[0]===`mamba`){let{runIpkMamba:n}=await import(`./ipk-mamba-BDqOegY1.js`);return n(e,r.slice(1),i,t)}if(zO(r))return{stdout:IO(e),stderr:``,exitCode:0};if(r.length===0)return{stdout:IO(e),stderr:`${e}: missing subcommand\n`,exitCode:1};let a=r[0],o=r.slice(1);return jO.has(a)?WO(e,o,i,t):MO.has(a)?KO(e,o,i,t):NO.has(a)?qO(e,o,i,t):a===`root`?JO(e,o,i,t):$D.has(a)?kO(e,o,i,{fs:t.fs}):eO.has(a)?kO(e,r,i,{fs:t.fs}):{stdout:``,stderr:`${e}: unknown subcommand '${a}' (supported: install, uninstall, list, root, run, mamba)\n`,exitCode:1}})}async function UO(e,t,n){let{installFromManifest:r,ManifestNotFoundError:i}=await AO(),a;try{a=await r({fs:n.fs,fetch:n.fetch,cwd:t.cwd})}catch(t){return t instanceof i?{stdout:``,stderr:`${e}: ${t.message}\n`,exitCode:1}:{stdout:``,stderr:`${e}: install failed: ${BO(t)}\n`,exitCode:1}}if(a.empty&&a.errors.length===0)return{stdout:`${e}: nothing to install (package.json declares no dependencies)\n`,stderr:``,exitCode:0};let o=a.results.map(t=>`${e}: installed ${t.name}@${t.version} -> ${t.installPath}`),s=[...(a.notes??[]).map(t=>`${e}: ${t}`),...a.errors.map(t=>`${e}: failed to install ${t.spec}: ${BO(t.error)}`)];return{stdout:o.length>0?`${o.join(`
1483
1503
  `)}\n`:``,stderr:s.length>0?`${s.join(`
1484
- `)}\n`:``,exitCode:a.errors.length===0?0:1}}async function UO(e,t,n,r){let i=IO(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 HO(e,n,r);let{installPackages:c}=await kO(),l;try{l=await c(s,{fs:r.fs,fetch:r.fetch,cwd:n.cwd,global:a,saveDev:o})}catch(t){return{stdout:``,stderr:`${e}: install failed: ${zO(t)}\n`,exitCode:1}}let u=l.results.map(t=>`${e}: installed ${t.name}@${t.version} -> ${t.installPath}`),d=[...(l.notes??[]).map(t=>`${e}: ${t}`),...l.errors.map(t=>`${e}: failed to install ${t.spec}: ${zO(t.error)}`)];return a&&l.results.length>0&&await BO(r),{stdout:u.length>0?`${u.join(`
1504
+ `)}\n`:``,exitCode:a.errors.length===0?0:1}}async function WO(e,t,n,r){let i=LO(t);if(`error`in i)return{stdout:``,stderr:`${e}: ${i.error}\n`,exitCode:1};let{global:a,saveDev:o,specs:s}=i;if(a&&s.length===0)return{stdout:``,stderr:`${e}: global install requires at least one package name\n`,exitCode:1};if(s.length===0)return UO(e,n,r);let{installPackages:c}=await AO(),l;try{l=await c(s,{fs:r.fs,fetch:r.fetch,cwd:n.cwd,global:a,saveDev:o})}catch(t){return{stdout:``,stderr:`${e}: install failed: ${BO(t)}\n`,exitCode:1}}let u=l.results.map(t=>`${e}: installed ${t.name}@${t.version} -> ${t.installPath}`),d=[...(l.notes??[]).map(t=>`${e}: ${t}`),...l.errors.map(t=>`${e}: failed to install ${t.spec}: ${BO(t.error)}`)];return a&&l.results.length>0&&await VO(r),{stdout:u.length>0?`${u.join(`
1485
1505
  `)}\n`:``,stderr:d.length>0?`${d.join(`
1486
- `)}\n`:``,exitCode:l.errors.length===0?0:1}}function WO(e,t){if(t.length===0)return`${e}\n└── (empty)\n`;let n=[`${e}`];for(let e=0;e<t.length;e++){let r=e===t.length-1?`└──`:`├──`;n.push(`${r} ${t[e].name}@${t[e].version}`)}return`${n.join(`
1487
- `)}\n`}async function GO(e,t,n,r){let{global:i,specs:a}=LO(t);if(a.length===0)return{stdout:``,stderr:`${e}: uninstall requires at least one package name\n`,exitCode:1};let{uninstallPackages:o}=await kO(),s;try{s=await o(a,{fs:r.fs,fetch:r.fetch,cwd:n.cwd,global:i})}catch(t){return{stdout:``,stderr:`${e}: uninstall failed: ${zO(t)}\n`,exitCode:1}}let c=s.results.filter(e=>e.removed).map(t=>`${e}: removed ${t.name}`),l=s.results.filter(e=>!e.removed).map(e=>e.name),u=s.errors.map(t=>`${e}: failed to uninstall ${t.spec}: ${zO(t.error)}`);l.length>0&&u.push(`${e}: ${l.join(`, `)} not installed${i?` globally`:``}`);let d=s.errors.length>0;return i&&await BO(r),{stdout:c.length>0?`${c.join(`
1506
+ `)}\n`:``,exitCode:l.errors.length===0?0:1}}function GO(e,t){if(t.length===0)return`${e}\n└── (empty)\n`;let n=[`${e}`];for(let e=0;e<t.length;e++){let r=e===t.length-1?`└──`:`├──`;n.push(`${r} ${t[e].name}@${t[e].version}`)}return`${n.join(`
1507
+ `)}\n`}async function KO(e,t,n,r){let{global:i,specs:a}=RO(t);if(a.length===0)return{stdout:``,stderr:`${e}: uninstall requires at least one package name\n`,exitCode:1};let{uninstallPackages:o}=await AO(),s;try{s=await o(a,{fs:r.fs,fetch:r.fetch,cwd:n.cwd,global:i})}catch(t){return{stdout:``,stderr:`${e}: uninstall failed: ${BO(t)}\n`,exitCode:1}}let c=s.results.filter(e=>e.removed).map(t=>`${e}: removed ${t.name}`),l=s.results.filter(e=>!e.removed).map(e=>e.name),u=s.errors.map(t=>`${e}: failed to uninstall ${t.spec}: ${BO(t.error)}`);l.length>0&&u.push(`${e}: ${l.join(`, `)} not installed${i?` globally`:``}`);let d=s.errors.length>0;return i&&await VO(r),{stdout:c.length>0?`${c.join(`
1488
1508
  `)}\n`:``,stderr:u.length>0?`${u.join(`
1489
- `)}\n`:``,exitCode:+!!d}}async function KO(e,t,n,r){let{global:i}=LO(t);try{let{listGlobalPackages:e,listLocalPackages:t}=await kO(),a=i?await e(r.fs):await t(r.fs,n.cwd);return{stdout:WO(i?$n:n.cwd,a),stderr:``,exitCode:0}}catch(t){return{stdout:``,stderr:`${e}: list failed: ${zO(t)}\n`,exitCode:1}}}async function qO(e,t,n,r){let{global:i}=LO(t);return{stdout:`${i?er:`${n.cwd.replace(/\/$/,``)}/node_modules`}\n`,stderr:``,exitCode:0}}const JO=`0.5.462`,YO=`v86 is not installed in node_modules: run \`${N} v86@${JO}\` (no network fallback)`;let XO=null;async function ZO(e={}){return XO||=tk(e.ipk).catch(e=>{throw XO=null,e}),XO}const QO=[{js:`build/libv86.mjs`,wasm:`build/v86.wasm`}];async function $O(e,t){for(let{js:n,wasm:r}of QO){let i=`${e}/${n}`,a=`${e}/${r}`;if(await t.exists(i)&&await t.exists(a))return{jsPath:i,wasmPath:a}}return null}async function ek(e){let t;try{t=await sr(`v86/package.json`,e.fromDir,e.reader)}catch{return null}if(t.type!==`file`)return null;let n=await $O(Ne(t.path).dir,e.reader);if(!n)return null;try{let r=await e.reader.readFile(t.path),i=String(JSON.parse(r).version??`0.5.462`);return{jsSource:await e.reader.readFile(n.jsPath),wasmBytes:await e.readBytes(n.wasmPath),version:i}}catch{return null}}async function tk(e){if(yr())throw Error(`v86 is not available in Node runtime`);if(!e)throw Error(YO);let t=await ek(e);if(!t)throw Error(YO);let n=URL.createObjectURL(new Blob([t.jsSource],{type:`text/javascript`})),r;try{r=await import(n)}finally{URL.revokeObjectURL(n)}let i=r.V86??r.default;if(typeof i!=`function`)throw Error(`v86: installed package did not export a V86 constructor`);return{V86:i,wasmModule:await ci(t.wasmBytes),version:t.version}}function nk(e){return async t=>(await WebAssembly.instantiate(e,t)).exports}const rk={command:`biome`,example:`biome check foo.js`,bootstrap:`${N} ${nv}`},ik={command:`playwright-cli`,example:`playwright-cli open https://example.com`},ak={command:`puppeteer`,example:`puppeteer open https://example.com`},ok={command:`convert`,example:`convert input.png output.jpg`,bootstrap:`${N} @imagemagick/magick-wasm@${Ki}`},sk={...ok,command:`magick`,example:`magick input.png output.jpg`},ck={command:`pdftoppm`,example:`pdftoppm -png -r 150 doc.pdf page`},lk={"@biomejs/biome":rk,biome:rk,esbuild:{command:`esbuild`,example:`esbuild --bundle src/index.js --outfile=dist/bundle.js`,bootstrap:`${N} esbuild-wasm@${si}`},playwright:ik,"@playwright/test":ik,"playwright-core":ik,puppeteer:ak,"puppeteer-core":ak,typescript:{command:`tsc`,example:`tsc --noEmit`,bootstrap:br},"pdf-poppler":ck,"pdf-to-img":ck,pdf2pic:ck,"pdf-img-convert":ck,poppler:ck,"poppler-utils":ck,imagemagick:ok,"imagemagick-cli":ok,"imagemagick-convert":ok,"magick-cli":sk,"@imagemagick/magick-wasm":sk,ffmpeg:{command:`ffmpeg`,example:`ffmpeg -i input.mp4 output.webm`,bootstrap:`${N} @ffmpeg/core@${ta}`},"@ffmpeg/ffmpeg":{command:`ffmpeg`,example:`ffmpeg -i input.mp4 output.webm`,bootstrap:`${N} @ffmpeg/core@${ta}`},ffprobe:{command:`ffprobe`,example:`ffprobe -v error -show_format -of json input.mp4`,bootstrap:`${N} @ffmpeg/core@${ta}`},"@ffprobe-installer/ffprobe":{command:`ffprobe`,example:`ffprobe -v error -show_format -of json input.mp4`,bootstrap:`${N} @ffmpeg/core@${ta}`},sqlite3:{command:`sqlite3`,example:`sqlite3 database.db "SELECT 1"`},v86:{command:`v86`,example:`v86 start -cdrom alpine.iso`,bootstrap:`${N} v86@${JO}`}};function uk(e){return Object.hasOwn(lk,e)?lk[e]:void 0}function dk(e){return/^[A-Za-z0-9_./:=@%+-]+$/.test(e)?e:`'${e.replace(/'/g,`'\\''`)}'`}function fk(e,t,n,r){let i=n.length?[r.command,...n].map(dk).join(` `):r.example,a=[`${e}: SLICC has a built-in \`${r.command}\` for npm package \`${t}\`.`,` try: ${i}`];return r.bootstrap&&a.push(` first run: ${r.bootstrap}`),a.push(` install anyway: ${[e,`--force`,t,...n].map(dk).join(` `)}`),`${a.join(`
1490
- `)}\n`}const pk=/require\(\s*["']([^"']+)["']\s*\)/;function mk(e){return`${e} - run an installed package's executable bin
1509
+ `)}\n`:``,exitCode:+!!d}}async function qO(e,t,n,r){let{global:i}=RO(t);try{let{listGlobalPackages:e,listLocalPackages:t}=await AO(),a=i?await e(r.fs):await t(r.fs,n.cwd);return{stdout:GO(i?$n:n.cwd,a),stderr:``,exitCode:0}}catch(t){return{stdout:``,stderr:`${e}: list failed: ${BO(t)}\n`,exitCode:1}}}async function JO(e,t,n,r){let{global:i}=RO(t);return{stdout:`${i?er:`${n.cwd.replace(/\/$/,``)}/node_modules`}\n`,stderr:``,exitCode:0}}const YO=`0.5.462`,XO=`v86 is not installed in node_modules: run \`${N} v86@${YO}\` (no network fallback)`;let ZO=null;async function QO(e={}){return ZO||=nk(e.ipk).catch(e=>{throw ZO=null,e}),ZO}const $O=[{js:`build/libv86.mjs`,wasm:`build/v86.wasm`}];async function ek(e,t){for(let{js:n,wasm:r}of $O){let i=`${e}/${n}`,a=`${e}/${r}`;if(await t.exists(i)&&await t.exists(a))return{jsPath:i,wasmPath:a}}return null}async function tk(e){let t;try{t=await sr(`v86/package.json`,e.fromDir,e.reader)}catch{return null}if(t.type!==`file`)return null;let n=await ek(Ne(t.path).dir,e.reader);if(!n)return null;try{let r=await e.reader.readFile(t.path),i=String(JSON.parse(r).version??`0.5.462`);return{jsSource:await e.reader.readFile(n.jsPath),wasmBytes:await e.readBytes(n.wasmPath),version:i}}catch{return null}}async function nk(e){if(yr())throw Error(`v86 is not available in Node runtime`);if(!e)throw Error(XO);let t=await tk(e);if(!t)throw Error(XO);let n=URL.createObjectURL(new Blob([t.jsSource],{type:`text/javascript`})),r;try{r=await import(n)}finally{URL.revokeObjectURL(n)}let i=r.V86??r.default;if(typeof i!=`function`)throw Error(`v86: installed package did not export a V86 constructor`);return{V86:i,wasmModule:await ci(t.wasmBytes),version:t.version}}function rk(e){return async t=>(await WebAssembly.instantiate(e,t)).exports}const ik={command:`biome`,example:`biome check foo.js`,bootstrap:`${N} ${nv}`},ak={command:`playwright-cli`,example:`playwright-cli open https://example.com`},ok={command:`puppeteer`,example:`puppeteer open https://example.com`},sk={command:`convert`,example:`convert input.png output.jpg`,bootstrap:`${N} @imagemagick/magick-wasm@${Ki}`},ck={...sk,command:`magick`,example:`magick input.png output.jpg`},lk={command:`pdftoppm`,example:`pdftoppm -png -r 150 doc.pdf page`},uk={"@biomejs/biome":ik,biome:ik,esbuild:{command:`esbuild`,example:`esbuild --bundle src/index.js --outfile=dist/bundle.js`,bootstrap:`${N} esbuild-wasm@${si}`},playwright:ak,"@playwright/test":ak,"playwright-core":ak,puppeteer:ok,"puppeteer-core":ok,typescript:{command:`tsc`,example:`tsc --noEmit`,bootstrap:br},"pdf-poppler":lk,"pdf-to-img":lk,pdf2pic:lk,"pdf-img-convert":lk,poppler:lk,"poppler-utils":lk,imagemagick:sk,"imagemagick-cli":sk,"imagemagick-convert":sk,"magick-cli":ck,"@imagemagick/magick-wasm":ck,ffmpeg:{command:`ffmpeg`,example:`ffmpeg -i input.mp4 output.webm`,bootstrap:`${N} @ffmpeg/core@${ta}`},"@ffmpeg/ffmpeg":{command:`ffmpeg`,example:`ffmpeg -i input.mp4 output.webm`,bootstrap:`${N} @ffmpeg/core@${ta}`},ffprobe:{command:`ffprobe`,example:`ffprobe -v error -show_format -of json input.mp4`,bootstrap:`${N} @ffmpeg/core@${ta}`},"@ffprobe-installer/ffprobe":{command:`ffprobe`,example:`ffprobe -v error -show_format -of json input.mp4`,bootstrap:`${N} @ffmpeg/core@${ta}`},sqlite3:{command:`sqlite3`,example:`sqlite3 database.db "SELECT 1"`},v86:{command:`v86`,example:`v86 start -cdrom alpine.iso`,bootstrap:`${N} v86@${YO}`}};function dk(e){return Object.hasOwn(uk,e)?uk[e]:void 0}function fk(e){return/^[A-Za-z0-9_./:=@%+-]+$/.test(e)?e:`'${e.replace(/'/g,`'\\''`)}'`}function pk(e,t,n,r){let i=n.length?[r.command,...n].map(fk).join(` `):r.example,a=[`${e}: SLICC has a built-in \`${r.command}\` for npm package \`${t}\`.`,` try: ${i}`];return r.bootstrap&&a.push(` first run: ${r.bootstrap}`),a.push(` install anyway: ${[e,`--force`,t,...n].map(fk).join(` `)}`),`${a.join(`
1510
+ `)}\n`}const mk=/require\(\s*["']([^"']+)["']\s*\)/;function hk(e){return`${e} - run an installed package's executable bin
1491
1511
 
1492
1512
  Usage:
1493
1513
  ${e} [--force] [--global] <pkg-or-bin> [args...]
@@ -1500,12 +1520,12 @@ Options:
1500
1520
  --force Install a package even when a SLICC built-in shadows it
1501
1521
  --global Resolve only from the shared global prefix (/shared/lib/node_modules)
1502
1522
  -h, --help Show this help message
1503
- `}async function hk(e,t){let n=await e.readFile(t);return typeof n==`string`?n:new TextDecoder().decode(n)}async function gk(e,t){try{return(await e.stat(t)).type===`file`}catch{return!1}}async function _k(e,t){try{return(await e.stat(t)).type===`directory`}catch{return!1}}function*vk(e,t=!1){if(t){yield er;return}let n=b(e);for(;yield x(n,`node_modules`),n!==`/`;)n=Ne(n).dir;yield er}async function yk(e,t,n,r=!1){for(let i of vk(t,r)){let t=x(i,`.bin`,n);if(!await gk(e,t))continue;let r=await hk(e,t),a=pk.exec(r),o=Ne(t).dir;return{binFilePath:a?x(o,a[1]):t,argvName:t}}return null}function bk(e){if(e.startsWith(`@`)){let t=e.indexOf(`/`);if(t!==-1)return e.slice(t+1)}return e}function xk(e,t){if(typeof e==`string`)return{binName:bk(t),binPath:e};if(typeof e!=`object`||!e)return null;let n=[t,bk(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 Sk(e,t,n,r=!1){for(let i of vk(t,r)){let t=x(i,n),r=x(t,`package.json`);if(!await gk(e,r))continue;let a;try{a=JSON.parse(await hk(e,r))}catch{return null}let o=xk(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 Ck(e,t,n,r=!1){return await yk(e,t,n,r)??await Sk(e,t,n,r)}async function wk(e,t,n){for(let r of vk(t))if(await gk(e,x(r,n,`package.json`)))return!0;return!1}function Tk(e){return e instanceof Error?e.message:String(e)}function Ek(e,t){return{stdout:``,stderr:`${e}: ${t}\n`,exitCode:1}}async function Dk(e,t,n,r){try{let{installPackages:i}=await import(`./installer-CmAHuSft.js`),a=await i([t],{fs:r.fs,fetch:r.fetch,cwd:n.cwd});if(a.errors.length>0)return{error:Ek(e,`failed to install '${t}': ${Tk(a.errors[0].error)}`)};let o=a.results.map(t=>`${e}: installed ${t.name}@${t.version}`);return{progress:o.length>0?`${o.join(`
1504
- `)}\n`:``}}catch(n){return{error:Ek(e,`failed to install '${t}': ${Tk(n)}`)}}}async function Ok(e,t,n,r){return await gk(r,n)?null:await _k(r,n)?Ek(e,`bin target '${n}' is a directory, not a file`):Ek(e,`bin file '${n}' for '${t}' does not exist`)}async function kk(e,t,n,r,i,a){if(await wk(a.fs,i.cwd,t))return{error:Ek(e,`package '${t}' does not expose an executable bin`)};let o=r?void 0:uk(t);if(o)return{error:{stdout:``,stderr:fk(e,t,n,o),exitCode:1}};let s=await Dk(e,t,i,a);if(`error`in s)return s;let c=await Ck(a.fs,i.cwd,t);return c?{resolved:c,installProgress:s.progress}:{error:Ek(e,`package '${t}' was installed but does not expose an executable bin`)}}function Ak(e,t){return{name:e,trusted:!0,async execute(n,r){if(n.length===0||n[0]===`--help`||n[0]===`-h`)return{stdout:mk(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:mk(e),stderr:``,exitCode:1};let c=s[0],l=s.slice(1),u;try{u=await Ck(t.fs,r.cwd,c,o)}catch(t){return Ek(e,Tk(t))}let d=``;if(!u){if(o)return Ek(e,`no global bin '${c}' found in ${er}`);let n=await kk(e,c,l,i,r,t);if(`error`in n)return n.error;u=n.resolved,d=n.installProgress}let f=await Ok(e,c,u.binFilePath,t.fs);if(f)return f;let p=ri(await hk(t.fs,u.binFilePath)),m=[`node`,u.argvName,...l],h=await ti(p,m,r,void 0,{filename:u.binFilePath});return{stdout:h.stdout,stderr:d+h.stderr,exitCode:h.exitCode}}}}function jk(e={}){return S(`jshd`,async(t,n)=>{let{runJshd:r}=await import(`./run-DPEU0mPp.js`);return r(t,n,e)})}const Mk=new Set([`SIGINT`,`SIGTERM`,`SIGKILL`,`SIGSTOP`,`SIGCONT`]);function Nk(e={}){return S(`kill`,async t=>{if(t.length===0||t.includes(`--help`)||t.includes(`-h`))return zk();let n=e.processManager??Pk();if(!n)return{stdout:``,stderr:`kill: no process manager available in this runtime
1505
- `,exitCode:1};let r=Fk(t);if(!r.ok)return{stdout:``,stderr:r.stderr,exitCode:r.exitCode};let{allDelivered:i,errors:a}=Ik(n,r.pids,r.signal);return{stdout:``,stderr:a.length?`${a.join(`
1506
- `)}\n`:``,exitCode:+!i}})}function Pk(){let e=globalThis.__slicc_pm;return e instanceof Object&&typeof e.signal==`function`?e:null}function Fk(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
1507
- `,exitCode:2};let i=Lk(n);if(i instanceof Error)return{ok:!1,stderr:`kill: ${i.message}\n`,exitCode:2};t=i;continue}if(i.startsWith(`-`)){let e=Rk(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
1508
- `,exitCode:2}:Mk.has(t)?{ok:!0,signal:t,pids:n}:{ok:!1,stderr:`kill: signal ${t} not supported\n`,exitCode:2}}function Ik(e,t,n){let r=!0,i=[];for(let a of t)e.signal(a,n)||(r=!1,i.push(e.get(a)?`kill: (${a}) - process already terminated`:`kill: (${a}) - no such process`));return{allDelivered:r,errors:i}}function Lk(e){let t=e.toUpperCase(),n=t.startsWith(`SIG`)?t:`SIG${t}`;return n===`SIGINT`||n===`SIGTERM`||n===`SIGKILL`||n===`SIGSTOP`||n===`SIGCONT`?n:Error(`unknown signal '${e}'`)}function Rk(e){return e===`-9`?`SIGKILL`:Lk(e.slice(1))}function zk(){return{stdout:`Usage: kill [-s SIGNAL | -INT | -TERM | -KILL | -STOP | -CONT | -9] PID [PID …]
1523
+ `}async function gk(e,t){let n=await e.readFile(t);return typeof n==`string`?n:new TextDecoder().decode(n)}async function _k(e,t){try{return(await e.stat(t)).type===`file`}catch{return!1}}async function vk(e,t){try{return(await e.stat(t)).type===`directory`}catch{return!1}}function*yk(e,t=!1){if(t){yield er;return}let n=b(e);for(;yield x(n,`node_modules`),n!==`/`;)n=Ne(n).dir;yield er}async function bk(e,t,n,r=!1){for(let i of yk(t,r)){let t=x(i,`.bin`,n);if(!await _k(e,t))continue;let r=await gk(e,t),a=mk.exec(r),o=Ne(t).dir;return{binFilePath:a?x(o,a[1]):t,argvName:t}}return null}function xk(e){if(e.startsWith(`@`)){let t=e.indexOf(`/`);if(t!==-1)return e.slice(t+1)}return e}function Sk(e,t){if(typeof e==`string`)return{binName:xk(t),binPath:e};if(typeof e!=`object`||!e)return null;let n=[t,xk(t)];for(let t of n){let n=Object.getOwnPropertyDescriptor(e,t)?.value;if(typeof n==`string`)return{binName:t,binPath:n}}let r=Object.entries(e).filter(e=>typeof e[1]==`string`);if(r.length===1){let[e,t]=r[0];return{binName:e,binPath:t}}return null}async function Ck(e,t,n,r=!1){for(let i of yk(t,r)){let t=x(i,n),r=x(t,`package.json`);if(!await _k(e,r))continue;let a;try{a=JSON.parse(await gk(e,r))}catch{return null}let o=Sk(a.bin,n);if(!o)return null;let s=o.binPath.replace(/^\.\//,``);return{binFilePath:x(t,s),argvName:x(i,`.bin`,o.binName)}}return null}async function wk(e,t,n,r=!1){return await bk(e,t,n,r)??await Ck(e,t,n,r)}async function Tk(e,t,n){for(let r of yk(t))if(await _k(e,x(r,n,`package.json`)))return!0;return!1}function Ek(e){return e instanceof Error?e.message:String(e)}function Dk(e,t){return{stdout:``,stderr:`${e}: ${t}\n`,exitCode:1}}async function Ok(e,t,n,r){try{let{installPackages:i}=await import(`./installer-ZC2UV-cH.js`),a=await i([t],{fs:r.fs,fetch:r.fetch,cwd:n.cwd});if(a.errors.length>0)return{error:Dk(e,`failed to install '${t}': ${Ek(a.errors[0].error)}`)};let o=a.results.map(t=>`${e}: installed ${t.name}@${t.version}`);return{progress:o.length>0?`${o.join(`
1524
+ `)}\n`:``}}catch(n){return{error:Dk(e,`failed to install '${t}': ${Ek(n)}`)}}}async function kk(e,t,n,r){return await _k(r,n)?null:await vk(r,n)?Dk(e,`bin target '${n}' is a directory, not a file`):Dk(e,`bin file '${n}' for '${t}' does not exist`)}async function Ak(e,t,n,r,i,a){if(await Tk(a.fs,i.cwd,t))return{error:Dk(e,`package '${t}' does not expose an executable bin`)};let o=r?void 0:dk(t);if(o)return{error:{stdout:``,stderr:pk(e,t,n,o),exitCode:1}};let s=await Ok(e,t,i,a);if(`error`in s)return s;let c=await wk(a.fs,i.cwd,t);return c?{resolved:c,installProgress:s.progress}:{error:Dk(e,`package '${t}' was installed but does not expose an executable bin`)}}function jk(e,t){return{name:e,trusted:!0,async execute(n,r){if(n.length===0||n[0]===`--help`||n[0]===`-h`)return{stdout:hk(e),stderr:``,exitCode:+(n.length===0)};let i=n[0]===`--force`,a=i?n.slice(1):n,o=a[0]===`--global`;o&&(a=a.slice(1));let s=a;if(s.length===0)return{stdout:hk(e),stderr:``,exitCode:1};let c=s[0],l=s.slice(1),u;try{u=await wk(t.fs,r.cwd,c,o)}catch(t){return Dk(e,Ek(t))}let d=``;if(!u){if(o)return Dk(e,`no global bin '${c}' found in ${er}`);let n=await Ak(e,c,l,i,r,t);if(`error`in n)return n.error;u=n.resolved,d=n.installProgress}let f=await kk(e,c,u.binFilePath,t.fs);if(f)return f;let p=ri(await gk(t.fs,u.binFilePath)),m=[`node`,u.argvName,...l],h=await ti(p,m,r,void 0,{filename:u.binFilePath});return{stdout:h.stdout,stderr:d+h.stderr,exitCode:h.exitCode}}}}function Mk(e={}){return S(`jshd`,async(t,n)=>{let{runJshd:r}=await import(`./run-BhUNOe2w.js`);return r(t,n,e)})}const Nk=new Set([`SIGINT`,`SIGTERM`,`SIGKILL`,`SIGSTOP`,`SIGCONT`]);function Pk(e={}){return S(`kill`,async t=>{if(t.length===0||t.includes(`--help`)||t.includes(`-h`))return Bk();let n=e.processManager??Fk();if(!n)return{stdout:``,stderr:`kill: no process manager available in this runtime
1525
+ `,exitCode:1};let r=Ik(t);if(!r.ok)return{stdout:``,stderr:r.stderr,exitCode:r.exitCode};let{allDelivered:i,errors:a}=Lk(n,r.pids,r.signal);return{stdout:``,stderr:a.length?`${a.join(`
1526
+ `)}\n`:``,exitCode:+!i}})}function Fk(){let e=globalThis.__slicc_pm;return e instanceof Object&&typeof e.signal==`function`?e:null}function Ik(e){let t=`SIGTERM`,n=[];for(let r=0;r<e.length;r++){let i=e[r];if(i===`-s`||i===`--signal`){let n=e[++r];if(!n)return{ok:!1,stderr:`kill: -s requires a signal name
1527
+ `,exitCode:2};let i=Rk(n);if(i instanceof Error)return{ok:!1,stderr:`kill: ${i.message}\n`,exitCode:2};t=i;continue}if(i.startsWith(`-`)){let e=zk(i);if(e instanceof Error)return{ok:!1,stderr:`kill: ${e.message}\n`,exitCode:2};t=e;continue}let a=Number.parseInt(i,10);if(!Number.isFinite(a)||String(a)!==i)return{ok:!1,stderr:`kill: invalid pid '${i}'\n`,exitCode:2};n.push(a)}return n.length===0?{ok:!1,stderr:`kill: no pids supplied
1528
+ `,exitCode:2}:Nk.has(t)?{ok:!0,signal:t,pids:n}:{ok:!1,stderr:`kill: signal ${t} not supported\n`,exitCode:2}}function Lk(e,t,n){let r=!0,i=[];for(let a of t)e.signal(a,n)||(r=!1,i.push(e.get(a)?`kill: (${a}) - process already terminated`:`kill: (${a}) - no such process`));return{allDelivered:r,errors:i}}function Rk(e){let t=e.toUpperCase(),n=t.startsWith(`SIG`)?t:`SIG${t}`;return n===`SIGINT`||n===`SIGTERM`||n===`SIGKILL`||n===`SIGSTOP`||n===`SIGCONT`?n:Error(`unknown signal '${e}'`)}function zk(e){return e===`-9`?`SIGKILL`:Rk(e.slice(1))}function Bk(){return{stdout:`Usage: kill [-s SIGNAL | -INT | -TERM | -KILL | -STOP | -CONT | -9] PID [PID …]
1509
1529
 
1510
1530
  Send a signal to one or more processes tracked by the kernel.
1511
1531
 
@@ -1527,7 +1547,7 @@ Examples:
1527
1547
  kill -INT 1024 1025 SIGINT both
1528
1548
  kill -STOP 1024 pause; \`kill -CONT 1024\` resumes
1529
1549
  kill -s SIGKILL 1024 explicit signal name
1530
- `,stderr:``,exitCode:0}}const Bk=[`top`,`left`,`middle`,`right`,`bottom`],Vk=`usage: layout <verb> [args]
1550
+ `,stderr:``,exitCode:0}}const Vk=[`top`,`left`,`middle`,`right`,`bottom`],Hk=`usage: layout <verb> [args]
1531
1551
 
1532
1552
  list List the built-in presets
1533
1553
  set <preset> Switch to a built-in preset
@@ -1547,9 +1567,9 @@ Examples:
1547
1567
  docs Describe the layout surfaces
1548
1568
  panels List the registered panel ids
1549
1569
 
1550
- Zones: ${Bk.join(`, `)}
1551
- `,Hk=new Set([`files`,`term`,`memory`,`monitor`]),Uk=`sprinkle:`;function Wk(e){return e===`chat`||Hk.has(e)||e.startsWith(Uk)?e:`${Uk}${e}`}function Gk(e){let t=/^(\d+(?:\.\d+)?)%$/.exec(e);if(t)return{percent:Number.parseFloat(t[1])};let n=/^(\d+(?:\.\d+)?)(?:px)?$/.exec(e);return n?{px:Number.parseFloat(n[1])}:null}const Kk=`usage: layout size <surfaceId> [--width <px|percent>] [--height <px|percent>]`;function qk(e){let t=e[0],n=t?bs(t):null;return n?{kind:`set`,tree:n.tree}:{error:`unknown layout: ${t??`(none)`}`}}function Jk(e){let t=e[0];return Bk.includes(t)?{kind:`chat`,zone:t}:{error:`usage: layout chat <${Bk.join(`|`)}>`}}function Yk(e){let[t,n]=e;return!t||!Bk.includes(n)?{error:`usage: layout open <surfaceId> <${Bk.join(`|`)}>`}:{kind:`open`,surfaceId:Wk(t),zone:n}}function Xk(e){let t=e[0];return t?{kind:`close`,surfaceId:Wk(t)}:{error:`usage: layout close <surfaceId>`}}function Zk(e){let[t,n]=e;return!t||!Bk.includes(n)?{error:`usage: layout move <surfaceId> <${Bk.join(`|`)}>`}:{kind:`move`,surfaceId:Wk(t),zone:n}}function Qk(e,t,n){if(t!==`--width`&&t!==`--height`)return{error:`layout size: unknown flag "${t}"`};if(!n)return{error:`layout size: missing value for ${t}`};let r=Gk(n);return r?(t===`--width`?r.percent==null?e.widthPx=r.px:e.widthPercent=r.percent:r.percent==null?e.heightPx=r.px:e.heightPercent=r.percent,null):{error:`layout size: invalid size "${n}" (want <number>px or <number>%)`}}function $k(e){let t=e[0];if(!t)return{error:Kk};let n={};for(let t=1;t<e.length;t+=2){let r=Qk(n,e[t],e[t+1]);if(r)return r}return n.widthPx==null&&n.widthPercent==null&&n.heightPx==null&&n.heightPercent==null?{error:Kk}:{kind:`size`,surfaceId:Wk(t),size:n}}function eA(e){let t=e[0];if(!t||t.startsWith(`--`))return{error:`usage: layout save <name> [--protected]`};if(!/^[\w.-]+$/.test(t))return{error:`invalid layout name "${t}" (use letters, digits, . _ -)`};let n=e.slice(1),r=n.find(e=>e!==`--protected`);return r?{error:`layout save: unknown flag "${r}"`}:{kind:`save`,name:t,protected:n.includes(`--protected`)}}function tA(e,t){let n=t[0];return n?e===`load`?{kind:`load`,name:n}:{kind:`delete`,name:n}:{error:`usage: layout ${e} <name>`}}function nA(e,t){let n=t[0];return n?e===`show`?{kind:`show`,panelId:Wk(n)}:{kind:`hide`,panelId:Wk(n)}:{error:`usage: layout ${e} <panelId>`}}function rA(){let e=bs(gs);return e?{kind:`set`,tree:e.tree}:{error:`default layout unavailable`}}function iA(e){let[t,...n]=e;switch(t){case`set`:return qk(n);case`chat`:return Jk(n);case`open`:return Yk(n);case`close`:return Xk(n);case`move`:return Zk(n);case`size`:return $k(n);case`reset`:return{kind:`reset`};case`edit`:return rA();case`load`:return tA(`load`,n);case`save`:return eA(n);case`delete`:return tA(`delete`,n);case`docs`:return{kind:`docs`};case`panels`:return{kind:`panels`};case`show`:return nA(`show`,n);case`hide`:return nA(`hide`,n);default:return{error:`usage: layout <set|edit|chat|open|close|move|size|show|hide|load|save|delete|docs|panels|list|reset>`}}}function aA(){return S(`layout`,async e=>{if(w(e))return{stdout:e[0]?.startsWith(`-`)?Vk:st(`layout`,e[0],Vk),stderr:``,exitCode:0};if(e[0]===`list`||e.length===0)return{stdout:`layouts: ${Object.keys(ys).join(`, `)}\ndefault: ${gs}\n`,stderr:``,exitCode:0};let t=iA(e);if(`error`in t)return{stdout:``,stderr:`layout: ${t.error}\n`,exitCode:1};let n=y();if(!n)return{stdout:``,stderr:`layout: UI is unavailable in this environment
1552
- `,exitCode:1};try{let e=await n.call(`layout-apply`,t);if(e&&e.applied===!1)return{stdout:``,stderr:`layout: ${e.error??`could not apply layout`}\n`,exitCode:1};let r=e?.output;return{stdout:r?`${r.replace(/\n*$/,``)}\n`:``,stderr:``,exitCode:0}}catch(e){return{stdout:``,stderr:`layout: ${e.message}\n`,exitCode:1}}})}const oA=na.id;function sA(){return`local-llm — inspect and configure the Local LLM provider
1570
+ Zones: ${Vk.join(`, `)}
1571
+ `,Uk=new Set([`files`,`term`,`memory`,`monitor`]),Wk=`sprinkle:`;function Gk(e){return e===`chat`||Uk.has(e)||e.startsWith(Wk)?e:`${Wk}${e}`}function Kk(e){let t=/^(\d+(?:\.\d+)?)%$/.exec(e);if(t)return{percent:Number.parseFloat(t[1])};let n=/^(\d+(?:\.\d+)?)(?:px)?$/.exec(e);return n?{px:Number.parseFloat(n[1])}:null}const qk=`usage: layout size <surfaceId> [--width <px|percent>] [--height <px|percent>]`;function Jk(e){let t=e[0],n=t?bs(t):null;return n?{kind:`set`,tree:n.tree}:{error:`unknown layout: ${t??`(none)`}`}}function Yk(e){let t=e[0];return Vk.includes(t)?{kind:`chat`,zone:t}:{error:`usage: layout chat <${Vk.join(`|`)}>`}}function Xk(e){let[t,n]=e;return!t||!Vk.includes(n)?{error:`usage: layout open <surfaceId> <${Vk.join(`|`)}>`}:{kind:`open`,surfaceId:Gk(t),zone:n}}function Zk(e){let t=e[0];return t?{kind:`close`,surfaceId:Gk(t)}:{error:`usage: layout close <surfaceId>`}}function Qk(e){let[t,n]=e;return!t||!Vk.includes(n)?{error:`usage: layout move <surfaceId> <${Vk.join(`|`)}>`}:{kind:`move`,surfaceId:Gk(t),zone:n}}function $k(e,t,n){if(t!==`--width`&&t!==`--height`)return{error:`layout size: unknown flag "${t}"`};if(!n)return{error:`layout size: missing value for ${t}`};let r=Kk(n);return r?(t===`--width`?r.percent==null?e.widthPx=r.px:e.widthPercent=r.percent:r.percent==null?e.heightPx=r.px:e.heightPercent=r.percent,null):{error:`layout size: invalid size "${n}" (want <number>px or <number>%)`}}function eA(e){let t=e[0];if(!t)return{error:qk};let n={};for(let t=1;t<e.length;t+=2){let r=$k(n,e[t],e[t+1]);if(r)return r}return n.widthPx==null&&n.widthPercent==null&&n.heightPx==null&&n.heightPercent==null?{error:qk}:{kind:`size`,surfaceId:Gk(t),size:n}}function tA(e){let t=e[0];if(!t||t.startsWith(`--`))return{error:`usage: layout save <name> [--protected]`};if(!/^[\w.-]+$/.test(t))return{error:`invalid layout name "${t}" (use letters, digits, . _ -)`};let n=e.slice(1),r=n.find(e=>e!==`--protected`);return r?{error:`layout save: unknown flag "${r}"`}:{kind:`save`,name:t,protected:n.includes(`--protected`)}}function nA(e,t){let n=t[0];return n?e===`load`?{kind:`load`,name:n}:{kind:`delete`,name:n}:{error:`usage: layout ${e} <name>`}}function rA(e,t){let n=t[0];return n?e===`show`?{kind:`show`,panelId:Gk(n)}:{kind:`hide`,panelId:Gk(n)}:{error:`usage: layout ${e} <panelId>`}}function iA(){let e=bs(gs);return e?{kind:`set`,tree:e.tree}:{error:`default layout unavailable`}}function aA(e){let[t,...n]=e;switch(t){case`set`:return Jk(n);case`chat`:return Yk(n);case`open`:return Xk(n);case`close`:return Zk(n);case`move`:return Qk(n);case`size`:return eA(n);case`reset`:return{kind:`reset`};case`edit`:return iA();case`load`:return nA(`load`,n);case`save`:return tA(n);case`delete`:return nA(`delete`,n);case`docs`:return{kind:`docs`};case`panels`:return{kind:`panels`};case`show`:return rA(`show`,n);case`hide`:return rA(`hide`,n);default:return{error:`usage: layout <set|edit|chat|open|close|move|size|show|hide|load|save|delete|docs|panels|list|reset>`}}}function oA(){return S(`layout`,async e=>{if(w(e))return{stdout:e[0]?.startsWith(`-`)?Hk:st(`layout`,e[0],Hk),stderr:``,exitCode:0};if(e[0]===`list`||e.length===0)return{stdout:`layouts: ${Object.keys(ys).join(`, `)}\ndefault: ${gs}\n`,stderr:``,exitCode:0};let t=aA(e);if(`error`in t)return{stdout:``,stderr:`layout: ${t.error}\n`,exitCode:1};let n=y();if(!n)return{stdout:``,stderr:`layout: UI is unavailable in this environment
1572
+ `,exitCode:1};try{let e=await n.call(`layout-apply`,t);if(e&&e.applied===!1)return{stdout:``,stderr:`layout: ${e.error??`could not apply layout`}\n`,exitCode:1};let r=e?.output;return{stdout:r?`${r.replace(/\n*$/,``)}\n`:``,stderr:``,exitCode:0}}catch(e){return{stdout:``,stderr:`layout: ${e.message}\n`,exitCode:1}}})}const sA=na.id;function cA(){return`local-llm — inspect and configure the Local LLM provider
1553
1573
 
1554
1574
  Usage:
1555
1575
  local-llm Show current config + verify connection
@@ -1568,20 +1588,20 @@ Common base URLs:
1568
1588
  llama.cpp http://localhost:8080/v1
1569
1589
  vLLM http://localhost:8000/v1
1570
1590
  Jan http://localhost:1337/v1
1571
- `}function cA(e,t){return e.version?t?`${e.kind} (${e.version})`:`${e.kind} ${e.version}`:e.kind}function lA(e){return e.map(e=>` • ${e}`)}function uA(e,t){let n=[`✗ Could not reach ${e}`,` runtime: ${cA(t.runtime,!0)}`,` error: ${t.error?.message??`unknown`}`];return t.error?.hint&&n.push(` hint: ${t.error.hint}`),{stdout:``,stderr:n.join(`
1591
+ `}function lA(e,t){return e.version?t?`${e.kind} (${e.version})`:`${e.kind} ${e.version}`:e.kind}function uA(e){return e.map(e=>` • ${e}`)}function dA(e,t){let n=[`✗ Could not reach ${e}`,` runtime: ${lA(t.runtime,!0)}`,` error: ${t.error?.message??`unknown`}`];return t.error?.hint&&n.push(` hint: ${t.error.hint}`),{stdout:``,stderr:n.join(`
1572
1592
  `)+`
1573
- `,exitCode:1}}function dA(e,t){return{stdout:[`✓ ${e}`,` runtime: ${cA(t.runtime,!0)}`,` models: ${t.models.length}`,...lA(t.models)].join(`
1593
+ `,exitCode:1}}function fA(e,t){return{stdout:[`✓ ${e}`,` runtime: ${lA(t.runtime,!0)}`,` models: ${t.models.length}`,...uA(t.models)].join(`
1574
1594
  `)+`
1575
- `,stderr:``,exitCode:0}}function fA(e,t){let n=t.models.length;return{stdout:[`✓ ${e} (${cA(t.runtime,!1)})`,` Saved ${n} model${n===1?``:`s`} to Settings:`,...lA(t.models)].join(`
1595
+ `,stderr:``,exitCode:0}}function pA(e,t){let n=t.models.length;return{stdout:[`✓ ${e} (${lA(t.runtime,!1)})`,` Saved ${n} model${n===1?``:`s`} to Settings:`,...uA(t.models)].join(`
1576
1596
  `)+`
1577
- `,stderr:``,exitCode:0}}function pA(){return S(oA,async e=>{if(e.includes(`--help`)||e.includes(`-h`))return{stdout:sA(),stderr:``,exitCode:0};let{getApiKeyForProvider:t,getRawApiKeyForProvider:n,getBaseUrlForProvider:r,addAccount:i}=await import(`./account-store-CckwuDB2.js`).then(e=>e.t),{verifyConnection:a}=await import(`./local-llm-FyJMIUux.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(oA);if(!s)return{stdout:``,stderr:`Local LLM is not configured. Open Settings → Providers → Local LLM and set a base URL.
1578
- `,exitCode:1};let c=await a(s,t(oA)??void 0);if(!c.ok)return uA(s,c);if(o===`discover`){let e=n(oA)??``;return i(oA,e,s,c.models.join(`, `)),fA(s,c)}return dA(s,c)})}function mA(){return{stdout:`usage: man <topic>
1597
+ `,stderr:``,exitCode:0}}function mA(){return S(sA,async e=>{if(e.includes(`--help`)||e.includes(`-h`))return{stdout:cA(),stderr:``,exitCode:0};let{getApiKeyForProvider:t,getRawApiKeyForProvider:n,getBaseUrlForProvider:r,addAccount:i}=await import(`./account-store-DtP5_zcC.js`).then(e=>e.t),{verifyConnection:a}=await import(`./local-llm-BIA90YgO.js`).then(e=>e.n),o=e[0]??`status`;if(o!==`status`&&o!==`discover`)return{stdout:``,stderr:`Unknown subcommand: ${o}. See \`local-llm --help\`.\n`,exitCode:2};let s=r(sA);if(!s)return{stdout:``,stderr:`Local LLM is not configured. Open Settings → Providers → Local LLM and set a base URL.
1598
+ `,exitCode:1};let c=await a(s,t(sA)??void 0);if(!c.ok)return dA(s,c);if(o===`discover`){let e=n(sA)??``;return i(sA,e,s,c.models.join(`, `)),pA(s,c)}return fA(s,c)})}function hA(){return{stdout:`usage: man <topic>
1579
1599
 
1580
1600
  Fetches documentation for a given topic from sliccy.com.
1581
- `,stderr:``,exitCode:0}}function hA(e){return e.replace(/<[^>]*>/g,``).replace(/&lt;/g,`<`).replace(/&gt;/g,`>`).replace(/&quot;/g,`"`).replace(/&#39;/g,`'`).replace(/&nbsp;/g,` `).replace(/&amp;/g,`&`).trimEnd()}function gA(){let e=g();return S(`man`,async t=>{if(t.includes(`--help`)||t.includes(`-h`))return mA();if(t.length===0)return{stdout:``,stderr:`What manual page do you want?
1601
+ `,stderr:``,exitCode:0}}function gA(e){return e.replace(/<[^>]*>/g,``).replace(/&lt;/g,`<`).replace(/&gt;/g,`>`).replace(/&quot;/g,`"`).replace(/&#39;/g,`'`).replace(/&nbsp;/g,` `).replace(/&amp;/g,`&`).trimEnd()}function _A(){let e=g();return S(`man`,async t=>{if(t.includes(`--help`)||t.includes(`-h`))return hA();if(t.length===0)return{stdout:``,stderr:`What manual page do you want?
1582
1602
  For example, try 'man commands'.
1583
- `,exitCode:1};let n=t.join(`-`),r=`https://www.sliccy.com/man/${n}.plain.html`;try{let t=await e(r,{method:`GET`});return t.status===404?{stdout:``,stderr:`No manual entry for ${n}\n`,exitCode:1}:t.status<200||t.status>=300?{stdout:``,stderr:`man: failed to fetch manual page for ${n}: ${t.status} ${t.statusText}\n`,exitCode:1}:{stdout:hA(new TextDecoder(`utf-8`).decode(t.body))+`
1584
- `,stderr:``,exitCode:0}}catch(e){return{stdout:``,stderr:`man: ${e instanceof Error?e.message:String(e)}\n`,exitCode:1}}})}const _A=[`--silent`,`-s`,`--interactive`,`-i`],vA=e(`mcp-command`),yA=`/workspace/.mcp/aliases`;function W(e){return{stdout:e,stderr:``,exitCode:0}}function G(e,t=1){return{stdout:``,stderr:`${e}\n`,exitCode:t}}function bA(e){return G(`mcp: ${e}`)}function xA(){return`usage: mcp <command> [args]
1603
+ `,exitCode:1};let n=t.join(`-`),r=`https://www.sliccy.com/man/${n}.plain.html`;try{let t=await e(r,{method:`GET`});return t.status===404?{stdout:``,stderr:`No manual entry for ${n}\n`,exitCode:1}:t.status<200||t.status>=300?{stdout:``,stderr:`man: failed to fetch manual page for ${n}: ${t.status} ${t.statusText}\n`,exitCode:1}:{stdout:gA(new TextDecoder(`utf-8`).decode(t.body))+`
1604
+ `,stderr:``,exitCode:0}}catch(e){return{stdout:``,stderr:`man: ${e instanceof Error?e.message:String(e)}\n`,exitCode:1}}})}const vA=[`--silent`,`-s`,`--interactive`,`-i`],yA=e(`mcp-command`),bA=`/workspace/.mcp/aliases`;function W(e){return{stdout:e,stderr:``,exitCode:0}}function G(e,t=1){return{stdout:``,stderr:`${e}\n`,exitCode:t}}function xA(e){return G(`mcp: ${e}`)}function SA(){return`usage: mcp <command> [args]
1585
1605
 
1586
1606
  Commands:
1587
1607
  add <url> <name> Register an MCP server. Runs OAuth if required.
@@ -1603,7 +1623,7 @@ Examples:
1603
1623
  mcp search forecast
1604
1624
  mcp auth weather
1605
1625
  mcp delete weather
1606
- `}function SA(e={}){return S(`mcp`,async t=>{if(t.length===0||t[0]===`--help`||t[0]===`-h`)return W(xA());let n=t[0],r=t.slice(1);try{switch(n){case`add`:return await CA(r,e);case`list`:case`ls`:return await TA(r,e);case`delete`:case`rm`:return await kA(r,e);case`invoke`:return await AA(r,e);case`search`:return await DA(r,e);case`refresh`:return await XA(r,e);case`auth`:return await ZA(r,e);default:return G(`mcp: unknown subcommand "${n}" (try \`mcp --help\`)`)}}catch(e){let t=e instanceof Error?e.message:String(e);return vA.error(`mcp subcommand failed`,{sub:n,error:t}),e instanceof ra?G(`mcp ${n}: ${t}`,124):G(`mcp ${n}: ${t}`)}})}async function CA(e,t){if(w(e))return W(`usage: mcp add <url> <name>
1626
+ `}function CA(e={}){return S(`mcp`,async t=>{if(t.length===0||t[0]===`--help`||t[0]===`-h`)return W(SA());let n=t[0],r=t.slice(1);try{switch(n){case`add`:return await wA(r,e);case`list`:case`ls`:return await EA(r,e);case`delete`:case`rm`:return await AA(r,e);case`invoke`:return await jA(r,e);case`search`:return await OA(r,e);case`refresh`:return await ZA(r,e);case`auth`:return await QA(r,e);default:return G(`mcp: unknown subcommand "${n}" (try \`mcp --help\`)`)}}catch(e){let t=e instanceof Error?e.message:String(e);return yA.error(`mcp subcommand failed`,{sub:n,error:t}),e instanceof ra?G(`mcp ${n}: ${t}`,124):G(`mcp ${n}: ${t}`)}})}async function wA(e,t){if(w(e))return W(`usage: mcp add <url> <name>
1607
1627
 
1608
1628
  Probes <url> with an unauthenticated MCP \`initialize\`. If the server
1609
1629
  returns 401, runs OAuth discovery → dynamic client registration → PKCE
@@ -1612,20 +1632,20 @@ authorization-code flow, stores the access token, and retries.
1612
1632
  On success, the server is persisted to /workspace/.mcp/servers.json and
1613
1633
  an alias shim is written to /workspace/.mcp/aliases/<name>.jsh so the
1614
1634
  short name resolves on the PATH.
1615
- `);let n=C(e,{});if(`error`in n)return bA(n.error);if(n.positionals.length<2)return G(`mcp add: expected <url> <name>`);let[r,i]=n.positionals;if(!/^https?:\/\//i.test(r))return G(`mcp add: invalid URL "${r}" (must start with http:// or https://)`);if(!/^[A-Za-z][A-Za-z0-9_-]*$/.test(i))return G(`mcp add: invalid name "${i}" (letters, digits, _ and - only; must start with a letter)`);let{getServer:a,setServer:o}=await import(`./store-DMPHri86.js`).then(e=>e.r);if(await a(i,t.fs))return G(`mcp add: a server named "${i}" already exists`);let{McpClient:s,McpAuthRequiredError:c}=await import(`./client-C4_ggaf5.js`).then(e=>e.n),l=new s({url:r,fetchImpl:t.fetchImpl}),u;try{await l.initialize()}catch(e){if(!(e instanceof c))throw e;u=await wA(r,i,e.resourceMetadataUrl,t),l=new s({url:r,fetchImpl:t.fetchImpl,getAuthHeader:()=>$A(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 ij(i,t);let m=await sj(i,f,t);if(u){let{registerMcpProvider:e}=await import(`./provider-Do8hIn0m.js`);e({name:i,serverUrl:r,auth:u})}return W([`Added MCP server "${i}" → ${r}`,` tools: ${d.length}, apps: ${f.length} (${m} sprinkle${m===1?``:`s`})`,` alias: ${yA}/${i}.jsh`,u?` auth: oauth (provider mcp:${i})`:` auth: none`].join(`
1635
+ `);let n=C(e,{});if(`error`in n)return xA(n.error);if(n.positionals.length<2)return G(`mcp add: expected <url> <name>`);let[r,i]=n.positionals;if(!/^https?:\/\//i.test(r))return G(`mcp add: invalid URL "${r}" (must start with http:// or https://)`);if(!/^[A-Za-z][A-Za-z0-9_-]*$/.test(i))return G(`mcp add: invalid name "${i}" (letters, digits, _ and - only; must start with a letter)`);let{getServer:a,setServer:o}=await import(`./store-vMYCG7nS.js`).then(e=>e.r);if(await a(i,t.fs))return G(`mcp add: a server named "${i}" already exists`);let{McpClient:s,McpAuthRequiredError:c}=await import(`./client-C4_ggaf5.js`).then(e=>e.n),l=new s({url:r,fetchImpl:t.fetchImpl}),u;try{await l.initialize()}catch(e){if(!(e instanceof c))throw e;u=await TA(r,i,e.resourceMetadataUrl,t),l=new s({url:r,fetchImpl:t.fetchImpl,getAuthHeader:()=>ej(i)}),await l.initialize()}let d=await l.toolsList(),f=await l.appsList(),p=new Date().toISOString();await o(i,{url:r,protocolVersion:l.getNegotiatedProtocolVersion(),tools:d,apps:f,addedAt:p,lastRefreshedAt:p,...u?{auth:u}:{}},t.fs),await aj(i,t);let m=await cj(i,f,t);if(u){let{registerMcpProvider:e}=await import(`./provider-DKLBs-rm.js`);e({name:i,serverUrl:r,auth:u})}return W([`Added MCP server "${i}" → ${r}`,` tools: ${d.length}, apps: ${f.length} (${m} sprinkle${m===1?``:`s`})`,` alias: ${bA}/${i}.jsh`,u?` auth: oauth (provider mcp:${i})`:` auth: none`].join(`
1616
1636
  `)+`
1617
- `)}async function wA(e,t,n,r){let{discoverAuth:i,dynamicRegister:a,runAuthFlow:o}=await import(`./oauth-D20BEoY6.js`),{saveOAuthAccount:s}=await import(`./account-store-CckwuDB2.js`).then(e=>e.t),c=await tj(r.oauthFetchImpl),l=r.oauthLauncher??await ej(),u=await i(e,n,c);vA.debug(`MCP OAuth discovery succeeded`,{name:t,serverUrl:e,discoveryPath:u.discoveryPath,issuer:u.issuer});let d=await ia(we()),f=await a(u,d,c),p=u.supportedScopes&&u.supportedScopes.length>0?u.supportedScopes.join(` `):void 0,m=await o({asMetadata:u,clientId:f.clientId,scope:p,redirectUri:d,launcher:l,fetchImpl:c}),h=`mcp:${t}`;return await s({providerId:h,accessToken:m.accessToken,refreshToken:m.refreshToken,tokenExpiresAt:m.expiresAt,scopes:m.scope}),{providerId:h,authorizationServer:u.issuer,clientId:f.clientId,redirectUri:d,scope:m.scope??p,registrationClientUri:f.registrationClientUri}}async function TA(e,t){if(w(e))return W(`usage: mcp list
1618
- `);let n=C(e,{});if(`error`in n)return bA(n.error);let{ensureAllMcpProvidersRegistered:r}=await import(`./provider-Do8hIn0m.js`);await r();let{listServers:i}=await import(`./store-DMPHri86.js`).then(e=>e.r),a=await i(t.fs),o=Object.keys(a).sort();if(o.length===0)return W("No MCP servers configured. Use `mcp add <url> <name>`.\n");let s=[[`NAME`,`URL`,`AUTH`,`TOOLS`,`APPS`,`ADDED`]];for(let e of o){let t=a[e];s.push([e,t.url,t.auth?`yes`:`no`,String(t.tools?.length??0),String(t.apps?.length??0),t.addedAt?t.addedAt.slice(0,10):`-`])}return W(EA(s))}function EA(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(`
1637
+ `)}async function TA(e,t,n,r){let{discoverAuth:i,dynamicRegister:a,runAuthFlow:o}=await import(`./oauth-D20BEoY6.js`),{saveOAuthAccount:s}=await import(`./account-store-DtP5_zcC.js`).then(e=>e.t),c=await nj(r.oauthFetchImpl),l=r.oauthLauncher??await tj(),u=await i(e,n,c);yA.debug(`MCP OAuth discovery succeeded`,{name:t,serverUrl:e,discoveryPath:u.discoveryPath,issuer:u.issuer});let d=await ia(we()),f=await a(u,d,c),p=u.supportedScopes&&u.supportedScopes.length>0?u.supportedScopes.join(` `):void 0,m=await o({asMetadata:u,clientId:f.clientId,scope:p,redirectUri:d,launcher:l,fetchImpl:c}),h=`mcp:${t}`;return await s({providerId:h,accessToken:m.accessToken,refreshToken:m.refreshToken,tokenExpiresAt:m.expiresAt,scopes:m.scope}),{providerId:h,authorizationServer:u.issuer,clientId:f.clientId,redirectUri:d,scope:m.scope??p,registrationClientUri:f.registrationClientUri}}async function EA(e,t){if(w(e))return W(`usage: mcp list
1638
+ `);let n=C(e,{});if(`error`in n)return xA(n.error);let{ensureAllMcpProvidersRegistered:r}=await import(`./provider-DKLBs-rm.js`);await r();let{listServers:i}=await import(`./store-vMYCG7nS.js`).then(e=>e.r),a=await i(t.fs),o=Object.keys(a).sort();if(o.length===0)return W("No MCP servers configured. Use `mcp add <url> <name>`.\n");let s=[[`NAME`,`URL`,`AUTH`,`TOOLS`,`APPS`,`ADDED`]];for(let e of o){let t=a[e];s.push([e,t.url,t.auth?`yes`:`no`,String(t.tools?.length??0),String(t.apps?.length??0),t.addedAt?t.addedAt.slice(0,10):`-`])}return W(DA(s))}function DA(e){let t=e[0].map((t,n)=>e.reduce((e,t)=>Math.max(e,(t[n]??``).length),0));return e.map(e=>e.map((e,n)=>e.padEnd(t[n])).join(` `).trimEnd()).join(`
1619
1639
  `)+`
1620
- `}async function DA(e,t){if(w(e))return W(`usage: mcp search <query>
1640
+ `}async function OA(e,t){if(w(e))return W(`usage: mcp search <query>
1621
1641
 
1622
1642
  Case-insensitive substring search across the cached tools of every
1623
1643
  registered MCP server. Matches tool name OR description and prints a
1624
1644
  table of (server, tool, description, match-field) rows.
1625
- `);let n=C(e,{});if(`error`in n)return bA(n.error);if(n.positionals.length===0)return G(`mcp search: expected <query>`);let r=n.positionals[0],i=r.toLowerCase(),{ensureAllMcpProvidersRegistered:a}=await import(`./provider-Do8hIn0m.js`);await a();let{listServers:o}=await import(`./store-DMPHri86.js`).then(e=>e.r),s=await o(t.fs),c=Object.keys(s).sort();if(c.length===0)return W("No MCP servers configured. Use `mcp add <url> <name>`.\n");let l=[];for(let e of c){let t=s[e].tools??[];for(let n of t){let t=n.description??``,r=n.name.toLowerCase().includes(i),a=t.toLowerCase().includes(i);if(!r&&!a)continue;let o=r&&a?`name+description`:r?`name`:`description`;l.push({server:e,tool:n.name,description:t,match:o})}}if(l.length===0)return W(`No tools matched "${r}".\n`);l.sort((e,t)=>e.server===t.server?e.tool.localeCompare(t.tool):e.server.localeCompare(t.server));let u=[[`SERVER`,`TOOL`,`DESCRIPTION`,`MATCH`]];for(let e of l)u.push([e.server,e.tool,OA(e.description),e.match]);return W(EA(u))}function OA(e){if(!e)return``;let t=e.replace(/\s+/g,` `).trim();return t.length<=60?t:t.slice(0,59)+`…`}async function kA(e,t){if(e.length===0||w(e))return e.length===0?G(`mcp delete: expected <name>`):W(`usage: mcp delete <name>
1626
- `);let n=C(e,{});if(`error`in n)return bA(n.error);let r=n.positionals[0];if(!r)return G(`mcp delete: expected <name>`);let{ensureMcpProviderRegistered:i,removeMcpProvider:a}=await import(`./provider-Do8hIn0m.js`);await i(r);let{deleteServer:o}=await import(`./store-DMPHri86.js`).then(e=>e.r),s=await o(r,t.fs);await aj(r,t),await oj(r,t);let c=`mcp:${r}`,l=!1;try{let{removeAccount:e,getAccounts:t}=await import(`./account-store-CckwuDB2.js`).then(e=>e.t);t().some(e=>e.providerId===c)&&(await e(c),l=!0)}catch(e){vA.warn(`mcp delete: OAuth removal failed`,{providerId:c,error:e instanceof Error?e.message:String(e)})}let u=a(r);return!s&&!l&&!u?G(`mcp delete: no server, alias, or account found for "${r}"`):W([`Removed MCP server "${r}"`,` servers.json: ${s?`removed`:`not present`}`,` alias: cleaned`,` sprinkles: cleaned`,` oauth: ${l?`removed`:`not present`}`,` provider: ${u?`unregistered`:`not registered`}`].join(`
1645
+ `);let n=C(e,{});if(`error`in n)return xA(n.error);if(n.positionals.length===0)return G(`mcp search: expected <query>`);let r=n.positionals[0],i=r.toLowerCase(),{ensureAllMcpProvidersRegistered:a}=await import(`./provider-DKLBs-rm.js`);await a();let{listServers:o}=await import(`./store-vMYCG7nS.js`).then(e=>e.r),s=await o(t.fs),c=Object.keys(s).sort();if(c.length===0)return W("No MCP servers configured. Use `mcp add <url> <name>`.\n");let l=[];for(let e of c){let t=s[e].tools??[];for(let n of t){let t=n.description??``,r=n.name.toLowerCase().includes(i),a=t.toLowerCase().includes(i);if(!r&&!a)continue;let o=r&&a?`name+description`:r?`name`:`description`;l.push({server:e,tool:n.name,description:t,match:o})}}if(l.length===0)return W(`No tools matched "${r}".\n`);l.sort((e,t)=>e.server===t.server?e.tool.localeCompare(t.tool):e.server.localeCompare(t.server));let u=[[`SERVER`,`TOOL`,`DESCRIPTION`,`MATCH`]];for(let e of l)u.push([e.server,e.tool,kA(e.description),e.match]);return W(DA(u))}function kA(e){if(!e)return``;let t=e.replace(/\s+/g,` `).trim();return t.length<=60?t:t.slice(0,59)+`…`}async function AA(e,t){if(e.length===0||w(e))return e.length===0?G(`mcp delete: expected <name>`):W(`usage: mcp delete <name>
1646
+ `);let n=C(e,{});if(`error`in n)return xA(n.error);let r=n.positionals[0];if(!r)return G(`mcp delete: expected <name>`);let{ensureMcpProviderRegistered:i,removeMcpProvider:a}=await import(`./provider-DKLBs-rm.js`);await i(r);let{deleteServer:o}=await import(`./store-vMYCG7nS.js`).then(e=>e.r),s=await o(r,t.fs);await oj(r,t),await sj(r,t);let c=`mcp:${r}`,l=!1;try{let{removeAccount:e,getAccounts:t}=await import(`./account-store-DtP5_zcC.js`).then(e=>e.t);t().some(e=>e.providerId===c)&&(await e(c),l=!0)}catch(e){yA.warn(`mcp delete: OAuth removal failed`,{providerId:c,error:e instanceof Error?e.message:String(e)})}let u=a(r);return!s&&!l&&!u?G(`mcp delete: no server, alias, or account found for "${r}"`):W([`Removed MCP server "${r}"`,` servers.json: ${s?`removed`:`not present`}`,` alias: cleaned`,` sprinkles: cleaned`,` oauth: ${l?`removed`:`not present`}`,` provider: ${u?`unregistered`:`not registered`}`].join(`
1627
1647
  `)+`
1628
- `)}async function AA(e,t){if(e.length===0)return G(`mcp invoke: expected <name>`);if(w(e.slice(0,1)))return W(NA());let n=C([e[0]],{});if(`error`in n)return bA(n.error);let r=n.positionals[0];if(!r)return G(`mcp invoke: expected <name>`);let i=e.slice(1),{ensureMcpProviderRegistered:a}=await import(`./provider-Do8hIn0m.js`);await a(r);let{getServer:o}=await import(`./store-DMPHri86.js`).then(e=>e.r),s=await o(r,t.fs);if(!s)return G(`mcp invoke: unknown server "${r}" (run \`mcp add <url> ${r}\` first)`);let c=s.tools??[];if(i.length===0||w(i.slice(0,1)))return W(PA(r,s,c));let l=C([i[0]],{});if(`error`in l)return bA(l.error);let u=l.positionals[0];if(!u)return G(`mcp invoke: expected <tool>`);let d=c.find(e=>e.name===u);if(!d)return G(`mcp invoke: unknown tool "${u}" on "${r}" (run \`${r}\` to list tools)`);let{timeoutMs:f,remaining:p,warnings:m}=jA(i.slice(1));if(w(p))return W(IA(r,d));let h=LA(p,d.inputSchema);if(!h.ok)return G(`mcp invoke: ${h.error}`);let{McpClient:g}=await import(`./client-C4_ggaf5.js`).then(e=>e.n),_=new g({url:s.url,fetchImpl:t.fetchImpl,headers:s.headers,getAuthHeader:s.auth?()=>$A(r):void 0,...f===void 0?{}:{timeoutMs:f}});await _.initialize();let v=YA(await _.toolsCall(u,h.value));return m.length>0&&(v.stderr=m.map(e=>`${e}\n`).join(``)+v.stderr),v}function jA(e){let t=[],n=[],r,i=0;for(;i<e.length;){let a=e[i];if(a.startsWith(`--timeout=`)){let e=MA(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=MA(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 MA(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 NA(){return`usage: mcp invoke <name> [tool] [--timeout <seconds>] [--flag value …]
1648
+ `)}async function jA(e,t){if(e.length===0)return G(`mcp invoke: expected <name>`);if(w(e.slice(0,1)))return W(PA());let n=C([e[0]],{});if(`error`in n)return xA(n.error);let r=n.positionals[0];if(!r)return G(`mcp invoke: expected <name>`);let i=e.slice(1),{ensureMcpProviderRegistered:a}=await import(`./provider-DKLBs-rm.js`);await a(r);let{getServer:o}=await import(`./store-vMYCG7nS.js`).then(e=>e.r),s=await o(r,t.fs);if(!s)return G(`mcp invoke: unknown server "${r}" (run \`mcp add <url> ${r}\` first)`);let c=s.tools??[];if(i.length===0||w(i.slice(0,1)))return W(FA(r,s,c));let l=C([i[0]],{});if(`error`in l)return xA(l.error);let u=l.positionals[0];if(!u)return G(`mcp invoke: expected <tool>`);let d=c.find(e=>e.name===u);if(!d)return G(`mcp invoke: unknown tool "${u}" on "${r}" (run \`${r}\` to list tools)`);let{timeoutMs:f,remaining:p,warnings:m}=MA(i.slice(1));if(w(p))return W(LA(r,d));let h=RA(p,d.inputSchema);if(!h.ok)return G(`mcp invoke: ${h.error}`);let{McpClient:g}=await import(`./client-C4_ggaf5.js`).then(e=>e.n),_=new g({url:s.url,fetchImpl:t.fetchImpl,headers:s.headers,getAuthHeader:s.auth?()=>ej(r):void 0,...f===void 0?{}:{timeoutMs:f}});await _.initialize();let v=XA(await _.toolsCall(u,h.value));return m.length>0&&(v.stderr=m.map(e=>`${e}\n`).join(``)+v.stderr),v}function MA(e){let t=[],n=[],r,i=0;for(;i<e.length;){let a=e[i];if(a.startsWith(`--timeout=`)){let e=NA(a.slice(10));e.ok?r=e.value:n.push(e.error),i+=1;continue}if(a===`--timeout`){let t=e[i+1];if(t===void 0||t.startsWith(`--`)){n.push(`mcp invoke: --timeout requires a value (got ${t===void 0?`nothing`:`"${t}"`}); using default.`),i+=1;continue}let a=NA(t);a.ok?r=a.value:n.push(a.error),i+=2;continue}t.push(a),i+=1}return{timeoutMs:r,remaining:t,warnings:n}}function NA(e){if(!/^-?\d+$/.test(e))return{ok:!1,error:`mcp invoke: invalid --timeout value "${e}" (expected positive integer seconds); using default.`};let t=Number(e);return!Number.isFinite(t)||t<1?{ok:!1,error:`mcp invoke: invalid --timeout value "${e}" (must be >= 1 second); using default.`}:{ok:!0,value:t*1e3}}function PA(){return`usage: mcp invoke <name> [tool] [--timeout <seconds>] [--flag value …]
1629
1649
 
1630
1650
  mcp invoke <name> List tools on <name>.
1631
1651
  mcp invoke <name> <tool> --help Show flags for <tool>.
@@ -1645,20 +1665,20 @@ Arguments are coerced according to the tool's JSON Schema:
1645
1665
  array of objects) is parsed as JSON, e.g. \`--params '{"url":"…"}'\`.
1646
1666
  Nested fields can be set with dotted flags (\`--params.url …\`).
1647
1667
  Unknown \`--flags\` exit non-zero instead of being dropped.
1648
- `}function PA(e,t,n){let r=[];if(r.push(`MCP server "${e}" → ${t.url}`),n.length===0)r.push(" (no tools cached — run `mcp refresh "+e+"`)");else{r.push(``),r.push(`Tools:`);let t=n.reduce((e,t)=>Math.max(e,t.name.length),0);for(let e of n)r.push(` ${e.name.padEnd(t)} ${e.description??``}`.trimEnd());r.push(``),r.push(`Run \`${e} <tool> --help\` for tool-specific flags.`)}return r.join(`
1668
+ `}function FA(e,t,n){let r=[];if(r.push(`MCP server "${e}" → ${t.url}`),n.length===0)r.push(" (no tools cached — run `mcp refresh "+e+"`)");else{r.push(``),r.push(`Tools:`);let t=n.reduce((e,t)=>Math.max(e,t.name.length),0);for(let e of n)r.push(` ${e.name.padEnd(t)} ${e.description??``}`.trimEnd());r.push(``),r.push(`Run \`${e} <tool> --help\` for tool-specific flags.`)}return r.join(`
1649
1669
  `)+`
1650
- `}function FA(e){return e??{}}function IA(e,t){let n=FA(t.inputSchema),r=n.properties??{},i=new Set(Array.isArray(n.required)?n.required:[]),a=[];a.push(`usage: ${e} ${t.name} [flags]`),t.description&&(a.push(``),a.push(t.description));let o=Object.keys(r);if(o.length===0)return a.push(``),a.push(`(no flags declared)`),a.join(`
1670
+ `}function IA(e){return e??{}}function LA(e,t){let n=IA(t.inputSchema),r=n.properties??{},i=new Set(Array.isArray(n.required)?n.required:[]),a=[];a.push(`usage: ${e} ${t.name} [flags]`),t.description&&(a.push(``),a.push(t.description));let o=Object.keys(r);if(o.length===0)return a.push(``),a.push(`(no flags declared)`),a.join(`
1651
1671
  `)+`
1652
1672
  `;a.push(``),a.push(`Flags:`);let s=o.map(e=>` --${e} <${r[e]?.type??`string`}>`),c=s.reduce((e,t)=>Math.max(e,t.length),0);for(let e=0;e<o.length;e++){let t=o[e],n=r[t]?.description??``,l=i.has(t)?` (required)`:``;a.push(`${s[e].padEnd(c)} ${n}${l}`.trimEnd())}return a.join(`
1653
1673
  `)+`
1654
- `}function LA(e,t){let n=FA(t),r=n.properties??{},i=new Set(Array.isArray(n.required)?n.required:[]),a=UA(),o=0;for(;o<e.length;){let t=RA(e,o,r,a);if(!t.ok)return t;o=t.nextIndex}for(let e of i)if(!Object.hasOwn(a,e))return{ok:!1,error:`missing required flag --${e}`};return{ok:!0,value:a}}function RA(e,t,n,r){let i=e[t];if(!i.startsWith(`--`))return{ok:!1,error:`unexpected positional argument "${i}"`};let{key:a,inlineValue:o}=KA(i),s=zA(a,n);if(!s.ok)return s;let{rootKey:c,dottedPath:l,meta:u}=s,d=u.type,f=d??`string`,p=f===`array`,m=(p?u.items?.type:void 0)??`string`;if(l&&d!==void 0&&d!==`object`)return{ok:!1,error:`unknown flag: --${a}`};let h=BA(e,t,a,o,f,l);if(!h.ok)return h;if(h.bareBoolean)return r[c]=!0,{ok:!0,nextIndex:h.nextIndex};let g=l?`string`:p?m:f,_=qA(h.raw,g);if(!_.ok)return{ok:!1,error:`--${a}: ${_.error}`};let v=VA(r,c,l,_.value,p);return v.ok?{ok:!0,nextIndex:h.nextIndex}:v}function zA(e,t){if(Object.hasOwn(t,e))return{ok:!0,rootKey:e,dottedPath:null,meta:t[e]??{}};let n=e.indexOf(`.`);if(n<=0)return{ok:!1,error:`unknown flag: --${e}`};let r=e.slice(0,n),i=e.slice(n+1);if(!Object.hasOwn(t,r)||i.length===0)return{ok:!1,error:`unknown flag: --${e}`};let a=i.split(`.`);return WA(r)||a.some(e=>e.length===0||WA(e))?{ok:!1,error:`unknown flag: --${e}`}:{ok:!0,rootKey:r,dottedPath:a,meta:t[r]??{}}}function BA(e,t,n,r,i,a){if(r!==void 0)return{ok:!0,raw:r,nextIndex:t+1,bareBoolean:!1};let o=e[t+1];return!a&&i===`boolean`&&(o===void 0||o.startsWith(`--`))?{ok:!0,raw:``,nextIndex:t+1,bareBoolean:!0}:o===void 0?{ok:!1,error:`flag --${n} requires a value`}:{ok:!0,raw:o,nextIndex:t+2,bareBoolean:!1}}function VA(e,t,n,r,i){if(n)return HA(e,t,n,r);if(i){let n=e[t];return Array.isArray(n)?n.push(r):e[t]=[r],{ok:!0}}let a=e[t];return GA(a)&&GA(r)?(Object.assign(a,r),{ok:!0}):(e[t]=r,{ok:!0})}function HA(e,t,n,r){if(WA(t)||n.some(e=>e.length===0||WA(e)))return{ok:!1,error:`unknown flag: --${t}.${n.join(`.`)}`};let i=Object.hasOwn(e,t)?e[t]:void 0;if(i===void 0)e[t]=UA();else if(!GA(i))return{ok:!1,error:`--${t}: cannot nest into a ${typeof i} value`};let a=e[t];for(let e=0;e<n.length-1;e++){let r=n[e],i=Object.hasOwn(a,r)?a[r]:void 0;if(i===void 0)a[r]=UA();else if(!GA(i))return{ok:!1,error:`--${t}.${n.slice(0,e+1).join(`.`)}: cannot nest into a ${typeof i} value`};a=a[r]}return a[n[n.length-1]]=r,{ok:!0}}function UA(){return Object.create(null)}function WA(e){return e===`__proto__`||e===`prototype`||e===`constructor`}function GA(e){return typeof e==`object`&&!!e&&!Array.isArray(e)&&e!==Object.prototype}function KA(e){let t=e.indexOf(`=`);return t>2?{key:e.slice(2,t),inlineValue:e.slice(t+1)}:{key:e.slice(2),inlineValue:void 0}}function qA(e,t){switch(t){case`integer`:return/^-?\d+$/.test(e)?{ok:!0,value:Number(e)}:{ok:!1,error:`expected integer, got "${e}"`};case`number`:{let t=Number(e);return Number.isFinite(t)?{ok:!0,value:t}:{ok:!1,error:`expected number, got "${e}"`}}case`boolean`:return e===`true`||e===`1`||e===`yes`?{ok:!0,value:!0}:e===`false`||e===`0`||e===`no`?{ok:!0,value:!1}:{ok:!1,error:`expected boolean, got "${e}"`};case`object`:return JA(e);default:return{ok:!0,value:e}}}function JA(e){let t;try{t=JSON.parse(e)}catch{return{ok:!1,error:`expected object JSON, got "${e}"`}}return GA(t)?{ok:!0,value:t}:{ok:!1,error:`expected object JSON, got "${e}"`}}function YA(e){let t=e??{},n=Array.isArray(t.content)?t.content:[],r=[];for(let e of n)if(!(!e||typeof e!=`object`))switch(e.type){case`text`:typeof e.text==`string`&&r.push(e.text);break;case`image`:r.push(`[image: ${e.mimeType??`unknown mime`}]`);break;case`resource`:{let t=e.resource?.uri??e.uri??`unknown uri`;r.push(`[resource: ${t}]`);break}default:r.push(`[${e.type??`unknown`}]`)}let i=r.join(`
1674
+ `}function RA(e,t){let n=IA(t),r=n.properties??{},i=new Set(Array.isArray(n.required)?n.required:[]),a=WA(),o=0;for(;o<e.length;){let t=zA(e,o,r,a);if(!t.ok)return t;o=t.nextIndex}for(let e of i)if(!Object.hasOwn(a,e))return{ok:!1,error:`missing required flag --${e}`};return{ok:!0,value:a}}function zA(e,t,n,r){let i=e[t];if(!i.startsWith(`--`))return{ok:!1,error:`unexpected positional argument "${i}"`};let{key:a,inlineValue:o}=qA(i),s=BA(a,n);if(!s.ok)return s;let{rootKey:c,dottedPath:l,meta:u}=s,d=u.type,f=d??`string`,p=f===`array`,m=(p?u.items?.type:void 0)??`string`;if(l&&d!==void 0&&d!==`object`)return{ok:!1,error:`unknown flag: --${a}`};let h=VA(e,t,a,o,f,l);if(!h.ok)return h;if(h.bareBoolean)return r[c]=!0,{ok:!0,nextIndex:h.nextIndex};let g=l?`string`:p?m:f,_=JA(h.raw,g);if(!_.ok)return{ok:!1,error:`--${a}: ${_.error}`};let v=HA(r,c,l,_.value,p);return v.ok?{ok:!0,nextIndex:h.nextIndex}:v}function BA(e,t){if(Object.hasOwn(t,e))return{ok:!0,rootKey:e,dottedPath:null,meta:t[e]??{}};let n=e.indexOf(`.`);if(n<=0)return{ok:!1,error:`unknown flag: --${e}`};let r=e.slice(0,n),i=e.slice(n+1);if(!Object.hasOwn(t,r)||i.length===0)return{ok:!1,error:`unknown flag: --${e}`};let a=i.split(`.`);return GA(r)||a.some(e=>e.length===0||GA(e))?{ok:!1,error:`unknown flag: --${e}`}:{ok:!0,rootKey:r,dottedPath:a,meta:t[r]??{}}}function VA(e,t,n,r,i,a){if(r!==void 0)return{ok:!0,raw:r,nextIndex:t+1,bareBoolean:!1};let o=e[t+1];return!a&&i===`boolean`&&(o===void 0||o.startsWith(`--`))?{ok:!0,raw:``,nextIndex:t+1,bareBoolean:!0}:o===void 0?{ok:!1,error:`flag --${n} requires a value`}:{ok:!0,raw:o,nextIndex:t+2,bareBoolean:!1}}function HA(e,t,n,r,i){if(n)return UA(e,t,n,r);if(i){let n=e[t];return Array.isArray(n)?n.push(r):e[t]=[r],{ok:!0}}let a=e[t];return KA(a)&&KA(r)?(Object.assign(a,r),{ok:!0}):(e[t]=r,{ok:!0})}function UA(e,t,n,r){if(GA(t)||n.some(e=>e.length===0||GA(e)))return{ok:!1,error:`unknown flag: --${t}.${n.join(`.`)}`};let i=Object.hasOwn(e,t)?e[t]:void 0;if(i===void 0)e[t]=WA();else if(!KA(i))return{ok:!1,error:`--${t}: cannot nest into a ${typeof i} value`};let a=e[t];for(let e=0;e<n.length-1;e++){let r=n[e],i=Object.hasOwn(a,r)?a[r]:void 0;if(i===void 0)a[r]=WA();else if(!KA(i))return{ok:!1,error:`--${t}.${n.slice(0,e+1).join(`.`)}: cannot nest into a ${typeof i} value`};a=a[r]}return a[n[n.length-1]]=r,{ok:!0}}function WA(){return Object.create(null)}function GA(e){return e===`__proto__`||e===`prototype`||e===`constructor`}function KA(e){return typeof e==`object`&&!!e&&!Array.isArray(e)&&e!==Object.prototype}function qA(e){let t=e.indexOf(`=`);return t>2?{key:e.slice(2,t),inlineValue:e.slice(t+1)}:{key:e.slice(2),inlineValue:void 0}}function JA(e,t){switch(t){case`integer`:return/^-?\d+$/.test(e)?{ok:!0,value:Number(e)}:{ok:!1,error:`expected integer, got "${e}"`};case`number`:{let t=Number(e);return Number.isFinite(t)?{ok:!0,value:t}:{ok:!1,error:`expected number, got "${e}"`}}case`boolean`:return e===`true`||e===`1`||e===`yes`?{ok:!0,value:!0}:e===`false`||e===`0`||e===`no`?{ok:!0,value:!1}:{ok:!1,error:`expected boolean, got "${e}"`};case`object`:return YA(e);default:return{ok:!0,value:e}}}function YA(e){let t;try{t=JSON.parse(e)}catch{return{ok:!1,error:`expected object JSON, got "${e}"`}}return KA(t)?{ok:!0,value:t}:{ok:!1,error:`expected object JSON, got "${e}"`}}function XA(e){let t=e??{},n=Array.isArray(t.content)?t.content:[],r=[];for(let e of n)if(!(!e||typeof e!=`object`))switch(e.type){case`text`:typeof e.text==`string`&&r.push(e.text);break;case`image`:r.push(`[image: ${e.mimeType??`unknown mime`}]`);break;case`resource`:{let t=e.resource?.uri??e.uri??`unknown uri`;r.push(`[resource: ${t}]`);break}default:r.push(`[${e.type??`unknown`}]`)}let i=r.join(`
1655
1675
  `),a=i.endsWith(`
1656
1676
  `)?``:`
1657
- `;return t.isError?{stdout:``,stderr:(i||`(tool reported error)`)+a,exitCode:1}:{stdout:i+(i?a:``),stderr:``,exitCode:0}}async function XA(e,t){if(e.length===0||w(e))return e.length===0?G(`mcp refresh: expected <name>`):W(`usage: mcp refresh <name>
1677
+ `;return t.isError?{stdout:``,stderr:(i||`(tool reported error)`)+a,exitCode:1}:{stdout:i+(i?a:``),stderr:``,exitCode:0}}async function ZA(e,t){if(e.length===0||w(e))return e.length===0?G(`mcp refresh: expected <name>`):W(`usage: mcp refresh <name>
1658
1678
 
1659
1679
  Re-fetches the tool catalog and \`apps/list\` for <name>. Does NOT refresh
1660
1680
  OAuth tokens — for OAuth token refresh use \`mcp auth <name>\`.
1661
- `);let n=C(e,{});if(`error`in n)return bA(n.error);let r=n.positionals[0];if(!r)return G(`mcp refresh: expected <name>`);let{ensureMcpProviderRegistered:i}=await import(`./provider-Do8hIn0m.js`);await i(r);let{getServer:a,setServer:o}=await import(`./store-DMPHri86.js`).then(e=>e.r),s=await a(r,t.fs);if(!s)return G(`mcp refresh: unknown server "${r}"`);let{McpClient:c,McpAuthRequiredError:l}=await import(`./client-C4_ggaf5.js`).then(e=>e.n),u=new c({url:s.url,fetchImpl:t.fetchImpl,headers:s.headers,getAuthHeader:s.auth?()=>$A(r):void 0});try{await u.initialize()}catch(e){if(e instanceof l)return G(`mcp refresh: server "${r}" returned 401 — token may have expired. Run \`mcp auth ${r}\` to re-authenticate.`);throw e}let d=await u.toolsList(),f=await u.appsList();await o(r,{...s,protocolVersion:u.getNegotiatedProtocolVersion(),tools:d,apps:f,lastRefreshedAt:new Date().toISOString()},t.fs);let p=await sj(r,f,t);return W(`Refreshed "${r}" — tools: ${d.length}, apps: ${f.length} (${p} sprinkle${p===1?``:`s`})\n`)}async function ZA(e,t){if(w(e))return W(`usage: mcp auth <name> [--silent | --interactive]
1681
+ `);let n=C(e,{});if(`error`in n)return xA(n.error);let r=n.positionals[0];if(!r)return G(`mcp refresh: expected <name>`);let{ensureMcpProviderRegistered:i}=await import(`./provider-DKLBs-rm.js`);await i(r);let{getServer:a,setServer:o}=await import(`./store-vMYCG7nS.js`).then(e=>e.r),s=await a(r,t.fs);if(!s)return G(`mcp refresh: unknown server "${r}"`);let{McpClient:c,McpAuthRequiredError:l}=await import(`./client-C4_ggaf5.js`).then(e=>e.n),u=new c({url:s.url,fetchImpl:t.fetchImpl,headers:s.headers,getAuthHeader:s.auth?()=>ej(r):void 0});try{await u.initialize()}catch(e){if(e instanceof l)return G(`mcp refresh: server "${r}" returned 401 — token may have expired. Run \`mcp auth ${r}\` to re-authenticate.`);throw e}let d=await u.toolsList(),f=await u.appsList();await o(r,{...s,protocolVersion:u.getNegotiatedProtocolVersion(),tools:d,apps:f,lastRefreshedAt:new Date().toISOString()},t.fs);let p=await cj(r,f,t);return W(`Refreshed "${r}" — tools: ${d.length}, apps: ${f.length} (${p} sprinkle${p===1?``:`s`})\n`)}async function QA(e,t){if(w(e))return W(`usage: mcp auth <name> [--silent | --interactive]
1662
1682
 
1663
1683
  Re-authenticate an existing MCP server. By default, attempts a silent
1664
1684
  token renewal using the persisted refresh_token; if that returns no
@@ -1670,7 +1690,7 @@ Options:
1670
1690
  -i, --interactive Skip silent renewal and open the OAuth popup
1671
1691
  directly. Use after revoking a refresh token or
1672
1692
  when the AS no longer accepts the cached one.
1673
- `);let n=C(e,{bool:_A});if(`error`in n)return bA(n.error);let r=n.positionals[0];if(!r)return G(`mcp auth: expected <name>`);let i=n.bools.has(`--silent`)||n.bools.has(`-s`),a=n.bools.has(`--interactive`)||n.bools.has(`-i`);if(i&&a)return G(`mcp auth: --silent and --interactive are mutually exclusive`);let{ensureMcpProviderRegistered:o}=await import(`./provider-Do8hIn0m.js`),s=await o(r,{fetchImpl:t.oauthFetchImpl,launcher:t.oauthLauncher}),{getServer:c}=await import(`./store-DMPHri86.js`).then(e=>e.r),l=await c(r,t.fs);if(!l)return G(`mcp auth: unknown server "${r}" (run \`mcp list\` to see configured servers)`);if(!l.auth)return G(`mcp auth: server "${r}" does not use OAuth`);if(!s)return G(`mcp auth: failed to register provider for "${r}"`);let u=`mcp:${r}`,{getRegisteredProviderConfig:d}=await import(`./providers-ChXzAurS.js`).then(e=>e.r),f=d(u);if(!f)return G(`mcp auth: provider "${u}" is not registered`);if(a)return await QA(r,f,t);if(!f.onSilentRenew)return i?G(`mcp auth: provider "${u}" does not support silent renewal; retry without --silent`):await QA(r,f,t);let p=null;try{p=await f.onSilentRenew()}catch(e){let t=e instanceof Error?e.message:String(e);if(i)return G(`mcp auth: silent renewal for "${r}" failed (${t}); retry without --silent to run the interactive flow`);vA.debug(`mcp auth: silent renewal threw, falling back to interactive`,{name:r,error:t})}return p?W(`Re-authenticated "${r}" via silent renewal (provider ${u})\n`):i?G(`mcp auth: silent renewal for "${r}" returned no token; retry without --silent to run the interactive flow`):await QA(r,f,t)}async function QA(e,t,n){if(!t.onOAuthLogin)return G(`mcp auth: provider "${t.id}" does not support interactive OAuth login`);let r=n.oauthLauncher??await ej(),i=!1;return await t.onOAuthLogin(r,()=>{i=!0}),i?W(`Re-authenticated "${e}" via interactive login (provider ${t.id})\n`):G(`mcp auth: interactive login for "${e}" did not complete`)}async function $A(e){let t=`mcp:${e}`,{getOAuthAccountInfo:n}=await import(`./account-store-CckwuDB2.js`).then(e=>e.t),r=n(t);if(!r)return null;if(r.expired){try{let{getRegisteredProviderConfig:e}=await import(`./providers-ChXzAurS.js`).then(e=>e.r),n=await e(t)?.onSilentRenew?.();if(n)return`Bearer ${n}`}catch(e){vA.debug(`silent renewal threw`,{providerId:t,error:e instanceof Error?e.message:String(e)})}return null}return`Bearer ${r.token}`}async function ej(){let{createOAuthLauncher:e}=await import(`./oauth-service-Bx_Dy3GC.js`);return e()}async function tj(e){if(e)return e;let{createProxiedFetch:t}=await import(`./proxied-fetch-CoZ8jHud.js`).then(e=>e.o),n=t();return async(e,t)=>{let r=await n(e,{method:t?.method,headers:t?.headers,body:t?.body}),i=new TextDecoder().decode(r.body);return{ok:r.status>=200&&r.status<300,status:r.status,statusText:r.statusText,text:async()=>i,json:async()=>JSON.parse(i),headers:{get:e=>r.headers[e.toLowerCase()]??null}}}}async function nj(e){if(e)return e;let{VirtualFS:t}=await import(`./fs-DFXgS-c1.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 rj(e){return`// MCP alias for "${e}" — forwards args to \`mcp invoke ${e}\`.
1693
+ `);let n=C(e,{bool:vA});if(`error`in n)return xA(n.error);let r=n.positionals[0];if(!r)return G(`mcp auth: expected <name>`);let i=n.bools.has(`--silent`)||n.bools.has(`-s`),a=n.bools.has(`--interactive`)||n.bools.has(`-i`);if(i&&a)return G(`mcp auth: --silent and --interactive are mutually exclusive`);let{ensureMcpProviderRegistered:o}=await import(`./provider-DKLBs-rm.js`),s=await o(r,{fetchImpl:t.oauthFetchImpl,launcher:t.oauthLauncher}),{getServer:c}=await import(`./store-vMYCG7nS.js`).then(e=>e.r),l=await c(r,t.fs);if(!l)return G(`mcp auth: unknown server "${r}" (run \`mcp list\` to see configured servers)`);if(!l.auth)return G(`mcp auth: server "${r}" does not use OAuth`);if(!s)return G(`mcp auth: failed to register provider for "${r}"`);let u=`mcp:${r}`,{getRegisteredProviderConfig:d}=await import(`./providers-CSGLxatZ.js`).then(e=>e.r),f=d(u);if(!f)return G(`mcp auth: provider "${u}" is not registered`);if(a)return await $A(r,f,t);if(!f.onSilentRenew)return i?G(`mcp auth: provider "${u}" does not support silent renewal; retry without --silent`):await $A(r,f,t);let p=null;try{p=await f.onSilentRenew()}catch(e){let t=e instanceof Error?e.message:String(e);if(i)return G(`mcp auth: silent renewal for "${r}" failed (${t}); retry without --silent to run the interactive flow`);yA.debug(`mcp auth: silent renewal threw, falling back to interactive`,{name:r,error:t})}return p?W(`Re-authenticated "${r}" via silent renewal (provider ${u})\n`):i?G(`mcp auth: silent renewal for "${r}" returned no token; retry without --silent to run the interactive flow`):await $A(r,f,t)}async function $A(e,t,n){if(!t.onOAuthLogin)return G(`mcp auth: provider "${t.id}" does not support interactive OAuth login`);let r=n.oauthLauncher??await tj(),i=!1;return await t.onOAuthLogin(r,()=>{i=!0}),i?W(`Re-authenticated "${e}" via interactive login (provider ${t.id})\n`):G(`mcp auth: interactive login for "${e}" did not complete`)}async function ej(e){let t=`mcp:${e}`,{getOAuthAccountInfo:n}=await import(`./account-store-DtP5_zcC.js`).then(e=>e.t),r=n(t);if(!r)return null;if(r.expired){try{let{getRegisteredProviderConfig:e}=await import(`./providers-CSGLxatZ.js`).then(e=>e.r),n=await e(t)?.onSilentRenew?.();if(n)return`Bearer ${n}`}catch(e){yA.debug(`silent renewal threw`,{providerId:t,error:e instanceof Error?e.message:String(e)})}return null}return`Bearer ${r.token}`}async function tj(){let{createOAuthLauncher:e}=await import(`./oauth-service-Bx_Dy3GC.js`);return e()}async function nj(e){if(e)return e;let{createProxiedFetch:t}=await import(`./proxied-fetch-CoZ8jHud.js`).then(e=>e.o),n=t();return async(e,t)=>{let r=await n(e,{method:t?.method,headers:t?.headers,body:t?.body}),i=new TextDecoder().decode(r.body);return{ok:r.status>=200&&r.status<300,status:r.status,statusText:r.statusText,text:async()=>i,json:async()=>JSON.parse(i),headers:{get:e=>r.headers[e.toLowerCase()]??null}}}}async function rj(e){if(e)return e;let{VirtualFS:t}=await import(`./fs-DjMlnfEu.js`).then(e=>e.t),{GLOBAL_FS_DB_NAME:n}=await import(`./global-db-DJXlpNui.js`).then(e=>e.n);return await t.create({dbName:n})}function ij(e){return`// MCP alias for "${e}" — forwards args to \`mcp invoke ${e}\`.
1674
1694
  // Auto-generated by \`mcp add ${e}\`; do not edit by hand.
1675
1695
  const { promisify } = require('util');
1676
1696
  const { exec } = require('child_process');
@@ -1699,8 +1719,8 @@ try {
1699
1719
  if (stdout) process.stdout.write(stdout);
1700
1720
  if (stderr) process.stderr.write(stderr);
1701
1721
  process.exit(exitCode);
1702
- `}async function ij(e,t){let n=await nj(t.fs);await n.mkdir(yA,{recursive:!0}),await n.writeFile(`${yA}/${e}.jsh`,rj(e)),t.scriptCatalog?.invalidateJsh()}async function aj(e,t){let n=await nj(t.fs),r=`${yA}/${e}.jsh`;try{await n.exists(r)&&await n.rm(r)}catch(e){vA.debug(`alias removal failed`,{path:r,error:e instanceof Error?e.message:String(e)})}t.scriptCatalog?.invalidateJsh()}async function oj(e,t){let{removeAppSprinkles:n}=await import(`./apps-C4Y2CDb2.js`);await n(e,t.fs)}async function sj(e,t,n){try{let{materializeAppSprinkles:r}=await import(`./apps-C4Y2CDb2.js`);return(await r(e,t,n.fs)).length}catch(t){return vA.warn(`mcp: failed to materialize app sprinkles`,{name:e,error:t instanceof Error?t.message:String(t)}),0}}function cj(e){return{stdout:``,stderr:`meminfo: ${e}\n`,exitCode:1}}function lj(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 uj(){let e=globalThis.performance,t=e?.measureUserAgentSpecificMemory;return t?t.bind(e):null}function dj(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 fj(e){let t=[`total: ${eb(e.bytes)}`],n=[...e.breakdown].filter(e=>e.bytes>0).sort((e,t)=>t.bytes-e.bytes);if(n.length>0){t.push(``,`BYTES TYPES ATTRIBUTION`);for(let e of n)t.push(`${eb(e.bytes).padEnd(10)} ${e.types.join(`,`).padEnd(20)} ${lj(e)}`)}return`${t.join(`
1703
- `)}\n`}function pj(e={}){return S(`meminfo`,async t=>{let n=dj(t);if(`error`in n)return cj(n.error);if(n.help)return{stdout:`meminfo - agent-cluster memory diagnostics
1722
+ `}async function aj(e,t){let n=await rj(t.fs);await n.mkdir(bA,{recursive:!0}),await n.writeFile(`${bA}/${e}.jsh`,ij(e)),t.scriptCatalog?.invalidateJsh()}async function oj(e,t){let n=await rj(t.fs),r=`${bA}/${e}.jsh`;try{await n.exists(r)&&await n.rm(r)}catch(e){yA.debug(`alias removal failed`,{path:r,error:e instanceof Error?e.message:String(e)})}t.scriptCatalog?.invalidateJsh()}async function sj(e,t){let{removeAppSprinkles:n}=await import(`./apps-CWQK35id.js`);await n(e,t.fs)}async function cj(e,t,n){try{let{materializeAppSprinkles:r}=await import(`./apps-CWQK35id.js`);return(await r(e,t,n.fs)).length}catch(t){return yA.warn(`mcp: failed to materialize app sprinkles`,{name:e,error:t instanceof Error?t.message:String(t)}),0}}function lj(e){return{stdout:``,stderr:`meminfo: ${e}\n`,exitCode:1}}function uj(e){return e.attribution.length===0?`(shared)`:e.attribution.map(e=>{let t=e.container?.src??e.container?.id??e.url??`?`;return e.scope?`${e.scope} ${t}`:t}).join(`, `)}function dj(){let e=globalThis.performance,t=e?.measureUserAgentSpecificMemory;return t?t.bind(e):null}function fj(e){if(e[0]===`--help`||e[0]===`-h`||e[0]===`help`)return{help:!0};let t=!1;for(let n of e){if(n!==`--json`)return{error:`unknown option '${n}' — see \`meminfo --help\``};t=!0}return{help:!1,json:t}}function pj(e){let t=[`total: ${eb(e.bytes)}`],n=[...e.breakdown].filter(e=>e.bytes>0).sort((e,t)=>t.bytes-e.bytes);if(n.length>0){t.push(``,`BYTES TYPES ATTRIBUTION`);for(let e of n)t.push(`${eb(e.bytes).padEnd(10)} ${e.types.join(`,`).padEnd(20)} ${uj(e)}`)}return`${t.join(`
1723
+ `)}\n`}function mj(e={}){return S(`meminfo`,async t=>{let n=fj(t);if(`error`in n)return lj(n.error);if(n.help)return{stdout:`meminfo - agent-cluster memory diagnostics
1704
1724
 
1705
1725
  Usage:
1706
1726
  meminfo Human-readable breakdown (bytes, scope, types, url)
@@ -1711,8 +1731,8 @@ Notes:
1711
1731
  Document-Isolation-Policy). Embedded floats cannot be isolated and
1712
1732
  report why instead.
1713
1733
  - The browser randomizes measurement timing — expect a short delay.
1714
- `,stderr:``,exitCode:0};let r=e.isIsolated?e.isIsolated():globalThis.crossOriginIsolated===!0,i=e.measure??uj();if(!r&&!e.measure)return cj(`memory measurement requires a cross-origin-isolated runtime (Document-Isolation-Policy) — this runtime is not isolated`);if(!i)return cj(`performance.measureUserAgentSpecificMemory is not available in this browser`);let a;try{a=await i()}catch(e){return cj(e instanceof Error?e.message:String(e))}return n.json?{stdout:`${JSON.stringify(a,null,2)}\n`,stderr:``,exitCode:0}:{stdout:fj(a),stderr:``,exitCode:0}})}function mj(e){return S(`memory`,async t=>{let{runMemory:n}=await import(`./run-Cka1zPhr.js`);return n(t,e)})}function hj(){return S(`mktemp`,async(e,t)=>{let{runMktemp:n}=await import(`./run-dAJe7sKp.js`);return n(e,t)})}const gj=`/.cache/artificial-analysis.json`,_j=[`--all`,`--all-versions`,`--json`,`--refresh`,`--no-benchmarks`,`--help`,`-h`],vj=[`--provider`];function yj(e){return{stdout:``,stderr:e.endsWith(`
1715
- `)?e:`${e}\n`,exitCode:1}}async function bj(e){try{let t=await e.readFile(gj),n=JSON.parse(t);if(Date.now()-n.fetchedAt<864e5)return n.models}catch{}return null}function xj(){try{return localStorage.getItem(`aa_api_key`)}catch{return null}}function Sj(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 Cj(e,t){let n={fetchedAt:Date.now(),models:t};try{await e.mkdir(`/.cache`,{recursive:!0}),await e.writeFile(gj,JSON.stringify(n))}catch{}}async function wj(e,t=!1){if(e&&!t){let t=await bj(e);if(t)return t}let n={Accept:`application/json`},r=xj();r&&(n[`x-api-key`]=r);let i=g(),a;try{a=await i(`https://artificialanalysis.ai/api/v2/data/llms/models`,{method:`GET`,headers:n})}catch{return[]}if(a.status===401||a.status<200||a.status>=300)return[];let o;try{o=JSON.parse(new TextDecoder().decode(a.body))}catch{return[]}if(typeof o!=`object`||!o)return[];let s=o,c=Sj(Array.isArray(s)?s:s.data??s.models??[]);return e&&c.length>0&&await Cj(e,c),c}function Tj(e){return e.toLowerCase().replace(/\./g,`-`).replace(/-\d{8}$/,``).replace(/-\d{4}$/,``)}function Ej(e,t){let n=e.toLowerCase(),r=t.find(e=>e.slug===n);if(r)return r;let i=Tj(e),a=t.find(e=>Tj(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 Dj(){return`models - list available LLM models
1734
+ `,stderr:``,exitCode:0};let r=e.isIsolated?e.isIsolated():globalThis.crossOriginIsolated===!0,i=e.measure??dj();if(!r&&!e.measure)return lj(`memory measurement requires a cross-origin-isolated runtime (Document-Isolation-Policy) — this runtime is not isolated`);if(!i)return lj(`performance.measureUserAgentSpecificMemory is not available in this browser`);let a;try{a=await i()}catch(e){return lj(e instanceof Error?e.message:String(e))}return n.json?{stdout:`${JSON.stringify(a,null,2)}\n`,stderr:``,exitCode:0}:{stdout:pj(a),stderr:``,exitCode:0}})}function hj(e){return S(`memory`,async t=>{let{runMemory:n}=await import(`./run-BedH4wf2.js`);return n(t,e)})}function gj(){return S(`mktemp`,async(e,t)=>{let{runMktemp:n}=await import(`./run-dAJe7sKp.js`);return n(e,t)})}const _j=`/.cache/artificial-analysis.json`,vj=[`--all`,`--all-versions`,`--json`,`--refresh`,`--no-benchmarks`,`--help`,`-h`],yj=[`--provider`];function bj(e){return{stdout:``,stderr:e.endsWith(`
1735
+ `)?e:`${e}\n`,exitCode:1}}async function xj(e){try{let t=await e.readFile(_j),n=JSON.parse(t);if(Date.now()-n.fetchedAt<864e5)return n.models}catch{}return null}function Sj(){try{return localStorage.getItem(`aa_api_key`)}catch{return null}}function Cj(e){return e.map(e=>{let t=e;return{slug:t.slug??``,name:t.name??``,creator_slug:t.model_creator?.slug??``,intelligence_index:t.evaluations?.artificial_analysis_intelligence_index??null,coding_index:t.evaluations?.artificial_analysis_coding_index??null,speed_tps:t.median_output_tokens_per_second??null}})}async function wj(e,t){let n={fetchedAt:Date.now(),models:t};try{await e.mkdir(`/.cache`,{recursive:!0}),await e.writeFile(_j,JSON.stringify(n))}catch{}}async function Tj(e,t=!1){if(e&&!t){let t=await xj(e);if(t)return t}let n={Accept:`application/json`},r=Sj();r&&(n[`x-api-key`]=r);let i=g(),a;try{a=await i(`https://artificialanalysis.ai/api/v2/data/llms/models`,{method:`GET`,headers:n})}catch{return[]}if(a.status===401||a.status<200||a.status>=300)return[];let o;try{o=JSON.parse(new TextDecoder().decode(a.body))}catch{return[]}if(typeof o!=`object`||!o)return[];let s=o,c=Cj(Array.isArray(s)?s:s.data??s.models??[]);return e&&c.length>0&&await wj(e,c),c}function Ej(e){return e.toLowerCase().replace(/\./g,`-`).replace(/-\d{8}$/,``).replace(/-\d{4}$/,``)}function Dj(e,t){let n=e.toLowerCase(),r=t.find(e=>e.slug===n);if(r)return r;let i=Ej(e),a=t.find(e=>Ej(e.slug)===i);if(a)return a;let o=t.filter(e=>n.includes(e.slug)||e.slug.includes(n));if(o.length!==0)return o.sort((e,t)=>t.slug.length-e.slug.length),o[0]}function Oj(){return`models - list available LLM models
1716
1736
 
1717
1737
  Usage: models [options]
1718
1738
 
@@ -1724,14 +1744,14 @@ Options:
1724
1744
  --refresh Force re-fetch benchmark data from Artificial Analysis
1725
1745
  --no-benchmarks Skip benchmark data enrichment (faster, works offline)
1726
1746
  -h, --help Show this help message
1727
- `}function Oj(e){return e>=1e6?`${(e/1e6).toFixed(1)}M`.replace(`.0M`,`M`):e>=1e3?`${(e/1e3).toFixed(0)}K`:`${e}`}function kj(e){return`$${e.toFixed(2)}`}const Aj=/\b(embedding|embed|tts|whisper|dall-e|image-gen|audio|vision-preview)\b/i;function jj(e){let t=`${e.id} ${e.name??``}`;return!Aj.test(t)}function Mj(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 Nj(e){let t=e.toLowerCase();return t=t.replace(/-\d{8}$/,``),t=t.replace(/-\d{4}$/,``),t=t.replace(/-(preview|latest)$/,``),Mj(t)??t.replace(/-[\d.]+$/,``)}function Pj(e){let t=new Map;for(let n of e){let e=Nj(n.id);(!t.has(e)||n.selected)&&t.set(e,n)}return[...t.values()]}function Fj(e,t,n,r,i){let a=i?Ej(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 Ij(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=`${kj(e.cost.input)} / ${kj(e.cost.output)}`,a=`${Oj(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(`
1747
+ `}function kj(e){return e>=1e6?`${(e/1e6).toFixed(1)}M`.replace(`.0M`,`M`):e>=1e3?`${(e/1e3).toFixed(0)}K`:`${e}`}function Aj(e){return`$${e.toFixed(2)}`}const jj=/\b(embedding|embed|tts|whisper|dall-e|image-gen|audio|vision-preview)\b/i;function Mj(e){let t=`${e.id} ${e.name??``}`;return!jj.test(t)}function Nj(e){let t=e.match(/^(claude-(?:opus|sonnet|haiku))/);if(t)return t[1];let n=e.match(/^(gpt-\d+)(?:\.\d+)?(-[a-z][-a-z]*)?$/);if(n)return n[1]+(n[2]??``);let r=e.match(/^gemini-[\d.]+-(.+)$/);if(r)return`gemini-${r[1]}`;let i=e.match(/^gemini-(\d+)-(.+)$/);if(i)return`gemini-${i[2]}`;let a=e.match(/^grok-[\d.]+-([\w-]+)$/);if(a)return`grok-${a[1]}`;if(e.match(/^(grok)-[\d.]+$/))return`grok`;let o=e.match(/^(o\d+(?:-[a-z]+)?)(?:-\d.*)?$/);if(o)return o[1]}function Pj(e){let t=e.toLowerCase();return t=t.replace(/-\d{8}$/,``),t=t.replace(/-\d{4}$/,``),t=t.replace(/-(preview|latest)$/,``),Nj(t)??t.replace(/-[\d.]+$/,``)}function Fj(e){let t=new Map;for(let n of e){let e=Pj(n.id);(!t.has(e)||n.selected)&&t.set(e,n)}return[...t.values()]}function Ij(e,t,n,r,i){let a=i?Dj(e.id,i):void 0,o={id:e.id,name:e.name,provider:t,cost:e.cost??{input:0,output:0,cacheRead:0,cacheWrite:0},contextWindow:e.contextWindow??0,maxTokens:e.maxTokens??0,reasoning:!!e.reasoning,input:e.input??[`text`],selected:e.id===n&&t===r};return a?.intelligence_index!=null&&(o.intelligence=a.intelligence_index),a?.coding_index!=null&&(o.codingScore=a.coding_index),a?.speed_tps!=null&&(o.speed=a.speed_tps),o}function Lj(e,t,n,r){let i=[];i.push(`Models for "${e}" (${t}):\n`);for(let e of n){let t=e.selected?` ► `:` `,n=e.id.padEnd(30),r=`${Aj(e.cost.input)} / ${Aj(e.cost.output)}`,a=`${kj(e.contextWindow)} ctx`,o=e.intelligence==null?``:`IQ:${e.intelligence}`,s=e.speed==null?``:`${Math.round(e.speed)} t/s`,c=e.reasoning?`reasoning`:``,l=o||s?`${o.padEnd(6)} ${s.padEnd(8)}`:``;i.push(`${t}${n} ${r.padEnd(16)} ${a.padEnd(10)} ${l} ${c}`)}return i.push(`\n ${n.length} model${n.length===1?``:`s`} available.`),r&&i.push(` Intelligence data: artificialanalysis.ai`),i.join(`
1728
1748
  `)+`
1729
- `}function Lj(e){let t=C(e,{bool:_j,value:vj});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 Rj(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 zj(e,t,n,r,i,a){let o=e.getProviderModels(t).filter(jj);if(o.length===0)return[];let s=o.map(e=>Fj(e,t,n,r,i)).sort((e,t)=>t.cost.input-e.cost.input);return a||(s=Pj(s)),s}function Bj(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 Vj(e,t){if(w(e,{valueFlags:vj}))return{stdout:Dj(),stderr:``,exitCode:0};let n=Lj(e);if(`error`in n)return yj(`models: ${n.error}`);let r=await import(`./account-store-CckwuDB2.js`).then(e=>e.t);if(r.getAccounts().length===0)return yj(`No provider accounts configured. Run the provider settings to add one.
1730
- `);let i=r.resolveCurrentModel(),a=i.id,o=i.provider,s=r.getSelectedProvider(),c=r.getSelectedModelId(),l;if(!n.noBenchmarks){let e=await wj(t,n.forceRefresh);e.length>0&&(l=e)}let u=Rj(r,n,s);if(`error`in u)return yj(u.error);let d=[],f=[];for(let e of u){let t=zj(r,e,a,o,l,n.allVersions);if(t.length===0){if(!n.allMode)return yj(`No models available for provider ${e}.\n`);continue}if(d.push(...t),!n.jsonMode){let n=r.getProviderConfig(e);f.push(Ij(n.name,e,t,!!l))}}return n.jsonMode?{stdout:JSON.stringify(d,null,2)+`
1749
+ `}function Rj(e){let t=C(e,{bool:vj,value:yj});return`error`in t?t:{jsonMode:t.bools.has(`--json`),allMode:t.bools.has(`--all`),allVersions:t.bools.has(`--all-versions`),forceRefresh:t.bools.has(`--refresh`),noBenchmarks:t.bools.has(`--no-benchmarks`),explicitProvider:t.values.get(`--provider`)}}function zj(e,t,n){if(t.explicitProvider){let n=e.getAvailableProviders();return n.includes(t.explicitProvider)?[t.explicitProvider]:{error:`Unknown provider: ${t.explicitProvider}. Available: ${n.join(`, `)}\n`}}return t.allMode?[...new Set(e.getAccounts().map(e=>e.providerId))]:[n]}function Bj(e,t,n,r,i,a){let o=e.getProviderModels(t).filter(Mj);if(o.length===0)return[];let s=o.map(e=>Ij(e,t,n,r,i)).sort((e,t)=>t.cost.input-e.cost.input);return a||(s=Fj(s)),s}function Vj(e,t,n,r){let i=`${e}:${t}`,a=`${n}:${r}`;return i===a?`Currently using: ${i}\n`:`Currently using: ${i} (selected ${a} — resolved to a different model)\n`}async function Hj(e,t){if(w(e,{valueFlags:yj}))return{stdout:Oj(),stderr:``,exitCode:0};let n=Rj(e);if(`error`in n)return bj(`models: ${n.error}`);let r=await import(`./account-store-DtP5_zcC.js`).then(e=>e.t);if(r.getAccounts().length===0)return bj(`No provider accounts configured. Run the provider settings to add one.
1750
+ `);let i=r.resolveCurrentModel(),a=i.id,o=i.provider,s=r.getSelectedProvider(),c=r.getSelectedModelId(),l;if(!n.noBenchmarks){let e=await Tj(t,n.forceRefresh);e.length>0&&(l=e)}let u=zj(r,n,s);if(`error`in u)return bj(u.error);let d=[],f=[];for(let e of u){let t=Bj(r,e,a,o,l,n.allVersions);if(t.length===0){if(!n.allMode)return bj(`No models available for provider ${e}.\n`);continue}if(d.push(...t),!n.jsonMode){let n=r.getProviderConfig(e);f.push(Lj(n.name,e,t,!!l))}}return n.jsonMode?{stdout:JSON.stringify(d,null,2)+`
1731
1751
  `,stderr:``,exitCode:0}:(n.allVersions||f.push(`Showing latest versions only. Use --all-versions to see all.
1732
- `),f.push(Bj(o,a,s,c)),{stdout:f.join(`
1733
- `),stderr:``,exitCode:0})}function Hj(e){return S(`models`,async t=>Vj(t,e))}const Uj=new Set([`-`,`/dev/stdin`,`/dev/fd/0`,`/proc/self/fd/0`]);function Wj(e){return e===`-e`||e===`--eval`||Uj.has(e)||!e.startsWith(`-`)}function Gj(e){return{stdout:``,stderr:`node: ${e} is not a valid value for --input-type. Valid values are: 'commonjs' or 'module'.\n`,exitCode:9}}function Kj(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
1734
- `,exitCode:9}}:i!==`module`&&i!==`commonjs`?{nextIndex:a,error:Gj(i)}:{inputType:i,nextIndex:a}}function qj(e){let t=!1,n=!1,r=!1,i,a=0;for(;a<e.length;){let o=e[a];if(Wj(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=Kj(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 Jj(){return{stdout:`usage: node [options] [script.js] [args...]
1752
+ `),f.push(Vj(o,a,s,c)),{stdout:f.join(`
1753
+ `),stderr:``,exitCode:0})}function Uj(e){return S(`models`,async t=>Hj(t,e))}const Wj=new Set([`-`,`/dev/stdin`,`/dev/fd/0`,`/proc/self/fd/0`]);function Gj(e){return e===`-e`||e===`--eval`||Wj.has(e)||!e.startsWith(`-`)}function Kj(e){return{stdout:``,stderr:`node: ${e} is not a valid value for --input-type. Valid values are: 'commonjs' or 'module'.\n`,exitCode:9}}function qj(e,t,n){let r=e.startsWith(`--input-type=`),i=r?e.slice(13):t,a=r?n+1:n+2;return i===void 0?{nextIndex:n+1,error:{stdout:``,stderr:`node: option --input-type requires an argument
1754
+ `,exitCode:9}}:i!==`module`&&i!==`commonjs`?{nextIndex:a,error:Kj(i)}:{inputType:i,nextIndex:a}}function Jj(e){let t=!1,n=!1,r=!1,i,a=0;for(;a<e.length;){let o=e[a];if(Gj(o))break;if(o===`-h`||o===`--help`){t=!0,a+=1;continue}if(o===`-v`||o===`--version`){n=!0,a+=1;continue}if(o===`-c`||o===`--check`){r=!0,a+=1;continue}if(o===`--input-type`||o.startsWith(`--input-type=`)){let s=qj(o,e[a+1],a);if(s.error)return{help:t,version:n,check:r,inputType:i,sourceIndex:s.nextIndex,error:s.error};i=s.inputType,a=s.nextIndex;continue}return{help:t,version:n,check:r,inputType:i,sourceIndex:a,error:{stdout:``,stderr:`node: unsupported option '${o}'\n`,exitCode:9}}}return{help:t,version:n,check:r,inputType:i,sourceIndex:a}}function Yj(){return{stdout:`usage: node [options] [script.js] [args...]
1735
1755
  node [options] -e <code> [args...]
1736
1756
 
1737
1757
  Options:
@@ -1740,20 +1760,20 @@ Options:
1740
1760
  --input-type=TYPE module or commonjs (stdin / -e / .js)
1741
1761
  -h, --help print this help
1742
1762
  -v, --version print Node shim version
1743
- `,stderr:``,exitCode:0}}function Yj(){return{stdout:`${_r}\n`,stderr:``,exitCode:0}}function Xj(e,t){if(t){if(e.endsWith(`.mjs`)&&t===`commonjs`)return{stdout:``,stderr:`node: cannot set --input-type=commonjs for a .mjs file
1763
+ `,stderr:``,exitCode:0}}function Xj(){return{stdout:`${_r}\n`,stderr:``,exitCode:0}}function Zj(e,t){if(t){if(e.endsWith(`.mjs`)&&t===`commonjs`)return{stdout:``,stderr:`node: cannot set --input-type=commonjs for a .mjs file
1744
1764
  `,exitCode:9};if(e.endsWith(`.cjs`)&&t===`module`)return{stdout:``,stderr:`node: cannot set --input-type=module for a .cjs file
1745
- `,exitCode:9}}}function Zj(e,t){if(!e.startsWith(`/`))return t;let n=e.lastIndexOf(`/`);return n<=0?`/`:e.slice(0,n)}function Qj(e){return e instanceof Error?e.stack??e.message:String(e)}async function $j(e,t,n){if(!(lr(e)||wr(e)||t.endsWith(`.mjs`)))return e;try{return(await(await oi()).transform(e,{loader:`js`,format:`cjs`,sourcefile:`${t.replace(/\.[^./]+$/,``)}.js`,supported:{"dynamic-import":!1}})).code}catch(r){if(!/top-level await/i.test(Qj(r)))throw r;return ai()({source:e,filename:t,fromDir:Zj(t,n)})}}async function eM(e,t,n){let r=e;try{r=await $j(e,t,n)}catch(e){return{stdout:``,stderr:`${Qj(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:`${Qj(e)}\n`,exitCode:1}}}async function tM(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
1746
- `,exitCode:9}};if(e.length>0&&Uj.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"
1747
- `,exitCode:9}}}function nM(e={},t=`node`){return{name:t,trusted:!0,async execute(t,n){let r=qj(t);if(r.error)return r.error;if(r.help)return Jj();if(r.version)return Yj();let i=await tM(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
1748
- `,exitCode:9}:i.result;let{code:a,filename:o,argv:s,innerCtx:c}=i,l=Xj(o,r.inputType);if(l)return l;let u=ri(a);return r.check?eM(u,o,n.cwd):ti(u,s,c,e.buildProcessConfig?.(n.env),{filename:o})}}}const rM=[`slicc:welcome-flow-fired`,`slicc.trayJoinUrl`,`slicc.trayWorkerBaseUrl`];async function iM(){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 aM=[],oM=[`--yes`];function sM(){return S(`nuke`,async e=>{if(w(e,{valueFlags:aM}))return{stdout:`Usage: nuke <launch-code>
1765
+ `,exitCode:9}}}function Qj(e,t){if(!e.startsWith(`/`))return t;let n=e.lastIndexOf(`/`);return n<=0?`/`:e.slice(0,n)}function $j(e){return e instanceof Error?e.stack??e.message:String(e)}async function eM(e,t,n){if(!(lr(e)||wr(e)||t.endsWith(`.mjs`)))return e;try{return(await(await oi()).transform(e,{loader:`js`,format:`cjs`,sourcefile:`${t.replace(/\.[^./]+$/,``)}.js`,supported:{"dynamic-import":!1}})).code}catch(r){if(!/top-level await/i.test($j(r)))throw r;return ai()({source:e,filename:t,fromDir:Qj(t,n)})}}async function tM(e,t,n){let r=e;try{r=await eM(e,t,n)}catch(e){return{stdout:``,stderr:`${$j(e)}\n`,exitCode:1}}try{let e=Object.getPrototypeOf(async function(){}).constructor;return new e(r),{stdout:``,stderr:``,exitCode:0}}catch(e){return{stdout:``,stderr:`${$j(e)}\n`,exitCode:1}}}async function nM(e,t){if(e.length>0&&(e[0]===`-e`||e[0]===`--eval`))return e[1]?{kind:`ok`,code:e[1],filename:`[eval]`,argv:[`node`,...e.slice(2)],innerCtx:t}:{kind:`result`,result:{stdout:``,stderr:`node: option requires an argument -- eval
1766
+ `,exitCode:9}};if(e.length>0&&Wj.has(e[0]))return{kind:`ok`,code:P(t.stdin),filename:`<stdin>`,argv:[`node`,e[0],...e.slice(1)],innerCtx:{...t,stdin:``}};if(e.length>0&&!e[0].startsWith(`-`)){let n=e[0],r=t.fs.resolvePath(t.cwd,n);return await t.fs.exists(r)?{kind:`ok`,code:await t.fs.readFile(r),filename:r,argv:[`node`,r,...e.slice(1)],innerCtx:t}:{kind:`result`,result:{stdout:``,stderr:`node: cannot find module '${n}'\n`,exitCode:1}}}return P(t.stdin).trim().length>0?{kind:`ok`,code:P(t.stdin),filename:`<stdin>`,argv:[`node`],innerCtx:{...t,stdin:``}}:e.length>0?{kind:`result`,result:{stdout:``,stderr:`node: unsupported option '${e[0]}'\n`,exitCode:9}}:{kind:`result`,result:{stdout:``,stderr:`node: REPL mode is not supported in this environment; use node -e "code"
1767
+ `,exitCode:9}}}function rM(e={},t=`node`){return{name:t,trusted:!0,async execute(t,n){let r=Jj(t);if(r.error)return r.error;if(r.help)return Yj();if(r.version)return Xj();let i=await nM(t.slice(r.sourceIndex),n);if(i.kind===`result`)return r.check&&i.result.exitCode===9&&t.slice(r.sourceIndex).length===0?{stdout:``,stderr:`node: -c/--check requires a filename or -e CODE
1768
+ `,exitCode:9}:i.result;let{code:a,filename:o,argv:s,innerCtx:c}=i,l=Zj(o,r.inputType);if(l)return l;let u=ri(a);return r.check?tM(u,o,n.cwd):ti(u,s,c,e.buildProcessConfig?.(n.env),{filename:o})}}}const iM=[`slicc:welcome-flow-fired`,`slicc.trayJoinUrl`,`slicc.trayWorkerBaseUrl`];async function aM(){try{let e=await navigator.serviceWorker?.getRegistrations?.();e&&await Promise.all(e.map(e=>e.unregister().catch(()=>!1)))}catch{}try{let e=await indexedDB.databases();await Promise.all(e.filter(e=>!!e.name).map(e=>new Promise(t=>{let n=indexedDB.deleteDatabase(e.name);n.onsuccess=()=>t(),n.onerror=()=>t(),n.onblocked=()=>t()})))}catch{}try{let e=navigator.storage;if(typeof e?.getDirectory==`function`){let t=await e.getDirectory(),n=[];for await(let e of t.keys())n.push(e);await Promise.all(n.map(e=>t.removeEntry(e,{recursive:!0}).catch(()=>{})))}}catch{}}const oM=[],sM=[`--yes`];function cM(){return S(`nuke`,async e=>{if(w(e,{valueFlags:oM}))return{stdout:`Usage: nuke <launch-code>
1749
1769
 
1750
1770
  Completely reset the environment by deleting all local data and reloading.
1751
1771
  Destroys the file system, chat history, and scoops database.
1752
1772
  Requires the secret launch code to proceed.
1753
- `,stderr:``,exitCode:0};let t=C(e,{value:aM,bool:oM});return`error`in t?{stdout:``,stderr:`nuke: ${t.error}\n`,exitCode:1}:t.positionals.join(``).includes(`1234`)?((async()=>{await iM(),cM(rM)})(),{stdout:`Nuking everything…
1773
+ `,stderr:``,exitCode:0};let t=C(e,{value:oM,bool:sM});return`error`in t?{stdout:``,stderr:`nuke: ${t.error}\n`,exitCode:1}:t.positionals.join(``).includes(`1234`)?((async()=>{await aM(),lM(iM)})(),{stdout:`Nuking everything…
1754
1774
  `,stderr:``,exitCode:0}):{stdout:``,stderr:`⚠️ WARNING: this will reset the entire environment, file system, chats, and scoops.
1755
1775
  Run nuke again with the secret launch code to proceed.
1756
- `,exitCode:1}})}function cM(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 lM(){return`oauth-domain — manage extra allowed domains for OAuth-issued tokens
1776
+ `,exitCode:1}})}function lM(e=[]){let t=[...e];try{if(typeof BroadcastChannel==`function`){let e=new BroadcastChannel(`slicc-nuke-control`);e.postMessage({type:`nuke-reload`,keysToRemove:t}),setTimeout(()=>e.close(),100)}}catch{}for(let e of t)try{globalThis.localStorage?.removeItem(e)}catch{}try{globalThis.location?.reload?.()}catch{}}function uM(){return`oauth-domain — manage extra allowed domains for OAuth-issued tokens
1757
1777
 
1758
1778
  Usage:
1759
1779
  oauth-domain list List extra domains for every provider
@@ -1778,13 +1798,13 @@ Examples:
1778
1798
  oauth-domain add adobe '*.da.live'
1779
1799
  oauth-domain list adobe
1780
1800
  oauth-domain remove adobe admin.da.live
1781
- `}function uM(e){return{stdout:``,stderr:`oauth-domain: ${e}\n`,exitCode:1}}function dM(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(`
1801
+ `}function dM(e){return{stdout:``,stderr:`oauth-domain: ${e}\n`,exitCode:1}}function fM(e,t){if(t){let n=e.getExtraOAuthDomains(t);return n.length===0?{stdout:`(no extra domains configured for ${t})\n`,stderr:``,exitCode:0}:{stdout:`${n.join(`
1782
1802
  `)}\n`,stderr:``,exitCode:0}}let n=Object.entries(e.getAllExtraOAuthDomains()).filter(([,e])=>e.length>0);return n.length===0?{stdout:`(no extra OAuth domains configured)
1783
1803
  `,stderr:``,exitCode:0}:{stdout:`${n.map(([e,t])=>`${e}: ${t.join(`, `)}`).join(`
1784
- `)}\n`,stderr:``,exitCode:0}}async function fM(e,t,n){if(!t||!n)return{stdout:``,stderr:`oauth-domain add: requires <providerId> and <domain>
1785
- `,exitCode:1};let r=e.getExtraOAuthDomains(t),i=n.toLowerCase();return r.some(e=>e.toLowerCase()===i)?{stdout:`(${n} already in ${t} extras)\n`,stderr:``,exitCode:0}:(await e.setExtraOAuthDomainsAsync(t,[...r,n]),{stdout:`Added ${n} to ${t}. Reload the page to apply.\n`,stderr:``,exitCode:0})}async function pM(e,t,n){if(!t||!n)return{stdout:``,stderr:`oauth-domain remove: requires <providerId> and <domain>
1786
- `,exitCode:1};let r=e.getExtraOAuthDomains(t),i=n.toLowerCase(),a=r.filter(e=>e.toLowerCase()!==i);return a.length===r.length?{stdout:`(${n} not found in ${t} extras)\n`,stderr:``,exitCode:0}:(await e.setExtraOAuthDomainsAsync(t,a),{stdout:`Removed ${n} from ${t}. Reload the page to apply.\n`,stderr:``,exitCode:0})}async function mM(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>
1787
- `,exitCode:1}}async function hM(e,t,n,r){switch(t){case`list`:return dM(e,n);case`add`:return fM(e,n,r);case`remove`:return pM(e,n,r);case`clear`:return mM(e,n);default:return{stdout:``,stderr:`oauth-domain: unknown subcommand "${t}"\n${lM()}`,exitCode:1}}}function gM(){return S(`oauth-domain`,async e=>{if(e.length===0||w(e))return{stdout:lM(),stderr:``,exitCode:0};let t=C(e);if(`error`in t)return uM(t.error);let[n,r,i]=t.positionals,a=await import(`./account-store-CckwuDB2.js`).then(e=>e.t);try{return await hM(a,n,r,i)}catch(e){return uM(e instanceof Error?e.message:String(e))}})}function _M(){return S(`oauth-token`,async(e,t)=>{let{runOAuthToken:n}=await import(`./run-B9eYT4Oj.js`);return n(e,t)})}const vM=[`--download`,`-d`,`--view`,`-v`],yM=[`--size`],bM={low:256,medium:768,high:1536};function xM(){return{stdout:`usage: open [--download|-d] [--view|-v [--size <spec>]] <url|path> [url|path...]
1804
+ `)}\n`,stderr:``,exitCode:0}}async function pM(e,t,n){if(!t||!n)return{stdout:``,stderr:`oauth-domain add: requires <providerId> and <domain>
1805
+ `,exitCode:1};let r=e.getExtraOAuthDomains(t),i=n.toLowerCase();return r.some(e=>e.toLowerCase()===i)?{stdout:`(${n} already in ${t} extras)\n`,stderr:``,exitCode:0}:(await e.setExtraOAuthDomainsAsync(t,[...r,n]),{stdout:`Added ${n} to ${t}. Reload the page to apply.\n`,stderr:``,exitCode:0})}async function mM(e,t,n){if(!t||!n)return{stdout:``,stderr:`oauth-domain remove: requires <providerId> and <domain>
1806
+ `,exitCode:1};let r=e.getExtraOAuthDomains(t),i=n.toLowerCase(),a=r.filter(e=>e.toLowerCase()!==i);return a.length===r.length?{stdout:`(${n} not found in ${t} extras)\n`,stderr:``,exitCode:0}:(await e.setExtraOAuthDomainsAsync(t,a),{stdout:`Removed ${n} from ${t}. Reload the page to apply.\n`,stderr:``,exitCode:0})}async function hM(e,t){return t?(await e.setExtraOAuthDomainsAsync(t,[]),{stdout:`Cleared extra domains for ${t}. Reload the page to apply.\n`,stderr:``,exitCode:0}):{stdout:``,stderr:`oauth-domain clear: requires <providerId>
1807
+ `,exitCode:1}}async function gM(e,t,n,r){switch(t){case`list`:return fM(e,n);case`add`:return pM(e,n,r);case`remove`:return mM(e,n,r);case`clear`:return hM(e,n);default:return{stdout:``,stderr:`oauth-domain: unknown subcommand "${t}"\n${uM()}`,exitCode:1}}}function _M(){return S(`oauth-domain`,async e=>{if(e.length===0||w(e))return{stdout:uM(),stderr:``,exitCode:0};let t=C(e);if(`error`in t)return dM(t.error);let[n,r,i]=t.positionals,a=await import(`./account-store-DtP5_zcC.js`).then(e=>e.t);try{return await gM(a,n,r,i)}catch(e){return dM(e instanceof Error?e.message:String(e))}})}function vM(){return S(`oauth-token`,async(e,t)=>{let{runOAuthToken:n}=await import(`./run-DiYNywB4.js`);return n(e,t)})}const yM=[`--download`,`-d`,`--view`,`-v`],bM=[`--size`],xM={low:256,medium:768,high:1536};function SM(){return{stdout:`usage: open [--download|-d] [--view|-v [--size <spec>]] <url|path> [url|path...]
1788
1808
 
1789
1809
  VFS paths are served in a new browser tab via the preview service worker.
1790
1810
  URLs (http/https/etc.) are opened directly in a new tab.
@@ -1798,19 +1818,19 @@ Examples:
1798
1818
  medium (768x768), high (1536x1536), or a custom WxH
1799
1819
  box like 512x512. The image is fit inside the box
1800
1820
  with aspect ratio preserved and is never upscaled.
1801
- `,stderr:``,exitCode:0}}function SM(e){if(e in bM){let t=bM[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 CM(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 wM(){return`open --view requires --size to bound the inlined image. Use one of:
1821
+ `,stderr:``,exitCode:0}}function CM(e){if(e in xM){let t=xM[e];return{maxW:t,maxH:t}}let t=/^(\d+)x(\d+)$/.exec(e);if(t){let e=parseInt(t[1],10),n=parseInt(t[2],10);if(e>0&&n>0)return{maxW:e,maxH:n}}return null}function wM(e,t){if(t===`image/png`||t===`image/apng`){if(e.length<26)return!1;let t=e[25];return t===4||t===6}if(t===`image/webp`){if(e.length<16)return!1;let t=String.fromCharCode(e[12],e[13],e[14],e[15]);return t===`VP8L`?!0:t===`VP8X`?e.length<21?!1:!!(e[20]&16):!1}return!1}function TM(){return`open --view requires --size to bound the inlined image. Use one of:
1802
1822
  --size low (256x256)
1803
1823
  --size medium (768x768)
1804
1824
  --size high (1536x1536)
1805
1825
  --size WxH (custom box, e.g. 512x512)
1806
- `}const TM=new Set([`image/png`,`image/webp`]);function EM(e){let t=new ArrayBuffer(e.byteLength),n=new Uint8Array(t);return n.set(e),n}async function DM(e,t){let n=EM(e),r=new Blob([n],{type:t}),i=await createImageBitmap(r);try{return{width:i.width,height:i.height}}finally{i.close?.()}}async function OM(e,t,n,r){let i=EM(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=CM(e,t)?TM.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 kM(e){let t=C(e,{bool:vM,value:yM});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 AM(e){return{ok:!0,message:e}}function K(e){return{ok:!1,result:{stdout:``,stderr:e,exitCode:1}}}function jM(e){return e?` (targetId: ${e})`:``}function MM(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 NM(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),AM(`opened sprinkle ${e} from ${a}`)}catch(e){return K(`open: ${e instanceof Error?e.message:String(e)}\n`)}}if(r){let e=await ur(t.fs,vr(a)),n=Br(a,e),r;try{r=await i(n)}catch(e){return K(`${e instanceof Error?e.message:String(e)}\n`)}return AM(`opened ${a} → ${n}${jM(r)}`)}return K(`open: sprinkle manager not initialized
1807
- `)}async function PM(e,t,n){if(!t)return K(`open: browser APIs are unavailable in this environment
1808
- `);let r;try{r=await n(e)}catch(e){return K(`${e instanceof Error?e.message:String(e)}\n`)}return AM(`opened ${e}${jM(r)}`)}async function FM(e,n,r,i){let a;try{a=await r.fs.stat(n)}catch{return K(`open: no such file: ${e}\n`)}if(!a.isFile)return K(`open: not a file: ${e}\n`);let o;try{o=await r.fs.readFileBuffer(n)}catch{return K(`open: failed to read: ${e}\n`)}let s=cr(n),c=new Uint8Array(o),l=null;if(i!==void 0&&(l=SM(i),!l))return K(`open: invalid --size spec '${i}' (expected low|medium|high or WxH such as 512x512)\n`);if(!l){let t;try{t=await DM(c,s)}catch(t){return K(`open: not an image or failed to decode: ${e} (${t instanceof Error?t.message:String(t)})\n`)}let r=Math.round(c.byteLength/1024);return K(`open --view: ${n} is ${t.width}x${t.height} (${r} KB, ${s})\n`+wM())}let u;try{u=await OM(c,s,l.maxW,l.maxH)}catch(t){return K(`open: not an image or failed to decode: ${e} (${t instanceof Error?t.message:String(t)})\n`)}let d=t(u.bytes),f=Math.round(u.bytes.byteLength/1024);return AM(`${n} (${u.nativeWidth}x${u.nativeHeight} → ${u.width}x${u.height}, ${f} KB, ${u.mime})\n<img:data:${u.mime};base64,${d}>`)}async function IM(e,t,n,r){if(!r)return K(`open: --download requires the in-panel terminal (DOM-only)
1809
- `);let i;try{i=await n.fs.stat(t)}catch{return K(`open: no such file: ${e}\n`)}if(!i.isFile)return K(`open: not a file: ${e}\n`);let a;try{a=await n.fs.readFileBuffer(t)}catch{return K(`open: failed to read: ${e}\n`)}let o=new Uint8Array(a.byteLength);o.set(a);let s=new Blob([o.buffer],{type:cr(t)}),c=URL.createObjectURL(s),l=document.createElement(`a`);return l.href=c,l.download=mr(t)||`download`,l.style.display=`none`,document.body.appendChild(l),l.click(),document.body.removeChild(l),setTimeout(()=>URL.revokeObjectURL(c),0),AM(`downloaded ${t}`)}async function LM(e,t,n,r){if(!n)return K(`open: browser APIs are unavailable in this environment
1810
- `);let i=!1;try{i=(await t.fs.stat(e)).isDirectory}catch{}let a=await ur(t.fs,i?e:vr(e)),o=Br(e,a),s;try{s=await r(o)}catch(e){return K(`${e instanceof Error?e.message:String(e)}\n`)}return AM(`opened ${e} → ${o}${jM(s)}`)}async function RM(e,t,n,r){if(!fr(e)&&e.endsWith(`.shtml`)&&t.fs)return NM(e,t,r.sprinkleManager,r.canOpenWindow,r.openExternal);if(!n.view&&!r.canOpenWindow)return K(`open: browser APIs are unavailable in this environment
1811
- `);if(fr(e))return PM(e,r.canOpenWindow,r.openExternal);let i=t.fs.resolvePath(t.cwd,e);return n.view?FM(e,i,t,n.sizeSpec):n.download?IM(e,i,t,r.hasDom):LM(i,t,r.canOpenWindow,r.openExternal)}function zM(e){return S(`open`,async(t,n)=>{if(t.length===0||w(t,{valueFlags:yM}))return xM();let r=kM(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 xM();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:MM(e,l,u)},f=[];for(let e of s){let t=await RM(e,n,{view:a,download:i,sizeSpec:o},d);if(!t.ok)return t.result;f.push(t.message)}return{stdout:f.join(`
1826
+ `}const EM=new Set([`image/png`,`image/webp`]);function DM(e){let t=new ArrayBuffer(e.byteLength),n=new Uint8Array(t);return n.set(e),n}async function OM(e,t){let n=DM(e),r=new Blob([n],{type:t}),i=await createImageBitmap(r);try{return{width:i.width,height:i.height}}finally{i.close?.()}}async function kM(e,t,n,r){let i=DM(e),a=new Blob([i],{type:t}),o=await createImageBitmap(a);try{let i=o.width,a=o.height,s=Math.min(n/i,r/a,1),c=Math.max(1,Math.round(i*s)),l=Math.max(1,Math.round(a*s)),u=new OffscreenCanvas(c,l),d=u.getContext(`2d`);if(!d)throw Error(`failed to acquire 2d context for resize`);d.drawImage(o,0,0,c,l);let f=wM(e,t)?EM.has(t)?t:`image/png`:`image/jpeg`,p=await u.convertToBlob(f===`image/jpeg`?{type:`image/jpeg`,quality:.85}:{type:f});return{bytes:new Uint8Array(await p.arrayBuffer()),mime:f,width:c,height:l,nativeWidth:i,nativeHeight:a}}finally{o.close?.()}}function AM(e){let t=C(e,{bool:yM,value:bM});if(`error`in t)return{error:`open: ${t.error}`};let n=t.values.get(`--size`);return n?.startsWith(`-`)&&n!==`-`?{error:`open: unknown flag: ${n}`}:{download:t.bools.has(`--download`)||t.bools.has(`-d`),view:t.bools.has(`--view`)||t.bools.has(`-v`),sizeSpec:n,targets:t.positionals}}function jM(e){return{ok:!0,message:e}}function K(e){return{ok:!1,result:{stdout:``,stderr:e,exitCode:1}}}function MM(e){return e?` (targetId: ${e})`:``}function NM(e,t,n){return async r=>{if(e)return e.createPage(r);if(t){window.open(r,`_blank`,`noopener,noreferrer`);return}try{await n.call(`window-open`,{url:r,target:`_blank`,features:`noopener,noreferrer`})}catch(e){throw Error(`open: ${e instanceof Error?e.message:String(e)}`)}}}async function PM(e,t,n,r,i){let a=t.fs.resolvePath(t.cwd,e);if(n){let e=(a.split(`/`).pop()??``).replace(/\.shtml$/,``);try{return await n.open(e),jM(`opened sprinkle ${e} from ${a}`)}catch(e){return K(`open: ${e instanceof Error?e.message:String(e)}\n`)}}if(r){let e=await ur(t.fs,vr(a)),n=Br(a,e),r;try{r=await i(n)}catch(e){return K(`${e instanceof Error?e.message:String(e)}\n`)}return jM(`opened ${a} → ${n}${MM(r)}`)}return K(`open: sprinkle manager not initialized
1827
+ `)}async function FM(e,t,n){if(!t)return K(`open: browser APIs are unavailable in this environment
1828
+ `);let r;try{r=await n(e)}catch(e){return K(`${e instanceof Error?e.message:String(e)}\n`)}return jM(`opened ${e}${MM(r)}`)}async function IM(e,n,r,i){let a;try{a=await r.fs.stat(n)}catch{return K(`open: no such file: ${e}\n`)}if(!a.isFile)return K(`open: not a file: ${e}\n`);let o;try{o=await r.fs.readFileBuffer(n)}catch{return K(`open: failed to read: ${e}\n`)}let s=cr(n),c=new Uint8Array(o),l=null;if(i!==void 0&&(l=CM(i),!l))return K(`open: invalid --size spec '${i}' (expected low|medium|high or WxH such as 512x512)\n`);if(!l){let t;try{t=await OM(c,s)}catch(t){return K(`open: not an image or failed to decode: ${e} (${t instanceof Error?t.message:String(t)})\n`)}let r=Math.round(c.byteLength/1024);return K(`open --view: ${n} is ${t.width}x${t.height} (${r} KB, ${s})\n`+TM())}let u;try{u=await kM(c,s,l.maxW,l.maxH)}catch(t){return K(`open: not an image or failed to decode: ${e} (${t instanceof Error?t.message:String(t)})\n`)}let d=t(u.bytes),f=Math.round(u.bytes.byteLength/1024);return jM(`${n} (${u.nativeWidth}x${u.nativeHeight} → ${u.width}x${u.height}, ${f} KB, ${u.mime})\n<img:data:${u.mime};base64,${d}>`)}async function LM(e,t,n,r){if(!r)return K(`open: --download requires the in-panel terminal (DOM-only)
1829
+ `);let i;try{i=await n.fs.stat(t)}catch{return K(`open: no such file: ${e}\n`)}if(!i.isFile)return K(`open: not a file: ${e}\n`);let a;try{a=await n.fs.readFileBuffer(t)}catch{return K(`open: failed to read: ${e}\n`)}let o=new Uint8Array(a.byteLength);o.set(a);let s=new Blob([o.buffer],{type:cr(t)}),c=URL.createObjectURL(s),l=document.createElement(`a`);return l.href=c,l.download=mr(t)||`download`,l.style.display=`none`,document.body.appendChild(l),l.click(),document.body.removeChild(l),setTimeout(()=>URL.revokeObjectURL(c),0),jM(`downloaded ${t}`)}async function RM(e,t,n,r){if(!n)return K(`open: browser APIs are unavailable in this environment
1830
+ `);let i=!1;try{i=(await t.fs.stat(e)).isDirectory}catch{}let a=await ur(t.fs,i?e:vr(e)),o=Br(e,a),s;try{s=await r(o)}catch(e){return K(`${e instanceof Error?e.message:String(e)}\n`)}return jM(`opened ${e} → ${o}${MM(s)}`)}async function zM(e,t,n,r){if(!fr(e)&&e.endsWith(`.shtml`)&&t.fs)return PM(e,t,r.sprinkleManager,r.canOpenWindow,r.openExternal);if(!n.view&&!r.canOpenWindow)return K(`open: browser APIs are unavailable in this environment
1831
+ `);if(fr(e))return FM(e,r.canOpenWindow,r.openExternal);let i=t.fs.resolvePath(t.cwd,e);return n.view?IM(e,i,t,n.sizeSpec):n.download?LM(e,i,t,r.hasDom):RM(i,t,r.canOpenWindow,r.openExternal)}function BM(e){return S(`open`,async(t,n)=>{if(t.length===0||w(t,{valueFlags:bM}))return SM();let r=AM(t);if(`error`in r)return{stdout:``,stderr:`${r.error}\n`,exitCode:1};let{download:i,view:a,sizeSpec:o,targets:s}=r;if(s.length===0)return SM();let c=globalThis.__slicc_sprinkleManager,l=typeof window<`u`&&typeof document<`u`,u=l?null:y(),d={canOpenWindow:!!e||l||!!u,hasDom:l,sprinkleManager:c,openExternal:NM(e,l,u)},f=[];for(let e of s){let t=await zM(e,n,{view:a,download:i,sizeSpec:o},d);if(!t.ok)return t.result;f.push(t.message)}return{stdout:f.join(`
1812
1832
  `)+`
1813
- `,stderr:``,exitCode:0}})}function BM(){return S(`patch`,async(e,t)=>{let{runPatch:n}=await import(`./run-BKqnD09g.js`);return n(e,t)})}function VM(e=`pdftk`){return S(e,async(t,n)=>{let{runPdftk:r}=await import(`./run-BEs473Sp.js`);return r(e,t,n)})}function HM(){return{stdout:`usage: pdftoppm [options] <input.pdf> [output-prefix]
1833
+ `,stderr:``,exitCode:0}})}function VM(){return S(`patch`,async(e,t)=>{let{runPatch:n}=await import(`./run-CpuIjsuc.js`);return n(e,t)})}function HM(e=`pdftk`){return S(e,async(t,n)=>{let{runPdftk:r}=await import(`./run-BEs473Sp.js`);return r(e,t,n)})}function UM(){return{stdout:`usage: pdftoppm [options] <input.pdf> [output-prefix]
1814
1834
 
1815
1835
  Rasterize PDF pages to images. Writes <prefix>-<n>.<ext> per page, where <n>
1816
1836
  is zero-padded to the digit width of the last page (out-1.png for a 9-page
@@ -1837,8 +1857,8 @@ Examples:
1837
1857
  pdftoppm -png -r 150 doc.pdf page
1838
1858
  pdftoppm -jpeg -jpegopt quality=80 -f 1 -l 3 doc.pdf out
1839
1859
  pdftoppm -png -singlefile -scale-to 1024 doc.pdf cover
1840
- `,stderr:``,exitCode:0}}function UM(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 WM(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 GM(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=WM(e[++d]),t=`jpeg`;break;case`-r`:n=UM(e[++d],`-r`);break;case`-f`:r=UM(e[++d],`-f`);break;case`-l`:i=UM(e[++d],`-l`);break;case`-scale-to`:a=UM(e[++d],`-scale-to`);break;case`-scale-to-x`:o=UM(e[++d],`-scale-to-x`);break;case`-scale-to-y`:s=UM(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 KM(e){let t=e.lastIndexOf(`.`);return t>0?e.slice(0,t):e}function qM(e,t,n,r){let i=String(n).length;return`${e}-${String(t).padStart(i,`0`)}.${r}`}function JM(e){return e===`jpeg`?`jpg`:`png`}function YM(e){return e.scaleToX===void 0?e.scaleToY===void 0?e.scaleTo===void 0?{scale:Xi(e.dpi)}:{longEdge:e.scaleTo}:{height:e.scaleToY}:{width:e.scaleToX}}async function XM(e,t){let n=e.fs.resolvePath(e.cwd,t),r=await e.fs.readFileBuffer(n);if(!Ji(r))throw Error(`${t}: not a PDF file`);return r}function ZM(e=`pdftoppm`){return S(e,async(t,n)=>{if(t.length===0||t.includes(`--help`)||t.includes(`-h`))return HM();let r;try{r=GM(t)}catch(t){return{stdout:``,stderr:`${e}: ${t instanceof Error?t.message:String(t)}\n`,exitCode:1}}try{let t=await XM(n,r.inputPath),i=JM(r.format),a=r.outputRoot??KM(mr(r.inputPath)),o=[];return await qi(t,{firstPage:r.firstPage,lastPage:r.singleFile?r.firstPage??1:r.lastPage,format:r.format,quality:r.quality,...YM(r)},async(e,t)=>{let s=r.singleFile?`${a}.${i}`:qM(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(`
1841
- `)}\n`,stderr:``,exitCode:0}}catch(t){return{stdout:``,stderr:`${e}: ${t instanceof Error?t.message:String(t)}\n`,exitCode:1}}})}function QM(e=`pdftotext`){return S(e,async(t,n)=>{let{runPdftotext:r}=await import(`./run-BVzzZSqz.js`);return r(e,t,n)})}function $M(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 eN(){aT(()=>()=>ne()),iT(()=>()=>$M(ne()))}const tN=`/workspace/.plugins/sources`;function nN(e){return{stdout:e,stderr:``,exitCode:0}}function q(e,t=1){return{stdout:``,stderr:`${e}\n`,exitCode:t}}function rN(e,t){let n=C(t,{});return`error`in n?q(`plugin ${e}: ${n.error}`):{ok:!0,positionals:n.positionals}}function iN(){return`usage: plugin <command> [args]
1860
+ `,stderr:``,exitCode:0}}function WM(e,t){if(e===void 0)throw Error(`missing argument for ${t}`);let n=Number(e);if(!Number.isFinite(n)||!Number.isInteger(n)||n<=0)throw Error(`invalid ${t} value: ${e}`);return n}function GM(e){if(e===void 0)throw Error(`missing argument for -jpegopt`);for(let t of e.split(`,`)){let[e,n]=t.split(`=`);if(e?.trim()!==`quality`)continue;let r=Number(n);if(!Number.isFinite(r)||r<0||r>100)throw Error(`invalid -jpegopt quality: ${n}`);return r}throw Error(`unsupported -jpegopt: ${e}`)}function KM(e){let t=`png`,n=150,r,i,a,o,s,c,l=!1,u=[];for(let d=0;d<e.length;d++){let f=e[d];switch(f){case`-png`:t=`png`;break;case`-jpeg`:t=`jpeg`;break;case`-jpegopt`:c=GM(e[++d]),t=`jpeg`;break;case`-r`:n=WM(e[++d],`-r`);break;case`-f`:r=WM(e[++d],`-f`);break;case`-l`:i=WM(e[++d],`-l`);break;case`-scale-to`:a=WM(e[++d],`-scale-to`);break;case`-scale-to-x`:o=WM(e[++d],`-scale-to-x`);break;case`-scale-to-y`:s=WM(e[++d],`-scale-to-y`);break;case`-singlefile`:l=!0;break;default:if(f.startsWith(`-`))throw Error(`unsupported option ${f}`);u.push(f)}}if(u.length===0)throw Error(`expected an input PDF`);if(u.length>2)throw Error(`expected at most one input PDF and one output prefix`);if(r!==void 0&&i!==void 0&&r>i)throw Error(`invalid page range: ${r}-${i}`);return{inputPath:u[0],outputRoot:u[1],format:t,dpi:n,firstPage:r,lastPage:i,scaleTo:a,scaleToX:o,scaleToY:s,quality:c,singleFile:l}}function qM(e){let t=e.lastIndexOf(`.`);return t>0?e.slice(0,t):e}function JM(e,t,n,r){let i=String(n).length;return`${e}-${String(t).padStart(i,`0`)}.${r}`}function YM(e){return e===`jpeg`?`jpg`:`png`}function XM(e){return e.scaleToX===void 0?e.scaleToY===void 0?e.scaleTo===void 0?{scale:Xi(e.dpi)}:{longEdge:e.scaleTo}:{height:e.scaleToY}:{width:e.scaleToX}}async function ZM(e,t){let n=e.fs.resolvePath(e.cwd,t),r=await e.fs.readFileBuffer(n);if(!Ji(r))throw Error(`${t}: not a PDF file`);return r}function QM(e=`pdftoppm`){return S(e,async(t,n)=>{if(t.length===0||t.includes(`--help`)||t.includes(`-h`))return UM();let r;try{r=KM(t)}catch(t){return{stdout:``,stderr:`${e}: ${t instanceof Error?t.message:String(t)}\n`,exitCode:1}}try{let t=await ZM(n,r.inputPath),i=YM(r.format),a=r.outputRoot??qM(mr(r.inputPath)),o=[];return await qi(t,{firstPage:r.firstPage,lastPage:r.singleFile?r.firstPage??1:r.lastPage,format:r.format,quality:r.quality,...XM(r)},async(e,t)=>{let s=r.singleFile?`${a}.${i}`:JM(a,e.pageNumber,t.lastPage,i);await n.fs.writeFile(n.fs.resolvePath(n.cwd,s),e.bytes),o.push(s)}),o.length===0?{stdout:``,stderr:`${e}: no pages to render\n`,exitCode:1}:{stdout:`${o.join(`
1861
+ `)}\n`,stderr:``,exitCode:0}}catch(t){return{stdout:``,stderr:`${e}: ${t instanceof Error?t.message:String(t)}\n`,exitCode:1}}})}function $M(e=`pdftotext`){return S(e,async(t,n)=>{let{runPdftotext:r}=await import(`./run-BVzzZSqz.js`);return r(e,t,n)})}function eN(e){let t=e.filter(e=>e.teleportEligible===!0&&e.bootstrapId&&e.floatType);if(t.length===0)return null;let n=t.filter(e=>e.floatType===`standalone`),r=n.length>0?n:t;r.sort((e,t)=>(t.lastActivity??0)-(e.lastActivity??0));let i=r[0];return{runtimeId:i.runtimeId,bootstrapId:i.bootstrapId,floatType:i.floatType}}function tN(){oT(()=>()=>ne()),aT(()=>()=>eN(ne()))}const nN=`/workspace/.plugins/sources`;function rN(e){return{stdout:e,stderr:``,exitCode:0}}function q(e,t=1){return{stdout:``,stderr:`${e}\n`,exitCode:t}}function iN(e,t){let n=C(t,{});return`error`in n?q(`plugin ${e}: ${n.error}`):{ok:!0,positionals:n.positionals}}function aN(){return`usage: plugin <command> [args]
1842
1862
 
1843
1863
  Load Agent Plugins packages (agent-plugins.org spec v1.0.0): portable
1844
1864
  directories bundling Agent Skills (skills/*/SKILL.md) and MCP servers
@@ -1848,7 +1868,7 @@ Commands:
1848
1868
  install <path|repo> Validate the plugin and register it. <repo> is a
1849
1869
  GitHub reference (owner/repo, owner/repo@branch, or
1850
1870
  https://github.com/owner/repo[/tree/branch[/dir]]),
1851
- downloaded into ${tN}/.
1871
+ downloaded into ${nN}/.
1852
1872
  Skills surface through the standard skills discovery;
1853
1873
  streamable-http MCP servers are added to the MCP
1854
1874
  store as "<plugin>:<server>".
@@ -1870,36 +1890,36 @@ Examples:
1870
1890
  plugin list
1871
1891
  plugin info my-plugin
1872
1892
  plugin remove my-plugin
1873
- `}function aN(e={}){return S(`plugin`,async(t,n)=>{if(t.length===0||t[0]===`--help`||t[0]===`-h`)return nN(iN());let r=t[0],i=t.slice(1),a=n?.cwd??`/`;try{switch(r){case`install`:case`add`:return await fN(i,a,e);case`list`:case`ls`:return await gN(i,e);case`info`:return await _N(i,e);case`validate`:return await vN(i,a,e,Qi(n?.env));case`remove`:case`rm`:case`delete`:return await yN(i,e);default:return q(`plugin: unknown subcommand "${r}" (try \`plugin --help\`)`)}}catch(e){return q(`plugin ${r}: ${e instanceof Error?e.message:String(e)}`)}})}async function oN(e){if(e.fs)return e.fs;let{VirtualFS:t}=await import(`./fs-DFXgS-c1.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 sN(e,t,n){let r=bN(t,e);if(await n.exists(r))return{kind:`local`,root:r};let{parseGitHubRef:i}=await import(`./github-install-BIoofnjZ.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 cN(e){let t=e.replace(/[^A-Za-z0-9._-]+/g,`-`);return/^\.+$/.test(t)?t.replace(/\./g,`_`):t}function lN(e){let t=[e.owner,e.repo,...e.path?[e.path]:[]];return`${tN}/${t.map(cN).join(`--`)}`}async function uN(e,t,n,r){let{fetchRepoZip:i,stripZipPrefix:a,writeZipFilesToDir:o}=await import(`./github-zip-TmRPTM75.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 dN(e,t){try{await e.rm(t,{recursive:!0})}catch{}}async function fN(e,t,n){if(w(e))return nN(`usage: plugin install <path|repo>
1893
+ `}function oN(e={}){return S(`plugin`,async(t,n)=>{if(t.length===0||t[0]===`--help`||t[0]===`-h`)return rN(aN());let r=t[0],i=t.slice(1),a=n?.cwd??`/`;try{switch(r){case`install`:case`add`:return await pN(i,a,e);case`list`:case`ls`:return await _N(i,e);case`info`:return await vN(i,e);case`validate`:return await yN(i,a,e,Qi(n?.env));case`remove`:case`rm`:case`delete`:return await bN(i,e);default:return q(`plugin: unknown subcommand "${r}" (try \`plugin --help\`)`)}}catch(e){return q(`plugin ${r}: ${e instanceof Error?e.message:String(e)}`)}})}async function sN(e){if(e.fs)return e.fs;let{VirtualFS:t}=await import(`./fs-DjMlnfEu.js`).then(e=>e.t),{GLOBAL_FS_DB_NAME:n}=await import(`./global-db-DJXlpNui.js`).then(e=>e.n);return t.create({dbName:n})}async function cN(e,t,n){let r=xN(t,e);if(await n.exists(r))return{kind:`local`,root:r};let{parseGitHubRef:i}=await import(`./github-install-C77mWn6S.js`).then(e=>e.t),a=i(e);if(a){let e=`${a.owner}/${a.repo}${a.branch?`@${a.branch}`:``}${a.path?`/${a.path}`:``}`;return{kind:`github`,ref:{...a,display:e}}}return{kind:`error`,message:`${r} does not exist and "${e}" is not a GitHub reference (owner/repo[@branch] or https://github.com/owner/repo[/tree/branch[/dir]])`}}function lN(e){let t=e.replace(/[^A-Za-z0-9._-]+/g,`-`);return/^\.+$/.test(t)?t.replace(/\./g,`_`):t}function uN(e){let t=[e.owner,e.repo,...e.path?[e.path]:[]];return`${nN}/${t.map(lN).join(`--`)}`}async function dN(e,t,n,r){let{fetchRepoZip:i,stripZipPrefix:a,writeZipFilesToDir:o}=await import(`./github-zip-UZeZ-voR.js`).then(e=>e.i),s=await i(e.owner,e.repo,r,e.branch);if(s.status===`error`)return`failed to download ${e.display}: ${s.message}`;let c=a(s.files),l=e.path?e.path.replace(/^\/|\/$/g,``)+`/`:``;if(!c[`${l}plugin.json`])return`no plugin.json found at ${e.display} — not an Agent Plugins package`;try{await n.rm(t,{recursive:!0})}catch{}return await n.mkdir(t,{recursive:!0}),(await o(c,l,t,n,!1)).length===0?`no files found at ${e.display}`:null}async function fN(e,t){try{await e.rm(t,{recursive:!0})}catch{}}async function pN(e,t,n){if(w(e))return rN(`usage: plugin install <path|repo>
1874
1894
 
1875
1895
  Loads the Agent Plugins package at <path>, or downloads it from a GitHub
1876
1896
  reference (owner/repo, owner/repo@branch, or
1877
1897
  https://github.com/owner/repo[/tree/branch[/dir]]) into
1878
- ${tN}/ first. Validates plugin.json (closed
1898
+ ${nN}/ first. Validates plugin.json (closed
1879
1899
  schema, name constraints), discovers skills/*/SKILL.md, and validates
1880
1900
  mcp.json. On success the plugin is recorded in
1881
1901
  /workspace/.plugins/plugins.json — its skills then surface through the
1882
1902
  standard skills discovery, and each supported streamable-http MCP server
1883
1903
  is registered in the MCP store as "<plugin>:<server>".
1884
- `);let r=rN(`install`,e);if(!(`ok`in r))return r;if(r.positionals.length<1)return q(`plugin install: expected <path|repo>`);let i=await oN(n),a=await sN(r.positionals[0],t,i);if(a.kind===`error`)return q(`plugin install: ${a.message}`);let o,s;if(a.kind===`github`){if(!n.fetch)return q(`plugin install: GitHub installs are unavailable (no network fetch configured)`);o=lN(a.ref),s=a.ref.display;let e=await uN(a.ref,o,i,n.fetch);if(e)return q(`plugin install: ${e}`)}else o=a.root;let{loadPluginFromDirectory:c}=await import(`./loader-Dw-TPPKt.js`),l=await c(i,o);if(!l.ok)return a.kind===`github`&&await dN(i,o),q(`plugin install: plugin at ${s??o} was rejected:\n${xN(l.diagnostics)}`);let{plugin:u}=l,d=u.manifest.name,{getInstalledPlugin:f,setInstalledPlugin:p}=await import(`./store-CD8HQQi0.js`),m=await f(d,n.fs);if(m&&m.root!==o)return a.kind===`github`&&await dN(i,o),q(`plugin install: a plugin named "${d}" is already installed from ${m.root} (remove it first)`);let h=await hN(u,n),g=await mN(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),nN(pN(u,h,g,s??o,l.diagnostics))}function pN(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:`,xN(i)),c.join(`
1904
+ `);let r=iN(`install`,e);if(!(`ok`in r))return r;if(r.positionals.length<1)return q(`plugin install: expected <path|repo>`);let i=await sN(n),a=await cN(r.positionals[0],t,i);if(a.kind===`error`)return q(`plugin install: ${a.message}`);let o,s;if(a.kind===`github`){if(!n.fetch)return q(`plugin install: GitHub installs are unavailable (no network fetch configured)`);o=uN(a.ref),s=a.ref.display;let e=await dN(a.ref,o,i,n.fetch);if(e)return q(`plugin install: ${e}`)}else o=a.root;let{loadPluginFromDirectory:c}=await import(`./loader-Dw-TPPKt.js`),l=await c(i,o);if(!l.ok)return a.kind===`github`&&await fN(i,o),q(`plugin install: plugin at ${s??o} was rejected:\n${SN(l.diagnostics)}`);let{plugin:u}=l,d=u.manifest.name,{getInstalledPlugin:f,setInstalledPlugin:p}=await import(`./store-Ci5uqDiF.js`),m=await f(d,n.fs);if(m&&m.root!==o)return a.kind===`github`&&await fN(i,o),q(`plugin install: a plugin named "${d}" is already installed from ${m.root} (remove it first)`);let h=await gN(u,n),g=await hN(d,m?.mcpServerNames,h.registered,n);return await p(d,{root:o,version:u.manifest.version,description:u.manifest.description,installedAt:new Date().toISOString(),mcpServerNames:h.registered,...s?{source:s}:{}},n.fs),rN(mN(u,h,g,s??o,l.diagnostics))}function mN(e,t,n,r,i){let a=e.manifest.name,o=t.registered,s=e.mcp.servers.filter(e=>e.status!==`supported`),c=[`Installed agent plugin "${a}"${e.manifest.version?` v${e.manifest.version}`:``} from ${r}`,` skills: ${e.skills.length}${e.skills.length>0?` (${e.skills.map(e=>e.name).join(`, `)})`:``}`,` mcp: ${o.length} registered${o.length>0?` (${o.join(`, `)})`:``}${s.length>0?`, ${s.length} skipped`:``}${n>0?`, ${n} removed from previous install`:``}`];return t.conflicts.length>0&&c.push(` warning: not bridged — MCP server name(s) already in use and not owned by this plugin: ${t.conflicts.join(`, `)} (remove them with \`mcp remove\` first)`),i.length>0&&c.push(`Diagnostics:`,SN(i)),c.join(`
1885
1905
  `)+`
1886
- `}async function mN(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-DMPHri86.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 hN(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-DMPHri86.js`).then(e=>e.r),{McpClient:a}=await import(`./client-C4_ggaf5.js`).then(e=>e.n),o=[],s=[];for(let c of n){let n=c.config,l=`${e.manifest.name}:${c.name}`,u=await r(l,t.fs);if(u&&u.pluginOrigin!==e.manifest.name){s.push(l);continue}let d=[];try{let e=new a({url:n.url,headers:n.headers});await e.initialize(),d=await e.toolsList()}catch{}await i(l,{url:n.url,...n.headers?{headers:n.headers}:{},tools:d,addedAt:new Date().toISOString(),pluginOrigin:e.manifest.name},t.fs),o.push(l)}return{registered:o,conflicts:s}}async function gN(e,t){if(w(e))return nN(`usage: plugin list
1887
- `);let n=rN(`list`,e);if(!(`ok`in n))return n;let{listInstalledPlugins:r}=await import(`./store-CD8HQQi0.js`),i=await r(t.fs),a=Object.keys(i).sort();if(a.length===0)return nN("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 nN(o.map(e=>e.map((e,t)=>e.padEnd(s[t])).join(` `)).join(`
1906
+ `}async function hN(e,t,n,r){let i=(t??[]).filter(e=>!n.includes(e));if(i.length===0)return 0;let{deleteServer:a,getServer:o}=await import(`./store-vMYCG7nS.js`).then(e=>e.r),s=0;for(let t of i)(await o(t,r.fs))?.pluginOrigin===e&&await a(t,r.fs)&&(s+=1);return s}async function gN(e,t){let n=e.mcp.servers.filter(e=>e.status===`supported`);if(n.length===0)return{registered:[],conflicts:[]};let{getServer:r,setServer:i}=await import(`./store-vMYCG7nS.js`).then(e=>e.r),{McpClient:a}=await import(`./client-C4_ggaf5.js`).then(e=>e.n),o=[],s=[];for(let c of n){let n=c.config,l=`${e.manifest.name}:${c.name}`,u=await r(l,t.fs);if(u&&u.pluginOrigin!==e.manifest.name){s.push(l);continue}let d=[];try{let e=new a({url:n.url,headers:n.headers});await e.initialize(),d=await e.toolsList()}catch{}await i(l,{url:n.url,...n.headers?{headers:n.headers}:{},tools:d,addedAt:new Date().toISOString(),pluginOrigin:e.manifest.name},t.fs),o.push(l)}return{registered:o,conflicts:s}}async function _N(e,t){if(w(e))return rN(`usage: plugin list
1907
+ `);let n=iN(`list`,e);if(!(`ok`in n))return n;let{listInstalledPlugins:r}=await import(`./store-Ci5uqDiF.js`),i=await r(t.fs),a=Object.keys(i).sort();if(a.length===0)return rN("No agent plugins installed. Use `plugin install <path>`.\n");let o=[[`NAME`,`VERSION`,`ROOT`,`MCP`]];for(let e of a){let t=i[e];o.push([e,t.version??`-`,t.root,String(t.mcpServerNames?.length??0)])}let s=o[0].map((e,t)=>Math.max(...o.map(e=>e[t].length)));return rN(o.map(e=>e.map((e,t)=>e.padEnd(s[t])).join(` `)).join(`
1888
1908
  `)+`
1889
- `)}async function _N(e,t){if(w(e))return nN(`usage: plugin info <name>
1890
- `);let n=rN(`info`,e);if(!(`ok`in n))return n;if(n.positionals.length<1)return q(`plugin info: expected <name>`);let r=n.positionals[0],{getInstalledPlugin:i}=await import(`./store-CD8HQQi0.js`),a=await i(r,t.fs);if(!a)return q(`plugin info: no installed plugin named "${r}"`);let o=await oN(t),{loadPluginFromDirectory:s}=await import(`./loader-Dw-TPPKt.js`),c=await s(o,a.root);if(!c.ok)return q(`plugin info: plugin at ${a.root} no longer loads:\n${xN(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:`,xN(c.diagnostics)),nN(d.join(`
1909
+ `)}async function vN(e,t){if(w(e))return rN(`usage: plugin info <name>
1910
+ `);let n=iN(`info`,e);if(!(`ok`in n))return n;if(n.positionals.length<1)return q(`plugin info: expected <name>`);let r=n.positionals[0],{getInstalledPlugin:i}=await import(`./store-Ci5uqDiF.js`),a=await i(r,t.fs);if(!a)return q(`plugin info: no installed plugin named "${r}"`);let o=await sN(t),{loadPluginFromDirectory:s}=await import(`./loader-Dw-TPPKt.js`),c=await s(o,a.root);if(!c.ok)return q(`plugin info: plugin at ${a.root} no longer loads:\n${SN(c.diagnostics)}`);let{plugin:l}=c,u=l.manifest,d=[`${u.name}${u.version?` v${u.version}`:``}`,...u.description?[` ${u.description}`]:[],` root: ${l.root}`,...u.license?[` license: ${u.license}`]:[],...u.homepage?[` home: ${u.homepage}`]:[],``,`Skills (${l.skills.length}):`,...l.skills.map(e=>` ${e.name} ${e.description}`),``,`MCP servers (${l.mcp.servers.length}):`,...l.mcp.servers.map(e=>e.status===`supported`?` ${e.name} ${e.config.type} ${e.config.url}`:` ${e.name} [skipped: ${e.reason}]`)];return c.diagnostics.length>0&&d.push(``,`Diagnostics:`,SN(c.diagnostics)),rN(d.join(`
1891
1911
  `)+`
1892
- `)}async function vN(e,t,n,r){if(w(e))return nN(`usage: plugin validate <path|repo>
1893
- `);let i=rN(`validate`,e);if(!(`ok`in i))return i;if(i.positionals.length<1)return q(`plugin validate: expected <path|repo>`);let a=await oN(n),o=await sN(i.positionals[0],t,a);if(o.kind===`error`)return q(`plugin validate: ${o.message}`);let s,c=null;if(o.kind===`github`){if(!n.fetch)return q(`plugin validate: GitHub sources are unavailable (no network fetch configured)`);c=`${r}/.plugin-validate/${lN(o.ref).split(`/`).pop()}`;let e=await uN(o.ref,c,a,n.fetch);if(e)return q(`plugin validate: ${e}`);s=c}else s=o.root;let{loadPluginFromDirectory:l}=await import(`./loader-Dw-TPPKt.js`),u;try{u=await l(a,s)}finally{c&&await dN(a,c)}if(!u.ok)return{stdout:``,stderr:`plugin validate: REJECTED\n${xN(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:`,xN(u.diagnostics)),nN(p.join(`
1912
+ `)}async function yN(e,t,n,r){if(w(e))return rN(`usage: plugin validate <path|repo>
1913
+ `);let i=iN(`validate`,e);if(!(`ok`in i))return i;if(i.positionals.length<1)return q(`plugin validate: expected <path|repo>`);let a=await sN(n),o=await cN(i.positionals[0],t,a);if(o.kind===`error`)return q(`plugin validate: ${o.message}`);let s,c=null;if(o.kind===`github`){if(!n.fetch)return q(`plugin validate: GitHub sources are unavailable (no network fetch configured)`);c=`${r}/.plugin-validate/${uN(o.ref).split(`/`).pop()}`;let e=await dN(o.ref,c,a,n.fetch);if(e)return q(`plugin validate: ${e}`);s=c}else s=o.root;let{loadPluginFromDirectory:l}=await import(`./loader-Dw-TPPKt.js`),u;try{u=await l(a,s)}finally{c&&await fN(a,c)}if(!u.ok)return{stdout:``,stderr:`plugin validate: REJECTED\n${SN(u.diagnostics)}\n`,exitCode:1};let{plugin:d}=u,f=d.mcp.servers.filter(e=>e.status===`supported`).length,p=[`plugin validate: OK — "${d.manifest.name}"${d.manifest.version?` v${d.manifest.version}`:``}`,` skills: ${d.skills.length}`,` mcp servers: ${f} supported, ${d.mcp.servers.length-f} skipped (mcp.json ${d.mcp.status})`];return u.diagnostics.length>0&&p.push(`Diagnostics:`,SN(u.diagnostics)),rN(p.join(`
1894
1914
  `)+`
1895
- `)}async function yN(e,t){if(w(e))return nN(`usage: plugin remove <name>
1896
- `);let n=rN(`remove`,e);if(!(`ok`in n))return n;if(n.positionals.length<1)return q(`plugin remove: expected <name>`);let r=n.positionals[0],{getInstalledPlugin:i,deleteInstalledPlugin:a}=await import(`./store-CD8HQQi0.js`),o=await i(r,t.fs);if(!o)return q(`plugin remove: no installed plugin named "${r}"`);let s=0;if(o.mcpServerNames&&o.mcpServerNames.length>0){let{deleteServer:e,getServer:n}=await import(`./store-DMPHri86.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(`${tN}/`);return c&&await dN(await oN(t),o.root),nN([`Removed agent plugin "${r}"`,` registry: removed`,` mcp servers: ${s} removed`,c?` files: removed (${o.root})`:` files: left in place (${o.root})`].join(`
1915
+ `)}async function bN(e,t){if(w(e))return rN(`usage: plugin remove <name>
1916
+ `);let n=iN(`remove`,e);if(!(`ok`in n))return n;if(n.positionals.length<1)return q(`plugin remove: expected <name>`);let r=n.positionals[0],{getInstalledPlugin:i,deleteInstalledPlugin:a}=await import(`./store-Ci5uqDiF.js`),o=await i(r,t.fs);if(!o)return q(`plugin remove: no installed plugin named "${r}"`);let s=0;if(o.mcpServerNames&&o.mcpServerNames.length>0){let{deleteServer:e,getServer:n}=await import(`./store-vMYCG7nS.js`).then(e=>e.r);for(let i of o.mcpServerNames)(await n(i,t.fs))?.pluginOrigin===r&&await e(i,t.fs)&&(s+=1)}await a(r,t.fs);let c=o.root.startsWith(`${nN}/`);return c&&await fN(await sN(t),o.root),rN([`Removed agent plugin "${r}"`,` registry: removed`,` mcp servers: ${s} removed`,c?` files: removed (${o.root})`:` files: left in place (${o.root})`].join(`
1897
1917
  `)+`
1898
- `)}function bN(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 xN(e){return e.map(e=>` ${e.level===`error`?`error`:`warn `} [${e.component}] ${e.message}`).join(`
1899
- `)}const SN=[`pid`,`ppid`,`kind`,`stat`,`start`,`scoop`,`command`],CN=[`pid`,`ppid`,`stat`,`start`,`scoop`,`command`],wN={running:`R`,pending:`S`,exited:`Z`,killed:`K`},TN=[`-a`,`-A`,`-e`,`--all`,`-T`,`--tree`],EN=[`-o`,`--columns`];function DN(e={}){return S(`ps`,async t=>{if(w(t,{valueFlags:EN}))return VN();let n=e.processManager??ON();if(!n)return{stdout:``,stderr:`ps: no process manager available in this runtime
1900
- `,exitCode:1};let r=C(t,{bool:TN,value:EN});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=CN,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=kN(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?BN(l):l.map(e=>({proc:e,depth:0})),d=AN(i,u.map(({proc:e})=>e),s!==void 0),f=u.map(({proc:e,depth:t})=>NN(e,i,t,a,d));return{stdout:[jN(i,d),...f].join(`
1918
+ `)}function xN(e,t){let n=t.startsWith(`/`)?t:`${e.replace(/\/$/,``)}/${t}`,r=[];for(let e of n.split(`/`))e!==``&&e!==`.`&&(e===`..`?r.pop():r.push(e));return`/${r.join(`/`)}`}function SN(e){return e.map(e=>` ${e.level===`error`?`error`:`warn `} [${e.component}] ${e.message}`).join(`
1919
+ `)}const CN=[`pid`,`ppid`,`kind`,`stat`,`start`,`scoop`,`command`],wN=[`pid`,`ppid`,`stat`,`start`,`scoop`,`command`],TN={running:`R`,pending:`S`,exited:`Z`,killed:`K`},EN=[`-a`,`-A`,`-e`,`--all`,`-T`,`--tree`],DN=[`-o`,`--columns`];function ON(e={}){return S(`ps`,async t=>{if(w(t,{valueFlags:DN}))return HN();let n=e.processManager??kN();if(!n)return{stdout:``,stderr:`ps: no process manager available in this runtime
1920
+ `,exitCode:1};let r=C(t,{bool:EN,value:DN});if(`error`in r)return{stdout:``,stderr:`ps: ${r.error}\n`,exitCode:r.error.startsWith(`unknown flag:`)?1:2};if(r.positionals.length>0)return{stdout:``,stderr:`ps: unrecognized argument '${r.positionals[0]}'\n`,exitCode:2};let i=wN,a=r.bools.has(`-T`)||r.bools.has(`--tree`),o=r.bools.has(`-a`)||r.bools.has(`-A`)||r.bools.has(`-e`)||r.bools.has(`--all`),s=r.values.get(`-o`)??r.values.get(`--columns`);if(s!==void 0){let e=AN(s);if(e instanceof Error)return{stdout:``,stderr:`ps: ${e.message}\n`,exitCode:2};i=e}let c=n.list().sort((e,t)=>e.pid-t.pid),l=o?c:c.filter(e=>e.status===`running`||e.status===`pending`),u=a?VN(l):l.map(e=>({proc:e,depth:0})),d=jN(i,u.map(({proc:e})=>e),s!==void 0),f=u.map(({proc:e,depth:t})=>PN(e,i,t,a,d));return{stdout:[MN(i,d),...f].join(`
1901
1921
  `)+`
1902
- `,stderr:``,exitCode:0}})}function ON(){let e=globalThis.__slicc_pm;return e instanceof Object&&typeof e.list==`function`?e:null}function kN(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(!SN.includes(e))return Error(`unknown column '${e}'; supported: ${SN.join(`, `)}`);n.push(e)}return n}function AN(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,IN(e).length);return{full:!0,width:r}}function jN(e,t){return e.map(e=>MN(e,t)).join(` `)}function MN(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 NN(e,t,n,r,i){return t.map(t=>PN(e,t,n,r,i)).join(` `)}function PN(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 wN[e.status];case`start`:return FN(e.startedAt);case`scoop`:return LN(e,i);case`command`:return RN(e,n,r)}}function FN(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 IN(e){return e.owner.kind===`cone`?`cone`:e.owner.kind===`system`?`system`:e.owner.kind===`jshd`?`jshd`:e.owner.scoopJid??`scoop`}function LN(e,t){let n=IN(e);return(t.full?n:n.slice(0,t.width)).padEnd(t.width)}function RN(e,t,n){let r=n&&t>0?` `.repeat(t-1)+`└─ `:``,i=e.argv.length===0?`[${e.kind}]`:e.argv.map(zN).join(` `);return r+(i.length>80?i.slice(0,79)+`…`:i)}function zN(e){return e===``?`''`:/^[A-Za-z0-9_./:=@%+-]+$/.test(e)?e:e.includes(`"`)&&!e.includes(`'`)?`'${e}'`:`"${e.replace(/\\/g,`\\\\`).replace(/"/g,`\\"`)}"`}function BN(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 VN(){return{stdout:`Usage: ps [-a] [-T] [-o col[,col…]]
1922
+ `,stderr:``,exitCode:0}})}function kN(){let e=globalThis.__slicc_pm;return e instanceof Object&&typeof e.list==`function`?e:null}function AN(e){let t=e.split(`,`).map(e=>e.trim().toLowerCase()).filter(Boolean);if(t.length===0)return Error(`-o requires at least one column`);let n=[];for(let e of t){if(!CN.includes(e))return Error(`unknown column '${e}'; supported: ${CN.join(`, `)}`);n.push(e)}return n}function jN(e,t,n){if(!(n&&e.includes(`scoop`)))return{full:!1,width:10};let r=5;for(let e of t)r=Math.max(r,LN(e).length);return{full:!0,width:r}}function MN(e,t){return e.map(e=>NN(e,t)).join(` `)}function NN(e,t){switch(e){case`pid`:return`PID`.padStart(5);case`ppid`:return`PPID`.padStart(5);case`kind`:return`KIND`.padEnd(10);case`stat`:return`STAT`;case`start`:return`START`;case`scoop`:return`SCOOP`.padEnd(t.width);case`command`:return`COMMAND`}}function PN(e,t,n,r,i){return t.map(t=>FN(e,t,n,r,i)).join(` `)}function FN(e,t,n,r,i){switch(t){case`pid`:return String(e.pid).padStart(5);case`ppid`:return String(e.ppid).padStart(5);case`kind`:return e.kind.padEnd(10);case`stat`:return TN[e.status];case`start`:return IN(e.startedAt);case`scoop`:return RN(e,i);case`command`:return zN(e,n,r)}}function IN(e){let t=new Date(e);return`${String(t.getHours()).padStart(2,`0`)}:${String(t.getMinutes()).padStart(2,`0`)}:${String(t.getSeconds()).padStart(2,`0`)}`}function LN(e){return e.owner.kind===`cone`?`cone`:e.owner.kind===`system`?`system`:e.owner.kind===`jshd`?`jshd`:e.owner.scoopJid??`scoop`}function RN(e,t){let n=LN(e);return(t.full?n:n.slice(0,t.width)).padEnd(t.width)}function zN(e,t,n){let r=n&&t>0?` `.repeat(t-1)+`└─ `:``,i=e.argv.length===0?`[${e.kind}]`:e.argv.map(BN).join(` `);return r+(i.length>80?i.slice(0,79)+`…`:i)}function BN(e){return e===``?`''`:/^[A-Za-z0-9_./:=@%+-]+$/.test(e)?e:e.includes(`"`)&&!e.includes(`'`)?`'${e}'`:`"${e.replace(/\\/g,`\\\\`).replace(/"/g,`\\"`)}"`}function VN(e){let t=new Map;for(let n of e)t.set(n.pid,n);let n=new Map,r=[];for(let i of e)if(t.has(i.ppid)){let e=n.get(i.ppid)??[];e.push(i),n.set(i.ppid,e)}else r.push(i);let i=[],a=new Set,o=(e,t)=>{if(a.has(e.pid))return;a.add(e.pid),i.push({proc:e,depth:t});let r=n.get(e.pid)??[];for(let e of r.sort((e,t)=>e.pid-t.pid))o(e,t+1)};for(let e of r.sort((e,t)=>e.pid-t.pid))o(e,0);return i}function HN(){return{stdout:`Usage: ps [-a] [-T] [-o col[,col…]]
1903
1923
 
1904
1924
  List processes tracked by the kernel.
1905
1925
 
@@ -1932,9 +1952,9 @@ Examples:
1932
1952
  ps -a -T full tree
1933
1953
  ps -o pid,kind,stat just three columns
1934
1954
  ps -o scoop,stat,pid full scoop jid, with STAT and PID
1935
- `,stderr:``,exitCode:0}}const HN=new Set([`dev`,`proc`,`lib`,`bin`,`usr`,`etc`,`home`,`tmp`]);async function UN(e,t=HN){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 WN(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 GN(){try{if(typeof globalThis.navigator?.storage?.getDirectory==`function`)return`slicc-fs`}catch{}}function KN(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 qN(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 JN(e,t){return`installed pyodide ${e} is not the supported version ${t}: run \`ipk uninstall pyodide\` then \`ipk add pyodide@${t}\``}function YN(){return{stdout:`usage: python3 [-c code | script.py] [args...]
1936
- `,stderr:``,exitCode:0}}function XN(){return{stdout:`Python 3.14 (Pyodide)
1937
- `,stderr:``,exitCode:0}}async function ZN(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 QN(e){let t=KN(e),n=await Lr(t);if(!n)return{kind:`result`,result:{stdout:``,stderr:`${Ir}\n`,exitCode:1}};let r=await qN(t.reader,n);return r?r===Er?{kind:`ok`,assetRoot:n}:{kind:`result`,result:{stdout:``,stderr:`${JN(r,Er)}\n`,exitCode:1}}:{kind:`result`,result:{stdout:``,stderr:`${Ir}\n`,exitCode:1}}}const $N=new Set(`EsSuBIPqObdR`);function eP(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=>$N.has(e)))break;t++}return t===0?e:e.slice(t)}function tP(e,t={}){return S(e,async(n,r)=>{let i=eP(n),a=i[0];if(a===`--help`||a===`-h`)return YN();if(a===`--version`||a===`-V`)return XN();let o=await ZN(e,i,r);if(o.kind===`result`)return o.result;let{code:s,filename:c,sysArgv:l,procArgv:u}=o,d=await UN(r.fs),f=WN(r.fs,d),p=t.buildProcessConfig?.(r.env),m=p?.processManager??nP(),h=p?.owner??{kind:`system`},g=p?.getParentPid?.(),_=t.realmFactory??Wr(),v=t.pyodideIndexURL??ii(),ee=t.pyodideAssetRoot;if(!ee&&v===void 0){let e=await QN(r);if(e.kind===`result`)return e.result;ee=e.assetRoot}let te=c===`<stdin>`?``:P(r.stdin),ne=GN();return m?ei({pm:m,realmFactory:_,owner:h,kind:`py`,code:s,argv:u,realmArgv:l,env:Object.fromEntries(r.env.entries()),cwd:r.cwd,filename:c,ctx:r,stdin:te,pyodideIndexURL:v,pyodideAssetRoot:ee,pyodideMountDirs:d,opfsMountDbName:ne,mountPoints:f,procKind:`py`,ppid:g,syncFsBridgeEnabled:Ur()}):iP({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 nP(){let e=globalThis.__slicc_pm;return e&&typeof e==`object`&&typeof e.spawn==`function`&&typeof e.onSignal==`function`?e:null}let rP=null;async function iP(e){if(!rP){let{ProcessManager:e}=await import(`./process-manager-BkhAohXT.js`).then(e=>e.n);rP=new e}return ei({pm:rP,realmFactory:e.realmFactory,owner:e.owner,kind:`py`,code:e.code,argv:e.argv,realmArgv:e.realmArgv,env:e.env,cwd:e.cwd,filename:e.filename,ctx:e.ctx,stdin:e.stdin,pyodideIndexURL:e.pyodideIndexURL,pyodideAssetRoot:e.pyodideAssetRoot,pyodideMountDirs:e.pyodideMountDirs,mountPoints:e.mountPoints,opfsMountDbName:e.opfsMountDbName,procKind:`py`,syncFsBridgeEnabled:Ur()})}function aP(){return S(`rg`,async(e,t)=>{let{runRg:n}=await import(`./run-DniTiLYn.js`);return n(e,t)})}function oP(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 sP(){return null}function cP(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=lP(r),o=lP(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 lP(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 uP(){return{stdout:`rsync — sync files between local VFS and a remote tray runtime
1955
+ `,stderr:``,exitCode:0}}const UN=new Set([`dev`,`proc`,`lib`,`bin`,`usr`,`etc`,`home`,`tmp`]);async function WN(e,t=UN){let n=[],r=new Set;try{let i=await e.readdir(`/`);for(let a of i){if(!a||a.includes(`/`)||t.has(a))continue;let i=`/${a}`,o=!1;try{o=!!(await e.stat(i)).isDirectory}catch{continue}o&&(r.has(i)||(r.add(i),n.push(i)))}}catch{}return r.has(`/tmp`)||(r.add(`/tmp`),n.push(`/tmp`)),n}function GN(e,t){let n=e;if(typeof n.listMountPoints!=`function`)return[];let r=e=>{for(let n of t)if(e===n||e.startsWith(n===`/`?`/`:n+`/`)||n.startsWith(e+`/`))return!0;return!1},i=[];for(let e of n.listMountPoints())e.kind!==`proc`&&r(e.path)&&i.push({path:e.path,kind:e.kind});return i}function KN(){try{if(typeof globalThis.navigator?.storage?.getDirectory==`function`)return`slicc-fs`}catch{}}function qN(e){return{reader:{exists:t=>e.fs.exists(t),isDirectory:async t=>{try{return(await e.fs.stat(t)).isDirectory}catch{return!1}},readFile:t=>e.fs.readFile(t)},fromDir:e.cwd}}async function JN(e,t){try{let n=await e.readFile(`${t}/package.json`),r=JSON.parse(n);return typeof r.version==`string`?r.version:null}catch{return null}}function YN(e,t){return`installed pyodide ${e} is not the supported version ${t}: run \`ipk uninstall pyodide\` then \`ipk add pyodide@${t}\``}function XN(){return{stdout:`usage: python3 [-c code | script.py] [args...]
1956
+ `,stderr:``,exitCode:0}}function ZN(){return{stdout:`Python 3.14 (Pyodide)
1957
+ `,stderr:``,exitCode:0}}async function QN(e,t,n){if(t[0]===`-c`){if(!t[1])return{kind:`result`,result:{stdout:``,stderr:`${e}: option requires an argument -- 'c'\n`,exitCode:2}};let n=t[1];return{kind:`ok`,code:n,filename:`-c`,sysArgv:[`-c`,...t.slice(2)],procArgv:[e,`-c`,n,...t.slice(2)]}}if(t.length>0&&!t[0].startsWith(`-`)){let r=t[0],i=n.fs.resolvePath(n.cwd,r);return await n.fs.exists(i)?{kind:`ok`,code:await n.fs.readFile(i),filename:r,sysArgv:[r,...t.slice(1)],procArgv:[e,r,...t.slice(1)]}:{kind:`result`,result:{stdout:``,stderr:`${e}: can't open file '${r}': [Errno 2] No such file or directory\n`,exitCode:2}}}return P(n.stdin).trim().length>0?{kind:`ok`,code:P(n.stdin),filename:`<stdin>`,sysArgv:[`<stdin>`],procArgv:[e]}:t.length>0?{kind:`result`,result:{stdout:``,stderr:`${e}: unsupported option '${t[0]}'\n`,exitCode:2}}:{kind:`result`,result:{stdout:``,stderr:`${e}: no input provided (use -c CODE, script path, or stdin)\n`,exitCode:2}}}async function $N(e){let t=qN(e),n=await Lr(t);if(!n)return{kind:`result`,result:{stdout:``,stderr:`${Ir}\n`,exitCode:1}};let r=await JN(t.reader,n);return r?r===Er?{kind:`ok`,assetRoot:n}:{kind:`result`,result:{stdout:``,stderr:`${YN(r,Er)}\n`,exitCode:1}}:{kind:`result`,result:{stdout:``,stderr:`${Ir}\n`,exitCode:1}}}const eP=new Set(`EsSuBIPqObdR`);function tP(e){let t=0;for(;t<e.length&&/^-[A-Za-z]+$/.test(e[t]);){let n=e[t].slice(1);if(n===`W`||n===`X`){t+=2;continue}if(![...n].every(e=>eP.has(e)))break;t++}return t===0?e:e.slice(t)}function nP(e,t={}){return S(e,async(n,r)=>{let i=tP(n),a=i[0];if(a===`--help`||a===`-h`)return XN();if(a===`--version`||a===`-V`)return ZN();let o=await QN(e,i,r);if(o.kind===`result`)return o.result;let{code:s,filename:c,sysArgv:l,procArgv:u}=o,d=await WN(r.fs),f=GN(r.fs,d),p=t.buildProcessConfig?.(r.env),m=p?.processManager??rP(),h=p?.owner??{kind:`system`},g=p?.getParentPid?.(),_=t.realmFactory??Wr(),v=t.pyodideIndexURL??ii(),ee=t.pyodideAssetRoot;if(!ee&&v===void 0){let e=await $N(r);if(e.kind===`result`)return e.result;ee=e.assetRoot}let te=c===`<stdin>`?``:P(r.stdin),ne=KN();return m?ei({pm:m,realmFactory:_,owner:h,kind:`py`,code:s,argv:u,realmArgv:l,env:Object.fromEntries(r.env.entries()),cwd:r.cwd,filename:c,ctx:r,stdin:te,pyodideIndexURL:v,pyodideAssetRoot:ee,pyodideMountDirs:d,opfsMountDbName:ne,mountPoints:f,procKind:`py`,ppid:g,syncFsBridgeEnabled:Ur()}):aP({realmFactory:_,owner:h,code:s,argv:u,realmArgv:l,env:Object.fromEntries(r.env.entries()),cwd:r.cwd,filename:c,ctx:r,stdin:te,pyodideIndexURL:v,pyodideAssetRoot:ee,pyodideMountDirs:d,opfsMountDbName:ne,mountPoints:f})})}function rP(){let e=globalThis.__slicc_pm;return e&&typeof e==`object`&&typeof e.spawn==`function`&&typeof e.onSignal==`function`?e:null}let iP=null;async function aP(e){if(!iP){let{ProcessManager:e}=await import(`./process-manager-BkhAohXT.js`).then(e=>e.n);iP=new e}return ei({pm:iP,realmFactory:e.realmFactory,owner:e.owner,kind:`py`,code:e.code,argv:e.argv,realmArgv:e.realmArgv,env:e.env,cwd:e.cwd,filename:e.filename,ctx:e.ctx,stdin:e.stdin,pyodideIndexURL:e.pyodideIndexURL,pyodideAssetRoot:e.pyodideAssetRoot,pyodideMountDirs:e.pyodideMountDirs,mountPoints:e.mountPoints,opfsMountDbName:e.opfsMountDbName,procKind:`py`,syncFsBridgeEnabled:Ur()})}function oP(){return S(`rg`,async(e,t)=>{let{runRg:n}=await import(`./run-DniTiLYn.js`);return n(e,t)})}function sP(e,t,n={}){let r=new Map;for(let e of t)r.set(e.path,e);let i=new Set,a=[],o=[],s=[];for(let t of e){i.add(t.path);let e=r.get(t.path);e?e.size===t.size&&e.mtimeMs===t.mtimeMs?s.push(t.path):o.push(t.path):a.push(t.path)}let c=[];if(n.delete)for(let e of t)i.has(e.path)||c.push(e.path);return{toAdd:a,toUpdate:o,toDelete:c,toSkip:s}}function cP(){return null}function lP(e){let t={dryRun:!1,delete:!1,verbose:!1},n=[];for(let r of e)if(r===`--dry-run`||r===`-n`)t.dryRun=!0;else if(r===`--delete`)t.delete=!0;else if(r===`--verbose`||r===`-v`)t.verbose=!0;else if(r===`--help`||r===`-h`)return{error:`__help__`};else if(r.startsWith(`-`))return{error:`Unknown flag: ${r}`};else n.push(r);if(n.length!==2)return{error:`Expected exactly 2 arguments: <source> <dest>`};let[r,i]=n,a=uP(r),o=uP(i);return a&&o?{error:`Cannot sync between two remote paths — one side must be local`}:!a&&!o?{error:`One argument must be a remote path (runtime-id:/path)`}:o?{direction:`push`,localPath:r,remotePath:o.path,runtimeId:o.runtimeId,...t}:{direction:`pull`,localPath:i,remotePath:a.path,runtimeId:a.runtimeId,...t}}function uP(e){let t=e.indexOf(`:`);if(t<=0)return null;let n=e.slice(0,t),r=e.slice(t+1);return r.startsWith(`/`)?{runtimeId:n,path:r}:null}function dP(){return{stdout:`rsync — sync files between local VFS and a remote tray runtime
1938
1958
 
1939
1959
  Usage:
1940
1960
  rsync [flags] <local-path> <runtime-id>:<remote-path> # push
@@ -1950,21 +1970,21 @@ Examples:
1950
1970
  rsync /workspace follower-abc123:/workspace
1951
1971
  rsync --delete /shared leader:/shared
1952
1972
  rsync follower-abc123:/workspace/project /workspace/project
1953
- `,stderr:``,exitCode:0}}async function dP(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 fP(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 pP(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 mP(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 hP(e){let t=e.lastIndexOf(`/`);return t<=0?`/`:e.slice(0,t)}async function gP(e,n,r){let i=[],{localPath:a,remotePath:o,runtimeId:s,verbose:c,dryRun:l}=r,u=oP(await dP(e,a),await fP(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(`
1973
+ `,stderr:``,exitCode:0}}async function fP(e,t){if(!await e.exists(t))return[];let n=[];for await(let r of e.walk(t)){let i=r.slice(t.length).replace(/^\//,``);if(!i)continue;let a=await e.stat(r);n.push({path:i,size:a.size,mtimeMs:a.mtime})}return n}async function pP(e,t,n){let r=(await e(t,{op:`walk`,path:n}))[0];if(!r.ok){if(r.code===`ENOENT`)return[];throw Error(`Remote walk failed: ${r.error}`)}if(r.data.type!==`paths`)throw Error(`Unexpected walk response type`);let i=r.data.paths,a=[];for(let r of i){let i=r.slice(n.length).replace(/^\//,``);if(!i)continue;let o=(await e(t,{op:`stat`,path:r}))[0];o.ok&&o.data.type===`stat`&&a.push({path:i,size:o.data.stat.size,mtimeMs:o.data.stat.mtime})}return a}async function mP(e,t,n){let r=await e(t,{op:`readFile`,path:n,encoding:`binary`}),i=``;for(let e of r){if(!e.ok)throw Error(`Remote read failed: ${e.error}`);e.data.type===`file`&&(i+=e.data.content)}return i}async function hP(e,t,n){let r=await e(t,{op:`mkdir`,path:n,recursive:!0});if(!r[0].ok)throw Error(`Remote mkdir failed: ${r[0].error}`)}function gP(e){let t=e.lastIndexOf(`/`);return t<=0?`/`:e.slice(0,t)}async function _P(e,n,r){let i=[],{localPath:a,remotePath:o,runtimeId:s,verbose:c,dryRun:l}=r,u=sP(await fP(e,a),await pP(n,s,o),{delete:r.delete});if(c||l){for(let e of u.toAdd)i.push(`+ ${e}`);for(let e of u.toUpdate)i.push(`~ ${e}`);for(let e of u.toDelete)i.push(`- ${e}`);if(c)for(let e of u.toSkip)i.push(` ${e} (up to date)`)}let d=u.toAdd.length+u.toUpdate.length+u.toDelete.length;if(l)return i.push(`\n(dry run) ${d} file(s) would be transferred, ${u.toSkip.length} up to date`),{stdout:i.join(`
1954
1974
  `)+`
1955
- `,stderr:``,exitCode:0};for(let r of[...u.toAdd,...u.toUpdate]){let c=a+`/`+r,l=o+`/`+r;await mP(n,s,hP(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(`
1975
+ `,stderr:``,exitCode:0};for(let r of[...u.toAdd,...u.toUpdate]){let c=a+`/`+r,l=o+`/`+r;await hP(n,s,gP(l));let u=await e.readFile(c,{encoding:`binary`}),d=await n(s,{op:`writeFile`,path:l,content:t(u),encoding:`base64`});if(!d[0].ok)return{stdout:i.join(`
1956
1976
  `)+`
1957
1977
  `,stderr:`Error writing ${l}: ${d[0].error}\n`,exitCode:1}}for(let e of u.toDelete){let t=o+`/`+e,r=await n(s,{op:`rm`,path:t});if(!r[0].ok)return{stdout:i.join(`
1958
1978
  `)+`
1959
1979
  `,stderr:`Error deleting ${t}: ${r[0].error}\n`,exitCode:1}}return i.push(`${d} file(s) transferred, ${u.toSkip.length} up to date`),{stdout:i.join(`
1960
1980
  `)+`
1961
- `,stderr:``,exitCode:0}}async function _P(e,t,r){let i=[],{localPath:a,remotePath:o,runtimeId:s,verbose:c,dryRun:l}=r,u=oP(await fP(t,s,o),await dP(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(`
1981
+ `,stderr:``,exitCode:0}}async function vP(e,t,r){let i=[],{localPath:a,remotePath:o,runtimeId:s,verbose:c,dryRun:l}=r,u=sP(await pP(t,s,o),await fP(e,a),{delete:r.delete});if(c||l){for(let e of u.toAdd)i.push(`+ ${e}`);for(let e of u.toUpdate)i.push(`~ ${e}`);for(let e of u.toDelete)i.push(`- ${e}`);if(c)for(let e of u.toSkip)i.push(` ${e} (up to date)`)}let d=u.toAdd.length+u.toUpdate.length+u.toDelete.length;if(l)return i.push(`\n(dry run) ${d} file(s) would be transferred, ${u.toSkip.length} up to date`),{stdout:i.join(`
1962
1982
  `)+`
1963
- `,stderr:``,exitCode:0};for(let r of[...u.toAdd,...u.toUpdate]){let i=o+`/`+r,c=a+`/`+r,l=hP(c);await e.exists(l)||await e.mkdir(l,{recursive:!0});let u=await pP(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(`
1983
+ `,stderr:``,exitCode:0};for(let r of[...u.toAdd,...u.toUpdate]){let i=o+`/`+r,c=a+`/`+r,l=gP(c);await e.exists(l)||await e.mkdir(l,{recursive:!0});let u=await mP(t,s,i),d=n(u);await e.writeFile(c,d)}for(let t of u.toDelete){let n=a+`/`+t;await e.rm(n)}return i.push(`${d} file(s) transferred, ${u.toSkip.length} up to date`),{stdout:i.join(`
1964
1984
  `)+`
1965
- `,stderr:``,exitCode:0}}function vP(e={}){let t=e.fs,n=e.getSendFsRequest??sP;return S(`rsync`,async e=>{if(e.includes(`--help`)||e.includes(`-h`)||e.length===0)return uP();if(!t)return{stdout:``,stderr:`rsync: no filesystem available
1985
+ `,stderr:``,exitCode:0}}function yP(e={}){let t=e.fs,n=e.getSendFsRequest??cP;return S(`rsync`,async e=>{if(e.includes(`--help`)||e.includes(`-h`)||e.length===0)return dP();if(!t)return{stdout:``,stderr:`rsync: no filesystem available
1966
1986
  `,exitCode:1};let r=n();if(!r)return{stdout:``,stderr:`rsync: not connected to a tray — rsync requires a tray connection
1967
- `,exitCode:1};let i=cP(e);if(`error`in i)return i.error===`__help__`?uP():{stdout:``,stderr:`rsync: ${i.error}\n`,exitCode:1};try{return i.direction===`push`?await gP(t,r,i):await _P(t,r,i)}catch(e){return{stdout:``,stderr:`rsync: ${e instanceof Error?e.message:String(e)}\n`,exitCode:1}}})}function yP(){return{stdout:`usage: say [-v voice] [-r rate] [-l lang] [-o file] [--list] <text>
1987
+ `,exitCode:1};let i=lP(e);if(`error`in i)return i.error===`__help__`?dP():{stdout:``,stderr:`rsync: ${i.error}\n`,exitCode:1};try{return i.direction===`push`?await _P(t,r,i):await vP(t,r,i)}catch(e){return{stdout:``,stderr:`rsync: ${e instanceof Error?e.message:String(e)}\n`,exitCode:1}}})}function bP(){return{stdout:`usage: say [-v voice] [-r rate] [-l lang] [-o file] [--list] <text>
1968
1988
  say --status | --warmup
1969
1989
 
1970
1990
  Speaks the given text. Uses on-device Kokoro voices when the model
@@ -1983,14 +2003,14 @@ Examples:
1983
2003
  [web speech] otherwise); kokoro voices lead when ready
1984
2004
  --status Show the on-device voice state (downloading/ready + ETA)
1985
2005
  --warmup Stage + start the on-device voice download in the background
1986
- `,stderr:``,exitCode:0}}function bP(e){switch(e.state){case`ready`:return`voice engine: ready
2006
+ `,stderr:``,exitCode:0}}function xP(e){switch(e.state){case`ready`:return`voice engine: ready
1987
2007
  `;case`failed`:return`voice engine: failed (re-run say --warmup to retry)
1988
2008
  `;case`idle`:return`voice engine: not downloaded (run say --warmup)
1989
- `;case`loading`:{let t=e=>(e/1024/1024).toFixed(1);return`voice engine: downloading${e.loaded!=null&&e.total?` ${t(e.loaded)}/${t(e.total)} MB`:``}${e.etaSeconds!=null&&Number.isFinite(e.etaSeconds)?` · ready in ~${Math.max(1,Math.round(e.etaSeconds))}s`:``}\n`}}}function xP(e){return{stdout:``,stderr:`say: ${e}\n`,exitCode:1}}function SP(e){return e instanceof Error?e.message:String(e)}let CP=!1,wP=null;function TP(){return CP?Promise.resolve(speechSynthesis.getVoices()):(wP||=new Promise(e=>{let t=speechSynthesis.getVoices();if(t.length>0){CP=!0,e(t);return}let n=()=>{CP=!0,speechSynthesis.removeEventListener(`voiceschanged`,n),e(speechSynthesis.getVoices())};speechSynthesis.addEventListener(`voiceschanged`,n),setTimeout(()=>{speechSynthesis.removeEventListener(`voiceschanged`,n),CP=!0,e(speechSynthesis.getVoices())},1e3)}),wP)}const EP={"-v":`a voice name`,"-r":`a rate value`,"-l":`a language tag`,"-o":`an output file path`,"--out":`an output file path`};function DP(e){return e!=null&&(!e.startsWith(`-`)||e===`-`)}function OP(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 kP(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 EP){let n=DP(r+1<e.length?e[r+1]:void 0)?e[++r]:null;if(n==null)return xP(`${i} requires ${EP[i]}`);let a=OP(t,i,n);if(a)return xP(a)}else if(i.startsWith(`-`)&&i!==`--list`)return xP(`unknown option: ${i}`);else i.startsWith(`-`)||n.push(i)}return t.text=n.join(` `),t}function AP(e){let t=e.onDevice?`[kokoro]`:`[web speech]`;return`${e.name} (${e.lang}) ${t}${e.default?` [default]`:``}`}async function jP(e){if(e.local){let{kokoroVoicesIfReady:e}=await import(`./speech-page-realm-stub-C7EPKrHd.js`),t=e().map(e=>AP({name:e.id,lang:e.lang,onDevice:e.onDevice})),n=(await TP()).map(e=>AP({name:e.name,lang:e.lang,onDevice:!1,default:e.default}));return{stdout:[...t,...n].join(`
2009
+ `;case`loading`:{let t=e=>(e/1024/1024).toFixed(1);return`voice engine: downloading${e.loaded!=null&&e.total?` ${t(e.loaded)}/${t(e.total)} MB`:``}${e.etaSeconds!=null&&Number.isFinite(e.etaSeconds)?` · ready in ~${Math.max(1,Math.round(e.etaSeconds))}s`:``}\n`}}}function SP(e){return{stdout:``,stderr:`say: ${e}\n`,exitCode:1}}function CP(e){return e instanceof Error?e.message:String(e)}let wP=!1,TP=null;function EP(){return wP?Promise.resolve(speechSynthesis.getVoices()):(TP||=new Promise(e=>{let t=speechSynthesis.getVoices();if(t.length>0){wP=!0,e(t);return}let n=()=>{wP=!0,speechSynthesis.removeEventListener(`voiceschanged`,n),e(speechSynthesis.getVoices())};speechSynthesis.addEventListener(`voiceschanged`,n),setTimeout(()=>{speechSynthesis.removeEventListener(`voiceschanged`,n),wP=!0,e(speechSynthesis.getVoices())},1e3)}),TP)}const DP={"-v":`a voice name`,"-r":`a rate value`,"-l":`a language tag`,"-o":`an output file path`,"--out":`an output file path`};function OP(e){return e!=null&&(!e.startsWith(`-`)||e===`-`)}function kP(e,t,n){switch(t){case`-v`:return e.voiceName=n,null;case`-l`:return e.lang=n,null;case`-o`:case`--out`:return e.outFile=n,null;case`-r`:{let t=parseFloat(n);return Number.isNaN(t)||t<.1||t>10?`rate must be between 0.1 and 10`:(e.rate=t,null)}default:return`unknown option: ${t}`}}function AP(e){let t={voiceName:null,rate:1,lang:null,outFile:null,text:``},n=[];for(let r=0;r<e.length;r++){let i=e[r];if(i in DP){let n=OP(r+1<e.length?e[r+1]:void 0)?e[++r]:null;if(n==null)return SP(`${i} requires ${DP[i]}`);let a=kP(t,i,n);if(a)return SP(a)}else if(i.startsWith(`-`)&&i!==`--list`)return SP(`unknown option: ${i}`);else i.startsWith(`-`)||n.push(i)}return t.text=n.join(` `),t}function jP(e){let t=e.onDevice?`[kokoro]`:`[web speech]`;return`${e.name} (${e.lang}) ${t}${e.default?` [default]`:``}`}async function MP(e){if(e.local){let{kokoroVoicesIfReady:e}=await import(`./speech-page-realm-stub-C7EPKrHd.js`),t=e().map(e=>jP({name:e.id,lang:e.lang,onDevice:e.onDevice})),n=(await EP()).map(e=>jP({name:e.name,lang:e.lang,onDevice:!1,default:e.default}));return{stdout:[...t,...n].join(`
1990
2010
  `)+`
1991
- `,stderr:``,exitCode:0}}try{return{stdout:(await e.panelRpc.call(`list-voices`,void 0)).voices.map(e=>AP(e)).join(`
2011
+ `,stderr:``,exitCode:0}}try{return{stdout:(await e.panelRpc.call(`list-voices`,void 0)).voices.map(e=>jP(e)).join(`
1992
2012
  `)+`
1993
- `,stderr:``,exitCode:0}}catch(e){return xP(SP(e))}}async function MP(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 TP()).map(e=>({name:e.name}));return[...n,...r]}async function NP(e,t){let n=(await MP(e)).find(e=>e.name.toLowerCase().includes(t.toLowerCase()));return n?{resolved:n.name}:{error:xP(`voice "${t}" not found. Use --list to see available voices.`)}}async function PP(e,t){try{if(e.local){let{kokoroStatus:e,kokoroWarmup:n}=await import(`./speech-page-realm-stub-C7EPKrHd.js`);return{stdout:bP(t?n():e()),stderr:``,exitCode:0}}return{stdout:bP(t?await e.panelRpc.call(`speak-warmup`,void 0):await e.panelRpc.call(`speak-status`,void 0)),stderr:``,exitCode:0}}catch(e){return xP(SP(e))}}async function FP(e,t){return t.includes(`--list`)?jP(e):t.includes(`--status`)?PP(e,!1):t.includes(`--warmup`)?PP(e,!0):null}async function IP(e){try{let{speak:t}=await import(`./speech-page-realm-stub-C7EPKrHd.js`);return await t(e),{stdout:``,stderr:``,exitCode:0}}catch(e){return xP(`speech synthesis error: ${SP(e)}`)}}async function LP(e,t){try{return await e.panelRpc.call(`speak-text`,t,{timeoutMs:3e5}),{stdout:``,stderr:``,exitCode:0}}catch(e){return xP(SP(e))}}async function RP(e){let{synthesizeToWav:t}=await import(`./speech-page-realm-stub-C7EPKrHd.js`);try{return{bytes:await t(e)}}catch(e){return xP(SP(e))}}async function zP(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 xP(SP(e))}}async function BP(e,t){return e.local?RP(t):zP(e,t)}async function VP(e,t){let n=await BP(e,t);return`exitCode`in n?n:{...hi(n.bytes),stderr:``,exitCode:0}}async function HP(e,t,n,r){let i=await BP(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 xP(`failed to write ${n}: ${SP(e)}`)}return{stdout:`wrote ${Math.max(1,Math.round(i.bytes.byteLength/1024))} KB to ${a}\n`,stderr:``,exitCode:0}}async function UP(e,t,n){let r;if(n.voiceName){let{resolved:t,error:i}=await NP(e,n.voiceName);if(i)return i;r=t}let i={text:n.text,lang:n.lang,voice:r,rate:n.rate};return n.outFile===`-`||!n.outFile&&!Xn(t)?VP(e,i):n.outFile?HP(e,t,n.outFile,i):e.local?IP(i):LP(e,i)}function WP(){return S(`say`,async(e,t)=>{if(e.includes(`--help`)||e.includes(`-h`))return yP();let n={local:typeof window<`u`&&typeof speechSynthesis<`u`,panelRpc:y()};if(!n.local&&!n.panelRpc)return xP(`Web Speech API unavailable in this environment`);let r=await FP(n,e);if(r)return r;let i=kP(e);return`exitCode`in i?i:i.text?i.lang?UP(n,t,{...i,lang:i.lang}):xP(`-l language tag is required`):yP()})}function GP(){return S(`screencapture`,async(e,t)=>{let{runScreencapture:n}=await import(`./screencapture-run-DRiSGUJ9.js`);return n(e,t)})}const KP=[`--domain`],qP=[`--persist`];function JP(){return`secret — manage secrets for the fetch proxy and mount backends
2013
+ `,stderr:``,exitCode:0}}catch(e){return SP(CP(e))}}async function NP(e){if(!e.local)return(await e.panelRpc.call(`list-voices`,void 0)).voices;let{kokoroVoicesIfReady:t}=await import(`./speech-page-realm-stub-C7EPKrHd.js`),n=t().map(e=>({name:e.id})),r=(await EP()).map(e=>({name:e.name}));return[...n,...r]}async function PP(e,t){let n=(await NP(e)).find(e=>e.name.toLowerCase().includes(t.toLowerCase()));return n?{resolved:n.name}:{error:SP(`voice "${t}" not found. Use --list to see available voices.`)}}async function FP(e,t){try{if(e.local){let{kokoroStatus:e,kokoroWarmup:n}=await import(`./speech-page-realm-stub-C7EPKrHd.js`);return{stdout:xP(t?n():e()),stderr:``,exitCode:0}}return{stdout:xP(t?await e.panelRpc.call(`speak-warmup`,void 0):await e.panelRpc.call(`speak-status`,void 0)),stderr:``,exitCode:0}}catch(e){return SP(CP(e))}}async function IP(e,t){return t.includes(`--list`)?MP(e):t.includes(`--status`)?FP(e,!1):t.includes(`--warmup`)?FP(e,!0):null}async function LP(e){try{let{speak:t}=await import(`./speech-page-realm-stub-C7EPKrHd.js`);return await t(e),{stdout:``,stderr:``,exitCode:0}}catch(e){return SP(`speech synthesis error: ${CP(e)}`)}}async function RP(e,t){try{return await e.panelRpc.call(`speak-text`,t,{timeoutMs:3e5}),{stdout:``,stderr:``,exitCode:0}}catch(e){return SP(CP(e))}}async function zP(e){let{synthesizeToWav:t}=await import(`./speech-page-realm-stub-C7EPKrHd.js`);try{return{bytes:await t(e)}}catch(e){return SP(CP(e))}}async function BP(e,t){try{let n=await e.panelRpc.call(`synthesize-to-wav`,{text:t.text,lang:t.lang,...t.voice?{voice:t.voice}:{},rate:t.rate},{timeoutMs:3e5});return{bytes:new Uint8Array(n.bytes)}}catch(e){return SP(CP(e))}}async function VP(e,t){return e.local?zP(t):BP(e,t)}async function HP(e,t){let n=await VP(e,t);return`exitCode`in n?n:{...hi(n.bytes),stderr:``,exitCode:0}}async function UP(e,t,n,r){let i=await VP(e,r);if(`exitCode`in i)return i;let a=t.fs.resolvePath(t.cwd,n);try{await t.fs.writeFile(a,i.bytes)}catch(e){return SP(`failed to write ${n}: ${CP(e)}`)}return{stdout:`wrote ${Math.max(1,Math.round(i.bytes.byteLength/1024))} KB to ${a}\n`,stderr:``,exitCode:0}}async function WP(e,t,n){let r;if(n.voiceName){let{resolved:t,error:i}=await PP(e,n.voiceName);if(i)return i;r=t}let i={text:n.text,lang:n.lang,voice:r,rate:n.rate};return n.outFile===`-`||!n.outFile&&!Xn(t)?HP(e,i):n.outFile?UP(e,t,n.outFile,i):e.local?LP(i):RP(e,i)}function GP(){return S(`say`,async(e,t)=>{if(e.includes(`--help`)||e.includes(`-h`))return bP();let n={local:typeof window<`u`&&typeof speechSynthesis<`u`,panelRpc:y()};if(!n.local&&!n.panelRpc)return SP(`Web Speech API unavailable in this environment`);let r=await IP(n,e);if(r)return r;let i=AP(e);return`exitCode`in i?i:i.text?i.lang?WP(n,t,{...i,lang:i.lang}):SP(`-l language tag is required`):bP()})}function KP(){return S(`screencapture`,async(e,t)=>{let{runScreencapture:n}=await import(`./screencapture-run-DRiSGUJ9.js`);return n(e,t)})}const qP=[`--domain`],JP=[`--persist`];function YP(){return`secret — manage secrets for the fetch proxy and mount backends
1994
2014
 
1995
2015
  No approval (session-only, in-memory, never persisted):
1996
2016
  secret set <name> <value> --domain <pat> Set a session secret. Free for a
@@ -2032,23 +2052,23 @@ Examples:
2032
2052
  secret peek OPENAI_KEY
2033
2053
  secret set GITHUB_TOKEN ghp_… --domain "api.github.com" --persist # prompts
2034
2054
  secret scope GITHUB_TOKEN --domain "api.github.com,*.github.com" # prompts
2035
- `}function YP(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 XP(e){return{stdout:``,stderr:`secret: ${e}\n`,exitCode:1}}const ZP={persist:`persist secret`,scope:`edit secret scope`,value:`change secret value`},QP=new Set;function $P(e,t){if(e===t)return!0;try{return pt(e).test(t)}catch{return!1}}function eF(e,t){for(let n of e)if($P(n,t))return!0;return!1}function tF(e){return{stdout:``,stderr:`${_t(`secret`,e)}\n`,exitCode:1}}function nF(e){let t=we(),n=e.isExtension??(t===`extension-direct`||t===`extension-delegate`),r=e.backend??Om(t),i=e.grants??QP,a=e.broker,o=()=>(a??=ds(null),a);return{backend:r,inExtension:n,gate:async(e,t)=>{let n=`secret:${e}:${t}`;if(eF(i,n))return`ok`;let r=await o().requestApproval({kind:`secret`,detail:`${ZP[e]}: ${t}`,suggestedPattern:n});if(r.decision===`deny`)return r;if(r.decision===`always`){let e=r.pattern?.trim();i.add(e&&$P(e,n)?e:n)}return`ok`},injectMaskedEnv:async t=>{if(e.setEnv&&Ss(t))try{let n=await r.getMasked(t);n&&e.setEnv(t,n.maskedValue)}catch{}},clearMaskedEnv:t=>{e.unsetEnv&&Ss(t)&&e.unsetEnv(t)}}}function rF(e){let t=P(e);if(t.length!==0)return t.endsWith(`\r
2055
+ `}function XP(e){if(e===void 0||e.startsWith(`-`))return null;let t=e.split(`,`).map(e=>e.trim()).filter(e=>e.length>0);return t.length===0?null:t}function ZP(e){return{stdout:``,stderr:`secret: ${e}\n`,exitCode:1}}const QP={persist:`persist secret`,scope:`edit secret scope`,value:`change secret value`},$P=new Set;function eF(e,t){if(e===t)return!0;try{return pt(e).test(t)}catch{return!1}}function tF(e,t){for(let n of e)if(eF(n,t))return!0;return!1}function nF(e){return{stdout:``,stderr:`${_t(`secret`,e)}\n`,exitCode:1}}function rF(e){let t=we(),n=e.isExtension??(t===`extension-direct`||t===`extension-delegate`),r=e.backend??Om(t),i=e.grants??$P,a=e.broker,o=()=>(a??=ds(null),a);return{backend:r,inExtension:n,gate:async(e,t)=>{let n=`secret:${e}:${t}`;if(tF(i,n))return`ok`;let r=await o().requestApproval({kind:`secret`,detail:`${QP[e]}: ${t}`,suggestedPattern:n});if(r.decision===`deny`)return r;if(r.decision===`always`){let e=r.pattern?.trim();i.add(e&&eF(e,n)?e:n)}return`ok`},injectMaskedEnv:async t=>{if(e.setEnv&&Ss(t))try{let n=await r.getMasked(t);n&&e.setEnv(t,n.maskedValue)}catch{}},clearMaskedEnv:t=>{e.unsetEnv&&Ss(t)&&e.unsetEnv(t)}}}function iF(e){let t=P(e);if(t.length!==0)return t.endsWith(`\r
2036
2056
  `)?t.slice(0,-2):t.endsWith(`
2037
- `)?t.slice(0,-1):t}async function iF(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}):tF(i)}async function aF(e,t,n,r){if(await r.backend.getInfo(e)){let t=await r.gate(`value`,e);if(t!==`ok`)return tF(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 oF(e,t,n){let r=C(e.slice(1),{value:KP,bool:qP});if(`error`in r)return XP(r.error);let i=r.positionals[0];if(!i||i.startsWith(`-`))return{stdout:``,stderr:`secret: set requires a <name>
2038
- `,exitCode:1};let a=r.positionals[1],o=rF(t.stdin);if(a!==void 0&&o!==void 0)return{stdout:``,stderr:`secret: provide <value> as an argument OR via stdin, not both
2057
+ `)?t.slice(0,-1):t}async function aF(e,t,n,r){let i=await r.gate(`persist`,e);return i===`ok`?(await r.backend.setPersisted(e,t,n),await r.injectMaskedEnv(e),{stdout:`Persisted "${e}" (domains: ${n.join(`, `)})\n`,stderr:``,exitCode:0}):nF(i)}async function oF(e,t,n,r){if(await r.backend.getInfo(e)){let t=await r.gate(`value`,e);if(t!==`ok`)return nF(t)}return await r.backend.setSession(e,t,n),await r.injectMaskedEnv(e),{stdout:`Set session secret "${e}" (domains: ${n.join(`, `)}) — in-memory only, not persisted.\n`,stderr:``,exitCode:0}}async function sF(e,t,n){let r=C(e.slice(1),{value:qP,bool:JP});if(`error`in r)return ZP(r.error);let i=r.positionals[0];if(!i||i.startsWith(`-`))return{stdout:``,stderr:`secret: set requires a <name>
2058
+ `,exitCode:1};let a=r.positionals[1],o=iF(t.stdin);if(a!==void 0&&o!==void 0)return{stdout:``,stderr:`secret: provide <value> as an argument OR via stdin, not both
2039
2059
  `,exitCode:1};let s=a??o;if(s===void 0)return{stdout:``,stderr:`secret: set requires a <value>: secret set <name> <value> --domain <patterns> [--persist]
2040
2060
  or pipe the value on stdin: echo "$TOKEN" | secret set <name> --domain <patterns>
2041
- `,exitCode:1};let c=YP(r.values.get(`--domain`));return c?r.bools.has(`--persist`)?iF(i,s,c,n):aF(i,s,c,n):{stdout:``,stderr:`secret: set requires --domain <patterns>
2042
- `,exitCode:1}}function sF(e){return`'${e.replaceAll(`'`,`'\\''`)}'`}async function cF(e,t){let[n,...r]=e.slice(1),i=e=>({stdout:e,stderr:``,exitCode:0});if(n===`set`){let e=C(r,{value:KP,bool:qP}),n=`error`in e?void 0:e.positionals[0];if(!n||!Ss(n))return i(``);let a=await t.backend.getMasked(n).catch(()=>null);return i(a?`export ${n}=${sF(a.maskedValue)}\n`:``)}if(n===`delete`||n===`rm`){let e=C(r,{}),t=`error`in e?void 0:e.positionals[0];return i(t&&Ss(t)?`unset ${t}\n`:``)}return i(``)}async function lF(e,t){let n=C(e.slice(1),{});if(`error`in n)return XP(n.error);let r=n.positionals[0];if(!r)return{stdout:``,stderr:`secret: get requires a <name>
2043
- `,exitCode:1};let i=await t.backend.getMasked(r);return i?{stdout:`${i.name}=${i.maskedValue}\n domains: ${i.domains.join(`, `)||`(none)`}\n`,stderr:``,exitCode:0}:{stdout:``,stderr:`secret: no secret named "${r}"\n`,exitCode:1}}async function uF(e,t){let n=C(e.slice(1),{});if(`error`in n)return XP(n.error);let r=n.positionals[0];if(!r)return{stdout:``,stderr:`secret: peek requires a <name>
2044
- `,exitCode:1};let i=await t.backend.peek(r);return i?{stdout:`${i.name}: ${i.preview}\n domains: ${i.domains.join(`, `)||`(none)`}\n`,stderr:``,exitCode:0}:{stdout:``,stderr:`secret: no secret named "${r}"\n`,exitCode:1}}async function dF(e,t){let n=C(e.slice(1),{value:KP});if(`error`in n)return XP(n.error);let r=n.positionals[0];if(!r||r.startsWith(`-`))return{stdout:``,stderr:`secret: scope requires a <name>
2045
- `,exitCode:1};let i=YP(n.values.get(`--domain`));if(!i)return{stdout:``,stderr:`secret: scope requires --domain <patterns>
2046
- `,exitCode:1};let a=await t.gate(`scope`,r);return a===`ok`?(await t.backend.setScope(r,i),{stdout:`Updated scope for "${r}" (domains: ${i.join(`, `)})\n`,stderr:``,exitCode:0}):tF(a)}async function fF(e,t){let n=C(e.slice(1),{});if(`error`in n)return XP(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
2047
- `,stderr:a,exitCode:o};let s=Math.max(4,...r.map(e=>e.name.length)),c=`${`NAME`.padEnd(s)} TYPE DOMAINS\n`;for(let e of r){let t=e.persisted?`SAVED`:`SESSION`;c+=`${e.name.padEnd(s)} ${t.padEnd(7)} ${e.domains.join(`, `)}\n`}return{stdout:c,stderr:a,exitCode:o}}async function pF(e,t,n){let r=C(e.slice(1),{});if(`error`in r)return XP(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 mF(e,t){let n=C(e.slice(1),{});if(`error`in n)return XP(n.error);let r=n.positionals[0],i=n.positionals[1];if(!r||!i)return{stdout:``,stderr:`secret: test requires <name> <url>
2048
- `,exitCode:1};let a;try{a=new URL(i).hostname}catch{return{stdout:``,stderr:`secret: invalid URL "${i}"\n`,exitCode:1}}let{entries:o,warnings:s}=await t.backend.list(),c=o.find(e=>e.name===r);return c?Ca(c.domains,a)?{stdout:`✓ ${r} is allowed for ${a}\n`,stderr:``,exitCode:0}:{stdout:`✗ ${r} is NOT allowed for ${a}\n Allowed domains: ${c.domains.join(`, `)}\n`,stderr:``,exitCode:1}:{stdout:``,stderr:s.length>0?s.map(e=>`secret: ${e}\n`).join(``):`secret: no secret named "${r}"\n`,exitCode:1}}async function hF(e,t){let n=C(e.slice(1),{});if(`error`in n)return XP(n.error);if(!t.inExtension)return{stdout:`secret: in CLI mode, edit ~/.slicc/secrets.env directly with your text editor.
2061
+ `,exitCode:1};let c=XP(r.values.get(`--domain`));return c?r.bools.has(`--persist`)?aF(i,s,c,n):oF(i,s,c,n):{stdout:``,stderr:`secret: set requires --domain <patterns>
2062
+ `,exitCode:1}}function cF(e){return`'${e.replaceAll(`'`,`'\\''`)}'`}async function lF(e,t){let[n,...r]=e.slice(1),i=e=>({stdout:e,stderr:``,exitCode:0});if(n===`set`){let e=C(r,{value:qP,bool:JP}),n=`error`in e?void 0:e.positionals[0];if(!n||!Ss(n))return i(``);let a=await t.backend.getMasked(n).catch(()=>null);return i(a?`export ${n}=${cF(a.maskedValue)}\n`:``)}if(n===`delete`||n===`rm`){let e=C(r,{}),t=`error`in e?void 0:e.positionals[0];return i(t&&Ss(t)?`unset ${t}\n`:``)}return i(``)}async function uF(e,t){let n=C(e.slice(1),{});if(`error`in n)return ZP(n.error);let r=n.positionals[0];if(!r)return{stdout:``,stderr:`secret: get requires a <name>
2063
+ `,exitCode:1};let i=await t.backend.getMasked(r);return i?{stdout:`${i.name}=${i.maskedValue}\n domains: ${i.domains.join(`, `)||`(none)`}\n`,stderr:``,exitCode:0}:{stdout:``,stderr:`secret: no secret named "${r}"\n`,exitCode:1}}async function dF(e,t){let n=C(e.slice(1),{});if(`error`in n)return ZP(n.error);let r=n.positionals[0];if(!r)return{stdout:``,stderr:`secret: peek requires a <name>
2064
+ `,exitCode:1};let i=await t.backend.peek(r);return i?{stdout:`${i.name}: ${i.preview}\n domains: ${i.domains.join(`, `)||`(none)`}\n`,stderr:``,exitCode:0}:{stdout:``,stderr:`secret: no secret named "${r}"\n`,exitCode:1}}async function fF(e,t){let n=C(e.slice(1),{value:qP});if(`error`in n)return ZP(n.error);let r=n.positionals[0];if(!r||r.startsWith(`-`))return{stdout:``,stderr:`secret: scope requires a <name>
2065
+ `,exitCode:1};let i=XP(n.values.get(`--domain`));if(!i)return{stdout:``,stderr:`secret: scope requires --domain <patterns>
2066
+ `,exitCode:1};let a=await t.gate(`scope`,r);return a===`ok`?(await t.backend.setScope(r,i),{stdout:`Updated scope for "${r}" (domains: ${i.join(`, `)})\n`,stderr:``,exitCode:0}):nF(a)}async function pF(e,t){let n=C(e.slice(1),{});if(`error`in n)return ZP(n.error);let{entries:r,warnings:i}=await t.backend.list(),a=i.map(e=>`secret: ${e}\n`).join(``),o=+(i.length>0);if(r.length===0)return{stdout:i.length>0?``:`No secrets stored
2067
+ `,stderr:a,exitCode:o};let s=Math.max(4,...r.map(e=>e.name.length)),c=`${`NAME`.padEnd(s)} TYPE DOMAINS\n`;for(let e of r){let t=e.persisted?`SAVED`:`SESSION`;c+=`${e.name.padEnd(s)} ${t.padEnd(7)} ${e.domains.join(`, `)}\n`}return{stdout:c,stderr:a,exitCode:o}}async function mF(e,t,n){let r=C(e.slice(1),{});if(`error`in r)return ZP(r.error);let i=r.positionals[0];if(!i)return{stdout:``,stderr:`secret: ${t} requires a <name>\n`,exitCode:1};let a=await n.backend.delete(i);return a.removed?(n.clearMaskedEnv(i),{stdout:`Removed ${a.fromSession===!0?`session`:`persisted`} secret "${i}"\n`,stderr:``,exitCode:0}):{stdout:``,stderr:`secret: no secret named "${i}"\n`,exitCode:1}}async function hF(e,t){let n=C(e.slice(1),{});if(`error`in n)return ZP(n.error);let r=n.positionals[0],i=n.positionals[1];if(!r||!i)return{stdout:``,stderr:`secret: test requires <name> <url>
2068
+ `,exitCode:1};let a;try{a=new URL(i).hostname}catch{return{stdout:``,stderr:`secret: invalid URL "${i}"\n`,exitCode:1}}let{entries:o,warnings:s}=await t.backend.list(),c=o.find(e=>e.name===r);return c?Ca(c.domains,a)?{stdout:`✓ ${r} is allowed for ${a}\n`,stderr:``,exitCode:0}:{stdout:`✗ ${r} is NOT allowed for ${a}\n Allowed domains: ${c.domains.join(`, `)}\n`,stderr:``,exitCode:1}:{stdout:``,stderr:s.length>0?s.map(e=>`secret: ${e}\n`).join(``):`secret: no secret named "${r}"\n`,exitCode:1}}async function gF(e,t){let n=C(e.slice(1),{});if(`error`in n)return ZP(n.error);if(!t.inExtension)return{stdout:`secret: in CLI mode, edit ~/.slicc/secrets.env directly with your text editor.
2049
2069
  (changes are picked up on the next request — no restart needed)
2050
2070
  `,stderr:``,exitCode:0};try{return await chrome.runtime.openOptionsPage(),{stdout:`Opened Mount Secrets options page in a new tab.
2051
- `,stderr:``,exitCode:0}}catch{let e=chrome.runtime.getURL(`secrets.html`);return window.open(e,`_blank`),{stdout:`Opened ${e}\n`,stderr:``,exitCode:0}}}async function gF(e,t,n){let r=e[0];switch(r){case`set`:return oF(e,t,n);case`get`:case`read`:return lF(e,n);case`shell-env`:return cF(e,n);case`peek`:return uF(e,n);case`scope`:return dF(e,n);case`list`:return fF(e,n);case`delete`:case`rm`:return pF(e,r,n);case`test`:return mF(e,n);case`edit`:return hF(e,n);default:return{stdout:``,stderr:`secret: unknown command "${r}"\n`,exitCode:1}}}function _F(e={}){let t=nF(e);return S(`secret`,async(e,n)=>{if(e.length===0||w(e,{valueFlags:KP}))return{stdout:JP(),stderr:``,exitCode:0};try{return await gF(e,n,t)}catch(e){return{stdout:``,stderr:`secret: ${e instanceof Error?e.message:String(e)}\n`,exitCode:1}}})}function vF(){return null}function yF(){return null}function bF(){return{stdout:`usage: serve [--entry <relative-path>] [--ttl <duration>] [--bridge | --no-bridge] [--max-tabs <n>] [--quiet] [--stop <token>] [--list] <directory>
2071
+ `,stderr:``,exitCode:0}}catch{let e=chrome.runtime.getURL(`secrets.html`);return window.open(e,`_blank`),{stdout:`Opened ${e}\n`,stderr:``,exitCode:0}}}async function _F(e,t,n){let r=e[0];switch(r){case`set`:return sF(e,t,n);case`get`:case`read`:return uF(e,n);case`shell-env`:return lF(e,n);case`peek`:return dF(e,n);case`scope`:return fF(e,n);case`list`:return pF(e,n);case`delete`:case`rm`:return mF(e,r,n);case`test`:return hF(e,n);case`edit`:return gF(e,n);default:return{stdout:``,stderr:`secret: unknown command "${r}"\n`,exitCode:1}}}function vF(e={}){let t=rF(e);return S(`secret`,async(e,n)=>{if(e.length===0||w(e,{valueFlags:qP}))return{stdout:YP(),stderr:``,exitCode:0};try{return await _F(e,n,t)}catch(e){return{stdout:``,stderr:`secret: ${e instanceof Error?e.message:String(e)}\n`,exitCode:1}}})}function yF(){return null}function bF(){return null}function xF(){return{stdout:`usage: serve [--entry <relative-path>] [--ttl <duration>] [--bridge | --no-bridge] [--max-tabs <n>] [--quiet] [--stop <token>] [--list] <directory>
2052
2072
  serve --logs [<token>] [--lines <n>]
2053
2073
  serve --truncate [<token>]
2054
2074
 
@@ -2084,28 +2104,28 @@ Limits and lifetime:
2084
2104
  its TTL. Either can be removed sooner with \`serve --stop\`.
2085
2105
  - <token> is the "Preview token" printed at mint time or the TOKEN column
2086
2106
  of \`serve --list\`; \`--stop\` also accepts the preview URL.
2087
- `,stderr:``,exitCode:0}}function xF(e){return`error`in e}function SF(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
2088
- `}:(n.lines=i,{skip:+(e===`--lines`)})}}function CF(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
2107
+ `,stderr:``,exitCode:0}}function SF(e){return`error`in e}function CF(e,t,n){if(e===`--list`)return n.list=!0,{skip:0};if(e===`--logs`||e===`--truncate`){let r=e===`--logs`?`logs`:`truncate`;return t&&!t.startsWith(`-`)?(n[r]=t,{skip:1}):(n[r]=!0,{skip:0})}if(e.startsWith(`--logs=`)||e.startsWith(`--truncate=`)){let t=e.startsWith(`--logs=`)?`logs`:`truncate`,r=e.slice(e.indexOf(`=`)+1);return r?(n[t]=r,{skip:0}):{error:`serve: missing value for --${t}\n`}}if(e===`--lines`||e.startsWith(`--lines=`)){let r=e===`--lines`?t:e.slice(8),i=r===void 0?NaN:Number(r);return!Number.isSafeInteger(i)||i<=0?{error:`serve: --lines must be a positive integer
2108
+ `}:(n.lines=i,{skip:+(e===`--lines`)})}}function wF(e,t,n){if(e!==`--ttl`&&!e.startsWith(`--ttl=`))return;let r=e===`--ttl`?t:e.slice(6);if(!r)return{error:`serve: missing value for --ttl
2089
2109
  `};let i=/^([1-9][0-9]*)([mhdw])$/.exec(r);if(!i)return{error:`serve: --ttl must be a positive whole duration (m, h, d, or w)
2090
2110
  `};let a=Number(i[1])*{m:6e4,h:36e5,d:864e5,w:6048e5}[i[2]];return Number.isSafeInteger(a)?a>2592e6?{error:`serve: --ttl cannot exceed 30d; longer retention requires a Sliccy Deluxe De-Enshittification plan.
2091
2111
  `}:(n.ttlMs=a,{skip:+(e===`--ttl`)}):{error:`serve: --ttl must be a positive whole duration (m, h, d, or w)
2092
- `}}function wF(e,t){let n={"--bridge":`bridge`,"--no-bridge":`noBridge`,"--project":`project`,"--quiet":`quiet`}[e];if(n)return t[n]=!0,{skip:0}}function TF(e,t,n){let r=CF(e,t,n);if(r)return r;let i=wF(e,n);if(i)return i;if(e===`--entry`)return t?(n.entry=t,{skip:1}):{error:`serve: missing value for --entry
2112
+ `}}function TF(e,t){let n={"--bridge":`bridge`,"--no-bridge":`noBridge`,"--project":`project`,"--quiet":`quiet`}[e];if(n)return t[n]=!0,{skip:0}}function EF(e,t,n){let r=wF(e,t,n);if(r)return r;let i=TF(e,n);if(i)return i;if(e===`--entry`)return t?(n.entry=t,{skip:1}):{error:`serve: missing value for --entry
2093
2113
  `};if(e.startsWith(`--entry=`))return n.entry=e.slice(8),{skip:0};if(e===`--stop`)return t?(n.stop=t,{skip:1}):{error:`serve: missing value for --stop
2094
- `};if(e.startsWith(`--stop=`))return n.stop=e.slice(7),{skip:0};let a=SF(e,t,n);if(a)return a;if(e===`--max-tabs`){if(!t)return{error:`serve: missing value for --max-tabs
2114
+ `};if(e.startsWith(`--stop=`))return n.stop=e.slice(7),{skip:0};let a=CF(e,t,n);if(a)return a;if(e===`--max-tabs`){if(!t)return{error:`serve: missing value for --max-tabs
2095
2115
  `};let e=Number.parseInt(t,10);return!Number.isFinite(e)||e<=0?{error:`serve: --max-tabs must be a positive integer
2096
2116
  `}:(n.maxTabs=e,{skip:1})}if(e.startsWith(`--max-tabs=`)){let t=Number.parseInt(e.slice(11),10);return!Number.isFinite(t)||t<=0?{error:`serve: --max-tabs must be a positive integer
2097
2117
  `}:(n.maxTabs=t,{skip:0})}return e.startsWith(`-`)?{error:`serve: unknown option: ${e}\n`}:n.directory?{error:`serve: expected a single directory argument
2098
- `}:(n.directory=e,{skip:0})}function EF(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=TF(e[n],e[n+1],t);if(xF(r))return{...t,error:r.error};n+=r.skip}return t}async function DF(e,t,n,r){if(!gr(t))return{stdout:``,stderr:`serve: invalid entry file: ${t}\n`,exitCode:1};let i=n.resolvePath(r,e),a;try{a=await n.stat(i)}catch{return{stdout:``,stderr:`serve: no such directory: ${e}\n`,exitCode:1}}if(!a.isDirectory)return{stdout:``,stderr:`serve: not a directory: ${e}\n`,exitCode:1};let o=Cr(i,t),s;try{s=await n.stat(o)}catch{return{stdout:``,stderr:`serve: entry file not found: ${o}\n`,exitCode:1}}return s.isFile?{fullDirectory:i,entryPath:o}:{stdout:``,stderr:`serve: entry is not a file: ${o}\n`,exitCode:1}}function OF(e){return`exitCode`in e}async function kF(e){let t=xa(e)??e,n,r=yF();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
2099
- `,exitCode:1};if(n.webhookId){let e=await zy();if(!e)return{stdout:`Preview revoked: ${t}\n`,stderr:`serve: preview revoked, but the preview-bridge webhook could not be cleaned up (lick manager unavailable). It is a live endpoint — delete it with \`webhook delete ${n.webhookId}\`.\n`,exitCode:0};try{await e.deleteWebhook(n.webhookId)}catch(e){return{stdout:`Preview revoked: ${t}\n`,stderr:`serve: preview revoked, but webhook cleanup failed: ${e instanceof Error?e.message:String(e)}. Delete it with \`webhook delete ${n.webhookId}\`.\n`,exitCode:0}}}return{stdout:`Preview revoked: ${t}\n`,stderr:``,exitCode:0}}async function AF(){let e=yF();if(e){let t=(await e({type:`list`})).previews??[];return t.length===0?{stdout:`No active previews
2100
- `,stderr:``,exitCode:0}:{stdout:MF(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
2101
- `,stderr:``,exitCode:0}:{stdout:MF(n),stderr:``,exitCode:0}}function jF(e){return e.mode===`persistent`?e.state===`pending`?`uploading`:`persistent`:`live`}function MF(e){return`Active previews:\n TOKEN MODE EXPIRES URL ROOT CREATED\n${e.map(e=>` ${e.previewToken} ${jF(e)} ${e.expiresAt??`-`} ${e.url} ${e.servedRoot} ${e.createdAt}\n`).join(``)}`}function NF(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 PF(e){let t,n=yF();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.
2102
- `,stderr:``,exitCode:0}:{stdout:`Preview lifecycle records (oldest to newest):\n${t.map(NF).join(``)}`,stderr:``,exitCode:0}}async function FF(e){let t,n,r=yF();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 IF(e,t){let n=[],r=0;for await(let i of e.walk(t)){if(n.length>=1e3)throw Error(`persistent preview exceeds 1000 file limit`);let a=await e.readFile(i,{encoding:`binary`}),o=typeof a==`string`?new TextEncoder().encode(a):a,s=i.slice(t===`/`?1:t.length+1);if(o.byteLength>26214400)throw Error(`preview file exceeds 25 MiB limit: ${s}`);if(r+=o.byteLength,r>52428800)throw Error(`persistent preview exceeds 50 MiB total limit`);n.push({path:s,content:o,mime:cr(s)})}return n}function LF(e){return e().catch(e=>({stdout:``,stderr:`serve: ${e instanceof Error?e.message:String(e)}\n`,exitCode:1}))}async function RF(e){let t=vF();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 zF(e,t){if(t)return t.createPage(e);typeof window<`u`&&typeof window.open==`function`&&window.open(e,`_blank`,`noopener,noreferrer`)}async function BF(e,t){if(!e)return{ok:!0};let n=await zy();if(!n)return{ok:!1,result:{stdout:``,stderr:`${t}serve: --bridge requires an active lick manager\n`,exitCode:1}};try{return{ok:!0,webhookId:(await n.createWebhook(`preview-bridge`)).id}}catch(e){return{ok:!1,result:{stdout:``,stderr:`${t}serve: webhook creation failed: ${e instanceof Error?e.message:String(e)}\n`,exitCode:1}}}}async function VF(e,t,n,r,i,a,o){let s;try{s=await RF({entryPath:n,servedRoot:t,bridge:e.bridge,noBridge:e.ttlMs!==void 0||e.noBridge,maxTabs:e.maxTabs,quiet:e.quiet,webhookId:r,ttlMs:e.ttlMs,snapshotFiles:a})}catch(e){if(r){let e=await zy();e&&await e.deleteWebhook(r).catch(()=>{})}return{stdout:``,stderr:`${i}serve: ${e instanceof Error?e.message:String(e)}\n`,exitCode:1}}let c=await zF(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 HF(e){if(e.stop){let t=e.stop;return LF(()=>kF(t))}if(e.list)return LF(()=>AF());if(e.logs&&e.truncate)return{stdout:``,stderr:`serve: --logs and --truncate are mutually exclusive
2118
+ `}:(n.directory=e,{skip:0})}function DF(e){let t={entry:`index.html`,bridge:!1,noBridge:!1,project:!1,list:!1,quiet:!1};for(let n=0;n<e.length;n+=1){let r=EF(e[n],e[n+1],t);if(SF(r))return{...t,error:r.error};n+=r.skip}return t}async function OF(e,t,n,r){if(!gr(t))return{stdout:``,stderr:`serve: invalid entry file: ${t}\n`,exitCode:1};let i=n.resolvePath(r,e),a;try{a=await n.stat(i)}catch{return{stdout:``,stderr:`serve: no such directory: ${e}\n`,exitCode:1}}if(!a.isDirectory)return{stdout:``,stderr:`serve: not a directory: ${e}\n`,exitCode:1};let o=Cr(i,t),s;try{s=await n.stat(o)}catch{return{stdout:``,stderr:`serve: entry file not found: ${o}\n`,exitCode:1}}return s.isFile?{fullDirectory:i,entryPath:o}:{stdout:``,stderr:`serve: entry is not a file: ${o}\n`,exitCode:1}}function kF(e){return`exitCode`in e}async function AF(e){let t=xa(e)??e,n,r=bF();if(r)n=await r({type:`stop`,previewToken:t});else{let e=y();if(!e)return{stdout:``,stderr:"serve: no leader tray available. Enable multi-browser sync via `host enable` or the avatar popover.\n",exitCode:1};n=await e.call(`tray-revoke-preview`,{previewToken:t})}if(!n.revoked)return{stdout:``,stderr:`serve: preview token not found or already revoked
2119
+ `,exitCode:1};if(n.webhookId){let e=await zy();if(!e)return{stdout:`Preview revoked: ${t}\n`,stderr:`serve: preview revoked, but the preview-bridge webhook could not be cleaned up (lick manager unavailable). It is a live endpoint — delete it with \`webhook delete ${n.webhookId}\`.\n`,exitCode:0};try{await e.deleteWebhook(n.webhookId)}catch(e){return{stdout:`Preview revoked: ${t}\n`,stderr:`serve: preview revoked, but webhook cleanup failed: ${e instanceof Error?e.message:String(e)}. Delete it with \`webhook delete ${n.webhookId}\`.\n`,exitCode:0}}}return{stdout:`Preview revoked: ${t}\n`,stderr:``,exitCode:0}}async function jF(){let e=bF();if(e){let t=(await e({type:`list`})).previews??[];return t.length===0?{stdout:`No active previews
2120
+ `,stderr:``,exitCode:0}:{stdout:NF(t),stderr:``,exitCode:0}}let t=y();if(!t)return{stdout:``,stderr:"serve: no leader tray available. Enable multi-browser sync via `host enable` or the avatar popover.\n",exitCode:1};let n=(await t.call(`tray-list-previews`,void 0)).previews??[];return n.length===0?{stdout:`No active previews
2121
+ `,stderr:``,exitCode:0}:{stdout:NF(n),stderr:``,exitCode:0}}function MF(e){return e.mode===`persistent`?e.state===`pending`?`uploading`:`persistent`:`live`}function NF(e){return`Active previews:\n TOKEN MODE EXPIRES URL ROOT CREATED\n${e.map(e=>` ${e.previewToken} ${MF(e)} ${e.expiresAt??`-`} ${e.url} ${e.servedRoot} ${e.createdAt}\n`).join(``)}`}function PF(e){let t=e.announced?`announced`:`suppressed`,n=e.previewToken??`-`,r=e.lifecycle===`connected`?`origin=${e.origin??`-`} userAgent=${e.userAgent??`-`}`:`reason=${e.reason??`-`}`;return`${e.timestamp} ${e.lifecycle.padEnd(12)} ${t.padEnd(10)} preview=${n} conn=${e.connId} ${r}\n`}async function FF(e){let t,n=bF();if(n)t=(await n({type:`logs`,previewToken:e.previewToken})).lifecycleRecords??[];else{let n=y();if(!n)return{stdout:``,stderr:"serve --logs: no leader tray available. Enable multi-browser sync via `host enable` or the avatar popover.\n",exitCode:1};t=(await n.call(`tray-preview-logs`,{previewToken:e.previewToken})).lifecycleRecords}return e.lines!==void 0&&(t=t.slice(-e.lines)),t.length===0?{stdout:`No preview lifecycle records. The recorder is leader-memory-only and resets on leader restart.
2122
+ `,stderr:``,exitCode:0}:{stdout:`Preview lifecycle records (oldest to newest):\n${t.map(PF).join(``)}`,stderr:``,exitCode:0}}async function IF(e){let t,n,r=bF();if(r){let i=await r({type:`truncate`,previewToken:e});t=i.cleared??0,n=i.rearmed??0}else{let r=y();if(!r)return{stdout:``,stderr:"serve --truncate: no leader tray available. Enable multi-browser sync via `host enable` or the avatar popover.\n",exitCode:1};let i=await r.call(`tray-preview-truncate`,{previewToken:e});t=i.cleared,n=i.rearmed}return{stdout:`Cleared ${t} preview lifecycle record${t===1?``:`s`}; re-armed ${n} preview announcement${n===1?``:`s`}.\n`,stderr:``,exitCode:0}}async function LF(e,t){let n=[],r=0;for await(let i of e.walk(t)){if(n.length>=1e3)throw Error(`persistent preview exceeds 1000 file limit`);let a=await e.readFile(i,{encoding:`binary`}),o=typeof a==`string`?new TextEncoder().encode(a):a,s=i.slice(t===`/`?1:t.length+1);if(o.byteLength>26214400)throw Error(`preview file exceeds 25 MiB limit: ${s}`);if(r+=o.byteLength,r>52428800)throw Error(`persistent preview exceeds 50 MiB total limit`);n.push({path:s,content:o,mime:cr(s)})}return n}function RF(e){return e().catch(e=>({stdout:``,stderr:`serve: ${e instanceof Error?e.message:String(e)}\n`,exitCode:1}))}async function zF(e){let t=yF();if(t)return t(e);let n=y();if(!n)throw Error("no leader tray available. Enable multi-browser sync via `host enable` or the avatar popover.");return e.ttlMs===void 0?n.call(`tray-open-preview`,e):n.call(`tray-open-preview`,e,{timeoutMs:6e5})}async function BF(e,t){if(t)return t.createPage(e);typeof window<`u`&&typeof window.open==`function`&&window.open(e,`_blank`,`noopener,noreferrer`)}async function VF(e,t){if(!e)return{ok:!0};let n=await zy();if(!n)return{ok:!1,result:{stdout:``,stderr:`${t}serve: --bridge requires an active lick manager\n`,exitCode:1}};try{return{ok:!0,webhookId:(await n.createWebhook(`preview-bridge`)).id}}catch(e){return{ok:!1,result:{stdout:``,stderr:`${t}serve: webhook creation failed: ${e instanceof Error?e.message:String(e)}\n`,exitCode:1}}}}async function HF(e,t,n,r,i,a,o){let s;try{s=await zF({entryPath:n,servedRoot:t,bridge:e.bridge,noBridge:e.ttlMs!==void 0||e.noBridge,maxTabs:e.maxTabs,quiet:e.quiet,webhookId:r,ttlMs:e.ttlMs,snapshotFiles:a})}catch(e){if(r){let e=await zy();e&&await e.deleteWebhook(r).catch(()=>{})}return{stdout:``,stderr:`${i}serve: ${e instanceof Error?e.message:String(e)}\n`,exitCode:1}}let c=await BF(s.url,o),l=`${s.pushed} follower${s.pushed===1?``:`s`}`,u=c?` (targetId: ${c})`:``,d=e.ttlMs===void 0?`expires 5 min after the leader disconnects`:`kept until its --ttl expires; counts toward the 10-snapshot tray quota`,f=s.previewToken?`Preview token: ${s.previewToken} (${d}; revoke sooner with serve --stop)\n`:``;return{stdout:`Preview URL: ${s.url}${u}\n${f}Pushed to ${l}\n`,stderr:i,exitCode:0}}async function UF(e){if(e.stop){let t=e.stop;return RF(()=>AF(t))}if(e.list)return RF(()=>jF());if(e.logs&&e.truncate)return{stdout:``,stderr:`serve: --logs and --truncate are mutually exclusive
2103
2123
  `,exitCode:1};if(e.lines!==void 0&&!e.logs)return{stdout:``,stderr:`serve: --lines requires --logs
2104
- `,exitCode:1};if(e.logs){let t=typeof e.logs==`string`?e.logs:void 0;return LF(()=>PF({previewToken:t,lines:e.lines}))}if(e.truncate){let t=typeof e.truncate==`string`?e.truncate:void 0;return LF(()=>FF(t))}}function UF(e){if(e.ttlMs!==void 0&&e.bridge)return{stdout:``,stderr:`serve: --ttl cannot be combined with --bridge
2124
+ `,exitCode:1};if(e.logs){let t=typeof e.logs==`string`?e.logs:void 0;return RF(()=>FF({previewToken:t,lines:e.lines}))}if(e.truncate){let t=typeof e.truncate==`string`?e.truncate:void 0;return RF(()=>IF(t))}}function WF(e){if(e.ttlMs!==void 0&&e.bridge)return{stdout:``,stderr:`serve: --ttl cannot be combined with --bridge
2105
2125
  `,exitCode:1};if(e.ttlMs!==void 0&&e.maxTabs!==void 0)return{stdout:``,stderr:`serve: --ttl cannot be combined with --max-tabs
2106
- `,exitCode:1}}async function WF(e,t,n){if(e.ttlMs!==void 0){if(!t)throw Error(`persistent snapshot filesystem unavailable`);return IF(t,n)}}async function GF(e,t,n,r){if(e.length===0||e.includes(`--help`)||e.includes(`-h`))return bF();let i=EF(e);if(i.error)return{stdout:``,stderr:i.error,exitCode:1};let a=await HF(i);if(a)return a;if(!i.directory)return bF();let o=UF(i);if(o)return o;let s=await DF(i.directory,i.entry,t.fs,t.cwd);if(OF(s))return s;let{fullDirectory:c,entryPath:l}=s,u;try{u=await WF(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)
2107
- `:``,f=await BF(!i.noBridge&&i.bridge,d);return f.ok?VF(i,c,l,f.webhookId,d,u,n):f.result}function KF(e,t){return S(`serve`,(n,r)=>GF(n,r,e,t))}const qF=`usage: session export [--id <id>] [--output <path>]
2108
- `;function JF(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 YF(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${qF}`};let n=r[e+1];if(!n||n.startsWith(`-`))return{ok:!1,stderr:`session export: --id requires a value\n${qF}`};t=n,e++}else if(i===`--output`){if(n!==null)return{ok:!1,stderr:`session export: duplicate flag --output\n${qF}`};let t=r[e+1];if(!t||t.startsWith(`-`))return{ok:!1,stderr:`session export: --output requires a path\n${qF}`};n=t,e++}else if(i.startsWith(`-`))return{ok:!1,stderr:`session export: unknown flag ${i}\n${qF}`};else return{ok:!1,stderr:`session export: unexpected argument ${JSON.stringify(i)}\n${qF}`}}return{ok:!0,args:{sessionId:t,outputPath:n}}}async function XF(e){let t=[],n=0;for await(let r of e.chunks)t.push(r),n+=r.byteLength;let r=new Uint8Array(n),i=0;for(let e of t)r.set(e,i),i+=e.byteLength;let a=await e.completion;if(a.byteLength!==n||kt(r)!==a.sha256)throw new Oa(`transfer-corrupt`);return r}async function ZF(e,t){let n=YF(e);if(!n.ok)return{stdout:``,stderr:n.stderr,exitCode:1};let{sessionId:r,outputPath:i}=n.args;if(i!==null){let e=JF(i);if(!e.ok)return{stdout:``,stderr:`session export: --output ${e.reason}\n${qF}`,exitCode:1}}let a=r==null?{kind:`active`}:{kind:`frozen`,sessionId:r};try{let e=await hs().export(a,{}),n=await XF(e),r=i??`/workspace/${e.filename}`;return await t.fs.writeFile(r,n),{stdout:`exported ${r}\n`,stderr:``,exitCode:0}}catch(e){return{stdout:``,stderr:`session export: ${e instanceof Oa?e.code:e instanceof Error?e.message:String(e)}\n`,exitCode:1}}}function QF(){return S(`session`,async(e,t)=>{if(e[0]===`export`&&!w(e))return ZF(e,t);let{dispatchSessionMemoryAware:n}=await import(`./session-command-memory-NaC_Sdn0.js`);return n(e,t,qF)})}function $F(){return S(`slicc`,async(e,t)=>{let{runSlicc:n}=await import(`./run-cvQKad0O.js`);return await n(e,t)})}const eI=`leader`;function tI(){try{let e=globalThis.localStorage?.getItem(`slicc.leaderSprinkleInstances`);if(e)return JSON.parse(e)}catch{}return[]}function nI(e){return+!!e.leader+e.followers.length}function rI(){return{stdout:`usage: sprinkle <subcommand> [args]
2126
+ `,exitCode:1}}async function GF(e,t,n){if(e.ttlMs!==void 0){if(!t)throw Error(`persistent snapshot filesystem unavailable`);return LF(t,n)}}async function KF(e,t,n,r){if(e.length===0||e.includes(`--help`)||e.includes(`-h`))return xF();let i=DF(e);if(i.error)return{stdout:``,stderr:i.error,exitCode:1};let a=await UF(i);if(a)return a;if(!i.directory)return xF();let o=WF(i);if(o)return o;let s=await OF(i.directory,i.entry,t.fs,t.cwd);if(kF(s))return s;let{fullDirectory:c,entryPath:l}=s,u;try{u=await GF(i,r,c)}catch(e){return{stdout:``,stderr:`serve: ${e instanceof Error?e.message:String(e)}\n`,exitCode:1}}let d=i.project?`serve: --project is obsolete; ignored (root-absolute paths work natively under unified preview)
2127
+ `:``,f=await VF(!i.noBridge&&i.bridge,d);return f.ok?HF(i,c,l,f.webhookId,d,u,n):f.result}function qF(e,t){return S(`serve`,(n,r)=>KF(n,r,e,t))}const JF=`usage: session export [--id <id>] [--output <path>]
2128
+ `;function YF(e){if(e.includes(`\0`))return{ok:!1,reason:`path must not contain NUL bytes`};if(e.includes(`\\`))return{ok:!1,reason:`path must not contain backslashes`};let t=e.split(`/`);for(let e of t)if(e===`..`)return{ok:!1,reason:`path must not contain ".."/traversal segments`};return{ok:!0}}function XF(e){let t=null,n=null,r=e.slice(1);for(let e=0;e<r.length;e++){let i=r[e];if(i===`--id`){if(t!==null)return{ok:!1,stderr:`session export: duplicate flag --id\n${JF}`};let n=r[e+1];if(!n||n.startsWith(`-`))return{ok:!1,stderr:`session export: --id requires a value\n${JF}`};t=n,e++}else if(i===`--output`){if(n!==null)return{ok:!1,stderr:`session export: duplicate flag --output\n${JF}`};let t=r[e+1];if(!t||t.startsWith(`-`))return{ok:!1,stderr:`session export: --output requires a path\n${JF}`};n=t,e++}else if(i.startsWith(`-`))return{ok:!1,stderr:`session export: unknown flag ${i}\n${JF}`};else return{ok:!1,stderr:`session export: unexpected argument ${JSON.stringify(i)}\n${JF}`}}return{ok:!0,args:{sessionId:t,outputPath:n}}}async function ZF(e){let t=[],n=0;for await(let r of e.chunks)t.push(r),n+=r.byteLength;let r=new Uint8Array(n),i=0;for(let e of t)r.set(e,i),i+=e.byteLength;let a=await e.completion;if(a.byteLength!==n||kt(r)!==a.sha256)throw new Oa(`transfer-corrupt`);return r}async function QF(e,t){let n=XF(e);if(!n.ok)return{stdout:``,stderr:n.stderr,exitCode:1};let{sessionId:r,outputPath:i}=n.args;if(i!==null){let e=YF(i);if(!e.ok)return{stdout:``,stderr:`session export: --output ${e.reason}\n${JF}`,exitCode:1}}let a=r==null?{kind:`active`}:{kind:`frozen`,sessionId:r};try{let e=await hs().export(a,{}),n=await ZF(e),r=i??`/workspace/${e.filename}`;return await t.fs.writeFile(r,n),{stdout:`exported ${r}\n`,stderr:``,exitCode:0}}catch(e){return{stdout:``,stderr:`session export: ${e instanceof Oa?e.code:e instanceof Error?e.message:String(e)}\n`,exitCode:1}}}function $F(){return S(`session`,async(e,t)=>{if(e[0]===`export`&&!w(e))return QF(e,t);let{dispatchSessionMemoryAware:n}=await import(`./session-command-memory-CVBwVZ62.js`);return n(e,t,JF)})}function eI(){return S(`slicc`,async(e,t)=>{let{runSlicc:n}=await import(`./run-cvQKad0O.js`);return await n(e,t)})}const tI=`leader`;function nI(){try{let e=globalThis.localStorage?.getItem(`slicc.leaderSprinkleInstances`);if(e)return JSON.parse(e)}catch{}return[]}function rI(e){return+!!e.leader+e.followers.length}function iI(){return{stdout:`usage: sprinkle <subcommand> [args]
2109
2129
 
2110
2130
  list [--runtime <id>] List sprinkles + an instance line per runtime
2111
2131
  open <name> Open a sprinkle by name
@@ -2123,22 +2143,22 @@ Limits and lifetime:
2123
2143
  chat <html> Show inline HTML in chat (Tool UI)
2124
2144
  Use data-action="name" on buttons for callbacks
2125
2145
  Pipe HTML: echo "<div>...</div>" | sprinkle chat
2126
- `,stderr:``,exitCode:0}}function iI(){return globalThis.__slicc_sprinkleManager??null}function J(e,t){return{stdout:``,stderr:`sprinkle ${e}: ${t}\n`,exitCode:1}}function aI(){return[eI,...ne().map(e=>e.runtimeId)]}function oI(e){return`unknown runtime "${e}"\nknown runtimes: ${aI().join(`, `)}\nRun \`host\` to see connected followers.`}async function sI(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
2146
+ `,stderr:``,exitCode:0}}function aI(){return globalThis.__slicc_sprinkleManager??null}function J(e,t){return{stdout:``,stderr:`sprinkle ${e}: ${t}\n`,exitCode:1}}function oI(){return[tI,...ne().map(e=>e.runtimeId)]}function sI(e){return`unknown runtime "${e}"\nknown runtimes: ${oI().join(`, `)}\nRun \`host\` to see connected followers.`}async function cI(e,t){let n=e.slice(1).join(` `);if(!n){let e=P(t.stdin);e&&(n=e)}if(!n)return{stdout:``,stderr:`sprinkle chat: HTML content required
2127
2147
  `,exitCode:1};let r=await Me({html:n,onAction:async(e,t)=>({action:e,data:t})});return r===null?{stdout:``,stderr:`sprinkle chat: not in tool execution context
2128
2148
  `,exitCode:1}:{stdout:JSON.stringify(r)+`
2129
- `,stderr:``,exitCode:0}}function cI(e){return e.map(e=>{let t=e.runtime?` (${e.runtime})`:``;return` instance: ${e.runtimeId}${t}`})}function lI(e){return[...e.map(e=>({name:e,runtimeId:eI})),...tI()]}async function uI(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&&!aI().includes(r))return J(`list`,oI(r));await e.refresh();let i=e.available();if(i.length===0)return{stdout:`No .shtml sprinkles found.
2130
- `,stderr:``,exitCode:0};let a=new Set(e.opened()),o=lI([...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(...cI(t))}return s.length===0?{stdout:`No sprinkles are open on runtime "${r}".\n`,stderr:``,exitCode:0}:{stdout:s.join(`
2149
+ `,stderr:``,exitCode:0}}function lI(e){return e.map(e=>{let t=e.runtime?` (${e.runtime})`:``;return` instance: ${e.runtimeId}${t}`})}function uI(e){return[...e.map(e=>({name:e,runtimeId:tI})),...nI()]}async function dI(e,t){let n=C(t.slice(1),{value:[`--runtime`]});if(`error`in n)return J(`list`,n.error);let r=n.values.get(`--runtime`);if(r!==void 0&&!oI().includes(r))return J(`list`,sI(r));await e.refresh();let i=e.available();if(i.length===0)return{stdout:`No .shtml sprinkles found.
2150
+ `,stderr:``,exitCode:0};let a=new Set(e.opened()),o=uI([...a]).filter(e=>r===void 0||e.runtimeId===r),s=[];for(let e of i){let t=o.filter(t=>t.name===e.name);if(r!==void 0&&t.length===0)continue;let n=a.has(e.name)?` [open]`:``;s.push(` ${e.name}${n} ${e.title} (${e.path})`),s.push(...lI(t))}return s.length===0?{stdout:`No sprinkles are open on runtime "${r}".\n`,stderr:``,exitCode:0}:{stdout:s.join(`
2131
2151
  `)+`
2132
- `,stderr:``,exitCode:0}}function dI(e,t){return!t||No(e)?null:(Po(e,t),No(e)===t?t:null)}async function fI(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=dI(i,a);try{a?await e.open(i,void 0,{lickOriginTarget:a}):await e.open(i)}catch(e){return o&&Fo(i),J(`open`,e instanceof Error?e.message:String(e))}return{stdout:`Sprinkle "${i}" opened${o?`; licks route to "${o}"`:``}.\n`,stderr:``,exitCode:0}}function pI(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 mI(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 hI(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 gI(e){let t=C(e.slice(1),{value:[`--scoop`],bool:[`--clear`]});if(`error`in t)return J(`route`,t.error);let n=t.positionals[0];if(!n){let e=Io(),t=Object.entries(e);return t.length===0?{stdout:`No sprinkle routes configured (all licks go to cone).
2152
+ `,stderr:``,exitCode:0}}function fI(e,t){return!t||No(e)?null:(Po(e,t),No(e)===t?t:null)}async function pI(e,t,n){let r=C(t.slice(1),{});if(`error`in r)return J(`open`,r.error);let i=r.positionals[0];if(!i)return J(`open`,`name required`);let a=Zi(void 0,n),o=fI(i,a);try{a?await e.open(i,void 0,{lickOriginTarget:a}):await e.open(i)}catch(e){return o&&Fo(i),J(`open`,e instanceof Error?e.message:String(e))}return{stdout:`Sprinkle "${i}" opened${o?`; licks route to "${o}"`:``}.\n`,stderr:``,exitCode:0}}function mI(e,t){let n=C(t.slice(1),{});if(`error`in n)return J(`close`,n.error);let r=n.positionals[0];return r?(e.close(r),{stdout:`Sprinkle "${r}" closed.\n`,stderr:``,exitCode:0}):J(`close`,`name required`)}async function hI(e,t){let n=C(t.slice(1),{});if(`error`in n)return J(`reload`,n.error);let r=n.positionals[0];if(!r)return J(`reload`,`name required`);try{return await e.reload(r),{stdout:`Sprinkle "${r}" reloaded.\n`,stderr:``,exitCode:0}}catch(e){return J(`reload`,e instanceof Error?e.message:String(e))}}async function gI(e,t){let n=C(t.slice(1),{});if(`error`in n)return J(`refresh`,n.error);await e.refresh();let r=e.available().length;return{stdout:`Found ${r} sprinkle${r===1?``:`s`}.\n`,stderr:``,exitCode:0}}function _I(e){let t=C(e.slice(1),{value:[`--scoop`],bool:[`--clear`]});if(`error`in t)return J(`route`,t.error);let n=t.positionals[0];if(!n){let e=Io(),t=Object.entries(e);return t.length===0?{stdout:`No sprinkle routes configured (all licks go to cone).
2133
2153
  `,stderr:``,exitCode:0}:{stdout:`Sprinkle routes (applied to every runtime — the leader resolves the
2134
2154
  route for follower-forwarded licks too):
2135
2155
  `+t.map(([e,t])=>` ${e} -> ${t}`).join(`
2136
2156
  `)+`
2137
- `,stderr:``,exitCode:0}}if(t.bools.has(`--clear`))return Fo(n),{stdout:`Route cleared for sprinkle "${n}" (licks will go to cone).\n`,stderr:``,exitCode:0};let r=t.values.get(`--scoop`);if(!r){let e=No(n);return e?{stdout:`${n} -> ${e}\n`,stderr:``,exitCode:0}:{stdout:`${n} -> cone (default)\n`,stderr:``,exitCode:0}}return Po(n,r),{stdout:`Sprinkle "${n}" lick events will route to scoop "${r}".\n`,stderr:``,exitCode:0}}function _I(e){let t=[];return e.leader&&t.push(eI),t.push(...e.followers),t.join(`, `)}async function vI(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&&!aI().includes(o))return J(`send`,oI(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`,oI(s.unknownRuntime));let c=nI(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`} (${_I(s)}).\n`,stderr:``,exitCode:0}}function yI(){return S(`sprinkle`,async(e,t)=>{if(e.length===0||e[0]===`--help`||e[0]===`-h`)return rI();let n=e[0];if(w(e.slice(1),{valueFlags:[`--scoop`,`--runtime`]}))return{stdout:st(`sprinkle`,n,rI().stdout),stderr:``,exitCode:0};if(n===`chat`)return sI(ot(e),t);let r=iI();if(!r)return{stdout:``,stderr:`sprinkle: sprinkle manager not initialized
2138
- `,exitCode:1};switch(n){case`list`:return uI(r,e);case`open`:return fI(r,e,t.env);case`close`:return pI(r,e);case`reload`:return mI(r,e);case`refresh`:return hI(r,e);case`route`:return gI(e);case`send`:return vI(r,e);default:return{stdout:``,stderr:`sprinkle: unknown subcommand "${n}"\n`,exitCode:1}}})}function bI(){return{stdout:`usage: sqlite3 [database] [sql]
2139
- `,stderr:``,exitCode:0}}function xI(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 SI(e,t){return e===`:memory:`?e:t.fs.resolvePath(t.cwd,e)}async function CI(e,t,n){return t===`:memory:`||!await n.fs.exists(t)?new e.Database:new e.Database(await n.fs.readFileBuffer(t))}async function wI(e,t,n){t!==`:memory:`&&await n.fs.writeFile(t,e.export())}function TI(e){let t=e.flatMap(e=>e.values.map(e=>e.map(hr).join(`|`)));return t.length>0?`${t.join(`
2140
- `)}\n`:``}async function EI(e,t,n){let r=await Sr(),i=SI(e,n),a=await CI(r,i,n),o=a.exec(t);return await wI(a,i,n),a.close(),TI(o)}function DI(e,t){return{stdout:``,stderr:`${e}: ${t instanceof Error?t.message:String(t)}\n`,exitCode:1}}function OI(e=`sqlite3`){return S(e,async(t,n)=>{if(t.includes(`--help`)||t.includes(`-h`))return bI();let{database:r,sql:i}=xI(t,n);if(!i)return DI(e,`interactive mode is not supported; provide SQL as argument or stdin`);try{return{stdout:await EI(r,i,n),stderr:``,exitCode:0}}catch(t){return DI(e,t)}})}function kI(e){return{stdout:``,stderr:e.endsWith(`
2141
- `)?e:`${e}\n`,exitCode:1}}function AI(){return{stdout:`ssh - run a command on a connected tray follower
2157
+ `,stderr:``,exitCode:0}}if(t.bools.has(`--clear`))return Fo(n),{stdout:`Route cleared for sprinkle "${n}" (licks will go to cone).\n`,stderr:``,exitCode:0};let r=t.values.get(`--scoop`);if(!r){let e=No(n);return e?{stdout:`${n} -> ${e}\n`,stderr:``,exitCode:0}:{stdout:`${n} -> cone (default)\n`,stderr:``,exitCode:0}}return Po(n,r),{stdout:`Sprinkle "${n}" lick events will route to scoop "${r}".\n`,stderr:``,exitCode:0}}function vI(e){let t=[];return e.leader&&t.push(tI),t.push(...e.followers),t.join(`, `)}async function yI(e,t){let n=C(t.slice(1),{value:[`--runtime`]});if(`error`in n)return J(`send`,n.error);let r=n.positionals[0];if(!r)return J(`send`,`name required`);let i=n.positionals.slice(1).join(` `);if(!i)return J(`send`,`JSON data required`);let a;try{a=JSON.parse(i)}catch{return J(`send`,`invalid JSON`)}let o=n.values.get(`--runtime`);if(o!==void 0&&!oI().includes(o))return J(`send`,sI(o));let s=await e.sendToSprinkle(r,a,o?{runtime:o}:void 0);if(!s)return J(`send`,`sprinkle manager returned no delivery report — push not confirmed`);if(s.unknownRuntime)return J(`send`,sI(s.unknownRuntime));let c=rI(s);return c===0?J(`send`,o?`"${r}" is not open on runtime "${o}" — nothing was delivered`:`"${r}" is not open on the leader or any connected follower — nothing was delivered`):{stdout:`Data sent to sprinkle "${r}" — ${c} instance${c===1?``:`s`} (${vI(s)}).\n`,stderr:``,exitCode:0}}function bI(){return S(`sprinkle`,async(e,t)=>{if(e.length===0||e[0]===`--help`||e[0]===`-h`)return iI();let n=e[0];if(w(e.slice(1),{valueFlags:[`--scoop`,`--runtime`]}))return{stdout:st(`sprinkle`,n,iI().stdout),stderr:``,exitCode:0};if(n===`chat`)return cI(ot(e),t);let r=aI();if(!r)return{stdout:``,stderr:`sprinkle: sprinkle manager not initialized
2158
+ `,exitCode:1};switch(n){case`list`:return dI(r,e);case`open`:return pI(r,e,t.env);case`close`:return mI(r,e);case`reload`:return hI(r,e);case`refresh`:return gI(r,e);case`route`:return _I(e);case`send`:return yI(r,e);default:return{stdout:``,stderr:`sprinkle: unknown subcommand "${n}"\n`,exitCode:1}}})}function xI(){return{stdout:`usage: sqlite3 [database] [sql]
2159
+ `,stderr:``,exitCode:0}}function SI(e,t){let n=e.length>0&&!e[0].startsWith(`-`);return{database:n?e[0]:`:memory:`,sql:(n?e.slice(1):e).join(` `).trim()||P(t.stdin).trim()}}function CI(e,t){return e===`:memory:`?e:t.fs.resolvePath(t.cwd,e)}async function wI(e,t,n){return t===`:memory:`||!await n.fs.exists(t)?new e.Database:new e.Database(await n.fs.readFileBuffer(t))}async function TI(e,t,n){t!==`:memory:`&&await n.fs.writeFile(t,e.export())}function EI(e){let t=e.flatMap(e=>e.values.map(e=>e.map(hr).join(`|`)));return t.length>0?`${t.join(`
2160
+ `)}\n`:``}async function DI(e,t,n){let r=await Sr(),i=CI(e,n),a=await wI(r,i,n),o=a.exec(t);return await TI(a,i,n),a.close(),EI(o)}function OI(e,t){return{stdout:``,stderr:`${e}: ${t instanceof Error?t.message:String(t)}\n`,exitCode:1}}function kI(e=`sqlite3`){return S(e,async(t,n)=>{if(t.includes(`--help`)||t.includes(`-h`))return xI();let{database:r,sql:i}=SI(t,n);if(!i)return OI(e,`interactive mode is not supported; provide SQL as argument or stdin`);try{return{stdout:await DI(r,i,n),stderr:``,exitCode:0}}catch(t){return OI(e,t)}})}function AI(e){return{stdout:``,stderr:e.endsWith(`
2161
+ `)?e:`${e}\n`,exitCode:1}}function jI(){return{stdout:`ssh - run a command on a connected tray follower
2142
2162
 
2143
2163
  Usage: ssh [--cwd <dir>] [--timeout <seconds>] <runtime-id> <command...>
2144
2164
  ssh --list
@@ -2161,11 +2181,11 @@ Examples:
2161
2181
  ssh --list
2162
2182
  ssh follower-abc123 "uname -a"
2163
2183
  ssh --cwd /tmp follower-abc123 "ls -la"
2164
- `,stderr:``,exitCode:0}}function jI(e){let t=e.filter(e=>e.exec);if(t.length===0)return`No exec-capable followers connected.
2184
+ `,stderr:``,exitCode:0}}function MI(e){let t=e.filter(e=>e.exec);if(t.length===0)return`No exec-capable followers connected.
2165
2185
  Start one with: slicc <join-url> follow sh -c
2166
2186
  `;let n=[`exec targets:`];for(let e of t){let t=[e.runtimeId];e.runtime&&t.push(`(${e.runtime})`),n.push(` - ${t.join(` `)}`),e.motd&&n.push(` ${e.motd}`),e.computerMotd&&n.push(` ${e.computerMotd}`)}return`${n.join(`
2167
- `)}\n`}function MI(e){if(e.stdin===void 0)return;let n=pi(e.stdin);if(n.length===0)return;let r=new Uint8Array(n.length);for(let e=0;e<n.length;e++)r[e]=n.charCodeAt(e)&255;return t(r)}function NI(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 PI(){return S(`ssh`,async(e,t)=>{let n=NI(e);if(`help`in n)return AI();if(`error`in n)return kI(n.error);if(n.list||n.runtimeId===void 0)return{stdout:jI(ne()),stderr:``,exitCode:0};if(!n.command)return kI(`ssh: missing command
2168
- Usage: ssh <runtime-id> <command...>`);let r=y();if(!r)return kI(`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:MI(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 kI(`ssh: ${e instanceof Error?e.message:String(e)}`)}finally{t.signal?.removeEventListener(`abort`,a)}})}function FI(e){return{stdout:``,stderr:`${_t(`sudo`,e)}\n`,exitCode:77}}function II(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...]
2187
+ `)}\n`}function NI(e){if(e.stdin===void 0)return;let n=pi(e.stdin);if(n.length===0)return;let r=new Uint8Array(n.length);for(let e=0;e<n.length;e++)r[e]=n.charCodeAt(e)&255;return t(r)}function PI(e){let t=!1,n,r,i=0;for(;i<e.length;){let a=e[i];if(a===`--help`||a===`-h`)return{help:!0};if(a===`--list`||a===`-l`){t=!0,i+=1;continue}if(a===`--cwd`){let t=e[i+1];if(t===void 0)return{error:`ssh: --cwd requires a directory argument`};n=t,i+=2;continue}if(a===`--timeout`){let t=e[i+1],n=Number(t);if(t===void 0||!Number.isFinite(n)||n<=0)return{error:`ssh: --timeout requires a positive number of seconds`};r=n,i+=2;continue}if(a.startsWith(`-`)&&a!==`-`)return{error:`ssh: unknown flag: ${a}`};break}let a=e[i],o=e.slice(i+1).join(` `);return{list:t,cwd:n,timeoutSec:r,runtimeId:a,command:o}}function FI(){return S(`ssh`,async(e,t)=>{let n=PI(e);if(`help`in n)return jI();if(`error`in n)return AI(n.error);if(n.list||n.runtimeId===void 0)return{stdout:MI(ne()),stderr:``,exitCode:0};if(!n.command)return AI(`ssh: missing command
2188
+ Usage: ssh <runtime-id> <command...>`);let r=y();if(!r)return AI(`ssh: not available in this environment (needs the standalone app)`);let i=`ssh-${Date.now()}-${Math.random().toString(36).slice(2,10)}`,a=()=>{r.call(`tray-exec-signal`,{execToken:i}).catch(()=>{})};t.signal?.addEventListener(`abort`,a,{once:!0});try{let e=n.timeoutSec?n.timeoutSec*1e3:void 0,a=await r.call(`tray-exec`,{runtimeId:n.runtimeId,command:n.command,cwd:n.cwd,execToken:i,timeoutMs:e,stdin:NI(t)},{timeoutMs:(e??864e5)+5e3});return a.error?{stdout:a.stdout,stderr:`${a.stderr}ssh: ${a.error}\n`,exitCode:a.exitCode||1}:{stdout:a.stdout,stderr:a.stderr,exitCode:a.exitCode}}catch(e){return AI(`ssh: ${e instanceof Error?e.message:String(e)}`)}finally{t.signal?.removeEventListener(`abort`,a)}})}function II(e){return{stdout:``,stderr:`${_t(`sudo`,e)}\n`,exitCode:77}}function LI(e={}){let{broker:t,persistGrant:n,suppressNextGate:r}=e;return S(`sudo`,async(e,i)=>{if(e.length===0)return{stdout:``,stderr:`sudo: usage: sudo <command> [args...]
2169
2189
  `,exitCode:1};if(e[0]===`--help`||e[0]===`-h`)return{stdout:`usage: sudo <command> [args...]
2170
2190
 
2171
2191
  Request human approval to run <command> with elevation. If approved, the
@@ -2182,14 +2202,14 @@ Options:
2182
2202
  -h, --help Show this help message and exit.
2183
2203
  `,stderr:``,exitCode:0};if(!t)return{stdout:``,stderr:`sudo: command-level approval is not configured
2184
2204
  `,exitCode:1};if(!i.exec)return{stdout:``,stderr:`sudo: cannot dispatch inner command in this context
2185
- `,exitCode:1};let a=um(e[0],e.slice(1)),o=i.env?.get(mm),s=await t.requestApproval({kind:`command`,detail:a,...o?{reason:o}:{}});if(s.decision===`deny`)return FI(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 LI(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 RI(e,t){return e.fs.lstat?e.fs.lstat(t):e.fs.stat(t)}function zI(e,t){return e.some(e=>/^-[^-]/.test(e)&&e.slice(1).includes(t))}async function BI(e,t,n){let r=e.fs.resolvePath(e.cwd,t);try{let i=await RI(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}': ${LI(e)}\n`}}}function VI(){return S(`rm`,async(e,t)=>{let n={recursive:zI(e,`r`)||zI(e,`R`)||e.includes(`--recursive`),force:zI(e,`f`)||e.includes(`--force`),verbose:zI(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
2186
- `,exitCode:1};let i=await Promise.all(r.map(e=>BI(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 HI(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 UI(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 WI(e,t,n){try{let r=e.fs.resolvePath(e.cwd,t),i=n.follow?await e.fs.stat(r):await RI(e,r);return{stdout:n.format?`${HI(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 GI(){return S(`stat`,async(e,t)=>{let n=UI(e);if(n.paths.length===0)return{stdout:``,stderr:`stat: missing operand
2187
- `,exitCode:1};let r=await Promise.all(n.paths.map(e=>WI(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 KI(e){let t=e.replace(/\/+$/,``),n=t.lastIndexOf(`/`);return n<=0?`/`:t.slice(0,n)}async function qI(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 RI(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}': ${LI(e)}\n`}}if(!n||s===i.length-1)return{stdout:o,stderr:``};a=KI(a)}return{stdout:o,stderr:``}}function JI(){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
2188
- `,exitCode:1};let a=await Promise.all(i.map(e=>qI(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 YI(){return{stdout:`usage: tar (-c|-x|-t) [-zv] -f <archive> [-C <dir>] [paths...]
2189
- `,stderr:``,exitCode:0}}function XI(e){return{stdout:``,stderr:`tar: ${e}\n`,exitCode:1}}function ZI(e,t){if(e.mode)return XI(`exactly one of -c, -x, or -t is required`);e.mode=t}function QI(e,t,n){if(n)return[n,t];let r=e[t+1];return r===void 0?void 0:[r,t+1]}const $I={c:`create`,x:`extract`,t:`list`};function eL(e,t,n,r,i){let a=$I[e];if(a)return{nextIndex:r,error:ZI(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:XI(`unsupported option -${e}`)};let o=QI(n,r,t);return o?(e===`f`?i.archive=o[0]:i.directory=o[0],{nextIndex:o[1],consumedValue:!0}):{nextIndex:r,error:XI(`option -${e} requires an argument`)}}function tL(e,t,n){let r=e[t];for(let i=1;i<r.length;i++){let a=eL(r[i],r.slice(i+1),e,t,n);if(a.error||a.consumedValue)return a}return{nextIndex:t}}const nL=/^[cxtzvfC]+$/;function rL(e){let t=e.length>0&&nL.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 XI(`unsupported option ${r}`);let i=tL(t,e,n);if(i.error)return i.error;e=i.nextIndex}return n}function iL(e,t){let n=e.replace(/\\/g,`/`).replace(/^\/+/,``).replace(/^(?:\.\/)+/,``);return n?n===`.`?`.`:n.replace(/\/+$/,``):mr(t)}function aL(e){let t=e.mtime?.getTime();return t===void 0||Number.isNaN(t)?{}:{mtime:Math.floor(t/1e3)}}async function oL(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},...aL(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},...aL(i)});for(let n of await e.fs.readdir(t))await oL(e,pr(t,n),`${a}${n}`,r)}function sL(e,t){let n=e.length>=2&&e[0]===31&&e[1]===139,r=t||n?ca(e):e;return sa(r,{stripNpmPrefix:!1,includeDirectories:!0,preserveRawPaths:!0})}function cL(e,t,n){let r=n.replace(/\\/g,`/`);if(!r||r.startsWith(`/`)||/^[a-zA-Z]:\//.test(r)||r.split(`/`).includes(`..`))return;let i=e.fs.resolvePath(t,r);return xr(t,i)?i:void 0}async function lL(e){try{await e()}catch(e){let t=e?.code;if(t===`ENOSYS`||t===`ENOTSUP`||t===`EOPNOTSUPP`)return;throw e}}async function uL(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 lL(()=>r.updateMetadataBatch(s));return}let c=e.fs;if(typeof c.updateMetadataBatch==`function`){await lL(()=>c.updateMetadataBatch(s));return}for(let[e,n]of t)await lL(()=>c.chmod(e,n));for(let[e,t]of n){let n=new Date(t*1e3);await lL(()=>c.utimes(e,n,n))}}async function dL(e,t,n,r,i){let a=n.directory?493:420,o=n.mode===a&&await e.fs.exists(t),s=n.mode!==void 0&&(n.mode!==a||o);if(n.directory){await e.fs.mkdir(t,{recursive:!0}),s&&r.push([t,n.mode]);return}let c=vr(t);c!==`/`&&await e.fs.mkdir(c,{recursive:!0}),await e.fs.writeFile(t,n.bytes),s&&i.push([t,n.mode])}async function fL(e,t){if(e.paths.length===0)return XI(`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 oL(t,e,iL(i,e),n)}let i=t.fs.resolvePath(t.cwd,e.archive),a=aa(n);return await t.fs.writeFile(i,e.gzip?oa(a):a),{stdout:e.verbose?`${n.map(e=>e.path).join(`
2190
- `)}\n`:``,stderr:``,exitCode:0}}function pL(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 mL(e,t,n){if(e.paths.length>0)return XI(`${e.mode} mode does not accept input paths`);let r=t.fs.resolvePath(t.cwd,e.archive),i=sL(await t.fs.readFileBuffer(r),e.gzip);if(e.mode===`list`){let e=i.map(e=>e.path).join(`
2191
- `);return{stdout:e?`${e}\n`:``,stderr:``,exitCode:0}}let a=t.fs.resolvePath(t.cwd,e.directory);await t.fs.mkdir(a,{recursive:!0});let o=[],s=[],c=[],l=[];for(let e of i){let n=cL(t,a,e.path);if(!n)return XI(`blocked suspicious path ${e.path}`);await dL(t,n,e,c,s),e.mtime!==void 0&&l.push([n,e.mtime]),o.push(e.path)}return await uL(t,[...pL(s),...pL(c)],pL(l),n),{stdout:e.verbose?`${o.join(`
2192
- `)}\n`:``,stderr:``,exitCode:0}}function hL(e={}){return S(`tar`,async(t,n)=>{if(t.length===0||t.includes(`--help`)||t.includes(`-h`))return YI();let r=rL(t);return`exitCode`in r?r:r.mode?r.archive?r.mode===`list`&&r.directory!==`.`?XI(`-C is only supported in create or extract mode`):r.mode===`create`?fL(r,n):mL(r,n,e.fs):XI(`option -f requires an archive path`):XI(`exactly one of -c, -x, or -t is required`)})}var gL=`/**
2205
+ `,exitCode:1};let a=um(e[0],e.slice(1)),o=i.env?.get(mm),s=await t.requestApproval({kind:`command`,detail:a,...o?{reason:o}:{}});if(s.decision===`deny`)return II(s);if(s.decision===`always`){let e=s.pattern?.trim()||a;if(n)try{await n(e)}catch{}}return r&&r(a),i.exec(e[0],{cwd:i.cwd,args:e.slice(1)})})}function RI(e){let t=e instanceof Error?e.message:String(e);return/ENOENT|no such file/i.test(t)?`No such file or directory`:/ENOTEMPTY|not empty/i.test(t)?`Directory not empty`:t.replace(/^\w+:\s*/,``)}async function zI(e,t){return e.fs.lstat?e.fs.lstat(t):e.fs.stat(t)}function BI(e,t){return e.some(e=>/^-[^-]/.test(e)&&e.slice(1).includes(t))}async function VI(e,t,n){let r=e.fs.resolvePath(e.cwd,t);try{let i=await zI(e,r);return i.isDirectory&&!i.isSymbolicLink&&!n.recursive?{stdout:``,stderr:`rm: cannot remove '${t}': Is a directory\n`}:(await e.fs.rm(r,{recursive:n.recursive,force:n.force}),{stdout:n.verbose?`removed '${t}'\n`:``,stderr:``})}catch(e){return{stdout:``,stderr:n.force?``:`rm: cannot remove '${t}': ${RI(e)}\n`}}}function HI(){return S(`rm`,async(e,t)=>{let n={recursive:BI(e,`r`)||BI(e,`R`)||e.includes(`--recursive`),force:BI(e,`f`)||e.includes(`--force`),verbose:BI(e,`v`)||e.includes(`--verbose`)},r=e.filter(e=>!e.startsWith(`-`));if(r.length===0)return n.force?{stdout:``,stderr:``,exitCode:0}:{stdout:``,stderr:`rm: missing operand
2206
+ `,exitCode:1};let i=await Promise.all(r.map(e=>VI(t,e,n))),a=i.map(e=>e.stdout).join(``),o=i.map(e=>e.stderr).join(``);return{stdout:a,stderr:o,exitCode:+!!o}})}function UI(e,t,n){let r=n.isSymbolicLink?`symbolic link`:n.isDirectory?`directory`:`regular file`;return e.replace(/%n/g,t).replace(/%N/g,`'${t}'`).replace(/%s/g,String(n.size)).replace(/%F/g,r).replace(/%a/g,n.mode.toString(8))}function WI(e){let t={follow:!1,paths:[]};for(let n=0;n<e.length;n++){let r=e[n];r===`-L`||r===`--dereference`?t.follow=!0:r===`-c`&&e[n+1]?t.format=e[++n]:r.startsWith(`--format=`)?t.format=r.slice(9):r.startsWith(`-`)||t.paths.push(r)}return t}async function GI(e,t,n){try{let r=e.fs.resolvePath(e.cwd,t),i=n.follow?await e.fs.stat(r):await zI(e,r);return{stdout:n.format?`${UI(n.format,t,i)}\n`:` File: ${t}\n Size: ${i.size}\n`,stderr:``}}catch{return{stdout:``,stderr:`stat: cannot stat '${t}': No such file or directory\n`}}}function KI(){return S(`stat`,async(e,t)=>{let n=WI(e);if(n.paths.length===0)return{stdout:``,stderr:`stat: missing operand
2207
+ `,exitCode:1};let r=await Promise.all(n.paths.map(e=>GI(t,e,n))),i=r.map(e=>e.stdout).join(``),a=r.map(e=>e.stderr).join(``);return{stdout:i,stderr:a,exitCode:+!!a}})}function qI(e){let t=e.replace(/\/+$/,``),n=t.lastIndexOf(`/`);return n<=0?`/`:t.slice(0,n)}async function JI(e,t,n,r){let i=e.fs.resolvePath(`/`,t).split(`/`).filter(Boolean),a=e.fs.resolvePath(e.cwd,t),o=``;for(let s=0;s<i.length;s++){try{let t=await zI(e,a);if(!t.isDirectory||t.isSymbolicLink)throw Error(`Not a directory`);await e.fs.rm(a,{recursive:!1,force:!1}),r&&(o+=`rmdir: removing directory, '${a}'\n`)}catch(e){return{stdout:o,stderr:`rmdir: failed to remove '${t}': ${RI(e)}\n`}}if(!n||s===i.length-1)return{stdout:o,stderr:``};a=qI(a)}return{stdout:o,stderr:``}}function YI(){return S(`rmdir`,async(e,t)=>{let n=e.some(e=>e===`-p`||e===`--parents`),r=e.some(e=>e===`-v`||e===`--verbose`),i=e.filter(e=>!e.startsWith(`-`));if(i.length===0)return{stdout:``,stderr:`rmdir: missing operand
2208
+ `,exitCode:1};let a=await Promise.all(i.map(e=>JI(t,e,n,r))),o=a.map(e=>e.stdout).join(``),s=a.map(e=>e.stderr).join(``);return{stdout:o,stderr:s,exitCode:+!!s}})}function XI(){return{stdout:`usage: tar (-c|-x|-t) [-zv] -f <archive> [-C <dir>] [paths...]
2209
+ `,stderr:``,exitCode:0}}function ZI(e){return{stdout:``,stderr:`tar: ${e}\n`,exitCode:1}}function QI(e,t){if(e.mode)return ZI(`exactly one of -c, -x, or -t is required`);e.mode=t}function $I(e,t,n){if(n)return[n,t];let r=e[t+1];return r===void 0?void 0:[r,t+1]}const eL={c:`create`,x:`extract`,t:`list`};function tL(e,t,n,r,i){let a=eL[e];if(a)return{nextIndex:r,error:QI(i,a)};if(e===`z`)return i.gzip=!0,{nextIndex:r};if(e===`v`)return i.verbose=!0,{nextIndex:r};if(e!==`f`&&e!==`C`)return{nextIndex:r,error:ZI(`unsupported option -${e}`)};let o=$I(n,r,t);return o?(e===`f`?i.archive=o[0]:i.directory=o[0],{nextIndex:o[1],consumedValue:!0}):{nextIndex:r,error:ZI(`option -${e} requires an argument`)}}function nL(e,t,n){let r=e[t];for(let i=1;i<r.length;i++){let a=tL(r[i],r.slice(i+1),e,t,n);if(a.error||a.consumedValue)return a}return{nextIndex:t}}const rL=/^[cxtzvfC]+$/;function iL(e){let t=e.length>0&&rL.test(e[0])?[`-${e[0]}`,...e.slice(1)]:e,n={gzip:!1,verbose:!1,directory:`.`,paths:[]};for(let e=0;e<t.length;e++){let r=t[e];if(!r.startsWith(`-`)||r===`-`){n.paths.push(r);continue}if(r.startsWith(`--`))return ZI(`unsupported option ${r}`);let i=nL(t,e,n);if(i.error)return i.error;e=i.nextIndex}return n}function aL(e,t){let n=e.replace(/\\/g,`/`).replace(/^\/+/,``).replace(/^(?:\.\/)+/,``);return n?n===`.`?`.`:n.replace(/\/+$/,``):mr(t)}function oL(e){let t=e.mtime?.getTime();return t===void 0||Number.isNaN(t)?{}:{mtime:Math.floor(t/1e3)}}async function sL(e,t,n,r){let i=await e.fs.stat(t);if(i.isFile){let a=await e.fs.readFileBuffer(t),o=typeof i.mode==`number`?i.mode&511:void 0;r.push({path:n,bytes:a,...o===void 0?{}:{mode:o},...oL(i)});return}if(!i.isDirectory)throw Error(`unsupported file type: ${t}`);let a=n.endsWith(`/`)?n:`${n}/`,o=typeof i.mode==`number`?i.mode&511:void 0;r.push({path:a,bytes:new Uint8Array,directory:!0,...o===void 0?{}:{mode:o},...oL(i)});for(let n of await e.fs.readdir(t))await sL(e,pr(t,n),`${a}${n}`,r)}function cL(e,t){let n=e.length>=2&&e[0]===31&&e[1]===139,r=t||n?ca(e):e;return sa(r,{stripNpmPrefix:!1,includeDirectories:!0,preserveRawPaths:!0})}function lL(e,t,n){let r=n.replace(/\\/g,`/`);if(!r||r.startsWith(`/`)||/^[a-zA-Z]:\//.test(r)||r.split(`/`).includes(`..`))return;let i=e.fs.resolvePath(t,r);return xr(t,i)?i:void 0}async function uL(e){try{await e()}catch(e){let t=e?.code;if(t===`ENOSYS`||t===`ENOTSUP`||t===`EOPNOTSUPP`)return;throw e}}async function dL(e,t,n,r){let i=new Map(t),a=new Map(n),o=[...new Set([...i.keys(),...a.keys()])];if(o.length===0)return;let s=o.map(e=>{let t=i.get(e),n=a.get(e),r=n===void 0?void 0:new Date(n*1e3);return{path:e,...t===void 0?{}:{mode:t},...r===void 0?{}:{atime:r,mtime:r}}});if(typeof r?.updateMetadataBatch==`function`){await uL(()=>r.updateMetadataBatch(s));return}let c=e.fs;if(typeof c.updateMetadataBatch==`function`){await uL(()=>c.updateMetadataBatch(s));return}for(let[e,n]of t)await uL(()=>c.chmod(e,n));for(let[e,t]of n){let n=new Date(t*1e3);await uL(()=>c.utimes(e,n,n))}}async function fL(e,t,n,r,i){let a=n.directory?493:420,o=n.mode===a&&await e.fs.exists(t),s=n.mode!==void 0&&(n.mode!==a||o);if(n.directory){await e.fs.mkdir(t,{recursive:!0}),s&&r.push([t,n.mode]);return}let c=vr(t);c!==`/`&&await e.fs.mkdir(c,{recursive:!0}),await e.fs.writeFile(t,n.bytes),s&&i.push([t,n.mode])}async function pL(e,t){if(e.paths.length===0)return ZI(`create mode requires at least one input path`);let n=[],r=t.fs.resolvePath(t.cwd,e.directory);for(let i of e.paths){let e=t.fs.resolvePath(r,i);await sL(t,e,aL(i,e),n)}let i=t.fs.resolvePath(t.cwd,e.archive),a=aa(n);return await t.fs.writeFile(i,e.gzip?oa(a):a),{stdout:e.verbose?`${n.map(e=>e.path).join(`
2210
+ `)}\n`:``,stderr:``,exitCode:0}}function mL(e){let t=new Set,n=[];for(let r=e.length-1;r>=0;r--){let[i,a]=e[r];t.has(i)||(t.add(i),n.push([i,a]))}return n}async function hL(e,t,n){if(e.paths.length>0)return ZI(`${e.mode} mode does not accept input paths`);let r=t.fs.resolvePath(t.cwd,e.archive),i=cL(await t.fs.readFileBuffer(r),e.gzip);if(e.mode===`list`){let e=i.map(e=>e.path).join(`
2211
+ `);return{stdout:e?`${e}\n`:``,stderr:``,exitCode:0}}let a=t.fs.resolvePath(t.cwd,e.directory);await t.fs.mkdir(a,{recursive:!0});let o=[],s=[],c=[],l=[];for(let e of i){let n=lL(t,a,e.path);if(!n)return ZI(`blocked suspicious path ${e.path}`);await fL(t,n,e,c,s),e.mtime!==void 0&&l.push([n,e.mtime]),o.push(e.path)}return await dL(t,[...mL(s),...mL(c)],mL(l),n),{stdout:e.verbose?`${o.join(`
2212
+ `)}\n`:``,stderr:``,exitCode:0}}function gL(e={}){return S(`tar`,async(t,n)=>{if(t.length===0||t.includes(`--help`)||t.includes(`-h`))return XI();let r=iL(t);return`exitCode`in r?r:r.mode?r.archive?r.mode===`list`&&r.directory!==`.`?ZI(`-C is only supported in create or extract mode`):r.mode===`create`?pL(r,n):hL(r,n,e.fs):ZI(`option -f requires an archive path`):ZI(`exactly one of -c, -x, or -t is required`)})}var _L=`/**
2193
2213
  * Standalone assertions - no dependency on test runner
2194
2214
  *
2195
2215
  * Each assertion:
@@ -2377,7 +2397,7 @@ function sameMembers(a, b) {
2377
2397
  }
2378
2398
 
2379
2399
  const slice = a => (isPrimitive(a) ? a : a.slice ? a.slice() : Object.assign({}, a))
2380
- `,_L=`/**
2400
+ `,vL=`/**
2381
2401
  * tst - minimal test runner
2382
2402
  *
2383
2403
  * - Standalone assertions (assert.js works anywhere)
@@ -3007,7 +3027,7 @@ function scheduleAutoRun() {
3007
3027
  scheduleAutoRun()
3008
3028
 
3009
3029
  export * from './assert.js'
3010
- `;function vL(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 yL=`tsc - thin wrapper over the ipk-loaded TypeScript 6 package
3030
+ `;function yL(e){return{reader:{exists:t=>e.fs.exists(t),isDirectory:async t=>{try{return(await e.fs.stat(t)).isDirectory}catch{return!1}},readFile:t=>e.fs.readFile(t)},readBytes:t=>e.fs.readFileBuffer(t),fromDir:e.cwd}}const bL=`tsc - thin wrapper over the ipk-loaded TypeScript 6 package
3011
3031
 
3012
3032
  Usage:
3013
3033
  tsc [options] [files...]
@@ -3031,28 +3051,28 @@ Install:
3031
3051
  Then \`tsc --version\` and the transpile commands above. There is no
3032
3052
  bundled binary, no CDN fallback; a missing package exits non-zero
3033
3053
  with a clear \`ipk add\` hint.
3034
- `;function bL(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 xL(e,t){let n=`${mr(e).replace(/\.(ts|tsx|mts|cts)$/i,``)}.js`;return t?`${t.endsWith(`/`)?t.slice(0,-1):t}/${n}`:`${vr(e)}/${n}`}async function SL(e,t){let n=t||`/`,r=``;for(;n&&n!==r;){let t=n===`/`?`/tsconfig.json`:`${n}/tsconfig.json`;if(await e.exists(t))return t;r=n,n=vr(n)}return null}function CL(e){return{target:e.ScriptTarget.ES2022,module:e.ModuleKind.ESNext,moduleResolution:e.ModuleResolutionKind.Bundler,esModuleInterop:!0,allowSyntheticDefaultImports:!0,isolatedModules:!0}}function wL(e){if(typeof e!=`object`||!e)return{};let{compilerOptions:t}=e;return t??{}}async function TL(e,t,n){let r=CL(t),i=await SL(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,...wL(o)}}}function EL(e,t){let n=e.flattenDiagnosticMessageText(t.messageText,`
3035
- `);if(t.file&&typeof t.start==`number`){let{line:e,character:r}=t.file.getLineAndCharacterOfPosition(t.start);return`${t.file.fileName}(${e+1},${r+1}): error TS${t.code}: ${n}`}return`error TS${t.code}: ${n}`}function DL(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 OL(e,t,n,r,i){let a=e.transpileModule(t,{compilerOptions:r,fileName:n,reportDiagnostics:i});return{outputText:a.outputText,diagnostics:a.diagnostics??[]}}function kL(e,t,n,r){let{outputText:i,diagnostics:a}=OL(e,r,`<stdin>.ts`,n.compilerOptions,!0),o=a.map(t=>EL(e,t)),s=o.length>0?`${o.join(`
3036
- `)}\n`:``;return{stdout:t.noEmit?``:i,stderr:s,exitCode:+(a.length>0)}}async function AL(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}}DL(e,a);let{outputText:s,diagnostics:c}=OL(e,o,a,i.compilerOptions,!0),l=[];for(let t of c)l.push(`${EL(e,t)}\n`);let u=c.length>0;if(r.noEmit)return{stderr:l.join(``),hadError:u};let d=t.fs.resolvePath(t.cwd,xL(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 jL(e,t){let n;try{n=bL(e)}catch(e){return{done:{stdout:``,stderr:`${e instanceof Error?e.message:String(e)}\n`,exitCode:2}}}if(n.showHelp)return{done:{stdout:yL,stderr:``,exitCode:0}};let r;try{r=await dr(vL(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 ML(){return S(`tsc`,async(e,t)=>{let n=await jL(e,t);if(`done`in n)return n.done;let{parsed:r,ts:i}=n,a=await TL(t.fs,i,t.cwd);if(r.files.length===0){let e=P(t.stdin);return e?kL(i,r,a,e):{stdout:yL,stderr:``,exitCode:0}}let o=[],s=!1;for(let e of r.files){let n=await AL(i,t,e,r,a);n.stderr&&o.push(n.stderr),n.hadError&&(s=!0)}return{stdout:``,stderr:o.join(``),exitCode:+!!s}})}const NL=[`**/*.test.{js,ts}`];function PL(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 FL(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 IL(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=PL(s,e[o+1]);if(c){n=c.reporter,c.consumed===2&&(o+=1);continue}let l=FL(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:[...NL],reporter:n,showHelp:r,coverage:i,coverageDir:a}}function LL(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 LL(`${r}${e}${i}`))o.push(t);return o}function RL(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 zL(e,t,n){let r=n.flatMap(LL).map(RL),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 BL=null;async function VL(e){if(BL)return BL;let t={module:e.ModuleKind.CommonJS,target:e.ScriptTarget.ES2022,esModuleInterop:!0,isolatedModules:!1};return BL=`
3054
+ `;function xL(e){let t=[],n=!1,r=null,i=!1,a=!1;for(let o=0;o<e.length;o++){let s=e[o];if(s===`-h`||s===`--help`){i=!0;continue}if(s===`-v`||s===`--version`){a=!0;continue}if(s===`--noEmit`){n=!0;continue}if(s===`--outDir`){let t=e[o+1];if(typeof t!=`string`||t.startsWith(`-`))throw Error(`tsc: --outDir requires a value`);r=t,o+=1;continue}if(s.startsWith(`--outDir=`)){r=s.slice(9);continue}if(s.startsWith(`-`))throw Error(`tsc: unknown option: ${s}`);t.push(s)}return{files:t,noEmit:n,outDir:r,showHelp:i,showVersion:a}}function SL(e,t){let n=`${mr(e).replace(/\.(ts|tsx|mts|cts)$/i,``)}.js`;return t?`${t.endsWith(`/`)?t.slice(0,-1):t}/${n}`:`${vr(e)}/${n}`}async function CL(e,t){let n=t||`/`,r=``;for(;n&&n!==r;){let t=n===`/`?`/tsconfig.json`:`${n}/tsconfig.json`;if(await e.exists(t))return t;r=n,n=vr(n)}return null}function wL(e){return{target:e.ScriptTarget.ES2022,module:e.ModuleKind.ESNext,moduleResolution:e.ModuleResolutionKind.Bundler,esModuleInterop:!0,allowSyntheticDefaultImports:!0,isolatedModules:!0}}function TL(e){if(typeof e!=`object`||!e)return{};let{compilerOptions:t}=e;return t??{}}async function EL(e,t,n){let r=wL(t),i=await CL(e,n);if(!i)return{compilerOptions:{...r}};let a;try{a=await e.readFile(i)}catch{return{compilerOptions:{...r}}}let{config:o,error:s}=t.parseConfigFileTextToJson(i,a);return s||!o?{compilerOptions:{...r}}:{compilerOptions:{...r,...TL(o)}}}function DL(e,t){let n=e.flattenDiagnosticMessageText(t.messageText,`
3055
+ `);if(t.file&&typeof t.start==`number`){let{line:e,character:r}=t.file.getLineAndCharacterOfPosition(t.start);return`${t.file.fileName}(${e+1},${r+1}): error TS${t.code}: ${n}`}return`error TS${t.code}: ${n}`}function OL(e,t){let n=t.toLowerCase();return n.endsWith(`.tsx`)?e.ScriptKind.TSX:n.endsWith(`.jsx`)?e.ScriptKind.JSX:n.endsWith(`.js`)||n.endsWith(`.mjs`)||n.endsWith(`.cjs`)?e.ScriptKind.JS:e.ScriptKind.TS}function kL(e,t,n,r,i){let a=e.transpileModule(t,{compilerOptions:r,fileName:n,reportDiagnostics:i});return{outputText:a.outputText,diagnostics:a.diagnostics??[]}}function AL(e,t,n,r){let{outputText:i,diagnostics:a}=kL(e,r,`<stdin>.ts`,n.compilerOptions,!0),o=a.map(t=>DL(e,t)),s=o.length>0?`${o.join(`
3056
+ `)}\n`:``;return{stdout:t.noEmit?``:i,stderr:s,exitCode:+(a.length>0)}}async function jL(e,t,n,r,i){let a=t.fs.resolvePath(t.cwd,n);if(!await t.fs.exists(a))return{stderr:`tsc: ${n}: no such file\n`,hadError:!0};let o;try{o=await t.fs.readFile(a)}catch(e){return{stderr:`tsc: ${n}: ${e instanceof Error?e.message:String(e)}\n`,hadError:!0}}OL(e,a);let{outputText:s,diagnostics:c}=kL(e,o,a,i.compilerOptions,!0),l=[];for(let t of c)l.push(`${DL(e,t)}\n`);let u=c.length>0;if(r.noEmit)return{stderr:l.join(``),hadError:u};let d=t.fs.resolvePath(t.cwd,SL(a,r.outDir));try{await t.fs.writeFile(d,s)}catch(e){l.push(`tsc: ${d}: ${e instanceof Error?e.message:String(e)}\n`),u=!0}return{stderr:l.join(``),hadError:u}}async function ML(e,t){let n;try{n=xL(e)}catch(e){return{done:{stdout:``,stderr:`${e instanceof Error?e.message:String(e)}\n`,exitCode:2}}}if(n.showHelp)return{done:{stdout:bL,stderr:``,exitCode:0}};let r;try{r=await dr(yL(t))}catch(e){return{done:{stdout:``,stderr:`tsc: ${e instanceof Error?e.message:String(e)}\n`,exitCode:1}}}return n.showVersion?{done:{stdout:`Version ${r.version}\n`,stderr:``,exitCode:0}}:{parsed:n,ts:r}}function NL(){return S(`tsc`,async(e,t)=>{let n=await ML(e,t);if(`done`in n)return n.done;let{parsed:r,ts:i}=n,a=await EL(t.fs,i,t.cwd);if(r.files.length===0){let e=P(t.stdin);return e?AL(i,r,a,e):{stdout:bL,stderr:``,exitCode:0}}let o=[],s=!1;for(let e of r.files){let n=await jL(i,t,e,r,a);n.stderr&&o.push(n.stderr),n.hadError&&(s=!0)}return{stdout:``,stderr:o.join(``),exitCode:+!!s}})}const PL=[`**/*.test.{js,ts}`];function FL(e,t){let n,r=1;if(e===`--reporter`)n=t,r=2;else if(e.startsWith(`--reporter=`))n=e.slice(11);else return null;if(n!==`tap`&&n!==`spec`)throw Error(`tst: --reporter must be tap or spec`);return{reporter:n,consumed:r}}function IL(e,t){return e===`--coverage`?{consumed:1}:e===`--coverage-dir`&&t!==void 0?{coverageDir:t,consumed:2}:e.startsWith(`--coverage-dir=`)?{coverageDir:e.slice(15),consumed:1}:null}function LL(e){let t=[],n=`tap`,r=!1,i=!1,a=``;for(let o=0;o<e.length;o++){let s=e[o];if(s===`-h`||s===`--help`){r=!0;continue}let c=FL(s,e[o+1]);if(c){n=c.reporter,c.consumed===2&&(o+=1);continue}let l=IL(s,e[o+1]);if(l){i=!0,l.coverageDir!==void 0&&(a=l.coverageDir),l.consumed===2&&(o+=1);continue}if(s.startsWith(`-`))throw Error(`tst: unknown option: ${s}`);t.push(s)}return{globs:t.length>0?t:[...PL],reporter:n,showHelp:r,coverage:i,coverageDir:a}}function RL(e){let t=e.indexOf(`{`);if(t===-1)return[e];let n=e.indexOf(`}`,t);if(n===-1)return[e];let r=e.slice(0,t),i=e.slice(n+1),a=e.slice(t+1,n).split(`,`),o=[];for(let e of a)for(let t of RL(`${r}${e}${i}`))o.push(t);return o}function zL(e){let t=``,n=0;for(;n<e.length;){let r=e[n];r===`*`&&e[n+1]===`*`?(t+=`(?:.*/)?`,n+=2,e[n]===`/`&&(n+=1)):r===`*`?(t+=`[^/]*`,n+=1):r===`?`?(t+=`[^/]`,n+=1):`.+^$()[]|\\`.includes(r)?(t+=`\\${r}`,n+=1):(t+=r,n+=1)}return RegExp(`^${t}$`)}async function BL(e,t,n){let r=n.flatMap(RL).map(zL),i=new Set,a=t===`/`?``:t;async function o(t){let n;try{n=await e.readdir(t)}catch{return}for(let s of n){if(s===`node_modules`||s.startsWith(`.`))continue;let n=t===`/`?`/${s}`:`${t}/${s}`,c=!1;try{c=(await e.stat(n)).isDirectory}catch{continue}if(c){await o(n);continue}let l=n.startsWith(`${a}/`)?n.slice(a.length+1):n;r.some(e=>e.test(l))&&i.add(n)}}return await o(t),[...i].sort()}let VL=null;async function HL(e){if(VL)return VL;let t={module:e.ModuleKind.CommonJS,target:e.ScriptTarget.ES2022,esModuleInterop:!0,isolatedModules:!1};return VL=`
3037
3057
  if (typeof process !== 'undefined' && !process.versions) {
3038
3058
  try { process.versions = { node: '20.0.0' }; } catch (_) { /* readonly process.versions is fine */ }
3039
3059
  }
3040
3060
  const __tst_assert_exports = (function () {
3041
3061
  const module = { exports: {} };
3042
3062
  const exports = module.exports;
3043
- ${e.transpileModule(gL,{compilerOptions:t,fileName:`assert.js`}).outputText}
3063
+ ${e.transpileModule(_L,{compilerOptions:t,fileName:`assert.js`}).outputText}
3044
3064
  return module.exports;
3045
3065
  })();
3046
3066
  const __tst_module_exports = (function () {
3047
3067
  const module = { exports: {} };
3048
3068
  const exports = module.exports;
3049
- ${e.transpileModule(_L,{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"))`)}
3069
+ ${e.transpileModule(vL,{compilerOptions:t,fileName:`tst.js`}).outputText.replace(/require\(["']\.\/assert\.js["']\)/g,`__tst_assert_exports`).replace(/\bimport\.meta\b/g,`({url:""})`).replace(/await\s+import\(['"](?:worker_threads|fs|path)['"]\)/g,`await Promise.reject(new Error("tst: fork mode is not supported in the realm"))`)}
3050
3070
  return module.exports;
3051
3071
  })();
3052
3072
  const __tst = __tst_module_exports.default || __tst_module_exports;
3053
3073
  __tst.manual = true;
3054
- `.trim(),BL}function HL(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 UL(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 WL(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 GL(e,t,n,r,i,a){let o=new Map,s=new Map,c=[{path:n,cjs:r}];for(;c.length>0;){let{path:n,cjs:r}=c.shift(),l=vr(n),u=new Map;for(let n of UL(r)){if(!n.startsWith(`./`)&&!n.startsWith(`../`))continue;let r=await WL(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 KL(e,t,n,r,i,a,o=``,s=``){let c=r===`spec`?`pretty`:`tap`,l=[];for(let[e,t]of i.entries()){let n=HL(t,a.get(e)??new Map);l.push(`${JSON.stringify(e)}: function (module, exports, require) {\n${n}\n}`)}let u=`{${l.join(`,
3055
- `)}}`,d=HL(n,a.get(t)??new Map),f=o,p=s;return`"use strict";
3074
+ `.trim(),VL}function UL(e,t=new Map){return e.replace(/(^|[^\w$.])require\(\s*(["'`])([^"'`]+)\2\s*\)/g,(e,n,r,i)=>i===`tst`||i===`tst/tst.js`?`${n}__tstReq("tst")`:i===`tst/assert`||i===`tst/assert.js`?`${n}__tstReq("tst/assert")`:t.has(i)?`${n}__localReq(${JSON.stringify(t.get(i))})`:e)}function WL(e){let t=new Set,n=/(?:^|[^\w$.])require\(\s*(["'`])([^"'`]+)\1\s*\)/g,r;for(;(r=n.exec(e))!==null;)t.add(r[2]);return[...t]}async function GL(e,t,n){let r=b(`${t}/${n}`),i=[r];r.endsWith(`.js`)&&i.push(`${r.slice(0,-3)}.ts`),/\.[a-zA-Z0-9]+$/.test(r)||i.push(`${r}.ts`,`${r}.js`);for(let t of i)if(await e.exists(t))return t;return null}async function KL(e,t,n,r,i,a){let o=new Map,s=new Map,c=[{path:n,cjs:r}];for(;c.length>0;){let{path:n,cjs:r}=c.shift(),l=vr(n),u=new Map;for(let n of WL(r)){if(!n.startsWith(`./`)&&!n.startsWith(`../`))continue;let r=await GL(e,l,n);if(!r||(u.set(n,r),o.has(r)))continue;let s=await e.readFile(r);a&&(s=a(s,r));let d=t.transpileModule(s,{compilerOptions:i,fileName:r}).outputText;o.set(r,d),c.push({path:r,cjs:d})}s.set(n,u)}return{modules:o,edgeRewrites:s}}function qL(e,t,n,r,i,a,o=``,s=``){let c=r===`spec`?`pretty`:`tap`,l=[];for(let[e,t]of i.entries()){let n=UL(t,a.get(e)??new Map);l.push(`${JSON.stringify(e)}: function (module, exports, require) {\n${n}\n}`)}let u=`{${l.join(`,
3075
+ `)}}`,d=UL(n,a.get(t)??new Map),f=o,p=s;return`"use strict";
3056
3076
  ${f}${e}
3057
3077
  const __realmRequire = require;
3058
3078
  const { createRequire: __createRequire } = __realmRequire("module");
@@ -3095,7 +3115,7 @@ await Promise.resolve();
3095
3115
  await new Promise((resolve) => setTimeout(resolve));
3096
3116
  ${p}
3097
3117
  if (__state && __state.failed && __state.failed.length > 0) process.exit(1);
3098
- `}const qL={esModuleInterop:!0,allowJs:!0,isolatedModules:!1};function JL(e){return{module:e.ModuleKind.CommonJS,target:e.ScriptTarget.ES2022,...qL}}async function YL(e,t){let n;try{n=IL(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
3118
+ `}const JL={esModuleInterop:!0,allowJs:!0,isolatedModules:!1};function YL(e){return{module:e.ModuleKind.CommonJS,target:e.ScriptTarget.ES2022,...JL}}async function XL(e,t){let n;try{n=LL(e)}catch(e){return{done:{stdout:``,stderr:`${e instanceof Error?e.message:String(e)}\n`,exitCode:2}}}if(n.showHelp)return{done:{stdout:`tst - run *.test.{js,ts} files with the bundled tst runner
3099
3119
 
3100
3120
  Usage:
3101
3121
  tst [options] [glob...]
@@ -3117,7 +3137,7 @@ Notes:
3117
3137
  with statement counters. nyc/c8 cannot wrap this runner: it is not a
3118
3138
  Node child. Istanbul/Babel are not bundled (webapp size-limit); the
3119
3139
  TypeScript AST already in process does the rewrite.
3120
- `,stderr:``,exitCode:0}};let r=await zL(t.fs,t.cwd,n.globs);if(r.length===0)return{done:{stdout:``,stderr:`tst: no test files matched ${n.globs.join(` `)}\n`,exitCode:1}};let i;try{i=await dr(vL(t))}catch(e){return{done:{stdout:``,stderr:`tst: ${e instanceof Error?e.message:String(e)}\n`,exitCode:1}}}let a=await VL(i),o=n.coverage?await import(`./coverage-instrument-CjoHgKzK.js`):null;return{parsed:n,files:r,ts:i,harness:a,userOpts:JL(i),coverageMaps:{},coverageCounts:{},coverageMod:o}}function XL(e){return e.includes(`# fail `)||/(^|\n)not ok /.test(e)}async function ZL(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 GL(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=KL(a,n,d,s.reporter,f,p,c?`${c.coverageRuntimeSource()}\n`:``,c?`\n${c.coverageDumpSource()}`:``),h=await ti(m,[`node`,n],e,void 0,{filename:n}),g=h.stdout;if(c){let e=c.extractCoverageCounts(g);g=e.stdout,c.mergeCounts(t.coverageCounts,e.counts)}return{stdout:r?`# ${n}\n${g}`:g,stderr:h.stderr,failed:h.exitCode!==0||XL(g)}}function QL(){return S(`tst`,async(e,t)=>{let n=await YL(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 ZL(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 $L=[],eR=`usage: theme <subcommand> [args]
3140
+ `,stderr:``,exitCode:0}};let r=await BL(t.fs,t.cwd,n.globs);if(r.length===0)return{done:{stdout:``,stderr:`tst: no test files matched ${n.globs.join(` `)}\n`,exitCode:1}};let i;try{i=await dr(yL(t))}catch(e){return{done:{stdout:``,stderr:`tst: ${e instanceof Error?e.message:String(e)}\n`,exitCode:1}}}let a=await HL(i),o=n.coverage?await import(`./coverage-instrument-CjoHgKzK.js`):null;return{parsed:n,files:r,ts:i,harness:a,userOpts:YL(i),coverageMaps:{},coverageCounts:{},coverageMod:o}}function ZL(e){return e.includes(`# fail `)||/(^|\n)not ok /.test(e)}async function QL(e,t,n,r){let{ts:i,harness:a,userOpts:o,parsed:s}=t,c=t.coverageMod,l=c?(e,n)=>{let{source:r,map:a}=c.instrumentSource(i,e,n);return t.coverageMaps[n]=a,r}:void 0,u;try{u=await e.fs.readFile(n)}catch(e){return{stdout:``,stderr:`tst: ${n}: ${e instanceof Error?e.message:String(e)}\n`,failed:!0}}l&&(u=l(u,n));let d;try{d=i.transpileModule(u,{compilerOptions:o,fileName:n}).outputText}catch(e){return{stdout:``,stderr:`tst: ${n}: transpile error: ${e instanceof Error?e.message:String(e)}\n`,failed:!0}}let f,p;try{({modules:f,edgeRewrites:p}=await KL(e.fs,i,n,d,o,l))}catch(e){return{stdout:``,stderr:`tst: ${n}: local-require resolve error: ${e instanceof Error?e.message:String(e)}\n`,failed:!0}}let m=qL(a,n,d,s.reporter,f,p,c?`${c.coverageRuntimeSource()}\n`:``,c?`\n${c.coverageDumpSource()}`:``),h=await ti(m,[`node`,n],e,void 0,{filename:n}),g=h.stdout;if(c){let e=c.extractCoverageCounts(g);g=e.stdout,c.mergeCounts(t.coverageCounts,e.counts)}return{stdout:r?`# ${n}\n${g}`:g,stderr:h.stderr,failed:h.exitCode!==0||ZL(g)}}function $L(){return S(`tst`,async(e,t)=>{let n=await XL(e,t);if(`done`in n)return n.done;let r=n.files.length>1,i=``,a=``,o=!1;for(let e of n.files){let s=await QL(t,n,e,r);i+=s.stdout,a+=s.stderr,s.failed&&(o=!0)}if(n.coverageMod){let e=n.coverageMod.resolveCoverageDir(t.cwd,n.parsed.coverageDir,(e,n)=>t.fs.resolvePath(e,n)),r=JSON.stringify({counts:n.coverageCounts,maps:n.coverageMaps},null,2),s=n.coverageMod.toLcov(n.coverageCounts,n.coverageMaps),c=n.coverageMod.coverageSummary(n.coverageCounts,n.coverageMaps);try{await t.fs.writeFile(`${e}/coverage.json`,r),await t.fs.writeFile(`${e}/coverage.lcov`,s)}catch(t){a+=`tst: writing coverage to ${e}: ${t instanceof Error?t.message:String(t)}\n`,o=!0}i+=`\n${c}`}return{stdout:i,stderr:a,exitCode:+!!o}})}const eR=[],tR=`usage: theme <subcommand> [args]
3121
3141
 
3122
3142
  Subcommands:
3123
3143
  list List available preset and custom themes
@@ -3126,23 +3146,23 @@ Subcommands:
3126
3146
  reset Reset to the default theme
3127
3147
  current Show the currently active theme
3128
3148
  export <id> <path> Export a theme to a VFS path
3129
- `;function tR(e,t){return{stdout:``,stderr:`theme ${e}: ${t}\n`,exitCode:1}}function nR(){return S(`theme`,async(e,t)=>{if(e.length===0||e[0]===`--help`||e[0]===`-h`)return{stdout:eR,stderr:``,exitCode:0};let n=e[0];return w(e.slice(1),{valueFlags:$L})?{stdout:st(`theme`,n,eR),stderr:``,exitCode:0}:n===`list`?rR(e):n===`current`?iR(e):n===`reset`?aR(e):n===`apply`?oR(e.slice(1),t):n===`export`?sR(e.slice(1),t):{stdout:``,stderr:`theme: unknown subcommand "${n}"\n${eR}`,exitCode:1}})}async function rR(e){let t=C(e.slice(1),{value:$L});if(`error`in t)return tR(`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(`
3130
- `),stderr:``,exitCode:0}}async function iR(e){let t=C(e.slice(1),{value:$L});return`error`in t?tR(`current`,t.error):{stdout:`Check the Theme settings dialog for the active theme.
3131
- `,stderr:``,exitCode:0}}async function aR(e){let t=C(e.slice(1),{value:$L});if(`error`in t)return tR(`reset`,t.error);let n=y();return n?(await n.call(`theme-apply`,{action:`reset`}),{stdout:`Theme reset to default.
3149
+ `;function nR(e,t){return{stdout:``,stderr:`theme ${e}: ${t}\n`,exitCode:1}}function rR(){return S(`theme`,async(e,t)=>{if(e.length===0||e[0]===`--help`||e[0]===`-h`)return{stdout:tR,stderr:``,exitCode:0};let n=e[0];return w(e.slice(1),{valueFlags:eR})?{stdout:st(`theme`,n,tR),stderr:``,exitCode:0}:n===`list`?iR(e):n===`current`?aR(e):n===`reset`?oR(e):n===`apply`?sR(e.slice(1),t):n===`export`?cR(e.slice(1),t):{stdout:``,stderr:`theme: unknown subcommand "${n}"\n${tR}`,exitCode:1}})}async function iR(e){let t=C(e.slice(1),{value:eR});if(`error`in t)return nR(`list`,t.error);let{PRESETS:n}=await import(`./theme-presets-xiOb9AFN.js`),r=[`Presets:`];for(let e of n)r.push(` ${e.id.padEnd(16)} ${e.name}`);return r.push(``),{stdout:r.join(`
3150
+ `),stderr:``,exitCode:0}}async function aR(e){let t=C(e.slice(1),{value:eR});return`error`in t?nR(`current`,t.error):{stdout:`Check the Theme settings dialog for the active theme.
3151
+ `,stderr:``,exitCode:0}}async function oR(e){let t=C(e.slice(1),{value:eR});if(`error`in t)return nR(`reset`,t.error);let n=y();return n?(await n.call(`theme-apply`,{action:`reset`}),{stdout:`Theme reset to default.
3132
3152
  `,stderr:``,exitCode:0}):{stdout:``,stderr:`theme: no panel-RPC connection available
3133
- `,exitCode:1}}async function oR(e,t){let n=C(e,{value:$L});if(`error`in n)return tR(`apply`,n.error);if(n.positionals.length===0)return{stdout:``,stderr:`theme apply: missing theme id or path
3153
+ `,exitCode:1}}async function sR(e,t){let n=C(e,{value:eR});if(`error`in n)return nR(`apply`,n.error);if(n.positionals.length===0)return{stdout:``,stderr:`theme apply: missing theme id or path
3134
3154
  `,exitCode:1};let r=y();if(!r)return{stdout:``,stderr:`theme: no panel-RPC connection available
3135
3155
  `,exitCode:1};let i=n.positionals[0],{PRESETS:a}=await import(`./theme-presets-xiOb9AFN.js`),o=a.find(e=>e.id===i);if(o){let e=JSON.stringify(o);return await r.call(`theme-apply`,{themeJson:e,action:`apply`}),{stdout:`Applied theme: ${o.name}\n`,stderr:``,exitCode:0}}let s=t.fs.resolvePath(t.cwd,i),c;try{c=await t.fs.readFile(s)}catch{return{stdout:``,stderr:`theme apply: "${i}" is not a known preset id and file not found at ${s}\n`,exitCode:1}}try{let e=JSON.parse(c);if(!e.id||!e.name||!e.base||!e.tokens)return{stdout:``,stderr:`theme apply: invalid theme file (missing id, name, base, or tokens)
3136
3156
  `,exitCode:1}}catch{return{stdout:``,stderr:`theme apply: file is not valid JSON
3137
- `,exitCode:1}}return{stdout:`Applied theme: ${(await r.call(`theme-apply`,{themeJson:c,action:`apply`})).applied}\n`,stderr:``,exitCode:0}}async function sR(e,t){let n=C(e,{value:$L});if(`error`in n)return tR(`export`,n.error);if(n.positionals.length<2)return{stdout:``,stderr:`theme export: usage: theme export <id> <path>
3138
- `,exitCode:1};let[r,i]=n.positionals,{PRESETS:a}=await import(`./theme-presets-xiOb9AFN.js`),o=a.find(e=>e.id===r);if(!o)return{stdout:``,stderr:`theme export: unknown preset id "${r}"\n`,exitCode:1};let s=t.fs.resolvePath(t.cwd,i);try{await t.fs.writeFile(s,JSON.stringify(o,null,2))}catch(e){return{stdout:``,stderr:`theme export: write failed: ${e instanceof Error?e.message:String(e)}\n`,exitCode:1}}return{stdout:`Exported "${o.name}" to ${s}\n`,stderr:``,exitCode:0}}const cR=`unknown`,lR=`usage: uname [-amnorsv]`,uR=[`s`,`n`,`r`,`v`,`m`,`o`];function dR(){return{stdout:[lR,` -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(`
3139
- `),stderr:``,exitCode:0}}function fR(){let{releasedAt:e,buildId:t}=et();return e?`${t} (${e})`:t}function pR(){let e=globalThis.navigator,t=e?.userAgentData?.platform||e?.platform;return typeof t==`string`&&t.length>0?t:cR}function mR(){let e=globalThis.navigator?.userAgent;return typeof e==`string`&&e.length>0?e:cR}function hR(e){switch(e){case`s`:return`SLICC`;case`n`:return $e();case`r`:return et().version;case`v`:return fR();case`m`:return pR();case`o`:return mR()}}function gR(e){return{stdout:``,stderr:`uname: ${e}\n${lR}\n`,exitCode:1}}function _R(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 uR)t.add(e);continue}if(!uR.includes(e))return{error:`unrecognized option '-${e}'`};t.add(e)}}return t}function vR(){return S(`uname`,async e=>{if(e.includes(`--help`)||e.includes(`-h`))return dR();let t=_R(e);return`error`in t?gR(t.error):{stdout:`${(t.size>0?uR.filter(e=>t.has(e)):[`s`]).map(hR).join(` `)}\n`,stderr:``,exitCode:0}})}function yR(){return S(`unlink`,async(e,t)=>{if(e.includes(`--help`))return{stdout:`Usage: unlink FILE
3157
+ `,exitCode:1}}return{stdout:`Applied theme: ${(await r.call(`theme-apply`,{themeJson:c,action:`apply`})).applied}\n`,stderr:``,exitCode:0}}async function cR(e,t){let n=C(e,{value:eR});if(`error`in n)return nR(`export`,n.error);if(n.positionals.length<2)return{stdout:``,stderr:`theme export: usage: theme export <id> <path>
3158
+ `,exitCode:1};let[r,i]=n.positionals,{PRESETS:a}=await import(`./theme-presets-xiOb9AFN.js`),o=a.find(e=>e.id===r);if(!o)return{stdout:``,stderr:`theme export: unknown preset id "${r}"\n`,exitCode:1};let s=t.fs.resolvePath(t.cwd,i);try{await t.fs.writeFile(s,JSON.stringify(o,null,2))}catch(e){return{stdout:``,stderr:`theme export: write failed: ${e instanceof Error?e.message:String(e)}\n`,exitCode:1}}return{stdout:`Exported "${o.name}" to ${s}\n`,stderr:``,exitCode:0}}const lR=`unknown`,uR=`usage: uname [-amnorsv]`,dR=[`s`,`n`,`r`,`v`,`m`,`o`];function fR(){return{stdout:[uR,` -s kernel name (SLICC) -n nodename (leader/follower/standalone)`,` -r release (SLICC version) -v build stamp`,` -m machine (realm platform) -o operating system (user agent)`,` -a all of the above, in uname order`,``].join(`
3159
+ `),stderr:``,exitCode:0}}function pR(){let{releasedAt:e,buildId:t}=et();return e?`${t} (${e})`:t}function mR(){let e=globalThis.navigator,t=e?.userAgentData?.platform||e?.platform;return typeof t==`string`&&t.length>0?t:lR}function hR(){let e=globalThis.navigator?.userAgent;return typeof e==`string`&&e.length>0?e:lR}function gR(e){switch(e){case`s`:return`SLICC`;case`n`:return $e();case`r`:return et().version;case`v`:return pR();case`m`:return mR();case`o`:return hR()}}function _R(e){return{stdout:``,stderr:`uname: ${e}\n${uR}\n`,exitCode:1}}function vR(e){let t=new Set;for(let n of e){if(!n.startsWith(`-`)||n===`-`)return{error:`extra operand '${n}'`};if(n.startsWith(`--`))return{error:`unrecognized option '${n}'`};for(let e of n.slice(1)){if(e===`a`){for(let e of dR)t.add(e);continue}if(!dR.includes(e))return{error:`unrecognized option '-${e}'`};t.add(e)}}return t}function yR(){return S(`uname`,async e=>{if(e.includes(`--help`)||e.includes(`-h`))return fR();let t=vR(e);return`error`in t?_R(t.error):{stdout:`${(t.size>0?dR.filter(e=>t.has(e)):[`s`]).map(gR).join(` `)}\n`,stderr:``,exitCode:0}})}function bR(){return S(`unlink`,async(e,t)=>{if(e.includes(`--help`))return{stdout:`Usage: unlink FILE
3140
3160
  Remove FILE. Symbolic links are removed without following their target.
3141
3161
  `,stderr:``,exitCode:0};if(e.length!==1||e[0].startsWith(`-`))return{stdout:``,stderr:e.length===0?`unlink: missing operand
3142
3162
  `:`unlink: extra operand
3143
- `,exitCode:1};let n=t.fs.resolvePath(t.cwd,e[0]);try{let r=t.fs.lstat?await t.fs.lstat(n):await t.fs.stat(n);return r.isDirectory&&!r.isSymbolicLink?{stdout:``,stderr:`unlink: cannot unlink '${e[0]}': Is a directory\n`,exitCode:1}:(await t.fs.rm(n,{recursive:!1,force:!1}),{stdout:``,stderr:``,exitCode:0})}catch(t){let n=t instanceof Error?t.message:String(t);return{stdout:``,stderr:`unlink: cannot unlink '${e[0]}': ${n}\n`,exitCode:1}}})}function bR(){return{stdout:`usage: unzip <archive.zip> [-d <destination>]
3144
- `,stderr:``,exitCode:0}}function xR(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
3145
- `,exitCode:1}}:{kind:`ok`,archive:n[0],destination:t||`.`}}async function SR(e,t,n,r){let i=n.replace(/\\/g,`/`);if(!i||i.endsWith(`/`))return!1;let a=e.fs.resolvePath(t,i);if(!xr(t,a))return{stdout:``,stderr:`unzip: blocked suspicious path ${n}\n`,exitCode:1};let o=vr(a);return o!==`/`&&await e.fs.mkdir(o,{recursive:!0}),await e.fs.writeFile(a,r),!0}function CR(){return S(`unzip`,async(e,t)=>{if(e.length===0||e.includes(`--help`)||e.includes(`-h`))return bR();let n=xR(e);if(n.kind===`error`)return n.result;let r=t.fs.resolvePath(t.cwd,n.archive),i=t.fs.resolvePath(t.cwd,n.destination);await t.fs.mkdir(i,{recursive:!0});let a=await t.fs.readFileBuffer(r),o=At(a),s=0;for(let[e,n]of Object.entries(o)){let r=await SR(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 wR=`ai-ecoverse/slicc`,TR=`usage: upgrade status | upgrade apply --from=<version> --to=<version>`,ER=`packages/vfs-root`,DR=3e4,OR=[`${ER}/workspace/skills/`,`${ER}/shared/sprinkles/`,`${ER}/shared/sounds/`,`${ER}/shared/GELATIERE.md`,`${ER}/shared/wiki/WIKI.md`,`${ER}/etc/`],kR=[`auto-applied`,`merged-clean`,`kept-local`,`needs-review`,`unchanged`,`added-new`];function AR(){return Object.fromEntries(kR.map(e=>[e,0]))}function jR(e,t,n,r){let i=AR();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 MR(e){if(e[0]!==`apply`)throw Error(TR);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 NR(e){return e.startsWith(`v`)?e:`v${e}`}function PR(e){if(!OR.some(t=>e.startsWith(t)))return null;let t=e.slice(17);return!t||t.split(`/`).some(e=>e===`.`||e===`..`)||t.startsWith(`/workspace/skills/`)&&pe()?null:t}async function FR(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 ${DR}ms`)),DR)})])}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 IR(e,t){let n=await FR(t,`https://api.github.com/repos/${wR}/git/trees/${encodeURIComponent(e)}?recursive=1`),r=ve(n.body);if(r.truncated)throw Error(`bundled file discovery was truncated for ${e}`);if(!Array.isArray(r.tree))throw Error(`invalid bundled file discovery response for ${e}`);let i=new Map;for(let e of r.tree){if(e.type!==`blob`||typeof e.path!=`string`)continue;let t=PR(e.path);t&&i.set(t,e.path)}return i}function LR(e,t){let n=t.split(`/`).map(encodeURIComponent).join(`/`);return`https://raw.githubusercontent.com/${wR}/${encodeURIComponent(e)}/${n}`}function RR(e,t){return!e||!t||e.byteLength!==t.byteLength?!1:e.every((e,n)=>e===t[n])}function zR(e){try{return new TextDecoder(`utf-8`,{fatal:!0}).decode(e)}catch{return null}}async function BR(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 VR(e,t,n,r,i){let a=`${t}.upgrade-${NR(n)}-to-${NR(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 HR(e,t,n,r,i,a,o){let s=await BR(e.fs,t);if(!a)return{path:t,classification:s?`kept-local`:`unchanged`};if(!i)return s?{path:t,classification:RR(s,a)?`unchanged`:`kept-local`}:{path:t,classification:`added-new`,content:a};if(RR(i,a)||RR(s,a))return{path:t,classification:`unchanged`};if(!s)return{path:t,classification:`kept-local`};if(RR(s,i))return{path:t,classification:`auto-applied`,content:a};let[c,l,u]=[s,i,a].map(zR);if(c!==null&&l!==null&&u!==null){let i=Le(c,l,u,{diff3:!0,labels:{current:`local:${t}`,base:`${NR(n)}:${t}`,other:`${NR(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 VR(e.fs,t,n,r,o)}}return{path:t,classification:`needs-review`,content:a,sidecar:await VR(e.fs,t,n,r,o)}}async function UR(e,t){t.content?await e.writeFile(t.path,t.content):await e.exists(t.path)&&await e.rm(t.path)}async function WR(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 BR(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 UR(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 GR(e,t,n){let r=NR(t),i=NR(n),[a,o]=await Promise.all([IR(r,e.fetch),IR(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)?FR(e.fetch,LR(r,a.get(t))).then(e=>be(e.body)):void 0,o.has(t)?FR(e.fetch,LR(i,o.get(t))).then(e=>be(e.body)):void 0]);return{path:t,base:n,theirs:s}})),l=new Set(s),u=[];for(let{path:r,base:i,theirs:a}of c)u.push(await HR(e,r,t,n,i,a,l));return await WR(e.fs,u),u}async function KR(e){let{version:t,releasedAt:n,buildId:r}=et(),i=[],a=null,o=e.getLastSeen??tt();if(!o)i.push(`last-seen version unavailable: no reader registered in this runtime`);else try{a=await o()}catch(e){i.push(`last-seen version unavailable: ${e instanceof Error?e.message:String(e)}`)}let s=a!==null&&a!==t;return`${JSON.stringify({ok:i.length===0,version:t,releasedAt:n,build:r,lastSeen:a,mergePending:s,...s?{apply:`upgrade apply --from=${a} --to=${t}`}:{},errors:i})}\n`}function qR(e){return S(`upgrade`,async t=>{if(t.includes(`--help`)||t.includes(`-h`))return{stdout:`${TR}\n`,stderr:``,exitCode:0};if(t[0]===`status`)return t.length>1?{stdout:jR(``,``,[],[`unsupported argument: ${t[1]}`]),stderr:``,exitCode:1}:{stdout:await KR(e),stderr:``,exitCode:0};let n=``,r=``;try{({from:n,to:r}=MR(t));let i=await GR(e,n,r),a=i.some(e=>e.classification===`needs-review`);return{stdout:jR(n,r,i,[]),stderr:``,exitCode:+!!a}}catch(e){let t=e instanceof Error?e.message:String(e);return{stdout:jR(n,r,[],[t]),stderr:``,exitCode:1}}})}const JR=`usage: uptime [-p|--pretty] [-s|--since]`,YR=`${JR}
3163
+ `,exitCode:1};let n=t.fs.resolvePath(t.cwd,e[0]);try{let r=t.fs.lstat?await t.fs.lstat(n):await t.fs.stat(n);return r.isDirectory&&!r.isSymbolicLink?{stdout:``,stderr:`unlink: cannot unlink '${e[0]}': Is a directory\n`,exitCode:1}:(await t.fs.rm(n,{recursive:!1,force:!1}),{stdout:``,stderr:``,exitCode:0})}catch(t){let n=t instanceof Error?t.message:String(t);return{stdout:``,stderr:`unlink: cannot unlink '${e[0]}': ${n}\n`,exitCode:1}}})}function xR(){return{stdout:`usage: unzip <archive.zip> [-d <destination>]
3164
+ `,stderr:``,exitCode:0}}function SR(e){let t=`.`,n=[];for(let r=0;r<e.length;r++){let i=e[r];if(i===`-d`){t=e[r+1]??``,r++;continue}if(i.startsWith(`-`))return{kind:`error`,result:{stdout:``,stderr:`unzip: unsupported option ${i}\n`,exitCode:1}};n.push(i)}return n.length<1?{kind:`error`,result:{stdout:``,stderr:`unzip: expected archive path
3165
+ `,exitCode:1}}:{kind:`ok`,archive:n[0],destination:t||`.`}}async function CR(e,t,n,r){let i=n.replace(/\\/g,`/`);if(!i||i.endsWith(`/`))return!1;let a=e.fs.resolvePath(t,i);if(!xr(t,a))return{stdout:``,stderr:`unzip: blocked suspicious path ${n}\n`,exitCode:1};let o=vr(a);return o!==`/`&&await e.fs.mkdir(o,{recursive:!0}),await e.fs.writeFile(a,r),!0}function wR(){return S(`unzip`,async(e,t)=>{if(e.length===0||e.includes(`--help`)||e.includes(`-h`))return xR();let n=SR(e);if(n.kind===`error`)return n.result;let r=t.fs.resolvePath(t.cwd,n.archive),i=t.fs.resolvePath(t.cwd,n.destination);await t.fs.mkdir(i,{recursive:!0});let a=await t.fs.readFileBuffer(r),o=At(a),s=0;for(let[e,n]of Object.entries(o)){let r=await CR(t,i,e,n);if(r===!0)s++;else if(r!==!1)return r}return{stdout:`extracted ${s} file(s) to ${i}\n`,stderr:``,exitCode:0}})}const TR=`ai-ecoverse/slicc`,ER=`usage: upgrade status | upgrade apply --from=<version> --to=<version>`,DR=`packages/vfs-root`,OR=3e4,kR=[`${DR}/workspace/skills/`,`${DR}/shared/sprinkles/`,`${DR}/shared/sounds/`,`${DR}/shared/GELATIERE.md`,`${DR}/shared/wiki/WIKI.md`,`${DR}/etc/`],AR=[`auto-applied`,`merged-clean`,`kept-local`,`needs-review`,`unchanged`,`added-new`];function jR(){return Object.fromEntries(AR.map(e=>[e,0]))}function MR(e,t,n,r){let i=jR();for(let e of n)i[e.classification]+=1;return`${JSON.stringify({ok:r.length===0&&i[`needs-review`]===0,from:e,to:t,results:n.map(({path:e,classification:t,sidecar:n})=>({path:e,status:t,...n?{sidecar:n}:{}})),summary:i,errors:r})}\n`}function NR(e){if(e[0]!==`apply`)throw Error(ER);let t=new Map;for(let n of e.slice(1)){let e=n.match(/^--(from|to)=(.+)$/);if(!e)throw Error(`unsupported argument: ${n}`);t.set(e[1],e[2])}let n=t.get(`from`)??``,r=t.get(`to`)??``,i=/^v?[0-9][0-9A-Za-z.+_-]*$/;if(!i.test(n)||!i.test(r))throw Error(`both --from and --to must be release versions`);return{from:n,to:r}}function PR(e){return e.startsWith(`v`)?e:`v${e}`}function FR(e){if(!kR.some(t=>e.startsWith(t)))return null;let t=e.slice(17);return!t||t.split(`/`).some(e=>e===`.`||e===`..`)||t.startsWith(`/workspace/skills/`)&&pe()?null:t}async function IR(e,t){let n,r;try{n=await Promise.race([e(t,{method:`GET`,headers:{Accept:`application/json`}}),new Promise((e,t)=>{r=setTimeout(()=>t(Error(`request timed out after ${OR}ms`)),OR)})])}catch(e){let n=e instanceof Error?e.message:String(e);throw Error(`fetch failed for ${t}: ${n}`)}finally{r!==void 0&&clearTimeout(r)}if(n.status<200||n.status>=300)throw Error(`fetch failed for ${t}: HTTP ${n.status} ${n.statusText}`);return n}async function LR(e,t){let n=await IR(t,`https://api.github.com/repos/${TR}/git/trees/${encodeURIComponent(e)}?recursive=1`),r=ve(n.body);if(r.truncated)throw Error(`bundled file discovery was truncated for ${e}`);if(!Array.isArray(r.tree))throw Error(`invalid bundled file discovery response for ${e}`);let i=new Map;for(let e of r.tree){if(e.type!==`blob`||typeof e.path!=`string`)continue;let t=FR(e.path);t&&i.set(t,e.path)}return i}function RR(e,t){let n=t.split(`/`).map(encodeURIComponent).join(`/`);return`https://raw.githubusercontent.com/${TR}/${encodeURIComponent(e)}/${n}`}function zR(e,t){return!e||!t||e.byteLength!==t.byteLength?!1:e.every((e,n)=>e===t[n])}function BR(e){try{return new TextDecoder(`utf-8`,{fatal:!0}).decode(e)}catch{return null}}async function VR(e,t){if(!await e.exists(t))return;let n=await e.readFile(t,{encoding:`binary`});return n instanceof Uint8Array?n:new TextEncoder().encode(n)}async function HR(e,t,n,r,i){let a=`${t}.upgrade-${PR(n)}-to-${PR(r)}.conflict`;if(!i.has(a)&&!await e.exists(a))return i.add(a),a;for(let t=1;;t+=1){let n=`${a}.${t}`;if(!i.has(n)&&!await e.exists(n))return i.add(n),n}}async function UR(e,t,n,r,i,a,o){let s=await VR(e.fs,t);if(!a)return{path:t,classification:s?`kept-local`:`unchanged`};if(!i)return s?{path:t,classification:zR(s,a)?`unchanged`:`kept-local`}:{path:t,classification:`added-new`,content:a};if(zR(i,a)||zR(s,a))return{path:t,classification:`unchanged`};if(!s)return{path:t,classification:`kept-local`};if(zR(s,i))return{path:t,classification:`auto-applied`,content:a};let[c,l,u]=[s,i,a].map(BR);if(c!==null&&l!==null&&u!==null){let i=Le(c,l,u,{diff3:!0,labels:{current:`local:${t}`,base:`${PR(n)}:${t}`,other:`${PR(r)}:${t}`}}),a=new TextEncoder().encode(i.content);return i.conflicts===0?{path:t,classification:`merged-clean`,content:a}:{path:t,classification:`needs-review`,content:a,sidecar:await HR(e.fs,t,n,r,o)}}return{path:t,classification:`needs-review`,content:a,sidecar:await HR(e.fs,t,n,r,o)}}async function WR(e,t){t.content?await e.writeFile(t.path,t.content):await e.exists(t.path)&&await e.rm(t.path)}async function GR(e,t){let n=t.filter(e=>e.content!==void 0),r=await Promise.all(n.map(async t=>{let n=t.sidecar??t.path;return{path:n,content:await VR(e,n)}})),i=[];for(let t=0;t<n.length;t+=1){let a=n[t],o=r[t];try{await e.writeFile(o.path,a.content),i.push(o)}catch(t){let n=[];for(let t of[o,...i.slice().reverse()])try{await WR(e,t)}catch(e){n.push(`${t.path}: ${e instanceof Error?e.message:String(e)}`)}let r=t instanceof Error?t.message:String(t),a=n.length===0?`all writes rolled back`:`rollback failed (${n.join(`; `)})`;throw Error(`apply failed for ${o.path}: ${r}; ${a}`)}}}async function KR(e,t,n){let r=PR(t),i=PR(n),[a,o]=await Promise.all([LR(r,e.fetch),LR(i,e.fetch)]),s=[...new Set([...a.keys(),...o.keys()])].sort(),c=await Promise.all(s.map(async t=>{let[n,s]=await Promise.all([a.has(t)?IR(e.fetch,RR(r,a.get(t))).then(e=>be(e.body)):void 0,o.has(t)?IR(e.fetch,RR(i,o.get(t))).then(e=>be(e.body)):void 0]);return{path:t,base:n,theirs:s}})),l=new Set(s),u=[];for(let{path:r,base:i,theirs:a}of c)u.push(await UR(e,r,t,n,i,a,l));return await GR(e.fs,u),u}async function qR(e){let{version:t,releasedAt:n,buildId:r}=et(),i=[],a=null,o=e.getLastSeen??tt();if(!o)i.push(`last-seen version unavailable: no reader registered in this runtime`);else try{a=await o()}catch(e){i.push(`last-seen version unavailable: ${e instanceof Error?e.message:String(e)}`)}let s=a!==null&&a!==t;return`${JSON.stringify({ok:i.length===0,version:t,releasedAt:n,build:r,lastSeen:a,mergePending:s,...s?{apply:`upgrade apply --from=${a} --to=${t}`}:{},errors:i})}\n`}function JR(e){return S(`upgrade`,async t=>{if(t.includes(`--help`)||t.includes(`-h`))return{stdout:`${ER}\n`,stderr:``,exitCode:0};if(t[0]===`status`)return t.length>1?{stdout:MR(``,``,[],[`unsupported argument: ${t[1]}`]),stderr:``,exitCode:1}:{stdout:await qR(e),stderr:``,exitCode:0};let n=``,r=``;try{({from:n,to:r}=NR(t));let i=await KR(e,n,r),a=i.some(e=>e.classification===`needs-review`);return{stdout:MR(n,r,i,[]),stderr:``,exitCode:+!!a}}catch(e){let t=e instanceof Error?e.message:String(e);return{stdout:MR(n,r,[],[t]),stderr:``,exitCode:1}}})}const YR=`usage: uptime [-p|--pretty] [-s|--since]`,XR=`${YR}
3146
3166
 
3147
3167
  Print how long this SLICC has been running. The clock starts when the browser
3148
3168
  window was last loaded — a reload is a reboot.
@@ -3158,7 +3178,7 @@ The load average is the average number of live kernel processes over the last
3158
3178
  processes are retained in bounded numbers, so a long burst of short commands
3159
3179
  can under-report the older windows. The user count is always 1: a SLICC
3160
3180
  runtime has one user identity (see \`id\`).
3161
- `,XR=[1,5,15],ZR=6e4,QR=60*ZR,$R=24*QR;function ez(){let e=globalThis.__slicc_pm;return e instanceof Object&&typeof e.list==`function`?e:null}function tz(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 nz(e){let t=Math.max(0,e),n=Math.floor(t/$R),r=Math.floor(t%$R/QR),i=Math.floor(t%QR/ZR),a=r>0?`${r}:${String(i).padStart(2,`0`)}`:`${i} min`;return n===0?a:`${n} ${n===1?`day`:`days`}, ${a}`}function rz(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/$R),`day`),r(Math.floor(t%$R/QR),`hour`),r(Math.floor(t%QR/ZR),`minute`),n.length===0?`up ${Math.floor(t/1e3)} seconds`:`up ${n.join(`, `)}`}function iz(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 az(e){let t=new Date(e),n=e=>String(e).padStart(2,`0`);return`${n(t.getHours())}:${n(t.getMinutes())}:${n(t.getSeconds())}`}function oz(e,t,n){let r=XR.map(r=>tz(e,t,r*ZR,n).toFixed(2));return` ${az(t)} up ${nz(t-n)}, 1 user, load average: ${r.join(`, `)}\n`}function sz(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 cz(e={}){return S(`uptime`,async t=>{let n=sz(t);if(typeof n!=`string`)return{stdout:``,stderr:`uptime: ${n.error}\n${JR}\n`,exitCode:1};if(n===`help`)return{stdout:YR,stderr:``,exitCode:0};if(n===`version`)return{stdout:`uptime (SLICC) ${et().version}\n`,stderr:``,exitCode:0};let r=e.now?e.now():Date.now(),i=e.bootedAt?e.bootedAt():ya();if(n===`since`)return lz(`${iz(i)}\n`);if(n===`pretty`)return lz(`${rz(r-i)}\n`);let a=e.processManager??ez();return lz(oz(a?a.list():[],r,i))})}function lz(e){return{stdout:e,stderr:``,exitCode:0}}const uz=new Set([`--vid`,`--pid`,`--class`,`--subclass`,`--protocol`,`--serial`,`--request-type`,`--recipient`,`--request`,`--value`,`--index`,`--__resolved`]);function dz(e){return Dn(e,uz)}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 fz(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 pz=new Set([`standard`,`class`,`vendor`]),mz=new Set([`device`,`interface`,`endpoint`,`other`]);function hz(e){let t=e.get(`--request-type`)??`vendor`,n=e.get(`--recipient`)??`device`;if(!pz.has(t))throw Error(`invalid --request-type: '${t}'`);if(!mz.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 gz(e){let t=pi(e.stdin),n=new Uint8Array(t.length);for(let e=0;e<t.length;e++)n[e]=t.charCodeAt(e)&255;return n}function _z(e){return Array.from(e,e=>e.toString(16).padStart(2,`0`)).join(` `)}function vz(e){return`0x${e.toString(16).padStart(4,`0`)}`}function yz(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${vz(e.vendorId)}:${vz(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 bz=`usb - access USB devices via WebUSB
3181
+ `,ZR=[1,5,15],QR=6e4,$R=60*QR,ez=24*$R;function tz(){let e=globalThis.__slicc_pm;return e instanceof Object&&typeof e.list==`function`?e:null}function nz(e,t,n,r){let i=Math.min(n,Math.max(1,t-r)),a=t-i,o=0;for(let n of e){let e=Math.min(n.finishedAt??t,t);o+=Math.max(0,e-Math.max(n.startedAt,a))}return o/i}function rz(e){let t=Math.max(0,e),n=Math.floor(t/ez),r=Math.floor(t%ez/$R),i=Math.floor(t%$R/QR),a=r>0?`${r}:${String(i).padStart(2,`0`)}`:`${i} min`;return n===0?a:`${n} ${n===1?`day`:`days`}, ${a}`}function iz(e){let t=Math.max(0,e),n=[],r=(e,t)=>{e>0&&n.push(`${e} ${t}${e===1?``:`s`}`)};return r(Math.floor(t/ez),`day`),r(Math.floor(t%ez/$R),`hour`),r(Math.floor(t%$R/QR),`minute`),n.length===0?`up ${Math.floor(t/1e3)} seconds`:`up ${n.join(`, `)}`}function az(e){let t=new Date(e),n=e=>String(e).padStart(2,`0`);return`${`${t.getFullYear()}-${n(t.getMonth()+1)}-${n(t.getDate())}`} ${n(t.getHours())}:${n(t.getMinutes())}:${n(t.getSeconds())}`}function oz(e){let t=new Date(e),n=e=>String(e).padStart(2,`0`);return`${n(t.getHours())}:${n(t.getMinutes())}:${n(t.getSeconds())}`}function sz(e,t,n){let r=ZR.map(r=>nz(e,t,r*QR,n).toFixed(2));return` ${oz(t)} up ${rz(t-n)}, 1 user, load average: ${r.join(`, `)}\n`}function cz(e){let t=`default`;for(let n of e)switch(n){case`-p`:case`--pretty`:t=`pretty`;break;case`-s`:case`--since`:t=`since`;break;case`-h`:case`--help`:return`help`;case`--version`:return`version`;default:return{error:`unrecognized option '${n}'`}}return t}function lz(e={}){return S(`uptime`,async t=>{let n=cz(t);if(typeof n!=`string`)return{stdout:``,stderr:`uptime: ${n.error}\n${YR}\n`,exitCode:1};if(n===`help`)return{stdout:XR,stderr:``,exitCode:0};if(n===`version`)return{stdout:`uptime (SLICC) ${et().version}\n`,stderr:``,exitCode:0};let r=e.now?e.now():Date.now(),i=e.bootedAt?e.bootedAt():ya();if(n===`since`)return uz(`${az(i)}\n`);if(n===`pretty`)return uz(`${iz(r-i)}\n`);let a=e.processManager??tz();return uz(sz(a?a.list():[],r,i))})}function uz(e){return{stdout:e,stderr:``,exitCode:0}}const dz=new Set([`--vid`,`--pid`,`--class`,`--subclass`,`--protocol`,`--serial`,`--request-type`,`--recipient`,`--request`,`--value`,`--index`,`--__resolved`]);function fz(e){return Dn(e,dz)}function Y(e,t){let n=/^0x/i.test(e)?parseInt(e,16):parseInt(e,10);if(!Number.isFinite(n)||Number.isNaN(n))throw Error(`invalid ${t}: '${e}'`);return n}function pz(e){let t={};return e.has(`--vid`)&&(t.vendorId=Y(e.get(`--vid`),`vid`)),e.has(`--pid`)&&(t.productId=Y(e.get(`--pid`),`pid`)),e.has(`--class`)&&(t.classCode=Y(e.get(`--class`),`class`)),e.has(`--subclass`)&&(t.subclassCode=Y(e.get(`--subclass`),`subclass`)),e.has(`--protocol`)&&(t.protocolCode=Y(e.get(`--protocol`),`protocol`)),e.has(`--serial`)&&(t.serialNumber=e.get(`--serial`)),Object.keys(t).length>0?[t]:[]}const mz=new Set([`standard`,`class`,`vendor`]),hz=new Set([`device`,`interface`,`endpoint`,`other`]);function gz(e){let t=e.get(`--request-type`)??`vendor`,n=e.get(`--recipient`)??`device`;if(!mz.has(t))throw Error(`invalid --request-type: '${t}'`);if(!hz.has(n))throw Error(`invalid --recipient: '${n}'`);return{requestType:t,recipient:n,request:Y(e.get(`--request`)??`0`,`request`),value:Y(e.get(`--value`)??`0`,`value`),index:Y(e.get(`--index`)??`0`,`index`)}}function _z(e){let t=pi(e.stdin),n=new Uint8Array(t.length);for(let e=0;e<t.length;e++)n[e]=t.charCodeAt(e)&255;return n}function vz(e){return Array.from(e,e=>e.toString(16).padStart(2,`0`)).join(` `)}function yz(e){return`0x${e.toString(16).padStart(4,`0`)}`}function bz(e){let t=[e.manufacturerName,e.productName].filter(Boolean).join(` `)||`(unknown)`,n=e.serialNumber?` serial=${e.serialNumber}`:``,r=e.opened?` [open]`:``;return`${e.handle}\t${yz(e.vendorId)}:${yz(e.productId)}\t${t}${n}${r}`}function X(e){return{stdout:e,stderr:``,exitCode:0}}function Z(e){return{stdout:``,stderr:`usb: ${e}\n`,exitCode:1}}const xz=`usb - access USB devices via WebUSB
3162
3182
 
3163
3183
  Usage: usb <subcommand> [options]
3164
3184
 
@@ -3197,11 +3217,11 @@ Options:
3197
3217
  -h, --help
3198
3218
 
3199
3219
  Transfers are capped at ${fi} bytes (4 MiB).
3200
- `;function xz(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?`${_z(e)}\n`:``)}async function Sz(e){let t=await e.list();return t.length===0?X(`no granted USB devices
3201
- `):X(`${t.map(yz).join(`
3202
- `)}\n`)}async function Cz(e,t){let n=e.get(`--__resolved`);if(n)return X(`${yz(await t.info(n))}\n`);let r=fz(e),i=ke();if(i){let e=await cS(`usb-device`,r,i);if(e.handle)return X(`${yz(await t.info(e.handle))}\n`);let n=e.info,a=ui();if(!a)return Z(`request: WebUSB unavailable for device re-acquire`);let o=(await a.getDevices()).find(e=>e.vendorId===n.vendorId&&e.productId===n.productId&&(!n.serialNumber||e.serialNumber===n.serialNumber));if(!o)return Z(`request: granted device could not be re-acquired`);let s=di().register(o);return X(`${yz(li(s,o))}\n`)}return X(`${yz(await t.request(r))}\n`)}async function wz(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 Tz(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 Ez(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 Dz(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 Oz(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`):xz((await n.controlIn(i,hz(t),o)).bytes,r)}async function kz(e,t,n,r){let i=e[1];if(!i)return Z(`control-out: handle required`);let a=gz(t);return a.length>4194304?Z(`control-out payload exceeds 4 MiB limit`):X(`${(await r.controlOut(i,hz(n),a)).bytesWritten} bytes written\n`)}async function Az(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`):xz((await n.transferIn(i,Y(a,`endpoint`),s)).bytes,r)}async function jz(e,t,n,r){let[,i,a]=e;if(!i||a===void 0)return Z(`transfer-out: handle and endpoint required`);let o=gz(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 Mz(e,t,n){let{positionals:r,flags:i,bools:a}=dz(e),o=r[0],s=a.has(`--raw`);switch(o){case`list`:return Sz(n);case`request`:return Cz(i,n);case`open`:case`close`:case`reset`:return wz(o,r,n,a);case`clear-halt`:return Tz(r,n);case`select-config`:return Ez(r,n);case`claim`:case`release`:return Dz(o,r,n,a);case`control-in`:return Oz(r,i,n,s);case`control-out`:return kz(r,t,i,n);case`transfer-in`:return Az(r,i,n,s);case`transfer-out`:return jz(r,t,i,n);default:return Z(`unknown subcommand '${o??``}'. Try 'usb --help'.`)}}function Nz(){return S(`usb`,async(e,t)=>{if(e.length===0||e.includes(`--help`)||e.includes(`-h`))return X(bz);let n=Gr(le(),y());if(!n)return Z(`WebUSB is unavailable in this environment`);try{return await Mz(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 Pz=`/workspace/.v86`,Fz=`v86 - run an x86 virtual machine (v86 wasm engine)
3220
+ `;function Sz(e,t){if(t){let t=``;for(let n=0;n<e.length;n++)t+=String.fromCharCode(e[n]);return X(t)}return X(e.length?`${vz(e)}\n`:``)}async function Cz(e){let t=await e.list();return t.length===0?X(`no granted USB devices
3221
+ `):X(`${t.map(bz).join(`
3222
+ `)}\n`)}async function wz(e,t){let n=e.get(`--__resolved`);if(n)return X(`${bz(await t.info(n))}\n`);let r=pz(e),i=ke();if(i){let e=await cS(`usb-device`,r,i);if(e.handle)return X(`${bz(await t.info(e.handle))}\n`);let n=e.info,a=ui();if(!a)return Z(`request: WebUSB unavailable for device re-acquire`);let o=(await a.getDevices()).find(e=>e.vendorId===n.vendorId&&e.productId===n.productId&&(!n.serialNumber||e.serialNumber===n.serialNumber));if(!o)return Z(`request: granted device could not be re-acquired`);let s=di().register(o);return X(`${bz(li(s,o))}\n`)}return X(`${bz(await t.request(r))}\n`)}async function Tz(e,t,n,r){let i=t[1];if(!i)return Z(`${e}: handle required`);let a=r.has(`--force`);return e===`open`?await n.open(i):e===`close`?await n.close(i,{force:a}):await n.reset(i,{force:a}),X(``)}async function Ez(e,t){let[,n,r,i]=e;return!n||r===void 0||i===void 0?Z(`clear-halt: handle, direction and endpoint required`):r!==`in`&&r!==`out`?Z(`clear-halt: direction must be 'in' or 'out', got '${r}'`):(await t.clearHalt(n,r,Y(i,`endpoint`)),X(``))}async function Dz(e,t){let[,n,r]=e;return!n||r===void 0?Z(`select-config: handle and value required`):(await t.selectConfig(n,Y(r,`configuration`)),X(``))}async function Oz(e,t,n,r){let[,i,a]=t;if(!i||a===void 0)return Z(`${e}: handle and interface required`);let o=Y(a,`interface`);return e===`claim`?await n.claim(i,o,{wait:r.has(`--wait`)}):await n.release(i,o),X(``)}async function kz(e,t,n,r){let[,i,a]=e;if(!i||a===void 0)return Z(`control-in: handle and length required`);let o=Y(a,`length`);return o>4194304?Z(`control-in length exceeds 4 MiB limit`):Sz((await n.controlIn(i,gz(t),o)).bytes,r)}async function Az(e,t,n,r){let i=e[1];if(!i)return Z(`control-out: handle required`);let a=_z(t);return a.length>4194304?Z(`control-out payload exceeds 4 MiB limit`):X(`${(await r.controlOut(i,gz(n),a)).bytesWritten} bytes written\n`)}async function jz(e,t,n,r){let[,i,a,o]=e;if(!i||a===void 0||o===void 0)return Z(`transfer-in: handle, endpoint and length required`);let s=Y(o,`length`);return s>4194304?Z(`transfer-in length exceeds 4 MiB limit`):Sz((await n.transferIn(i,Y(a,`endpoint`),s)).bytes,r)}async function Mz(e,t,n,r){let[,i,a]=e;if(!i||a===void 0)return Z(`transfer-out: handle and endpoint required`);let o=_z(t);return o.length>4194304?Z(`transfer-out payload exceeds 4 MiB limit`):X(`${(await r.transferOut(i,Y(a,`endpoint`),o)).bytesWritten} bytes written\n`)}async function Nz(e,t,n){let{positionals:r,flags:i,bools:a}=fz(e),o=r[0],s=a.has(`--raw`);switch(o){case`list`:return Cz(n);case`request`:return wz(i,n);case`open`:case`close`:case`reset`:return Tz(o,r,n,a);case`clear-halt`:return Ez(r,n);case`select-config`:return Dz(r,n);case`claim`:case`release`:return Oz(o,r,n,a);case`control-in`:return kz(r,i,n,s);case`control-out`:return Az(r,t,i,n);case`transfer-in`:return jz(r,i,n,s);case`transfer-out`:return Mz(r,t,i,n);default:return Z(`unknown subcommand '${o??``}'. Try 'usb --help'.`)}}function Pz(){return S(`usb`,async(e,t)=>{if(e.length===0||e.includes(`--help`)||e.includes(`-h`))return X(xz);let n=Gr(le(),y());if(!n)return Z(`WebUSB is unavailable in this environment`);try{return await Nz(e,t,n)}catch(e){let t=e instanceof Error?e.message:String(e);return/cancelled|NotFoundError|No device selected/i.test(t)?Z(`user cancelled or no device selected`):Z(t)}})}const Fz=`/workspace/.v86`,Iz=`v86 - run an x86 virtual machine (v86 wasm engine)
3203
3223
 
3204
- Requires: ${N} v86@${JO}
3224
+ Requires: ${N} v86@${YO}
3205
3225
 
3206
3226
  Usage:
3207
3227
  v86 start [boot options] Boot a VM in the background (prints pid)
@@ -3235,7 +3255,7 @@ Boot options (QEMU-flavored):
3235
3255
  proxy — no gateway needed, https upstream via the proxy
3236
3256
  -vga <MiB> SVGA/VBE video memory (default 8, max 64) —
3237
3257
  raise for high-res VESA modes (1080p32 needs ~9)
3238
- -bios <path> -vgabios <path> BIOS blobs (default ${Pz}/{seabios,vgabios}.bin)
3258
+ -bios <path> -vgabios <path> BIOS blobs (default ${Fz}/{seabios,vgabios}.bin)
3239
3259
  -nographic Serial-only guest (skip VGA)
3240
3260
 
3241
3261
  Notes:
@@ -3243,19 +3263,19 @@ Notes:
3243
3263
  (Alpine, FreeDOS, Buildroot Linux) work best.
3244
3264
  - The copy.sh Arch Linux image boots via -state + -fs9p; see the v86 skill.
3245
3265
  - BIOS blobs are not bundled; download once:
3246
- mkdir -p ${Pz}
3247
- curl -o ${Pz}/seabios.bin https://raw.githubusercontent.com/copy/v86/master/bios/seabios.bin
3248
- curl -o ${Pz}/vgabios.bin https://raw.githubusercontent.com/copy/v86/master/bios/vgabios.bin
3249
- `,Iz=`v86: BIOS images not found. Download them once:
3250
- mkdir -p ${Pz}
3251
- curl -o ${Pz}/seabios.bin https://raw.githubusercontent.com/copy/v86/master/bios/seabios.bin
3252
- curl -o ${Pz}/vgabios.bin https://raw.githubusercontent.com/copy/v86/master/bios/vgabios.bin
3253
- or pass -bios / -vgabios with explicit VFS paths.`,Lz={"-n":Rz,"-name":Rz,"--name":Rz,"-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)=>zz(e,`cdrom`,t),"-hda":(e,t)=>zz(e,`hda`,t),"-fda":(e,t)=>zz(e,`fda`,t),"-kernel":(e,t)=>zz(e,`kernel`,t),"-initrd":(e,t)=>zz(e,`initrd`,t),"-append":(e,t)=>zz(e,`append`,t),"-bios":(e,t)=>zz(e,`bios`,t),"-vgabios":(e,t)=>zz(e,`vgabios`,t),"-state":(e,t)=>zz(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 Rz(e,t){return/^[A-Za-z0-9_-]+$/.test(t)?(e.name=t,null):`invalid VM name '${t}'`}function zz(e,t,n){return e[t]=n,null}const Bz=[...Object.keys(Lz),`--fps`,`--tail`,`--send`,`--to`];function Vz(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(Lz,r)?Lz[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 Hz(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 Uz(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 Wz(e){return pa(e)||Q(`no VM named '${e}' — boot one with \`v86 start -n ${e} ...\``)}function Gz(e){return`exitCode`in e}async function Kz(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 qz={a:801,c:306,d:531};function Jz(){let e=globalThis.__slicc_pm;return e instanceof Object&&typeof e.signal==`function`?e:null}function Yz(e={}){return S(`v86`,async(t,n)=>{if(t.length===0||t[0]===`--help`||t[0]===`-h`||t[0]===`help`)return $(Fz);if(t[0]===`--version`)return Xz(n,e);let r=t[0];if(w(t.slice(1),{valueFlags:Bz}))return $(st(`v86`,r,Fz,{prefix:`v86`}));let i=ot(t.slice(1));try{switch(r){case`start`:return await nB(i,n,e);case`ls`:return iB();case`type`:return await cB(i,n);case`key`:return await lB(i,n);case`mouse`:return await dB(i,n);case`screenshot`:return await fB(i,n);case`text`:return await pB(i,n);case`serve`:return mB(i);case`serial`:return hB(i);case`state`:return await gB(i,n);case`stop`:return await _B(i,e);default:return Q(`unknown subcommand '${r}' — see \`v86 --help\``)}}catch(e){return Q(e instanceof Error?e.message:String(e))}})}async function Xz(e,t){if(t.loadEngine)return $(`v86 ${(await t.loadEngine(Hz(e))).version} (qemu-flavored CLI)\n`);let n=await ek(Hz(e));return n?$(`v86 ${n.version} (qemu-flavored CLI)\n`):Q(YO)}async function Zz(e,t,n){if(e.state&&!e.bios&&!e.vgabios)return null;let r=await Kz(t,e.bios??`${Pz}/seabios.bin`,`-bios`);if(`exitCode`in r)return e.bios?r:Q(Iz.replace(/^v86: /u,``));if(n.bios=r,e.nographic)return null;let i=await Kz(t,e.vgabios??`${Pz}/vgabios.bin`,`-vgabios`);return`exitCode`in i?e.vgabios?i:Q(Iz.replace(/^v86: /u,``)):(n.vga_bios=i,null)}async function Qz(e,t,n){let r=await Zz(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 Kz(t,a,`-${r}`);if(`exitCode`in o)return o;n[i]=o}if(e.append&&(n.cmdline=e.append),e.boot&&(n.boot_order=qz[e.boot]),e.state){let r=await Kz(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 $z=6e4;function eB(e){return e.v86?Promise.resolve():new Promise((t,n)=>{let r=setTimeout(()=>n(Error(`engine init timed out after ${$z/1e3}s`)),$z);e.add_listener(`emulator-loaded`,()=>{clearTimeout(r),t()})})}function tB(e,t){let n=e.network_adapter;if(!n||typeof n.fetch!=`function`)return Q(`relay=fetch: engine exposed no fetch-relay network adapter`);let r=t.proxiedFetch??g();return n.fetch=async(e,t)=>{let n=e.replace(/^http:\/\/(?!localhost[:/]|127\.0\.0\.1[:/])/u,`https://`),i={};t?.headers?.forEach((e,t)=>{i[t]=e});let a;if(t?.body){let e=``;for(let n of t.body)e+=String.fromCharCode(n);a=e}let o=await r(n,{method:t?.method,headers:i,body:a}),s=o.body,c=s.buffer.slice(s.byteOffset,s.byteOffset+s.byteLength);return{status:o.status,statusText:o.statusText,headers:new Headers(o.headers),redirected:!1,url:o.url,arrayBuffer:async()=>c}},null}async function nB(e,t,n){let r=Vz(e);if(!r.ok)return Q(r.error);let i=r.parsed;if(pa(i.name))return Q(`VM '${i.name}' already running — stop it first or pick another -n name`);let a=Hz(t),o=n.loadEngine?await n.loadEngine(a):await ZO({ipk:a}),s={wasm_fn:nk(o.wasmModule),memory_size:i.memoryMib*1024*1024,vga_memory_size:i.vgaMemoryMib*1024*1024,autostart:!1,disable_speaker:!0,fastboot:!0},c=await Qz(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??Jz();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`,()=>{rB(u,d)})}fa(u);try{if(await eB(l),i.netRelay===`fetch`){let e=tB(l,n);if(e)return await rB(u,d),e}da(u),await l.run()}catch(e){return await rB(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 rB(e,t){ma(e),ua(e.name),import(`./v86-DKE8ZbX9.js`).then(({unregisterV86Computer:t})=>t(e.name)).catch(()=>{});try{e.emulator.is_running()&&await e.emulator.stop()}catch{}try{await e.emulator.destroy()}catch{}t&&e.pid!==null&&t.exit(e.pid,null)}function iB(){let e=la();if(e.length===0)return $(`no VMs running
3266
+ mkdir -p ${Fz}
3267
+ curl -o ${Fz}/seabios.bin https://raw.githubusercontent.com/copy/v86/master/bios/seabios.bin
3268
+ curl -o ${Fz}/vgabios.bin https://raw.githubusercontent.com/copy/v86/master/bios/vgabios.bin
3269
+ `,Lz=`v86: BIOS images not found. Download them once:
3270
+ mkdir -p ${Fz}
3271
+ curl -o ${Fz}/seabios.bin https://raw.githubusercontent.com/copy/v86/master/bios/seabios.bin
3272
+ curl -o ${Fz}/vgabios.bin https://raw.githubusercontent.com/copy/v86/master/bios/vgabios.bin
3273
+ or pass -bios / -vgabios with explicit VFS paths.`,Rz={"-n":zz,"-name":zz,"--name":zz,"-m":(e,t)=>{let n=Number.parseInt(t,10);return!Number.isFinite(n)||n<=0?`-m requires a positive MiB value`:n>512?`-m ${n} exceeds the 512 MiB cap`:(e.memoryMib=n,null)},"-vga":(e,t)=>{let n=Number.parseInt(t,10);return!Number.isFinite(n)||n<=0?`-vga requires a positive MiB value`:n>64?`-vga ${n} exceeds the 64 MiB cap`:(e.vgaMemoryMib=n,null)},"-cdrom":(e,t)=>Bz(e,`cdrom`,t),"-hda":(e,t)=>Bz(e,`hda`,t),"-fda":(e,t)=>Bz(e,`fda`,t),"-kernel":(e,t)=>Bz(e,`kernel`,t),"-initrd":(e,t)=>Bz(e,`initrd`,t),"-append":(e,t)=>Bz(e,`append`,t),"-bios":(e,t)=>Bz(e,`bios`,t),"-vgabios":(e,t)=>Bz(e,`vgabios`,t),"-state":(e,t)=>Bz(e,`state`,t),"-fs9p":(e,t)=>/^https?:\/\//u.test(t)?(e.fs9p=t,null):`-fs9p requires an http(s) base URL`,"-net":(e,t)=>{let[n,...r]=t.split(`,`);if(n!==`ne2k`&&n!==`virtio`)return`-net requires ne2k or virtio`;for(let t of r){if(t!==`relay=fetch`)return`-net: unknown option '${t}' (only relay=fetch)`;e.netRelay=`fetch`}return e.net=n,null},"-boot":(e,t)=>t!==`a`&&t!==`c`&&t!==`d`?`-boot requires a, c, or d`:(e.boot=t,null)};function zz(e,t){return/^[A-Za-z0-9_-]+$/.test(t)?(e.name=t,null):`invalid VM name '${t}'`}function Bz(e,t,n){return e[t]=n,null}const Vz=[...Object.keys(Rz),`--fps`,`--tail`,`--send`,`--to`];function Hz(e){let t={name:`vm0`,memoryMib:128,vgaMemoryMib:8,nographic:!1};for(let n=0;n<e.length;n++){let r=e[n];if(r===`-nographic`){t.nographic=!0;continue}let i=Object.hasOwn(Rz,r)?Rz[r]:void 0;if(!i)return{ok:!1,error:`unknown option '${r}'`};let a=n+1<e.length?e[n+1]:null;if(a===null)return{ok:!1,error:`${r} requires a value`};let o=i(t,a);if(o)return{ok:!1,error:o};n++}return!t.cdrom&&!t.hda&&!t.fda&&!t.kernel&&!t.state?{ok:!1,error:`no bootable media (-cdrom, -hda, -fda, -kernel, or -state required)`}:{ok:!0,parsed:t}}function Uz(e){return{reader:{exists:t=>e.fs.exists(t),isDirectory:async t=>{try{return(await e.fs.stat(t)).isDirectory}catch{return!1}},readFile:t=>e.fs.readFile(t)},readBytes:t=>e.fs.readFileBuffer(t),fromDir:e.cwd}}function Q(e){return{stdout:``,stderr:`v86: ${e}\n`,exitCode:1}}function $(e=``){return{stdout:e,stderr:``,exitCode:0}}function Wz(e){let t=[],n=`vm0`;for(let r=0;r<e.length;r++){if(e[r]===`-n`||e[r]===`-name`||e[r]===`--name`){let t=e[r+1];if(t){n=t,r++;continue}}t.push(e[r])}return{name:n,rest:t}}function Gz(e){return pa(e)||Q(`no VM named '${e}' — boot one with \`v86 start -n ${e} ...\``)}function Kz(e){return`exitCode`in e}async function qz(e,t,n){let r=e.fs.resolvePath(e.cwd,t);if(!await e.fs.exists(r))return Q(`${n}: no such file: ${t}`);let i=await e.fs.readFileBuffer(r),a=new ArrayBuffer(i.byteLength);return new Uint8Array(a).set(i),{buffer:a}}const Jz={a:801,c:306,d:531};function Yz(){let e=globalThis.__slicc_pm;return e instanceof Object&&typeof e.signal==`function`?e:null}function Xz(e={}){return S(`v86`,async(t,n)=>{if(t.length===0||t[0]===`--help`||t[0]===`-h`||t[0]===`help`)return $(Iz);if(t[0]===`--version`)return Zz(n,e);let r=t[0];if(w(t.slice(1),{valueFlags:Vz}))return $(st(`v86`,r,Iz,{prefix:`v86`}));let i=ot(t.slice(1));try{switch(r){case`start`:return await rB(i,n,e);case`ls`:return aB();case`type`:return await lB(i,n);case`key`:return await uB(i,n);case`mouse`:return await fB(i,n);case`screenshot`:return await pB(i,n);case`text`:return await mB(i,n);case`serve`:return hB(i);case`serial`:return gB(i);case`state`:return await _B(i,n);case`stop`:return await vB(i,e);default:return Q(`unknown subcommand '${r}' — see \`v86 --help\``)}}catch(e){return Q(e instanceof Error?e.message:String(e))}})}async function Zz(e,t){if(t.loadEngine)return $(`v86 ${(await t.loadEngine(Uz(e))).version} (qemu-flavored CLI)\n`);let n=await tk(Uz(e));return n?$(`v86 ${n.version} (qemu-flavored CLI)\n`):Q(XO)}async function Qz(e,t,n){if(e.state&&!e.bios&&!e.vgabios)return null;let r=await qz(t,e.bios??`${Fz}/seabios.bin`,`-bios`);if(`exitCode`in r)return e.bios?r:Q(Lz.replace(/^v86: /u,``));if(n.bios=r,e.nographic)return null;let i=await qz(t,e.vgabios??`${Fz}/vgabios.bin`,`-vgabios`);return`exitCode`in i?e.vgabios?i:Q(Lz.replace(/^v86: /u,``)):(n.vga_bios=i,null)}async function $z(e,t,n){let r=await Qz(e,t,n);if(r)return r;for(let[r,i]of[[`cdrom`,`cdrom`],[`hda`,`hda`],[`fda`,`fda`],[`kernel`,`bzimage`],[`initrd`,`initrd`]]){let a=e[r];if(!a)continue;let o=await qz(t,a,`-${r}`);if(`exitCode`in o)return o;n[i]=o}if(e.append&&(n.cmdline=e.append),e.boot&&(n.boot_order=Jz[e.boot]),e.state){let r=await qz(t,e.state,`-state`);if(`exitCode`in r)return r;n.initial_state=r}return e.fs9p&&(n.filesystem={baseurl:e.fs9p}),e.net&&(n.net_device=e.netRelay===`fetch`?{type:e.net,relay_url:`fetch`}:{type:e.net}),null}const eB=6e4;function tB(e){return e.v86?Promise.resolve():new Promise((t,n)=>{let r=setTimeout(()=>n(Error(`engine init timed out after ${eB/1e3}s`)),eB);e.add_listener(`emulator-loaded`,()=>{clearTimeout(r),t()})})}function nB(e,t){let n=e.network_adapter;if(!n||typeof n.fetch!=`function`)return Q(`relay=fetch: engine exposed no fetch-relay network adapter`);let r=t.proxiedFetch??g();return n.fetch=async(e,t)=>{let n=e.replace(/^http:\/\/(?!localhost[:/]|127\.0\.0\.1[:/])/u,`https://`),i={};t?.headers?.forEach((e,t)=>{i[t]=e});let a;if(t?.body){let e=``;for(let n of t.body)e+=String.fromCharCode(n);a=e}let o=await r(n,{method:t?.method,headers:i,body:a}),s=o.body,c=s.buffer.slice(s.byteOffset,s.byteOffset+s.byteLength);return{status:o.status,statusText:o.statusText,headers:new Headers(o.headers),redirected:!1,url:o.url,arrayBuffer:async()=>c}},null}async function rB(e,t,n){let r=Hz(e);if(!r.ok)return Q(r.error);let i=r.parsed;if(pa(i.name))return Q(`VM '${i.name}' already running — stop it first or pick another -n name`);let a=Uz(t),o=n.loadEngine?await n.loadEngine(a):await QO({ipk:a}),s={wasm_fn:rk(o.wasmModule),memory_size:i.memoryMib*1024*1024,vga_memory_size:i.vgaMemoryMib*1024*1024,autostart:!1,disable_speaker:!0,fastboot:!0},c=await $z(i,t,s);if(c)return c;let l=new o.V86(s),u={name:i.name,emulator:l,engineVersion:o.version,pid:null,startedAt:Date.now(),bootArgv:[`v86`,`start`,...e],serial:{buffer:``},screen:{mode:`text`,width:0,height:0,frame:null},serve:null},d=n.processManager??Yz();if(d){let e=d.spawn({kind:`net`,argv:u.bootArgv,cwd:t.cwd,owner:{kind:`system`}});u.pid=e.pid,e.abort.signal.addEventListener(`abort`,()=>{iB(u,d)})}fa(u);try{if(await tB(l),i.netRelay===`fetch`){let e=nB(l,n);if(e)return await iB(u,d),e}da(u),await l.run()}catch(e){return await iB(u,d),Q(`boot failed: ${e instanceof Error?e.message:String(e)}`)}u.onScreenChange=()=>{import(`./registry-DfuJBCKY.js`).then(({getComputerRegistry:e})=>{e()?.refresh(`v86:${u.name}`)})},import(`./v86-DKE8ZbX9.js`).then(({registerV86Computer:e})=>e(u)).catch(()=>{});let f=u.pid===null?``:` (pid ${u.pid})`;return $(`VM '${i.name}' booting in the background${f}.\nDrive it with: v86 text -n ${i.name} | v86 screenshot -n ${i.name} | v86 type -n ${i.name} "..."\n`)}async function iB(e,t){ma(e),ua(e.name),import(`./v86-DKE8ZbX9.js`).then(({unregisterV86Computer:t})=>t(e.name)).catch(()=>{});try{e.emulator.is_running()&&await e.emulator.stop()}catch{}try{await e.emulator.destroy()}catch{}t&&e.pid!==null&&t.exit(e.pid,null)}function aB(){let e=la();if(e.length===0)return $(`no VMs running
3254
3274
  `);let t=[`NAME PID STATE UP BOOT`];for(let n of e){let e=Math.round((Date.now()-n.startedAt)/1e3),r=e>=60?`${Math.floor(e/60)}m${e%60}s`:`${e}s`;t.push(`${n.name.padEnd(10)} ${String(n.pid??`-`).padEnd(6)} ${(n.emulator.is_running()?`running`:`stopped`).padEnd(9)} ${r.padEnd(9)} `+n.bootArgv.slice(2).join(` `))}return $(`${t.join(`
3255
- `)}\n`)}function aB(e,t){return`prefer: computer ${e} -c ${t}\n`}async function oB(e,t,n,r){let i=Wz(t);if(Gz(i))return i;let[{runComputer:a},{getComputerRegistry:o,installComputerRegistry:s},c]=await Promise.all([import(`./run-aUbSngAa.js`).then(e=>e.t),import(`./registry-DfuJBCKY.js`),import(`./v86-DKE8ZbX9.js`)]),l=c.v86ComputerId(t),u=o()??s(null);return u.get(l)||c.registerV86Computer(i,u),sB(await a([`-c`,l,...n],e,{registry:u}),r,l)}function sB(e,t,n){let r=aB(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 cB(e,t){let{name:n,rest:r}=Uz(e);if(r.length===0){let e=Wz(n);return Gz(e)?e:Q(`type: no text supplied`)}return oB(t,n,[`type`,`--`,...r],`type`)}async function lB(e,t){let{name:n,rest:r}=Uz(e);if(r.length===0){let e=Wz(n);return Gz(e)?e:Q(`key: no chord supplied`)}return oB(t,n,[`key`,...r],`key`)}const uB=[`left`,`middle`,`right`];async function dB(e,t){let{name:n,rest:r}=Uz(e),i=Wz(n);if(Gz(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?oB(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>`):oB(t,n,[`--native`,`mousemove`,e,i,`--relative`],`mousemove`)}if(o===`click`){let e=r[1]??`left`;if(!uB.includes(e))return Q(`mouse: unknown button '${r[1]}'`);let i=[`click`,e];return r.includes(`--double`)&&i.push(`--repeat`,`2`),oB(t,n,i,`click`)}return Q(`mouse: expected move <dx> <dy>, click [button], or --to <x>,<y>`)}async function fB(e,t){let{name:n,rest:r}=Uz(e);return oB(t,n,[`screenshot`,...r],`screenshot`)}async function pB(e,t){let{name:n}=Uz(e);return oB(t,n,[`text`],`text`)}function mB(e){let{name:t}=Uz(e);return $(`v86 serve is retired.\nUse: computer watch -c v86:${t}\nLive frames go to the overlay, lightbox, and bash rows.\n`)}function hB(e){let{name:t,rest:n}=Uz(e),r=Wz(t);if(Gz(r))return r;let i=n.indexOf(`--send`);if(i!==-1){let e=n.slice(i+1).join(` `).replace(/\\n/gu,`
3275
+ `)}\n`)}function oB(e,t){return`prefer: computer ${e} -c ${t}\n`}async function sB(e,t,n,r){let i=Gz(t);if(Kz(i))return i;let[{runComputer:a},{getComputerRegistry:o,installComputerRegistry:s},c]=await Promise.all([import(`./run-aUbSngAa.js`).then(e=>e.t),import(`./registry-DfuJBCKY.js`),import(`./v86-DKE8ZbX9.js`)]),l=c.v86ComputerId(t),u=o()??s(null);return u.get(l)||c.registerV86Computer(i,u),cB(await a([`-c`,l,...n],e,{registry:u}),r,l)}function cB(e,t,n){let r=oB(t,n);return e.exitCode===0?$(`${e.stdout}${r}`):e.stderr.includes(`screenshot failed after input`)?$(`${e.stderr}${r}`):{stdout:e.stdout,stderr:e.stderr.replace(/^computer: /u,`v86: `),exitCode:e.exitCode}}async function lB(e,t){let{name:n,rest:r}=Wz(e);if(r.length===0){let e=Gz(n);return Kz(e)?e:Q(`type: no text supplied`)}return sB(t,n,[`type`,`--`,...r],`type`)}async function uB(e,t){let{name:n,rest:r}=Wz(e);if(r.length===0){let e=Gz(n);return Kz(e)?e:Q(`key: no chord supplied`)}return sB(t,n,[`key`,...r],`key`)}const dB=[`left`,`middle`,`right`];async function fB(e,t){let{name:n,rest:r}=Wz(e),i=Gz(n);if(Kz(i))return i;let a=r.indexOf(`--to`);if(a!==-1){let e=r[a+1],i=e?/^(\d+),(\d+)$/u.exec(e):null;return i?sB(t,n,[`--native`,`mousemove`,i[1],i[2]],`mousemove`):Q(`mouse: --to requires <x>,<y>`)}let o=r[0];if(o===`move`){let e=r[1],i=r[2];return e===void 0||i===void 0||!Number.isFinite(Number(e))||!Number.isFinite(Number(i))?Q(`mouse: move requires <dx> <dy>`):sB(t,n,[`--native`,`mousemove`,e,i,`--relative`],`mousemove`)}if(o===`click`){let e=r[1]??`left`;if(!dB.includes(e))return Q(`mouse: unknown button '${r[1]}'`);let i=[`click`,e];return r.includes(`--double`)&&i.push(`--repeat`,`2`),sB(t,n,i,`click`)}return Q(`mouse: expected move <dx> <dy>, click [button], or --to <x>,<y>`)}async function pB(e,t){let{name:n,rest:r}=Wz(e);return sB(t,n,[`screenshot`,...r],`screenshot`)}async function mB(e,t){let{name:n}=Wz(e);return sB(t,n,[`text`],`text`)}function hB(e){let{name:t}=Wz(e);return $(`v86 serve is retired.\nUse: computer watch -c v86:${t}\nLive frames go to the overlay, lightbox, and bash rows.\n`)}function gB(e){let{name:t,rest:n}=Wz(e),r=Gz(t);if(Kz(r))return r;let i=n.indexOf(`--send`);if(i!==-1){let e=n.slice(i+1).join(` `).replace(/\\n/gu,`
3256
3276
  `);return e?(r.emulator.serial0_send(e),$()):Q(`serial: --send requires text`)}let a=n.indexOf(`--tail`);if(a!==-1){let e=Number.parseInt(n[a+1]??`25`,10);return $(`${r.serial.buffer.split(`
3257
3277
  `).slice(-Math.max(1,e)).join(`
3258
- `)}\n`)}return $(r.serial.buffer?`${r.serial.buffer}\n`:``)}async function gB(e,t){let{name:n,rest:r}=Uz(e),i=Wz(n);if(Gz(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 _B(e,t){let{name:n,rest:r}=Uz(e),i=Wz(n);if(Gz(i))return i;let a=t.processManager??Jz();return r.includes(`--force`)&&a&&i.pid!==null?(a.signal(i.pid,`SIGKILL`),$(`VM '${n}' killed\n`)):(await rB(i,a),$(`VM '${n}' stopped\n`))}function vB(e={}){return S(`wasm`,async(t,n)=>{let{runWasmCommand:r}=await import(`./run-CGZiR3xh.js`);return r(t,n,{processConfig:e.buildProcessConfig?.(n.env),terminal:e.terminal,gate:e.gate,commands:e.commands,gitIdentity:e.gitIdentity})})}const yB=[`--name`,`--filter`,`--scoop`],bB={state:`inactive`,session:null};function xB(){return{stdout:`usage: webhook <command> [options]
3278
+ `)}\n`)}return $(r.serial.buffer?`${r.serial.buffer}\n`:``)}async function _B(e,t){let{name:n,rest:r}=Wz(e),i=Gz(n);if(Kz(i))return i;let[a,o]=r;if(a!==`save`&&a!==`load`||!o)return Q(`state: expected save|load <file>`);let s=t.fs.resolvePath(t.cwd,o);if(a===`save`){let e=await i.emulator.save_state();return await t.fs.writeFile(s,new Uint8Array(e)),$(`${s} (${e.byteLength} bytes)\n`)}if(!await t.fs.exists(s))return Q(`state: no such file: ${o}`);let c=await t.fs.readFileBuffer(s),l=new ArrayBuffer(c.byteLength);return new Uint8Array(l).set(c),await i.emulator.restore_state(l),$()}async function vB(e,t){let{name:n,rest:r}=Wz(e),i=Gz(n);if(Kz(i))return i;let a=t.processManager??Yz();return r.includes(`--force`)&&a&&i.pid!==null?(a.signal(i.pid,`SIGKILL`),$(`VM '${n}' killed\n`)):(await iB(i,a),$(`VM '${n}' stopped\n`))}function yB(e={}){return S(`wasm`,async(t,n)=>{let{runWasmCommand:r}=await import(`./run-CGZiR3xh.js`);return r(t,n,{processConfig:e.buildProcessConfig?.(n.env),terminal:e.terminal,gate:e.gate,commands:e.commands,gitIdentity:e.gitIdentity})})}const bB=[`--name`,`--filter`,`--scoop`],xB={state:`inactive`,session:null};function SB(){return{stdout:`usage: webhook <command> [options]
3259
3279
 
3260
3280
  Commands:
3261
3281
  create [--scoop <name>] [--name <name>] [--filter <code>] Create a new webhook endpoint
@@ -3275,21 +3295,21 @@ Examples:
3275
3295
  webhook create --scoop slack-relay --name slack --filter "(e) => ({ text: e.body.text, user: e.body.user })"
3276
3296
  webhook list
3277
3297
  webhook delete abc123
3278
- `,stderr:``,exitCode:0}}function SB(e){return e().session?.webhookUrl??null}function CB(e,t,n){return t?ha(t,e):n()?ga(self.location.href,e):`(URL unavailable — connect a leader tray)`}function wB(e){return{stdout:``,stderr:`webhook ${e}: kernel host has not booted yet — try again in a moment\n`,exitCode:1}}async function TB(e){if(e.length!==1)return{stdout:``,stderr:`webhook rotate: takes no arguments
3298
+ `,stderr:``,exitCode:0}}function CB(e){return e().session?.webhookUrl??null}function wB(e,t,n){return t?ha(t,e):n()?ga(self.location.href,e):`(URL unavailable — connect a leader tray)`}function TB(e){return{stdout:``,stderr:`webhook ${e}: kernel host has not booted yet — try again in a moment\n`,exitCode:1}}async function EB(e){if(e.length!==1)return{stdout:``,stderr:`webhook rotate: takes no arguments
3279
3299
  `,exitCode:1};let t=y();if(!t)return{stdout:``,stderr:`webhook rotate: no leader panel connected
3280
3300
  `,exitCode:1};try{return await t.call(`tray-webhook-rotate`,void 0),{stdout:`Rotated webhook delivery secret. Old URLs no longer work; run webhook list for replacement URLs.
3281
3301
  `,stderr:``,exitCode:0}}catch{return{stdout:``,stderr:`webhook rotate: rotation failed; reconnect the leader and retry
3282
- `,exitCode:1}}}async function EB(e,t,n){let r=C(e.slice(1),{value:yB});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
3283
- `,exitCode:1};let s=kB(t);if(s)return s;let c=await zy();if(!c)return wB(`create`);let l=await Vy(c,`webhook create`,r.values.get(`--scoop`));if(l)return{stdout:``,stderr:l,exitCode:1};let u=await c.createWebhook(i,o,a),d=AB(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 DB(e,t){let n=C(e.slice(1),{});if(`error`in n)return{stdout:``,stderr:`webhook list: ${n.error}\n`,exitCode:1};let r=await zy();if(!r)return wB(`list`);let i=await r.listWebhooks();if(i.length===0)return{stdout:`No active webhooks
3284
- `,stderr:``,exitCode:0};let{trayUrlBase:a,urlResolutionError:o}=jB(t);return{stdout:MB(i.map(e=>({id:e.id,name:e.name,url:CB(e.id,a,t.hasLocalNodeServer),createdAt:e.createdAt,filter:e.filter,scoop:e.scoop})),a,o,t.hasLocalNodeServer),stderr:``,exitCode:0}}async function OB(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
3302
+ `,exitCode:1}}}async function DB(e,t,n){let r=C(e.slice(1),{value:bB});if(`error`in r)return{stdout:``,stderr:`webhook create: ${r.error}\n`,exitCode:1};let i=r.values.get(`--name`)??`default`,a=r.values.get(`--filter`),o=Zi(r.values.get(`--scoop`),n);if(!t.hasLocalNodeServer()&&a)return{stdout:``,stderr:`webhook create: --filter is not supported in extension mode (CSP forbids dynamic eval) — drop --filter, or use standalone CLI mode
3303
+ `,exitCode:1};let s=AB(t);if(s)return s;let c=await zy();if(!c)return TB(`create`);let l=await Vy(c,`webhook create`,r.values.get(`--scoop`));if(l)return{stdout:``,stderr:l,exitCode:1};let u=await c.createWebhook(i,o,a),d=jB(u.id,t),f=`Created webhook "${u.name}"\nID: ${u.id}\nURL: ${d}\n`;return u.scoop&&(f+=`Scoop: ${u.scoop}\n`),u.filter&&(f+=`Filter: ${u.filter}\n`),{stdout:f,stderr:``,exitCode:0}}async function OB(e,t){let n=C(e.slice(1),{});if(`error`in n)return{stdout:``,stderr:`webhook list: ${n.error}\n`,exitCode:1};let r=await zy();if(!r)return TB(`list`);let i=await r.listWebhooks();if(i.length===0)return{stdout:`No active webhooks
3304
+ `,stderr:``,exitCode:0};let{trayUrlBase:a,urlResolutionError:o}=MB(t);return{stdout:NB(i.map(e=>({id:e.id,name:e.name,url:wB(e.id,a,t.hasLocalNodeServer),createdAt:e.createdAt,filter:e.filter,scoop:e.scoop})),a,o,t.hasLocalNodeServer),stderr:``,exitCode:0}}async function kB(e,t){let n=C(e.slice(1),{});if(`error`in n)return{stdout:``,stderr:`webhook delete: ${n.error}\n`,exitCode:1};let r=n.positionals[0];if(n.positionals.length>1)return{stdout:``,stderr:`webhook delete: requires exactly one ID
3285
3305
  `,exitCode:1};if(!r)return{stdout:``,stderr:`webhook delete: requires an ID
3286
- `,exitCode:1};let i=await zy();if(!i)return wB(`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
3287
- `,exitCode:1}}return await i.deleteWebhook(r)?{stdout:`Deleted webhook "${r}"\n`,stderr:``,exitCode:0}:{stdout:``,stderr:`webhook delete: webhook "${r}" not found\n`,exitCode:1}}function kB(e){if(e.hasLocalNodeServer())return null;if(!SB(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}")`)+`
3288
- `,exitCode:1}}return null}function AB(e,t){try{return CB(e,SB(t.getLeaderStatus),t.hasLocalNodeServer)}catch(e){return`(URL resolution failed: ${e instanceof Error?e.message:String(e)})`}}function jB(e){try{return{trayUrlBase:SB(e.getLeaderStatus),urlResolutionError:null}}catch(e){return{trayUrlBase:null,urlResolutionError:e instanceof Error?e.message:String(e)}}}function MB(e,t,n,r){let i=`Active webhooks:
3306
+ `,exitCode:1};let i=await zy();if(!i)return TB(`delete`);let a=y();try{if(a){if((await a.call(`tray-webhook-revoke`,{webhookId:r}))?.ok!==!0)throw Error(`revocation not acknowledged`)}else if(t.getLeaderStatus().session?.webhookUrl?.includes(`/wh/`))throw Error(`no leader panel`)}catch{return{stdout:``,stderr:`webhook delete: revocation failed; registration retained, reconnect the leader and retry
3307
+ `,exitCode:1}}return await i.deleteWebhook(r)?{stdout:`Deleted webhook "${r}"\n`,stderr:``,exitCode:0}:{stdout:``,stderr:`webhook delete: webhook "${r}" not found\n`,exitCode:1}}function AB(e){if(e.hasLocalNodeServer())return null;if(!CB(e.getLeaderStatus)){let t=e.getLeaderStatus().state;return{stdout:``,stderr:(t===`leader`?`webhook create: tray session is not connected yet — wait for the leader to attach`:`webhook create: requires extension-leader mode with a tray worker URL configured (current state: "${t}")`)+`
3308
+ `,exitCode:1}}return null}function jB(e,t){try{return wB(e,CB(t.getLeaderStatus),t.hasLocalNodeServer)}catch(e){return`(URL resolution failed: ${e instanceof Error?e.message:String(e)})`}}function MB(e){try{return{trayUrlBase:CB(e.getLeaderStatus),urlResolutionError:null}}catch(e){return{trayUrlBase:null,urlResolutionError:e instanceof Error?e.message:String(e)}}}function NB(e,t,n,r){let i=`Active webhooks:
3289
3309
  `;for(let t of e)i+=` ${t.id} ${t.name.padEnd(20)} ${t.url}`,t.scoop&&(i+=` -> ${t.scoop}`),t.filter&&(i+=` [filtered]`),i+=`
3290
3310
  `;return n?i+=`\nNote: webhook URL resolution failed (${n}). Try again once the tray is connected.\n`:!r()&&!t&&(i+=`
3291
3311
  Note: webhook URLs require a leader tray. Configure one in Settings to expose POST endpoints.
3292
- `),i}function NB(e={}){let t={hasLocalNodeServer:e.hasLocalNodeServer??(()=>!0),getLeaderStatus:e.getLeaderStatus??(()=>bB)};return S(`webhook`,async(e,n)=>{if(e.length===0)return xB();let r=e[0];if(w(e,{valueFlags:r===`create`?yB:void 0}))return xB();try{switch(r){case`create`:return await EB(e,t,n.env);case`list`:return await DB(e,t);case`delete`:return await OB(e,t);case`rotate`:return await TB(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 PB(){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 FB(){return{stdout:`usage: websocat [FLAGS] [OPTIONS] <ws://URL | wss://URL>
3312
+ `),i}function PB(e={}){let t={hasLocalNodeServer:e.hasLocalNodeServer??(()=>!0),getLeaderStatus:e.getLeaderStatus??(()=>xB)};return S(`webhook`,async(e,n)=>{if(e.length===0)return SB();let r=e[0];if(w(e,{valueFlags:r===`create`?bB:void 0}))return SB();try{switch(r){case`create`:return await DB(e,t,n.env);case`list`:return await OB(e,t);case`delete`:return await kB(e,t);case`rotate`:return await EB(e);default:return{stdout:``,stderr:`webhook: unknown command "${r}"\n`,exitCode:1}}}catch(e){let t=e instanceof Error?e.message:String(e);return{stdout:``,stderr:`webhook ${r??`?`}: ${t}\n`,exitCode:1}}})}function FB(){return{text:!0,binary:!1,oneMessage:!1,noClose:!1,exitOnEof:!1,unidirectional:!1,unidirectionalReverse:!1,insecure:!1,quiet:!1,verbose:0,nullTerminated:!1,base64:!1,jsonrpc:!1,jsonrpcOmit:!1,bufferSize:65536,connTimeoutMs:3e4,customHeaders:[],showHelp:!1}}function IB(){return{stdout:`usage: websocat [FLAGS] [OPTIONS] <ws://URL | wss://URL>
3293
3313
 
3294
3314
  Minimal websocat client. Sends stdin lines as WebSocket messages and prints
3295
3315
  received messages to stdout. Server mode and advanced specifiers (exec:, tcp:,
@@ -3331,14 +3351,14 @@ EXAMPLES:
3331
3351
  echo 'Page.navigate {"url":"https://example.com"}' \\
3332
3352
  | websocat -1 --jsonrpc --jsonrpc-omit-jsonrpc \\
3333
3353
  ws://127.0.0.1:9222/devtools/page/<id>
3334
- `,stderr:``,exitCode:0}}const IB=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 LB(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 RB(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 zB(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 BB(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 VB(e,t){return t===`-v`?(e.verbose+=1,!0):t===`-vv`&&(e.verbose+=2,!0)}function HB(e,t,n,r,i){let a=LB(t,n,r,e);return a?(i(a.value),{nextIndex:a.next}):{stop:!0}}function UB(e,t,n,r,i,a,o){let s=LB(t,n,r,e);if(!s)return{stop:!0};let c=RB(e,s.value,i,o);return c===null?{stop:!0}:(a(c),{nextIndex:s.next})}function WB(e,t){return t.some(t=>e===t||e.startsWith(`${t}=`))}const GB=[(e,t,n,r)=>{if(!WB(r,[`--close-status-code`]))return null;let i=LB(t,n,`--close-status-code`,e);if(!i)return{stop:!0};let a=zB(e,i.value);return a===null?{stop:!0}:(e.closeStatus=a,{nextIndex:i.next})},(e,t,n,r)=>WB(r,[`--close-reason`])?HB(e,t,n,`--close-reason`,t=>{e.closeReason=t}):null,(e,t,n,r)=>WB(r,[`-B`,`--buffer-size`])?UB(e,t,n,r===`-B`?`-B`:`--buffer-size`,`--buffer-size`,t=>{e.bufferSize=t}):null,(e,t,n,r)=>WB(r,[`--max-messages`])?UB(e,t,n,`--max-messages`,`--max-messages`,t=>{e.maxMessages=t}):null,(e,t,n,r)=>WB(r,[`--protocol`])?HB(e,t,n,`--protocol`,t=>{e.protocol=t}):null,(e,t,n,r)=>{if(!WB(r,[`--ping-interval`]))return null;let i=LB(t,n,`--ping-interval`,e);return i?(e.pingInterval=Number(i.value),{nextIndex:i.next}):{stop:!0}},(e,t,n,r)=>WB(r,[`--conn-timeout`])?UB(e,t,n,`--conn-timeout`,`--conn-timeout`,t=>{e.connTimeoutMs=Math.round(t*1e3)},`positive seconds`):null,(e,t,n,r)=>WB(r,[`-H`,`--header`])?HB(e,t,n,r===`-H`?`-H`:`--header`,t=>{e.customHeaders.push(t)}):null];function KB(e,t,n,r){for(let i of GB){let a=i(e,t,n,r);if(a)return a}return null}function qB(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)
3335
- `)}function JB(e){let t=PB();for(let n=0;n<e.length;n+=1){let r=e[n];if(r===`-h`||r===`--help`)return t.showHelp=!0,t;if(IB.has(r)||IB.has(r.split(`=`)[0]))return t.error=`websocat: flag '${r}' is not supported in slicc's minimal client\n`,t;if(BB(t,r)||VB(t,r))continue;let i=KB(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 qB(t),t}function YB(e,t){if(!e)return[];let n=t?`\0`:`
3336
- `,r=e.split(n);return r.length>0&&r[r.length-1]===``&&r.pop(),r}function XB(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 ZB(e){try{return new TextDecoder(`utf-8`,{fatal:!1}).decode(e)}catch{return t(e)}}function QB(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 $B=1e4;function eV(){let e,t;return{promise:new Promise((n,r)=>{e=n,t=r}),resolve:e,reject:t}}function tV(){let e=!1,t=eV();return{...t,settle:n=>{e||(e=!0,t.resolve(n))}}}function nV(e,t){return e.length?e.join(t)+t:``}function rV(e){return e.length?e.join(`
3354
+ `,stderr:``,exitCode:0}}const LB=new Set([`-s`,`--server-mode`,`--oneshot`,`--socks5`,`--basic-auth`,`--basic-auth-file`,`--header-to-env`,`--server-header`,`--exec`,`--ws-c-uri`,`--restrict-uri`,`--unlink`,`--strict`,`-S`]);function RB(e,t,n,r){let i=e[t].indexOf(`=`);if(i!==-1&&e[t].startsWith(n))return{value:e[t].slice(i+1),next:t};let a=e[t+1];return a===void 0?(r.error=`websocat: missing value for ${n}\n`,null):{value:a,next:t+1}}function zB(e,t,n,r=`positive integer`){let i=Number(t);return!Number.isFinite(i)||i<=0?(e.error=`websocat: ${n} expects ${r}\n`,null):i}function BB(e,t){let n=Number(t);return!Number.isFinite(n)||n<1e3||n>4999?(e.error=`websocat: --close-status-code expects 1000..4999, got '${t}'\n`,null):n}function VB(e,t){let n={"-t":()=>{e.text=!0,e.binary=!1},"--text":()=>{e.text=!0,e.binary=!1},"-b":()=>{e.binary=!0,e.text=!1},"--binary":()=>{e.binary=!0,e.text=!1},"-1n":()=>{e.oneMessage=!0,e.noClose=!0},"-n1":()=>{e.oneMessage=!0,e.noClose=!0},"-1":()=>{e.oneMessage=!0},"--one-message":()=>{e.oneMessage=!0},"-n":()=>{e.noClose=!0},"--no-close":()=>{e.noClose=!0},"-E":()=>{e.exitOnEof=!0},"--exit-on-eof":()=>{e.exitOnEof=!0},"-u":()=>{e.unidirectional=!0},"--unidirectional":()=>{e.unidirectional=!0},"-U":()=>{e.unidirectionalReverse=!0},"--unidirectional-reverse":()=>{e.unidirectionalReverse=!0},"-k":()=>{e.insecure=!0},"--insecure":()=>{e.insecure=!0},"-q":()=>{e.quiet=!0},"-0":()=>{e.nullTerminated=!0},"--null-terminated":()=>{e.nullTerminated=!0},"--base64":()=>{e.base64=!0},"--jsonrpc":()=>{e.jsonrpc=!0},"--jsonrpc-omit-jsonrpc":()=>{e.jsonrpcOmit=!0,e.jsonrpc=!0}}[t];return n?(n(),!0):!1}function HB(e,t){return t===`-v`?(e.verbose+=1,!0):t===`-vv`&&(e.verbose+=2,!0)}function UB(e,t,n,r,i){let a=RB(t,n,r,e);return a?(i(a.value),{nextIndex:a.next}):{stop:!0}}function WB(e,t,n,r,i,a,o){let s=RB(t,n,r,e);if(!s)return{stop:!0};let c=zB(e,s.value,i,o);return c===null?{stop:!0}:(a(c),{nextIndex:s.next})}function GB(e,t){return t.some(t=>e===t||e.startsWith(`${t}=`))}const KB=[(e,t,n,r)=>{if(!GB(r,[`--close-status-code`]))return null;let i=RB(t,n,`--close-status-code`,e);if(!i)return{stop:!0};let a=BB(e,i.value);return a===null?{stop:!0}:(e.closeStatus=a,{nextIndex:i.next})},(e,t,n,r)=>GB(r,[`--close-reason`])?UB(e,t,n,`--close-reason`,t=>{e.closeReason=t}):null,(e,t,n,r)=>GB(r,[`-B`,`--buffer-size`])?WB(e,t,n,r===`-B`?`-B`:`--buffer-size`,`--buffer-size`,t=>{e.bufferSize=t}):null,(e,t,n,r)=>GB(r,[`--max-messages`])?WB(e,t,n,`--max-messages`,`--max-messages`,t=>{e.maxMessages=t}):null,(e,t,n,r)=>GB(r,[`--protocol`])?UB(e,t,n,`--protocol`,t=>{e.protocol=t}):null,(e,t,n,r)=>{if(!GB(r,[`--ping-interval`]))return null;let i=RB(t,n,`--ping-interval`,e);return i?(e.pingInterval=Number(i.value),{nextIndex:i.next}):{stop:!0}},(e,t,n,r)=>GB(r,[`--conn-timeout`])?WB(e,t,n,`--conn-timeout`,`--conn-timeout`,t=>{e.connTimeoutMs=Math.round(t*1e3)},`positive seconds`):null,(e,t,n,r)=>GB(r,[`-H`,`--header`])?UB(e,t,n,r===`-H`?`-H`:`--header`,t=>{e.customHeaders.push(t)}):null];function qB(e,t,n,r){for(let i of KB){let a=i(e,t,n,r);if(a)return a}return null}function JB(e){e.closeReason!==void 0&&e.closeStatus===void 0&&(e.error=`websocat: --close-reason requires --close-status-code (the WebSocket close frame cannot carry a reason without a status code)
3355
+ `)}function YB(e){let t=FB();for(let n=0;n<e.length;n+=1){let r=e[n];if(r===`-h`||r===`--help`)return t.showHelp=!0,t;if(LB.has(r)||LB.has(r.split(`=`)[0]))return t.error=`websocat: flag '${r}' is not supported in slicc's minimal client\n`,t;if(VB(t,r)||HB(t,r))continue;let i=qB(t,e,n,r);if(i){if(`stop`in i)return t;n=i.nextIndex;continue}if(r.startsWith(`-`))return t.error=`websocat: unknown flag '${r}'\n`,t;if(t.url)return t.error=`websocat: extra positional argument '${r}' — advanced mode is not supported\n`,t;t.url=r}return JB(t),t}function XB(e,t){if(!e)return[];let n=t?`\0`:`
3356
+ `,r=e.split(n);return r.length>0&&r[r.length-1]===``&&r.pop(),r}function ZB(e,t,n){let r=e.trim();if(!r)return e;let i=r.search(/\s/),a=i===-1?r:r.slice(0,i),o=i===-1?``:r.slice(i+1).trim(),s=[];if(o)try{s=JSON.parse(o)}catch{s=[o]}let c={id:t,method:a,params:s};return n||(c.jsonrpc=`2.0`),JSON.stringify(c)}function QB(e){try{return new TextDecoder(`utf-8`,{fatal:!1}).decode(e)}catch{return t(e)}}function $B(e){if(typeof e==`string`)return{bytes:new TextEncoder().encode(e),isBinary:!1};if(e instanceof ArrayBuffer)return{bytes:new Uint8Array(e),isBinary:!0};if(ArrayBuffer.isView(e)){let t=e;return{bytes:new Uint8Array(t.buffer,t.byteOffset,t.byteLength),isBinary:!0}}return{bytes:new TextEncoder().encode(String(e)),isBinary:!1}}const eV=1e4;function tV(){let e,t;return{promise:new Promise((n,r)=>{e=n,t=r}),resolve:e,reject:t}}function nV(){let e=!1,t=tV();return{...t,settle:n=>{e||(e=!0,t.resolve(n))}}}function rV(e,t){return e.length?e.join(t)+t:``}function iV(e){return e.length?e.join(`
3337
3357
  `)+`
3338
- `:``}function iV(e,t,n){e.quiet||t.push(`websocat: ${n}`)}function aV(e,t){e.verbose<1||(e.customHeaders.length>0&&iV(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&&iV(e,t,`--ping-interval has no effect in browsers (no ping API exposed)`),e.insecure&&iV(e,t,`-k/--insecure has no effect in browsers`))}function oV(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 sV(e,t,n,r){if(n.outLines.length<$B){n.outLines.push(r);return}n.droppedForOverflow===0&&iV(e,t,`output buffer reached ${$B} 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 cV(e,n,r){let{bytes:i,isBinary:a}=QB(r);return i.length>e.bufferSize&&(iV(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):ZB(i)}function lV(e,t){return e.maxMessages!==void 0&&t>=e.maxMessages||e.oneMessage}function uV(e,t,n){try{n===void 0?e.close(t):e.close(t,n)}catch{}}function dV(e,t){setTimeout(()=>{uV(t,e.closeStatus??1e3,e.closeReason)},0)}function fV(e,t,n){let r=YB(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=XB(n,i,t.jsonrpcOmit),i+=1),t.binary?e.send(new TextEncoder().encode(r).buffer):e.send(r),a+=1}return a}function pV(e,t,n){!t.oneMessage&&!t.noClose&&(t.exitOnEof||n===0)&&dV(t,e)}async function mV(e,t,n){let r=[];aV(e,r);let i=e.nullTerminated?`\0`:`
3339
- `,a=oV(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=eV(),u=tV(),d=0,f=!1,p=setTimeout(()=>{f=!0,uV(o,1e3),c||l.reject(Error(`connect timeout`))},e.connTimeoutMs),m=()=>{if(e.noClose){u.settle(d);return}uV(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=cV(e,r,t.data);sV(e,r,s,n)}s.received+=1,lV(e,s.received)&&(s.finishing=!0,m())}},o.onerror=()=>{f||(iV(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&&iV(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:nV(s.outLines,i),stderr:rV(r.concat([`websocat: ${t}`])),exitCode:t===`connect timeout`?124:1}}e.unidirectionalReverse?!e.noClose&&e.exitOnEof&&!e.oneMessage&&dV(e,o):pV(o,e,fV(o,e,t));let h=await u.promise;return s.droppedForOverflow>0&&iV(e,r,`dropped ${s.droppedForOverflow} inbound message(s) due to output buffer cap`),{stdout:nV(s.outLines,i),stderr:rV(r),exitCode:h}}function hV(e){return{stdout:``,stderr:e,exitCode:2}}function gV(e){return e.WebSocketCtor??(typeof WebSocket<`u`?WebSocket:void 0)}async function _V(e,t,n={}){let r=JB(e);if(r.showHelp)return FB();if(r.error)return hV(r.error);if(!r.url)return hV(`websocat: missing ws:// or wss:// URL (use --help for usage)
3340
- `);if(!/^wss?:\/\//i.test(r.url))return hV(`websocat: URL must start with ws:// or wss://, got '${r.url}'\n`);let i=gV(n);return i?mV(r,t.stdin,i):{stdout:``,stderr:`websocat: no WebSocket implementation available in this runtime
3341
- `,exitCode:1}}function vV(){return S(`websocat`,async(e,t)=>_V(e,{stdin:P(t.stdin)}))}function yV(){return S(`__wf_progress`,async()=>({stdout:``,stderr:``,exitCode:0}))}const bV={commands:new Map,collisions:[]};async function xV(e,t){let n=nr(t);return e.scriptCatalog?e.scriptCatalog.getJshIndex(n):e.fs?ar(e.fs,n):bV}async function SV(e){return e.scriptCatalog?e.scriptCatalog.getWorkflowCommands():e.fs?gi(e.fs):new Map}async function CV(e){return e.scriptCatalog?e.scriptCatalog.getWasmCommands():new Map}function wV(e,t){return`${e.glue} (wasm, ${e.pkg}${t?`, ${t}`:``})`}function TV(e,{jshPath:t,collision:n,wasm:r,wf:i}){let a=[`/usr/bin/${e}`];if((t||r||i)&&a.push(` (shadowed by built-in ${e})`),r&&a.push(` (shadowed ${wV(r)})`),t){let e=n?[t,...n.shadowedPaths]:[t];for(let t of e)a.push(` (shadowed ${t})`)}return a}function EV(e,{collision:t,wasm:n,wf:r}){let i=[e];for(let e of t?.shadowedPaths??[])i.push(` (shadowed ${e})`);return n&&i.push(` ${wV(n,`shadowed by .jsh`)}`),r&&i.push(` ${r.path} (workflow, shadowed by .jsh)`),i}function DV(e,t,n,r,i){let{jshPath:a,wasm:o,wf:s}=t;if(n.has(e))return{lines:TV(e,t),found:!0};if(a)return{lines:EV(a,t),found:!0};if(o){let e=[wV(o)];return s&&e.push(` ${s.path} (workflow, shadowed by wasm)`),{lines:e,found:!0}}return s?{lines:[`${s.path} (workflow)`],found:!0}:r.has(e)&&!i.has(e)?{lines:[`/usr/bin/${e}`],found:!0}:{lines:[],found:!1}}function OV(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
3358
+ `:``}function aV(e,t,n){e.quiet||t.push(`websocat: ${n}`)}function oV(e,t){e.verbose<1||(e.customHeaders.length>0&&aV(e,t,`-H/--header is accepted for parity but browsers do not allow setting WebSocket request headers; only --protocol is honored`),e.pingInterval!==void 0&&aV(e,t,`--ping-interval has no effect in browsers (no ping API exposed)`),e.insecure&&aV(e,t,`-k/--insecure has no effect in browsers`))}function sV(e,t){try{let n=t.protocol?new e(t.url,t.protocol):new e(t.url);return n.binaryType=`arraybuffer`,{ws:n}}catch(e){return{error:`websocat: connect failed: ${e instanceof Error?e.message:String(e)}\n`}}}function cV(e,t,n,r){if(n.outLines.length<eV){n.outLines.push(r);return}n.droppedForOverflow===0&&aV(e,t,`output buffer reached ${eV} messages; dropping further inbound messages — use -1, --max-messages, or pipe to a file with a different tool for long-running streams`),n.droppedForOverflow+=1}function lV(e,n,r){let{bytes:i,isBinary:a}=$B(r);return i.length>e.bufferSize&&(aV(e,n,`inbound message of ${i.length} bytes exceeds --buffer-size ${e.bufferSize}; truncating`),i=i.slice(0,e.bufferSize)),a&&e.base64?t(i):QB(i)}function uV(e,t){return e.maxMessages!==void 0&&t>=e.maxMessages||e.oneMessage}function dV(e,t,n){try{n===void 0?e.close(t):e.close(t,n)}catch{}}function fV(e,t){setTimeout(()=>{dV(t,e.closeStatus??1e3,e.closeReason)},0)}function pV(e,t,n){let r=XB(n,t.nullTerminated),i=1,a=0,o=t.oneMessage?r.slice(0,1):r;for(let n of o){let r=n;t.jsonrpc&&(r=ZB(n,i,t.jsonrpcOmit),i+=1),t.binary?e.send(new TextEncoder().encode(r).buffer):e.send(r),a+=1}return a}function mV(e,t,n){!t.oneMessage&&!t.noClose&&(t.exitOnEof||n===0)&&fV(t,e)}async function hV(e,t,n){let r=[];oV(e,r);let i=e.nullTerminated?`\0`:`
3359
+ `,a=sV(n,e);if(`error`in a)return{stdout:``,stderr:a.error,exitCode:1};let{ws:o}=a,s={outLines:[],droppedForOverflow:0,received:0,finishing:!1},c=!1,l=tV(),u=nV(),d=0,f=!1,p=setTimeout(()=>{f=!0,dV(o,1e3),c||l.reject(Error(`connect timeout`))},e.connTimeoutMs),m=()=>{if(e.noClose){u.settle(d);return}dV(o,e.closeStatus??1e3,e.closeReason)};o.onopen=()=>{clearTimeout(p),c=!0,l.resolve()},o.onmessage=t=>{if(!s.finishing){if(!e.unidirectional){let n=lV(e,r,t.data);cV(e,r,s,n)}s.received+=1,uV(e,s.received)&&(s.finishing=!0,m())}},o.onerror=()=>{f||(aV(e,r,`websocket error`),d=1,c||l.reject(Error(`connect failed`)))},o.onclose=t=>{if(clearTimeout(p),f){u.settle(124);return}e.verbose>=1&&aV(e,r,`closed code=${t.code} reason=${JSON.stringify(t.reason||``)}`),d===0&&t.code!==1e3&&t.code!==1005&&t.code!==1001&&(d=1),c||l.reject(Error(`connect closed (code ${t.code})`)),u.settle(d)};try{await l.promise}catch(e){clearTimeout(p);let t=e instanceof Error?e.message:String(e);return{stdout:rV(s.outLines,i),stderr:iV(r.concat([`websocat: ${t}`])),exitCode:t===`connect timeout`?124:1}}e.unidirectionalReverse?!e.noClose&&e.exitOnEof&&!e.oneMessage&&fV(e,o):mV(o,e,pV(o,e,t));let h=await u.promise;return s.droppedForOverflow>0&&aV(e,r,`dropped ${s.droppedForOverflow} inbound message(s) due to output buffer cap`),{stdout:rV(s.outLines,i),stderr:iV(r),exitCode:h}}function gV(e){return{stdout:``,stderr:e,exitCode:2}}function _V(e){return e.WebSocketCtor??(typeof WebSocket<`u`?WebSocket:void 0)}async function vV(e,t,n={}){let r=YB(e);if(r.showHelp)return IB();if(r.error)return gV(r.error);if(!r.url)return gV(`websocat: missing ws:// or wss:// URL (use --help for usage)
3360
+ `);if(!/^wss?:\/\//i.test(r.url))return gV(`websocat: URL must start with ws:// or wss://, got '${r.url}'\n`);let i=_V(n);return i?hV(r,t.stdin,i):{stdout:``,stderr:`websocat: no WebSocket implementation available in this runtime
3361
+ `,exitCode:1}}function yV(){return S(`websocat`,async(e,t)=>vV(e,{stdin:P(t.stdin)}))}function bV(){return S(`__wf_progress`,async()=>({stdout:``,stderr:``,exitCode:0}))}const xV={commands:new Map,collisions:[]};async function SV(e,t){let n=nr(t);return e.scriptCatalog?e.scriptCatalog.getJshIndex(n):e.fs?ar(e.fs,n):xV}async function CV(e){return e.scriptCatalog?e.scriptCatalog.getWorkflowCommands():e.fs?gi(e.fs):new Map}async function wV(e){return e.scriptCatalog?e.scriptCatalog.getWasmCommands():new Map}function TV(e,t){return`${e.glue} (wasm, ${e.pkg}${t?`, ${t}`:``})`}function EV(e,{jshPath:t,collision:n,wasm:r,wf:i}){let a=[`/usr/bin/${e}`];if((t||r||i)&&a.push(` (shadowed by built-in ${e})`),r&&a.push(` (shadowed ${TV(r)})`),t){let e=n?[t,...n.shadowedPaths]:[t];for(let t of e)a.push(` (shadowed ${t})`)}return a}function DV(e,{collision:t,wasm:n,wf:r}){let i=[e];for(let e of t?.shadowedPaths??[])i.push(` (shadowed ${e})`);return n&&i.push(` ${TV(n,`shadowed by .jsh`)}`),r&&i.push(` ${r.path} (workflow, shadowed by .jsh)`),i}function OV(e,t,n,r,i){let{jshPath:a,wasm:o,wf:s}=t;if(n.has(e))return{lines:EV(e,t),found:!0};if(a)return{lines:DV(a,t),found:!0};if(o){let e=[TV(o)];return s&&e.push(` ${s.path} (workflow, shadowed by wasm)`),{lines:e,found:!0}}return s?{lines:[`${s.path} (workflow)`],found:!0}:r.has(e)&&!i.has(e)?{lines:[`/usr/bin/${e}`],found:!0}:{lines:[],found:!1}}function kV(e={}){let t=e.scriptCatalog!==void 0||e.fs!==void 0?e:typeof e.walk==`function`&&typeof e.exists==`function`?{fs:e}:{};return S(`which`,async(e,n)=>{if(w(e))return{stdout:`which - locate a command
3342
3362
 
3343
3363
  Usage: which <command> [command...]
3344
3364
 
@@ -3350,9 +3370,9 @@ Prints the path of the given command(s).
3350
3370
 
3351
3371
  Exit code 0 if all commands found, 1 if any not found.
3352
3372
  `,stderr:``,exitCode:0};let r=C(e,{});if(`error`in r)return{stdout:``,stderr:`which: ${r.error}\n`,exitCode:1};if(r.positionals.length===0)return{stdout:``,stderr:`which: missing argument
3353
- `,exitCode:1};let i=n.getRegisteredCommands?.()??[],a=new Set(i),o=await xV(t,n.env.get(`PATH`)),s=o.commands,c=new Map(o.collisions.map(e=>[e.name,e])),l=await SV(t),u=await CV(t),d=typeof t.getStaticBuiltins==`function`?new Set(t.getStaticBuiltins()):a,f=new Set(t.getScriptRegisteredNames?.()??[]),p=[],m=!0;for(let e of r.positionals){let t=DV(e,{jshPath:s.get(e),collision:c.get(e),wasm:u.get(e),wf:l.get(e)},d,a,f);p.push(...t.lines),t.found||(m=!1)}return{stdout:p.length>0?p.join(`
3373
+ `,exitCode:1};let i=n.getRegisteredCommands?.()??[],a=new Set(i),o=await SV(t,n.env.get(`PATH`)),s=o.commands,c=new Map(o.collisions.map(e=>[e.name,e])),l=await CV(t),u=await wV(t),d=typeof t.getStaticBuiltins==`function`?new Set(t.getStaticBuiltins()):a,f=new Set(t.getScriptRegisteredNames?.()??[]),p=[],m=!0;for(let e of r.positionals){let t=OV(e,{jshPath:s.get(e),collision:c.get(e),wasm:u.get(e),wf:l.get(e)},d,a,f);p.push(...t.lines),t.found||(m=!1)}return{stdout:p.length>0?p.join(`
3354
3374
  `)+`
3355
- `:``,stderr:``,exitCode:+!m}})}const kV=`__slicc_workflows`,AV=String.raw`
3375
+ `:``,stderr:``,exitCode:+!m}})}const AV=`__slicc_workflows`,jV=String.raw`
3356
3376
  class WorkflowError extends Error {}
3357
3377
  class WorkflowDeterminismError extends WorkflowError {}
3358
3378
  class WorkflowAgentCapError extends WorkflowError {}
@@ -3465,40 +3485,40 @@ function log(message) {
3465
3485
  }
3466
3486
  const budget = { total: (__WF.budget == null ? null : __WF.budget), spent() { return 0; }, remaining() { return this.total == null ? Infinity : Math.max(0, this.total - this.spent()); } };
3467
3487
  function workflow() { throw new WorkflowNestingUnsupportedError('nested workflow() unsupported in SP1'); }
3468
- `;function jV(){return`WF_RESULT_${globalThis.crypto?.randomUUID?.()??`${Date.now().toString(36)}${Math.random().toString(36).slice(2)}`}`}function MV(e){let t=IV(e);return t===null?{name:null,description:null}:{name:LV(t,`name`),description:LV(t,`description`)}}function NV(e){return e.replace(/\bexport\s+(const|let|var|function|async\s+function|class)\b/g,`$1`)}function PV(e){return`const __emit = console.log.bind(console);
3488
+ `;function MV(){return`WF_RESULT_${globalThis.crypto?.randomUUID?.()??`${Date.now().toString(36)}${Math.random().toString(36).slice(2)}`}`}function NV(e){let t=LV(e);return t===null?{name:null,description:null}:{name:RV(t,`name`),description:RV(t,`description`)}}function PV(e){return e.replace(/\bexport\s+(const|let|var|function|async\s+function|class)\b/g,`$1`)}function FV(e){return`const __emit = console.log.bind(console);
3469
3489
  const __stringify = JSON.stringify.bind(JSON);
3470
- const __WF = ${JSON.stringify(e.config)};\n${e.prelude}\nconst __r = await (async () => {\n${NV(e.body)}\n})();\n__emit(${JSON.stringify(e.sentinel)} + __stringify(__r ?? null));\n`}function FV(e,t){let n=e.split(`
3490
+ const __WF = ${JSON.stringify(e.config)};\n${e.prelude}\nconst __r = await (async () => {\n${PV(e.body)}\n})();\n__emit(${JSON.stringify(e.sentinel)} + __stringify(__r ?? null));\n`}function IV(e,t){let n=e.split(`
3471
3491
  `);for(let e=n.length-1;e>=0;e--)if(n[e].startsWith(t)){let r=[...n.slice(0,e),...n.slice(e+1)].join(`
3472
- `).replace(/\n+$/,``);try{return{result:JSON.parse(n[e].slice(t.length)),log:r,hadResult:!0}}catch{return{result:null,log:r,hadResult:!0}}}return{result:null,log:e.replace(/\n+$/,``),hadResult:!1}}function IV(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 LV(e,t){let n=RegExp(`\\b${t}\\s*:\\s*(['"\\\`])((?:\\\\.|(?!\\1).)*)\\1`).exec(e);return n?n[2]:null}const RV=e(`workflow-command`),zV=`usage: workflow run <file.js> [--args <json>] [--budget <n>] [--concurrency <n>] [--wait]
3492
+ `).replace(/\n+$/,``);try{return{result:JSON.parse(n[e].slice(t.length)),log:r,hadResult:!0}}catch{return{result:null,log:r,hadResult:!0}}}return{result:null,log:e.replace(/\n+$/,``),hadResult:!1}}function LV(e){let t=/\bmeta\s*=\s*\{/.exec(e);if(!t)return null;let n=t.index+t[0].length-1,r=0;for(let t=n;t<e.length;t++)if(e[t]===`{`)r++;else if(e[t]===`}`&&--r===0)return e.slice(n+1,t);return null}function RV(e,t){let n=RegExp(`\\b${t}\\s*:\\s*(['"\\\`])((?:\\\\.|(?!\\1).)*)\\1`).exec(e);return n?n[2]:null}const zV=e(`workflow-command`),BV=`usage: workflow run <file.js> [--args <json>] [--budget <n>] [--concurrency <n>] [--wait]
3473
3493
  workflow run --script '<inline js>' [...]
3474
3494
  workflow list
3475
3495
  workflow status <runId>
3476
3496
  workflow stop <runId>
3477
3497
  workflow save <runId> <name> [--force]
3478
3498
  Runs a Claude-Code-format dynamic workflow. Default is non-blocking (returns a run id);
3479
- pass --wait to block and print the full result.`,BV=new Set([`list`,`status`,`stop`,`save`]);function VV(){return globalThis[kV]}function HV(){let e=globalThis.navigator?.hardwareConcurrency??8;return Math.min(16,Math.max(8,e*4))}function UV(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 WV(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=HV(),n={budget:null,cap:Math.min(8,t)};for(let r=1;r<e.length;r++){let i=UV(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 GV(e={}){return S(`workflow`,async(t,n)=>{if(BV.has(t[0])&&w(t.slice(1)))return{stdout:zV+`
3480
- `,stderr:``,exitCode:0};if(t[0]===`list`||t[0]===`status`||t[0]===`stop`)return ZV(t,n);if(t[0]===`save`)return XV(t,n,e);let r=WV(t);if(r.help)return{stdout:zV+`
3499
+ pass --wait to block and print the full result.`,VV=new Set([`list`,`status`,`stop`,`save`]);function HV(){return globalThis[AV]}function UV(){let e=globalThis.navigator?.hardwareConcurrency??8;return Math.min(16,Math.max(8,e*4))}function WV(e,t,n,r){let i=t[n];switch(i){case`-h`:case`--help`:return{i:n,help:!0};case`--script`:return e.script=t[++n],{i:n};case`--wait`:return e.wait=!0,{i:n};case`--args`:try{e.args=JSON.parse(t[++n]??``),e.hasArgs=!0}catch{return{i:n,error:`workflow: --args must be valid JSON`}}return{i:n};case`--budget`:{let r=Number(t[++n]);return Number.isFinite(r)?(e.budget=r,{i:n}):{i:n,error:`workflow: --budget must be a number`}}case`--concurrency`:{let i=Number(t[++n]);return Number.isFinite(i)?(e.cap=Math.min(r,Math.max(1,Math.trunc(i))),{i:n}):{i:n,error:`workflow: --concurrency must be a number`}}default:return i.startsWith(`-`)?{i:n,error:`workflow: unknown flag '${i}'`}:e.file===void 0?(e.file=i,{i:n}):{i:n,error:`workflow: too many arguments`}}}function GV(e){if(e[0]!==`run`)return e.length===0||e.includes(`-h`)||e.includes(`--help`)?{help:!0}:{error:`workflow: unknown subcommand '${e[0]}' (only 'run' in SP1)`};let t=UV(),n={budget:null,cap:Math.min(8,t)};for(let r=1;r<e.length;r++){let i=WV(n,e,r,t);if(i.help)return{help:!0};if(i.error)return{error:i.error};r=i.i}return n.script===void 0&&n.file===void 0?{error:`workflow: a <file.js> or --script is required`}:n}function KV(e={}){return S(`workflow`,async(t,n)=>{if(VV.has(t[0])&&w(t.slice(1)))return{stdout:BV+`
3500
+ `,stderr:``,exitCode:0};if(t[0]===`list`||t[0]===`status`||t[0]===`stop`)return QV(t,n);if(t[0]===`save`)return ZV(t,n,e);let r=GV(t);if(r.help)return{stdout:BV+`
3481
3501
  `,stderr:``,exitCode:0};if(r.error)return{stdout:``,stderr:r.error+`
3482
- `,exitCode:1};let i,a;if(r.script!==void 0)i=r.script,a=`<workflow>`;else{let e=n.fs.resolvePath(n.cwd,r.file);if(!await n.fs.exists(e))return{stdout:``,stderr:`workflow: file not found: ${r.file}\n`,exitCode:1};i=await n.fs.readFile(e),a=r.file}let o=MV(i);if(!o.name)return{stdout:``,stderr:`workflow: script must define a meta block with a name (description optional)
3483
- `,exitCode:1};let s=jV().slice(10,22),c=`/shared/workflow-runs/${s}/scratch/`;await n.fs.mkdir(c,{recursive:!0});let l=jV(),u=PV({prelude:AV,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?KV(u,a,l,o,n):qV({code:u,source:i,name:o.name,filename:a,sentinel:l,runId:s,ctx:n,options:e})})}async function KV(e,t,n,r,i){let a;try{a=await ti(e,[`workflow`,t],i,void 0,{filename:t})}catch(e){return RV.error(`workflow run failed`,e),{stdout:``,stderr:`workflow: ${e instanceof Error?e.message:String(e)}\n`,exitCode:1}}return QV(r,a,n)}async function qV(e){let t=VV();if(!t)return{stdout:``,stderr:`workflow: run manager not available
3484
- `,exitCode:1};let n=e.options.getParentJid?.(),{runId:r}=await t.start({code:e.code,source:e.source,name:e.name,filename:e.filename,parentJid:n,ctx:e.ctx,sentinel:e.sentinel,runId:e.runId});return{stdout:`▶ workflow '${e.name}' started (run ${r}). Watch: workflow status ${r}\n`,stderr:``,exitCode:0}}const JV=/^[a-z0-9][a-z0-9-]*$/,YV=`/workspace/.workflows`;async function XV(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]
3485
- `,exitCode:1};if(!JV.test(o))return{stdout:``,stderr:`workflow: invalid name '${o}' (use [a-z0-9][a-z0-9-]*)\n`,exitCode:1};let c=VV()?.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=`${YV}/${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(YV,{recursive:!0}),await t.fs.writeFile(l,c.source);try{await n.syncScriptCommands?.()}catch(e){RV.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 ZV(e,t){let n=VV();if(e[0]===`list`){if(!n)return{stdout:``,stderr:`workflow: run manager not available
3502
+ `,exitCode:1};let i,a;if(r.script!==void 0)i=r.script,a=`<workflow>`;else{let e=n.fs.resolvePath(n.cwd,r.file);if(!await n.fs.exists(e))return{stdout:``,stderr:`workflow: file not found: ${r.file}\n`,exitCode:1};i=await n.fs.readFile(e),a=r.file}let o=NV(i);if(!o.name)return{stdout:``,stderr:`workflow: script must define a meta block with a name (description optional)
3503
+ `,exitCode:1};let s=MV().slice(10,22),c=`/shared/workflow-runs/${s}/scratch/`;await n.fs.mkdir(c,{recursive:!0});let l=MV(),u=FV({prelude:jV,config:{...r.hasArgs?{args:r.args}:{},cap:r.cap??8,budget:r.budget??null,cwd:n.cwd,agentCwd:c},body:i,sentinel:l});return r.wait?qV(u,a,l,o,n):JV({code:u,source:i,name:o.name,filename:a,sentinel:l,runId:s,ctx:n,options:e})})}async function qV(e,t,n,r,i){let a;try{a=await ti(e,[`workflow`,t],i,void 0,{filename:t})}catch(e){return zV.error(`workflow run failed`,e),{stdout:``,stderr:`workflow: ${e instanceof Error?e.message:String(e)}\n`,exitCode:1}}return $V(r,a,n)}async function JV(e){let t=HV();if(!t)return{stdout:``,stderr:`workflow: run manager not available
3504
+ `,exitCode:1};let n=e.options.getParentJid?.(),{runId:r}=await t.start({code:e.code,source:e.source,name:e.name,filename:e.filename,parentJid:n,ctx:e.ctx,sentinel:e.sentinel,runId:e.runId});return{stdout:`▶ workflow '${e.name}' started (run ${r}). Watch: workflow status ${r}\n`,stderr:``,exitCode:0}}const YV=/^[a-z0-9][a-z0-9-]*$/,XV=`/workspace/.workflows`;async function ZV(e,t,n){let r=!1,i=[];for(let t of e.slice(1))t===`--force`?r=!0:i.push(t);let[a,o,...s]=i;if(!a||!o||s.length>0)return{stdout:``,stderr:`usage: workflow save <runId> <name> [--force]
3505
+ `,exitCode:1};if(!YV.test(o))return{stdout:``,stderr:`workflow: invalid name '${o}' (use [a-z0-9][a-z0-9-]*)\n`,exitCode:1};let c=HV()?.getRun(a);if(!c)return{stdout:``,stderr:`workflow: no run '${a}' (only backgrounded runs are saveable; --wait runs are not)\n`,exitCode:1};if(!c.source)return{stdout:``,stderr:`workflow: run '${a}' has no source to save\n`,exitCode:1};let l=`${XV}/${o}.workflow.js`;if(await t.fs.exists(l)){if(!r)return{stdout:``,stderr:`workflow: ${l} already exists (pass --force to overwrite)\n`,exitCode:1}}else if(new Set(t.getRegisteredCommands?.()??[]).has(o))return{stdout:``,stderr:`workflow: '${o}' is already a command — choose another name\n`,exitCode:1};await t.fs.mkdir(XV,{recursive:!0}),await t.fs.writeFile(l,c.source);try{await n.syncScriptCommands?.()}catch(e){zV.warn(`workflow save: command re-sync failed; workflow saved, will register on next sync`,{name:o,error:e instanceof Error?e.message:String(e)})}return{stdout:`saved workflow '${o}' → ${l}\nrun it as '${o}' (or 'workflow run ${l}' if a built-in/.jsh shadows the name)\n`,stderr:``,exitCode:0}}async function QV(e,t){let n=HV();if(e[0]===`list`){if(!n)return{stdout:``,stderr:`workflow: run manager not available
3486
3506
  `,exitCode:1};let e=n.listRuns().map(e=>`${e.id} ${e.status.padEnd(7)} ${e.agentsDone}/${e.agentsStarted} ${e.name??``}`);return{stdout:(e.length?e.join(`
3487
3507
  `):`(no runs)`)+`
3488
3508
  `,stderr:``,exitCode:0}}let r=e[1],i=n?.getRun(r??``);if(!i)return{stdout:``,stderr:`workflow: no run '${r}'\n`,exitCode:1};if(e[0]===`status`)return{stdout:[`run ${i.id} (${i.name??`unnamed`}) status=${i.status}`,`agents ${i.agentsDone}/${i.agentsStarted} phase=${i.currentPhase??`-`}`,i.resultPath?`result: ${i.resultPath}`:``,i.preview?`preview: ${i.preview}`:``,i.error?`error: ${i.error}`:``].filter(Boolean).join(`
3489
3509
  `)+`
3490
- `,stderr:``,exitCode:0};if(i.pid==null)return{stdout:`workflow: run ${i.id} has not started a realm process yet (nothing to stop)\n`,stderr:``,exitCode:0};if(i.status!==`running`&&i.status!==`paused`)return{stdout:`workflow: run ${i.id} already ${i.status}\n`,stderr:``,exitCode:0};let a=await t.exec?.(`kill`,{cwd:t.cwd,args:[`-KILL`,String(i.pid)]});return a&&a.exitCode!==0?{stdout:``,stderr:a.stderr||`workflow: kill failed (exit ${a.exitCode})\n`,exitCode:a.exitCode}:{stdout:`stopped run ${i.id} (pid ${i.pid})\n`,stderr:``,exitCode:0}}function QV(e,t,n){let{result:r,log:i,hadResult:a}=FV(t.stdout,n),o=e.name?`workflow: ${e.name}${e.description?` — `+e.description:``}\n`:``,s=i?$V(i)+`
3510
+ `,stderr:``,exitCode:0};if(i.pid==null)return{stdout:`workflow: run ${i.id} has not started a realm process yet (nothing to stop)\n`,stderr:``,exitCode:0};if(i.status!==`running`&&i.status!==`paused`)return{stdout:`workflow: run ${i.id} already ${i.status}\n`,stderr:``,exitCode:0};let a=await t.exec?.(`kill`,{cwd:t.cwd,args:[`-KILL`,String(i.pid)]});return a&&a.exitCode!==0?{stdout:``,stderr:a.stderr||`workflow: kill failed (exit ${a.exitCode})\n`,exitCode:a.exitCode}:{stdout:`stopped run ${i.id} (pid ${i.pid})\n`,stderr:``,exitCode:0}}function $V(e,t,n){let{result:r,log:i,hadResult:a}=IV(t.stdout,n),o=e.name?`workflow: ${e.name}${e.description?` — `+e.description:``}\n`:``,s=i?eH(i)+`
3491
3511
  `:``;return t.exitCode!==0||!a?{stdout:o+s,stderr:t.stderr||(a?``:`workflow: script produced no result
3492
3512
  `),exitCode:t.exitCode||1}:{stdout:o+s+(typeof r==`string`?r:JSON.stringify(r))+`
3493
- `,stderr:t.stderr,exitCode:0}}function $V(e){return e.split(`
3513
+ `,stderr:t.stderr,exitCode:0}}function eH(e){return e.split(`
3494
3514
  `).map(e=>e.replace(/^WFPHASE/,`▸ `).replace(/^WFLOG/,`· `)).join(`
3495
- `)}function eH(e){return{stdout:``,stderr:`xxd: ${e}\n`,exitCode:1}}function tH(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 nH(e,t){let n=e.toString(16).padStart(2,`0`);return t?n.toUpperCase():n}function rH(e){let t=``;for(let n=0;n<e.length;n++)t+=String.fromCharCode(e[n]);return t}function iH(e){return e.replace(/[^0-9a-zA-Z]/g,`_`)}function aH(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?nH(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(`
3515
+ `)}function tH(e){return{stdout:``,stderr:`xxd: ${e}\n`,exitCode:1}}function nH(e){if(e==null)throw Error(`missing option value`);let t=e.startsWith(`-`),n=t||e.startsWith(`+`)?e.slice(1):e,r;if(/^0x[0-9a-fA-F]+$/.test(n))r=parseInt(n.slice(2),16);else if(/^[0-9]+$/.test(n))r=parseInt(n,10);else throw Error(`invalid number: ${e}`);return t?-r:r}function rH(e,t){let n=e.toString(16).padStart(2,`0`);return t?n.toUpperCase():n}function iH(e){let t=``;for(let n=0;n<e.length;n++)t+=String.fromCharCode(e[n]);return t}function aH(e){return e.replace(/[^0-9a-zA-Z]/g,`_`)}function oH(e,t,n,r,i){let a=[];for(let o=0;o<e.length;o+=t){let s=Math.min(o+t,e.length),c=(i+o).toString(16).padStart(8,`0`),l=``;for(let i=0;i<t;i++)n>0&&i>0&&i%n===0&&(l+=` `),l+=o+i<s?rH(e[o+i],r):` `;let u=``;for(let t=o;t<s;t++)u+=e[t]>=32&&e[t]<=126?String.fromCharCode(e[t]):`.`;a.push(`${c}: ${l} ${u}`)}return a.length?a.join(`
3496
3516
  `)+`
3497
- `:``}function oH(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+=nH(e[i+r],n);r+=a+`
3498
- `}return r}function sH(e,t,n,r){let i=Array.from(e,e=>`0x${nH(e,n)}`),a=[];for(let e=0;e<i.length;e+=t)a.push(` `+i.slice(e,e+t).join(`, `));let o=a.join(`,
3517
+ `:``}function sH(e,t,n){let r=``;for(let i=0;i<e.length;i+=t){let a=``;for(let r=0;r<t&&i+r<e.length;r++)a+=rH(e[i+r],n);r+=a+`
3518
+ `}return r}function cH(e,t,n,r){let i=Array.from(e,e=>`0x${rH(e,n)}`),a=[];for(let e=0;e<i.length;e+=t)a.push(` `+i.slice(e,e+t).join(`, `));let o=a.join(`,
3499
3519
  `);return r===null?i.length?o+`
3500
- `:``:`unsigned char ${r}[] = {\n${o}\n};\nunsigned int ${r}_len = ${e.length};\n`}function cH(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 lH(e){let t=[],n=0;for(let r of e.split(`
3501
- `)){let e=r.replace(/\r$/,``),i=e.indexOf(`:`);if(i<0)continue;let a=parseInt(e.slice(0,i).trim(),16);if(Number.isNaN(a))continue;let o=e.slice(i+1),s=o.indexOf(` `);s>=0&&(o=o.slice(0,s));let c=o.replace(/[^0-9a-fA-F]/g,``),l=[];for(let e=0;e+1<c.length;e+=2)l.push(parseInt(c.substr(e,2),16));l.length&&(t.push({offset:a,bytes:l}),n=Math.max(n,a+l.length))}if(!t.length)return new Uint8Array;let r=new Uint8Array(n);for(let e of t)for(let t=0;t<e.bytes.length;t++)r[e.offset+t]=e.bytes[t];return r}const uH={"-u":`upper`,"-p":`plain`,"-ps":`plain`,"-postscript":`plain`,"-i":`include`,"-include":`include`,"-r":`revert`,"-revert":`revert`},dH=[{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 fH(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=uH[r];if(i){t[i]=!0;continue}let a=dH.find(e=>e.exact.includes(r)||e.attached.test(r));if(a){t[a.key]=tH(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 pH(e){return e.includes(`-h`)||e.includes(`--help`)||e.includes(`-help`)}async function mH(e,t,n){if(!n&&t)return e.fs.readFileBuffer(e.fs.resolvePath(e.cwd,t));let r=pi(e.stdin),i=new Uint8Array(r.length);for(let e=0;e<r.length;e++)i[e]=r.charCodeAt(e)&255;return i}function hH(e,t,n,r,i){let a=e.cols&&e.cols>0?e.cols:e.plain?30:e.include?12:16;return e.plain?oH(t,a,e.upper):e.include?sH(t,a,e.upper,i?null:iH(r??``)):aH(t,a,e.group!=null&&e.group>=0?e.group:2,e.upper,n)}function gH(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 _H(){return S(`xxd`,async(e,t)=>{if(pH(e))return{stdout:`usage: xxd [options] [infile [outfile]]
3520
+ `:``:`unsigned char ${r}[] = {\n${o}\n};\nunsigned int ${r}_len = ${e.length};\n`}function lH(e){let t=e.replace(/[^0-9a-fA-F]/g,``),n=Math.floor(t.length/2),r=new Uint8Array(n);for(let e=0;e<n;e++)r[e]=parseInt(t.substr(e*2,2),16);return r}function uH(e){let t=[],n=0;for(let r of e.split(`
3521
+ `)){let e=r.replace(/\r$/,``),i=e.indexOf(`:`);if(i<0)continue;let a=parseInt(e.slice(0,i).trim(),16);if(Number.isNaN(a))continue;let o=e.slice(i+1),s=o.indexOf(` `);s>=0&&(o=o.slice(0,s));let c=o.replace(/[^0-9a-fA-F]/g,``),l=[];for(let e=0;e+1<c.length;e+=2)l.push(parseInt(c.substr(e,2),16));l.length&&(t.push({offset:a,bytes:l}),n=Math.max(n,a+l.length))}if(!t.length)return new Uint8Array;let r=new Uint8Array(n);for(let e of t)for(let t=0;t<e.bytes.length;t++)r[e.offset+t]=e.bytes[t];return r}const dH={"-u":`upper`,"-p":`plain`,"-ps":`plain`,"-postscript":`plain`,"-i":`include`,"-include":`include`,"-r":`revert`,"-revert":`revert`},fH=[{key:`cols`,exact:[`-c`,`-cols`],attached:/^-c(0x)?[0-9]/},{key:`group`,exact:[`-g`,`-groupsize`],attached:/^-g(0x)?[0-9]/},{key:`length`,exact:[`-l`,`-len`],attached:/^-l(0x)?[0-9]/},{key:`seek`,exact:[`-s`,`-seek`],attached:/^-s[+-]?(0x)?[0-9]/}];function pH(e){let t={upper:!1,plain:!1,include:!1,revert:!1,positional:[]};for(let n=0;n<e.length;n++){let r=e[n],i=dH[r];if(i){t[i]=!0;continue}let a=fH.find(e=>e.exact.includes(r)||e.attached.test(r));if(a){t[a.key]=nH(a.exact.includes(r)?e[++n]:r.slice(2));continue}if(r!==`-`&&r.startsWith(`-`)&&r.length>1)throw Error(`invalid option ${r}`);t.positional.push(r)}return t}function mH(e){return e.includes(`-h`)||e.includes(`--help`)||e.includes(`-help`)}async function hH(e,t,n){if(!n&&t)return e.fs.readFileBuffer(e.fs.resolvePath(e.cwd,t));let r=pi(e.stdin),i=new Uint8Array(r.length);for(let e=0;e<r.length;e++)i[e]=r.charCodeAt(e)&255;return i}function gH(e,t,n,r,i){let a=e.cols&&e.cols>0?e.cols:e.plain?30:e.include?12:16;return e.plain?sH(t,a,e.upper):e.include?cH(t,a,e.upper,i?null:aH(r??``)):oH(t,a,e.group!=null&&e.group>=0?e.group:2,e.upper,n)}function _H(e,t){let n=0,r=t;return e.seek!==void 0&&(n=e.seek<0?Math.max(0,r.length+e.seek):Math.min(e.seek,r.length),r=r.subarray(n)),e.length!==void 0&&(r=r.subarray(0,Math.max(0,e.length))),{data:r,base:n}}function vH(){return S(`xxd`,async(e,t)=>{if(mH(e))return{stdout:`usage: xxd [options] [infile [outfile]]
3502
3522
  -c cols number of octets per line (default 16; 30 for -p; 12 for -i)
3503
3523
  -g bytes number of octets per group (default 2; 0 disables grouping)
3504
3524
  -l len stop after len octets
@@ -3508,8 +3528,8 @@ pass --wait to block and print the full result.`,BV=new Set([`list`,`status`,`st
3508
3528
  -i output in C include style
3509
3529
  -r reverse: convert a hex dump back to binary (-r -p for plain)
3510
3530
  -h show this help
3511
- `,stderr:``,exitCode:0};let n;try{n=fH(e)}catch(e){return eH(e.message)}let r=n.positional[0],i=n.positional[1],a=!r||r===`-`,o;try{o=await mH(t,r,a)}catch{return eH(`${r}: No such file or directory`)}if(n.revert){let e=rH(o),r=n.plain?cH(e):lH(e);return i?(await t.fs.writeFile(t.fs.resolvePath(t.cwd,i),r),{stdout:``,stderr:``,exitCode:0}):{stdout:rH(r),stderr:``,exitCode:0}}let{data:s,base:c}=gH(n,o),l=hH(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 vH(e,t,n,r){if((await e.fs.stat(t)).isFile)return r[n]=await e.fs.readFileBuffer(t),1;let i=await e.fs.readdir(t),a=0;for(let o of i){let i=pr(t,o),s=n?`${n}/${o}`:o;a+=await vH(e,i,s,r)}return a}function yH(){return{stdout:`usage: zip [-r] <archive.zip> <path> [path...]
3512
- `,stderr:``,exitCode:0}}function bH(){return S(`zip`,async(e,t)=>{if(e.length===0||e.includes(`--help`)||e.includes(`-h`))return yH();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
3513
- `,exitCode:1};let i=t.fs.resolvePath(t.cwd,r[0]),a=r.slice(1),o={},s=0;for(let e of a){let r=t.fs.resolvePath(t.cwd,e),i=await t.fs.stat(r),a=(e.startsWith(`/`)?e.slice(1):e.replace(/^\.\//,``))||mr(r);if(i.isDirectory&&!n)return{stdout:``,stderr:`zip: ${e} is a directory (use -r)\n`,exitCode:1};s+=await vH(t,r,a,o)}if(s===0)return{stdout:``,stderr:`zip: nothing to do
3514
- `,exitCode:1};let c=jt(o);return await t.fs.writeFile(i,c),{stdout:`created ${i} (${s} file(s))\n`,stderr:``,exitCode:0}})}function xH(e){return{setEnv:e.setEnv,unsetEnv:e.unsetEnv,broker:e.sudoCommand?.broker}}function SH(e){let{fs:t,fetch:n}=e;if(!t||!n)return[];let r={fs:t,fetch:n,scriptCatalog:e.scriptCatalog,syncScriptCommands:e.syncScriptCommands};return[VO(`ipk`,r),VO(`npm`,r),VO(`i`,r),Ak(`ipx`,{fs:t,fetch:n}),Ak(`npx`,{fs:t,fetch:n}),Lb(`di`,{fs:t,fetch:n}),Lb(`uv`,{fs:t,fetch:n}),qR({fs:t,fetch:n})]}function CH(e){let t={buildProcessConfig:e.buildProcessConfig};return[`python3`,`python`,`pyodide`].map(e=>tP(e,t))}function wH(e){let t=e.scriptCatalog;return{buildProcessConfig:e.buildProcessConfig,terminal:e.terminal,gate:e.gateNativeCommand,commands:t&&(()=>t.getWasmCommands()),gitIdentity:e.gitIdentity}}function TH(e={}){let t=[KE({getJshCommands:e.getJshCommands,getWorkflowCommands:e.getWorkflowCommands}),re(),PI(),$F(),KF(e.browserAPI,e.fs),zM(e.browserAPI),Qy(e.browserAPI),ZD(e),bH(),CR(),hL(e.fs?{fs:e.fs}:{}),VI(),JI(),GI(),qv(),vB(wH(e)),vC(wH(e)),_H(),OI(`sqlite3`),OI(`sqllite`),ML(),QL(),$x(),kv(),nM({buildProcessConfig:e.buildProcessConfig}),nM({buildProcessConfig:e.buildProcessConfig},`jsh`),...CH(e),...SH(e),...e.fs?[_C({fs:e.fs})]:[],...e.fs?[mj({fs:e.fs})]:[],...e.fetch?[rD({fetch:e.fetch,streamFetch:e.streamFetch})]:[],KS(),qS(),aC(),NB(e.webhook),vV(),Zy(e.crontask),SA({fs:e.fs,scriptCatalog:e.scriptCatalog}),aN({fs:e.fs,fetch:e.fetch}),gC(),yI(),BM(),VM(`pdftk`),VM(`pdf`),Av(`biscotto`,{getParentJid:e.getParentJid,isScoop:e.isScoop}),Av(`biscotti`,{getParentJid:e.getParentJid,isScoop:e.isScoop}),ZM(`pdftoppm`),ZM(`pdftocairo`),QM(`pdftotext`),Fy(`convert`),Fy(`magick`),OV({fs:e.fs,scriptCatalog:e.scriptCatalog,getStaticBuiltins:e.getStaticBuiltins,getScriptRegisteredNames:e.getScriptRegisteredNames}),nR(),vR(),qD(),JD(),yR(),hj(),aP(),gA(),wx(),_M(),gM(),pA(),_F(xH(e)),Bm(e.gitCredential),vP({fs:e.fs}),GP(),Wv(),Gv(),Kv(`xclip`),Kv(`xsel`),WP(),PC(),t_(),n_(),Hj(e.fs),ct(),sM(),S_({getParentJid:e.getParentJid}),Mx(),DN({processManager:e.processManager}),cz({processManager:e.processManager}),Nk({processManager:e.processManager}),jk({processManager:e.processManager,scriptCatalog:e.scriptCatalog}),...T_(),pj(),aA(),Nz(),kD(),PS(),Yz({processManager:e.processManager}),Xv({processManager:e.processManager,browser:e.browserAPI,sudoBroker:e.sudoCommand?.broker}),GS(),Lv({registry:e.cherryRuntimeRegistry}),sb(),pb({fs:e.fs}),mb({fs:e.fs}),II(e.sudoCommand),GV({getParentJid:e.getParentJid,syncScriptCommands:e.syncScriptCommands}),yV(),QF()];return e.fs&&(eN(),t.push(...Vn.map(t=>UE(t,e.browserAPI,e.fs,{isScoop:e.isScoop})))),t}let EH=null;function DH(e){EH=e}function OH(e){EH?.(e)}var kH=Ft();const AH=Reflect.get(nt,`DefenseInDepthBox`);function jH(e){return(typeof e==`string`?e:e?.encoding)??`utf8`}function MH(e,t){if(typeof e!=`string`)return e;let n=jH(t);if(n===`binary`||n===`latin1`){let t=_e(e);if(t)return t}return kH.Buffer.from(e,n)}function NH(e){return e===`/bin`?`/usr/bin`:e.startsWith(`/bin/`)?`/usr${e}`:e}var PH=class{vfs;registeredCommandsFn=null;listingStats=new Map;listingStatsMax;listingStatsTtlMs;constructor(e,t){this.vfs=e,this.listingStatsMax=Math.max(1,t?.listingStatsMax??2e4),this.listingStatsTtlMs=t?.listingStatsTtlMs??1e3,this.updateMetadataBatch=this.updateMetadataBatch.bind(this),this.symlinkBatch=this.symlinkBatch.bind(this)}get listingStatsSize(){return this.listingStats.size}primeListingStats(e,t){let n=Date.now();if(t.length>this.listingStatsMax){this.listingStats.clear();return}this.sweepExpiredListingStats(n),this.listingStats.size+t.length>this.listingStatsMax&&this.listingStats.clear();let r=e===`/`?`/`:`${e}/`;for(let e of t){let t=Ve(e),i=`${r}${e.name}`;this.listingStats.delete(i),t&&this.listingStats.set(i,{stats:t,at:n})}}sweepExpiredListingStats(e){for(let[t,n]of this.listingStats){if(e-n.at<=this.listingStatsTtlMs)break;this.listingStats.delete(t)}}primedStats(e){let t=this.listingStats.get(e);if(t){if(Date.now()-t.at>this.listingStatsTtlMs){this.listingStats.delete(e);return}return t.stats}}dropListingStats(){this.listingStats.clear()}setRegisteredCommandsFn(e){this.registeredCommandsFn=e}getVirtualBinCommands(){return this.registeredCommandsFn?.()??[]}virtualUsrStat(e){let t=NH(e);if(t===`/usr`||t===`/usr/bin`)return{isFile:!1,isDirectory:!0,isSymbolicLink:!1,mode:493,size:0,mtime:new Date(0)};if(t.startsWith(`/usr/bin/`)){let e=t.slice(9);if(e.length>0&&!e.includes(`/`)&&this.getVirtualBinCommands().includes(e))return{isFile:!0,isDirectory:!1,isSymbolicLink:!1,mode:493,size:0,mtime:new Date(0)}}return null}canWrite(e){let t=this.vfs;return typeof t.canWrite!=`function`||t.canWrite(e)}listMountPoints(){let e=this.vfs;return typeof e.listMountPoints==`function`?e.listMountPoints():[]}trusted(e){let t=AH?.runTrustedAsync;return t?t(e):Promise.resolve().then(e)}async readFile(e,t){return this.trusted(async()=>{let n=b(e),r=await this.vfs.readFile(n,{encoding:`binary`}),i=r instanceof Uint8Array?r:new TextEncoder().encode(r),a=jH(t),o=kH.Buffer.from(i.buffer,i.byteOffset,i.byteLength).toString(a);return a!==`hex`&&a!==`base64`&&m(o,i),o})}async readFileBuffer(e){return this.trusted(async()=>{let t=b(e),n=await this.vfs.readFile(t,{encoding:`binary`});return n instanceof Uint8Array?n:new TextEncoder().encode(n)})}async readFileBytes(e){let t=await this.readFileBuffer(e);return kH.Buffer.from(t.buffer,t.byteOffset,t.byteLength).toString(`latin1`)}async getNativeFile(e){return this.trusted(()=>this.vfs.getNativeFile(b(e)))}async readFileRange(e,t,n){return this.trusted(()=>this.vfs.readFileRange(b(e),t,n))}async writeFile(e,t,n){return this.dropListingStats(),this.trusted(async()=>{let r=b(e);await this.vfs.writeFile(r,MH(t,n))})}async appendFile(e,t,n){return this.dropListingStats(),this.trusted(()=>this.vfs.appendFile(b(e),MH(t,n)))}async exists(e){return this.trusted(async()=>{let t=b(e);return this.virtualUsrStat(t)?!0:this.vfs.exists(t)})}async stat(e){return this.trusted(async()=>{let t=b(e),n=this.virtualUsrStat(t);if(n)return n;let r=this.vfs.statSync(t);if(r)return{isFile:r.type===`file`,isDirectory:r.type===`directory`,isSymbolicLink:!!r.isSymlink,mode:r.mode??(r.type===`directory`?493:420),size:r.size,mtime:new Date(r.mtime),identity:r.identity,dev:r.dev,ino:r.identity===void 0?void 0:r.ino};let i=this.primedStats(t)??await this.vfs.stat(t);return{isFile:i.type===`file`,isDirectory:i.type===`directory`,isSymbolicLink:!!i.isSymlink,mode:i.mode??(i.type===`directory`?493:420),size:i.size,mtime:new Date(i.mtime),identity:i.identity,dev:i.dev,ino:i.identity===void 0?void 0:i.ino}})}async lstat(e){return this.trusted(async()=>{let t=b(e),n=this.virtualUsrStat(t);if(n)return n;let r=this.vfs.lstatSync(t);if(r)return{isFile:r.type===`file`,isDirectory:r.type===`directory`,isSymbolicLink:r.type===`symlink`,mode:r.mode??(r.type===`directory`?493:r.type===`symlink`?511:420),size:r.size,mtime:new Date(r.mtime),identity:r.identity,dev:r.dev,ino:r.identity===void 0?void 0:r.ino};let i=this.primedStats(t)??await this.vfs.lstat(t);return{isFile:i.type===`file`,isDirectory:i.type===`directory`,isSymbolicLink:i.type===`symlink`,mode:i.mode??(i.type===`directory`?493:i.type===`symlink`?511:420),size:i.size,mtime:new Date(i.mtime),identity:i.identity,dev:i.dev,ino:i.identity===void 0?void 0:i.ino}})}async mkdir(e,t){return this.dropListingStats(),this.trusted(async()=>{await this.vfs.mkdir(b(e),t)})}async readdir(e){return this.trusted(async()=>{let t=b(e);if(t===`/usr`)return[`bin`];if(NH(t)===`/usr/bin`)return this.getVirtualBinCommands().slice().sort();let n=this.vfs.readDirSync(t);if(n!==null)return n.map(e=>e.name);let r=await this.vfs.readDir(t,{includeStats:!0});return this.primeListingStats(t,r),r.map(e=>e.name)})}async readdirWithFileTypes(e){return this.trusted(async()=>{let t=b(e);if(t===`/usr`)return[{name:`bin`,isFile:!1,isDirectory:!0,isSymbolicLink:!1}];if(NH(t)===`/usr/bin`)return this.getVirtualBinCommands().slice().sort().map(e=>({name:e,isFile:!0,isDirectory:!1,isSymbolicLink:!1}));let n=this.vfs.readDirSync(t);if(n!==null)return this.mapFastEntriesToDirents(n);let r=await this.vfs.readDir(t,{includeStats:!0});return this.primeListingStats(t,r),this.mapAsyncEntriesToDirents(r)})}mapFastEntriesToDirents(e){return e.map(e=>this.entryToDirent(e))}mapAsyncEntriesToDirents(e){return e.map(e=>this.entryToDirent(e))}entryToDirent(e){return e.type===`symlink`?{name:e.name,isFile:!1,isDirectory:!1,isSymbolicLink:!0}:{name:e.name,isFile:e.type===`file`,isDirectory:e.type===`directory`,isSymbolicLink:!1}}async rm(e,t){return this.dropListingStats(),this.trusted(async()=>{await this.vfs.rm(b(e),t)})}async cp(e,t,n){return this.dropListingStats(),this.trusted(async()=>{let r=b(e),i=b(t);if((await this.vfs.stat(r)).type===`directory`){if(!n?.recursive)throw new He(`EISDIR`,`is a directory`,r);await this.cpDir(r,i)}else await this.vfs.copyFile(r,i)})}async cpDir(e,t){await this.vfs.mkdir(t,{recursive:!0});let n=await this.vfs.readDir(e);for(let r of n){let n=x(e,r.name),i=x(t,r.name);r.type===`directory`?await this.cpDir(n,i):await this.vfs.copyFile(n,i)}}async mv(e,t){return this.dropListingStats(),this.trusted(async()=>{await this.vfs.rename(b(e),b(t))})}async rename(e,t){return this.mv(e,t)}resolvePath(e,t){return t.startsWith(`/`)?b(t):b(x(e,t))}getAllPaths(){return[]}async chmod(e,t){return this.dropListingStats(),this.trusted(()=>this.vfs.chmod(b(e),t))}async updateMetadataBatch(e){return this.dropListingStats(),this.trusted(()=>this.vfs.updateMetadataBatch(e.map(e=>({...e,path:b(e.path)}))))}async symlinkBatch(e){return this.dropListingStats(),this.trusted(()=>this.vfs.symlinkBatch(e.map(e=>({target:e.target,path:b(e.path)}))))}async symlink(e,t){return this.dropListingStats(),this.trusted(async()=>{await this.vfs.symlink(e,b(t))})}async link(e,t){throw Error(`Hard links not supported in VirtualFS`)}async readlink(e){return this.trusted(async()=>this.vfs.readlink(b(e)))}async realpath(e){return this.trusted(async()=>this.vfs.realpath(b(e)))}async utimes(e,t,n){return this.dropListingStats(),this.trusted(()=>this.vfs.utimes(b(e),t,n))}invalidatePaths(e){this.dropListingStats();let t=this.vfs;t.invalidatePaths&&t.invalidatePaths(e)}async forgetSidecarConsistency(){await this.vfs.forgetSidecarConsistency?.()}};function FH(e){return e&&typeof e.getWatcher==`function`?e.getWatcher?.()??null:e&&typeof e.getUnderlyingFS==`function`?FH(e.getUnderlyingFS?.()):null}async function IH(e){let t=ge(`github`);if(t){if(e?.force){await t.onSilentRenew?.();return}await t.getValidAccessToken?.()}}function LH(){let e=ge(`github`);if(!e)return jm;let t=typeof localStorage>`u`?[]:l(localStorage).github;return[...e.oauthTokenDomains??jm,...t??[]]}const RH=e(`almost-bash-shell`),zH=`__SLICC_RUN_PID`,BH=`__SLICC_OUTPUT_TEE__`;function VH(e){let t=e?.get(zH);if(t===void 0)return;let n=Number.parseInt(t,10);return Number.isSafeInteger(n)&&n>0?n:void 0}function HH(e){if(!(zH in e)&&!(BH in e)&&!(`__SLICC_SUDO_REASON`in e)&&!(`__SLICC_PIPESTATUS`in e)&&!(`__SLICC_PIPESTATUS_EX`in e))return{...e};let{[zH]:t,[BH]:n,[mm]:r,[gp]:i,[_p]:a,...o}=e;return o}function UH(e){let t=new AbortController,n=e.filter(e=>e!==void 0),r=()=>t.abort();for(let e of n)e.aborted?t.abort():e.addEventListener(`abort`,r,{once:!0});return{signal:t.signal,release(){for(let e of n)e.removeEventListener(`abort`,r)}}}var WH=class e{options;bash;vfsAdapter;gitCommands;mountCommands;lastEnv;cwd;umask=18;builtinCommandNames;staticBuiltinNames;allowedCommands;scriptCatalog;initialJshSync=null;ownsScriptCatalog;registeredJshCommands=new Map;registeredWorkflowCommands=new Set;registeredWasmCommands=new Set;jshSyncInflight=null;jshSyncDirty=!1;pendingCommandGrants=[];pendingSudoBypasses=new Map;pendingEnvWrites=new Map;activeShellPid;progress;activeRunSignal;commandAbort=new AbortController;scriptRun=null;scriptRunsActive=0;registryNames=new Set;outputTees=new Map;nextOutputTeeId=0;resolveJshProcessConfig=e=>this.buildJshProcessConfig(VH(e));static buildAllowedCommandSet(e){return e.sudo?.defaultDisposition===`require-approval`||!e.allowedCommands||e.allowedCommands.includes(`*`)?null:new Set(e.allowedCommands)}static buildInitialEnv(e,t){return{HOME:fp,PATH:rr,USER:`user`,SHELL:`/bin/bash`,TMPDIR:`/tmp`,PWD:t,...e.env}}buildSupplementalCommands(e,t,n){return TH({onMediaPreview:async e=>this.renderMediaPreview(e),getJshCommands:()=>this.getJshCommandNames(),getWorkflowCommands:()=>this.getWorkflowCommandNames(),syncScriptCommands:()=>this.syncJshCommands(),getStaticBuiltins:()=>[...this.staticBuiltinNames],getScriptRegisteredNames:()=>[...this.registeredJshCommands.keys(),...this.registeredWorkflowCommands,...this.registeredWasmCommands],fs:e.fs,fetch:t,streamFetch:n,scriptCatalog:this.scriptCatalog,browserAPI:e.browserAPI,webhook:e.webhook,crontask:e.crontask,getParentJid:e.getParentJid,isScoop:e.isScoop,buildProcessConfig:this.resolveJshProcessConfig,terminal:e.terminal,gateNativeCommand:this.gateNativeCommand,processManager:e.processManager,sudoCommand:e.sudo?{broker:e.sudo.broker,persistGrant:async e=>{this.pendingCommandGrants.push(e)},suppressNextGate:e=>this.registerSudoBypass(e)}:void 0,setEnv:(e,t)=>{this.pendingEnvWrites.set(e,t),this.lastEnv[e]=t},unsetEnv:e=>{this.pendingEnvWrites.set(e,null),delete this.lastEnv[e]},gitCredential:{githubToken:(e,t)=>this.gitCommands.githubCredential(e,t),githubDomains:LH},gitIdentity:()=>this.gitCommands.identity()})}constructor(t){this.options=t,this.vfsAdapter=new PH(t.fs),this.progress=new Op({scrubLabel:t.scrubProgressLabel}),this.allowedCommands=e.buildAllowedCommandSet(t);let n=t.cwd??`/`,r=e.buildInitialEnv(t,n);this.gitCommands=new ip({fs:t.fs,authorName:r.GIT_AUTHOR_NAME??`User`,authorEmail:r.GIT_AUTHOR_EMAIL??`user@example.com`,ensureFreshGithubToken:IH}),this.mountCommands=new js({fs:t.fs,isScoop:t.isScoop,acquireLocalMountViaToolUI:Gm});let i=t.jshDiscoveryFs??t.fs,a=t.bshDiscoveryFs??t.fs,o=FH(i)??FH(a);this.scriptCatalog=t.scriptCatalog??new vi({jshFs:i,bshFs:a,watcher:o}),this.ownsScriptCatalog=!t.scriptCatalog,o&&o.watch(`/`,e=>e.endsWith(`.jsh`)||e.endsWith(`.workflow.js`)||tr(e),()=>{this.syncJshCommands().catch(()=>void 0)});let s=this.createGitCustomCommand(),c=g({progress:Np(this.progress)}),l=_({progress:Np(this.progress)}),u=this.buildSupplementalCommands(t,c,l),d=[s,this.createMountCustomCommand(),this.createUmountCustomCommand(),zh(t.fs),Ig(t.fs,c,t.browserAPI),...u].filter(e=>this.isCommandAllowed(e.name)),f=[...it(),...rt()],p=this.allowedCommands?f.filter(e=>this.isCommandAllowed(e)):void 0;if(this.bash=new at({fs:this.vfsAdapter,cwd:n,env:{},fetch:c,commands:p,customCommands:d,sleep:em(this.progress,{isAborted:()=>this.activeRunSignal?.aborted??!1}),executionLimitProfile:t.executionLimitProfile,executionLimits:op(t.isScoop?.()??!1,t.executionLimits)}),this.bash.registerTransformPlugin($m),this.allowedCommands!==null){let e=this.bash;for(let t of rt())this.isCommandAllowed(t)||e.commands.delete(t)}{let e=this.bash;for(let[t,n]of e.commands)e.commands.set(t,this.wrapCommandForDispatch(n));this.registryNames=new Set(e.commands.keys())}let m=d.map(e=>e.name),h=p??[...it(),...rt()];this.builtinCommandNames=new Set([...h,...m]),this.staticBuiltinNames=new Set(this.builtinCommandNames),this.vfsAdapter.setRegisteredCommandsFn(()=>[...this.builtinCommandNames]),this.lastEnv={...r},this.cwd=n,this.startInitialJshSync()}getBash(){return this.bash}getCwd(){return this.cwd}getScriptCatalog(){return this.scriptCatalog}getEnv(){return{...this.lastEnv}}setMaskedEnvVar(e,t){this.pendingEnvWrites.set(e,t),this.lastEnv[e]=t}applySessionOverrides(e){e.cwd!==void 0&&(this.cwd=e.cwd,this.lastEnv.PWD=e.cwd),e.env&&Object.assign(this.lastEnv,e.env)}async getJshCommandNames(){return[...(await this.getFilteredJshCommands()).keys()]}async syncJshCommands(){return this.jshSyncInflight===null?(this.jshSyncInflight=this.doSyncJshCommands(),this.jshSyncInflight):(this.jshSyncDirty=!0,this.jshSyncInflight)}cancelActiveCommand(){this.commandAbort.abort(),this.commandAbort=new AbortController}async executeCommand(e,t,n,r=``,i){let a=this.activeShellPid;n!==void 0&&(this.activeShellPid=n);let o=i?.onOutput?`tee-${this.nextOutputTeeId+=1}`:void 0;o&&i?.onOutput&&this.outputTees.set(o,i.onOutput);try{let a=await this.runCommand(e,t,n,r,o,i?.capturePipeStatus);return{stdout:a.stdout,stderr:a.stderr,exitCode:a.exitCode,...a.pipeStatus===void 0?{}:{pipeStatus:a.pipeStatus}}}finally{this.activeShellPid=a,o&&this.outputTees.delete(o)}}async executeScriptFile(e,t=[]){return Qr(e,t,{fs:this.vfsAdapter,cwd:this.cwd,env:new Map(Object.entries(this.lastEnv)),stdin:``,exec:(e,t)=>this.bash.exec(e,{env:t?.env??this.lastEnv,cwd:t?.cwd??this.cwd,umask:this.umask,...t?.env===void 0?{}:{replaceEnv:!0}})},this.buildJshProcessConfig())}dispose(){this.ownsScriptCatalog&&this.scriptCatalog.dispose()}async renderMediaPreview(e){throw Error(`terminal preview is unavailable in headless mode`)}currentScanRoots(){return ir(this.lastEnv.PATH)}startInitialJshSync(){this.initialJshSync=this.initHomeAndProfile().then(()=>this.syncJshCommands()).catch(()=>void 0).finally(()=>{this.initialJshSync=null})}async initHomeAndProfile(){let e=this.options.fs;try{let t=this.options.env?.HOME??await pp(e);this.lastEnv.HOME=t,this.options.env?.USER||(this.lastEnv.USER=mp(t));let n=`${t.replace(/\/+$/,``)}/.profile`;if(!await e.exists(n).catch(()=>!1))return;let r=await this.bash.exec(`. "$HOME/.profile"`,{env:this.lastEnv,cwd:this.cwd,umask:this.umask});if(typeof r.umask==`number`&&(this.umask=r.umask),r.env){let{PWD:e,...t}=r.env;this.lastEnv={...t,PWD:this.lastEnv.PWD??this.cwd}}}catch(e){RH.warn(`HOME/profile init failed; continuing with defaults`,e)}}async waitForInitialJshSync(e){let t=this.initialJshSync;if(t===null)return;if(!e){await t;return}if(e.aborted)return;let n;try{await new Promise(r=>{n=()=>r(),e.addEventListener(`abort`,n,{once:!0}),t.then(()=>r(),()=>r())})}finally{n&&e.removeEventListener(`abort`,n)}}async runCommand(e,t,n,r=``,i,a=!1){if(OH(e.trim().split(/\s+/)[0]||`unknown`),v(),await this.waitForInitialJshSync(t),await this.usesGnuBash())return this.runOnGnuBash(e,t,n,r,i,a);let o=gm(e),s={env:{...this.lastEnv,...n===void 0?{}:{[zH]:String(n)},...i===void 0?{}:{[BH]:i},...o?{[mm]:o}:{}},cwd:this.cwd,umask:this.umask,signal:t,...r===``?{}:{stdin:r,stdinKind:`bytes`}},c=this.lastEnv.PATH,l=UH([t,this.commandAbort.signal]);s.signal=l.signal,this.activeRunSignal=l.signal;let u=this.beginScriptRun(e),d;try{d=await this.bash.exec(Sp(e,a),s)}finally{l.release(),this.activeRunSignal===l.signal&&(this.activeRunSignal=void 0),this.endScriptRun(u)}if(await this.flushPendingCommandGrants(),d=Cp(d,a),typeof d.umask==`number`&&(this.umask=d.umask),d.env&&(this.lastEnv=HH(d.env)),d.env&&this.lastEnv.PATH!==c&&await this.syncJshCommands().catch(()=>void 0),this.applyPendingEnvWrites(),d.env?.PWD&&(this.cwd=d.env.PWD),d.exitCode===127){let t=await this.tryJshFallback(e,n);if(t)return this.syncJshCommands().catch(()=>void 0),t}if(d.exitCode!==0&&d.stderr.includes(`Permission denied`)){let{withShebangExecHint:e}=await import(`./shebang-exec-hint-BISPom3l.js`);return wp(await e(d,this.cwd,this.vfsAdapter),d.pipeStatus)}return d}applyPendingEnvWrites(){for(let[e,t]of this.pendingEnvWrites)t===null?delete this.lastEnv[e]:this.lastEnv[e]=t;this.pendingEnvWrites.clear()}async usesGnuBash(){return!this.options.gnuBash||this.lastEnv.SLICC_SHELL===`just-bash`||typeof SharedArrayBuffer!=`function`?!1:(await this.scriptCatalog.getWasmCommands()).has(`bash`)}async runOnGnuBash(e,t,n,r,i,a){let{runWasmCommand:o,withoutRealmDefaults:s}=await import(`./run-CGZiR3xh.js`),c=gm(e),l={...this.lastEnv,...n===void 0?{}:{[zH]:String(n)},...c?{[mm]:c}:{}},u=i===void 0?void 0:this.outputTees.get(i),d=await dp(e,{env:l,run:(e,i,a)=>o(e,this.wasmContext(i,t,r),{processConfig:this.buildJshProcessConfig(n),gate:this.gateNativeCommand,onOutput:u,fds:a,commands:()=>this.scriptCatalog.getWasmCommands(),gitIdentity:()=>this.gitCommands.identity()})}),f=this.lastEnv.PATH;return d.state&&(this.cwd=d.state.cwd,this.lastEnv=lp(s(d.state.env,l),[zH,mm,BH])),this.lastEnv.PATH!==f&&await this.syncJshCommands().catch(()=>void 0),await this.flushPendingCommandGrants(),this.applyPendingEnvWrites(),{stdout:d.stdout,stderr:d.stderr,exitCode:d.exitCode,env:{...this.lastEnv},...a&&d.state?{pipeStatus:d.state.pipeStatus}:{}}}wasmContext(e,t,n){return{fs:this.vfsAdapter,cwd:this.cwd,env:new Map(Object.entries(e)),exportedEnv:e,stdin:n,signal:t,exec:(e,t)=>this.bash.exec(e,{...t,umask:this.umask})}}gateNativeCommand=async(e,t,n)=>{if(this.allowedCommands!==null&&!this.isCommandAllowed(e))return{stderr:`bash: ${e}: command not found\n`,exitCode:127};if(!this.isTransparentGatingEnabled()||Am.has(e))return null;let r=await this.gateCommandDispatch(e,t,n[mm]);return r?{stderr:r.stderr,exitCode:r.exitCode}:null};isTransparentGatingEnabled(){let e=this.options.sudo;return!!e&&e.transparentGating!==!1}wrapCommandForDispatch(e){let t=this.wrapCommandForSudo(e),n=e.name===`timeout`?im(t,this.progress):om(t,this.progress),r=()=>this.scriptRun?.stepDone(),i=(e,t)=>this.teeCommandOutput(e,t),a=this.outputTees;return{...n,async execute(e,t){let o=t.env?.get(BH),s=o?a.get(o):void 0;s&&(t.writeStdout=s);try{let r=await cm(()=>n.execute(e,t),t.signal);return i(t.env,r),r}finally{r()}}}}teeCommandOutput(e,t){let n=e?.get(BH);if(!n)return;let r=this.outputTees.get(n);if(!r)return;let i=[t.stdout,t.stderr].filter(Boolean).join(``);i&&r(i)}beginScriptRun(e){if(this.scriptRunsActive+=1,!this.progress.hasSink())return null;if(this.scriptRunsActive>1)return this.scriptRun?.end(),this.scriptRun=null,null;let t={totalSteps:null};try{t=Yp(this.bash.transform(e).ast,this.registryNames)}catch{t={totalSteps:null}}return this.scriptRun=new Zp(t,this.progress,Xp(e)),this.scriptRun}endScriptRun(e){this.scriptRunsActive=Math.max(0,this.scriptRunsActive-1),e&&(e.end(),this.scriptRun===e&&(this.scriptRun=null))}wrapCommandForSudo(e){if(!this.isTransparentGatingEnabled()||Am.has(e.name))return e;let t=(t,n)=>this.gateCommandDispatch(e.name,t,n);return{...e,async execute(n,r){return await t(n,r.env?.get(mm))||e.execute(n,r)}}}async gateCommandDispatch(e,t,n){let r=this.options.sudo;if(!r)return null;let i=um(e,t);if(this.consumeSudoBypass(i))return null;let a=r.getPolicy();if(!a)return null;let o=await fm(i,{policy:a,broker:r.broker,persistGrant:async e=>{this.pendingCommandGrants.push(e)},defaultDisposition:r.defaultDisposition,...n?{reason:n}:{}});return o.allowed?null:{stdout:``,stderr:`${o.message}\n`,exitCode:o.exitCode??77}}registerSudoBypass(e){let t=e.trim();t&&this.pendingSudoBypasses.set(t,(this.pendingSudoBypasses.get(t)??0)+1)}consumeSudoBypass(e){let t=this.pendingSudoBypasses.get(e);return t?(t===1?this.pendingSudoBypasses.delete(e):this.pendingSudoBypasses.set(e,t-1),!0):!1}async flushPendingCommandGrants(){if(this.pendingCommandGrants.length===0)return;let e=this.pendingCommandGrants;this.pendingCommandGrants=[];for(let t of e)try{await this.persistCommandGrant(t)}catch{}}async persistCommandGrant(e){let t=this.options.sudo?.persistCommandGrant;if(t){await t(e);return}let n=ut(e);if(!n)return;let r=`${ft}/granted`,i=this.options.fs,a=``;try{await i.exists(r)&&(a=await i.readFile(r))}catch(e){if(!(e instanceof He&&e.code===`ENOENT`))throw e}let o=a&&!a.endsWith(`
3515
- `)?`${a}\n`:a;await i.writeFile(r,`${o}NOPASSWD Cmnd ${n}\n`)}isCommandAllowed(e){return this.allowedCommands===null||this.allowedCommands.has(Am.get(e)??e)}async doSyncJshCommands(){try{let e=await this.scriptCatalog.getJshIndex(this.currentScanRoots()),t=e.commands;for(let t of e.collisions)RH.warn(`jsh command '${t.name}' is provided by more than one skill; using ${t.winnerPath} (${t.reason}), shadowed ${t.shadowedPaths.join(`, `)}`);let n=await this.getFilteredWorkflowCommands(),r=await this.scriptCatalog.getWasmCommands();for(let[e,n]of t)this.isCommandAllowed(e)&&(this.builtinCommandNames.has(e)&&!this.registeredJshCommands.has(e)||this.registeredJshCommands.get(e)!==n&&(this.bash.registerCommand(this.wrapCommandForDispatch(this.makeScriptCommand(e))),this.registeredJshCommands.set(e,n),this.builtinCommandNames.add(e)));let i=[...r.keys()].filter(e=>this.isCommandAllowed(e));this.registerLateScriptNames(i,this.registeredWasmCommands),this.registerLateScriptNames(n.keys(),this.registeredWorkflowCommands)}finally{this.jshSyncInflight=null,this.jshSyncDirty&&(this.jshSyncDirty=!1,this.syncJshCommands().catch(()=>void 0))}}registerLateScriptNames(e,t){let n=[this.registeredJshCommands,this.registeredWasmCommands,this.registeredWorkflowCommands];for(let r of e)if(!t.has(r)){if(n.some(e=>e!==t&&e.has(r))){t.add(r);continue}this.builtinCommandNames.has(r)||(this.bash.registerCommand(this.wrapCommandForDispatch(this.makeScriptCommand(r))),t.add(r),this.builtinCommandNames.add(r))}}makeScriptCommand(e){let t=this.scriptCatalog,n=this.options.jshDiscoveryFs??this.options.fs,r=e,i=async(e,i)=>{let a=i.exec??((e,t)=>this.bash.exec(e,{env:t?.env??Object.fromEntries(i.env),cwd:t?.cwd??i.cwd,args:t?.args,...t?.env===void 0?{}:{replaceEnv:!0}})),o=(await t.getJshCommands(this.currentScanRoots())).get(r);if(o){let t;try{let e=await n.readFile(o,{encoding:`utf-8`});t=typeof e==`string`?e:new TextDecoder().decode(e)}catch{return{stdout:``,stderr:`jsh: cannot read script '${o}'\n`,exitCode:127}}return ti(t,[`node`,o,...e],{fs:i.fs,cwd:i.cwd,env:i.env,stdin:i.stdin,exec:a},this.buildJshProcessConfig(VH(i.env)))}let s=(await t.getWasmCommands()).get(r);if(s){let{runWasmCommand:n}=await import(`./run-CGZiR3xh.js`);return n([`--argv0`,s.argv0,`--module`,s.wasm,s.glue,...e],i,{processConfig:this.buildJshProcessConfig(VH(i.env)),gate:this.gateNativeCommand,defaults:s.env,commands:()=>t.getWasmCommands(),gitIdentity:()=>this.gitCommands.identity()})}let c=(await t.getWorkflowCommands()).get(r);if(c){let t=_i(c.path,e);return a(t[0],{args:t.slice(1),cwd:i.cwd})}return{stdout:``,stderr:`${r}: command no longer exists\n`,exitCode:127}};return{name:e,trusted:!0,async execute(e,t){try{return await i(e,t)}catch(e){let t=e instanceof Error?e.message:String(e);return{stdout:``,stderr:`${r}: ${t}\n`,exitCode:1}}}}}createGitCustomCommand(){let e=this.gitCommands;return S(`git`,async(t,n)=>{let r=n.cwd,i=await e.execute(t,r,n.env,P(n.stdin));return{stdout:i.stdout,stderr:i.stderr,exitCode:i.exitCode}})}createMountCustomCommand(){let e=this.mountCommands;return S(`mount`,async(t,n)=>{let r=n.cwd,i=await e.execute(t,r,n.env);return{stdout:i.stdout,stderr:i.stderr,exitCode:i.exitCode}})}createUmountCustomCommand(){let e=this.mountCommands;return S(`umount`,async(t,n)=>{let r=n.cwd,i=await e.executeUmount(t,r);return{stdout:i.stdout,stderr:i.stderr,exitCode:i.exitCode}})}async getFilteredJshCommands(){let e=await this.scriptCatalog.getJshCommands(this.currentScanRoots()),t=new Map;for(let[n,r]of e)this.builtinCommandNames.has(n)||this.isCommandAllowed(n)&&t.set(n,r);return t}async getFilteredWorkflowCommands(){let e=await this.scriptCatalog.getWorkflowCommands(),t=new Map;for(let[n,r]of e)this.isCommandAllowed(n)&&t.set(n,r);return t}async getWorkflowCommandNames(){return[...(await this.getFilteredWorkflowCommands()).keys()]}async tryJshFallback(e,t){let n=e.trim(),r=n.indexOf(` `),i=r>=0?n.slice(0,r):n,a=r>=0?n.slice(r+1).trim():``,o=(await this.getFilteredJshCommands()).get(i);if(!o)return null;let s=a?hp(a):[],c=this.options.jshDiscoveryFs??this.options.fs,l;try{let e=await c.readFile(o,{encoding:`utf-8`});l=typeof e==`string`?e:new TextDecoder().decode(e)}catch{return{stdout:``,stderr:`jsh: cannot read script '${o}'\n`,exitCode:127,env:this.lastEnv}}let u=[`node`,o,...s],d=await ti(l,u,{fs:this.vfsAdapter,cwd:this.cwd,env:new Map(Object.entries(this.lastEnv)),stdin:``,exec:(e,t)=>this.bash.exec(e,{env:t?.env??this.lastEnv,cwd:t?.cwd??this.cwd,umask:this.umask,...t?.env===void 0?{}:{replaceEnv:!0}})},this.buildJshProcessConfig(t));return{stdout:d.stdout,stderr:d.stderr,exitCode:d.exitCode,env:this.lastEnv}}buildJshProcessConfig(e){if(!(!this.options.processManager||!this.options.processOwner))return{processManager:this.options.processManager,owner:this.options.processOwner,getParentPid:()=>e??this.activeShellPid??this.options.getCurrentShellPid?.()}}};export{va as C,Do as S,Ho as _,FV as a,Oa as b,Dp as c,xs as d,ms as f,Uo as g,cs as h,jV as i,fp as l,us as m,PH as n,kV as o,ds as p,DH as r,pm as s,WH as t,Ss as u,No as v,Da as x,wa as y};
3531
+ `,stderr:``,exitCode:0};let n;try{n=pH(e)}catch(e){return tH(e.message)}let r=n.positional[0],i=n.positional[1],a=!r||r===`-`,o;try{o=await hH(t,r,a)}catch{return tH(`${r}: No such file or directory`)}if(n.revert){let e=iH(o),r=n.plain?lH(e):uH(e);return i?(await t.fs.writeFile(t.fs.resolvePath(t.cwd,i),r),{stdout:``,stderr:``,exitCode:0}):{stdout:iH(r),stderr:``,exitCode:0}}let{data:s,base:c}=_H(n,o),l=gH(n,s,c,r,a);return i?(await t.fs.writeFile(t.fs.resolvePath(t.cwd,i),l),{stdout:``,stderr:``,exitCode:0}):{stdout:l,stderr:``,exitCode:0}})}async function yH(e,t,n,r){if((await e.fs.stat(t)).isFile)return r[n]=await e.fs.readFileBuffer(t),1;let i=await e.fs.readdir(t),a=0;for(let o of i){let i=pr(t,o),s=n?`${n}/${o}`:o;a+=await yH(e,i,s,r)}return a}function bH(){return{stdout:`usage: zip [-r] <archive.zip> <path> [path...]
3532
+ `,stderr:``,exitCode:0}}function xH(){return S(`zip`,async(e,t)=>{if(e.length===0||e.includes(`--help`)||e.includes(`-h`))return bH();let n=!1,r=[];for(let t of e){if(t===`-r`){n=!0;continue}if(t.startsWith(`-`))return{stdout:``,stderr:`zip: unsupported option ${t}\n`,exitCode:1};r.push(t)}if(r.length<2)return{stdout:``,stderr:`zip: expected archive path and at least one input path
3533
+ `,exitCode:1};let i=t.fs.resolvePath(t.cwd,r[0]),a=r.slice(1),o={},s=0;for(let e of a){let r=t.fs.resolvePath(t.cwd,e),i=await t.fs.stat(r),a=(e.startsWith(`/`)?e.slice(1):e.replace(/^\.\//,``))||mr(r);if(i.isDirectory&&!n)return{stdout:``,stderr:`zip: ${e} is a directory (use -r)\n`,exitCode:1};s+=await yH(t,r,a,o)}if(s===0)return{stdout:``,stderr:`zip: nothing to do
3534
+ `,exitCode:1};let c=jt(o);return await t.fs.writeFile(i,c),{stdout:`created ${i} (${s} file(s))\n`,stderr:``,exitCode:0}})}function SH(e){return{setEnv:e.setEnv,unsetEnv:e.unsetEnv,broker:e.sudoCommand?.broker}}function CH(e){let{fs:t,fetch:n}=e;if(!t||!n)return[];let r={fs:t,fetch:n,scriptCatalog:e.scriptCatalog,syncScriptCommands:e.syncScriptCommands};return[HO(`ipk`,r),HO(`npm`,r),HO(`i`,r),jk(`ipx`,{fs:t,fetch:n}),jk(`npx`,{fs:t,fetch:n}),Lb(`di`,{fs:t,fetch:n}),Lb(`uv`,{fs:t,fetch:n}),JR({fs:t,fetch:n})]}function wH(e){let t={buildProcessConfig:e.buildProcessConfig};return[`python3`,`python`,`pyodide`].map(e=>nP(e,t))}function TH(e){let t=e.scriptCatalog;return{buildProcessConfig:e.buildProcessConfig,terminal:e.terminal,gate:e.gateNativeCommand,commands:t&&(()=>t.getWasmCommands()),gitIdentity:e.gitIdentity}}function EH(e={}){let t=[qE({getJshCommands:e.getJshCommands,getWorkflowCommands:e.getWorkflowCommands}),re(),FI(),eI(),qF(e.browserAPI,e.fs),BM(e.browserAPI),Qy(e.browserAPI),QD(e),xH(),wR(),gL(e.fs?{fs:e.fs}:{}),HI(),YI(),KI(),qv(),yB(TH(e)),vC(TH(e)),vH(),kI(`sqlite3`),kI(`sqllite`),NL(),$L(),$x(),kv(),rM({buildProcessConfig:e.buildProcessConfig}),rM({buildProcessConfig:e.buildProcessConfig},`jsh`),...wH(e),...CH(e),...e.fs?[_C({fs:e.fs})]:[],...e.fs?[hj({fs:e.fs})]:[],...e.fetch?[iD({fetch:e.fetch,streamFetch:e.streamFetch})]:[],KS(),qS(),aC(),PB(e.webhook),yV(),Zy(e.crontask),CA({fs:e.fs,scriptCatalog:e.scriptCatalog}),oN({fs:e.fs,fetch:e.fetch}),gC(),bI(),VM(),HM(`pdftk`),HM(`pdf`),Av(`biscotto`,{getParentJid:e.getParentJid,isScoop:e.isScoop}),Av(`biscotti`,{getParentJid:e.getParentJid,isScoop:e.isScoop}),QM(`pdftoppm`),QM(`pdftocairo`),$M(`pdftotext`),Fy(`convert`),Fy(`magick`),kV({fs:e.fs,scriptCatalog:e.scriptCatalog,getStaticBuiltins:e.getStaticBuiltins,getScriptRegisteredNames:e.getScriptRegisteredNames}),rR(),yR(),JD(),YD(),bR(),gj(),oP(),_A(),wx(),vM(),_M(),mA(),vF(SH(e)),Bm(e.gitCredential),yP({fs:e.fs}),KP(),Wv(),Gv(),Kv(`xclip`),Kv(`xsel`),GP(),PC(),t_(),n_(),Uj(e.fs),ct(),cM(),S_({getParentJid:e.getParentJid}),Mx(),ON({processManager:e.processManager}),lz({processManager:e.processManager}),Pk({processManager:e.processManager}),Mk({processManager:e.processManager,scriptCatalog:e.scriptCatalog}),...T_(),mj(),oA(),Pz(),AD(),PS(),Xz({processManager:e.processManager}),Xv({processManager:e.processManager,browser:e.browserAPI,sudoBroker:e.sudoCommand?.broker}),GS(),Lv({registry:e.cherryRuntimeRegistry}),sb(),pb({fs:e.fs}),mb({fs:e.fs}),LI(e.sudoCommand),KV({getParentJid:e.getParentJid,syncScriptCommands:e.syncScriptCommands}),bV(),$F()];return e.fs&&(tN(),t.push(...Vn.map(t=>WE(t,e.browserAPI,e.fs,{isScoop:e.isScoop})))),t}let DH=null;function OH(e){DH=e}function kH(e){DH?.(e)}var AH=Ft();const jH=Reflect.get(nt,`DefenseInDepthBox`);function MH(e){return(typeof e==`string`?e:e?.encoding)??`utf8`}function NH(e,t){if(typeof e!=`string`)return e;let n=MH(t);if(n===`binary`||n===`latin1`){let t=_e(e);if(t)return t}return AH.Buffer.from(e,n)}function PH(e){return e===`/bin`?`/usr/bin`:e.startsWith(`/bin/`)?`/usr${e}`:e}var FH=class{vfs;registeredCommandsFn=null;listingStats=new Map;listingStatsMax;listingStatsTtlMs;constructor(e,t){this.vfs=e,this.listingStatsMax=Math.max(1,t?.listingStatsMax??2e4),this.listingStatsTtlMs=t?.listingStatsTtlMs??1e3,this.updateMetadataBatch=this.updateMetadataBatch.bind(this),this.symlinkBatch=this.symlinkBatch.bind(this)}get listingStatsSize(){return this.listingStats.size}primeListingStats(e,t){let n=Date.now();if(t.length>this.listingStatsMax){this.listingStats.clear();return}this.sweepExpiredListingStats(n),this.listingStats.size+t.length>this.listingStatsMax&&this.listingStats.clear();let r=e===`/`?`/`:`${e}/`;for(let e of t){let t=Ve(e),i=`${r}${e.name}`;this.listingStats.delete(i),t&&this.listingStats.set(i,{stats:t,at:n})}}sweepExpiredListingStats(e){for(let[t,n]of this.listingStats){if(e-n.at<=this.listingStatsTtlMs)break;this.listingStats.delete(t)}}primedStats(e){let t=this.listingStats.get(e);if(t){if(Date.now()-t.at>this.listingStatsTtlMs){this.listingStats.delete(e);return}return t.stats}}dropListingStats(){this.listingStats.clear()}setRegisteredCommandsFn(e){this.registeredCommandsFn=e}getVirtualBinCommands(){return this.registeredCommandsFn?.()??[]}virtualUsrStat(e){let t=PH(e);if(t===`/usr`||t===`/usr/bin`)return{isFile:!1,isDirectory:!0,isSymbolicLink:!1,mode:493,size:0,mtime:new Date(0)};if(t.startsWith(`/usr/bin/`)){let e=t.slice(9);if(e.length>0&&!e.includes(`/`)&&this.getVirtualBinCommands().includes(e))return{isFile:!0,isDirectory:!1,isSymbolicLink:!1,mode:493,size:0,mtime:new Date(0)}}return null}canWrite(e){let t=this.vfs;return typeof t.canWrite!=`function`||t.canWrite(e)}listMountPoints(){let e=this.vfs;return typeof e.listMountPoints==`function`?e.listMountPoints():[]}trusted(e){let t=jH?.runTrustedAsync;return t?t(e):Promise.resolve().then(e)}async readFile(e,t){return this.trusted(async()=>{let n=b(e),r=await this.vfs.readFile(n,{encoding:`binary`}),i=r instanceof Uint8Array?r:new TextEncoder().encode(r),a=MH(t),o=AH.Buffer.from(i.buffer,i.byteOffset,i.byteLength).toString(a);return a!==`hex`&&a!==`base64`&&m(o,i),o})}async readFileBuffer(e){return this.trusted(async()=>{let t=b(e),n=await this.vfs.readFile(t,{encoding:`binary`});return n instanceof Uint8Array?n:new TextEncoder().encode(n)})}async readFileBytes(e){let t=await this.readFileBuffer(e);return AH.Buffer.from(t.buffer,t.byteOffset,t.byteLength).toString(`latin1`)}async getNativeFile(e){return this.trusted(()=>this.vfs.getNativeFile(b(e)))}async readFileRange(e,t,n){return this.trusted(()=>this.vfs.readFileRange(b(e),t,n))}async writeFile(e,t,n){return this.dropListingStats(),this.trusted(async()=>{let r=b(e);await this.vfs.writeFile(r,NH(t,n))})}async appendFile(e,t,n){return this.dropListingStats(),this.trusted(()=>this.vfs.appendFile(b(e),NH(t,n)))}async exists(e){return this.trusted(async()=>{let t=b(e);return this.virtualUsrStat(t)?!0:this.vfs.exists(t)})}async stat(e){return this.trusted(async()=>{let t=b(e),n=this.virtualUsrStat(t);if(n)return n;let r=this.vfs.statSync(t);if(r)return{isFile:r.type===`file`,isDirectory:r.type===`directory`,isSymbolicLink:!!r.isSymlink,mode:r.mode??(r.type===`directory`?493:420),size:r.size,mtime:new Date(r.mtime),identity:r.identity,dev:r.dev,ino:r.identity===void 0?void 0:r.ino};let i=this.primedStats(t)??await this.vfs.stat(t);return{isFile:i.type===`file`,isDirectory:i.type===`directory`,isSymbolicLink:!!i.isSymlink,mode:i.mode??(i.type===`directory`?493:420),size:i.size,mtime:new Date(i.mtime),identity:i.identity,dev:i.dev,ino:i.identity===void 0?void 0:i.ino}})}async lstat(e){return this.trusted(async()=>{let t=b(e),n=this.virtualUsrStat(t);if(n)return n;let r=this.vfs.lstatSync(t);if(r)return{isFile:r.type===`file`,isDirectory:r.type===`directory`,isSymbolicLink:r.type===`symlink`,mode:r.mode??(r.type===`directory`?493:r.type===`symlink`?511:420),size:r.size,mtime:new Date(r.mtime),identity:r.identity,dev:r.dev,ino:r.identity===void 0?void 0:r.ino};let i=this.primedStats(t)??await this.vfs.lstat(t);return{isFile:i.type===`file`,isDirectory:i.type===`directory`,isSymbolicLink:i.type===`symlink`,mode:i.mode??(i.type===`directory`?493:i.type===`symlink`?511:420),size:i.size,mtime:new Date(i.mtime),identity:i.identity,dev:i.dev,ino:i.identity===void 0?void 0:i.ino}})}async mkdir(e,t){return this.dropListingStats(),this.trusted(async()=>{await this.vfs.mkdir(b(e),t)})}async readdir(e){return this.trusted(async()=>{let t=b(e);if(t===`/usr`)return[`bin`];if(PH(t)===`/usr/bin`)return this.getVirtualBinCommands().slice().sort();let n=this.vfs.readDirSync(t);if(n!==null)return n.map(e=>e.name);let r=await this.vfs.readDir(t,{includeStats:!0});return this.primeListingStats(t,r),r.map(e=>e.name)})}async readdirWithFileTypes(e){return this.trusted(async()=>{let t=b(e);if(t===`/usr`)return[{name:`bin`,isFile:!1,isDirectory:!0,isSymbolicLink:!1}];if(PH(t)===`/usr/bin`)return this.getVirtualBinCommands().slice().sort().map(e=>({name:e,isFile:!0,isDirectory:!1,isSymbolicLink:!1}));let n=this.vfs.readDirSync(t);if(n!==null)return this.mapFastEntriesToDirents(n);let r=await this.vfs.readDir(t,{includeStats:!0});return this.primeListingStats(t,r),this.mapAsyncEntriesToDirents(r)})}mapFastEntriesToDirents(e){return e.map(e=>this.entryToDirent(e))}mapAsyncEntriesToDirents(e){return e.map(e=>this.entryToDirent(e))}entryToDirent(e){return e.type===`symlink`?{name:e.name,isFile:!1,isDirectory:!1,isSymbolicLink:!0}:{name:e.name,isFile:e.type===`file`,isDirectory:e.type===`directory`,isSymbolicLink:!1}}async rm(e,t){return this.dropListingStats(),this.trusted(async()=>{await this.vfs.rm(b(e),t)})}async cp(e,t,n){return this.dropListingStats(),this.trusted(async()=>{let r=b(e),i=b(t);if((await this.vfs.stat(r)).type===`directory`){if(!n?.recursive)throw new He(`EISDIR`,`is a directory`,r);await this.cpDir(r,i)}else await this.vfs.copyFile(r,i)})}async cpDir(e,t){await this.vfs.mkdir(t,{recursive:!0});let n=await this.vfs.readDir(e);for(let r of n){let n=x(e,r.name),i=x(t,r.name);r.type===`directory`?await this.cpDir(n,i):await this.vfs.copyFile(n,i)}}async mv(e,t){return this.dropListingStats(),this.trusted(async()=>{await this.vfs.rename(b(e),b(t))})}async rename(e,t){return this.mv(e,t)}resolvePath(e,t){return t.startsWith(`/`)?b(t):b(x(e,t))}getAllPaths(){return[]}async chmod(e,t){return this.dropListingStats(),this.trusted(()=>this.vfs.chmod(b(e),t))}async updateMetadataBatch(e){return this.dropListingStats(),this.trusted(()=>this.vfs.updateMetadataBatch(e.map(e=>({...e,path:b(e.path)}))))}async symlinkBatch(e){return this.dropListingStats(),this.trusted(()=>this.vfs.symlinkBatch(e.map(e=>({target:e.target,path:b(e.path)}))))}async symlink(e,t){return this.dropListingStats(),this.trusted(async()=>{await this.vfs.symlink(e,b(t))})}async link(e,t){throw Error(`Hard links not supported in VirtualFS`)}async readlink(e){return this.trusted(async()=>this.vfs.readlink(b(e)))}async realpath(e){return this.trusted(async()=>this.vfs.realpath(b(e)))}async utimes(e,t,n){return this.dropListingStats(),this.trusted(()=>this.vfs.utimes(b(e),t,n))}invalidatePaths(e){this.dropListingStats();let t=this.vfs;t.invalidatePaths&&t.invalidatePaths(e)}async forgetSidecarConsistency(){await this.vfs.forgetSidecarConsistency?.()}};function IH(e){return e&&typeof e.getWatcher==`function`?e.getWatcher?.()??null:e&&typeof e.getUnderlyingFS==`function`?IH(e.getUnderlyingFS?.()):null}async function LH(e){let t=ge(`github`);if(t){if(e?.force){await t.onSilentRenew?.();return}await t.getValidAccessToken?.()}}function RH(){let e=ge(`github`);if(!e)return jm;let t=typeof localStorage>`u`?[]:l(localStorage).github;return[...e.oauthTokenDomains??jm,...t??[]]}const zH=e(`almost-bash-shell`),BH=`__SLICC_RUN_PID`,VH=`__SLICC_OUTPUT_TEE__`;function HH(e){let t=e?.get(BH);if(t===void 0)return;let n=Number.parseInt(t,10);return Number.isSafeInteger(n)&&n>0?n:void 0}function UH(e){if(!(BH in e)&&!(VH in e)&&!(`__SLICC_SUDO_REASON`in e)&&!(`__SLICC_PIPESTATUS`in e)&&!(`__SLICC_PIPESTATUS_EX`in e))return{...e};let{[BH]:t,[VH]:n,[mm]:r,[gp]:i,[_p]:a,...o}=e;return o}function WH(e){let t=new AbortController,n=e.filter(e=>e!==void 0),r=()=>t.abort();for(let e of n)e.aborted?t.abort():e.addEventListener(`abort`,r,{once:!0});return{signal:t.signal,release(){for(let e of n)e.removeEventListener(`abort`,r)}}}var GH=class e{options;bash;vfsAdapter;gitCommands;mountCommands;lastEnv;cwd;umask=18;builtinCommandNames;staticBuiltinNames;allowedCommands;scriptCatalog;initialJshSync=null;ownsScriptCatalog;registeredJshCommands=new Map;registeredWorkflowCommands=new Set;registeredWasmCommands=new Set;jshSyncInflight=null;jshSyncDirty=!1;pendingCommandGrants=[];pendingSudoBypasses=new Map;pendingEnvWrites=new Map;activeShellPid;progress;activeRunSignal;commandAbort=new AbortController;scriptRun=null;scriptRunsActive=0;registryNames=new Set;outputTees=new Map;nextOutputTeeId=0;resolveJshProcessConfig=e=>this.buildJshProcessConfig(HH(e));static buildAllowedCommandSet(e){return e.sudo?.defaultDisposition===`require-approval`||!e.allowedCommands||e.allowedCommands.includes(`*`)?null:new Set(e.allowedCommands)}static buildInitialEnv(e,t){return{HOME:fp,PATH:rr,USER:`user`,SHELL:`/bin/bash`,TMPDIR:`/tmp`,PWD:t,...e.env}}buildSupplementalCommands(e,t,n){return EH({onMediaPreview:async e=>this.renderMediaPreview(e),getJshCommands:()=>this.getJshCommandNames(),getWorkflowCommands:()=>this.getWorkflowCommandNames(),syncScriptCommands:()=>this.syncJshCommands(),getStaticBuiltins:()=>[...this.staticBuiltinNames],getScriptRegisteredNames:()=>[...this.registeredJshCommands.keys(),...this.registeredWorkflowCommands,...this.registeredWasmCommands],fs:e.fs,fetch:t,streamFetch:n,scriptCatalog:this.scriptCatalog,browserAPI:e.browserAPI,webhook:e.webhook,crontask:e.crontask,getParentJid:e.getParentJid,isScoop:e.isScoop,buildProcessConfig:this.resolveJshProcessConfig,terminal:e.terminal,gateNativeCommand:this.gateNativeCommand,processManager:e.processManager,sudoCommand:e.sudo?{broker:e.sudo.broker,persistGrant:async e=>{this.pendingCommandGrants.push(e)},suppressNextGate:e=>this.registerSudoBypass(e)}:void 0,setEnv:(e,t)=>{this.pendingEnvWrites.set(e,t),this.lastEnv[e]=t},unsetEnv:e=>{this.pendingEnvWrites.set(e,null),delete this.lastEnv[e]},gitCredential:{githubToken:(e,t)=>this.gitCommands.githubCredential(e,t),githubDomains:RH},gitIdentity:()=>this.gitCommands.identity()})}constructor(t){this.options=t,this.vfsAdapter=new FH(t.fs),this.progress=new Op({scrubLabel:t.scrubProgressLabel}),this.allowedCommands=e.buildAllowedCommandSet(t);let n=t.cwd??`/`,r=e.buildInitialEnv(t,n);this.gitCommands=new ip({fs:t.fs,authorName:r.GIT_AUTHOR_NAME??`User`,authorEmail:r.GIT_AUTHOR_EMAIL??`user@example.com`,ensureFreshGithubToken:LH}),this.mountCommands=new js({fs:t.fs,isScoop:t.isScoop,acquireLocalMountViaToolUI:Gm});let i=t.jshDiscoveryFs??t.fs,a=t.bshDiscoveryFs??t.fs,o=IH(i)??IH(a);this.scriptCatalog=t.scriptCatalog??new vi({jshFs:i,bshFs:a,watcher:o}),this.ownsScriptCatalog=!t.scriptCatalog,o&&o.watch(`/`,e=>e.endsWith(`.jsh`)||e.endsWith(`.workflow.js`)||tr(e),()=>{this.syncJshCommands().catch(()=>void 0)});let s=this.createGitCustomCommand(),c=g({progress:Np(this.progress)}),l=_({progress:Np(this.progress)}),u=this.buildSupplementalCommands(t,c,l),d=[s,this.createMountCustomCommand(),this.createUmountCustomCommand(),zh(t.fs),Ig(t.fs,c,t.browserAPI),...u].filter(e=>this.isCommandAllowed(e.name)),f=[...it(),...rt()],p=this.allowedCommands?f.filter(e=>this.isCommandAllowed(e)):void 0;if(this.bash=new at({fs:this.vfsAdapter,cwd:n,env:{},fetch:c,commands:p,customCommands:d,sleep:em(this.progress,{isAborted:()=>this.activeRunSignal?.aborted??!1}),executionLimitProfile:t.executionLimitProfile,executionLimits:op(t.isScoop?.()??!1,t.executionLimits)}),this.bash.registerTransformPlugin($m),this.allowedCommands!==null){let e=this.bash;for(let t of rt())this.isCommandAllowed(t)||e.commands.delete(t)}{let e=this.bash;for(let[t,n]of e.commands)e.commands.set(t,this.wrapCommandForDispatch(n));this.registryNames=new Set(e.commands.keys())}let m=d.map(e=>e.name),h=p??[...it(),...rt()];this.builtinCommandNames=new Set([...h,...m]),this.staticBuiltinNames=new Set(this.builtinCommandNames),this.vfsAdapter.setRegisteredCommandsFn(()=>[...this.builtinCommandNames]),this.lastEnv={...r},this.cwd=n,this.startInitialJshSync()}getBash(){return this.bash}getCwd(){return this.cwd}getScriptCatalog(){return this.scriptCatalog}getEnv(){return{...this.lastEnv}}setMaskedEnvVar(e,t){this.pendingEnvWrites.set(e,t),this.lastEnv[e]=t}applySessionOverrides(e){e.cwd!==void 0&&(this.cwd=e.cwd,this.lastEnv.PWD=e.cwd),e.env&&Object.assign(this.lastEnv,e.env)}async getJshCommandNames(){return[...(await this.getFilteredJshCommands()).keys()]}async syncJshCommands(){return this.jshSyncInflight===null?(this.jshSyncInflight=this.doSyncJshCommands(),this.jshSyncInflight):(this.jshSyncDirty=!0,this.jshSyncInflight)}cancelActiveCommand(){this.commandAbort.abort(),this.commandAbort=new AbortController}async executeCommand(e,t,n,r=``,i){let a=this.activeShellPid;n!==void 0&&(this.activeShellPid=n);let o=i?.onOutput?`tee-${this.nextOutputTeeId+=1}`:void 0;o&&i?.onOutput&&this.outputTees.set(o,i.onOutput);try{let a=await this.runCommand(e,t,n,r,o,i?.capturePipeStatus);return{stdout:a.stdout,stderr:a.stderr,exitCode:a.exitCode,...a.pipeStatus===void 0?{}:{pipeStatus:a.pipeStatus}}}finally{this.activeShellPid=a,o&&this.outputTees.delete(o)}}async executeScriptFile(e,t=[]){return Qr(e,t,{fs:this.vfsAdapter,cwd:this.cwd,env:new Map(Object.entries(this.lastEnv)),stdin:``,exec:(e,t)=>this.bash.exec(e,{env:t?.env??this.lastEnv,cwd:t?.cwd??this.cwd,umask:this.umask,...t?.env===void 0?{}:{replaceEnv:!0}})},this.buildJshProcessConfig())}dispose(){this.ownsScriptCatalog&&this.scriptCatalog.dispose()}async renderMediaPreview(e){throw Error(`terminal preview is unavailable in headless mode`)}currentScanRoots(){return ir(this.lastEnv.PATH)}startInitialJshSync(){this.initialJshSync=this.initHomeAndProfile().then(()=>this.syncJshCommands()).catch(()=>void 0).finally(()=>{this.initialJshSync=null})}async initHomeAndProfile(){let e=this.options.fs;try{let t=this.options.env?.HOME??await pp(e);this.lastEnv.HOME=t,this.options.env?.USER||(this.lastEnv.USER=mp(t));let n=`${t.replace(/\/+$/,``)}/.profile`;if(!await e.exists(n).catch(()=>!1))return;let r=await this.bash.exec(`. "$HOME/.profile"`,{env:this.lastEnv,cwd:this.cwd,umask:this.umask});if(typeof r.umask==`number`&&(this.umask=r.umask),r.env){let{PWD:e,...t}=r.env;this.lastEnv={...t,PWD:this.lastEnv.PWD??this.cwd}}}catch(e){zH.warn(`HOME/profile init failed; continuing with defaults`,e)}}async waitForInitialJshSync(e){let t=this.initialJshSync;if(t===null)return;if(!e){await t;return}if(e.aborted)return;let n;try{await new Promise(r=>{n=()=>r(),e.addEventListener(`abort`,n,{once:!0}),t.then(()=>r(),()=>r())})}finally{n&&e.removeEventListener(`abort`,n)}}async runCommand(e,t,n,r=``,i,a=!1){if(kH(e.trim().split(/\s+/)[0]||`unknown`),v(),await this.waitForInitialJshSync(t),await this.usesGnuBash())return this.runOnGnuBash(e,t,n,r,i,a);let o=gm(e),s={env:{...this.lastEnv,...n===void 0?{}:{[BH]:String(n)},...i===void 0?{}:{[VH]:i},...o?{[mm]:o}:{}},cwd:this.cwd,umask:this.umask,signal:t,...r===``?{}:{stdin:r,stdinKind:`bytes`}},c=this.lastEnv.PATH,l=WH([t,this.commandAbort.signal]);s.signal=l.signal,this.activeRunSignal=l.signal;let u=this.beginScriptRun(e),d;try{d=await this.bash.exec(Sp(e,a),s)}finally{l.release(),this.activeRunSignal===l.signal&&(this.activeRunSignal=void 0),this.endScriptRun(u)}if(await this.flushPendingCommandGrants(),d=Cp(d,a),typeof d.umask==`number`&&(this.umask=d.umask),d.env&&(this.lastEnv=UH(d.env)),d.env&&this.lastEnv.PATH!==c&&await this.syncJshCommands().catch(()=>void 0),this.applyPendingEnvWrites(),d.env?.PWD&&(this.cwd=d.env.PWD),d.exitCode===127){let t=await this.tryJshFallback(e,n);if(t)return this.syncJshCommands().catch(()=>void 0),t}if(d.exitCode!==0&&d.stderr.includes(`Permission denied`)){let{withShebangExecHint:e}=await import(`./shebang-exec-hint-BISPom3l.js`);return wp(await e(d,this.cwd,this.vfsAdapter),d.pipeStatus)}return d}applyPendingEnvWrites(){for(let[e,t]of this.pendingEnvWrites)t===null?delete this.lastEnv[e]:this.lastEnv[e]=t;this.pendingEnvWrites.clear()}async usesGnuBash(){return!this.options.gnuBash||this.lastEnv.SLICC_SHELL===`just-bash`||typeof SharedArrayBuffer!=`function`?!1:(await this.scriptCatalog.getWasmCommands()).has(`bash`)}async runOnGnuBash(e,t,n,r,i,a){let{runWasmCommand:o,withoutRealmDefaults:s}=await import(`./run-CGZiR3xh.js`),c=gm(e),l={...this.lastEnv,...n===void 0?{}:{[BH]:String(n)},...c?{[mm]:c}:{}},u=i===void 0?void 0:this.outputTees.get(i),d=await dp(e,{env:l,run:(e,i,a)=>o(e,this.wasmContext(i,t,r),{processConfig:this.buildJshProcessConfig(n),gate:this.gateNativeCommand,onOutput:u,fds:a,commands:()=>this.scriptCatalog.getWasmCommands(),gitIdentity:()=>this.gitCommands.identity()})}),f=this.lastEnv.PATH;return d.state&&(this.cwd=d.state.cwd,this.lastEnv=lp(s(d.state.env,l),[BH,mm,VH])),this.lastEnv.PATH!==f&&await this.syncJshCommands().catch(()=>void 0),await this.flushPendingCommandGrants(),this.applyPendingEnvWrites(),{stdout:d.stdout,stderr:d.stderr,exitCode:d.exitCode,env:{...this.lastEnv},...a&&d.state?{pipeStatus:d.state.pipeStatus}:{}}}wasmContext(e,t,n){return{fs:this.vfsAdapter,cwd:this.cwd,env:new Map(Object.entries(e)),exportedEnv:e,stdin:n,signal:t,exec:(e,t)=>this.bash.exec(e,{...t,umask:this.umask})}}gateNativeCommand=async(e,t,n)=>{if(this.allowedCommands!==null&&!this.isCommandAllowed(e))return{stderr:`bash: ${e}: command not found\n`,exitCode:127};if(!this.isTransparentGatingEnabled()||Am.has(e))return null;let r=await this.gateCommandDispatch(e,t,n[mm]);return r?{stderr:r.stderr,exitCode:r.exitCode}:null};isTransparentGatingEnabled(){let e=this.options.sudo;return!!e&&e.transparentGating!==!1}wrapCommandForDispatch(e){let t=this.wrapCommandForSudo(e),n=e.name===`timeout`?im(t,this.progress):om(t,this.progress),r=()=>this.scriptRun?.stepDone(),i=(e,t)=>this.teeCommandOutput(e,t),a=this.outputTees;return{...n,async execute(e,t){let o=t.env?.get(VH),s=o?a.get(o):void 0;s&&(t.writeStdout=s);try{let r=await cm(()=>n.execute(e,t),t.signal);return i(t.env,r),r}finally{r()}}}}teeCommandOutput(e,t){let n=e?.get(VH);if(!n)return;let r=this.outputTees.get(n);if(!r)return;let i=[t.stdout,t.stderr].filter(Boolean).join(``);i&&r(i)}beginScriptRun(e){if(this.scriptRunsActive+=1,!this.progress.hasSink())return null;if(this.scriptRunsActive>1)return this.scriptRun?.end(),this.scriptRun=null,null;let t={totalSteps:null};try{t=Yp(this.bash.transform(e).ast,this.registryNames)}catch{t={totalSteps:null}}return this.scriptRun=new Zp(t,this.progress,Xp(e)),this.scriptRun}endScriptRun(e){this.scriptRunsActive=Math.max(0,this.scriptRunsActive-1),e&&(e.end(),this.scriptRun===e&&(this.scriptRun=null))}wrapCommandForSudo(e){if(!this.isTransparentGatingEnabled()||Am.has(e.name))return e;let t=(t,n)=>this.gateCommandDispatch(e.name,t,n);return{...e,async execute(n,r){return await t(n,r.env?.get(mm))||e.execute(n,r)}}}async gateCommandDispatch(e,t,n){let r=this.options.sudo;if(!r)return null;let i=um(e,t);if(this.consumeSudoBypass(i))return null;let a=r.getPolicy();if(!a)return null;let o=await fm(i,{policy:a,broker:r.broker,persistGrant:async e=>{this.pendingCommandGrants.push(e)},defaultDisposition:r.defaultDisposition,...n?{reason:n}:{}});return o.allowed?null:{stdout:``,stderr:`${o.message}\n`,exitCode:o.exitCode??77}}registerSudoBypass(e){let t=e.trim();t&&this.pendingSudoBypasses.set(t,(this.pendingSudoBypasses.get(t)??0)+1)}consumeSudoBypass(e){let t=this.pendingSudoBypasses.get(e);return t?(t===1?this.pendingSudoBypasses.delete(e):this.pendingSudoBypasses.set(e,t-1),!0):!1}async flushPendingCommandGrants(){if(this.pendingCommandGrants.length===0)return;let e=this.pendingCommandGrants;this.pendingCommandGrants=[];for(let t of e)try{await this.persistCommandGrant(t)}catch{}}async persistCommandGrant(e){let t=this.options.sudo?.persistCommandGrant;if(t){await t(e);return}let n=ut(e);if(!n)return;let r=`${ft}/granted`,i=this.options.fs,a=``;try{await i.exists(r)&&(a=await i.readFile(r))}catch(e){if(!(e instanceof He&&e.code===`ENOENT`))throw e}let o=a&&!a.endsWith(`
3535
+ `)?`${a}\n`:a;await i.writeFile(r,`${o}NOPASSWD Cmnd ${n}\n`)}isCommandAllowed(e){return this.allowedCommands===null||this.allowedCommands.has(Am.get(e)??e)}async doSyncJshCommands(){try{let e=await this.scriptCatalog.getJshIndex(this.currentScanRoots()),t=e.commands;for(let t of e.collisions)zH.warn(`jsh command '${t.name}' is provided by more than one skill; using ${t.winnerPath} (${t.reason}), shadowed ${t.shadowedPaths.join(`, `)}`);let n=await this.getFilteredWorkflowCommands(),r=await this.scriptCatalog.getWasmCommands();for(let[e,n]of t)this.isCommandAllowed(e)&&(this.builtinCommandNames.has(e)&&!this.registeredJshCommands.has(e)||this.registeredJshCommands.get(e)!==n&&(this.bash.registerCommand(this.wrapCommandForDispatch(this.makeScriptCommand(e))),this.registeredJshCommands.set(e,n),this.builtinCommandNames.add(e)));let i=[...r.keys()].filter(e=>this.isCommandAllowed(e));this.registerLateScriptNames(i,this.registeredWasmCommands),this.registerLateScriptNames(n.keys(),this.registeredWorkflowCommands)}finally{this.jshSyncInflight=null,this.jshSyncDirty&&(this.jshSyncDirty=!1,this.syncJshCommands().catch(()=>void 0))}}registerLateScriptNames(e,t){let n=[this.registeredJshCommands,this.registeredWasmCommands,this.registeredWorkflowCommands];for(let r of e)if(!t.has(r)){if(n.some(e=>e!==t&&e.has(r))){t.add(r);continue}this.builtinCommandNames.has(r)||(this.bash.registerCommand(this.wrapCommandForDispatch(this.makeScriptCommand(r))),t.add(r),this.builtinCommandNames.add(r))}}makeScriptCommand(e){let t=this.scriptCatalog,n=this.options.jshDiscoveryFs??this.options.fs,r=e,i=async(e,i)=>{let a=i.exec??((e,t)=>this.bash.exec(e,{env:t?.env??Object.fromEntries(i.env),cwd:t?.cwd??i.cwd,args:t?.args,...t?.env===void 0?{}:{replaceEnv:!0}})),o=(await t.getJshCommands(this.currentScanRoots())).get(r);if(o){let t;try{let e=await n.readFile(o,{encoding:`utf-8`});t=typeof e==`string`?e:new TextDecoder().decode(e)}catch{return{stdout:``,stderr:`jsh: cannot read script '${o}'\n`,exitCode:127}}return ti(t,[`node`,o,...e],{fs:i.fs,cwd:i.cwd,env:i.env,stdin:i.stdin,exec:a},this.buildJshProcessConfig(HH(i.env)))}let s=(await t.getWasmCommands()).get(r);if(s){let{runWasmCommand:n}=await import(`./run-CGZiR3xh.js`);return n([`--argv0`,s.argv0,`--module`,s.wasm,s.glue,...e],i,{processConfig:this.buildJshProcessConfig(HH(i.env)),gate:this.gateNativeCommand,defaults:s.env,commands:()=>t.getWasmCommands(),gitIdentity:()=>this.gitCommands.identity()})}let c=(await t.getWorkflowCommands()).get(r);if(c){let t=_i(c.path,e);return a(t[0],{args:t.slice(1),cwd:i.cwd})}return{stdout:``,stderr:`${r}: command no longer exists\n`,exitCode:127}};return{name:e,trusted:!0,async execute(e,t){try{return await i(e,t)}catch(e){let t=e instanceof Error?e.message:String(e);return{stdout:``,stderr:`${r}: ${t}\n`,exitCode:1}}}}}createGitCustomCommand(){let e=this.gitCommands;return S(`git`,async(t,n)=>{let r=n.cwd,i=await e.execute(t,r,n.env,P(n.stdin));return{stdout:i.stdout,stderr:i.stderr,exitCode:i.exitCode}})}createMountCustomCommand(){let e=this.mountCommands;return S(`mount`,async(t,n)=>{let r=n.cwd,i=await e.execute(t,r,n.env);return{stdout:i.stdout,stderr:i.stderr,exitCode:i.exitCode}})}createUmountCustomCommand(){let e=this.mountCommands;return S(`umount`,async(t,n)=>{let r=n.cwd,i=await e.executeUmount(t,r);return{stdout:i.stdout,stderr:i.stderr,exitCode:i.exitCode}})}async getFilteredJshCommands(){let e=await this.scriptCatalog.getJshCommands(this.currentScanRoots()),t=new Map;for(let[n,r]of e)this.builtinCommandNames.has(n)||this.isCommandAllowed(n)&&t.set(n,r);return t}async getFilteredWorkflowCommands(){let e=await this.scriptCatalog.getWorkflowCommands(),t=new Map;for(let[n,r]of e)this.isCommandAllowed(n)&&t.set(n,r);return t}async getWorkflowCommandNames(){return[...(await this.getFilteredWorkflowCommands()).keys()]}async tryJshFallback(e,t){let n=e.trim(),r=n.indexOf(` `),i=r>=0?n.slice(0,r):n,a=r>=0?n.slice(r+1).trim():``,o=(await this.getFilteredJshCommands()).get(i);if(!o)return null;let s=a?hp(a):[],c=this.options.jshDiscoveryFs??this.options.fs,l;try{let e=await c.readFile(o,{encoding:`utf-8`});l=typeof e==`string`?e:new TextDecoder().decode(e)}catch{return{stdout:``,stderr:`jsh: cannot read script '${o}'\n`,exitCode:127,env:this.lastEnv}}let u=[`node`,o,...s],d=await ti(l,u,{fs:this.vfsAdapter,cwd:this.cwd,env:new Map(Object.entries(this.lastEnv)),stdin:``,exec:(e,t)=>this.bash.exec(e,{env:t?.env??this.lastEnv,cwd:t?.cwd??this.cwd,umask:this.umask,...t?.env===void 0?{}:{replaceEnv:!0}})},this.buildJshProcessConfig(t));return{stdout:d.stdout,stderr:d.stderr,exitCode:d.exitCode,env:this.lastEnv}}buildJshProcessConfig(e){if(!(!this.options.processManager||!this.options.processOwner))return{processManager:this.options.processManager,owner:this.options.processOwner,getParentPid:()=>e??this.activeShellPid??this.options.getCurrentShellPid?.()}}};export{va as C,Do as S,Ho as _,IV as a,Oa as b,Dp as c,xs as d,ms as f,Uo as g,cs as h,MV as i,fp as l,us as m,FH as n,AV as o,ds as p,OH as r,pm as s,GH as t,Ss as u,No as v,Da as x,wa as y};