sliccy 6.226.4 → 6.227.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (154) hide show
  1. package/dist/ui/.vite/manifest.json +186 -186
  2. package/dist/ui/assets/{account-store-CqKfWDow.js → account-store-BFb2UO2K.js} +1 -1
  3. package/dist/ui/assets/{account-store-DtP5_zcC.js → account-store-p9YkaR-j.js} +1 -1
  4. package/dist/ui/assets/{adobe-Csub1Mq2.js → adobe-BnfgTqEQ.js} +1 -1
  5. package/dist/ui/assets/{adobe-CakRZi3Z.js → adobe-CN7urDKo.js} +1 -1
  6. package/dist/ui/assets/{agent-panels-BsbSd_Bc.js → agent-panels-C6MuWyzH.js} +1 -1
  7. package/dist/ui/assets/agent-tools-BL9-Zw2C.js +6 -0
  8. package/dist/ui/assets/{almost-bash-shell-headless-B9L2TCmL.js → almost-bash-shell-headless-DQhRonH_.js} +36 -36
  9. package/dist/ui/assets/{apply-layout-BxoXOQwo.js → apply-layout-DWiLhm8Y.js} +1 -1
  10. package/dist/ui/assets/{apps-CWQK35id.js → apps-F56LSkNx.js} +1 -1
  11. package/dist/ui/assets/{azure-openai-B1BILILZ.js → azure-openai-85x5L6_B.js} +1 -1
  12. package/dist/ui/assets/{azure-openai-C8_duqKu.js → azure-openai-CY4c1Ugr.js} +1 -1
  13. package/dist/ui/assets/{backend-hostfs-BmwQZTgH.js → backend-hostfs-uVp10KM9.js} +1 -1
  14. package/dist/ui/assets/{cdp-Be3yJaZS.js → cdp-BJooT_YW.js} +1 -1
  15. package/dist/ui/assets/{cerebras-CnBXxZAk.js → cerebras-B7CuTW7B.js} +1 -1
  16. package/dist/ui/assets/{cerebras-G8UhkZcQ.js → cerebras-CZd9VG3E.js} +1 -1
  17. package/dist/ui/assets/codemode-tool-wGfb8DBp.js +8 -0
  18. package/dist/ui/assets/{composer-speech-CO-U-3PP.js → composer-speech-CIFv7pMq.js} +1 -1
  19. package/dist/ui/assets/{connect-surface-xpPAUM1h.js → connect-surface-B2N6LdiO.js} +1 -1
  20. package/dist/ui/assets/connection-manager-SNYTz_SX.js +1 -0
  21. package/dist/ui/assets/{directed-approval-BBOfwL7o.js → directed-approval-ALHdAvDT.js} +1 -1
  22. package/dist/ui/assets/dist-Cu98pw2t.js +9 -0
  23. package/dist/ui/assets/dist-Qk32KIeB.js +4 -0
  24. package/dist/ui/assets/{emscripten-vfs-hook-gFKvX0SY.js → emscripten-vfs-hook-BWjaiiFG.js} +1 -1
  25. package/dist/ui/assets/{ensure-speech-assets-Cv5w_6Cs.js → ensure-speech-assets-yt0EoyNf.js} +1 -1
  26. package/dist/ui/assets/{frozen-archive-writer-DKdMEKnu.js → frozen-archive-writer-BBnxV-Sw.js} +1 -1
  27. package/dist/ui/assets/{fs-DjMlnfEu.js → fs-Bhw5j0eY.js} +1 -1
  28. package/dist/ui/assets/{fs-Dh2iUJ-I.js → fs-DdDYEgE4.js} +2 -2
  29. package/dist/ui/assets/{gelatiere-store-QDXLhcIh.js → gelatiere-store-DNMjj5xM.js} +1 -1
  30. package/dist/ui/assets/{gelatiere-unit-cDv5RtM9.js → gelatiere-unit-BEnRKsg5.js} +1 -1
  31. package/dist/ui/assets/{github-nzjWzA2U.js → github-C06K6hM6.js} +2 -2
  32. package/dist/ui/assets/{github-CBim-rA9.js → github-DzMMdXju.js} +1 -1
  33. package/dist/ui/assets/{github-auth-Cy2cTRMV.js → github-auth-DcTBaLFg.js} +1 -1
  34. package/dist/ui/assets/{github-copilot-I2nKVzpw.js → github-copilot-BCxu-JOH.js} +1 -1
  35. package/dist/ui/assets/{github-copilot-BQhAeZoY.js → github-copilot-DMzWgULe.js} +1 -1
  36. package/dist/ui/assets/{github-install-C77mWn6S.js → github-install-BiHV37oT.js} +1 -1
  37. package/dist/ui/assets/{github-zip-UZeZ-voR.js → github-zip-CHlzswro.js} +1 -1
  38. package/dist/ui/assets/{go-driver-CYR67gv1.js → go-driver-DqgTG9N6.js} +1 -1
  39. package/dist/ui/assets/{hear-CLBz15R3.js → hear-RPJIER3w.js} +1 -1
  40. package/dist/ui/assets/{help-Da2S8Plv.js → help-BA8Xystm.js} +1 -1
  41. package/dist/ui/assets/{installer-ZC2UV-cH.js → installer-3ARo1i86.js} +1 -1
  42. package/dist/ui/assets/{ipk-mamba-BDqOegY1.js → ipk-mamba-BEORgiAj.js} +1 -1
  43. package/dist/ui/assets/{js-realm-worker-BP3b2BW6.js → js-realm-worker-BZ9Q6ni5.js} +2 -2
  44. package/dist/ui/assets/{jsh-executor-BnG9duV7.js → jsh-executor-Iaq-AOjA.js} +2 -2
  45. package/dist/ui/assets/{kernel-worker-Dt0qVVA4.js → kernel-worker-CTxRZxWy.js} +14 -14
  46. package/dist/ui/assets/{lick-ws-bridge-DSv0KPA7.js → lick-ws-bridge-C_yTWgQK.js} +1 -1
  47. package/dist/ui/assets/{lick-ws-bridge-CNZGtU-G.js → lick-ws-bridge-DEXhaOXo.js} +1 -1
  48. package/dist/ui/assets/{live-session-curation-C8ic_T_L.js → live-session-curation-CBWOt4Na.js} +1 -1
  49. package/dist/ui/assets/{live-session-snapshot-BfgdULN4.js → live-session-snapshot-2ANcFmFa.js} +1 -1
  50. package/dist/ui/assets/{local-llm-BIA90YgO.js → local-llm-BY58x8Yq.js} +1 -1
  51. package/dist/ui/assets/{local-llm-BEhlvNyE.js → local-llm-Brt8sjwN.js} +1 -1
  52. package/dist/ui/assets/{main-CcsDAmx4.js → main-DFwN1I9-.js} +3 -3
  53. package/dist/ui/assets/{main-cherry-wVsCzmMd.js → main-cherry-CKnVoCvo.js} +1 -1
  54. package/dist/ui/assets/{memory-curation-seam-CKuRq6kM.js → memory-curation-seam-CRQovNy0.js} +1 -1
  55. package/dist/ui/assets/{memory-health-DPNqb4XW.js → memory-health-CWV9igFz.js} +1 -1
  56. package/dist/ui/assets/{memory-write-execute-Ddchxax4.js → memory-write-execute-F74nkaOx.js} +1 -1
  57. package/dist/ui/assets/{merge-folded-cost-into-frozen-W9HxDZuw.js → merge-folded-cost-into-frozen-CNbJWFVZ.js} +1 -1
  58. package/dist/ui/assets/{mount-BSXUu8ny.js → mount-CVw88Sae.js} +1 -1
  59. package/dist/ui/assets/{mount-BJ6v5c1U.js → mount-Cd5d-dGq.js} +3 -3
  60. package/dist/ui/assets/{new-session-Bi-WSHjF.js → new-session-BCLo3JwP.js} +2 -2
  61. package/dist/ui/assets/{oauth-bootstrap-C7l4ahaH.js → oauth-bootstrap-m4oJyeeN.js} +2 -2
  62. package/dist/ui/assets/{onboarding-orchestrator-CXG_pKvN.js → onboarding-orchestrator-CYaAfyzh.js} +1 -1
  63. package/dist/ui/assets/{openai-codex-BxSwMCUp.js → openai-codex-CCVnXN_Y.js} +1 -1
  64. package/dist/ui/assets/{openai-codex-BmCp3jbS.js → openai-codex-D-KswPCn.js} +1 -1
  65. package/dist/ui/assets/{openrouter-CSg8e6bc.js → openrouter-BMACqhZg.js} +1 -1
  66. package/dist/ui/assets/{openrouter-CzE_jMo1.js → openrouter-DDIS0gu8.js} +1 -1
  67. package/dist/ui/assets/{openrouter-free-DCnJbpR6.js → openrouter-free-CQM2VJ2h.js} +1 -1
  68. package/dist/ui/assets/{openrouter-free-C6j87AW6.js → openrouter-free-CxENTZRZ.js} +1 -1
  69. package/dist/ui/assets/{openrouter-oauth-BicjWPKx.js → openrouter-oauth-BTRrF814.js} +1 -1
  70. package/dist/ui/assets/{openrouter-oauth-_hLJp2xE.js → openrouter-oauth-DeZmK_PC.js} +1 -1
  71. package/dist/ui/assets/{opfs-mount-mh0nq9w9.js → opfs-mount-CH8xFjB1.js} +1 -1
  72. package/dist/ui/assets/{panel-rpc-handlers-Dxfsk5di.js → panel-rpc-handlers-DEV3O6Nf.js} +2 -2
  73. package/dist/ui/assets/{panelize-shell-Dv9wG2yx.js → panelize-shell-wTRIeRfk.js} +1 -1
  74. package/dist/ui/assets/{pi-edit-execution-CPQR1_rI.js → pi-edit-execution-CsYSVIy6.js} +1 -1
  75. package/dist/ui/assets/{provider-C6A_QvgY.js → provider-DQlGI3wV.js} +2 -2
  76. package/dist/ui/assets/{provider-DKLBs-rm.js → provider-DiPmyduk.js} +1 -1
  77. package/dist/ui/assets/{provider-settings-B10w9vry.js → provider-settings-CI1NmuB7.js} +1 -1
  78. package/dist/ui/assets/provider-store-access-CC-Qd6Js.js +1 -0
  79. package/dist/ui/assets/provider-store-access-R5OLCz2u.js +1 -0
  80. package/dist/ui/assets/{providers-C32V1tu8.js → providers-DWJgLVLG.js} +2 -2
  81. package/dist/ui/assets/{providers-CSGLxatZ.js → providers-DvzQAoZe.js} +1 -1
  82. package/dist/ui/assets/{quick-llm-C55s80C1.js → quick-llm-CIeq8HDn.js} +1 -1
  83. package/dist/ui/assets/{realm-inprocess-R-7UQxWy.js → realm-inprocess-Ct0UTeSZ.js} +2 -2
  84. package/dist/ui/assets/{realm-unhandled-rejections-CcTUfDlL.js → realm-unhandled-rejections-But1_r5U.js} +1 -1
  85. package/dist/ui/assets/{realm-unhandled-rejections-MJQ577ZB.js → realm-unhandled-rejections-XCowEiz5.js} +1 -1
  86. package/dist/ui/assets/{recovery-screen-CjvEqRSh.js → recovery-screen-2KkMuDJk.js} +1 -1
  87. package/dist/ui/assets/{remote-terminal-view-B9Iehf9R.js → remote-terminal-view-BsBi-Jq-.js} +2 -2
  88. package/dist/ui/assets/{restore-ClVrGUO_.js → restore-BxWnVMjS.js} +1 -1
  89. package/dist/ui/assets/{run-BhUNOe2w.js → run-5o2ADtPK.js} +2 -2
  90. package/dist/ui/assets/{run-CGZiR3xh.js → run-8y7BhTkZ.js} +11 -11
  91. package/dist/ui/assets/{run-BedH4wf2.js → run-B1b6--PA.js} +1 -1
  92. package/dist/ui/assets/{run-DVSJbV2i.js → run-DI8sQ-UX.js} +1 -1
  93. package/dist/ui/assets/{run-CmnvjepF.js → run-Dp8o0HDu.js} +1 -1
  94. package/dist/ui/assets/{run-DiYNywB4.js → run-V-yf2BVO.js} +2 -2
  95. package/dist/ui/assets/{run-CpuIjsuc.js → run-dJaEQuBZ.js} +1 -1
  96. package/dist/ui/assets/{session-command-memory-CVBwVZ62.js → session-command-memory-Da1Ay0IK.js} +2 -2
  97. package/dist/ui/assets/{session-jsonl-BccYkSi6.js → session-jsonl-BT08KJtu.js} +1 -1
  98. package/dist/ui/assets/{session-jsonl-CY233b8_.js → session-jsonl-CisoFWdV.js} +1 -1
  99. package/dist/ui/assets/{session-search-index-Ch3pCEwc.js → session-search-index-C9dq-YnZ.js} +1 -1
  100. package/dist/ui/assets/{setup-feature-flags-remote-CODtZG_r.js → setup-feature-flags-remote-C-QrDDap.js} +1 -1
  101. package/dist/ui/assets/{setup-model-catalog-B3nHaQyu.js → setup-model-catalog-DQFqjnfG.js} +1 -1
  102. package/dist/ui/assets/{signed-fetch-BScOrFAI.js → signed-fetch-B_zCsTF6.js} +1 -1
  103. package/dist/ui/assets/{silent-renew-backoff-Du_Xl4_2.js → silent-renew-backoff-DZMNobI2.js} +1 -1
  104. package/dist/ui/assets/slicc-version-DwNEsrEc.js +1 -0
  105. package/dist/ui/assets/{snapshot-DOjH_Br5.js → snapshot-Qi7uJgTK.js} +1 -1
  106. package/dist/ui/assets/{snapshot-features-Ha3qZYi5.js → snapshot-features-ko4zNFx_.js} +1 -1
  107. package/dist/ui/assets/{soundscape-DZdmw_5a.js → soundscape-CSNoiZFC.js} +1 -1
  108. package/dist/ui/assets/{speak-OzKJ4LDt.js → speak-aAmw1Lv4.js} +1 -1
  109. package/dist/ui/assets/{sprinkle-manager-CdstazgG.js → sprinkle-manager-BcUAmBKL.js} +1 -1
  110. package/dist/ui/assets/{sprinkle-renderer-Bs6XZuJN.js → sprinkle-renderer-a99oRJ5K.js} +1 -1
  111. package/dist/ui/assets/{state-CvCDVCdM.js → state-B8wLxLGq.js} +1 -1
  112. package/dist/ui/assets/{store-Ci5uqDiF.js → store-CBtTB-Y7.js} +1 -1
  113. package/dist/ui/assets/{store-vMYCG7nS.js → store-D8XRrwq1.js} +1 -1
  114. package/dist/ui/assets/{sudo-omGZ62M-.js → sudo-CvMjZIh6.js} +1 -1
  115. package/dist/ui/assets/{supervisor-gHwvuVqr.js → supervisor-CNcjK1gk.js} +1 -1
  116. package/dist/ui/assets/{sync-dialog-BuomvIrD.js → sync-dialog-D0C6RJ1r.js} +1 -1
  117. package/dist/ui/assets/{transformers-env-DK81KZ-_.js → transformers-env-BWgCzqFy.js} +1 -1
  118. package/dist/ui/assets/{tray-leader-4bul7Ct2.js → tray-leader-anPCnjI3.js} +1 -1
  119. package/dist/ui/assets/{tray-leave-runtime-B4WKKash.js → tray-leave-runtime-DTq8BTG1.js} +1 -1
  120. package/dist/ui/assets/{tray-sidecar-BJwCQVGH.js → tray-sidecar-Dk-gNNOa.js} +1 -1
  121. package/dist/ui/assets/{upgrade-detection-Df_g87L1.js → upgrade-detection-BofecB7v.js} +1 -1
  122. package/dist/ui/assets/{upskill-lick-skip-BqQyWVKm.js → upskill-lick-skip-3qGDA07K.js} +1 -1
  123. package/dist/ui/assets/{voice-reply-BehdeJ03.js → voice-reply-C1P_wamT.js} +1 -1
  124. package/dist/ui/assets/{wc-attach-3a4N2dfx.js → wc-attach-dgMJ26XT.js} +2 -2
  125. package/dist/ui/assets/{wc-browser-lL-L_txI.js → wc-browser-B-COerUp.js} +1 -1
  126. package/dist/ui/assets/{wc-computers-B9-zQ4JW.js → wc-computers-_JxYl2wr.js} +1 -1
  127. package/dist/ui/assets/{wc-detached-BlMowfY3.js → wc-detached-D2pbuUgz.js} +1 -1
  128. package/dist/ui/assets/{wc-extension-BeNvD6FE.js → wc-extension-CllXRrrB.js} +2 -2
  129. package/dist/ui/assets/{wc-follower-EFSJs2OJ.js → wc-follower-BJoxJGJc.js} +3 -3
  130. package/dist/ui/assets/{wc-follower-oauth-bXKWVQGm.js → wc-follower-oauth-CRVfRh9S.js} +1 -1
  131. package/dist/ui/assets/{wc-gelatiere-EOAqp9kU.js → wc-gelatiere-oTqfeOtw.js} +1 -1
  132. package/dist/ui/assets/{wc-live-CZeagRhy.js → wc-live-lanuGtCH.js} +5 -5
  133. package/dist/ui/assets/{wc-nav-DAH24DXh.js → wc-nav-CxTE5nNk.js} +2 -2
  134. package/dist/ui/assets/{wc-onboarding-CcKDzrfa.js → wc-onboarding-CTHTCQRn.js} +2 -2
  135. package/dist/ui/assets/{wc-permissions-J-xSpeyH.js → wc-permissions-DsdMkMR_.js} +2 -2
  136. package/dist/ui/assets/{wc-placeholder-Bu4ryZw7.js → wc-placeholder-BW3O9G-1.js} +3 -3
  137. package/dist/ui/assets/{wc-secret-request-BSxQu1_l.js → wc-secret-request-CYprt2E3.js} +1 -1
  138. package/dist/ui/assets/{wc-settings-C2GmNXu1.js → wc-settings-BpOWAvNP.js} +3 -3
  139. package/dist/ui/assets/{wc-shell-D1w_xNlG.js → wc-shell-ublv7ZL8.js} +3 -3
  140. package/dist/ui/assets/{wc-shortcut-config-C7N1oz-m.js → wc-shortcut-config-I0L9ZRfk.js} +1 -1
  141. package/dist/ui/assets/{wc-sprinkles-C1i11O8r.js → wc-sprinkles-BZFWrQuP.js} +2 -2
  142. package/dist/ui/assets/{wc-transcript-export-CZRr6hcJ.js → wc-transcript-export-Camv8Krm.js} +2 -2
  143. package/dist/ui/assets/{wc-tray-xbj9CuSO.js → wc-tray-D50mlMs8.js} +4 -4
  144. package/dist/ui/assets/welcome-detection-BtHni7N4.js +1 -0
  145. package/dist/ui/assets/{whisper-session-xb1YrAUl.js → whisper-session-Myw3zk-W.js} +2 -2
  146. package/dist/ui/assets/{xai-grok-bN_nbILL.js → xai-grok-BVM_XcYa.js} +1 -1
  147. package/dist/ui/assets/{xai-grok-B8X1-rs-.js → xai-grok-D4iOI1_b.js} +1 -1
  148. package/dist/ui/index.html +3 -3
  149. package/dist/ui/packages/webapp/index.html +3 -3
  150. package/package.json +2 -2
  151. package/dist/ui/assets/provider-store-access-B1aRkFuC.js +0 -1
  152. package/dist/ui/assets/provider-store-access-DJ_XxgCD.js +0 -1
  153. package/dist/ui/assets/slicc-version-CTGV3KxX.js +0 -1
  154. package/dist/ui/assets/welcome-detection-C0csMKau.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-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(`
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-p9YkaR-j.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-Qi7uJgTK.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-DvzQAoZe.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-B_zCsTF6.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-Bhw5j0eY.js";import{a as $e}from"./tray-leader-status-CpkFr6n7.js";import{n as et,t as tt}from"./slicc-version-DwNEsrEc.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-B8wLxLGq.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-Iaq-AOjA.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-CHlzswro.js";import{i as ji,t as Mi}from"./github-auth-DcTBaLFg.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-BiHV37oT.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-BY58x8Yq.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-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
294
+ `,stderr:``,exitCode:0};let r=t[0],i=await import(`./kernel-worker-CTxRZxWy.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-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+=`
305
+ `)}\n`}async function pg(e,t,n){let r=await(await import(`./kernel-worker-CTxRZxWy.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-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+`
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-CTxRZxWy.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-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
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-DI8sQ-UX.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-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]
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-Dp8o0HDu.js`);return r(t,n,e)})}function vC(e={}){return S(`go`,async(t,n)=>{let{runGoCommand:r}=await import(`./go-driver-DqgTG9N6.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
@@ -1241,7 +1241,7 @@ Options:
1241
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
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(`
1243
1243
  `)+`
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(`
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-ko4zNFx_.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
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() {
1246
1246
  this.scrollIntoView({ block: 'center' });
1247
1247
  const r = this.getBoundingClientRect();
@@ -1319,7 +1319,7 @@ Options:
1319
1319
  el.dispatchEvent(new Event('input', { bubbles: true }));
1320
1320
  return el.files.length;
1321
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)+`
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-BA8Xystm.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-BA8Xystm.js`);return{stdout:t(e)+`
1323
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
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(`
1325
1325
  `)+`
@@ -1423,7 +1423,7 @@ Options:
1423
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
1424
  `,`;`,`|`,`&`,`(`,`)`,`{`,`}`,`<`,`>`]),nO=new Set([`;`,`|`,`&`,`(`,`)`,`{`,`
1425
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
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-3ARo1i86.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
1427
1427
  and run package.json scripts; also install conda/emscripten-forge
1428
1428
  packages via '${e} mamba'
1429
1429
 
@@ -1499,7 +1499,7 @@ manifest without rewriting it. With -g, packages go to /shared/lib/node_modules
1499
1499
  and deps are recorded in /shared/lib/package.json. Existing fields are
1500
1500
  preserved. Idempotent: re-installing an already-satisfied package is a clean
1501
1501
  no-op.
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(`
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-BEORgiAj.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(`
1503
1503
  `)}\n`:``,stderr:s.length>0?`${s.join(`
1504
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(`
1505
1505
  `)}\n`:``,stderr:d.length>0?`${d.join(`
@@ -1520,8 +1520,8 @@ Options:
1520
1520
  --force Install a package even when a SLICC built-in shadows it
1521
1521
  --global Resolve only from the shared global prefix (/shared/lib/node_modules)
1522
1522
  -h, --help Show this help message
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
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-3ARo1i86.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-5o2ADtPK.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
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
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
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
@@ -1594,7 +1594,7 @@ Common base URLs:
1594
1594
  `)+`
1595
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(`
1596
1596
  `)+`
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.
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-p9YkaR-j.js`).then(e=>e.t),{verifyConnection:a}=await import(`./local-llm-BY58x8Yq.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
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>
1599
1599
 
1600
1600
  Fetches documentation for a given topic from sliccy.com.
@@ -1632,20 +1632,20 @@ authorization-code flow, stores the access token, and retries.
1632
1632
  On success, the server is persisted to /workspace/.mcp/servers.json and
1633
1633
  an alias shim is written to /workspace/.mcp/aliases/<name>.jsh so the
1634
1634
  short name resolves on the PATH.
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(`
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-D8XRrwq1.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-DiPmyduk.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(`
1636
1636
  `)+`
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(`
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-p9YkaR-j.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-DiPmyduk.js`);await r();let{listServers:i}=await import(`./store-D8XRrwq1.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(`
1639
1639
  `)+`
1640
1640
  `}async function OA(e,t){if(w(e))return W(`usage: mcp search <query>
1641
1641
 
1642
1642
  Case-insensitive substring search across the cached tools of every
1643
1643
  registered MCP server. Matches tool name OR description and prints a
1644
1644
  table of (server, tool, description, match-field) rows.
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(`
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-DiPmyduk.js`);await a();let{listServers:o}=await import(`./store-D8XRrwq1.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-DiPmyduk.js`);await i(r);let{deleteServer:o}=await import(`./store-D8XRrwq1.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-p9YkaR-j.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(`
1647
1647
  `)+`
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 …]
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-DiPmyduk.js`);await a(r);let{getServer:o}=await import(`./store-D8XRrwq1.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 …]
1649
1649
 
1650
1650
  mcp invoke <name> List tools on <name>.
1651
1651
  mcp invoke <name> <tool> --help Show flags for <tool>.
@@ -1678,7 +1678,7 @@ Arguments are coerced according to the tool's JSON Schema:
1678
1678
 
1679
1679
  Re-fetches the tool catalog and \`apps/list\` for <name>. Does NOT refresh
1680
1680
  OAuth tokens — for OAuth token refresh use \`mcp auth <name>\`.
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]
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-DiPmyduk.js`);await i(r);let{getServer:a,setServer:o}=await import(`./store-D8XRrwq1.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]
1682
1682
 
1683
1683
  Re-authenticate an existing MCP server. By default, attempts a silent
1684
1684
  token renewal using the persisted refresh_token; if that returns no
@@ -1690,7 +1690,7 @@ Options:
1690
1690
  -i, --interactive Skip silent renewal and open the OAuth popup
1691
1691
  directly. Use after revoking a refresh token or
1692
1692
  when the AS no longer accepts the cached one.
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}\`.
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-DiPmyduk.js`),s=await o(r,{fetchImpl:t.oauthFetchImpl,launcher:t.oauthLauncher}),{getServer:c}=await import(`./store-D8XRrwq1.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-DvzQAoZe.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-p9YkaR-j.js`).then(e=>e.t),r=n(t);if(!r)return null;if(r.expired){try{let{getRegisteredProviderConfig:e}=await import(`./providers-DvzQAoZe.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-Bhw5j0eY.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}\`.
1694
1694
  // Auto-generated by \`mcp add ${e}\`; do not edit by hand.
1695
1695
  const { promisify } = require('util');
1696
1696
  const { exec } = require('child_process');
@@ -1719,7 +1719,7 @@ try {
1719
1719
  if (stdout) process.stdout.write(stdout);
1720
1720
  if (stderr) process.stderr.write(stderr);
1721
1721
  process.exit(exitCode);
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(`
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-F56LSkNx.js`);await n(e,t.fs)}async function cj(e,t,n){try{let{materializeAppSprinkles:r}=await import(`./apps-F56LSkNx.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
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
1724
1724
 
1725
1725
  Usage:
@@ -1731,7 +1731,7 @@ Notes:
1731
1731
  Document-Isolation-Policy). Embedded floats cannot be isolated and
1732
1732
  report why instead.
1733
1733
  - The browser randomizes measurement timing — expect a short delay.
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(`
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-B1b6--PA.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
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
1736
1736
 
1737
1737
  Usage: models [options]
@@ -1746,7 +1746,7 @@ Options:
1746
1746
  -h, --help Show this help message
1747
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(`
1748
1748
  `)+`
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.
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-p9YkaR-j.js`).then(e=>e.t);if(r.getAccounts().length===0)return bj(`No provider accounts configured. Run the provider settings to add one.
1750
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)+`
1751
1751
  `,stderr:``,exitCode:0}:(n.allVersions||f.push(`Showing latest versions only. Use --all-versions to see all.
1752
1752
  `),f.push(Vj(o,a,s,c)),{stdout:f.join(`
@@ -1804,7 +1804,7 @@ Examples:
1804
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
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
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...]
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-p9YkaR-j.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-V-yf2BVO.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...]
1808
1808
 
1809
1809
  VFS paths are served in a new browser tab via the preview service worker.
1810
1810
  URLs (http/https/etc.) are opened directly in a new tab.
@@ -1830,7 +1830,7 @@ Examples:
1830
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
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(`
1832
1832
  `)+`
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]
1833
+ `,stderr:``,exitCode:0}})}function VM(){return S(`patch`,async(e,t)=>{let{runPatch:n}=await import(`./run-dJaEQuBZ.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]
1834
1834
 
1835
1835
  Rasterize PDF pages to images. Writes <prefix>-<n>.<ext> per page, where <n>
1836
1836
  is zero-padded to the digit width of the last page (out-1.png for a 9-page
@@ -1890,7 +1890,7 @@ Examples:
1890
1890
  plugin list
1891
1891
  plugin info my-plugin
1892
1892
  plugin remove my-plugin
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>
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-Bhw5j0eY.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-BiHV37oT.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-CHlzswro.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>
1894
1894
 
1895
1895
  Loads the Agent Plugins package at <path>, or downloads it from a GitHub
1896
1896
  reference (owner/repo, owner/repo@branch, or
@@ -1901,19 +1901,19 @@ mcp.json. On success the plugin is recorded in
1901
1901
  /workspace/.plugins/plugins.json — its skills then surface through the
1902
1902
  standard skills discovery, and each supported streamable-http MCP server
1903
1903
  is registered in the MCP store as "<plugin>:<server>".
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(`
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-CBtTB-Y7.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(`
1905
1905
  `)+`
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(`
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-D8XRrwq1.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-D8XRrwq1.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-CBtTB-Y7.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(`
1908
1908
  `)+`
1909
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(`
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-CBtTB-Y7.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(`
1911
1911
  `)+`
1912
1912
  `)}async function yN(e,t,n,r){if(w(e))return rN(`usage: plugin validate <path|repo>
1913
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(`
1914
1914
  `)+`
1915
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(`
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-CBtTB-Y7.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-D8XRrwq1.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(`
1917
1917
  `)+`
1918
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
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
@@ -2125,7 +2125,7 @@ Limits and lifetime:
2125
2125
  `,exitCode:1};if(e.ttlMs!==void 0&&e.maxTabs!==void 0)return{stdout:``,stderr:`serve: --ttl cannot be combined with --max-tabs
2126
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
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]
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-Da1Ay0IK.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]
2129
2129
 
2130
2130
  list [--runtime <id>] List sprinkles + an instance line per runtime
2131
2131
  open <name> Open a sprinkle by name
@@ -3275,7 +3275,7 @@ or pass -bios / -vgabios with explicit VFS paths.`,Rz={"-n":zz,"-name":zz,"--nam
3275
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,`
3276
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(`
3277
3277
  `).slice(-Math.max(1,e)).join(`
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]
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-8y7BhTkZ.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]
3279
3279
 
3280
3280
  Commands:
3281
3281
  create [--scoop <name>] [--name <name>] [--filter <code>] Create a new webhook endpoint
@@ -3531,5 +3531,5 @@ pass --wait to block and print the full result.`,VV=new Set([`list`,`status`,`st
3531
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
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
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};
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-8y7BhTkZ.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-8y7BhTkZ.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};