sliccy 6.182.0 → 6.183.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 (184) hide show
  1. package/dist/ui/.vite/manifest.json +268 -260
  2. package/dist/ui/assets/SKILL-B4YYagrM.js +1 -0
  3. package/dist/ui/assets/{SKILL-BpMlcVho.js → SKILL-BbKu0tAh.js} +1 -1
  4. package/dist/ui/assets/{SKILL-DGelbGt_.js → SKILL-CG7Xvjv7.js} +1 -1
  5. package/dist/ui/assets/{account-store-BxB3138q.js → account-store-Ce44FdYj.js} +2 -2
  6. package/dist/ui/assets/{account-store-UA_3Tz4g.js → account-store-D0ciUU3U.js} +1 -1
  7. package/dist/ui/assets/{adobe-C5iQ4vVx.js → adobe-FgsPWBjV.js} +2 -2
  8. package/dist/ui/assets/{adobe-CGl3cGPR.js → adobe-j1r9Po8o.js} +1 -1
  9. package/dist/ui/assets/{agent-panels-DfmjvBS2.js → agent-panels-DcVWQZVh.js} +1 -1
  10. package/dist/ui/assets/{almost-bash-shell-headless-l1xuiFhc.js → almost-bash-shell-headless-CsDQjWSX.js} +268 -268
  11. package/dist/ui/assets/{apply-layout-Bq6bvrT2.js → apply-layout-6-QTVrMq.js} +1 -1
  12. package/dist/ui/assets/{apps-BX-IbYH9.js → apps-C20mWJ8w.js} +1 -1
  13. package/dist/ui/assets/{azure-openai-BXvWNypo.js → azure-openai-CTmHX_BT.js} +1 -1
  14. package/dist/ui/assets/{azure-openai-C2dDMpxW.js → azure-openai-CotI4RBJ.js} +1 -1
  15. package/dist/ui/assets/{backend-hostfs-DV8kfBUj.js → backend-hostfs-D46_hViH.js} +1 -1
  16. package/dist/ui/assets/{capability-C8I_18AN.js → capability-BgC-ru0t.js} +2 -2
  17. package/dist/ui/assets/{cdp-B0aSo4ch.js → cdp-BvPARz8i.js} +1 -1
  18. package/dist/ui/assets/{cerebras-D29ytBVb.js → cerebras-CGndqdHt.js} +1 -1
  19. package/dist/ui/assets/{cerebras-B2SDJ5pX.js → cerebras-DG7lHBt1.js} +1 -1
  20. package/dist/ui/assets/{client-Sb_wIqH2.js → client-CmfvXtLV.js} +1 -1
  21. package/dist/ui/assets/{composer-speech-Dt-gM11M.js → composer-speech-C2InwNBM.js} +1 -1
  22. package/dist/ui/assets/{connect-surface-Cb3XqWWR.js → connect-surface-EWOA61l_.js} +1 -1
  23. package/dist/ui/assets/{core-B3ULTK7V.js → core-Be1yHH6v.js} +1 -1
  24. package/dist/ui/assets/{core-CDo7qjEn.js → core-D-Fp1HL2.js} +1 -1
  25. package/dist/ui/assets/{directed-approval-BEel8QYA.js → directed-approval-6QIzcmF_.js} +1 -1
  26. package/dist/ui/assets/{discovery-preference-C7kFEKRM.js → discovery-preference-MWZVi-PZ.js} +1 -1
  27. package/dist/ui/assets/dist-C8ZpEU8V.js +3 -0
  28. package/dist/ui/assets/{emscripten-vfs-hook-bNKkM3Zb.js → emscripten-vfs-hook-B9KkLncp.js} +1 -1
  29. package/dist/ui/assets/{ensure-speech-assets-DnCun_bM.js → ensure-speech-assets-C3v1Nu2n.js} +1 -1
  30. package/dist/ui/assets/{extension-ops-CmuqbGmo.js → extension-ops-DTRUyGkx.js} +1 -1
  31. package/dist/ui/assets/{float-topology-BvkgNLoi.js → float-topology-B0_dG7En.js} +1 -1
  32. package/dist/ui/assets/{follower-navigate-watcher-B8Kk1WcF.js → follower-navigate-watcher-DVWQWTGU.js} +1 -1
  33. package/dist/ui/assets/{frozen-archive-writer-DWckLPIx.js → frozen-archive-writer-DMShgEqJ.js} +1 -1
  34. package/dist/ui/assets/{fs-Bl1dGTw7.js → fs-JF56Nord.js} +2 -2
  35. package/dist/ui/assets/{fs-Bvj_6WV6.js → fs-TVcPtHbB.js} +1 -1
  36. package/dist/ui/assets/{gelatiere-store-CslswlOn.js → gelatiere-store-BnAzlDHe.js} +1 -1
  37. package/dist/ui/assets/{gelatiere-unit-DOffAKPD.js → gelatiere-unit-5cS02rOR.js} +1 -1
  38. package/dist/ui/assets/{github-DRuWNJ0x.js → github-BJKcZ0cU.js} +2 -2
  39. package/dist/ui/assets/{github-DVquHzS1.js → github-DsvjkXr7.js} +1 -1
  40. package/dist/ui/assets/{github-auth-C5UPE82y.js → github-auth-Crm1hubQ.js} +1 -1
  41. package/dist/ui/assets/{github-copilot-DXbnFsoC.js → github-copilot-BWhNAowY.js} +1 -1
  42. package/dist/ui/assets/{github-copilot-ha5V9jKJ.js → github-copilot-ngj7NQ16.js} +1 -1
  43. package/dist/ui/assets/{github-install-z8nzKR56.js → github-install-DB3-4PDg.js} +1 -1
  44. package/dist/ui/assets/{github-zip-YeBT3Ny7.js → github-zip-CfS9P2dH.js} +1 -1
  45. package/dist/ui/assets/{guest-tool-gate-Dn4Cs-oT.js → guest-tool-gate-B2z1ggE_.js} +1 -1
  46. package/dist/ui/assets/{hear-ClByyjXy.js → hear-akPMJ6kC.js} +1 -1
  47. package/dist/ui/assets/{help-p6vq-7bY.js → help-CNHuyT-F.js} +1 -1
  48. package/dist/ui/assets/{installer-hyWN7t-8.js → installer-CzQ_lEMz.js} +1 -1
  49. package/dist/ui/assets/{interrupted-work-recovery-C3eyzaf0.js → interrupted-work-recovery-r9fITX8G.js} +1 -1
  50. package/dist/ui/assets/{js-realm-worker-C8L3DYxo.js → js-realm-worker-EkjzOn2Q.js} +2 -2
  51. package/dist/ui/assets/{jsh-executor-BRw7B4H0.js → jsh-executor-C849KexO.js} +2 -2
  52. package/dist/ui/assets/{kernel-worker-DJ8FZwqE.js → kernel-worker-B69_4v-D.js} +10 -10
  53. package/dist/ui/assets/{lick-ws-bridge-AHYpxmrH.js → lick-ws-bridge-BygSyyxa.js} +1 -1
  54. package/dist/ui/assets/{lick-ws-bridge-DjxKrqtY.js → lick-ws-bridge-DDMdP2AB.js} +1 -1
  55. package/dist/ui/assets/{live-session-curation-ChbHqCg_.js → live-session-curation-BfplChNV.js} +1 -1
  56. package/dist/ui/assets/{live-session-snapshot-CEM9afjE.js → live-session-snapshot-BQQH-IkA.js} +1 -1
  57. package/dist/ui/assets/{local-llm-3Pq3W9JZ.js → local-llm-BSMA7cC5.js} +1 -1
  58. package/dist/ui/assets/{local-llm-DSfR5Yt1.js → local-llm-CNznNtp9.js} +1 -1
  59. package/dist/ui/assets/{main-DtPQfxOa.js → main-BsG-jtvC.js} +3 -3
  60. package/dist/ui/assets/{main-cherry-GQeDS2ns.js → main-cherry-7eVbk29W.js} +1 -1
  61. package/dist/ui/assets/{memory-curation-seam-COOFWWtR.js → memory-curation-seam-z19QoOG6.js} +1 -1
  62. package/dist/ui/assets/{memory-health-DxPjxnOp.js → memory-health-CL5kYVAr.js} +1 -1
  63. package/dist/ui/assets/{memory-write-execute-CRxpEM2X.js → memory-write-execute-C_oehZl_.js} +1 -1
  64. package/dist/ui/assets/{mount-9N6h5nwh.js → mount-BvxmwqOG.js} +3 -3
  65. package/dist/ui/assets/{mount-Dkwa5rwA.js → mount-JNIgSYT5.js} +1 -1
  66. package/dist/ui/assets/{mount-bridge-client-C4Ti1B85.js → mount-bridge-client-CaHZ1pkb.js} +1 -1
  67. package/dist/ui/assets/{mount-bridge-client-BMkDfg_K.js → mount-bridge-client-DRVFK3mJ.js} +1 -1
  68. package/dist/ui/assets/{new-session-C2Unp_ay.js → new-session-qNCtGIiI.js} +2 -2
  69. package/dist/ui/assets/{oauth-bootstrap-3r1LKeNV.js → oauth-bootstrap-F0HvaeYA.js} +2 -2
  70. package/dist/ui/assets/{oauth-service-CxXBA9rC.js → oauth-service-Dn_Xz1FZ.js} +1 -1
  71. package/dist/ui/assets/{oauth-service-B8mWc7rY.js → oauth-service-_PUd0RqU.js} +1 -1
  72. package/dist/ui/assets/{onboarding-orchestrator-DagKmKCB.js → onboarding-orchestrator-OKDMP2X_.js} +1 -1
  73. package/dist/ui/assets/{openai-codex--tiTbtXj.js → openai-codex-6hCaJG3N.js} +1 -1
  74. package/dist/ui/assets/{openai-codex-CJC7uwBp.js → openai-codex-BbYHsYuO.js} +1 -1
  75. package/dist/ui/assets/{openrouter-aXBsdtFI.js → openrouter-BPYQjzK5.js} +1 -1
  76. package/dist/ui/assets/{openrouter-mBY_6dIp.js → openrouter-BstowyUr.js} +1 -1
  77. package/dist/ui/assets/{openrouter-free-BeCg7Ecw.js → openrouter-free-B1qsiSWg.js} +1 -1
  78. package/dist/ui/assets/{openrouter-free-DqFFRvst.js → openrouter-free-DMavbTS5.js} +1 -1
  79. package/dist/ui/assets/{openrouter-oauth-DQIC6b5R.js → openrouter-oauth-CYZRlFsL.js} +1 -1
  80. package/dist/ui/assets/{openrouter-oauth-C7CZ9fp_.js → openrouter-oauth-DrKARZLe.js} +1 -1
  81. package/dist/ui/assets/{opfs-mount-tiZR34GY.js → opfs-mount-D3x0tHeU.js} +1 -1
  82. package/dist/ui/assets/{page-approval-service-CYpStEUs.js → page-approval-service-DRZEjhrX.js} +1 -1
  83. package/dist/ui/assets/{panel-rpc-handlers-D8NOrxvf.js → panel-rpc-handlers-CiSSOSEo.js} +2 -2
  84. package/dist/ui/assets/{panelize-shell-C_Xs3rhf.js → panelize-shell-CILi0yPu.js} +4 -4
  85. package/dist/ui/assets/{pi-edit-execution-kItlGFSm.js → pi-edit-execution-CEUeI3PX.js} +1 -1
  86. package/dist/ui/assets/{port-bridge-client-CrZ9vnOK.js → port-bridge-client-BiWcfZSc.js} +1 -1
  87. package/dist/ui/assets/{port-bridge-client-BHH6FPBY.js → port-bridge-client-BvO-1Rao.js} +1 -1
  88. package/dist/ui/assets/{provider-BtTOwLci.js → provider-CPes-oeu.js} +2 -2
  89. package/dist/ui/assets/{provider-DuCd6_sr.js → provider-Dv9W3IvY.js} +1 -1
  90. package/dist/ui/assets/{provider-settings-PedRbxpK.js → provider-settings-CDcPLuoa.js} +1 -1
  91. package/dist/ui/assets/provider-store-access-B7yFT4hY.js +1 -0
  92. package/dist/ui/assets/provider-store-access-D2Rj0Y-3.js +1 -0
  93. package/dist/ui/assets/{providers-BkwBVwkB.js → providers-COWrD21n.js} +2 -2
  94. package/dist/ui/assets/{providers-CWFcdblf.js → providers-DLk_1jra.js} +1 -1
  95. package/dist/ui/assets/proxied-fetch-DiXk_XGs.js +2 -0
  96. package/dist/ui/assets/proxied-fetch-J19bK2dG.js +1 -0
  97. package/dist/ui/assets/{quick-llm-DKsocfis.js → quick-llm-ByDw79ph.js} +1 -1
  98. package/dist/ui/assets/{realm-inprocess-CI_Msk8I.js → realm-inprocess-BLSq-cQS.js} +1 -1
  99. package/dist/ui/assets/{recovery-screen-HGByYfVb.js → recovery-screen-CldB31e2.js} +1 -1
  100. package/dist/ui/assets/{redirect-uri-Dnc7Ae7l.js → redirect-uri-DlOE4xJ4.js} +1 -1
  101. package/dist/ui/assets/{remote-terminal-view-C6Ao0U4O.js → remote-terminal-view-BpHAWWeD.js} +1 -1
  102. package/dist/ui/assets/{rest-ops-vPHUnWou.js → rest-ops-CPEMTyP-.js} +1 -1
  103. package/dist/ui/assets/{rest-ops-DABw6D2a.js → rest-ops-DKsDUOxE.js} +1 -1
  104. package/dist/ui/assets/{restore-BsViTTTd.js → restore-CaWVAwJN.js} +1 -1
  105. package/dist/ui/assets/{run-DgblerTV.js → run-2oVsdzZj.js} +2 -2
  106. package/dist/ui/assets/{run-BLi5_vwK.js → run-BA94mtBB.js} +1 -1
  107. package/dist/ui/assets/{run-CKdymE5z.js → run-BVlVC7jS.js} +9 -9
  108. package/dist/ui/assets/{run-DEBWO_VC.js → run-CH8M889A.js} +3 -3
  109. package/dist/ui/assets/{run-BEHokdPX.js → run-CHKo3g64.js} +1 -1
  110. package/dist/ui/assets/{run-CKI507uv.js → run-CW0-cog1.js} +1 -1
  111. package/dist/ui/assets/{run-C0CADtt5.js → run-Dl4OQ_Yd.js} +1 -1
  112. package/dist/ui/assets/{secret-env-Cazzr31P.js → secret-env-iwcdxjpw.js} +1 -1
  113. package/dist/ui/assets/secret-topology-CZv6A9HW.js +1 -0
  114. package/dist/ui/assets/{secrets-bridge-client-CiA-2ZIU.js → secrets-bridge-client-B_CG-HIg.js} +1 -1
  115. package/dist/ui/assets/{secrets-bridge-client-kWWipUuL.js → secrets-bridge-client-CUClOhLJ.js} +1 -1
  116. package/dist/ui/assets/{session-command-memory-D-p81a7P.js → session-command-memory-mbpebhz_.js} +2 -2
  117. package/dist/ui/assets/{session-jsonl-CXY4TQ4Y.js → session-jsonl-BIxfXb7u.js} +1 -1
  118. package/dist/ui/assets/{session-jsonl-C-BZSOHy.js → session-jsonl-v8KN4g_6.js} +1 -1
  119. package/dist/ui/assets/{session-search-index-nhvgyuxV.js → session-search-index-CDR-vSNN.js} +1 -1
  120. package/dist/ui/assets/{setup-feature-flags-remote-CpzgUHLB.js → setup-feature-flags-remote-zauTrEL6.js} +1 -1
  121. package/dist/ui/assets/{setup-model-catalog-BGx3XYFY.js → setup-model-catalog-CC8KX0LB.js} +1 -1
  122. package/dist/ui/assets/{signed-fetch-t5uBcIk_.js → signed-fetch-D3crNsSs.js} +1 -1
  123. package/dist/ui/assets/{silent-renew-backoff-Q1A_jbQH.js → silent-renew-backoff-Bw_c5Dy9.js} +1 -1
  124. package/dist/ui/assets/slicc-version-BiZFSvt-.js +1 -0
  125. package/dist/ui/assets/{snapshot-Bb3mZrhI.js → snapshot-CISX8Ybx.js} +1 -1
  126. package/dist/ui/assets/{snapshot-features-D44t7iA7.js → snapshot-features-NmqWLNc6.js} +1 -1
  127. package/dist/ui/assets/soundscape-Cmr7xPXZ.js +1 -0
  128. package/dist/ui/assets/{speak-B-rF7cd2.js → speak-D1JF7Loc.js} +1 -1
  129. package/dist/ui/assets/{sprinkle-manager-BWdoEwv2.js → sprinkle-manager-DYhvCg3m.js} +1 -1
  130. package/dist/ui/assets/{sprinkle-renderer-B-1HSkrF.js → sprinkle-renderer-B5O28doL.js} +1 -1
  131. package/dist/ui/assets/{ssh-DGBxesfZ.js → ssh-DPyBpV4Z.js} +1 -1
  132. package/dist/ui/assets/{state-B7Ano9ql.js → state-CcrU6NJk.js} +1 -1
  133. package/dist/ui/assets/{store-DTMATE-h.js → store-D9HgQRdy.js} +1 -1
  134. package/dist/ui/assets/{store-B3uS3nQU.js → store-DYTzgtEI.js} +1 -1
  135. package/dist/ui/assets/{sudo-D8OGZd6t.js → sudo-BMKHhJ-G.js} +1 -1
  136. package/dist/ui/assets/{supervisor-Ck1Ryx2i.js → supervisor-DVWawJTM.js} +1 -1
  137. package/dist/ui/assets/{sync-dialog-C2TF9Y3h.js → sync-dialog-a3YQ7KdL.js} +1 -1
  138. package/dist/ui/assets/{transformers-env-h8uZoLwJ.js → transformers-env-BFCBqwlr.js} +1 -1
  139. package/dist/ui/assets/{tray-leader-BHyMCdCH.js → tray-leader-zKkaFxIk.js} +1 -1
  140. package/dist/ui/assets/{tray-leave-runtime-DR6t2Cuo.js → tray-leave-runtime-CNc8g3tP.js} +1 -1
  141. package/dist/ui/assets/{tray-runtime-config-DBapPARd.js → tray-runtime-config-DmcF9Q2r.js} +1 -1
  142. package/dist/ui/assets/{tray-sidecar-BdEGdpUe.js → tray-sidecar-DqV3sh8H.js} +1 -1
  143. package/dist/ui/assets/{turn-journal-B4vV4fDV.js → turn-journal-Z3e-huge.js} +1 -1
  144. package/dist/ui/assets/{upgrade-detection-BXyDgjYd.js → upgrade-detection-Bsvrq_lt.js} +1 -1
  145. package/dist/ui/assets/{upskill-lick-skip-8Ozx8QGg.js → upskill-lick-skip-BQvJXwS8.js} +1 -1
  146. package/dist/ui/assets/voice-reply-B_BXV7A4.js +1 -0
  147. package/dist/ui/assets/{wc-attach-BN8rykoa.js → wc-attach-CEkWqpLf.js} +2 -2
  148. package/dist/ui/assets/{wc-browser-z1N3wGuK.js → wc-browser-DWwB9l3P.js} +1 -1
  149. package/dist/ui/assets/{wc-computers-C1g9iCUj.js → wc-computers-DuGnds2T.js} +1 -1
  150. package/dist/ui/assets/{wc-detached-DHD--8Tf.js → wc-detached-Bc462J4O.js} +1 -1
  151. package/dist/ui/assets/{wc-extension-qof5b3tN.js → wc-extension-DZmTjBxS.js} +2 -2
  152. package/dist/ui/assets/{wc-follower-sKXDjyv-.js → wc-follower-C0olroj0.js} +3 -3
  153. package/dist/ui/assets/{wc-follower-oauth-Bsskcjc7.js → wc-follower-oauth-BTOd3V8J.js} +1 -1
  154. package/dist/ui/assets/{wc-gelatiere-D_uq7S-T.js → wc-gelatiere-3BBfbusI.js} +1 -1
  155. package/dist/ui/assets/wc-live-Cc8h6ZH1.js +428 -0
  156. package/dist/ui/assets/{wc-nav-DqIdooNV.js → wc-nav-6f53F2ez.js} +2 -2
  157. package/dist/ui/assets/{wc-onboarding-38WwDwrA.js → wc-onboarding-D548eykf.js} +2 -2
  158. package/dist/ui/assets/{wc-permissions-o70pdgUK.js → wc-permissions-B3SJSMf9.js} +2 -2
  159. package/dist/ui/assets/{wc-placeholder-DMKTZY8P.js → wc-placeholder-BS4TqwFw.js} +3 -3
  160. package/dist/ui/assets/{wc-secret-request-CmpDh1Bs.js → wc-secret-request-DoSFP6An.js} +1 -1
  161. package/dist/ui/assets/{wc-settings-7DxLA_ig.js → wc-settings-B7zv9hl_.js} +3 -3
  162. package/dist/ui/assets/{wc-shell-DFszC8_0.js → wc-shell-pTQjFXvS.js} +362 -199
  163. package/dist/ui/assets/{wc-shortcut-config-Co6ONiUg.js → wc-shortcut-config-87PqTsLw.js} +2 -2
  164. package/dist/ui/assets/{wc-sprinkles-zxKMU9ju.js → wc-sprinkles-BMoFsMix.js} +2 -2
  165. package/dist/ui/assets/{wc-transcript-export-BnOv-hzh.js → wc-transcript-export-CP5fUab6.js} +2 -2
  166. package/dist/ui/assets/{wc-tray-B2w3dtCQ.js → wc-tray-DW-miPAR.js} +4 -4
  167. package/dist/ui/assets/welcome-detection-F6VKt_Ix.js +1 -0
  168. package/dist/ui/assets/{whisper-session-BB92W1rY.js → whisper-session-C90nWMGE.js} +2 -2
  169. package/dist/ui/assets/{xai-grok-DsDg76ef.js → xai-grok-D0yrS3by.js} +1 -1
  170. package/dist/ui/assets/{xai-grok-Btqu459a.js → xai-grok-U-6wly9W.js} +1 -1
  171. package/dist/ui/index.html +9 -9
  172. package/dist/ui/packages/webapp/index.html +9 -9
  173. package/package.json +1 -1
  174. package/dist/ui/assets/SKILL-CWxUIsrD.js +0 -1
  175. package/dist/ui/assets/provider-store-access-BbD8NSzf.js +0 -1
  176. package/dist/ui/assets/provider-store-access-BvzkUnma.js +0 -1
  177. package/dist/ui/assets/proxied-fetch-BlIpeDaL.js +0 -2
  178. package/dist/ui/assets/proxied-fetch-CNe6icTW.js +0 -1
  179. package/dist/ui/assets/secret-topology-DpJD8DzV.js +0 -1
  180. package/dist/ui/assets/slicc-version-YnqCI9lq.js +0 -1
  181. package/dist/ui/assets/soundscape-CUzGNWGR.js +0 -1
  182. package/dist/ui/assets/voice-reply-ChDAb3Rf.js +0 -1
  183. package/dist/ui/assets/wc-live-DWEUEDdK.js +0 -428
  184. package/dist/ui/assets/welcome-detection-Cik05qcd.js +0 -1
@@ -1,4 +1,4 @@
1
- import{t as e}from"./logger-LESFN7Hj.js";import{r as t,t as n}from"./base64-BPBW1Gzr.js";import{n as r}from"./bridge-protocol-31SWTdS5.js";import{a as i,n as a,o,s,t as c}from"./handoff-link-B3It6xQY.js";import{d as l,f as u,i as d,u as f}from"./account-store-UA_3Tz4g.js";import{a as p,l as m,n as h,o as g}from"./proxied-fetch-CNe6icTW.js";import{t as _}from"./runtime-env-DadgceZk.js";import{t as v}from"./slugify-BYJ6QVAt.js";import{n as ee,t as te}from"./host-command-PUA7nfMk.js";import{a as ne,i as re,n as ie,r as ae,t as oe}from"./snapshot-Bb3mZrhI.js";import{i as se,r as y}from"./panel-rpc-DW7W4w6_.js";import{t as ce}from"./providers-CWFcdblf.js";import{r as le}from"./binary-cache-bSOhqXB1.js";import{i as ue,n as de,r as fe}from"./fetch-body-CuwTaJC_.js";import{s as pe,t as me}from"./api-endpoint-D8lUKmPu.js";import{t as he}from"./compat-uEPf6-XW.js";import{a as ge,i as _e}from"./core-CDo7qjEn.js";import{n as ve,t as ye}from"./mime-types-D7IV6i7k.js";import{t as be}from"./secrets-bridge-client-kWWipUuL.js";import{a as xe,i as Se,n as Ce,r as we}from"./tool-ui-DRnUkp2g.js";import{a as Te,i as Ee,n as b,t as x}from"./path-utils-DNJG-zQf.js";import{n as De,r as Oe,t as ke}from"./merge-file-core-VJlzucJY.js";import{r as Ae}from"./workspace-mode-D0kUKBVS.js";import{n as je,t as Me}from"./thinking-level-5x0UAu9N.js";import{n as Ne,t as Pe}from"./types-D8gIX-W-.js";import{i as Fe}from"./mount-index-CQfmUPuZ.js";import{a as Ie,i as Le,n as Re,o as ze,s as Be,t as Ve}from"./signed-fetch-t5uBcIk_.js";import{o as He}from"./mount-table-store-DrF_Ifaz.js";import{t as Ue}from"./remote-cache-BE5T1-53.js";import{n as We}from"./fs-Bvj_6WV6.js";import{a as Ge}from"./tray-leader-status-CpkFr6n7.js";import{n as Ke,t as qe}from"./slicc-version-YnqCI9lq.js";import{a as Je,i as Ye,o as Xe,r as S,t as Ze}from"./browser-BM_DFzrh.js";import{t as C}from"./subcommand-flags-BZi7j78Q.js";import{n as Qe,r as $e,t as w}from"./subcommand-help-CgO7wRS5.js";import{n as et}from"./cost-command-CitGzr6C.js";import{d as tt,g as nt,i as rt,n as it,o as at}from"./sudoers-BdBYQPUn.js";import{n as ot,r as st,t as ct}from"./approval-timeout-BQ29Z0gf.js";import{a as lt,c as ut,i as dt,l as ft,n as pt,o as mt,r as ht,t as gt}from"./types-BfwydWt7.js";import{n as T,t as _t}from"./boundary-Cp9c_bPu.js";import"./rest-paths-Dia19u9P.js";import{t as vt}from"./html-B_Hg2WOy.js";import{n as yt}from"./llm-session-id-BZyXP_j2.js";import{t as bt}from"./buffer-polyfill-BccMjOKj.js";import{i as xt,o as St}from"./browser-DuyhpHbR.js";import{i as Ct,r as wt,t as Tt}from"./mount-picker-popup-BMils9JY.js";import{t as Et}from"./buffer-B5d1xHaH.js";import{A as Dt,B as E,C as Ot,D,E as kt,F as At,G as jt,H as O,I as k,J as Mt,K as Nt,L as Pt,M as Ft,N as It,O as Lt,P as Rt,R as zt,S as Bt,T as Vt,U as Ht,V as Ut,W as Wt,Y as Gt,_ as Kt,a as qt,b as Jt,c as Yt,d as Xt,f as Zt,g as Qt,h as $t,i as en,j as tn,k as nn,l as rn,m as an,n as on,o as sn,p as A,q as cn,r as ln,s as un,t as dn,u as fn,v as pn,w as mn,x as hn,y as gn,z as _n}from"./isomorphic-git-r9mnHMnp.js";import"./global-db-DJXlpNui.js";import{S as vn,_ as yn,a as bn,b as xn,c as Sn,d as Cn,f as wn,g as Tn,h as En,i as Dn,l as On,n as kn,o as An,p as jn,r as Mn,s as Nn,t as Pn,u as Fn,v as j,x as M,y as In}from"./state-B7Ano9ql.js";import{a as Ln,i as Rn,r as zn,t as Bn}from"./git-config-Bdgu8kD2.js";import{a as Vn,n as Hn,o as Un,r as Wn,s as Gn}from"./jsh-discovery-CnvNKojr.js";import{A as Kn,C as qn,a as Jn,b as Yn,c as Xn,d as Zn,f as Qn,h as $n,i as er,j as tr,l as nr,m as rr,n as ir,o as ar,p as or,r as sr,s as cr,t as N,u as lr,v as ur,y as dr}from"./shared-DfMXB1pm.js";import{_ as fr,a as pr,b as mr,d as hr,f as gr,g as _r,h as vr,i as yr,l as br,m as xr,p as Sr,r as Cr,s as wr,u as Tr,v as Er,x as Dr,y as Or}from"./require-guards-DPf5QETL.js";import{_ as kr,a as Ar,b as jr,c as Mr,d as Nr,f as Pr,g as Fr,h as Ir,l as Lr,m as Rr,n as zr,p as Br,s as Vr,t as Hr,u as Ur,v as Wr,x as Gr,y as Kr}from"./jsh-executor-BRw7B4H0.js";import{n as qr,t as Jr}from"./esbuild-wasm-CeZYVyQ9.js";import{n as Yr}from"./wasm-compiler-Ct7QZURL.js";import{a as Xr,o as Zr,s as Qr,t as $r}from"./usb-device-registry-DFzxaOky.js";import{a as P,i as ei,r as ti,t as ni}from"./just-bash-compat-B-SPHuh_.js";import{i as ri,r as ii,t as ai}from"./script-catalog-DZtOMxvi.js";import{a as oi,c as si,o as ci,s as li,t as ui}from"./types-Dzr0qYl3.js";import{a as di,c as fi,d as pi,f as mi,n as hi,r as gi,u as _i}from"./github-zip-YeBT3Ny7.js";import{i as vi,t as yi}from"./github-auth-C5UPE82y.js";import{a as bi,i as xi,o as Si,r as Ci,t as wi}from"./provenance-DdmsQ3Nr.js";import{a as Ti,c as Ei,i as Di,n as Oi,o as ki,r as Ai,s as ji}from"./github-install-z8nzKR56.js";import{n as Mi,t as Ni}from"./magick-wasm-KFp97Nzb.js";import{i as Pi,n as Fi,r as Ii,t as Li}from"./pdf-raster-BWk6ezTX.js";import{n as Ri}from"./lick-target-env-8JxfVcIV.js";import{t as zi}from"./tmpdir-env-ate4iNcK.js";import{a as Bi,c as Vi,d as Hi,f as Ui,i as Wi,l as Gi,n as Ki,o as qi,p as Ji,r as Yi,s as Xi,t as Zi,u as Qi}from"./installer-hyWN7t-8.js";import{t as $i}from"./ffmpeg-wasm-CV1BmGNS.js";import{t as ea}from"./local-llm-3Pq3W9JZ.js";import{t as ta}from"./client-Sb_wIqH2.js";import{t as na}from"./redirect-uri-Dnc7Ae7l.js";import{a as ra,c as ia,i as aa,o as oa,r as sa,s as ca}from"./v86-vm-DCm7zA2r.js";import{n as la,r as ua}from"./lick-urls-CgPiVwD-.js";let da=null;function fa(e){da=e!==null&&Number.isFinite(e)&&e>0?e:null}function pa(){if(da!==null)return da;let e=globalThis.performance?.timeOrigin;return typeof e==`number`&&Number.isFinite(e)&&e>0?e:Date.now()}new URL(r).hostname;const ma=/^([0-9a-f]{32})--(?:[0-9a-f]{8}-)?([0-9a-f]+)$/i;function ha(e){let t;try{t=new URL(e.includes(`://`)?e:`https://${e}`).hostname}catch{return null}let n=ma.exec(t.split(`.`)[0]??``);if(!n||!t.includes(`.`))return null;let r=n[1].toLowerCase();return`${[r.slice(0,8),r.slice(8,12),r.slice(12,16),r.slice(16,20),r.slice(20)].join(`-`)}.${n[2].toLowerCase()}`}[`ghp_`,`gho_`,`ghu_`,`ghs_`,`ghr_`,`github_pat_`,`sk-`,`pk-`,`xoxb-`,`xoxp-`,`xoxa-`,`xoxs-`,`AKIA`,`ABIA`,`ACCA`,`ASIA`,`sk-ant-`,`Bearer `].sort((e,t)=>t.length-e.length);function ga(e,t){let n=e.toLowerCase(),r=t.toLowerCase();if(n===`*`)return!0;if(!n.startsWith(`*.`))return n===r;let i=n.slice(1);return r.length>i.length&&r.endsWith(i)}function _a(e,t){return e.some(e=>ga(e,t))}const va=`slicc-transcript`,ya=[`canonical-agent-history-unavailable`,`tool-data-may-be-truncated`,`model-metadata-unavailable`,`scoop-history-unavailable`,`attachment-file-missing`,`attachment-association-unavailable`,`complete-snapshot-unavailable`],ba=new Set(`/export/format./export/producer/application./session/id./session/state./session/completeness/status./session/completeness/missing/*./conversations/*/id./conversations/*/kind./conversations/*/parentConversationId./conversations/*/messages/*/id./conversations/*/messages/*/role./conversations/*/messages/*/timestamp./conversations/*/messages/*/toolCallId./conversations/*/messages/*/content/*/type./conversations/*/messages/*/content/*/id./conversations/*/messages/*/content/*/name./conversations/*/messages/*/content/*/attachmentId./delegations/*/sourceConversationId./delegations/*/targetConversationId./delegations/*/toolCallId./attachments/*/id./attachments/*/path./attachments/*/sha256./attachments/*/sourceConversationId./attachments/*/sourceMessageId./attachments/*/handling./attachments/*/missingReason`.split(`.`));function xa(e){return ba.has(e.replace(/\/\d+(?=\/|$)/g,`/*`))}var Sa=class extends Error{code;detail;constructor(e,t){super(t?`${e}: ${t}`:e),this.code=e,this.detail=t,this.name=`TranscriptExportError`}};const Ca=new Set(ya),wa=/^[0-9a-fA-F]{64}$/,Ta=/^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}/;function F(e){return typeof e==`object`&&!!e&&!Array.isArray(e)}function Ea(e){return typeof e==`string`&&wa.test(e)}function Da(e){return Ta.test(e)&&Number.isFinite(Date.parse(e))}function Oa(e,t){let n=t.map(e=>`"${e}"`),r=n[n.length-1];return n.length===2?`${e} must be ${n[0]} or ${r}`:`${e} must be ${n.slice(0,-1).join(`, `)}, or ${r}`}function ka(e,t,n){return typeof e!=`string`||!t.includes(e)?{ok:!1,error:Oa(n,t)}:{ok:!0}}function Aa(e,t,n){for(let r=0;r<e.length;r++){let i=t(e[r],`${n}[${r}]`);if(!i.ok)return i}return{ok:!0}}function ja(e,t){let n=e.type;if(n===`text`){if(typeof e.text!=`string`)return{ok:!1,error:`${t}.text must be a string`}}else if(n===`tool-call`){if(typeof e.id!=`string`||e.id===``)return{ok:!1,error:`${t}.id must be a non-empty string`};if(typeof e.name!=`string`||e.name===``)return{ok:!1,error:`${t}.name must be a non-empty string`};if(!(`input`in e))return{ok:!1,error:`${t}.input must be present`}}else if(typeof e.attachmentId!=`string`||e.attachmentId===``)return{ok:!1,error:`${t}.attachmentId must be a non-empty string`};return{ok:!0}}function Ma(e,t){if(!F(e))return{ok:!1,error:`${t} must be a non-null object`};let n=ka(e.type,[`text`,`tool-call`,`attachment-ref`],`${t}.type`);return n.ok?ja(e,t):n}function Na(e,t){for(let n of[`input`,`output`,`cacheRead`,`cacheWrite`,`totalTokens`]){let r=e[n];if(typeof r!=`number`)return{ok:!1,error:`${t}.${n} must be a number`};if(!Number.isInteger(r)||r<0)return{ok:!1,error:`${t}.${n} must be a non-negative integer`}}return{ok:!0}}function Pa(e,t){for(let n of[`input`,`output`,`cacheRead`,`cacheWrite`,`total`]){let r=e[n];if(typeof r!=`number`)return{ok:!1,error:`${t}.${n} must be a number`};if(!Number.isFinite(r)||r<0)return{ok:!1,error:`${t}.${n} must be a finite non-negative number`}}return{ok:!0}}function Fa(e,t){let n=Na(e,t);if(!n.ok)return n;let r=e.cost;return F(r)?Pa(r,`${t}.cost`):{ok:!1,error:`${t}.cost must be a non-null object`}}function Ia(e,t){if(typeof e.id!=`string`)return{ok:!1,error:`${t}.id must be a string`};if(typeof e.sequence!=`number`)return{ok:!1,error:`${t}.sequence must be a number`};let n=e.sequence;return!Number.isInteger(n)||n<1?{ok:!1,error:`${t}.sequence must be a positive integer`}:typeof e.timestamp==`string`?Da(e.timestamp)?{ok:!0}:{ok:!1,error:`${t}.timestamp must be a valid ISO 8601 date-time string`}:{ok:!1,error:`${t}.timestamp must be a string`}}function La(e,t){let n=e.toolCallId;return typeof n!=`string`||n===``?{ok:!1,error:`${t}.toolCallId must be a non-empty string for tool-result messages`}:{ok:!0}}function Ra(e,t){let n=e.usage;return n===void 0?{ok:!0}:F(n)?Fa(n,`${t}.usage`):{ok:!1,error:`${t}.usage must be a non-null object`}}function za(e,t){if(!F(e))return{ok:!1,error:`${t} must be a non-null object`};let n=ka(e.role,[`user`,`assistant`,`tool-result`],`${t}.role`);if(!n.ok)return n;if(e.role===`tool-result`){let n=La(e,t);if(!n.ok)return n}let r=Ia(e,t);if(!r.ok)return r;let i=e.content;if(!Array.isArray(i))return{ok:!1,error:`${t}.content must be an array`};let a=Aa(i,Ma,`${t}.content`);return a.ok?Ra(e,t):a}function Ba(e,t){if(!F(e))return{ok:!1,error:`${t} must be a non-null object`};if(typeof e.id!=`string`)return{ok:!1,error:`${t}.id must be a string`};if(typeof e.name!=`string`)return{ok:!1,error:`${t}.name must be a string`};let n=ka(e.kind,[`cone`,`scoop`],`${t}.kind`);if(!n.ok)return n;let r=e.messages;return Array.isArray(r)?Aa(r,za,`${t}.messages`):{ok:!1,error:`${t}.messages must be an array`}}function Va(e,t){for(let n of[`id`,`path`,`originalName`,`mimeType`,`sha256`,`sourceConversationId`,`sourceMessageId`])if(typeof e[n]!=`string`)return{ok:!1,error:`${t}.${n} must be a string`};return{ok:!0}}function Ha(e,t){let n=e.path,r=e.sha256,i=e.byteLength;return n===``?{ok:!1,error:`${t}.path must be non-empty when present`}:Ea(r)?!Number.isInteger(i)||i<0?{ok:!1,error:`${t}.byteLength must be a non-negative integer when present`}:e.missingReason===void 0?{ok:!0}:{ok:!1,error:`${t}.missingReason must be absent when present is true`}:{ok:!1,error:`${t}.sha256 must be a 64-char hex string when present`}}const Ua=[`attachment-file-missing`,`attachment-association-unavailable`];function Wa(e,t){let n=e.path,r=e.sha256,i=e.byteLength;return n===``?r===``?i===0?ka(e.missingReason,Ua,`${t}.missingReason`):{ok:!1,error:`${t}.byteLength must be zero when not present`}:{ok:!1,error:`${t}.sha256 must be empty when not present`}:{ok:!1,error:`${t}.path must be empty when not present`}}function Ga(e,t){return e.present?Ha(e,t):Wa(e,t)}function Ka(e,t){if(!F(e))return{ok:!1,error:`${t} must be a non-null object`};let n=Va(e,t);if(!n.ok)return n;if(typeof e.byteLength!=`number`)return{ok:!1,error:`${t}.byteLength must be a number`};if(typeof e.present!=`boolean`)return{ok:!1,error:`${t}.present must be a boolean`};let r=ka(e.handling,[`text-redacted`,`binary-unchanged`],`${t}.handling`);return r.ok?Ga(e,t):r}function qa(e,t){let n=ka(e.kind,[`json`,`attachment`],`${t}.kind`);if(!n.ok)return n;if(e.kind===`json`){if(typeof e.pointer!=`string`)return{ok:!1,error:`${t}.pointer must be a string`};let n=e.pointer;if(n!==``&&!n.startsWith(`/`))return{ok:!1,error:`${t}.pointer must be a valid RFC 6901 JSON pointer`}}else if(typeof e.attachmentId!=`string`||e.attachmentId===``)return{ok:!1,error:`${t}.attachmentId must be a non-empty string`};return{ok:!0}}function Ja(e,t){if(!F(e))return{ok:!1,error:`${t} must be a non-null object`};if(typeof e.id!=`string`)return{ok:!1,error:`${t}.id must be a string`};if(typeof e.category!=`string`)return{ok:!1,error:`${t}.category must be a string`};let n=ka(e.detector,[`known-secret`,`credential-pattern`,`pre-obfuscated`],`${t}.detector`);if(!n.ok)return n;let r=e.target;return F(r)?qa(r,`${t}.target`):{ok:!1,error:`${t}.target must be a non-null object`}}function Ya(e,t){return F(e)?typeof e.sourceConversationId==`string`?typeof e.targetConversationId==`string`?{ok:!0}:{ok:!1,error:`${t}.targetConversationId must be a string`}:{ok:!1,error:`${t}.sourceConversationId must be a string`}:{ok:!1,error:`${t} must be a non-null object`}}function Xa(e,t){return typeof e!=`string`||!Ca.has(e)?{ok:!1,error:`${t} is not a valid completeness reason`}:{ok:!0}}function Za(e){if(!F(e))return{ok:!1,error:`export must be a non-null object`};if(typeof e.id!=`string`)return{ok:!1,error:`export.id must be a string`};if(typeof e.generatedAt!=`string`)return{ok:!1,error:`export.generatedAt must be a string`};if(e.format!==`slicc-transcript`)return{ok:!1,error:`export.format must equal "slicc-transcript"`};let t=e.producer;return F(t)?t.application===`slicc`?typeof t.version==`string`?{ok:!0}:{ok:!1,error:`export.producer.version must be a string`}:{ok:!1,error:`export.producer.application must equal "slicc"`}:{ok:!1,error:`export.producer must be a non-null object`}}function Qa(e){if(!F(e))return{ok:!1,error:`session.completeness must be a non-null object`};let t=ka(e.status,[`complete`,`partial`],`session.completeness.status`);return t.ok?Array.isArray(e.missing)?Aa(e.missing,Xa,`session.completeness.missing`):{ok:!1,error:`session.completeness.missing must be an array`}:t}function $a(e){if(!F(e))return{ok:!1,error:`session must be a non-null object`};if(typeof e.id!=`string`)return{ok:!1,error:`session.id must be a string`};if(typeof e.title!=`string`)return{ok:!1,error:`session.title must be a string`};let t=ka(e.state,[`active`,`frozen`],`session.state`);return t.ok?Qa(e.completeness):t}function eo(e){if(!F(e))return{ok:!1,error:`privacy must be a non-null object`};if(e.reasoningExcluded!==!0)return{ok:!1,error:`privacy.reasoningExcluded must be true`};let t=e.excludedReasoningBlocks;if(typeof t!=`number`)return{ok:!1,error:`privacy.excludedReasoningBlocks must be a number`};if(!Number.isInteger(t)||t<0)return{ok:!1,error:`privacy.excludedReasoningBlocks must be a non-negative integer`};if(e.binaryAttachments!==`included-unchanged`)return{ok:!1,error:`privacy.binaryAttachments must equal "included-unchanged"`};if(!F(e.redactionCounts))return{ok:!1,error:`privacy.redactionCounts must be a non-null object`};let n=e.redactions;return Array.isArray(n)?Aa(n,Ja,`privacy.redactions`):{ok:!1,error:`privacy.redactions must be an array`}}function to(e){let t=e.conversations;if(!Array.isArray(t))return{ok:!1,error:`conversations must be an array`};let n=Aa(t,Ba,`conversations`);if(!n.ok)return n;let r=e.delegations;if(!Array.isArray(r))return{ok:!1,error:`delegations must be an array`};let i=Aa(r,Ya,`delegations`);if(!i.ok)return i;let a=e.attachments;return Array.isArray(a)?Aa(a,Ka,`attachments`):{ok:!1,error:`attachments must be an array`}}function no(e){let t=new Set,n=new Set;for(let r of e){if(!F(r)||typeof r.id!=`string`)continue;if(t.has(r.id))return{ok:!1,error:`duplicate conversation id "${r.id}"`};t.add(r.id);let e=r.messages;if(Array.isArray(e)){for(let t of e)if(!(!F(t)||typeof t.id!=`string`)){if(n.has(t.id))return{ok:!1,error:`duplicate message id "${t.id}"`};n.add(t.id)}}}return{ok:!0}}function ro(e){for(let t of e){if(!F(t))continue;let e=t.messages;if(!Array.isArray(e))continue;let n=typeof t.id==`string`?t.id:`?`,r=0;for(let t of e){if(!F(t)||typeof t.sequence!=`number`)continue;let e=t.sequence;if(e<=r)return{ok:!1,error:`sequences in conversation "${n}" must be strictly increasing`};r=e}}return{ok:!0}}function io(e){let t=[];for(let n of e){if(!F(n))continue;let e=n.content;if(Array.isArray(e))for(let n of e)F(n)&&n.type===`tool-call`&&typeof n.id==`string`&&t.push(n.id)}return t}function ao(e){let t=new Set;for(let n of e){if(!F(n))continue;let e=n.messages;if(Array.isArray(e))for(let n of io(e))t.add(n)}return t}function oo(e,t){for(let n of e){if(!F(n))continue;let e=n.messages;if(Array.isArray(e))for(let n of e){if(!F(n)||n.role!==`tool-result`)continue;let e=n.toolCallId;if(typeof e==`string`&&e!==``&&!t.has(e))return{ok:!1,error:`tool-result message references unknown toolCallId "${e}"`}}}return{ok:!0}}function so(e){return oo(e,ao(e))}function co(e,t){for(let n of e){if(!F(n)||n.type!==`attachment-ref`)continue;let e=n.attachmentId;if(typeof e!=`string`||!t.has(e))return{ok:!1,error:`attachment-ref references unknown attachmentId "${e}"`}}return{ok:!0}}function lo(e,t){for(let n of e){if(!F(n))continue;let e=n.messages;if(Array.isArray(e))for(let n of e){if(!F(n))continue;let e=n.content;if(!Array.isArray(e))continue;let r=co(e,t);if(!r.ok)return r}}return{ok:!0}}function uo(e,t){let n=new Set;for(let e of t)F(e)&&typeof e.id==`string`&&n.add(e.id);return lo(e,n)}function fo(e){let t=new Map;for(let n of e){if(!F(n)||typeof n.id!=`string`)continue;let e=new Set,r=n.messages;if(Array.isArray(r))for(let t of r)F(t)&&typeof t.id==`string`&&e.add(t.id);t.set(n.id,e)}return t}function po(e,t){let n=fo(t);for(let t=0;t<e.length;t++){let r=e[t];if(!F(r))continue;let i=r.sourceConversationId,a=r.sourceMessageId;if(typeof i!=`string`||typeof a!=`string`)continue;let o=n.get(i);if(!o)return{ok:!1,error:`attachments[${t}].sourceConversationId "${i}" does not exist`};if(!o.has(a))return{ok:!1,error:`attachments[${t}].sourceMessageId "${a}" does not exist in conversation "${i}"`}}return{ok:!0}}function mo(e){let t=new Map;for(let n of e){if(!F(n)||typeof n.id!=`string`)continue;let e=Array.isArray(n.messages)?n.messages:[];t.set(n.id,new Set(io(e)))}return t}function ho(e,t,n){for(let r=0;r<e.length;r++){let i=e[r];if(!F(i))continue;let a=i.sourceConversationId,o=i.targetConversationId;if(typeof a!=`string`||!t.has(a))return{ok:!1,error:`delegations[${r}].sourceConversationId "${a}" does not exist`};if(typeof o!=`string`||!t.has(o))return{ok:!1,error:`delegations[${r}].targetConversationId "${o}" does not exist`};let s=i.toolCallId;if(typeof s==`string`&&s!==``&&!n.get(a)?.has(s))return{ok:!1,error:`delegations[${r}].toolCallId "${s}" does not exist in source conversation "${a}"`}}return{ok:!0}}function go(e,t){let n=new Set;for(let e of t)F(e)&&typeof e.id==`string`&&n.add(e.id);return ho(e,n,mo(t))}function _o(e,t,n){if(e.kind!==`attachment`)return{ok:!0};let r=e.attachmentId;return typeof r!=`string`||!t.has(r)?{ok:!1,error:`${n}.attachmentId "${r}" does not reference a known attachment`}:{ok:!0}}function vo(e,t){let n=new Set;for(let e of t)F(e)&&typeof e.id==`string`&&n.add(e.id);for(let t=0;t<e.length;t++){let r=e[t];if(!F(r))continue;let i=r.target;if(!F(i))continue;let a=_o(i,n,`privacy.redactions[${t}].target`);if(!a.ok)return a}return{ok:!0}}function yo(e){let t=e.conversations,n=e.attachments,r=e.delegations,i=e.privacy,a=Array.isArray(i?.redactions)?i.redactions:[],o=no(t);if(!o.ok)return o;let s=ro(t);if(!s.ok)return s;let c=so(t);if(!c.ok)return c;let l=uo(t,n);if(!l.ok)return l;let u=po(n,t);if(!u.ok)return u;let d=go(r,t);return d.ok?vo(a,n):d}function bo(e){let t=to(e);return t.ok?yo(e):t}function xo(e){if(!F(e))return{ok:!1,error:`document must be a non-null object`};if(e.schemaVersion!==1)return{ok:!1,error:`schemaVersion must equal 1`};let t=Za(e.export);if(!t.ok)return t;let n=$a(e.session);if(!n.ok)return n;let r=eo(e.privacy);return r.ok?bo(e):r}async function So(e,t,n){let r=await n({method:`GET`,path:`/${e}/sites/${t}/config.json`,origin:ze});if(r.status===401||r.status===403)throw Error(`not authorized to read the site config for ${e}/${t} — log in via Settings → Providers → Adobe, or pass --backend to skip the probe`);if(r.status===404)throw Error(`no site config for ${e}/${t} — check the org and site names`);if(r.status>=400)throw Error(`site config probe failed for ${e}/${t}: ${r.status}`);let i;try{i=await r.json()}catch(n){throw Error(`site config for ${e}/${t} is not JSON: ${n instanceof Error?n.message:String(n)}`)}let a=i.content?.source?.url;return{backend:Co(a),sourceUrl:a}}function Co(e){if(!e)return`da`;let t;try{t=new URL(e).host}catch{return`da`}return t===`api.aem.live`?`aem`:`da`}const wo=`slicc-sprinkle-routes`;function To(){try{let e=localStorage.getItem(wo);return e?JSON.parse(e):{}}catch{return{}}}function Eo(e){try{localStorage.setItem(wo,JSON.stringify(e))}catch{}}function Do(e){return To()[e]}function Oo(e,t){let n=To();n[e]=t,Eo(n)}function ko(e){let t=To();delete t[e],Eo(t)}function Ao(){return To()}function jo(e,t,n){return ut(t,n,`${e} adapter does not implement ${t}.${n}`)}function Mo(e,t,n,r){let i=n.filter(e=>typeof r?.[e]==`function`),a=n.map(n=>{let i=r?.[n];return[n,typeof i==`function`?i:()=>Promise.resolve(jo(e,t,n))]});return{...Object.fromEntries(a),allowlist:i,supports:e=>i.includes(e)}}function No(e){let{adapter:t,pageGestures:n}=e,r=n??{};return{adapter:t,browser:Mo(t,`browser`,pt,e.browser),network:Mo(t,`network`,lt,e.network),secrets:Mo(t,`secrets`,mt,e.secrets),devices:Mo(t,`devices`,ht,{usbRequest:r.usbRequest,serialRequest:r.serialRequest,hidRequest:r.hidRequest,...e.devices}),mounts:Mo(t,`mounts`,dt,{pickDirectory:r.pickDirectory,...e.mounts}),approvals:Mo(t,`approvals`,gt,e.approvals)}}function Po(e={}){return No({adapter:`connect`,pageGestures:e.pageGestures})}function Fo(e){let t=_t(()=>import(`./extension-ops-CmuqbGmo.js`).then(t=>t.createExtensionOps(e)));return No({adapter:e.adapter,pageGestures:e.pageGestures,network:{crossOriginFetch:e=>T(`network`,`crossOriginFetch`,async()=>(await t()).crossOriginFetch(e))},secrets:{listMaskedEnv:()=>T(`secrets`,`listMaskedEnv`,async()=>(await t()).secrets.listMaskedEnv()),getMasked:e=>T(`secrets`,`getMasked`,async()=>(await t()).secrets.getMasked(e)),set:e=>T(`secrets`,`set`,async()=>(await t()).secrets.set(e)),delete:e=>T(`secrets`,`delete`,async()=>(await t()).secrets.delete(e))},mounts:{signRequest:e=>T(`mounts`,`signRequest`,async()=>(await t()).signRequest(e))},approvals:{request:e=>T(`approvals`,`request`,async()=>(await t()).requestApproval(e))}})}function Io(e={}){let t=_t(()=>import(`./rest-ops-vPHUnWou.js`).then(t=>t.createRestOps(e)),e.controlTimeoutMs??1e4);return No({adapter:`node-rest`,pageGestures:e.pageGestures,network:{localNodeServer:()=>Promise.resolve({ok:!0,value:{available:!0}}),crossOriginFetch:e=>T(`network`,`crossOriginFetch`,async()=>(await t()).crossOriginFetch(e))},secrets:{listMaskedEnv:()=>T(`secrets`,`listMaskedEnv`,async()=>(await t()).secrets.listMaskedEnv()),getMasked:e=>T(`secrets`,`getMasked`,async()=>(await t()).secrets.getMasked(e)),set:e=>T(`secrets`,`set`,async()=>(await t()).secrets.set(e)),delete:e=>T(`secrets`,`delete`,async()=>(await t()).secrets.delete(e))},mounts:{signRequest:e=>T(`mounts`,`signRequest`,async()=>(await t()).signRequest(e))},approvals:{request:e=>T(`approvals`,`request`,async()=>(await t()).requestApproval(e))}})}function Lo(e,t={}){let{pageGestures:n}=t;switch(e){case`node-rest`:return Io({pageGestures:n});case`extension-direct`:case`extension-delegate`:return Fo({adapter:e,pageGestures:n});case`connect`:return Po({pageGestures:n})}}const Ro=e(`quick-llm`);async function zo(e){let t=d();if(!t)return Ro.debug(`No API key for active provider — skipping`),null;let n=u(),r=l(),i;if(i=e.modelId?Uo(n,e.modelId)??Uo(n,r):Bo(n,r),!i)return Ro.debug(`No model available for provider`,{providerId:n}),null;let a={role:`user`,content:e.prompt,timestamp:Date.now()},o={};i.provider===`adobe`&&(o[`X-Session-Id`]=Wo());try{let n=(await he(i,{systemPrompt:e.system,messages:[a]},{apiKey:t,maxTokens:e.maxTokens??60,temperature:e.temperature??.3,signal:e.signal,headers:Object.keys(o).length>0?o:void 0})).content.filter(e=>e.type===`text`).map(e=>e.text).join(``).trim();return n.length>0?n:null}catch(e){return Ro.debug(`Quick label call failed`,{error:e instanceof Error?e.message:String(e)}),null}}function Bo(e,t){let n=f(e);if(n.length===0)return;let r=n.find(e=>e.id===t)??n[0],i=Ho(r.id),a=n.filter(e=>Vo(e,r,i));return a.length===0?r:(a.sort((e,t)=>(e.cost?.input??0)-(t.cost?.input??0)),a[0])}function Vo(e,t,n){if(e.id===t.id)return!1;let r=t.cost?.input??1/0;if((e.cost?.input??1/0)>=r)return!1;let i=e.id.toLowerCase();switch(n){case`claude`:return i.includes(`haiku`);case`gpt`:return/(^|-)mini(-|$)|(^|-)nano(-|$)/.test(i);case`gemini`:return i.includes(`flash`);case`grok`:return/(^|-)mini(-|$)|(^|-)fast(-|$)/.test(i);case`unknown`:return!0}}function Ho(e){let t=e.toLowerCase();return t.includes(`claude`)?`claude`:t.includes(`gemini`)?`gemini`:t.includes(`grok`)?`grok`:/^(gpt|o\d)/.test(t)?`gpt`:`unknown`}function Uo(e,t){return f(e).find(e=>e.id===t)}function Wo(){return yt(`ui-quick-llm`)}const Go=e(`sudo-suggest`),Ko=[`You generalize a single shell command into a minimal glob pattern for an`,`allow-list rule. Output ONLY the pattern on one line — no prose, no quotes,`,`no backticks. Keep the leading command/sub-command verbatim and replace only`,`the volatile tail (args, paths, refs) with a single trailing "*".`,`Examples:`,` git push origin main -> git push*`,` rm -rf build/cache -> rm -rf*`,` npm install left-pad -> npm install*`].join(`
1
+ import{t as e}from"./logger-LESFN7Hj.js";import{r as t,t as n}from"./base64-BPBW1Gzr.js";import{n as r}from"./bridge-protocol-31SWTdS5.js";import{a as i,n as a,o,s,t as c}from"./handoff-link-B3It6xQY.js";import{d as l,f as u,i as d,u as f}from"./account-store-D0ciUU3U.js";import{a as p,l as m,n as h,o as g}from"./proxied-fetch-J19bK2dG.js";import{t as _}from"./runtime-env-DadgceZk.js";import{t as v}from"./slugify-BYJ6QVAt.js";import{n as ee,t as te}from"./host-command-PUA7nfMk.js";import{a as ne,i as re,n as ie,r as ae,t as oe}from"./snapshot-CISX8Ybx.js";import{i as se,r as y}from"./panel-rpc-DW7W4w6_.js";import{t as ce}from"./providers-DLk_1jra.js";import{r as le}from"./binary-cache-bSOhqXB1.js";import{i as ue,n as de,r as fe}from"./fetch-body-CuwTaJC_.js";import{s as pe,t as me}from"./api-endpoint-D8lUKmPu.js";import{t as he}from"./compat-uEPf6-XW.js";import{a as ge,i as _e}from"./core-D-Fp1HL2.js";import{n as ve,t as ye}from"./mime-types-D7IV6i7k.js";import{t as be}from"./secrets-bridge-client-CUClOhLJ.js";import{a as xe,i as Se,n as Ce,r as we}from"./tool-ui-DRnUkp2g.js";import{a as Te,i as Ee,n as b,t as x}from"./path-utils-DNJG-zQf.js";import{n as De,r as Oe,t as ke}from"./merge-file-core-VJlzucJY.js";import{r as Ae}from"./workspace-mode-D0kUKBVS.js";import{n as je,t as Me}from"./thinking-level-5x0UAu9N.js";import{n as Ne,t as Pe}from"./types-D8gIX-W-.js";import{i as Fe}from"./mount-index-CQfmUPuZ.js";import{a as Ie,i as Le,n as Re,o as ze,s as Be,t as Ve}from"./signed-fetch-D3crNsSs.js";import{o as He}from"./mount-table-store-DrF_Ifaz.js";import{t as Ue}from"./remote-cache-BE5T1-53.js";import{n as We}from"./fs-TVcPtHbB.js";import{a as Ge}from"./tray-leader-status-CpkFr6n7.js";import{n as Ke,t as qe}from"./slicc-version-BiZFSvt-.js";import{a as Je,i as Ye,o as Xe,r as S,t as Ze}from"./browser-BM_DFzrh.js";import{t as C}from"./subcommand-flags-BZi7j78Q.js";import{n as Qe,r as $e,t as w}from"./subcommand-help-CgO7wRS5.js";import{n as et}from"./cost-command-CitGzr6C.js";import{d as tt,g as nt,i as rt,n as it,o as at}from"./sudoers-BdBYQPUn.js";import{n as ot,r as st,t as ct}from"./approval-timeout-BQ29Z0gf.js";import{a as lt,c as ut,i as dt,l as ft,n as pt,o as mt,r as ht,t as gt}from"./types-BfwydWt7.js";import{n as T,t as _t}from"./boundary-Cp9c_bPu.js";import"./rest-paths-Dia19u9P.js";import{t as vt}from"./html-B_Hg2WOy.js";import{n as yt}from"./llm-session-id-BZyXP_j2.js";import{t as bt}from"./buffer-polyfill-BccMjOKj.js";import{i as xt,o as St}from"./browser-DuyhpHbR.js";import{i as Ct,r as wt,t as Tt}from"./mount-picker-popup-BMils9JY.js";import{t as Et}from"./buffer-B5d1xHaH.js";import{A as Dt,B as E,C as Ot,D,E as kt,F as At,G as jt,H as O,I as k,J as Mt,K as Nt,L as Pt,M as Ft,N as It,O as Lt,P as Rt,R as zt,S as Bt,T as Vt,U as Ht,V as Ut,W as Wt,Y as Gt,_ as Kt,a as qt,b as Jt,c as Yt,d as Xt,f as Zt,g as Qt,h as $t,i as en,j as tn,k as nn,l as rn,m as an,n as on,o as sn,p as A,q as cn,r as ln,s as un,t as dn,u as fn,v as pn,w as mn,x as hn,y as gn,z as _n}from"./isomorphic-git-r9mnHMnp.js";import"./global-db-DJXlpNui.js";import{S as vn,_ as yn,a as bn,b as xn,c as Sn,d as Cn,f as wn,g as Tn,h as En,i as Dn,l as On,n as kn,o as An,p as jn,r as Mn,s as Nn,t as Pn,u as Fn,v as j,x as M,y as In}from"./state-CcrU6NJk.js";import{a as Ln,i as Rn,r as zn,t as Bn}from"./git-config-Bdgu8kD2.js";import{a as Vn,n as Hn,o as Un,r as Wn,s as Gn}from"./jsh-discovery-CnvNKojr.js";import{A as Kn,C as qn,a as Jn,b as Yn,c as Xn,d as Zn,f as Qn,h as $n,i as er,j as tr,l as nr,m as rr,n as ir,o as ar,p as or,r as sr,s as cr,t as N,u as lr,v as ur,y as dr}from"./shared-DfMXB1pm.js";import{_ as fr,a as pr,b as mr,d as hr,f as gr,g as _r,h as vr,i as yr,l as br,m as xr,p as Sr,r as Cr,s as wr,u as Tr,v as Er,x as Dr,y as Or}from"./require-guards-DPf5QETL.js";import{_ as kr,a as Ar,b as jr,c as Mr,d as Nr,f as Pr,g as Fr,h as Ir,l as Lr,m as Rr,n as zr,p as Br,s as Vr,t as Hr,u as Ur,v as Wr,x as Gr,y as Kr}from"./jsh-executor-C849KexO.js";import{n as qr,t as Jr}from"./esbuild-wasm-CeZYVyQ9.js";import{n as Yr}from"./wasm-compiler-Ct7QZURL.js";import{a as Xr,o as Zr,s as Qr,t as $r}from"./usb-device-registry-DFzxaOky.js";import{a as P,i as ei,r as ti,t as ni}from"./just-bash-compat-B-SPHuh_.js";import{i as ri,r as ii,t as ai}from"./script-catalog-DZtOMxvi.js";import{a as oi,c as si,o as ci,s as li,t as ui}from"./types-Dzr0qYl3.js";import{a as di,c as fi,d as pi,f as mi,n as hi,r as gi,u as _i}from"./github-zip-CfS9P2dH.js";import{i as vi,t as yi}from"./github-auth-Crm1hubQ.js";import{a as bi,i as xi,o as Si,r as Ci,t as wi}from"./provenance-DdmsQ3Nr.js";import{a as Ti,c as Ei,i as Di,n as Oi,o as ki,r as Ai,s as ji}from"./github-install-DB3-4PDg.js";import{n as Mi,t as Ni}from"./magick-wasm-KFp97Nzb.js";import{i as Pi,n as Fi,r as Ii,t as Li}from"./pdf-raster-BWk6ezTX.js";import{n as Ri}from"./lick-target-env-8JxfVcIV.js";import{t as zi}from"./tmpdir-env-ate4iNcK.js";import{a as Bi,c as Vi,d as Hi,f as Ui,i as Wi,l as Gi,n as Ki,o as qi,p as Ji,r as Yi,s as Xi,t as Zi,u as Qi}from"./installer-CzQ_lEMz.js";import{t as $i}from"./ffmpeg-wasm-CV1BmGNS.js";import{t as ea}from"./local-llm-BSMA7cC5.js";import{t as ta}from"./client-CmfvXtLV.js";import{t as na}from"./redirect-uri-DlOE4xJ4.js";import{a as ra,c as ia,i as aa,o as oa,r as sa,s as ca}from"./v86-vm-DCm7zA2r.js";import{n as la,r as ua}from"./lick-urls-CgPiVwD-.js";let da=null;function fa(e){da=e!==null&&Number.isFinite(e)&&e>0?e:null}function pa(){if(da!==null)return da;let e=globalThis.performance?.timeOrigin;return typeof e==`number`&&Number.isFinite(e)&&e>0?e:Date.now()}new URL(r).hostname;const ma=/^([0-9a-f]{32})--(?:[0-9a-f]{8}-)?([0-9a-f]+)$/i;function ha(e){let t;try{t=new URL(e.includes(`://`)?e:`https://${e}`).hostname}catch{return null}let n=ma.exec(t.split(`.`)[0]??``);if(!n||!t.includes(`.`))return null;let r=n[1].toLowerCase();return`${[r.slice(0,8),r.slice(8,12),r.slice(12,16),r.slice(16,20),r.slice(20)].join(`-`)}.${n[2].toLowerCase()}`}[`ghp_`,`gho_`,`ghu_`,`ghs_`,`ghr_`,`github_pat_`,`sk-`,`pk-`,`xoxb-`,`xoxp-`,`xoxa-`,`xoxs-`,`AKIA`,`ABIA`,`ACCA`,`ASIA`,`sk-ant-`,`Bearer `].sort((e,t)=>t.length-e.length);function ga(e,t){let n=e.toLowerCase(),r=t.toLowerCase();if(n===`*`)return!0;if(!n.startsWith(`*.`))return n===r;let i=n.slice(1);return r.length>i.length&&r.endsWith(i)}function _a(e,t){return e.some(e=>ga(e,t))}const va=`slicc-transcript`,ya=[`canonical-agent-history-unavailable`,`tool-data-may-be-truncated`,`model-metadata-unavailable`,`scoop-history-unavailable`,`attachment-file-missing`,`attachment-association-unavailable`,`complete-snapshot-unavailable`],ba=new Set(`/export/format./export/producer/application./session/id./session/state./session/completeness/status./session/completeness/missing/*./conversations/*/id./conversations/*/kind./conversations/*/parentConversationId./conversations/*/messages/*/id./conversations/*/messages/*/role./conversations/*/messages/*/timestamp./conversations/*/messages/*/toolCallId./conversations/*/messages/*/content/*/type./conversations/*/messages/*/content/*/id./conversations/*/messages/*/content/*/name./conversations/*/messages/*/content/*/attachmentId./delegations/*/sourceConversationId./delegations/*/targetConversationId./delegations/*/toolCallId./attachments/*/id./attachments/*/path./attachments/*/sha256./attachments/*/sourceConversationId./attachments/*/sourceMessageId./attachments/*/handling./attachments/*/missingReason`.split(`.`));function xa(e){return ba.has(e.replace(/\/\d+(?=\/|$)/g,`/*`))}var Sa=class extends Error{code;detail;constructor(e,t){super(t?`${e}: ${t}`:e),this.code=e,this.detail=t,this.name=`TranscriptExportError`}};const Ca=new Set(ya),wa=/^[0-9a-fA-F]{64}$/,Ta=/^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}/;function F(e){return typeof e==`object`&&!!e&&!Array.isArray(e)}function Ea(e){return typeof e==`string`&&wa.test(e)}function Da(e){return Ta.test(e)&&Number.isFinite(Date.parse(e))}function Oa(e,t){let n=t.map(e=>`"${e}"`),r=n[n.length-1];return n.length===2?`${e} must be ${n[0]} or ${r}`:`${e} must be ${n.slice(0,-1).join(`, `)}, or ${r}`}function ka(e,t,n){return typeof e!=`string`||!t.includes(e)?{ok:!1,error:Oa(n,t)}:{ok:!0}}function Aa(e,t,n){for(let r=0;r<e.length;r++){let i=t(e[r],`${n}[${r}]`);if(!i.ok)return i}return{ok:!0}}function ja(e,t){let n=e.type;if(n===`text`){if(typeof e.text!=`string`)return{ok:!1,error:`${t}.text must be a string`}}else if(n===`tool-call`){if(typeof e.id!=`string`||e.id===``)return{ok:!1,error:`${t}.id must be a non-empty string`};if(typeof e.name!=`string`||e.name===``)return{ok:!1,error:`${t}.name must be a non-empty string`};if(!(`input`in e))return{ok:!1,error:`${t}.input must be present`}}else if(typeof e.attachmentId!=`string`||e.attachmentId===``)return{ok:!1,error:`${t}.attachmentId must be a non-empty string`};return{ok:!0}}function Ma(e,t){if(!F(e))return{ok:!1,error:`${t} must be a non-null object`};let n=ka(e.type,[`text`,`tool-call`,`attachment-ref`],`${t}.type`);return n.ok?ja(e,t):n}function Na(e,t){for(let n of[`input`,`output`,`cacheRead`,`cacheWrite`,`totalTokens`]){let r=e[n];if(typeof r!=`number`)return{ok:!1,error:`${t}.${n} must be a number`};if(!Number.isInteger(r)||r<0)return{ok:!1,error:`${t}.${n} must be a non-negative integer`}}return{ok:!0}}function Pa(e,t){for(let n of[`input`,`output`,`cacheRead`,`cacheWrite`,`total`]){let r=e[n];if(typeof r!=`number`)return{ok:!1,error:`${t}.${n} must be a number`};if(!Number.isFinite(r)||r<0)return{ok:!1,error:`${t}.${n} must be a finite non-negative number`}}return{ok:!0}}function Fa(e,t){let n=Na(e,t);if(!n.ok)return n;let r=e.cost;return F(r)?Pa(r,`${t}.cost`):{ok:!1,error:`${t}.cost must be a non-null object`}}function Ia(e,t){if(typeof e.id!=`string`)return{ok:!1,error:`${t}.id must be a string`};if(typeof e.sequence!=`number`)return{ok:!1,error:`${t}.sequence must be a number`};let n=e.sequence;return!Number.isInteger(n)||n<1?{ok:!1,error:`${t}.sequence must be a positive integer`}:typeof e.timestamp==`string`?Da(e.timestamp)?{ok:!0}:{ok:!1,error:`${t}.timestamp must be a valid ISO 8601 date-time string`}:{ok:!1,error:`${t}.timestamp must be a string`}}function La(e,t){let n=e.toolCallId;return typeof n!=`string`||n===``?{ok:!1,error:`${t}.toolCallId must be a non-empty string for tool-result messages`}:{ok:!0}}function Ra(e,t){let n=e.usage;return n===void 0?{ok:!0}:F(n)?Fa(n,`${t}.usage`):{ok:!1,error:`${t}.usage must be a non-null object`}}function za(e,t){if(!F(e))return{ok:!1,error:`${t} must be a non-null object`};let n=ka(e.role,[`user`,`assistant`,`tool-result`],`${t}.role`);if(!n.ok)return n;if(e.role===`tool-result`){let n=La(e,t);if(!n.ok)return n}let r=Ia(e,t);if(!r.ok)return r;let i=e.content;if(!Array.isArray(i))return{ok:!1,error:`${t}.content must be an array`};let a=Aa(i,Ma,`${t}.content`);return a.ok?Ra(e,t):a}function Ba(e,t){if(!F(e))return{ok:!1,error:`${t} must be a non-null object`};if(typeof e.id!=`string`)return{ok:!1,error:`${t}.id must be a string`};if(typeof e.name!=`string`)return{ok:!1,error:`${t}.name must be a string`};let n=ka(e.kind,[`cone`,`scoop`],`${t}.kind`);if(!n.ok)return n;let r=e.messages;return Array.isArray(r)?Aa(r,za,`${t}.messages`):{ok:!1,error:`${t}.messages must be an array`}}function Va(e,t){for(let n of[`id`,`path`,`originalName`,`mimeType`,`sha256`,`sourceConversationId`,`sourceMessageId`])if(typeof e[n]!=`string`)return{ok:!1,error:`${t}.${n} must be a string`};return{ok:!0}}function Ha(e,t){let n=e.path,r=e.sha256,i=e.byteLength;return n===``?{ok:!1,error:`${t}.path must be non-empty when present`}:Ea(r)?!Number.isInteger(i)||i<0?{ok:!1,error:`${t}.byteLength must be a non-negative integer when present`}:e.missingReason===void 0?{ok:!0}:{ok:!1,error:`${t}.missingReason must be absent when present is true`}:{ok:!1,error:`${t}.sha256 must be a 64-char hex string when present`}}const Ua=[`attachment-file-missing`,`attachment-association-unavailable`];function Wa(e,t){let n=e.path,r=e.sha256,i=e.byteLength;return n===``?r===``?i===0?ka(e.missingReason,Ua,`${t}.missingReason`):{ok:!1,error:`${t}.byteLength must be zero when not present`}:{ok:!1,error:`${t}.sha256 must be empty when not present`}:{ok:!1,error:`${t}.path must be empty when not present`}}function Ga(e,t){return e.present?Ha(e,t):Wa(e,t)}function Ka(e,t){if(!F(e))return{ok:!1,error:`${t} must be a non-null object`};let n=Va(e,t);if(!n.ok)return n;if(typeof e.byteLength!=`number`)return{ok:!1,error:`${t}.byteLength must be a number`};if(typeof e.present!=`boolean`)return{ok:!1,error:`${t}.present must be a boolean`};let r=ka(e.handling,[`text-redacted`,`binary-unchanged`],`${t}.handling`);return r.ok?Ga(e,t):r}function qa(e,t){let n=ka(e.kind,[`json`,`attachment`],`${t}.kind`);if(!n.ok)return n;if(e.kind===`json`){if(typeof e.pointer!=`string`)return{ok:!1,error:`${t}.pointer must be a string`};let n=e.pointer;if(n!==``&&!n.startsWith(`/`))return{ok:!1,error:`${t}.pointer must be a valid RFC 6901 JSON pointer`}}else if(typeof e.attachmentId!=`string`||e.attachmentId===``)return{ok:!1,error:`${t}.attachmentId must be a non-empty string`};return{ok:!0}}function Ja(e,t){if(!F(e))return{ok:!1,error:`${t} must be a non-null object`};if(typeof e.id!=`string`)return{ok:!1,error:`${t}.id must be a string`};if(typeof e.category!=`string`)return{ok:!1,error:`${t}.category must be a string`};let n=ka(e.detector,[`known-secret`,`credential-pattern`,`pre-obfuscated`],`${t}.detector`);if(!n.ok)return n;let r=e.target;return F(r)?qa(r,`${t}.target`):{ok:!1,error:`${t}.target must be a non-null object`}}function Ya(e,t){return F(e)?typeof e.sourceConversationId==`string`?typeof e.targetConversationId==`string`?{ok:!0}:{ok:!1,error:`${t}.targetConversationId must be a string`}:{ok:!1,error:`${t}.sourceConversationId must be a string`}:{ok:!1,error:`${t} must be a non-null object`}}function Xa(e,t){return typeof e!=`string`||!Ca.has(e)?{ok:!1,error:`${t} is not a valid completeness reason`}:{ok:!0}}function Za(e){if(!F(e))return{ok:!1,error:`export must be a non-null object`};if(typeof e.id!=`string`)return{ok:!1,error:`export.id must be a string`};if(typeof e.generatedAt!=`string`)return{ok:!1,error:`export.generatedAt must be a string`};if(e.format!==`slicc-transcript`)return{ok:!1,error:`export.format must equal "slicc-transcript"`};let t=e.producer;return F(t)?t.application===`slicc`?typeof t.version==`string`?{ok:!0}:{ok:!1,error:`export.producer.version must be a string`}:{ok:!1,error:`export.producer.application must equal "slicc"`}:{ok:!1,error:`export.producer must be a non-null object`}}function Qa(e){if(!F(e))return{ok:!1,error:`session.completeness must be a non-null object`};let t=ka(e.status,[`complete`,`partial`],`session.completeness.status`);return t.ok?Array.isArray(e.missing)?Aa(e.missing,Xa,`session.completeness.missing`):{ok:!1,error:`session.completeness.missing must be an array`}:t}function $a(e){if(!F(e))return{ok:!1,error:`session must be a non-null object`};if(typeof e.id!=`string`)return{ok:!1,error:`session.id must be a string`};if(typeof e.title!=`string`)return{ok:!1,error:`session.title must be a string`};let t=ka(e.state,[`active`,`frozen`],`session.state`);return t.ok?Qa(e.completeness):t}function eo(e){if(!F(e))return{ok:!1,error:`privacy must be a non-null object`};if(e.reasoningExcluded!==!0)return{ok:!1,error:`privacy.reasoningExcluded must be true`};let t=e.excludedReasoningBlocks;if(typeof t!=`number`)return{ok:!1,error:`privacy.excludedReasoningBlocks must be a number`};if(!Number.isInteger(t)||t<0)return{ok:!1,error:`privacy.excludedReasoningBlocks must be a non-negative integer`};if(e.binaryAttachments!==`included-unchanged`)return{ok:!1,error:`privacy.binaryAttachments must equal "included-unchanged"`};if(!F(e.redactionCounts))return{ok:!1,error:`privacy.redactionCounts must be a non-null object`};let n=e.redactions;return Array.isArray(n)?Aa(n,Ja,`privacy.redactions`):{ok:!1,error:`privacy.redactions must be an array`}}function to(e){let t=e.conversations;if(!Array.isArray(t))return{ok:!1,error:`conversations must be an array`};let n=Aa(t,Ba,`conversations`);if(!n.ok)return n;let r=e.delegations;if(!Array.isArray(r))return{ok:!1,error:`delegations must be an array`};let i=Aa(r,Ya,`delegations`);if(!i.ok)return i;let a=e.attachments;return Array.isArray(a)?Aa(a,Ka,`attachments`):{ok:!1,error:`attachments must be an array`}}function no(e){let t=new Set,n=new Set;for(let r of e){if(!F(r)||typeof r.id!=`string`)continue;if(t.has(r.id))return{ok:!1,error:`duplicate conversation id "${r.id}"`};t.add(r.id);let e=r.messages;if(Array.isArray(e)){for(let t of e)if(!(!F(t)||typeof t.id!=`string`)){if(n.has(t.id))return{ok:!1,error:`duplicate message id "${t.id}"`};n.add(t.id)}}}return{ok:!0}}function ro(e){for(let t of e){if(!F(t))continue;let e=t.messages;if(!Array.isArray(e))continue;let n=typeof t.id==`string`?t.id:`?`,r=0;for(let t of e){if(!F(t)||typeof t.sequence!=`number`)continue;let e=t.sequence;if(e<=r)return{ok:!1,error:`sequences in conversation "${n}" must be strictly increasing`};r=e}}return{ok:!0}}function io(e){let t=[];for(let n of e){if(!F(n))continue;let e=n.content;if(Array.isArray(e))for(let n of e)F(n)&&n.type===`tool-call`&&typeof n.id==`string`&&t.push(n.id)}return t}function ao(e){let t=new Set;for(let n of e){if(!F(n))continue;let e=n.messages;if(Array.isArray(e))for(let n of io(e))t.add(n)}return t}function oo(e,t){for(let n of e){if(!F(n))continue;let e=n.messages;if(Array.isArray(e))for(let n of e){if(!F(n)||n.role!==`tool-result`)continue;let e=n.toolCallId;if(typeof e==`string`&&e!==``&&!t.has(e))return{ok:!1,error:`tool-result message references unknown toolCallId "${e}"`}}}return{ok:!0}}function so(e){return oo(e,ao(e))}function co(e,t){for(let n of e){if(!F(n)||n.type!==`attachment-ref`)continue;let e=n.attachmentId;if(typeof e!=`string`||!t.has(e))return{ok:!1,error:`attachment-ref references unknown attachmentId "${e}"`}}return{ok:!0}}function lo(e,t){for(let n of e){if(!F(n))continue;let e=n.messages;if(Array.isArray(e))for(let n of e){if(!F(n))continue;let e=n.content;if(!Array.isArray(e))continue;let r=co(e,t);if(!r.ok)return r}}return{ok:!0}}function uo(e,t){let n=new Set;for(let e of t)F(e)&&typeof e.id==`string`&&n.add(e.id);return lo(e,n)}function fo(e){let t=new Map;for(let n of e){if(!F(n)||typeof n.id!=`string`)continue;let e=new Set,r=n.messages;if(Array.isArray(r))for(let t of r)F(t)&&typeof t.id==`string`&&e.add(t.id);t.set(n.id,e)}return t}function po(e,t){let n=fo(t);for(let t=0;t<e.length;t++){let r=e[t];if(!F(r))continue;let i=r.sourceConversationId,a=r.sourceMessageId;if(typeof i!=`string`||typeof a!=`string`)continue;let o=n.get(i);if(!o)return{ok:!1,error:`attachments[${t}].sourceConversationId "${i}" does not exist`};if(!o.has(a))return{ok:!1,error:`attachments[${t}].sourceMessageId "${a}" does not exist in conversation "${i}"`}}return{ok:!0}}function mo(e){let t=new Map;for(let n of e){if(!F(n)||typeof n.id!=`string`)continue;let e=Array.isArray(n.messages)?n.messages:[];t.set(n.id,new Set(io(e)))}return t}function ho(e,t,n){for(let r=0;r<e.length;r++){let i=e[r];if(!F(i))continue;let a=i.sourceConversationId,o=i.targetConversationId;if(typeof a!=`string`||!t.has(a))return{ok:!1,error:`delegations[${r}].sourceConversationId "${a}" does not exist`};if(typeof o!=`string`||!t.has(o))return{ok:!1,error:`delegations[${r}].targetConversationId "${o}" does not exist`};let s=i.toolCallId;if(typeof s==`string`&&s!==``&&!n.get(a)?.has(s))return{ok:!1,error:`delegations[${r}].toolCallId "${s}" does not exist in source conversation "${a}"`}}return{ok:!0}}function go(e,t){let n=new Set;for(let e of t)F(e)&&typeof e.id==`string`&&n.add(e.id);return ho(e,n,mo(t))}function _o(e,t,n){if(e.kind!==`attachment`)return{ok:!0};let r=e.attachmentId;return typeof r!=`string`||!t.has(r)?{ok:!1,error:`${n}.attachmentId "${r}" does not reference a known attachment`}:{ok:!0}}function vo(e,t){let n=new Set;for(let e of t)F(e)&&typeof e.id==`string`&&n.add(e.id);for(let t=0;t<e.length;t++){let r=e[t];if(!F(r))continue;let i=r.target;if(!F(i))continue;let a=_o(i,n,`privacy.redactions[${t}].target`);if(!a.ok)return a}return{ok:!0}}function yo(e){let t=e.conversations,n=e.attachments,r=e.delegations,i=e.privacy,a=Array.isArray(i?.redactions)?i.redactions:[],o=no(t);if(!o.ok)return o;let s=ro(t);if(!s.ok)return s;let c=so(t);if(!c.ok)return c;let l=uo(t,n);if(!l.ok)return l;let u=po(n,t);if(!u.ok)return u;let d=go(r,t);return d.ok?vo(a,n):d}function bo(e){let t=to(e);return t.ok?yo(e):t}function xo(e){if(!F(e))return{ok:!1,error:`document must be a non-null object`};if(e.schemaVersion!==1)return{ok:!1,error:`schemaVersion must equal 1`};let t=Za(e.export);if(!t.ok)return t;let n=$a(e.session);if(!n.ok)return n;let r=eo(e.privacy);return r.ok?bo(e):r}async function So(e,t,n){let r=await n({method:`GET`,path:`/${e}/sites/${t}/config.json`,origin:ze});if(r.status===401||r.status===403)throw Error(`not authorized to read the site config for ${e}/${t} — log in via Settings → Providers → Adobe, or pass --backend to skip the probe`);if(r.status===404)throw Error(`no site config for ${e}/${t} — check the org and site names`);if(r.status>=400)throw Error(`site config probe failed for ${e}/${t}: ${r.status}`);let i;try{i=await r.json()}catch(n){throw Error(`site config for ${e}/${t} is not JSON: ${n instanceof Error?n.message:String(n)}`)}let a=i.content?.source?.url;return{backend:Co(a),sourceUrl:a}}function Co(e){if(!e)return`da`;let t;try{t=new URL(e).host}catch{return`da`}return t===`api.aem.live`?`aem`:`da`}const wo=`slicc-sprinkle-routes`;function To(){try{let e=localStorage.getItem(wo);return e?JSON.parse(e):{}}catch{return{}}}function Eo(e){try{localStorage.setItem(wo,JSON.stringify(e))}catch{}}function Do(e){return To()[e]}function Oo(e,t){let n=To();n[e]=t,Eo(n)}function ko(e){let t=To();delete t[e],Eo(t)}function Ao(){return To()}function jo(e,t,n){return ut(t,n,`${e} adapter does not implement ${t}.${n}`)}function Mo(e,t,n,r){let i=n.filter(e=>typeof r?.[e]==`function`),a=n.map(n=>{let i=r?.[n];return[n,typeof i==`function`?i:()=>Promise.resolve(jo(e,t,n))]});return{...Object.fromEntries(a),allowlist:i,supports:e=>i.includes(e)}}function No(e){let{adapter:t,pageGestures:n}=e,r=n??{};return{adapter:t,browser:Mo(t,`browser`,pt,e.browser),network:Mo(t,`network`,lt,e.network),secrets:Mo(t,`secrets`,mt,e.secrets),devices:Mo(t,`devices`,ht,{usbRequest:r.usbRequest,serialRequest:r.serialRequest,hidRequest:r.hidRequest,...e.devices}),mounts:Mo(t,`mounts`,dt,{pickDirectory:r.pickDirectory,...e.mounts}),approvals:Mo(t,`approvals`,gt,e.approvals)}}function Po(e={}){return No({adapter:`connect`,pageGestures:e.pageGestures})}function Fo(e){let t=_t(()=>import(`./extension-ops-DTRUyGkx.js`).then(t=>t.createExtensionOps(e)));return No({adapter:e.adapter,pageGestures:e.pageGestures,network:{crossOriginFetch:e=>T(`network`,`crossOriginFetch`,async()=>(await t()).crossOriginFetch(e))},secrets:{listMaskedEnv:()=>T(`secrets`,`listMaskedEnv`,async()=>(await t()).secrets.listMaskedEnv()),getMasked:e=>T(`secrets`,`getMasked`,async()=>(await t()).secrets.getMasked(e)),set:e=>T(`secrets`,`set`,async()=>(await t()).secrets.set(e)),delete:e=>T(`secrets`,`delete`,async()=>(await t()).secrets.delete(e))},mounts:{signRequest:e=>T(`mounts`,`signRequest`,async()=>(await t()).signRequest(e))},approvals:{request:e=>T(`approvals`,`request`,async()=>(await t()).requestApproval(e))}})}function Io(e={}){let t=_t(()=>import(`./rest-ops-CPEMTyP-.js`).then(t=>t.createRestOps(e)),e.controlTimeoutMs??1e4);return No({adapter:`node-rest`,pageGestures:e.pageGestures,network:{localNodeServer:()=>Promise.resolve({ok:!0,value:{available:!0}}),crossOriginFetch:e=>T(`network`,`crossOriginFetch`,async()=>(await t()).crossOriginFetch(e))},secrets:{listMaskedEnv:()=>T(`secrets`,`listMaskedEnv`,async()=>(await t()).secrets.listMaskedEnv()),getMasked:e=>T(`secrets`,`getMasked`,async()=>(await t()).secrets.getMasked(e)),set:e=>T(`secrets`,`set`,async()=>(await t()).secrets.set(e)),delete:e=>T(`secrets`,`delete`,async()=>(await t()).secrets.delete(e))},mounts:{signRequest:e=>T(`mounts`,`signRequest`,async()=>(await t()).signRequest(e))},approvals:{request:e=>T(`approvals`,`request`,async()=>(await t()).requestApproval(e))}})}function Lo(e,t={}){let{pageGestures:n}=t;switch(e){case`node-rest`:return Io({pageGestures:n});case`extension-direct`:case`extension-delegate`:return Fo({adapter:e,pageGestures:n});case`connect`:return Po({pageGestures:n})}}const Ro=e(`quick-llm`);async function zo(e){let t=d();if(!t)return Ro.debug(`No API key for active provider — skipping`),null;let n=u(),r=l(),i;if(i=e.modelId?Uo(n,e.modelId)??Uo(n,r):Bo(n,r),!i)return Ro.debug(`No model available for provider`,{providerId:n}),null;let a={role:`user`,content:e.prompt,timestamp:Date.now()},o={};i.provider===`adobe`&&(o[`X-Session-Id`]=Wo());try{let n=(await he(i,{systemPrompt:e.system,messages:[a]},{apiKey:t,maxTokens:e.maxTokens??60,temperature:e.temperature??.3,signal:e.signal,headers:Object.keys(o).length>0?o:void 0})).content.filter(e=>e.type===`text`).map(e=>e.text).join(``).trim();return n.length>0?n:null}catch(e){return Ro.debug(`Quick label call failed`,{error:e instanceof Error?e.message:String(e)}),null}}function Bo(e,t){let n=f(e);if(n.length===0)return;let r=n.find(e=>e.id===t)??n[0],i=Ho(r.id),a=n.filter(e=>Vo(e,r,i));return a.length===0?r:(a.sort((e,t)=>(e.cost?.input??0)-(t.cost?.input??0)),a[0])}function Vo(e,t,n){if(e.id===t.id)return!1;let r=t.cost?.input??1/0;if((e.cost?.input??1/0)>=r)return!1;let i=e.id.toLowerCase();switch(n){case`claude`:return i.includes(`haiku`);case`gpt`:return/(^|-)mini(-|$)|(^|-)nano(-|$)/.test(i);case`gemini`:return i.includes(`flash`);case`grok`:return/(^|-)mini(-|$)|(^|-)fast(-|$)/.test(i);case`unknown`:return!0}}function Ho(e){let t=e.toLowerCase();return t.includes(`claude`)?`claude`:t.includes(`gemini`)?`gemini`:t.includes(`grok`)?`grok`:/^(gpt|o\d)/.test(t)?`gpt`:`unknown`}function Uo(e,t){return f(e).find(e=>e.id===t)}function Wo(){return yt(`ui-quick-llm`)}const Go=e(`sudo-suggest`),Ko=[`You generalize a single shell command into a minimal glob pattern for an`,`allow-list rule. Output ONLY the pattern on one line — no prose, no quotes,`,`no backticks. Keep the leading command/sub-command verbatim and replace only`,`the volatile tail (args, paths, refs) with a single trailing "*".`,`Examples:`,` git push origin main -> git push*`,` rm -rf build/cache -> rm -rf*`,` npm install left-pad -> npm install*`].join(`
2
2
  `),qo=[`You generalize a single filesystem path into a minimal glob pattern for an`,`allow-list rule. Output ONLY the pattern on one line — no prose, no quotes,`,`no backticks. Keep the meaningful directory prefix and replace the volatile`,`leaf (and below) with "**". Examples:`,` /workspace/.git/config -> /workspace/.git/**`,` /shared/secrets/openai.key -> /shared/secrets/**`,` /workspace/src/app/main.ts -> /workspace/src/**`].join(`
3
3
  `);async function Jo(e,t){if(e.suggestedPattern&&e.suggestedPattern.trim().length>0)return e.suggestedPattern.trim();let n=e.detail.trim(),r=e.kind===`command`?Ko:qo,i=null;try{i=await zo({prompt:n,system:r,maxTokens:40,temperature:0,signal:t})}catch(e){Go.debug(`suggestPattern: quickLabel threw`,{error:e instanceof Error?e.message:String(e)}),i=null}return Yo(i)||n}function Yo(e){if(!e)return null;let t=(e.split(`
4
4
  `,1)[0]?.trim()??``).replace(/^`+/,``).replace(/`+$/,``).replace(/^["']/,``).replace(/["']$/,``).trim();return t.length===0?null:t}const Xo=e(`sudo:capability-gesture`);function Zo(e,t={}){let n=t.suggest??Jo;return{async requestApproval(t,r){let i=r?.signal,a;if(t.suggestedPattern)a=t.suggestedPattern;else try{a=await n(t,i)}catch{a=t.detail}if(i?.aborted)return Xo.warn(`sudo approval aborted before prompting — denying`,{detail:t.detail}),{decision:`deny`};if(!e)return Xo.warn(`no CapabilityBroker injected for the sudo gesture hop — denying (composition bug, never a guessed transport)`,{detail:t.detail}),{decision:`deny`};let o=await e.approvals.request({kind:t.kind,detail:t.detail,suggestedPattern:a,...t.requester?{requester:t.requester}:{},...t.reason?{reason:t.reason}:{},...t.approver?{approver:t.approver}:{},...i?{signal:i}:{}});return o.ok?ft(o.value,a):(Xo.warn(`capability broker approvals.request failed — denying`,{message:o.message}),{decision:`deny`})}}}const Qo=e(`sudo:tray-first`);function $o(e,t={}){let n=t.suggest??Jo,r=t.timeoutMs??6e5,i=t.getClient??(async()=>{let{getPanelRpcClient:e}=await import(`./panel-rpc-DW7W4w6_.js`).then(e=>e.a);return e()});return{async requestApproval(t,a){if(a?.signal?.aborted)return{decision:`deny`};let o=t.suggestedPattern;if(!o)try{o=await n(t,a?.signal)}catch{o=t.detail}let s={...t,suggestedPattern:o},c=null;try{c=await i()}catch(e){Qo.debug?.(`panel-RPC client lookup threw — using native broker`,{error:e instanceof Error?e.message:String(e)})}if(c)try{let e=await c.call(`sudo-request`,{request:s,mode:`tray-first`},{timeoutMs:r});if(e?.handled!==!1)return es(e?.decision,o)}catch(e){Qo.warn(`tray-first sudo probe failed — using native broker`,{error:e instanceof Error?e.message:String(e)})}return e.requestApproval(s,a)}}}function es(e,t){if(!e||typeof e!=`object`)return{decision:`deny`};let n=e,r=n.attestation===`biometric`||n.attestation===`passcode`||n.attestation===`none`?n.attestation:void 0;return n.decision===`allow`?{decision:`allow`,...r?{attestation:r}:{}}:n.decision===`always`?{decision:`always`,pattern:typeof n.pattern==`string`&&n.pattern.trim().length>0?n.pattern.trim():t,...r?{attestation:r}:{}}:{decision:`deny`}}function ts(e,t){return{requestApproval(n){return t.enqueueSudoRequest(e,n)}}}function ns(){return`lick-${Date.now()}-${Math.random().toString(36).slice(2,10)}`}var rs=class{pending=new Map;timeoutMs;newId;setTimer;clearTimer;onAutoSettle;constructor(e={}){this.timeoutMs=e.timeoutMs??3e5,this.newId=e.newId??ns,this.setTimer=e.setTimer??((e,t)=>setTimeout(e,t)),this.clearTimer=e.clearTimer??(e=>clearTimeout(e)),this.onAutoSettle=e.onAutoSettle??(()=>{})}notifyAutoSettle(e,t,n){try{this.onAutoSettle(e,t,n)}catch{}}register(e,t,n){let r=this.newId();return{id:r,pending:new Promise(i=>{let a=null;Number.isFinite(this.timeoutMs)&&this.timeoutMs>0&&(a=this.setTimer(()=>{let e=this.pending.get(r);e&&(this.pending.delete(r),e.resolve(ot(`cone-timeout`)),this.notifyAutoSettle(r,`expired`,e.scoopJid))},this.timeoutMs)),this.pending.set(r,{scoopJid:e,request:t,resolve:i,timerHandle:a,approverJid:n})})}}resolve(e,t){let n=this.pending.get(e);return n?(this.pending.delete(e),n.timerHandle!=null&&this.clearTimer(n.timerHandle),n.resolve(t),!0):!1}failScoop(e){let t=0;for(let[n,r]of this.pending)r.scoopJid===e&&(this.pending.delete(n),r.timerHandle!=null&&this.clearTimer(r.timerHandle),r.resolve({decision:`deny`}),this.notifyAutoSettle(n,`scoop-dropped`,r.scoopJid),t++);return t}failAll(){let e=0;for(let[t,n]of this.pending)n.timerHandle!=null&&this.clearTimer(n.timerHandle),n.resolve({decision:`deny`}),this.notifyAutoSettle(t,`shutdown`,n.scoopJid),e++;return this.pending.clear(),e}get(e){let t=this.pending.get(e);return t?{id:e,scoopJid:t.scoopJid,request:t.request,...t.approverJid?{approverJid:t.approverJid}:{}}:null}list(){let e=[];for(let[t,n]of this.pending)e.push({id:t,scoopJid:n.scoopJid,request:n.request,...n.approverJid?{approverJid:n.approverJid}:{}});return e}size(){return this.pending.size}};e(`sudo-panel`),typeof globalThis.confirm==`function`&&globalThis.confirm.bind(globalThis),typeof globalThis.prompt==`function`&&globalThis.prompt.bind(globalThis),e(`sudo:page`),e(`sudo`);function is(e){return st(as(e))}function as(e){let t=Zo(e);return e?.adapter===`extension-direct`||e?.adapter===`extension-delegate`?t:$o(t)}let os=null;function ss(e){return os=e,()=>{os===e&&(os=null)}}function cs(){if(!os)throw new Sa(`session-not-found`);return os}const ls=`focus`,us={type:`leaf`,surfaceId:`chat`};function ds(e,t={},n={}){return{zones:{top:null,left:null,middle:null,right:null,bottom:null,...e},rowFr:{top:1,center:1,bottom:1,...n},colFr:{left:1,middle:1,right:1,...t}}}const fs={focus:{name:`focus`,tree:ds({left:us},{left:3,middle:1})}};function ps(e){return fs[e]??null}const ms=`progress`;function hs(e){return/^[A-Za-z_][A-Za-z0-9_]*$/.test(e)}async function gs(){try{let e=await wt();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 Tt(e.idbKey);if(!t)throw Error(`mount: no directory handle found in storage`);return await Ct(t),t}throw Error(`mount: unexpected popup result`)}catch(e){throw Error(`mount: ${e instanceof Error?e.message:String(e)}`)}}async function _s(){if(typeof window>`u`||!(`showDirectoryPicker`in window))throw Error(`mount: local picker requires a user gesture in the panel (unavailable in this runtime). Ask the agent to mount it instead.`);try{return await window.showDirectoryPicker({mode:`readwrite`})}catch(e){throw e instanceof Error&&e.name===`AbortError`?Error(`mount: cancelled`):Error(`mount: ${e instanceof Error?e.message:String(e)}`)}}function vs(e){let t={positional:[],noProbe:!1,clearCache:!1,bodies:!1,json:!1};for(let n=0;n<e.length;n++){let r=e[n];if(r===`--source`)t.source=e[++n];else if(r===`--profile`)t.profile=e[++n];else if(r===`--backend`){let r=e[++n];r===`da`||r===`aem`?t.backend=r:t.backendError=r}else r===`--no-probe`?t.noProbe=!0:r===`--max-body-mb`?t.maxBodyMb=Number(e[++n]):r===`--clear-cache`?t.clearCache=!0:r===`--bodies`?t.bodies=!0:r===`--json`?t.json=!0:t.positional.push(r)}return t}function ys(e){let t=e.match(/^(da|aem):\/\/([^/]+)\/([^/]+)(?:\/(.*))?$/);return t?{scheme:t[1],org:t[2],name:t[3],path:(t[4]??``).replace(/^\/+/,``).replace(/\/+$/,``)}:null}const bs=new Set([`--source`,`--profile`,`--backend`,`--max-body-mb`]);function xs(e){for(let t=0;t<e.length;t++){let n=e[t];if(n===`--`)return!1;if(n===`--help`||n===`-h`)return!0;bs.has(n)&&t++}return!1}function Ss(e){return`aem://${e.org}/${e.name}${e.path?`/${e.path}`:``}`}var Cs=class{options;signedFetchS3;signedFetchDa;constructor(e){this.options=e,this.signedFetchS3=e.signedFetchS3,this.signedFetchDa=e.signedFetchDa}async execute(e,t,n){let r=e[0];if(r===`--help`||r===`-h`)return this.help();if(r===`unmount`||r===`-u`)return this.handleUnmount(e.slice(1),t,`mount unmount`);if(r===`list`||r===`-l`||r===`--list`)return this.handleList();if(r===`refresh`)return this.handleRefresh(e.slice(1),t,n);if(r===`info`)return this.handleInfo(e.slice(1),t);let i=vs(e);if(i.positional.length===0)return this.usageError(`mount: mount point required`);let a=this.resolvePath(i.positional[0],t);return i.backendError===void 0?i.source?i.source.startsWith(`s3://`)?this.mountS3(a,i):i.source.startsWith(`da://`)||i.source.startsWith(`aem://`)?this.mountAdobe(a,i):this.usageError(`mount: invalid source '${i.source}' — expected s3://..., da://... or aem://...`):this.mountLocal(a,n):this.usageError(`mount: invalid --backend '${i.backendError}' — expected 'da' or 'aem'`)}async executeUmount(e,t){return this.handleUnmount(e,t,`umount`)}async mountLocal(e,t){try{if((this.options.isScoop??(()=>!1))())throw Error(`mount: cannot mount local directories from a scoop (no UI). Ask the cone.`);let n=xe();if(!n){let n=await ws(e);if(n)return await this.options.fs.mount(e,n,{env:t}),{stdout:`Mounted '${n.describe().displayName}' → ${e}\nIndexing in background for fast file discovery.\nNote: External changes are not auto-detected — use 'mount refresh ${e}' after modifying files outside the browser.\n`,stderr:``,exitCode:0}}let r;if(n){let t=this.options.acquireLocalMountViaToolUI;if(!t)throw Error(`mount: tool UI not available in this runtime`);r=await t(n,e)}else r=_()?await gs():await _s();let i=Fe.fromHandle(r,{mountId:He()});return await this.options.fs.mount(e,i,{env:t}),{stdout:`Mounted '${i.describe().displayName}' → ${e}\nIndexing in background for fast file discovery.\nNote: External changes are not auto-detected — use 'mount refresh ${e}' after modifying files outside the browser.\n`,stderr:``,exitCode:0}}catch(e){return{stdout:``,stderr:`mount: ${e instanceof Error?e.message:String(e)}\n`,exitCode:1}}}async mountS3(e,t){if(!t.source)return this.usageError(`mount: --source required`);let n=t.profile??`default`,r=He(),i=new Ue({mountId:r,ttlMs:3e4}),a=new Le({source:t.source,profile:n,cache:i,maxBodyBytes:t.maxBodyMb?t.maxBodyMb*1024*1024:void 0,mountId:r,signedFetch:this.signedFetchS3??Re(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??Ve(),i=ys(t.source);if(!i)return this.usageError(`mount: invalid source '${t.source}' — expected da://org/repo or aem://org/site`);let a=i.scheme===`aem`?`aem`:`da`,o=``;if(t.backend)a=t.backend;else if(i.scheme===`da`)try{a=(await So(i.org,i.name,r)).backend,a===`aem`&&(o=`mount: ${i.org}/${i.name} is on Helix 6 — its content lives in the Source Bus at https://api.aem.live/${i.org}/sites/${i.name}/source, not admin.da.live. Mounting through aem://${i.org}/${i.name}. Pass --backend da to force the old endpoint.\n`)}catch(e){return{stdout:``,stderr:`mount: could not determine the content source for ${t.source} — ${e instanceof Error?e.message:String(e)}. Pass --backend da or --backend aem to skip this probe.\n`,exitCode:1}}let s=He(),c=new Ue({mountId:s,ttlMs:3e4}),l={source:a===`aem`?Ss(i):`da://${i.org}/${i.name}${i.path?`/${i.path}`:``}`,profile:n,cache:c,maxBodyBytes:t.maxBodyMb?t.maxBodyMb*1024*1024:void 0,mountId:s,signedFetch:r},u=a===`aem`?new Be(l):new Ie(l);if(!t.noProbe)try{await u.readDir(`/`)}catch(e){return await u.close(),{stdout:``,stderr:o+`mount: probe failed for ${l.source} — ${e instanceof Error?e.message:String(e)}\n`,exitCode:1}}return await this.options.fs.mount(e,u),{stdout:`Mounted '${u.describe().displayName}' → ${e} (profile: ${n})\n`,stderr:o,exitCode:0}}async handleUnmount(e,t,n){if(xs(e))return n===`umount`?this.umountHelp():this.help();let r=vs(e);if(r.positional.length===0)return{stdout:``,stderr:`${n}: path required\n`,exitCode:1};let i=this.resolvePath(r.positional[0],t);try{let e,t;if(r.clearCache){let{getAllMountEntries:n}=await import(`./mount-table-store-DrF_Ifaz.js`).then(e=>e.r),r=(await n()).find(e=>e.targetPath===i),a=r?.descriptor.kind;r&&(a===`s3`||a===`da`||a===`aem`)&&(e=r.descriptor.mountId,t=r.descriptor.kind)}await this.options.fs.unmount(i);let n=``;if(r.clearCache&&e&&t){let{RemoteMountCache:t}=await import(`./remote-cache-BE5T1-53.js`).then(e=>e.n);await new t({mountId:e,ttlMs:3e4}).clearMount(),n=` (cache cleared)`}else r.clearCache&&(n=` (no remote cache to clear)`);return{stdout:`Unmounted ${i}${n}\n`,stderr:``,exitCode:0}}catch(e){return{stdout:``,stderr:`${n}: ${e instanceof Error?e.message:String(e)}\n`,exitCode:1}}}async handleList(){try{let e=this.options.fs.listMounts();if(e.length===0)return{stdout:`No active mounts
@@ -279,7 +279,7 @@ Examples:
279
279
  skill list
280
280
  skill info bluebubbles
281
281
  skill read bluebubbles
282
- `,stderr:``,exitCode:0};let r=t[0],i=await import(`./kernel-worker-DJ8FZwqE.js`).then(e=>e.n);try{switch(r){case`list`:return $m(t,e,i,n.env.get(`PATH`));case`info`:{let n=t[1];if(!n)return{stdout:``,stderr:`skill: info requires a skill name
282
+ `,stderr:``,exitCode:0};let r=t[0],i=await import(`./kernel-worker-B69_4v-D.js`).then(e=>e.n);try{switch(r){case`list`:return $m(t,e,i,n.env.get(`PATH`));case`info`:{let n=t[1];if(!n)return{stdout:``,stderr:`skill: info requires a skill name
283
283
  `,exitCode:1};let r=await i.getSkillInfo(e,n);return r?{stdout:Zm(r),stderr:``,exitCode:0}:{stdout:``,stderr:`skill: "${n}" not found\n`,exitCode:1}}case`read`:{let n=t[1];if(!n)return{stdout:``,stderr:`skill: read requires a skill name
284
284
  `,exitCode:1};let r=await i.readSkillInstructions(e,n);return r===null?{stdout:``,stderr:`skill: no SKILL.md found for "${n}"\n`,exitCode:1}:{stdout:r+`
285
285
  `,stderr:``,exitCode:0}}default:return{stdout:``,stderr:`skill: unknown command "${r}"\n`,exitCode:1}}}catch(e){return{stdout:``,stderr:`skill: ${e instanceof Error?e.message:String(e)}\n`,exitCode:1}}})}const th=[{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=>Di(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 nh(e){let t={skills:[],dryRun:!1,json:!1};for(let n=0;n<e.length;n++){let r=e[n],i=th.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 rh(e,t){return!e||!t||e.byteLength!==t.byteLength?!1:e.every((e,n)=>e===t[n])}async function ih(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 ah(e,t,n,r){let i=await ih(e,t);return pi(n)?i?{status:`kept-local`,write:!1}:{status:`added`,write:!0}:i?rh(i,r)?{status:`unchanged`,write:!1}:{status:`updated`,write:!0}:{status:`added`,write:!0}}async function oh(e,t,n,r){let i={changes:[],writes:[],removals:[]};for(let[r,a]of n){let n=`${t}/${r}`,{status:o,write:s}=await ah(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 mi(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 sh(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 yi(t),d=await xi(s,c,o.ref,u,!0,l||void 0);if(d&&r.sha===d&&await ch(e,n,r))return{...o,to:d,outcome:`current`,changes:[]};let f=await lh(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 oh(e,`${oi}/${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 mh(e,{changes:h,writes:g,removals:_}),await Si(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 ch(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 lh(e,t,n,r,i,a,o){let s=await gi(e,t,a,i??`main`);if(s.status===`ok`){let i=di(s.files),a=n||uh(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:ph(i,a),path:a}}try{return{files:fh(dh(await hi(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 uh(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 dh(e){return new Map([...e].filter(([e])=>fi(e)))}function fh(e){return new Map([...e].sort(([e],[t])=>e.localeCompare(t)))}function ph(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);fi(e)&&r.set(e,i)}return fh(r)}async function mh(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 hh(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 Km(o,s,t);if(!c.ok)return{...a,outcome:`error`,error:c.error};let l=`${oi}/${n}/SKILL.md`,u=await ih(e,l),d=new TextEncoder().encode(c.content),f=u!==void 0&&Wm(new TextDecoder().decode(u))===Wm(c.content);if(rh(u,d)||f)return{...a,changes:[{path:`SKILL.md`,status:`unchanged`}]};let p=u?`updated`:`added`;return i||(await e.mkdir(`${oi}/${n}`,{recursive:!0}),await e.writeFile(l,d),await Si(e,n,{...r,files:[`SKILL.md`]})),{...a,outcome:`updated`,changes:[{path:`SKILL.md`,status:p}]}}function gh(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 _h(e,t,n,r){let i=Di(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 vh(e,t,n){if(t.length===0){let t=await bi(e);return{targets:t.provenanced,missing:[],skipped:t.unattributed}}let r=[],i=[];for(let a of t){let t=await Ci(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?_h(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 yh(e){return e.reason===`not-installed`?`upskill: no skill named "${e.name}" is installed — check \`upskill list\`
@@ -290,7 +290,7 @@ Examples:
290
290
  `}function Sh(e,t,n,r,i){let a=t?`Skill update (dry run — nothing written):
291
291
  `:`Skill update:
292
292
  `;for(let n of e)a+=gh(n,t);if(i.length>0&&(a+=xh(i)),!n&&r&&e.length>0){let n=i.length>0?`all ${bh(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 Ch(e,t,n){let{targets:r,missing:i,skipped:a}=await vh(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 hh(e,t,i.name,i.provenance,n.dryRun):await sh(e,t,i.name,i.provenance,n.branch,n.dryRun));return{results:o,skipped:a,missing:i}}async function wh(e,t,n){let r=nh(e);if(r.error)return{stdout:``,stderr:`${r.error}\n`,exitCode:1};let{results:i,missing:a,skipped:o}=await Ch(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`:Sh([],r.dryRun,!1,!0,o),stderr:``,exitCode:0}:{stdout:``,stderr:a.length?a.map(yh).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 Ei();let l=a.map(yh).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:Sh(i,r.dryRun,c,u,o),stderr:l,exitCode:+!u}}function Th(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 Eh(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 Dh(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}${Eh(e)}`)}if(t.length>0){let e=t.length===1?`skill`:`skills`;r.push(``,`Skipped ${t.length} ${e} with no install provenance — not checked.`)}let i=e.filter(e=>e.outcome===`error`);if(i.length>0){let e=i.length===1?`skill`:`skills`;r.push(``,`Could not check ${i.length} ${e}:`);for(let e of i)r.push(` ${e.skill}: failed — ${e.error}`)}return`${r.join(`
293
- `)}\n`}async function Oh(e,t,n){let r=await(await import(`./kernel-worker-DJ8FZwqE.js`).then(e=>e.n)).discoverSkills(e),{collisions:i}=await Wn(e,Vn(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${Jm()}`,stderr:``,exitCode:0}:{...Gn(`upskill`,Xm(r,`Discoverable local skills`),i,{builtinNames:new Set(Xe())}),exitCode:0}}async function kh(e,t,n){let{results:r,skipped:i}=await Ch(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:Dh(r,i),stderr:c,exitCode:+!s}}async function Ah(e,t,n,r){let i=Th(e);return i.error?{stdout:``,stderr:`${i.error}\n`,exitCode:1}:i.outdated?kh(t,n,i.json):Oh(t,i.json,r)}async function jh(e,t){let n=`${si}/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(vi(e,n))}if(r.status!==200)throw Error(`Tessl returned HTTP ${r.status}`);let i=ue(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=Ti(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 Mh(e,t){let n=`${si}/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: ${vi(e,n)}`}}if(r.status!==200)return{error:`Tessl search failed (HTTP ${r.status})`};let i=ue(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=Ti(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 Nh=[{label:`Tessl`,host:new URL(si).host,fetch:jh},{label:`browse.sh`,host:new URL(ui).host,fetch:Rm}];function Ph(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 Fh(e,t,n=1){let r=await Promise.allSettled(Nh.map(n=>n.fetch(e,t))),i=r.map(e=>e.status===`fulfilled`?e.value:[]),a=r.every(e=>e.status===`rejected`),o=Ph(i),s=``;for(let e=0;e<r.length;e++){let t=r[e];if(t.status===`rejected`){let n=Nh[e],r=t.reason instanceof Error?t.reason.message:String(t.reason);s+=`warning: ${n.label} registry unavailable (${n.host}): ${r}\n`}}if(o.length===0){let t=a?`${s}upskill: registries failed to respond\n`:s;return{stdout:`No skills found for "${e}"\n\nTry a different search term or browse the registries at https://tessl.io/registry or https://browse.sh\n`,stderr:t,exitCode:+!!a}}let c=o.length,l=Math.ceil(c/10),u=Math.max(1,Math.min(n,l)),d=(u-1)*10,f=o.slice(d,d+10),p=`Search results for "${e}" (page ${u}/${l}, ${c} total):\n\n`;for(let e of f){let t=e.qualityScore==null?` `:String(e.qualityScore).padStart(3),n=`[${e.source}]`,r=e.sourceRepo?` ${e.sourceRepo}`:``;p+=` ${e.name.padEnd(30)} ${t} ${n.padEnd(10)}${r}\n`,e.summary&&(p+=` ${e.summary}\n`),p+=`
293
+ `)}\n`}async function Oh(e,t,n){let r=await(await import(`./kernel-worker-B69_4v-D.js`).then(e=>e.n)).discoverSkills(e),{collisions:i}=await Wn(e,Vn(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${Jm()}`,stderr:``,exitCode:0}:{...Gn(`upskill`,Xm(r,`Discoverable local skills`),i,{builtinNames:new Set(Xe())}),exitCode:0}}async function kh(e,t,n){let{results:r,skipped:i}=await Ch(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:Dh(r,i),stderr:c,exitCode:+!s}}async function Ah(e,t,n,r){let i=Th(e);return i.error?{stdout:``,stderr:`${i.error}\n`,exitCode:1}:i.outdated?kh(t,n,i.json):Oh(t,i.json,r)}async function jh(e,t){let n=`${si}/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(vi(e,n))}if(r.status!==200)throw Error(`Tessl returned HTTP ${r.status}`);let i=ue(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=Ti(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 Mh(e,t){let n=`${si}/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: ${vi(e,n)}`}}if(r.status!==200)return{error:`Tessl search failed (HTTP ${r.status})`};let i=ue(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=Ti(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 Nh=[{label:`Tessl`,host:new URL(si).host,fetch:jh},{label:`browse.sh`,host:new URL(ui).host,fetch:Rm}];function Ph(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 Fh(e,t,n=1){let r=await Promise.allSettled(Nh.map(n=>n.fetch(e,t))),i=r.map(e=>e.status===`fulfilled`?e.value:[]),a=r.every(e=>e.status===`rejected`),o=Ph(i),s=``;for(let e=0;e<r.length;e++){let t=r[e];if(t.status===`rejected`){let n=Nh[e],r=t.reason instanceof Error?t.reason.message:String(t.reason);s+=`warning: ${n.label} registry unavailable (${n.host}): ${r}\n`}}if(o.length===0){let t=a?`${s}upskill: registries failed to respond\n`:s;return{stdout:`No skills found for "${e}"\n\nTry a different search term or browse the registries at https://tessl.io/registry or https://browse.sh\n`,stderr:t,exitCode:+!!a}}let c=o.length,l=Math.ceil(c/10),u=Math.max(1,Math.min(n,l)),d=(u-1)*10,f=o.slice(d,d+10),p=`Search results for "${e}" (page ${u}/${l}, ${c} total):\n\n`;for(let e of f){let t=e.qualityScore==null?` `:String(e.qualityScore).padStart(3),n=`[${e.source}]`,r=e.sourceRepo?` ${e.sourceRepo}`:``;p+=` ${e.name.padEnd(30)} ${t} ${n.padEnd(10)}${r}\n`,e.summary&&(p+=` ${e.summary}\n`),p+=`
294
294
  `}return u<l&&(p+=`Showing ${d+1}-${d+f.length} of ${c}. `,p+=`Next page: upskill search ${e} --page ${u+1}\n\n`),p+=`To install:
295
295
  `,p+=` From Tessl: upskill <owner/repo> --skill <name>
296
296
  `,p+=` From browse.sh: upskill browse:<hostname>/<task>
@@ -313,7 +313,7 @@ Examples:
313
313
  `,{stdout:s,stderr:``,exitCode:0}}function Hh(e){return!e||e.startsWith(`-`)?{stdout:``,stderr:`upskill: --branch requires a value
314
314
  `,exitCode:1}:i(e)?null:{stdout:``,stderr:`upskill: --branch must be a git ref of [A-Za-z0-9._/-]+ with no "..", leading "-"/"/", trailing "/" or ".lock", or shell metacharacters
315
315
  `,exitCode:1}}function Uh(e){let t={selectedSkills:[],listOnly:!1,installAll:!1,force:!1,sourceRef:``},n=0;for(;n<e.length;){let r=e[n];if(r===`--skill`)t.selectedSkills.push(e[++n]);else if(r===`--path`||r===`-p`){let r=e[++n];if(typeof r!=`string`||!o(r))return t.earlyReturn={stdout:``,stderr:`upskill: --path must be a repo-relative sub-path of [A-Za-z0-9._/-]+ with no "..", leading "-"/"/", or shell metacharacters
316
- `,exitCode:1},t;t.subPath=r}else if(r===`--list`)t.listOnly=!0;else if(r===`--all`)t.installAll=!0;else if(r===`--force`)t.force=!0;else if(r===`--branch`||r===`-b`){let r=Hh(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 Wh(e,t,n){if(!t)return{stdout:``,stderr:`upskill: ${e} requires a skill name\n`,exitCode:1};let r=await import(`./kernel-worker-DJ8FZwqE.js`).then(e=>e.n);if(e===`info`){let e=await r.getSkillInfo(n,t);if(!e)return{stdout:``,stderr:`upskill: skill "${t}" not found\n`,exitCode:1};let i=await Ci(n,t),a=i?wi(i):"Installed from: (no provenance recorded — reinstall to enable `upskill update`)\n";return{stdout:Zm(e)+a,stderr:``,exitCode:0}}let i=await r.readSkillInstructions(n,t);return i===null?{stdout:``,stderr:`upskill: no SKILL.md found for "${t}"\n`,exitCode:1}:{stdout:i+`
316
+ `,exitCode:1},t;t.subPath=r}else if(r===`--list`)t.listOnly=!0;else if(r===`--all`)t.installAll=!0;else if(r===`--force`)t.force=!0;else if(r===`--branch`||r===`-b`){let r=Hh(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 Wh(e,t,n){if(!t)return{stdout:``,stderr:`upskill: ${e} requires a skill name\n`,exitCode:1};let r=await import(`./kernel-worker-B69_4v-D.js`).then(e=>e.n);if(e===`info`){let e=await r.getSkillInfo(n,t);if(!e)return{stdout:``,stderr:`upskill: skill "${t}" not found\n`,exitCode:1};let i=await Ci(n,t),a=i?wi(i):"Installed from: (no provenance recorded — reinstall to enable `upskill update`)\n";return{stdout:Zm(e)+a,stderr:``,exitCode:0}}let i=await r.readSkillInstructions(n,t);return i===null?{stdout:``,stderr:`upskill: no SKILL.md found for "${t}"\n`,exitCode:1}:{stdout:i+`
317
317
  `,stderr:``,exitCode:0}}async function Gh(e,t,n,r,i,a,o,s){let c=``,l=``,u=0,d=e.length;for(let f=0;f<e.length;f++){let p=e[f],m=await ki(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 Kh(e,t,n,r,i,a,o,s){let c=``,l=``,u=0,d=e.length;for(let f=0;f<e.length;f++){let p=e[f],m=await Oi(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 qh(e,t,n,r,i,a,o,s){let c=``,l=``,u=0;for(let d of e){let e=await Oi(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 Jh(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 Yh(e,t,n,r){let{owner:i,repo:a}=e,o=t.branch??e.branch,s=t.subPath??e.path,c=await yi(r),l=await Ai(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:Jh(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:Jh(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 gi(i,a,r,o);if(e.status===`ok`){let r=await xi(i,a,o,c,!0,s),l=await Gh(u,i,a,di(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 Kh(u,i,a,c,n,t.force,o,f);({output:p,errors:m,successCount:h}=e)}}else({output:p,errors:m,successCount:h}=await qh(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 Ei()),{stdout:p,stderr:m,exitCode:+!!m}}async function Xh(e,t,n,r,i){switch(e[0]){case`tabs`:return Bh(t,n,r,e.includes(`--json`));case`recommendations`:return Vh(t,n,e.includes(`--install`));case`update`:case`upgrade`:return wh(e.slice(1),t,n);case`list`:return Ah(e.slice(1),t,n,i);case`info`:case`read`:return Wh(e[0],e[1],t);case`search`:return Qh(e,n);default:return null}}function Zh(e,t,n){return S(`upskill`,async(r,i)=>{if(r.length===0||r.includes(`--help`)||r.includes(`-h`))return Qm();let a=await Xh(r,e,t,n,i.env.get(`PATH`));if(a)return a;let o=Uh(r);if(o.earlyReturn)return o.earlyReturn;if(!o.sourceRef)return Qm();if(o.sourceRef.startsWith(`tessl:`))return $h(o.sourceRef,o.force,e,t);let s=Vm(o.sourceRef);if(s)return qm(s.hostname,s.task,e,t,o.force);let c=Di(o.sourceRef);return c?Yh(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 Qh(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?Fh(a,t,i):Qm()}async function $h(e,t,n,r){let i=e.slice(6);if(!i)return{stdout:``,stderr:`upskill: tessl: requires a skill name
318
318
  `,exitCode:1};let a=await Mh(i,r);if(`error`in a)return{stdout:``,stderr:`upskill: ${a.error}\n`,exitCode:1};let o=await yi(r);return Oi(a.owner,a.repo,a.skillPath,a.skillName,n,o,t,r)}function eg(){return{stdout:`usage: afplay [-v volume] [-r rate] <file>
319
319
 
@@ -627,7 +627,7 @@ Usage: cherry-emit <name> [--detail <json>] [--runtime <id>]
627
627
  -o Force paste mode (write to stdout)
628
628
  (default) Auto-detect: stdin present = copy, no stdin = paste
629
629
  Example: echo hello | ${e}\n Example: ${e} -o > file.txt\n`,stderr:``,exitCode:0}}async function rv(e,t){let n=!!globalThis.navigator?.clipboard,r=n?null:y();if(!n&&!r)return{stdout:``,stderr:`${t}: clipboard API is unavailable\n`,exitCode:1};try{return n?await navigator.clipboard.writeText(e):await r.call(`clipboard-write-text`,{text:e}),{stdout:``,stderr:``,exitCode:0}}catch(e){return{stdout:``,stderr:`${t}: failed to write to clipboard: ${$_(e)}\n`,exitCode:1}}}async function iv(e){let t=!!globalThis.navigator?.clipboard,n=t?null:y();if(!t&&!n)return{stdout:``,stderr:`${e}: clipboard API is unavailable\n`,exitCode:1};try{return{stdout:t?await navigator.clipboard.readText():(await n.call(`clipboard-read-text`,void 0)).text,stderr:``,exitCode:0}}catch(t){return{stdout:``,stderr:`${e}: failed to read from clipboard: ${$_(t)}\n`,exitCode:1}}}function av(){return S(`pbcopy`,async(e,t)=>e.includes(`--help`)||e.includes(`-h`)?ev():rv(P(t.stdin),`pbcopy`))}function ov(){return S(`pbpaste`,async e=>e.includes(`--help`)||e.includes(`-h`)?tv():iv(`pbpaste`))}function sv(e){return S(e,async(t,n)=>{if(t.includes(`--help`)||t.includes(`-h`))return nv(e);let r=t.includes(`-i`),i=t.includes(`-o`);if(r&&i)return{stdout:``,stderr:`${e}: cannot use both -i and -o\n`,exitCode:1};if(i)return iv(e);let a=P(n.stdin);return r||a.length>0?rv(a,e):iv(e)})}function cv(){return S(`cmp`,async(e,t)=>{let n=e.some(e=>e===`-s`||e===`--quiet`||e===`--silent`),r=e.filter(e=>![`-s`,`--quiet`,`--silent`].includes(e));if(r.length!==2||r.some(e=>e.startsWith(`-`)&&e!==`-`))return{stdout:``,stderr:`cmp: usage: cmp [-s|--quiet|--silent] FILE1 FILE2
630
- `,exitCode:2};let i=await lv(t,r[0]);if(`error`in i)return n?{...i.error,stderr:``}:i.error;let a=await lv(t,r[1]);if(`error`in a)return n?{...a.error,stderr:``}:a.error;let o=uv(i.bytes,a.bytes);return o?n?{stdout:``,stderr:``,exitCode:1}:o.eof?{stdout:``,stderr:`cmp: EOF on ${i.bytes.length<a.bytes.length?r[0]:r[1]} after byte ${o.byte-1}, line ${o.line}\n`,exitCode:1}:{stdout:`${r[0]} ${r[1]} differ: byte ${o.byte}, line ${o.line}\n`,stderr:``,exitCode:1}:{stdout:``,stderr:``,exitCode:0}})}async function lv(e,t){if(t===`-`){let t=ei(e.stdin);return{bytes:Uint8Array.from(t,e=>e.charCodeAt(0)&255)}}try{return{bytes:await e.fs.readFileBuffer(e.fs.resolvePath(e.cwd,t))}}catch{return{error:{stdout:``,stderr:`cmp: ${t}: No such file or directory\n`,exitCode:2}}}}function uv(e,t){let n=Math.min(e.length,t.length),r=1;for(let i=0;i<n;i++){if(e[i]!==t[i])return{byte:i+1,line:r,eof:!1};e[i]===10&&r++}return e.length===t.length?null:{byte:n+1,line:r,eof:!0}}function dv(e={}){return S(`computer`,async(t,n)=>{let{runComputer:r}=await import(`./run-CKdymE5z.js`).then(e=>e.t);return r(t,n,e)})}var fv=`/assets/AdobeClean-Regular-CVsq5gF7.otf`;function pv(e){return{reader:{exists:t=>e.fs.exists(t),isDirectory:async t=>{try{return(await e.fs.stat(t)).isDirectory}catch{return!1}},readFile:t=>e.fs.readFile(t)},readBytes:t=>e.fs.readFileBuffer(t),fromDir:e.cwd}}function mv(e){let t=e.toLowerCase();return t.endsWith(`.jpg`)||t.endsWith(`.jpeg`)?`JPEG`:t.endsWith(`.png`)?`PNG`:t.endsWith(`.gif`)?`GIF`:t.endsWith(`.webp`)?`WEBP`:t.endsWith(`.bmp`)?`BMP`:t.endsWith(`.tiff`)||t.endsWith(`.tif`)?`TIFF`:t.endsWith(`.avif`)?`AVIF`:`PNG`}const hv=`AdobeClean-Regular.otf`,gv=new WeakSet;let _v=null;function vv(){return{stdout:`usage: convert [input ...] [operations...] [output]
630
+ `,exitCode:2};let i=await lv(t,r[0]);if(`error`in i)return n?{...i.error,stderr:``}:i.error;let a=await lv(t,r[1]);if(`error`in a)return n?{...a.error,stderr:``}:a.error;let o=uv(i.bytes,a.bytes);return o?n?{stdout:``,stderr:``,exitCode:1}:o.eof?{stdout:``,stderr:`cmp: EOF on ${i.bytes.length<a.bytes.length?r[0]:r[1]} after byte ${o.byte-1}, line ${o.line}\n`,exitCode:1}:{stdout:`${r[0]} ${r[1]} differ: byte ${o.byte}, line ${o.line}\n`,stderr:``,exitCode:1}:{stdout:``,stderr:``,exitCode:0}})}async function lv(e,t){if(t===`-`){let t=ei(e.stdin);return{bytes:Uint8Array.from(t,e=>e.charCodeAt(0)&255)}}try{return{bytes:await e.fs.readFileBuffer(e.fs.resolvePath(e.cwd,t))}}catch{return{error:{stdout:``,stderr:`cmp: ${t}: No such file or directory\n`,exitCode:2}}}}function uv(e,t){let n=Math.min(e.length,t.length),r=1;for(let i=0;i<n;i++){if(e[i]!==t[i])return{byte:i+1,line:r,eof:!1};e[i]===10&&r++}return e.length===t.length?null:{byte:n+1,line:r,eof:!0}}function dv(e={}){return S(`computer`,async(t,n)=>{let{runComputer:r}=await import(`./run-BVlVC7jS.js`).then(e=>e.t);return r(t,n,e)})}var fv=`/assets/AdobeClean-Regular-CVsq5gF7.otf`;function pv(e){return{reader:{exists:t=>e.fs.exists(t),isDirectory:async t=>{try{return(await e.fs.stat(t)).isDirectory}catch{return!1}},readFile:t=>e.fs.readFile(t)},readBytes:t=>e.fs.readFileBuffer(t),fromDir:e.cwd}}function mv(e){let t=e.toLowerCase();return t.endsWith(`.jpg`)||t.endsWith(`.jpeg`)?`JPEG`:t.endsWith(`.png`)?`PNG`:t.endsWith(`.gif`)?`GIF`:t.endsWith(`.webp`)?`WEBP`:t.endsWith(`.bmp`)?`BMP`:t.endsWith(`.tiff`)||t.endsWith(`.tif`)?`TIFF`:t.endsWith(`.avif`)?`AVIF`:`PNG`}const hv=`AdobeClean-Regular.otf`,gv=new WeakSet;let _v=null;function vv(){return{stdout:`usage: convert [input ...] [operations...] [output]
631
631
 
632
632
  Operations:
633
633
  -resize GEOMETRY resize; supports %, !, ^, >, and < modifiers
@@ -707,7 +707,7 @@ Examples:
707
707
  `;for(let n of e)t+=` ${n.id} ${n.name.padEnd(20)} ${n.cron.padEnd(15)}`,n.scoop&&(t+=` -> ${n.scoop}`),n.filter&&(t+=` [filtered]`),t+=` (${n.status})`,n.nextRun&&(t+=` next: ${new Date(n.nextRun).toLocaleString()}`),t+=`
708
708
  `;return t}async function uy(e,t){let n=C(e.slice(1),{});if(`error`in n)return sy(n.error);if(!t()){let e=await ey();if(!e)return ry(`list`);let t=await e.listCronTasks();return t.length===0?{stdout:`No active cron tasks
709
709
  `,stderr:``,exitCode:0}:{stdout:ly(t),stderr:``,exitCode:0}}let{ok:r,data:i}=await ay(`GET`,``);if(!r)return{stdout:``,stderr:`crontask: failed to list: ${i.error??`unknown error`}\n`,exitCode:1};let a=i;return a.length===0?{stdout:`No active cron tasks
710
- `,stderr:``,exitCode:0}:{stdout:ly(a),stderr:``,exitCode:0}}async function dy(e,t){let n=e[0],r=C(e.slice(1),{});if(`error`in r)return sy(r.error);let i=r.positionals[0];if(!i)return{stdout:``,stderr:`crontask: ${n} requires an ID\n`,exitCode:1};if(!t()){let e=await ey();return e?await e.deleteCronTask(i)?{stdout:`Deleted cron task "${i}"\n`,stderr:``,exitCode:0}:{stdout:``,stderr:`crontask: task "${i}" not found\n`,exitCode:1}:ry(`delete`)}let{ok:a,status:o,data:s}=await ay(`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 fy(e={}){let t=e.hasLocalNodeServer??(()=>!1);return S(`crontask`,async(e,n)=>{let r=e[0];if(!r||w(e,{valueFlags:oy}))return iy();try{switch(r){case`create`:return await cy(e,n.env,t);case`list`:return await uy(e,t);case`delete`:case`kill`:return await dy(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 py(e){return S(`curlwright`,async(t,n)=>{let{runCurlwright:r}=await import(`./run-BEHokdPX.js`);return r(e,t,n)})}const my=`slicc-fs`;async function hy(){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===my)}catch{return!0}}async function gy(){let e=globalThis.indexedDB;return e?new Promise(t=>{let n;try{n=e.deleteDatabase(my)}catch{t(`error`);return}n.onsuccess=()=>t(`deleted`),n.onerror=()=>t(`error`),n.onblocked=()=>t(`blocked`)}):`error`}async function _y(){if(!await hy())return{kind:`absent`,message:`legacy slicc-fs IDB not present — nothing to clean`};let e=await gy();return e===`deleted`?{kind:`deleted`,message:`legacy slicc-fs IDB deleted`}:e===`blocked`?{kind:`blocked`,message:`legacy slicc-fs IDB delete blocked by another connection — close other tabs and retry`}:{kind:`error`,message:`legacy slicc-fs IDB delete failed`}}function vy(){return`slicc-fs-cleanup — delete the legacy slicc-fs IndexedDB
710
+ `,stderr:``,exitCode:0}:{stdout:ly(a),stderr:``,exitCode:0}}async function dy(e,t){let n=e[0],r=C(e.slice(1),{});if(`error`in r)return sy(r.error);let i=r.positionals[0];if(!i)return{stdout:``,stderr:`crontask: ${n} requires an ID\n`,exitCode:1};if(!t()){let e=await ey();return e?await e.deleteCronTask(i)?{stdout:`Deleted cron task "${i}"\n`,stderr:``,exitCode:0}:{stdout:``,stderr:`crontask: task "${i}" not found\n`,exitCode:1}:ry(`delete`)}let{ok:a,status:o,data:s}=await ay(`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 fy(e={}){let t=e.hasLocalNodeServer??(()=>!1);return S(`crontask`,async(e,n)=>{let r=e[0];if(!r||w(e,{valueFlags:oy}))return iy();try{switch(r){case`create`:return await cy(e,n.env,t);case`list`:return await uy(e,t);case`delete`:case`kill`:return await dy(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 py(e){return S(`curlwright`,async(t,n)=>{let{runCurlwright:r}=await import(`./run-CHKo3g64.js`);return r(e,t,n)})}const my=`slicc-fs`;async function hy(){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===my)}catch{return!0}}async function gy(){let e=globalThis.indexedDB;return e?new Promise(t=>{let n;try{n=e.deleteDatabase(my)}catch{t(`error`);return}n.onsuccess=()=>t(`deleted`),n.onerror=()=>t(`error`),n.onblocked=()=>t(`blocked`)}):`error`}async function _y(){if(!await hy())return{kind:`absent`,message:`legacy slicc-fs IDB not present — nothing to clean`};let e=await gy();return e===`deleted`?{kind:`deleted`,message:`legacy slicc-fs IDB deleted`}:e===`blocked`?{kind:`blocked`,message:`legacy slicc-fs IDB delete blocked by another connection — close other tabs and retry`}:{kind:`error`,message:`legacy slicc-fs IDB delete failed`}}function vy(){return`slicc-fs-cleanup — delete the legacy slicc-fs IndexedDB
711
711
 
712
712
  Usage:
713
713
  slicc-fs-cleanup Delete the legacy slicc-fs IDB.
@@ -915,7 +915,7 @@ Options:
915
915
  --pattern <glob> File pattern to match, e.g. "*.md", "*.bsh" (required)
916
916
  --scoop <target> Scoop name, cone name, or folder. Omit for your own cone.
917
917
  --name <name> Human-readable name for the watcher
918
- `);switch(n){case`list`:return pS(e);case`delete`:return mS(e);case`create`:return await _S(e,t.env);default:return dS(`unknown command: ${n}`)}})}function yS(e){return S(`gelatiere`,async(t,n)=>{let{runGelatiere:r}=await import(`./run-BLi5_vwK.js`);return r(t,n,e)})}function bS(e){return typeof e.stdoutIsTTY!=`boolean`||e.stdoutIsTTY}function xS(e,t){return typeof e.stdinIsTTY==`boolean`?e.stdinIsTTY:t===void 0?ei(e.stdin).length===0:t===0}function SS(){return{stdout:`usage: hear [-i file] [-l lang] [-T seconds] [-d deviceId] [--engine name]
918
+ `);switch(n){case`list`:return pS(e);case`delete`:return mS(e);case`create`:return await _S(e,t.env);default:return dS(`unknown command: ${n}`)}})}function yS(e){return S(`gelatiere`,async(t,n)=>{let{runGelatiere:r}=await import(`./run-BA94mtBB.js`);return r(t,n,e)})}function bS(e){return typeof e.stdoutIsTTY!=`boolean`||e.stdoutIsTTY}function xS(e,t){return typeof e.stdinIsTTY==`boolean`?e.stdinIsTTY:t===void 0?ei(e.stdin).length===0:t===0}function SS(){return{stdout:`usage: hear [-i file] [-l lang] [-T seconds] [-d deviceId] [--engine name]
919
919
  hear --devices | --status | --warmup
920
920
 
921
921
  Speech recognition: listens on the microphone until you pause, then
@@ -1197,56 +1197,56 @@ Options:
1197
1197
  `,stderr:``,exitCode:0}:{stdout:r.map((e,t)=>`${t+1}. ${e.pattern} → ${e.status} ${e.contentType}`).join(`
1198
1198
  `)+`
1199
1199
  `,stderr:``,exitCode:0}},qw=async({state:e,positional:t,flags:n})=>{let r=j(n);if(`error`in r)return{stdout:``,stderr:r.error,exitCode:1};let i=t[0];if(!i){e.routes.set(r.targetId,[]);let t=e.routeCleanup.get(r.targetId);return t&&(t(),e.routeCleanup.delete(r.targetId)),{stdout:`All routes removed
1200
- `,stderr:``,exitCode:0}}let a=e.routes.get(r.targetId)??[],o=a.length,s=a.filter(e=>e.pattern!==i);if(e.routes.set(r.targetId,s),s.length===0){let t=e.routeCleanup.get(r.targetId);t&&(t(),e.routeCleanup.delete(r.targetId))}return{stdout:`Removed ${o-s.length} route(s) matching "${i}"\n`,stderr:``,exitCode:0}};async function Jw(e,t){if(!t.sessionDirsCreated){for(let t of[`/.playwright`,`/.playwright/snapshots`,`/.playwright/screenshots`])try{await e.mkdir(t,{recursive:!0})}catch(e){if(!wn(e))throw e}t.sessionDirsCreated=!0}}async function Yw(e,t,n,r){try{return await e.withTab(n,async e=>{let{url:i,title:a,text:o,refToSelector:s,refToBackendNodeId:c,refToFrameId:l}=await oe(e),u={url:i,title:a,refToSelector:s,refToBackendNodeId:c,refToFrameId:l,content:o,timestamp:Date.now()};r.snapshots.set(n,u);let d=[`Page URL: ${i}`,`Page Title: ${a}`,``,o].join(`
1201
- `),f=`/.playwright/snapshots/page-${Sn(new Date)}.yml`;return await t.writeFile(f,d),f})}catch{return null}}async function Xw(e,t,n){await Jw(e,t);let r=new Date().toISOString(),i=`playwright-cli ${n.command}${n.args.length?` `+n.args.join(` `):``}`,a=n.result.exitCode===0?n.result.stdout.trim()||`OK`:`Error: ${n.result.stderr.trim()}`,o=[`### ${i}`,`- **Time**: ${r}`];if(n.tabUrl||n.targetId){let e=n.tabUrl?`${n.tabUrl}${n.targetId?` (targetId: ${n.targetId})`:``}`:`targetId: ${n.targetId}`;o.push(`- **Tab**: ${e}`)}o.push(`- **Result**: ${a}`),n.snapshotPath&&o.push(``,`[Snapshot](${n.snapshotPath})`),o.push(`---`,``);let s=o.join(`
1200
+ `,stderr:``,exitCode:0}}let a=e.routes.get(r.targetId)??[],o=a.length,s=a.filter(e=>e.pattern!==i);if(e.routes.set(r.targetId,s),s.length===0){let t=e.routeCleanup.get(r.targetId);t&&(t(),e.routeCleanup.delete(r.targetId))}return{stdout:`Removed ${o-s.length} route(s) matching "${i}"\n`,stderr:``,exitCode:0}},Jw=`/.playwright`;function Yw(e,t){return e?`${t.replace(/\/+$/,``)}${Jw}`:Jw}async function Xw(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(!wn(e))throw e}t.sessionDirsCreated.add(n)}}async function Zw(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 oe(e),d={url:a,title:o,refToSelector:c,refToBackendNodeId:l,refToFrameId:u,content:s,timestamp:Date.now()};r.snapshots.set(n,d);let f=[`Page URL: ${a}`,`Page Title: ${o}`,``,s].join(`
1201
+ `),p=`${i}/snapshots/page-${Sn(new Date)}.yml`;return await t.writeFile(p,f),p})}catch{return null}}async function Qw(e,t,n,r){await Xw(e,t,n);let i=new Date().toISOString(),a=`playwright-cli ${r.command}${r.args.length?` `+r.args.join(` `):``}`,o=r.result.exitCode===0?r.result.stdout.trim()||`OK`:`Error: ${r.result.stderr.trim()}`,s=[`### ${a}`,`- **Time**: ${i}`];if(r.tabUrl||r.targetId){let e=r.tabUrl?`${r.tabUrl}${r.targetId?` (targetId: ${r.targetId})`:``}`:`targetId: ${r.targetId}`;s.push(`- **Tab**: ${e}`)}s.push(`- **Result**: ${o}`),r.snapshotPath&&s.push(``,`[Snapshot](${r.snapshotPath})`),s.push(`---`,``);let c=s.join(`
1202
1202
  `)+`
1203
- `,c=`/.playwright/session.md`,l=``;try{let t=await e.readFile(c);l=typeof t==`string`?t:new TextDecoder().decode(t)}catch{}await e.writeFile(c,l+s)}function Zw(){return import(`./snapshot-features-D44t7iA7.js`)}async function Qw(e,t,n,r){let i=await e.getAccessibilityTreeForFrame(r.frameId),a=new Map,o=new Map,s=new Map,c=ae(i,a,o,{value:0},``,`f1`);for(let e of a.keys())s.set(e,r.frameId);let l=c.join(`
1204
- `);return t.snapshots.set(n,{url:r.url,title:r.name,refToSelector:a,refToBackendNodeId:o,refToFrameId:s,content:l,timestamp:Date.now()}),l}async function $w(e,t){await e.send(`DOM.enable`),await e.send(`Runtime.enable`);let n=(await e.send(`DOM.resolveNode`,{backendNodeId:t})).object;if(n?.objectId)return(await e.send(`Runtime.callFunctionOn`,{objectId:n.objectId,functionDeclaration:`function() {
1203
+ `,l=`${n}/session.md`,u=``;try{let t=await e.readFile(l);u=typeof t==`string`?t:new TextDecoder().decode(t)}catch{}await e.writeFile(l,u+c)}function $w(){return import(`./snapshot-features-NmqWLNc6.js`)}async function eT(e,t,n,r){let i=await e.getAccessibilityTreeForFrame(r.frameId),a=new Map,o=new Map,s=new Map,c=ae(i,a,o,{value:0},``,`f1`);for(let e of a.keys())s.set(e,r.frameId);let l=c.join(`
1204
+ `);return t.snapshots.set(n,{url:r.url,title:r.name,refToSelector:a,refToBackendNodeId:o,refToFrameId:s,content:l,timestamp:Date.now()}),l}async function tT(e,t){await e.send(`DOM.enable`),await e.send(`Runtime.enable`);let n=(await e.send(`DOM.resolveNode`,{backendNodeId:t})).object;if(n?.objectId)return(await e.send(`Runtime.callFunctionOn`,{objectId:n.objectId,functionDeclaration:`function() {
1205
1205
  this.scrollIntoView({ block: 'center' });
1206
1206
  const r = this.getBoundingClientRect();
1207
1207
  return { x: r.x + window.scrollX, y: r.y + window.scrollY, width: r.width, height: r.height };
1208
- }`,returnByValue:!0})).result?.value}async function eT(e,t){let n=await e.evaluate(`(function() {
1208
+ }`,returnByValue:!0})).result?.value}async function nT(e,t){let n=await e.evaluate(`(function() {
1209
1209
  const el = document.querySelector(${JSON.stringify(t.split(`,`)[0].trim())});
1210
1210
  if (!el) return null;
1211
1211
  el.scrollIntoView({ block: 'center' });
1212
1212
  const r = el.getBoundingClientRect();
1213
1213
  return JSON.stringify({ x: r.x + window.scrollX, y: r.y + window.scrollY, width: r.width, height: r.height });
1214
- })()`);return n?Tn(n,`element clip rect`):void 0}async function tT(e,t,n){let r=t.refToBackendNodeId.get(n);if(r)return $w(e,r);let i=t.refToSelector.get(n);if(!i)throw Error(`Unknown ref "${n}"`);return eT(e,i)}const nT=async({browser:e,fs:t,state:n,flags:r,onTab:i})=>{let a=j(r);if(`error`in a)return{stdout:``,stderr:a.error,exitCode:1};let o=r[`no-iframes`]===`true`,s=r.depth;if(s!==void 0&&!/^[1-9][0-9]*$/.test(s))return{stdout:``,stderr:`snapshot: --depth must be a positive integer, got "${s}"\n`,exitCode:1};let c=s===void 0?void 0:parseInt(s,10),l=r.boxes===`true`;if(l&&r.frame)return{stdout:``,stderr:`snapshot: --boxes is not supported with --frame (child-frame rects live in another coordinate space)
1215
- `,exitCode:1};let u=await i(a.targetId,async e=>{let t=await In(e,r);if(t)return Qw(e,n,a.targetId,t);let{snapshot:i,output:s}=await ne(e,n,a.targetId,{noIframes:o});if(!l)return s;let{annotateBoxes:c}=await Zw();return c(e,i.refToBackendNodeId,s)});if(c!==void 0){let{limitSnapshotDepth:e}=await Zw();u=e(u,c)}return r.filename?(await t.writeFile(r.filename,u),{stdout:`Snapshot saved to ${r.filename}\n`,stderr:``,exitCode:0}):{stdout:u+`
1216
- `,stderr:``,exitCode:0}},rT=async e=>{let{findHandlerImpl:t}=await Zw();return t(e)},iT=async({browser:e,flags:t,onTab:n})=>{let r=j(t);return`error`in r?{stdout:``,stderr:r.error,exitCode:1}:{stdout:await n(r.targetId,async e=>`Frame IDs (use with --frame, never --tab):\n${(await e.getFrameTree()).map(e=>{let t=e.parentFrameId?`child`:`main`,n=e.parentFrameId?` parentFrameId=${e.parentFrameId}`:``;return` [${t}] frameId=${e.frameId}${n} - ${e.url}`}).join(`
1214
+ })()`);return n?Tn(n,`element clip rect`):void 0}async function rT(e,t,n){let r=t.refToBackendNodeId.get(n);if(r)return tT(e,r);let i=t.refToSelector.get(n);if(!i)throw Error(`Unknown ref "${n}"`);return nT(e,i)}const iT=async({browser:e,fs:t,state:n,flags:r,onTab:i})=>{let a=j(r);if(`error`in a)return{stdout:``,stderr:a.error,exitCode:1};let o=r[`no-iframes`]===`true`,s=r.depth;if(s!==void 0&&!/^[1-9][0-9]*$/.test(s))return{stdout:``,stderr:`snapshot: --depth must be a positive integer, got "${s}"\n`,exitCode:1};let c=s===void 0?void 0:parseInt(s,10),l=r.boxes===`true`;if(l&&r.frame)return{stdout:``,stderr:`snapshot: --boxes is not supported with --frame (child-frame rects live in another coordinate space)
1215
+ `,exitCode:1};let u=await i(a.targetId,async e=>{let t=await In(e,r);if(t)return eT(e,n,a.targetId,t);let{snapshot:i,output:s}=await ne(e,n,a.targetId,{noIframes:o});if(!l)return s;let{annotateBoxes:c}=await $w();return c(e,i.refToBackendNodeId,s)});if(c!==void 0){let{limitSnapshotDepth:e}=await $w();u=e(u,c)}return r.filename?(await t.writeFile(r.filename,u),{stdout:`Snapshot saved to ${r.filename}\n`,stderr:``,exitCode:0}):{stdout:u+`
1216
+ `,stderr:``,exitCode:0}},aT=async e=>{let{findHandlerImpl:t}=await $w();return t(e)},oT=async({browser:e,flags:t,onTab:n})=>{let r=j(t);return`error`in r?{stdout:``,stderr:r.error,exitCode:1}:{stdout:await n(r.targetId,async e=>`Frame IDs (use with --frame, never --tab):\n${(await e.getFrameTree()).map(e=>{let t=e.parentFrameId?`child`:`main`,n=e.parentFrameId?` parentFrameId=${e.parentFrameId}`:``;return` [${t}] frameId=${e.frameId}${n} - ${e.url}`}).join(`
1217
1217
  `)}`)+`
1218
- `,stderr:``,exitCode:0}},aT=async({browser:e,fs:t,flags:n,scratchDir:r,onTab:i})=>{let a=j(n);if(`error`in a)return{stdout:``,stderr:a.error,exitCode:1};let o=n.filename||`${r}/page-${Sn(new Date)}.pdf`;try{await i(a.targetId,async({sessionId:e,transport:n})=>{let r=(await n.send(`Page.printToPDF`,{},e)).data,i=Nn(r);await t.writeFile(o,i)})}catch(e){let t=e instanceof Error?e.message:String(e);return _()?{stdout:``,stderr:`pdf: not available in extension mode — use screenshot --full-page
1219
- `,exitCode:1}:{stdout:``,stderr:`pdf: ${t}\n`,exitCode:1}}return{stdout:`Saved PDF to ${o}\n`,stderr:``,exitCode:0}};async function oT(e,t,n,r){let i=t.snapshots.get(n);if(!i)throw Error(`No snapshot available. Run "snapshot" first.`);let a=await tT(e,i,r);return!a||a.width<=0||a.height<=0?{error:`could not resolve element ${r} to a visible box — the snapshot is likely stale (navigation, reload, or layout change). Re-run "snapshot" and retry with a fresh ref, or omit the ref to capture the viewport deliberately.`}:{clip:a}}const sT=new Set([`png`,`jpeg`,`webp`]);function cT(e){let t=e.type;if(t&&sT.has(t))return t;let n=e.filename??``;return/\.jpe?g$/i.test(n)?`jpeg`:/\.webp$/i.test(n)?`webp`:`png`}const lT=async({browser:e,fs:t,state:n,positional:r,flags:i,scratchDir:a,onTab:o})=>{let s=j(i);if(`error`in s)return{stdout:``,stderr:s.error,exitCode:1};if(i.type&&!sT.has(i.type))return{stdout:``,stderr:`screenshot: --type must be png, jpeg, or webp, got "${i.type}"\n`,exitCode:1};if(i[`max-width`]&&cT(i)!==`png`)return{stdout:``,stderr:`screenshot: --max-width requires png output (the downscale pass measures PNG headers); drop --type/--filename extension or --max-width
1220
- `,exitCode:1};let c=await o(s.targetId,async e=>{let o;if(r[0]?.startsWith(`e`)){let t=await oT(e,n,s.targetId,r[0]);if(`error`in t)return t;o=t.clip}let c=i.fullPage===`true`||i[`full-page`]===`true`;if(i.hires===`true`){let{hiresClip:t}=await Zw();o=await t(e,o,c)}let l=i[`max-width`]?parseInt(i[`max-width`],10):void 0,u=cT(i),d=await e.screenshot({format:u,fullPage:c,...o?{clip:o}:{},...l?{maxWidth:l}:{}}),f=u===`jpeg`?`jpg`:u,p=i.filename||`${a}/screenshot-${Date.now()}.${f}`,m=Nn(d);await t.writeFile(p,m);try{await Jw(t,n);let e=`/.playwright/screenshots/screenshot-${Sn(new Date)}.${f}`;await t.writeFile(e,m)}catch{}return{message:`Screenshot saved to ${p} (${Math.round(m.length/1024)} KB)`}});return`error`in c?{stdout:``,stderr:`screenshot: ${c.error}\n`,exitCode:1}:{stdout:c.message+`
1221
- `,stderr:``,exitCode:0}},uT=async({browser:e,fs:t,positional:n,flags:r,onTab:i})=>{let a=j(r);if(`error`in a)return{stdout:``,stderr:a.error,exitCode:1};let o=r.filename??n[0]??`/.playwright/storage-state.json`,s=[],c=[],l=``;await i(a.targetId,async e=>{s=(await e.send(`Network.getCookies`)).cookies??[];let{sessionId:t,transport:n}=e;l=(await n.send(`Runtime.evaluate`,{expression:`location.origin`,returnByValue:!0},t)).result.value??``;let r=(await n.send(`Runtime.evaluate`,{expression:`JSON.stringify(Object.entries(localStorage).map(([name,value])=>({name,value})))`,returnByValue:!0},t)).result.value??`[]`;c=JSON.parse(r)});let u=JSON.stringify({cookies:s,origins:l?[{origin:l,localStorage:c}]:[]},null,2);return await t.writeFile(o,u),{stdout:`Saved storage state to ${o}\n`,stderr:``,exitCode:0}},dT=async({browser:e,fs:t,positional:n,flags:r,onTab:i})=>{if(n.length===0)return{stdout:``,stderr:`state-load requires a filename
1218
+ `,stderr:``,exitCode:0}},sT=async({browser:e,fs:t,flags:n,scratchDir:r,onTab:i})=>{let a=j(n);if(`error`in a)return{stdout:``,stderr:a.error,exitCode:1};let o=n.filename||`${r}/page-${Sn(new Date)}.pdf`;try{await i(a.targetId,async({sessionId:e,transport:n})=>{let r=(await n.send(`Page.printToPDF`,{},e)).data,i=Nn(r);await t.writeFile(o,i)})}catch(e){let t=e instanceof Error?e.message:String(e);return _()?{stdout:``,stderr:`pdf: not available in extension mode — use screenshot --full-page
1219
+ `,exitCode:1}:{stdout:``,stderr:`pdf: ${t}\n`,exitCode:1}}return{stdout:`Saved PDF to ${o}\n`,stderr:``,exitCode:0}};async function cT(e,t,n,r){let i=t.snapshots.get(n);if(!i)throw Error(`No snapshot available. Run "snapshot" first.`);let a=await rT(e,i,r);return!a||a.width<=0||a.height<=0?{error:`could not resolve element ${r} to a visible box — the snapshot is likely stale (navigation, reload, or layout change). Re-run "snapshot" and retry with a fresh ref, or omit the ref to capture the viewport deliberately.`}:{clip:a}}const lT=new Set([`png`,`jpeg`,`webp`]);function uT(e){let t=e.type;if(t&&lT.has(t))return t;let n=e.filename??``;return/\.jpe?g$/i.test(n)?`jpeg`:/\.webp$/i.test(n)?`webp`:`png`}const dT=async({browser:e,fs:t,state:n,positional:r,flags:i,scratchDir:a,sessionRoot:o,onTab:s})=>{let c=j(i);if(`error`in c)return{stdout:``,stderr:c.error,exitCode:1};if(i.type&&!lT.has(i.type))return{stdout:``,stderr:`screenshot: --type must be png, jpeg, or webp, got "${i.type}"\n`,exitCode:1};if(i[`max-width`]&&uT(i)!==`png`)return{stdout:``,stderr:`screenshot: --max-width requires png output (the downscale pass measures PNG headers); drop --type/--filename extension or --max-width
1220
+ `,exitCode:1};let l=await s(c.targetId,async e=>{let s;if(r[0]?.startsWith(`e`)){let t=await cT(e,n,c.targetId,r[0]);if(`error`in t)return t;s=t.clip}let l=i.fullPage===`true`||i[`full-page`]===`true`;if(i.hires===`true`){let{hiresClip:t}=await $w();s=await t(e,s,l)}let u=i[`max-width`]?parseInt(i[`max-width`],10):void 0,d=uT(i),f=await e.screenshot({format:d,fullPage:l,...s?{clip:s}:{},...u?{maxWidth:u}:{}}),p=d===`jpeg`?`jpg`:d,m=i.filename||`${a}/screenshot-${Date.now()}.${p}`,h=Nn(f);await t.writeFile(m,h);try{await Xw(t,n,o);let e=`${o}/screenshots/screenshot-${Sn(new Date)}.${p}`;await t.writeFile(e,h)}catch{}return{message:`Screenshot saved to ${m} (${Math.round(h.length/1024)} KB)`}});return`error`in l?{stdout:``,stderr:`screenshot: ${l.error}\n`,exitCode:1}:{stdout:l.message+`
1221
+ `,stderr:``,exitCode:0}},fT=async({browser:e,fs:t,positional:n,flags:r,sessionRoot:i,onTab:a})=>{let o=j(r);if(`error`in o)return{stdout:``,stderr:o.error,exitCode:1};let s=r.filename??n[0]??`${i}/storage-state.json`,c=[],l=[],u=``;await a(o.targetId,async e=>{c=(await e.send(`Network.getCookies`)).cookies??[];let{sessionId:t,transport:n}=e;u=(await n.send(`Runtime.evaluate`,{expression:`location.origin`,returnByValue:!0},t)).result.value??``;let r=(await n.send(`Runtime.evaluate`,{expression:`JSON.stringify(Object.entries(localStorage).map(([name,value])=>({name,value})))`,returnByValue:!0},t)).result.value??`[]`;l=JSON.parse(r)});let d=JSON.stringify({cookies:c,origins:u?[{origin:u,localStorage:l}]:[]},null,2);return await t.writeFile(s,d),{stdout:`Saved storage state to ${s}\n`,stderr:``,exitCode:0}},pT=async({browser:e,fs:t,positional:n,flags:r,onTab:i})=>{if(n.length===0)return{stdout:``,stderr:`state-load requires a filename
1222
1222
  `,exitCode:1};let a=j(r);if(`error`in a)return{stdout:``,stderr:a.error,exitCode:1};let o=n[0],s;try{let e=await t.readTextFile(o);s=JSON.parse(e)}catch{return{stdout:``,stderr:`Failed to read storage state from ${o}\n`,exitCode:1}}let c=[];(s.cookies?.length||s.origins?.length)&&await i(a.targetId,async e=>{if(s.cookies?.length&&await e.send(`Network.setCookies`,{cookies:s.cookies}),!s.origins?.length)return;let{sessionId:t,transport:n}=e,r=(await n.send(`Runtime.evaluate`,{expression:`location.origin`,returnByValue:!0},t)).result.value??``,i=s.origins.filter(e=>e.origin===r);c=s.origins.filter(e=>e.origin!==r);for(let{localStorage:e}of i){let r=`(function() {
1223
1223
  var items = ${JSON.stringify(e)};
1224
1224
  for (var i = 0; i < items.length; i++) {
1225
1225
  localStorage.setItem(items[i].name, items[i].value);
1226
1226
  }
1227
- })()`;await n.send(`Runtime.evaluate`,{expression:r,returnByValue:!0},t)}});let l=``;return c.length>0&&(l=`Skipped localStorage for non-matching origins: ${c.map(e=>e.origin).join(`, `)}\n`),{stdout:`Loaded storage state from ${o}\n`,stderr:l,exitCode:0}};function fT(e,t){return{list:async({browser:e,flags:n,onTab:r})=>{let i=j(n);return`error`in i?{stdout:``,stderr:i.error,exitCode:1}:{stdout:await r(i.targetId,async e=>{let n=await e.evaluate(`JSON.stringify(Object.entries(${t}))`),r=JSON.parse(n);return r.length===0?`No ${t} entries`:r.map(([e,t])=>`${e}=${t}`).join(`
1227
+ })()`;await n.send(`Runtime.evaluate`,{expression:r,returnByValue:!0},t)}});let l=``;return c.length>0&&(l=`Skipped localStorage for non-matching origins: ${c.map(e=>e.origin).join(`, `)}\n`),{stdout:`Loaded storage state from ${o}\n`,stderr:l,exitCode:0}};function mT(e,t){return{list:async({browser:e,flags:n,onTab:r})=>{let i=j(n);return`error`in i?{stdout:``,stderr:i.error,exitCode:1}:{stdout:await r(i.targetId,async e=>{let n=await e.evaluate(`JSON.stringify(Object.entries(${t}))`),r=JSON.parse(n);return r.length===0?`No ${t} entries`:r.map(([e,t])=>`${e}=${t}`).join(`
1228
1228
  `)})+`
1229
1229
  `,stderr:``,exitCode:0}},get:async({browser:n,positional:r,flags:i,onTab:a})=>{if(r.length===0)return{stdout:``,stderr:`${e}-get requires a key\n`,exitCode:1};let o=j(i);return`error`in o?{stdout:``,stderr:o.error,exitCode:1}:{stdout:await a(o.targetId,async e=>{let n=await e.evaluate(`${t}.getItem(${JSON.stringify(r[0])})`);if(n===null)throw Error(`Key "${r[0]}" not found in ${t}`);return n})+`
1230
- `,stderr:``,exitCode:0}},set:async({browser:n,positional:r,flags:i,onTab:a})=>{if(r.length<2)return{stdout:``,stderr:`${e}-set requires <key> <value>\n`,exitCode:1};let o=j(i);return`error`in o?{stdout:``,stderr:o.error,exitCode:1}:(await a(o.targetId,async e=>{await e.evaluate(`${t}.setItem(${JSON.stringify(r[0])}, ${JSON.stringify(r.slice(1).join(` `))})`)}),{stdout:`${t} "${r[0]}" set\n`,stderr:``,exitCode:0})},del:async({browser:n,positional:r,flags:i,onTab:a})=>{if(r.length===0)return{stdout:``,stderr:`${e}-delete requires a key\n`,exitCode:1};let o=j(i);return`error`in o?{stdout:``,stderr:o.error,exitCode:1}:(await a(o.targetId,async e=>{await e.evaluate(`${t}.removeItem(${JSON.stringify(r[0])})`)}),{stdout:`${t} "${r[0]}" deleted\n`,stderr:``,exitCode:0})},clear:async({browser:e,flags:n,onTab:r})=>{let i=j(n);return`error`in i?{stdout:``,stderr:i.error,exitCode:1}:(await r(i.targetId,async e=>{await e.evaluate(`${t}.clear()`)}),{stdout:`${t} cleared\n`,stderr:``,exitCode:0})}}}const pT=fT(`localstorage`,`localStorage`),mT=fT(`sessionstorage`,`sessionStorage`),hT=e(`playwright`),gT={width:412,height:915,deviceScaleFactor:2.625};function _T(e,t,n,r,i){let a=n[`teleport-start`],o=n[`teleport-return`];if(!a||!o)return null;hT.info(`Arming teleport via open/tab-new flags`),hT.debug(`Arming teleport via open/tab-new flags details`,{targetId:i,startPattern:a,returnPattern:o});let s,c;try{s=new RegExp(a)}catch{return{stdout:``,stderr:`Invalid regex for --teleport-start: ${a}\n`,exitCode:1}}try{c=new RegExp(o)}catch{return{stdout:``,stderr:`Invalid regex for --teleport-return: ${o}\n`,exitCode:1}}let l=n.timeout?parseInt(n.timeout,10):300,u=t.teleportWatchers.get(i);return u&&(dw(u),t.teleportWatchers.delete(i)),fw(e,t,s,c,l*1e3,n[`teleport-runtime`],r,i),null}const vT=async({browser:e,fs:t,state:n,positional:r,flags:i,onTab:a})=>{let o=r[0]||`about:blank`,s=i.runtime,c=i.mobile===`true`;await re(e,n);let l=c?`about:blank`:o,u;if(u=s?await e.createRemotePage(s,l):await e.createPage(l),c&&await a(u,async e=>{await e.setViewportOverride(gT.width,gT.height,{deviceScaleFactor:gT.deviceScaleFactor,mobile:!0,userAgent:`Mozilla/5.0 (Linux; Android 14; Pixel 8) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Mobile Safari/537.36`}),o!==`about:blank`&&await e.navigate(o)}),i.foreground===`true`||i.fg===`true`)try{await a(u,e=>e.bringToFront())}catch(e){hT.debug(`open/tab-new --foreground bringToFront failed`,{targetId:u,error:e instanceof Error?e.message:String(e)})}let d=_T(e,n,i,o,u);if(d)return d;if(i.discover===`true`){let{browseShWarning:e,...n}=await pC(o,{discover:!0,fs:t}),r={action:`open`,targetId:u,source:`auxiliary-fetch`,...n};return{stdout:JSON.stringify(r,null,2)+`
1231
- `,stderr:e?`${e}\n`:``,exitCode:0}}return{stdout:`Opened ${o} in new tab [targetId: ${u}]\n`,stderr:``,exitCode:0}},yT=async({browser:e,state:t})=>{let n=await ie(e,t);return n.length===0?{stdout:`No tabs open
1230
+ `,stderr:``,exitCode:0}},set:async({browser:n,positional:r,flags:i,onTab:a})=>{if(r.length<2)return{stdout:``,stderr:`${e}-set requires <key> <value>\n`,exitCode:1};let o=j(i);return`error`in o?{stdout:``,stderr:o.error,exitCode:1}:(await a(o.targetId,async e=>{await e.evaluate(`${t}.setItem(${JSON.stringify(r[0])}, ${JSON.stringify(r.slice(1).join(` `))})`)}),{stdout:`${t} "${r[0]}" set\n`,stderr:``,exitCode:0})},del:async({browser:n,positional:r,flags:i,onTab:a})=>{if(r.length===0)return{stdout:``,stderr:`${e}-delete requires a key\n`,exitCode:1};let o=j(i);return`error`in o?{stdout:``,stderr:o.error,exitCode:1}:(await a(o.targetId,async e=>{await e.evaluate(`${t}.removeItem(${JSON.stringify(r[0])})`)}),{stdout:`${t} "${r[0]}" deleted\n`,stderr:``,exitCode:0})},clear:async({browser:e,flags:n,onTab:r})=>{let i=j(n);return`error`in i?{stdout:``,stderr:i.error,exitCode:1}:(await r(i.targetId,async e=>{await e.evaluate(`${t}.clear()`)}),{stdout:`${t} cleared\n`,stderr:``,exitCode:0})}}}const hT=mT(`localstorage`,`localStorage`),gT=mT(`sessionstorage`,`sessionStorage`),_T=e(`playwright`),vT={width:412,height:915,deviceScaleFactor:2.625};function yT(e,t,n,r,i){let a=n[`teleport-start`],o=n[`teleport-return`];if(!a||!o)return null;_T.info(`Arming teleport via open/tab-new flags`),_T.debug(`Arming teleport via open/tab-new flags details`,{targetId:i,startPattern:a,returnPattern:o});let s,c;try{s=new RegExp(a)}catch{return{stdout:``,stderr:`Invalid regex for --teleport-start: ${a}\n`,exitCode:1}}try{c=new RegExp(o)}catch{return{stdout:``,stderr:`Invalid regex for --teleport-return: ${o}\n`,exitCode:1}}let l=n.timeout?parseInt(n.timeout,10):300,u=t.teleportWatchers.get(i);return u&&(dw(u),t.teleportWatchers.delete(i)),fw(e,t,s,c,l*1e3,n[`teleport-runtime`],r,i),null}const bT=async({browser:e,fs:t,state:n,positional:r,flags:i,onTab:a})=>{let o=r[0]||`about:blank`,s=i.runtime,c=i.mobile===`true`;await re(e,n);let l=c?`about:blank`:o,u;if(u=s?await e.createRemotePage(s,l):await e.createPage(l),c&&await a(u,async e=>{await e.setViewportOverride(vT.width,vT.height,{deviceScaleFactor:vT.deviceScaleFactor,mobile:!0,userAgent:`Mozilla/5.0 (Linux; Android 14; Pixel 8) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Mobile Safari/537.36`}),o!==`about:blank`&&await e.navigate(o)}),i.foreground===`true`||i.fg===`true`)try{await a(u,e=>e.bringToFront())}catch(e){_T.debug(`open/tab-new --foreground bringToFront failed`,{targetId:u,error:e instanceof Error?e.message:String(e)})}let d=yT(e,n,i,o,u);if(d)return d;if(i.discover===`true`){let{browseShWarning:e,...n}=await pC(o,{discover:!0,fs:t}),r={action:`open`,targetId:u,source:`auxiliary-fetch`,...n};return{stdout:JSON.stringify(r,null,2)+`
1231
+ `,stderr:e?`${e}\n`:``,exitCode:0}}return{stdout:`Opened ${o} in new tab [targetId: ${u}]\n`,stderr:``,exitCode:0}},xT=async({browser:e,state:t})=>{let n=await ie(e,t);return n.length===0?{stdout:`No tabs open
1232
1232
  `,stderr:``,exitCode:0}:{stdout:n.map(e=>{let t=!!e.active,n=e.targetId.includes(`:`),r=t?` (active)`:``,i=n?` [remote:${e.targetId.substring(0,e.targetId.indexOf(`:`))}]`:``;return`[${e.targetId}] ${e.url} "${e.title}"${r}${i}`}).join(`
1233
1233
  `)+`
1234
- `,stderr:``,exitCode:0}},bT=async({browser:e,state:t,flags:n})=>{let r=j(n);if(`error`in r)return{stdout:``,stderr:r.error,exitCode:1};await e.closePage(r.targetId),t.snapshots.delete(r.targetId),t.teleportWatchers.delete(r.targetId),t.consoleMessages.delete(r.targetId);let i=t.consoleCleanup.get(r.targetId);i&&(i(),t.consoleCleanup.delete(r.targetId)),t.networkRequests.delete(r.targetId);let a=t.networkCleanup.get(r.targetId);a&&(a(),t.networkCleanup.delete(r.targetId));let o=t.routeCleanup.get(r.targetId);return o&&(o(),t.routeCleanup.delete(r.targetId)),t.routes.delete(r.targetId),t.lastMousePosition.delete(r.targetId),{stdout:`Closed tab ${r.targetId}\n`,stderr:``,exitCode:0}},xT=async({browser:e,state:t,positional:n,onTab:r})=>{if(n.length===0)return{stdout:``,stderr:`tab-select requires a tab index
1234
+ `,stderr:``,exitCode:0}},ST=async({browser:e,state:t,flags:n})=>{let r=j(n);if(`error`in r)return{stdout:``,stderr:r.error,exitCode:1};await e.closePage(r.targetId),t.snapshots.delete(r.targetId),t.teleportWatchers.delete(r.targetId),t.consoleMessages.delete(r.targetId);let i=t.consoleCleanup.get(r.targetId);i&&(i(),t.consoleCleanup.delete(r.targetId)),t.networkRequests.delete(r.targetId);let a=t.networkCleanup.get(r.targetId);a&&(a(),t.networkCleanup.delete(r.targetId));let o=t.routeCleanup.get(r.targetId);return o&&(o(),t.routeCleanup.delete(r.targetId)),t.routes.delete(r.targetId),t.lastMousePosition.delete(r.targetId),{stdout:`Closed tab ${r.targetId}\n`,stderr:``,exitCode:0}},CT=async({browser:e,state:t,positional:n,onTab:r})=>{if(n.length===0)return{stdout:``,stderr:`tab-select requires a tab index
1235
1235
  `,exitCode:1};let i=n[0];if(!/^[0-9]+$/.test(i))return{stdout:``,stderr:`tab-select index must be a positive integer
1236
1236
  `,exitCode:1};let a=parseInt(i,10);if(a<1)return{stdout:``,stderr:`tab-select index must be a positive integer
1237
- `,exitCode:1};let o=await ie(e,t);if(a>o.length)return{stdout:``,stderr:`tab-select index ${a} out of range (${o.length} tab${o.length===1?``:`s`} open)\n`,exitCode:1};let s=o[a-1].targetId;return await r(s,e=>e.bringToFront()),{stdout:`Selected tab ${a} [targetId: ${s}]\n`,stderr:``,exitCode:0}},ST=async({browser:e,state:t,positional:n,flags:r,onTab:i})=>{if(n.length<2)return{stdout:``,stderr:`resize requires <width> <height>
1237
+ `,exitCode:1};let o=await ie(e,t);if(a>o.length)return{stdout:``,stderr:`tab-select index ${a} out of range (${o.length} tab${o.length===1?``:`s`} open)\n`,exitCode:1};let s=o[a-1].targetId;return await r(s,e=>e.bringToFront()),{stdout:`Selected tab ${a} [targetId: ${s}]\n`,stderr:``,exitCode:0}},wT=async({browser:e,state:t,positional:n,flags:r,onTab:i})=>{if(n.length<2)return{stdout:``,stderr:`resize requires <width> <height>
1238
1238
  `,exitCode:1};let a=j(r);if(`error`in a)return{stdout:``,stderr:a.error,exitCode:1};let o=parseInt(n[0],10),s=parseInt(n[1],10);return isNaN(o)||isNaN(s)||o<=0||s<=0?{stdout:``,stderr:`resize requires positive integer width and height
1239
- `,exitCode:1}:(await i(a.targetId,e=>e.setViewportOverride(o,s)),t.snapshots.delete(a.targetId),{stdout:`Resized viewport to ${o}x${s}\n`,stderr:``,exitCode:0})},CT=e(`playwright-teleport`);function wT(){CT.info(`Listing available follower runtimes`);let e=lw();if(!e)return{stdout:``,stderr:`teleport: not connected to a tray
1239
+ `,exitCode:1}:(await i(a.targetId,e=>e.setViewportOverride(o,s)),t.snapshots.delete(a.targetId),{stdout:`Resized viewport to ${o}x${s}\n`,stderr:``,exitCode:0})},TT=e(`playwright-teleport`);function ET(){TT.info(`Listing available follower runtimes`);let e=lw();if(!e)return{stdout:``,stderr:`teleport: not connected to a tray
1240
1240
  `,exitCode:1};let t=e();if(t.length===0)return{stdout:`No followers connected to the tray.
1241
1241
  `,stderr:``,exitCode:0};let n=[`Available runtimes for teleport:`];for(let e of t){let t=[e.runtimeId];if(e.floatType&&t.push(`[${e.floatType}]`),e.runtime&&t.push(`(${e.runtime})`),e.lastActivity){let n=Math.round((Date.now()-e.lastActivity)/1e3);t.push(`active ${n}s ago`)}n.push(` ${t.join(` `)}`)}return{stdout:n.join(`
1242
1242
  `)+`
1243
- `,stderr:``,exitCode:0}}function TT({state:e,flags:t}){let n=j(t);if(`error`in n)return{stdout:``,stderr:n.error,exitCode:1};CT.info(`Disarming teleport watcher via --off`,{targetId:n.targetId});let r=e.teleportWatchers.get(n.targetId);return r&&(dw(r),e.teleportWatchers.delete(n.targetId)),{stdout:`Teleport watcher disarmed
1244
- `,stderr:``,exitCode:0}}function ET(e,t){let n,r;try{n=new RegExp(e)}catch{return{error:`Invalid regex for --start: ${e}\n`}}try{r=new RegExp(t)}catch{return{error:`Invalid regex for --return: ${t}\n`}}return{startPattern:n,returnPattern:r}}function DT(e){return(lw()?.()??[]).find(t=>t.runtimeId===e)?.runtime===`slicc-cherry`?`teleport: runtime ${e} is a cherry host and cannot serve a cookie teleport (no Network.* access)\n`:null}async function OT({browser:e,state:t,flags:n,onTab:r,signal:i}){let a=j(n);if(`error`in a)return{stdout:``,stderr:a.error,exitCode:1};let o=n.start||n[`teleport-start`],s=n.return||n[`teleport-return`];if(!o||!s)return{stdout:``,stderr:`teleport requires --start <regex> and --return <regex>
1245
- `,exitCode:1};let c=ET(o,s);if(`error`in c)return{stdout:``,stderr:c.error,exitCode:1};let l=n.timeout?parseInt(n.timeout,10):300;if(isNaN(l)||l<=0)return{stdout:``,stderr:`--timeout must be a positive number
1246
- `,exitCode:1};let u=n.runtime;if(u){let e=DT(u);if(e)return{stdout:``,stderr:e,exitCode:1}}let d=t.teleportWatchers.get(a.targetId);d&&(CT.info(`Disarming existing teleport watcher before re-arming`,{targetId:a.targetId}),dw(d),t.teleportWatchers.delete(a.targetId));let f;try{let e=await r(a.targetId,e=>e.evaluate(`window.location.href`));f=typeof e==`string`?e:String(e)}catch{}return CT.info(`Arming teleport via explicit subcommand`,{targetId:a.targetId,timeoutSec:l,runtimeSelection:u?`explicit`:`auto`}),CT.debug(`Arming teleport via explicit subcommand details`,{targetId:a.targetId,startPattern:o,returnPattern:s,timeoutSec:l,runtimeId:u??`auto`,leaderUrl:f}),xn(i,`about to arm a teleport watcher on tab ${a.targetId}`),fw(e,t,c.startPattern,c.returnPattern,l*1e3,u,f,a.targetId),{stdout:`Teleport armed on tab ${a.targetId}. Will trigger when URL matches ${o}\n`,stderr:``,exitCode:0}}const kT=async e=>e.flags.list===`true`?wT():e.flags.off===`true`?TT(e):OT(e),AT={png:`image/png`,jpg:`image/jpeg`,jpeg:`image/jpeg`,gif:`image/gif`,webp:`image/webp`,svg:`image/svg+xml`,pdf:`application/pdf`,txt:`text/plain`,json:`application/json`,csv:`text/csv`,html:`text/html`,htm:`text/html`,xml:`application/xml`,zip:`application/zip`,mp4:`video/mp4`,mp3:`audio/mpeg`};function jT(e){let t=e.split(`.`).pop()?.toLowerCase()??``;return AT[t]??`application/octet-stream`}function MT(e,t){if(e.length===0)return{error:`upload requires at least one file path
1243
+ `,stderr:``,exitCode:0}}function DT({state:e,flags:t}){let n=j(t);if(`error`in n)return{stdout:``,stderr:n.error,exitCode:1};TT.info(`Disarming teleport watcher via --off`,{targetId:n.targetId});let r=e.teleportWatchers.get(n.targetId);return r&&(dw(r),e.teleportWatchers.delete(n.targetId)),{stdout:`Teleport watcher disarmed
1244
+ `,stderr:``,exitCode:0}}function OT(e,t){let n,r;try{n=new RegExp(e)}catch{return{error:`Invalid regex for --start: ${e}\n`}}try{r=new RegExp(t)}catch{return{error:`Invalid regex for --return: ${t}\n`}}return{startPattern:n,returnPattern:r}}function kT(e){return(lw()?.()??[]).find(t=>t.runtimeId===e)?.runtime===`slicc-cherry`?`teleport: runtime ${e} is a cherry host and cannot serve a cookie teleport (no Network.* access)\n`:null}async function AT({browser:e,state:t,flags:n,onTab:r,signal:i}){let a=j(n);if(`error`in a)return{stdout:``,stderr:a.error,exitCode:1};let o=n.start||n[`teleport-start`],s=n.return||n[`teleport-return`];if(!o||!s)return{stdout:``,stderr:`teleport requires --start <regex> and --return <regex>
1245
+ `,exitCode:1};let c=OT(o,s);if(`error`in c)return{stdout:``,stderr:c.error,exitCode:1};let l=n.timeout?parseInt(n.timeout,10):300;if(isNaN(l)||l<=0)return{stdout:``,stderr:`--timeout must be a positive number
1246
+ `,exitCode:1};let u=n.runtime;if(u){let e=kT(u);if(e)return{stdout:``,stderr:e,exitCode:1}}let d=t.teleportWatchers.get(a.targetId);d&&(TT.info(`Disarming existing teleport watcher before re-arming`,{targetId:a.targetId}),dw(d),t.teleportWatchers.delete(a.targetId));let f;try{let e=await r(a.targetId,e=>e.evaluate(`window.location.href`));f=typeof e==`string`?e:String(e)}catch{}return TT.info(`Arming teleport via explicit subcommand`,{targetId:a.targetId,timeoutSec:l,runtimeSelection:u?`explicit`:`auto`}),TT.debug(`Arming teleport via explicit subcommand details`,{targetId:a.targetId,startPattern:o,returnPattern:s,timeoutSec:l,runtimeId:u??`auto`,leaderUrl:f}),xn(i,`about to arm a teleport watcher on tab ${a.targetId}`),fw(e,t,c.startPattern,c.returnPattern,l*1e3,u,f,a.targetId),{stdout:`Teleport armed on tab ${a.targetId}. Will trigger when URL matches ${o}\n`,stderr:``,exitCode:0}}const jT=async e=>e.flags.list===`true`?ET():e.flags.off===`true`?DT(e):AT(e),MT={png:`image/png`,jpg:`image/jpeg`,jpeg:`image/jpeg`,gif:`image/gif`,webp:`image/webp`,svg:`image/svg+xml`,pdf:`application/pdf`,txt:`text/plain`,json:`application/json`,csv:`text/csv`,html:`text/html`,htm:`text/html`,xml:`application/xml`,zip:`application/zip`,mp4:`video/mp4`,mp3:`audio/mpeg`};function NT(e){let t=e.split(`.`).pop()?.toLowerCase()??``;return MT[t]??`application/octet-stream`}function PT(e,t){if(e.length===0)return{error:`upload requires at least one file path
1247
1247
  `};if(!jn(e[0]))return{targetRef:null,filePaths:e};let n=e[0],r=e.slice(1);return t?t.refToBackendNodeId.has(n)?r.length===0?{error:`upload requires at least one file path
1248
1248
  `}:{targetRef:n,filePaths:r}:{error:`Unknown ref "${n}"\n`}:{error:`No snapshot available. Run "snapshot" first.
1249
- `}}const NT=new Map([[`teleport`,kT],[`open`,vT],[`tab-new`,vT],[`fetch`,mC],[`goto`,xw],[`navigate`,xw],[`snapshot`,nT],[`find`,rT],[`frames`,iT],[`screenshot`,lT],[`click`,bC],[`type`,xC],[`fill`,SC],[`eval`,cC],[`eval-file`,lC],[`press`,CC],[`keydown`,wC],[`keyup`,TC],[`go-back`,Sw],[`go-forward`,Cw],[`reload`,ww],[`tab-list`,yT],[`tab-close`,bT],[`close`,bT],[`dblclick`,EC],[`hover`,DC],[`select`,OC],[`check`,kC],[`uncheck`,AC],[`drag`,jC],[`resize`,ST],[`dialog-accept`,nC],[`dialog-dismiss`,rC],[`cookie-list`,YS],[`cookie-get`,XS],[`cookie-set`,ZS],[`cookie-delete`,QS],[`cookie-clear`,$S],[`localstorage-list`,pT.list],[`localstorage-get`,pT.get],[`localstorage-set`,pT.set],[`localstorage-delete`,pT.del],[`localstorage-clear`,pT.clear],[`sessionstorage-list`,mT.list],[`sessionstorage-get`,mT.get],[`sessionstorage-set`,mT.set],[`sessionstorage-delete`,mT.del],[`sessionstorage-clear`,mT.clear],[`record`,Rw],[`stop-recording`,zw],[`tab-select`,xT],[`pdf`,aT],[`network-state-set`,Tw],[`upload`,async({browser:e,fs:n,state:r,positional:i,flags:a,onTab:o})=>{let s=j(a);if(`error`in s)return{stdout:``,stderr:s.error,exitCode:1};let c=r.snapshots.get(s.targetId),l=MT(i,c);if(`error`in l)return{stdout:``,stderr:l.error,exitCode:1};let{targetRef:u,filePaths:d}=l,f=[];for(let e of d){let r=await MC(n,e),i=e.split(`/`).pop()??e;f.push({name:i,type:jT(i),base64:t(r)})}if(u){let e=c.refToBackendNodeId.get(u);await o(s.targetId,async({sessionId:t,transport:n})=>{await n.send(`DOM.enable`,{},t);let{object:r}=await n.send(`DOM.resolveNode`,{backendNodeId:e},t),i=await n.send(`Runtime.callFunctionOn`,{objectId:r.objectId,functionDeclaration:`function(filesData) {
1249
+ `}}const FT=new Map([[`teleport`,jT],[`open`,bT],[`tab-new`,bT],[`fetch`,mC],[`goto`,xw],[`navigate`,xw],[`snapshot`,iT],[`find`,aT],[`frames`,oT],[`screenshot`,dT],[`click`,bC],[`type`,xC],[`fill`,SC],[`eval`,cC],[`eval-file`,lC],[`press`,CC],[`keydown`,wC],[`keyup`,TC],[`go-back`,Sw],[`go-forward`,Cw],[`reload`,ww],[`tab-list`,xT],[`tab-close`,ST],[`close`,ST],[`dblclick`,EC],[`hover`,DC],[`select`,OC],[`check`,kC],[`uncheck`,AC],[`drag`,jC],[`resize`,wT],[`dialog-accept`,nC],[`dialog-dismiss`,rC],[`cookie-list`,YS],[`cookie-get`,XS],[`cookie-set`,ZS],[`cookie-delete`,QS],[`cookie-clear`,$S],[`localstorage-list`,hT.list],[`localstorage-get`,hT.get],[`localstorage-set`,hT.set],[`localstorage-delete`,hT.del],[`localstorage-clear`,hT.clear],[`sessionstorage-list`,gT.list],[`sessionstorage-get`,gT.get],[`sessionstorage-set`,gT.set],[`sessionstorage-delete`,gT.del],[`sessionstorage-clear`,gT.clear],[`record`,Rw],[`stop-recording`,zw],[`tab-select`,CT],[`pdf`,sT],[`network-state-set`,Tw],[`upload`,async({browser:e,fs:n,state:r,positional:i,flags:a,onTab:o})=>{let s=j(a);if(`error`in s)return{stdout:``,stderr:s.error,exitCode:1};let c=r.snapshots.get(s.targetId),l=PT(i,c);if(`error`in l)return{stdout:``,stderr:l.error,exitCode:1};let{targetRef:u,filePaths:d}=l,f=[];for(let e of d){let r=await MC(n,e),i=e.split(`/`).pop()??e;f.push({name:i,type:NT(i),base64:t(r)})}if(u){let e=c.refToBackendNodeId.get(u);await o(s.targetId,async({sessionId:t,transport:n})=>{await n.send(`DOM.enable`,{},t);let{object:r}=await n.send(`DOM.resolveNode`,{backendNodeId:e},t),i=await n.send(`Runtime.callFunctionOn`,{objectId:r.objectId,functionDeclaration:`function(filesData) {
1250
1250
  const el = this;
1251
1251
  if (el.tagName !== 'INPUT' || el.type !== 'file') {
1252
1252
  throw new Error('Element ' + el.tagName + ' is not a file input');
@@ -1277,12 +1277,12 @@ Options:
1277
1277
  el.dispatchEvent(new Event('change', { bubbles: true }));
1278
1278
  el.dispatchEvent(new Event('input', { bubbles: true }));
1279
1279
  return el.files.length;
1280
- })()`,r=await t.send(`Runtime.evaluate`,{expression:n,returnByValue:!0,awaitPromise:!1},e);if(r.exceptionDetails){let e=r.exceptionDetails.exception?.description??r.exceptionDetails.text??`File upload failed`;throw Error(e)}});let p=d.map(e=>e.split(`/`).pop()??e).join(`, `);return{stdout:`Uploaded ${d.length} file(s): ${p}\n`,stderr:``,exitCode:0}}],[`state-save`,uT],[`state-load`,dT],[`console`,WS],[`requests`,Mw],[`request`,Nw],[`request-headers`,Pw],[`request-body`,Fw],[`response-headers`,Iw],[`response-body`,Lw],[`mousemove`,IC],[`mousedown`,LC],[`mouseup`,RC],[`mousewheel`,zC],[`drop`,BC],[`route`,Gw],[`route-list`,Kw],[`unroute`,qw],[`generate-locator`,eC],[`highlight`,tC]]);function PT(){let e=(Dn.string??[]).map(e=>`--${e}`),t=new Set(Dn.boolean??[]);for(let[e,n]of Object.entries(Dn.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 FT(e){return e.map(e=>e===`--no-iframes`||e.startsWith(`--no-iframes=`)?e.replace(`--no-iframes`,`--_noiframes`):e)}function IT(e){return{...e,bool:[...e.bool??[],`--_noiframes`],value:[...e.value??[],`--_noiframes`]}}const LT=2e3;function RT(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 zT(e,t,n,r){if(!t||typeof e.getTabLockStats!=`function`)return r;let i=e.getTabLockStats(),a=i.totalWaitMs-t.totalWaitMs;if(a<LT)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>=LT?`${(s/1e3).toFixed(1)}s of it waiting on this tab (--tab=${n})`:`all of it waiting on the bridge, not on this tab`} (queue depth ${i.queueDepth}). Commands on the same tab serialize; commands on different tabs run in parallel — stagger callers on THIS tab, or give each caller its own tab.
1281
- `;return{...r,stderr:r.stderr+c}}async function BT(e,t,n){let r=n instanceof Error?n.message:String(n);return{stdout:``,stderr:`Error: ${(t.tab?await On(e,t.tab,n):null)??r}\n`,exitCode:1}}function VT(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 HT(e,t,n){let r=NT.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?VT(e,t,void 0):a}catch(r){return i?.aborted?VT(e,t,r):await BT(n.browser,n.flags,r)}}async function UT(e,t,n,r){let i=C(FT(n),IT(r));if(`error`in i)return{answer:{stdout:``,stderr:`${e} ${t}: ${i.error}\n`,exitCode:1}};let a;try{({flags:a}=En(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-p6vq-7bY.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 WT(e,t,n){let r=t?Cn(t,n):null,i=PT();return S(e,async(a,o)=>{if(a.length===0||a[0]===`help`||a[0]===`--help`||a[0]===`-h`){let{formatHelp:t}=await import(`./help-p6vq-7bY.js`);return{stdout:t(e)+`
1282
- `,stderr:``,exitCode:0}}let s=a[0],c=a.slice(1),l=await UT(e,s,c,i);if(`answer`in l)return l.answer;let{positional:u,flags:d}=l;if(!t||!r)return{stdout:``,stderr:`${e}: browser APIs are unavailable in this environment\n`,exitCode:1};let f=d.tab??null,p=RT(t,f),m=await HT(e,s,{browser:t,fs:n,state:r,positional:u,flags:d,scratchDir:zi(o.env),onTab:(e,n)=>t.withTab(e,n,{signal:o.signal}),signal:o.signal}),h=d.tab??null,g=null;Pn.has(s)&&m.exitCode===0&&h&&(g=await Yw(t,n,h,r));try{await Xw(n,r,{command:s,args:c,result:m,snapshotPath:g,targetId:h})}catch{}return zT(t,p,f,m)})}const GT=new Map([[`File operations`,[`ls`,`cat`,`head`,`tail`,`wc`,`touch`,`mkdir`,`rm`,`cp`,`mv`,`ln`,`chmod`,`stat`,`readlink`,`file`,`rmdir`,`rsync`]],[`Text processing`,[`grep`,`sed`,`awk`,`sort`,`uniq`,`cut`,`tr`,`tee`,`diff`,`patch`,`column`,`comm`,`egrep`,`fgrep`,`expand`,`unexpand`,`fold`,`join`,`nl`,`od`,`paste`,`rev`,`split`,`strings`,`tac`]],[`Search`,[`find`,`rg`]],[`Navigation & paths`,[`pwd`,`basename`,`dirname`,`tree`,`du`,`cd`]],[`Archives`,[`zip`,`unzip`,`pdftk`,`pdf`,`gunzip`,`gzip`,`zcat`]],[`Media`,[`convert`,`magick`,`pdftoppm`,`pdftocairo`,`pdftotext`,`ffmpeg`,`ffprobe`,`screencapture`]],[`Audio`,[`say`,`hear`,`afplay`,`chime`]],[`Environment & shell`,`echo.printf.env.printenv.export.alias.unalias.history.clear.true.false.bash.sh.commands.which.uname.man.host.oauth-token.secret.nuke.models.local-llm.cost.hostname.whoami.id.help.sleep.time.timeout.oauth-domain`.split(`.`)],[`Data processing`,[`xargs`,`jq`,`base64`,`date`,`expr`,`seq`]],[`Hashes`,[`md5sum`,`sha1sum`,`sha256sum`]],[`Network`,[`curl`,`curlwright`,`wget`,`dig`,`websocat`,`html-to-markdown`]],[`Version control`,[`git`]],[`Languages`,[`node`,`jsh`,`python`,`python3`,`sqlite3`]],[`Virtualization`,[`v86`,`computer`]],[`Build tools`,[`tsc`,`tst`,`esbuild`,`biome`]],[`Packages`,[`ipk`,`hf`,`npm`,`i`,`ipx`,`npx`]],[`Skills`,[`skill`,`upskill`]],[`Browser & UI`,[`serve`,`open`,`imgcat`,...Mn,`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)`,[...zg]]]);function KT(e,t=[],n=[]){let r=[],i=new Set(e);for(let e of t)i.delete(e);for(let e of n)i.delete(e);r.push(`Available commands:
1283
- `);let a=[];for(let[e,t]of GT){let n=t.filter(e=>i.has(e));if(n.length>0){r.push(` ${e}:`),r.push(` ${n.join(`, `)}\n`);for(let e of n)i.delete(e)}}for(let e of i)a.push(e);return a.length>0&&(r.push(` Other:`),r.push(` ${a.sort().join(`, `)}\n`)),t.length>0&&(r.push(` User scripts (.jsh):`),r.push(` ${t.sort().join(`, `)}\n`)),n.length>0&&(r.push(` Workflows:`),r.push(` ${n.sort().join(`, `)}\n`)),r.push(`Use '<command> --help' for details on a specific command.`),r.join(`
1280
+ })()`,r=await t.send(`Runtime.evaluate`,{expression:n,returnByValue:!0,awaitPromise:!1},e);if(r.exceptionDetails){let e=r.exceptionDetails.exception?.description??r.exceptionDetails.text??`File upload failed`;throw Error(e)}});let p=d.map(e=>e.split(`/`).pop()??e).join(`, `);return{stdout:`Uploaded ${d.length} file(s): ${p}\n`,stderr:``,exitCode:0}}],[`state-save`,fT],[`state-load`,pT],[`console`,WS],[`requests`,Mw],[`request`,Nw],[`request-headers`,Pw],[`request-body`,Fw],[`response-headers`,Iw],[`response-body`,Lw],[`mousemove`,IC],[`mousedown`,LC],[`mouseup`,RC],[`mousewheel`,zC],[`drop`,BC],[`route`,Gw],[`route-list`,Kw],[`unroute`,qw],[`generate-locator`,eC],[`highlight`,tC]]);function IT(){let e=(Dn.string??[]).map(e=>`--${e}`),t=new Set(Dn.boolean??[]);for(let[e,n]of Object.entries(Dn.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 LT(e){return e.map(e=>e===`--no-iframes`||e.startsWith(`--no-iframes=`)?e.replace(`--no-iframes`,`--_noiframes`):e)}function RT(e){return{...e,bool:[...e.bool??[],`--_noiframes`],value:[...e.value??[],`--_noiframes`]}}const zT=2e3;function BT(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 VT(e,t,n,r){if(!t||typeof e.getTabLockStats!=`function`)return r;let i=e.getTabLockStats(),a=i.totalWaitMs-t.totalWaitMs;if(a<zT)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>=zT?`${(s/1e3).toFixed(1)}s of it waiting on this tab (--tab=${n})`:`all of it waiting on the bridge, not on this tab`} (queue depth ${i.queueDepth}). Commands on the same tab serialize; commands on different tabs run in parallel — stagger callers on THIS tab, or give each caller its own tab.
1281
+ `;return{...r,stderr:r.stderr+c}}async function HT(e,t,n){let r=n instanceof Error?n.message:String(n);return{stdout:``,stderr:`Error: ${(t.tab?await On(e,t.tab,n):null)??r}\n`,exitCode:1}}function UT(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 WT(e,t,n){let r=FT.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?UT(e,t,void 0):a}catch(r){return i?.aborted?UT(e,t,r):await HT(n.browser,n.flags,r)}}async function GT(e,t,n,r){let i=C(LT(n),RT(r));if(`error`in i)return{answer:{stdout:``,stderr:`${e} ${t}: ${i.error}\n`,exitCode:1}};let a;try{({flags:a}=En(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-CNHuyT-F.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 KT(e,t,n,r={}){let i=t?Cn(t,n):null,a=IT();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-CNHuyT-F.js`);return{stdout:t(e)+`
1282
+ `,stderr:``,exitCode:0}}let c=o[0],l=o.slice(1),u=await GT(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=BT(t,p),h=zi(s.env),g=Yw(r.isScoop?.()??!1,h),_=await WT(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;Pn.has(c)&&_.exitCode===0&&v&&(ee=await Zw(t,n,v,i,g));try{await Qw(n,i,g,{command:c,args:l,result:_,snapshotPath:ee,targetId:v})}catch{}return VT(t,m,p,_)})}const qT=new Map([[`File operations`,[`ls`,`cat`,`head`,`tail`,`wc`,`touch`,`mkdir`,`rm`,`cp`,`mv`,`ln`,`chmod`,`stat`,`readlink`,`file`,`rmdir`,`rsync`]],[`Text processing`,[`grep`,`sed`,`awk`,`sort`,`uniq`,`cut`,`tr`,`tee`,`diff`,`patch`,`column`,`comm`,`egrep`,`fgrep`,`expand`,`unexpand`,`fold`,`join`,`nl`,`od`,`paste`,`rev`,`split`,`strings`,`tac`]],[`Search`,[`find`,`rg`]],[`Navigation & paths`,[`pwd`,`basename`,`dirname`,`tree`,`du`,`cd`]],[`Archives`,[`zip`,`unzip`,`pdftk`,`pdf`,`gunzip`,`gzip`,`zcat`]],[`Media`,[`convert`,`magick`,`pdftoppm`,`pdftocairo`,`pdftotext`,`ffmpeg`,`ffprobe`,`screencapture`]],[`Audio`,[`say`,`hear`,`afplay`,`chime`]],[`Environment & shell`,`echo.printf.env.printenv.export.alias.unalias.history.clear.true.false.bash.sh.commands.which.uname.man.host.oauth-token.secret.nuke.models.local-llm.cost.hostname.whoami.id.help.sleep.time.timeout.oauth-domain`.split(`.`)],[`Data processing`,[`xargs`,`jq`,`base64`,`date`,`expr`,`seq`]],[`Hashes`,[`md5sum`,`sha1sum`,`sha256sum`]],[`Network`,[`curl`,`curlwright`,`wget`,`dig`,`websocat`,`html-to-markdown`]],[`Version control`,[`git`]],[`Languages`,[`node`,`jsh`,`python`,`python3`,`sqlite3`]],[`Virtualization`,[`v86`,`computer`]],[`Build tools`,[`tsc`,`tst`,`esbuild`,`biome`]],[`Packages`,[`ipk`,`hf`,`npm`,`i`,`ipx`,`npx`]],[`Skills`,[`skill`,`upskill`]],[`Browser & UI`,[`serve`,`open`,`imgcat`,...Mn,`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)`,[...zg]]]);function JT(e,t=[],n=[]){let r=[],i=new Set(e);for(let e of t)i.delete(e);for(let e of n)i.delete(e);r.push(`Available commands:
1283
+ `);let a=[];for(let[e,t]of qT){let n=t.filter(e=>i.has(e));if(n.length>0){r.push(` ${e}:`),r.push(` ${n.join(`, `)}\n`);for(let e of n)i.delete(e)}}for(let e of i)a.push(e);return a.length>0&&(r.push(` Other:`),r.push(` ${a.sort().join(`, `)}\n`)),t.length>0&&(r.push(` User scripts (.jsh):`),r.push(` ${t.sort().join(`, `)}\n`)),n.length>0&&(r.push(` Workflows:`),r.push(` ${n.sort().join(`, `)}\n`)),r.push(`Use '<command> --help' for details on a specific command.`),r.join(`
1284
1284
  `)+`
1285
- `}function qT(e={}){return S(`commands`,async(t,n)=>{if(t.includes(`--help`)||t.includes(`-h`))return{stdout:`commands - display available commands
1285
+ `}function YT(e={}){return S(`commands`,async(t,n)=>{if(t.includes(`--help`)||t.includes(`-h`))return{stdout:`commands - display available commands
1286
1286
 
1287
1287
  Usage: commands [command]
1288
1288
 
@@ -1293,7 +1293,7 @@ If a command name is provided, shows help for that command.
1293
1293
  Otherwise, lists all available commands.
1294
1294
 
1295
1295
  Note: This is an enhanced version of 'help' that shows all custom commands.
1296
- `,stderr:``,exitCode:0};if(t.length>0&&n.exec){let e=t[0];return n.exec(`${e} --help`,{cwd:n.cwd})}return{stdout:KT(n.getRegisteredCommands?.()??[],await e.getJshCommands?.()??[],await e.getWorkflowCommands?.()??[]),stderr:``,exitCode:0}})}function JT(e){return{stdout:`hf - download model repos from the Hugging Face Hub into the VFS
1296
+ `,stderr:``,exitCode:0};if(t.length>0&&n.exec){let e=t[0];return n.exec(`${e} --help`,{cwd:n.cwd})}return{stdout:JT(n.getRegisteredCommands?.()??[],await e.getJshCommands?.()??[],await e.getWorkflowCommands?.()??[]),stderr:``,exitCode:0}})}function XT(e){return{stdout:`hf - download model repos from the Hugging Face Hub into the VFS
1297
1297
 
1298
1298
  Usage:
1299
1299
  hf download <repo> [files...] [--to <dir>] [--revision <rev>] [--force]
@@ -1315,8 +1315,8 @@ Notes:
1315
1315
  unless --force is passed.
1316
1316
  - Weights are read by the speech engines via the preview SW from the
1317
1317
  target directory; transformers expects <localModelPath>/<repo>/.
1318
- `,stderr:``,exitCode:e}}function YT(e){return{stdout:``,stderr:`hf: ${e}\n`,exitCode:1}}const XT=/^[A-Za-z0-9_.-]+\/[A-Za-z0-9_.-]+$/;function ZT(e){let t=null,n=`main`,r=!1,i=[],a=0;for(;a<e.length;){let o=e[a];if(o===`--to`){let n=e[a+1];if(typeof n!=`string`)return{error:`--to requires a value`};t=n,a+=2;continue}if(o===`--revision`||o===`--rev`){let t=e[a+1];if(typeof t!=`string`)return{error:`${o} requires a value`};n=t,a+=2;continue}if(o===`--force`||o===`-f`){r=!0,a+=1;continue}if(o.startsWith(`--`))return{error:`unknown option: ${o}`};i.push(o),a+=1}if(i.length===0)return{error:`download requires <repo>`};let o=i[0];return XT.test(o)?{repo:o,files:i.slice(1),to:t,revision:n,force:r}:{error:`invalid repo '${o}' — expected <owner>/<name>`}}function QT(e){return e<1024?`${e} B`:e<1048576?`${(e/1024).toFixed(1)} KB`:`${(e/1048576).toFixed(1)} MB`}async function $T(e,t,n){let r=ZT(e);if(`error`in r)return YT(r.error);let i=Ji(r.repo,r.to,t.cwd),a=``;try{let e=await Ui({fetch:n,fs:t.fs,repo:r.repo,targetDir:i,files:r.files,revision:r.revision,force:r.force,endpoint:t.env.get(`HF_ENDPOINT`),progress:{onListed:({files:e})=>{a+=`hf: ${e.length} file(s) listed in ${r.repo}@${r.revision}\n`},onFile:e=>{a+=e.status===`downloaded`?`hf: downloaded ${e.file} (${QT(e.bytes)})\n`:`hf: skipped ${e.file} (already at ${i})\n`}}}),o=`hf: ${e.downloaded} downloaded, ${e.skipped} skipped, ${QT(e.totalBytes)} total into ${i}\n`;return{stdout:``,stderr:a+o,exitCode:0}}catch(e){return e instanceof Hi?(a+=`hf: failed ${e.file}: ${e.message}\n`,{stdout:``,stderr:a,exitCode:1}):YT(e instanceof Error?e.message:String(e))}}function eE(e){return{name:`hf`,async execute(t,n){if(t.length===0||w(t,{valueFlags:[`--to`,`--revision`,`--rev`]}))return JT(+(t.length===0));let r=t[0];return r===`download`?$T(t.slice(1),n,e.fetch):YT(`unknown subcommand: ${r}`)}}}const tE=new Set([`--vid`,`--pid`,`--usage-page`,`--usage`,`--__resolved`,`--timeout`]);function nE(e){return vn(e,tE)}function rE(e,t){let n=/^0x/i.test(e)?parseInt(e,16):parseInt(e,10);if(!Number.isFinite(n)||Number.isNaN(n))throw Error(`invalid ${t}: '${e}'`);return n}function iE(e){let t={};return e.has(`--vid`)&&(t.vendorId=rE(e.get(`--vid`),`vid`)),e.has(`--pid`)&&(t.productId=rE(e.get(`--pid`),`pid`)),e.has(`--usage-page`)&&(t.usagePage=rE(e.get(`--usage-page`),`usage-page`)),e.has(`--usage`)&&(t.usage=rE(e.get(`--usage`),`usage`)),Object.keys(t).length>0?[t]:[]}function aE(e){let t=ei(e.stdin),n=new Uint8Array(t.length);for(let e=0;e<t.length;e++)n[e]=t.charCodeAt(e)&255;return n}function oE(e){return Array.from(e,e=>e.toString(16).padStart(2,`0`)).join(` `)}function sE(e){return e.toString(16).padStart(2,`0`)}function cE(e){return`0x${e.toString(16).padStart(4,`0`)}`}function lE(e){let t=e.productName||`(unknown)`,n=e.opened?` [open]`:``,r=e.usagePage===void 0?``:`\t${cE(e.usagePage)}:${cE(e.usage??0)}`;return`${e.handle}\t${cE(e.vendorId)}:${cE(e.productId)}${r}\t${t}${n}`}function uE(e,t){let n=t?.usagePage,r=t?.usage;if(n===void 0&&r===void 0)return e;let i=e.findIndex(e=>(n===void 0||e.usagePage===n)&&(r===void 0||e.usage===r));if(i<=0)return e;let a=e.slice(),[o]=a.splice(i,1);return a.unshift(o),a}function dE(e){return`${e.map(lE).join(`
1319
- `)}\n`}function fE(e){return`${sE(e.reportId)} ${oE(e.bytes)}`.trimEnd()}function pE(e){return{stdout:e,stderr:``,exitCode:0}}function U(e){return{stdout:``,stderr:`hid: ${e}\n`,exitCode:1}}const mE=`hid - access HID devices via WebHID
1318
+ `,stderr:``,exitCode:e}}function ZT(e){return{stdout:``,stderr:`hf: ${e}\n`,exitCode:1}}const QT=/^[A-Za-z0-9_.-]+\/[A-Za-z0-9_.-]+$/;function $T(e){let t=null,n=`main`,r=!1,i=[],a=0;for(;a<e.length;){let o=e[a];if(o===`--to`){let n=e[a+1];if(typeof n!=`string`)return{error:`--to requires a value`};t=n,a+=2;continue}if(o===`--revision`||o===`--rev`){let t=e[a+1];if(typeof t!=`string`)return{error:`${o} requires a value`};n=t,a+=2;continue}if(o===`--force`||o===`-f`){r=!0,a+=1;continue}if(o.startsWith(`--`))return{error:`unknown option: ${o}`};i.push(o),a+=1}if(i.length===0)return{error:`download requires <repo>`};let o=i[0];return QT.test(o)?{repo:o,files:i.slice(1),to:t,revision:n,force:r}:{error:`invalid repo '${o}' — expected <owner>/<name>`}}function eE(e){return e<1024?`${e} B`:e<1048576?`${(e/1024).toFixed(1)} KB`:`${(e/1048576).toFixed(1)} MB`}async function tE(e,t,n){let r=$T(e);if(`error`in r)return ZT(r.error);let i=Ji(r.repo,r.to,t.cwd),a=``;try{let e=await Ui({fetch:n,fs:t.fs,repo:r.repo,targetDir:i,files:r.files,revision:r.revision,force:r.force,endpoint:t.env.get(`HF_ENDPOINT`),progress:{onListed:({files:e})=>{a+=`hf: ${e.length} file(s) listed in ${r.repo}@${r.revision}\n`},onFile:e=>{a+=e.status===`downloaded`?`hf: downloaded ${e.file} (${eE(e.bytes)})\n`:`hf: skipped ${e.file} (already at ${i})\n`}}}),o=`hf: ${e.downloaded} downloaded, ${e.skipped} skipped, ${eE(e.totalBytes)} total into ${i}\n`;return{stdout:``,stderr:a+o,exitCode:0}}catch(e){return e instanceof Hi?(a+=`hf: failed ${e.file}: ${e.message}\n`,{stdout:``,stderr:a,exitCode:1}):ZT(e instanceof Error?e.message:String(e))}}function nE(e){return{name:`hf`,async execute(t,n){if(t.length===0||w(t,{valueFlags:[`--to`,`--revision`,`--rev`]}))return XT(+(t.length===0));let r=t[0];return r===`download`?tE(t.slice(1),n,e.fetch):ZT(`unknown subcommand: ${r}`)}}}const rE=new Set([`--vid`,`--pid`,`--usage-page`,`--usage`,`--__resolved`,`--timeout`]);function iE(e){return vn(e,rE)}function aE(e,t){let n=/^0x/i.test(e)?parseInt(e,16):parseInt(e,10);if(!Number.isFinite(n)||Number.isNaN(n))throw Error(`invalid ${t}: '${e}'`);return n}function oE(e){let t={};return e.has(`--vid`)&&(t.vendorId=aE(e.get(`--vid`),`vid`)),e.has(`--pid`)&&(t.productId=aE(e.get(`--pid`),`pid`)),e.has(`--usage-page`)&&(t.usagePage=aE(e.get(`--usage-page`),`usage-page`)),e.has(`--usage`)&&(t.usage=aE(e.get(`--usage`),`usage`)),Object.keys(t).length>0?[t]:[]}function sE(e){let t=ei(e.stdin),n=new Uint8Array(t.length);for(let e=0;e<t.length;e++)n[e]=t.charCodeAt(e)&255;return n}function cE(e){return Array.from(e,e=>e.toString(16).padStart(2,`0`)).join(` `)}function lE(e){return e.toString(16).padStart(2,`0`)}function uE(e){return`0x${e.toString(16).padStart(4,`0`)}`}function dE(e){let t=e.productName||`(unknown)`,n=e.opened?` [open]`:``,r=e.usagePage===void 0?``:`\t${uE(e.usagePage)}:${uE(e.usage??0)}`;return`${e.handle}\t${uE(e.vendorId)}:${uE(e.productId)}${r}\t${t}${n}`}function fE(e,t){let n=t?.usagePage,r=t?.usage;if(n===void 0&&r===void 0)return e;let i=e.findIndex(e=>(n===void 0||e.usagePage===n)&&(r===void 0||e.usage===r));if(i<=0)return e;let a=e.slice(),[o]=a.splice(i,1);return a.unshift(o),a}function pE(e){return`${e.map(dE).join(`
1319
+ `)}\n`}function mE(e){return`${lE(e.reportId)} ${cE(e.bytes)}`.trimEnd()}function hE(e){return{stdout:e,stderr:``,exitCode:0}}function U(e){return{stdout:``,stderr:`hid: ${e}\n`,exitCode:1}}const gE=`hid - access HID devices via WebHID
1320
1320
 
1321
1321
  Usage: hid <subcommand> [options]
1322
1322
 
@@ -1340,10 +1340,10 @@ Options:
1340
1340
  -h, --help
1341
1341
 
1342
1342
  Report payloads are capped at ${Ir} bytes (4 MiB).
1343
- `;function hE(e,t){if(t){let t=``;for(let n=0;n<e.length;n++)t+=String.fromCharCode(e[n]);return pE(t)}return pE(e.length?`${oE(e)}\n`:``)}function gE(e){return!e||e.aborted?Promise.resolve():new Promise(t=>{e.addEventListener(`abort`,()=>t(),{once:!0})})}async function _E(e){let t=await e.list();return t.length===0?pE(`no granted HID devices
1344
- `):pE(`${t.map(lE).join(`
1345
- `)}\n`)}async function vE(e,t){let n=e.get(`--__resolved`),r=iE(e),i=r[0];if(n){let e=n.split(`,`).filter(e=>e.length>0);return e.length===0?U(`request: missing resolved handle`):pE(dE(uE(await Promise.all(e.map(e=>t.info(e))),i)))}let a=xe();return a?yE(r,i,a,t):pE(dE(uE(await t.request(r),i)))}async function yE(e,t,n,r){let i=await Sx(`hid-device`,e,n),a,o;if(i.handle){let e=await r.info(i.handle);a=e.vendorId,o=e.productId}else{let e=i.info,t=Fr();if(!t)return U(`request: WebHID unavailable for device re-acquire`);let n=await t.getDevices(),r=kr(),s=n.filter(t=>t.vendorId===e.vendorId&&t.productId===e.productId);if(s.length===0)return U(`request: granted device could not be re-acquired`);for(let e of s)r.register(e);a=e.vendorId,o=e.productId}let s=(await r.list()).filter(e=>e.vendorId===a&&e.productId===o),c=uE(s.length>0?s:[],t);return c.length===0?U(`request: granted device could not be re-acquired`):pE(dE(c))}async function bE(e,t,n){let r=t[1];return r?(e===`open`?await n.open(r):await n.close(r),pE(``)):U(`${e}: handle required`)}async function xE(e,t,n,r){let[,i,a]=t;if(!i||a===void 0)return U(`${e}: handle and report-id required`);let o=rE(a,`report-id`),s=aE(n);return s.length>4194304?U(`${e} payload exceeds 4 MiB limit`):(e===`send`?await r.sendReport(i,o,s):await r.sendFeatureReport(i,o,s),pE(``))}async function SE(e,t,n){let[,r,i]=e;return!r||i===void 0?U(`feature-get: handle and report-id required`):hE((await t.receiveFeatureReport(r,rE(i,`report-id`))).bytes,n)}async function CE(e,t,n){let r=e[1];if(!r)return U(`watch: handle required`);let i=[],a=await n.subscribeInputReports(r,e=>{i.push(fE(e))});try{await gE(t.signal)}finally{await a()}return pE(i.length?`${i.join(`
1346
- `)}\n`:``)}async function wE(e,t,n,r,i){let[,a,o]=e;if(!a||o===void 0)return U(`query: handle and report-id required`);let s=rE(o,`report-id`),c=aE(t);if(c.length>4194304)return U(`query payload exceeds 4 MiB limit`);let l=n.has(`--timeout`)?rE(n.get(`--timeout`),`timeout`):1e3,u=()=>{},d=new Promise(e=>{u=e}),f=await r.subscribeInputReports(a,e=>{u(e)}),p;try{await r.sendReport(a,s,c);let e=new Promise(e=>{p=setTimeout(()=>e(`timeout`),l)}),t=await Promise.race([d,e]);return t===`timeout`?U(`query: no input report within ${l}ms`):i?hE(t.bytes,!0):pE(`${fE(t)}\n`)}finally{p!==void 0&&clearTimeout(p),await f()}}async function TE(e,t,n){let{positionals:r,flags:i,bools:a}=nE(e),o=r[0],s=a.has(`--raw`);switch(o){case`list`:return _E(n);case`request`:return vE(i,n);case`open`:case`close`:return bE(o,r,n);case`send`:case`feature-send`:return xE(o,r,t,n);case`feature-get`:return SE(r,n,s);case`watch`:return CE(r,t,n);case`query`:return wE(r,t,i,n,s);default:return U(`unknown subcommand '${o??``}'. Try 'hid --help'.`)}}function EE(){return S(`hid`,async(e,t)=>{if(e.length===0||e.includes(`--help`)||e.includes(`-h`))return pE(mE);let n=Rr(se(),y());if(!n)return U(`WebHID is unavailable in this environment`);try{return await TE(e,t,n)}catch(e){let t=e instanceof Error?e.message:String(e);return/cancelled|NotFoundError|No device selected/i.test(t)?U(`user cancelled or no device selected`):U(t)}})}const DE=1e3,OE=`usage: id [-u|-g|-G] [-n] [-r] [USER]`,kE=`${OE}
1343
+ `;function _E(e,t){if(t){let t=``;for(let n=0;n<e.length;n++)t+=String.fromCharCode(e[n]);return hE(t)}return hE(e.length?`${cE(e)}\n`:``)}function vE(e){return!e||e.aborted?Promise.resolve():new Promise(t=>{e.addEventListener(`abort`,()=>t(),{once:!0})})}async function yE(e){let t=await e.list();return t.length===0?hE(`no granted HID devices
1344
+ `):hE(`${t.map(dE).join(`
1345
+ `)}\n`)}async function bE(e,t){let n=e.get(`--__resolved`),r=oE(e),i=r[0];if(n){let e=n.split(`,`).filter(e=>e.length>0);return e.length===0?U(`request: missing resolved handle`):hE(pE(fE(await Promise.all(e.map(e=>t.info(e))),i)))}let a=xe();return a?xE(r,i,a,t):hE(pE(fE(await t.request(r),i)))}async function xE(e,t,n,r){let i=await Sx(`hid-device`,e,n),a,o;if(i.handle){let e=await r.info(i.handle);a=e.vendorId,o=e.productId}else{let e=i.info,t=Fr();if(!t)return U(`request: WebHID unavailable for device re-acquire`);let n=await t.getDevices(),r=kr(),s=n.filter(t=>t.vendorId===e.vendorId&&t.productId===e.productId);if(s.length===0)return U(`request: granted device could not be re-acquired`);for(let e of s)r.register(e);a=e.vendorId,o=e.productId}let s=(await r.list()).filter(e=>e.vendorId===a&&e.productId===o),c=fE(s.length>0?s:[],t);return c.length===0?U(`request: granted device could not be re-acquired`):hE(pE(c))}async function SE(e,t,n){let r=t[1];return r?(e===`open`?await n.open(r):await n.close(r),hE(``)):U(`${e}: handle required`)}async function CE(e,t,n,r){let[,i,a]=t;if(!i||a===void 0)return U(`${e}: handle and report-id required`);let o=aE(a,`report-id`),s=sE(n);return s.length>4194304?U(`${e} payload exceeds 4 MiB limit`):(e===`send`?await r.sendReport(i,o,s):await r.sendFeatureReport(i,o,s),hE(``))}async function wE(e,t,n){let[,r,i]=e;return!r||i===void 0?U(`feature-get: handle and report-id required`):_E((await t.receiveFeatureReport(r,aE(i,`report-id`))).bytes,n)}async function TE(e,t,n){let r=e[1];if(!r)return U(`watch: handle required`);let i=[],a=await n.subscribeInputReports(r,e=>{i.push(mE(e))});try{await vE(t.signal)}finally{await a()}return hE(i.length?`${i.join(`
1346
+ `)}\n`:``)}async function EE(e,t,n,r,i){let[,a,o]=e;if(!a||o===void 0)return U(`query: handle and report-id required`);let s=aE(o,`report-id`),c=sE(t);if(c.length>4194304)return U(`query payload exceeds 4 MiB limit`);let l=n.has(`--timeout`)?aE(n.get(`--timeout`),`timeout`):1e3,u=()=>{},d=new Promise(e=>{u=e}),f=await r.subscribeInputReports(a,e=>{u(e)}),p;try{await r.sendReport(a,s,c);let e=new Promise(e=>{p=setTimeout(()=>e(`timeout`),l)}),t=await Promise.race([d,e]);return t===`timeout`?U(`query: no input report within ${l}ms`):i?_E(t.bytes,!0):hE(`${mE(t)}\n`)}finally{p!==void 0&&clearTimeout(p),await f()}}async function DE(e,t,n){let{positionals:r,flags:i,bools:a}=iE(e),o=r[0],s=a.has(`--raw`);switch(o){case`list`:return yE(n);case`request`:return bE(i,n);case`open`:case`close`:return SE(o,r,n);case`send`:case`feature-send`:return CE(o,r,t,n);case`feature-get`:return wE(r,n,s);case`watch`:return TE(r,t,n);case`query`:return EE(r,t,i,n,s);default:return U(`unknown subcommand '${o??``}'. Try 'hid --help'.`)}}function OE(){return S(`hid`,async(e,t)=>{if(e.length===0||e.includes(`--help`)||e.includes(`-h`))return hE(gE);let n=Rr(se(),y());if(!n)return U(`WebHID is unavailable in this environment`);try{return await DE(e,t,n)}catch(e){let t=e instanceof Error?e.message:String(e);return/cancelled|NotFoundError|No device selected/i.test(t)?U(`user cancelled or no device selected`):U(t)}})}const kE=1e3,AE=`usage: id [-u|-g|-G] [-n] [-r] [USER]`,jE=`${AE}
1347
1347
 
1348
1348
  Print the user and group identity of this SLICC runtime.
1349
1349
 
@@ -1358,23 +1358,23 @@ Options:
1358
1358
  --version Print the SLICC build.
1359
1359
 
1360
1360
  Identity comes from the home directory, which is where the rest of the shell
1361
- gets it too. A cone is the human user (uid ${DE}, one per runtime, since every
1361
+ gets it too. A cone is the human user (uid ${kE}, one per runtime, since every
1362
1362
  cone shares one home); a scoop is a service identity whose uid is derived from
1363
1363
  its folder name, so it is stable across reloads and distinct per scoop.
1364
1364
  Every user is in a user-private group of the same name, plus the role group
1365
1365
  \`cone\` (10) or \`scoop\` (20).
1366
- `,AE=`/scoops/`;function jE(e){let t=2166136261;for(let n=0;n<e.length;n++)t^=e.charCodeAt(n),t=Math.imul(t,16777619)>>>0;return 2e3+t%58e3}function ME(e,t){return{name:e,uid:t===`cone`?DE:jE(e),role:t}}function NE(e){return[{gid:e.uid,name:e.name},e.role===`cone`?{gid:10,name:`cone`}:{gid:20,name:`scoop`}]}function PE(e,t){return`${e}(${t})`}function FE(e){let t=NE(e),n=t[0];return`uid=${PE(e.uid,e.name)} gid=${PE(n.gid,n.name)} groups=${t.map(e=>PE(e.gid,e.name)).join(`,`)}\n`}async function IE(e){let t=e.env.get(`HOME`)??``,n=t.startsWith(AE)?`scoop`:`cone`,r=e.env.get(`USER`)||LE(t,n);return r?ME(r,n):ME(tp(await ep(RE(e.fs))),`cone`)}function LE(e,t){return e===``?``:t===`cone`?tp(e):e.slice(8).split(`/`)[0]??``}function RE(e){return{readDir:async t=>(await e.readdirWithFileTypes?.(t)??[]).map(e=>({name:e.name,type:e.isDirectory?`directory`:`file`})),stat:async t=>({mtime:(await e.stat(t)).mtime.getTime()})}}async function zE(e,t){return await e.fs.exists(`/home/${t}`).catch(()=>!1)?ME(t,`cone`):await e.fs.exists(`${AE}${t}`).catch(()=>!1)?ME(t,`scoop`):null}function BE(e){let t={select:`all`,names:!1,mode:`run`},n=[];for(let r of e){if(r===`--help`||r===`-h`)return{...t,mode:`help`};if(r===`--version`)return{...t,mode:`version`};let e=HE[r];if(e){e(t);continue}if(r.length>1&&r.startsWith(`-`)){for(let e of r.slice(1)){let n=VE[e];if(!n)return{error:`unrecognized option '-${e}'`};n(t)}continue}n.push(r)}return n.length>1?{error:`extra operand '${n[1]}'`}:(n[0]!==void 0&&(t.operand=n[0]),t.names&&t.select===`all`?{error:`cannot print only names in default format`}:t)}const VE={u:e=>{e.select=`user`},g:e=>{e.select=`group`},G:e=>{e.select=`groups`},n:e=>{e.names=!0},r:()=>void 0},HE={"--user":VE.u,"--group":VE.g,"--groups":VE.G,"--name":VE.n,"--real":VE.r};function UE(e,t){let n=NE(e),r=(e,n)=>t.names?n:String(e);switch(t.select){case`user`:return`${r(e.uid,e.name)}\n`;case`group`:return`${r(n[0].gid,n[0].name)}\n`;case`groups`:return`${n.map(e=>r(e.gid,e.name)).join(` `)}\n`;case`all`:return FE(e)}}function WE(){return S(`id`,async(e,t)=>{let n=BE(e);if(`error`in n)return{stdout:``,stderr:`id: ${n.error}\n${OE}\n`,exitCode:1};if(n.mode===`help`)return KE(kE);if(n.mode===`version`)return KE(`id (SLICC) ${Ke().version}\n`);let r=n.operand===void 0?await IE(t):await zE(t,n.operand);return r?KE(UE(r,n)):{stdout:``,stderr:`id: '${n.operand}': no such user\n`,exitCode:1}})}function GE(){return S(`whoami`,async(e,t)=>KE(`${(await IE(t)).name}\n`))}function KE(e){return{stdout:e,stderr:``,exitCode:0}}function qE(){return{stdout:`imgcat - preview image and video files in the preview tab
1366
+ `,ME=`/scoops/`;function NE(e){let t=2166136261;for(let n=0;n<e.length;n++)t^=e.charCodeAt(n),t=Math.imul(t,16777619)>>>0;return 2e3+t%58e3}function PE(e,t){return{name:e,uid:t===`cone`?kE:NE(e),role:t}}function FE(e){return[{gid:e.uid,name:e.name},e.role===`cone`?{gid:10,name:`cone`}:{gid:20,name:`scoop`}]}function IE(e,t){return`${e}(${t})`}function LE(e){let t=FE(e),n=t[0];return`uid=${IE(e.uid,e.name)} gid=${IE(n.gid,n.name)} groups=${t.map(e=>IE(e.gid,e.name)).join(`,`)}\n`}async function RE(e){let t=e.env.get(`HOME`)??``,n=t.startsWith(ME)?`scoop`:`cone`,r=e.env.get(`USER`)||zE(t,n);return r?PE(r,n):PE(tp(await ep(BE(e.fs))),`cone`)}function zE(e,t){return e===``?``:t===`cone`?tp(e):e.slice(8).split(`/`)[0]??``}function BE(e){return{readDir:async t=>(await e.readdirWithFileTypes?.(t)??[]).map(e=>({name:e.name,type:e.isDirectory?`directory`:`file`})),stat:async t=>({mtime:(await e.stat(t)).mtime.getTime()})}}async function VE(e,t){return await e.fs.exists(`/home/${t}`).catch(()=>!1)?PE(t,`cone`):await e.fs.exists(`${ME}${t}`).catch(()=>!1)?PE(t,`scoop`):null}function HE(e){let t={select:`all`,names:!1,mode:`run`},n=[];for(let r of e){if(r===`--help`||r===`-h`)return{...t,mode:`help`};if(r===`--version`)return{...t,mode:`version`};let e=WE[r];if(e){e(t);continue}if(r.length>1&&r.startsWith(`-`)){for(let e of r.slice(1)){let n=UE[e];if(!n)return{error:`unrecognized option '-${e}'`};n(t)}continue}n.push(r)}return n.length>1?{error:`extra operand '${n[1]}'`}:(n[0]!==void 0&&(t.operand=n[0]),t.names&&t.select===`all`?{error:`cannot print only names in default format`}:t)}const UE={u:e=>{e.select=`user`},g:e=>{e.select=`group`},G:e=>{e.select=`groups`},n:e=>{e.names=!0},r:()=>void 0},WE={"--user":UE.u,"--group":UE.g,"--groups":UE.G,"--name":UE.n,"--real":UE.r};function GE(e,t){let n=FE(e),r=(e,n)=>t.names?n:String(e);switch(t.select){case`user`:return`${r(e.uid,e.name)}\n`;case`group`:return`${r(n[0].gid,n[0].name)}\n`;case`groups`:return`${n.map(e=>r(e.gid,e.name)).join(` `)}\n`;case`all`:return LE(e)}}function KE(){return S(`id`,async(e,t)=>{let n=HE(e);if(`error`in n)return{stdout:``,stderr:`id: ${n.error}\n${AE}\n`,exitCode:1};if(n.mode===`help`)return JE(jE);if(n.mode===`version`)return JE(`id (SLICC) ${Ke().version}\n`);let r=n.operand===void 0?await RE(t):await VE(t,n.operand);return r?JE(GE(r,n)):{stdout:``,stderr:`id: '${n.operand}': no such user\n`,exitCode:1}})}function qE(){return S(`whoami`,async(e,t)=>JE(`${(await RE(t)).name}\n`))}function JE(e){return{stdout:e,stderr:``,exitCode:0}}function YE(){return{stdout:`imgcat - preview image and video files in the preview tab
1367
1367
 
1368
1368
  Usage: imgcat <path> [path...]
1369
1369
 
1370
1370
  Options:
1371
1371
  -h, --help Show this help message
1372
- `,stderr:``,exitCode:0}}function JE(e={}){return S(`imgcat`,async(t,n)=>{if(t.length===0||w(t))return qE();let r=C(t);if(`error`in r)return{stdout:``,stderr:`imgcat: ${r.error}\n`,exitCode:1};if(r.positionals.length===0)return qE();if(typeof window>`u`||typeof document>`u`)return{stdout:``,stderr:`imgcat: browser APIs are unavailable in this environment
1372
+ `,stderr:``,exitCode:0}}function XE(e={}){return S(`imgcat`,async(t,n)=>{if(t.length===0||w(t))return YE();let r=C(t);if(`error`in r)return{stdout:``,stderr:`imgcat: ${r.error}\n`,exitCode:1};if(r.positionals.length===0)return YE();if(typeof window>`u`||typeof document>`u`)return{stdout:``,stderr:`imgcat: browser APIs are unavailable in this environment
1373
1373
  `,exitCode:1};if(!e.onMediaPreview)return{stdout:``,stderr:`imgcat: terminal preview is unavailable
1374
- `,exitCode:1};let i=[];for(let e of r.positionals){let t=n.fs.resolvePath(n.cwd,e);if(!(await n.fs.stat(t)).isFile)return{stdout:``,stderr:`imgcat: not a file: ${e}\n`,exitCode:1};let r=ye(t);if(!ve(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 YE=new Set([`run`,`run-script`]),XE=new Set([`test`,`start`,`stop`,`restart`]),ZE=new Set([` `,` `,`
1375
- `,`;`,`|`,`&`,`(`,`)`,`{`,`}`,`<`,`>`]),QE=new Set([`;`,`|`,`&`,`(`,`)`,`{`,`
1376
- `]),$E=/^[A-Za-z_][A-Za-z0-9_]*=/,eD=/^[@A-Za-z0-9._-]+$/,tD=new Set([`if`,`then`,`else`,`elif`,`fi`,`for`,`while`,`until`,`do`,`done`,`case`,`in`,`esac`,`function`,`time`,`!`]),nD=new Set([`if`,`then`,`else`,`elif`,`while`,`until`,`do`,`time`,`!`]),rD=new Set([`ipx`,`npx`]);function iD(e){return`'${e.replace(/'/g,`'\\''`)}'`}async function aD(e,t){let n=await e.readFile(t);return typeof n==`string`?n:new TextDecoder().decode(n)}function*oD(e){let t=b(e);for(;yield t,t!==`/`;)t=Te(t).dir}function sD(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 cD(e){return typeof e==`string`?e:void 0}async function lD(e,t){for(let n of oD(t)){let t=x(n,`package.json`);if(!await e.exists(t))continue;let r;try{r=JSON.parse(await aD(e,t))}catch(e){throw Error(`${t} is not valid JSON: ${e instanceof Error?e.message:String(e)}`)}return{dir:n,name:cD(r.name),version:cD(r.version),scripts:sD(r.scripts)}}return null}function uD(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(ZE.has(t))break;n++}return{start:t,end:n,text:e.slice(t,n)}}function dD(e){let t=[],n=0,r=!0;for(;n<e.length;){let i=e[n];if(i===` `||i===` `){n++;continue}if(QE.has(i)){r=!0,n++;continue}let a=uD(e,n);if(a.end===a.start){n++;continue}if(r&&!$E.test(a.text)){if(nD.has(a.text)){n=a.end;continue}t.push(a),r=!1}n=a.end}return t}function fD(e,t){return!eD.test(e)||tD.has(e)||rD.has(e)?!1:!t.isRegistered(e)}async function pD(e,t){let n=dD(e).filter(e=>fD(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 mD(e){let t=[];for(let n of oD(e))t.push(x(n,`node_modules`,`.bin`));return t}function hD(e,t,n,r){let i=r.env.get(`PATH`)??``,a={PATH:[...mD(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 gD(e){return e.name===void 0?e.dir:e.version===void 0?e.name:`${e.name}@${e.version}`}function _D(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 ${gD(t)} via \`${e} run\`:`];for(let[e,t]of n)r.push(` ${e}`),r.push(` ${t}`);return`${r.join(`
1377
- `)}\n`}function vD(e,t){return t===`--silent`||t===`-s`?(e.silent=!0,!0):t===`--if-present`&&(e.ifPresent=!0,!0)}function yD(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}vD(t,a)||(r===void 0?r=a:n.push(a))}return{flags:t,script:r,extraArgs:n}}function bD(e,t){return{stdout:``,stderr:`${e}: ${t}\n`,exitCode:1}}function xD(e,t,n,r){let i=r.length>0?` ${r.map(iD).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 SD(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 CD(e,t,n){let r=new Set(n.getRegisteredCommands?.()??[]);return{isRegistered:e=>r.has(e),hasLocalBin:async n=>{for(let r of mD(t.dir))if(await e.exists(x(r,n)))return!0;return!1}}}async function wD(e,t,n,r,i,a){let o=i.exec;if(!o)return bD(e,`run requires shell exec support, which this context does not provide`);let s=CD(a.fs,t,i),c=gD(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 pD(a.body,s),{cwd:t.dir,env:hD(t,a.event,a.body,i),stdin:ei(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 TD(e,t,n,r){let i;try{i=await lD(r.fs,n.cwd)}catch(t){return bD(e,t instanceof Error?t.message:String(t))}if(!i)return bD(e,`no package.json found in ${n.cwd} or any parent directory — nothing to run`);let{flags:a,script:o,extraArgs:s}=yD(t);if(o===void 0)return{stdout:_D(e,i),stderr:``,exitCode:0};let c=i.scripts[o]??await SD(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 bD(e,`missing script: ${o}${t.length>0?` (available: ${t.join(`, `)})`:` (${x(i.dir,`package.json`)} defines no scripts)`}`)}return wD(e,i,xD(i,o,c,s),a,n,r)}const ED=new Set([`install`,`i`,`add`]),DD=new Set([`uninstall`,`remove`,`rm`,`un`]),OD=new Set([`list`,`ls`]),kD=new Set([`-g`,`--global`,`--location=global`]),AD=[`-g`,`--global`,`-D`,`--save-dev`];function jD(e){return`${e} - install packages from the npm registry into node_modules
1374
+ `,exitCode:1};let i=[];for(let e of r.positionals){let t=n.fs.resolvePath(n.cwd,e);if(!(await n.fs.stat(t)).isFile)return{stdout:``,stderr:`imgcat: not a file: ${e}\n`,exitCode:1};let r=ye(t);if(!ve(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 ZE=new Set([`run`,`run-script`]),QE=new Set([`test`,`start`,`stop`,`restart`]),$E=new Set([` `,` `,`
1375
+ `,`;`,`|`,`&`,`(`,`)`,`{`,`}`,`<`,`>`]),eD=new Set([`;`,`|`,`&`,`(`,`)`,`{`,`
1376
+ `]),tD=/^[A-Za-z_][A-Za-z0-9_]*=/,nD=/^[@A-Za-z0-9._-]+$/,rD=new Set([`if`,`then`,`else`,`elif`,`fi`,`for`,`while`,`until`,`do`,`done`,`case`,`in`,`esac`,`function`,`time`,`!`]),iD=new Set([`if`,`then`,`else`,`elif`,`while`,`until`,`do`,`time`,`!`]),aD=new Set([`ipx`,`npx`]);function oD(e){return`'${e.replace(/'/g,`'\\''`)}'`}async function sD(e,t){let n=await e.readFile(t);return typeof n==`string`?n:new TextDecoder().decode(n)}function*cD(e){let t=b(e);for(;yield t,t!==`/`;)t=Te(t).dir}function lD(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 uD(e){return typeof e==`string`?e:void 0}async function dD(e,t){for(let n of cD(t)){let t=x(n,`package.json`);if(!await e.exists(t))continue;let r;try{r=JSON.parse(await sD(e,t))}catch(e){throw Error(`${t} is not valid JSON: ${e instanceof Error?e.message:String(e)}`)}return{dir:n,name:uD(r.name),version:uD(r.version),scripts:lD(r.scripts)}}return null}function fD(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($E.has(t))break;n++}return{start:t,end:n,text:e.slice(t,n)}}function pD(e){let t=[],n=0,r=!0;for(;n<e.length;){let i=e[n];if(i===` `||i===` `){n++;continue}if(eD.has(i)){r=!0,n++;continue}let a=fD(e,n);if(a.end===a.start){n++;continue}if(r&&!tD.test(a.text)){if(iD.has(a.text)){n=a.end;continue}t.push(a),r=!1}n=a.end}return t}function mD(e,t){return!nD.test(e)||rD.has(e)||aD.has(e)?!1:!t.isRegistered(e)}async function hD(e,t){let n=pD(e).filter(e=>mD(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 gD(e){let t=[];for(let n of cD(e))t.push(x(n,`node_modules`,`.bin`));return t}function _D(e,t,n,r){let i=r.env.get(`PATH`)??``,a={PATH:[...gD(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 vD(e){return e.name===void 0?e.dir:e.version===void 0?e.name:`${e.name}@${e.version}`}function yD(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 ${vD(t)} via \`${e} run\`:`];for(let[e,t]of n)r.push(` ${e}`),r.push(` ${t}`);return`${r.join(`
1377
+ `)}\n`}function bD(e,t){return t===`--silent`||t===`-s`?(e.silent=!0,!0):t===`--if-present`&&(e.ifPresent=!0,!0)}function xD(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}bD(t,a)||(r===void 0?r=a:n.push(a))}return{flags:t,script:r,extraArgs:n}}function SD(e,t){return{stdout:``,stderr:`${e}: ${t}\n`,exitCode:1}}function CD(e,t,n,r){let i=r.length>0?` ${r.map(oD).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 wD(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 TD(e,t,n){let r=new Set(n.getRegisteredCommands?.()??[]);return{isRegistered:e=>r.has(e),hasLocalBin:async n=>{for(let r of gD(t.dir))if(await e.exists(x(r,n)))return!0;return!1}}}async function ED(e,t,n,r,i,a){let o=i.exec;if(!o)return SD(e,`run requires shell exec support, which this context does not provide`);let s=TD(a.fs,t,i),c=vD(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 hD(a.body,s),{cwd:t.dir,env:_D(t,a.event,a.body,i),stdin:ei(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 DD(e,t,n,r){let i;try{i=await dD(r.fs,n.cwd)}catch(t){return SD(e,t instanceof Error?t.message:String(t))}if(!i)return SD(e,`no package.json found in ${n.cwd} or any parent directory — nothing to run`);let{flags:a,script:o,extraArgs:s}=xD(t);if(o===void 0)return{stdout:yD(e,i),stderr:``,exitCode:0};let c=i.scripts[o]??await wD(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 SD(e,`missing script: ${o}${t.length>0?` (available: ${t.join(`, `)})`:` (${x(i.dir,`package.json`)} defines no scripts)`}`)}return ED(e,i,CD(i,o,c,s),a,n,r)}const OD=new Set([`install`,`i`,`add`]),kD=new Set([`uninstall`,`remove`,`rm`,`un`]),AD=new Set([`list`,`ls`]),jD=new Set([`-g`,`--global`,`--location=global`]),MD=[`-g`,`--global`,`-D`,`--save-dev`];function ND(e){return`${e} - install packages from the npm registry into node_modules
1378
1378
  and run package.json scripts
1379
1379
 
1380
1380
  Usage:
@@ -1441,15 +1441,15 @@ manifest without rewriting it. With -g, packages go to /shared/lib/node_modules
1441
1441
  and deps are recorded in /shared/lib/package.json. Existing fields are
1442
1442
  preserved. Idempotent: re-installing an already-satisfied package is a clean
1443
1443
  no-op.
1444
- `}function MD(e){let t=C(e,{bool:AD,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 ND(e){let t=!1,n=[];for(let r of e){if(kD.has(r)){t=!0;continue}r.startsWith(`-`)||n.push(r)}return{global:t,specs:n}}function PD(e){let t=e.indexOf(`--`),n=t===-1?e:e.slice(0,t);return n.includes(`--help`)||n.includes(`-h`)}function FD(e){return e instanceof Error?e.message:String(e)}async function ID(e){e.scriptCatalog?.invalidateJsh(),await e.syncScriptCommands?.()}async function LD(e,t,n){let r;try{r=await Ki({fs:n.fs,fetch:n.fetch,cwd:t.cwd})}catch(t){return t instanceof Zi?{stdout:``,stderr:`${e}: ${t.message}\n`,exitCode:1}:{stdout:``,stderr:`${e}: install failed: ${FD(t)}\n`,exitCode:1}}if(r.empty&&r.errors.length===0)return{stdout:`${e}: nothing to install (package.json declares no dependencies)\n`,stderr:``,exitCode:0};let i=r.results.map(t=>`${e}: installed ${t.name}@${t.version} -> ${t.installPath}`),a=r.errors.map(t=>`${e}: failed to install ${t.spec}: ${FD(t.error)}`);return{stdout:i.length>0?`${i.join(`
1444
+ `}function PD(e){let t=C(e,{bool:MD,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 FD(e){let t=!1,n=[];for(let r of e){if(jD.has(r)){t=!0;continue}r.startsWith(`-`)||n.push(r)}return{global:t,specs:n}}function ID(e){let t=e.indexOf(`--`),n=t===-1?e:e.slice(0,t);return n.includes(`--help`)||n.includes(`-h`)}function LD(e){return e instanceof Error?e.message:String(e)}async function RD(e){e.scriptCatalog?.invalidateJsh(),await e.syncScriptCommands?.()}async function zD(e,t,n){let r;try{r=await Ki({fs:n.fs,fetch:n.fetch,cwd:t.cwd})}catch(t){return t instanceof Zi?{stdout:``,stderr:`${e}: ${t.message}\n`,exitCode:1}:{stdout:``,stderr:`${e}: install failed: ${LD(t)}\n`,exitCode:1}}if(r.empty&&r.errors.length===0)return{stdout:`${e}: nothing to install (package.json declares no dependencies)\n`,stderr:``,exitCode:0};let i=r.results.map(t=>`${e}: installed ${t.name}@${t.version} -> ${t.installPath}`),a=r.errors.map(t=>`${e}: failed to install ${t.spec}: ${LD(t.error)}`);return{stdout:i.length>0?`${i.join(`
1445
1445
  `)}\n`:``,stderr:a.length>0?`${a.join(`
1446
- `)}\n`:``,exitCode:r.errors.length===0?0:1}}async function RD(e,t,n,r){let i=MD(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 LD(e,n,r);let c;try{c=await Yi(s,{fs:r.fs,fetch:r.fetch,cwd:n.cwd,global:a,saveDev:o})}catch(t){return{stdout:``,stderr:`${e}: install failed: ${FD(t)}\n`,exitCode:1}}let l=c.results.map(t=>`${e}: installed ${t.name}@${t.version} -> ${t.installPath}`),u=c.errors.map(t=>`${e}: failed to install ${t.spec}: ${FD(t.error)}`);return a&&c.results.length>0&&await ID(r),{stdout:l.length>0?`${l.join(`
1446
+ `)}\n`:``,exitCode:r.errors.length===0?0:1}}async function BD(e,t,n,r){let i=PD(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 zD(e,n,r);let c;try{c=await Yi(s,{fs:r.fs,fetch:r.fetch,cwd:n.cwd,global:a,saveDev:o})}catch(t){return{stdout:``,stderr:`${e}: install failed: ${LD(t)}\n`,exitCode:1}}let l=c.results.map(t=>`${e}: installed ${t.name}@${t.version} -> ${t.installPath}`),u=c.errors.map(t=>`${e}: failed to install ${t.spec}: ${LD(t.error)}`);return a&&c.results.length>0&&await RD(r),{stdout:l.length>0?`${l.join(`
1447
1447
  `)}\n`:``,stderr:u.length>0?`${u.join(`
1448
- `)}\n`:``,exitCode:c.errors.length===0?0:1}}function zD(e,t){if(t.length===0)return`${e}\n└── (empty)\n`;let n=[`${e}`];for(let e=0;e<t.length;e++){let r=e===t.length-1?`└──`:`├──`;n.push(`${r} ${t[e].name}@${t[e].version}`)}return`${n.join(`
1449
- `)}\n`}async function BD(e,t,n,r){let{global:i,specs:a}=ND(t);if(a.length===0)return{stdout:``,stderr:`${e}: uninstall requires at least one package name\n`,exitCode:1};let o;try{o=await qi(a,{fs:r.fs,fetch:r.fetch,cwd:n.cwd,global:i})}catch(t){return{stdout:``,stderr:`${e}: uninstall failed: ${FD(t)}\n`,exitCode:1}}let s=o.results.filter(e=>e.removed).map(t=>`${e}: removed ${t.name}`),c=o.results.filter(e=>!e.removed).map(e=>e.name),l=o.errors.map(t=>`${e}: failed to uninstall ${t.spec}: ${FD(t.error)}`);c.length>0&&l.push(`${e}: ${c.join(`, `)} not installed${i?` globally`:``}`);let u=o.errors.length>0;return i&&await ID(r),{stdout:s.length>0?`${s.join(`
1448
+ `)}\n`:``,exitCode:c.errors.length===0?0:1}}function VD(e,t){if(t.length===0)return`${e}\n└── (empty)\n`;let n=[`${e}`];for(let e=0;e<t.length;e++){let r=e===t.length-1?`└──`:`├──`;n.push(`${r} ${t[e].name}@${t[e].version}`)}return`${n.join(`
1449
+ `)}\n`}async function HD(e,t,n,r){let{global:i,specs:a}=FD(t);if(a.length===0)return{stdout:``,stderr:`${e}: uninstall requires at least one package name\n`,exitCode:1};let o;try{o=await qi(a,{fs:r.fs,fetch:r.fetch,cwd:n.cwd,global:i})}catch(t){return{stdout:``,stderr:`${e}: uninstall failed: ${LD(t)}\n`,exitCode:1}}let s=o.results.filter(e=>e.removed).map(t=>`${e}: removed ${t.name}`),c=o.results.filter(e=>!e.removed).map(e=>e.name),l=o.errors.map(t=>`${e}: failed to uninstall ${t.spec}: ${LD(t.error)}`);c.length>0&&l.push(`${e}: ${c.join(`, `)} not installed${i?` globally`:``}`);let u=o.errors.length>0;return i&&await RD(r),{stdout:s.length>0?`${s.join(`
1450
1450
  `)}\n`:``,stderr:l.length>0?`${l.join(`
1451
- `)}\n`:``,exitCode:+!!u}}async function VD(e,t,n,r){let{global:i}=ND(t);try{let e=i?await Wi(r.fs):await Bi(r.fs,n.cwd);return{stdout:zD(i?tr:n.cwd,e),stderr:``,exitCode:0}}catch(t){return{stdout:``,stderr:`${e}: list failed: ${FD(t)}\n`,exitCode:1}}}async function HD(e,t,n,r){let{global:i}=ND(t);return{stdout:`${i?Kn:`${n.cwd.replace(/\/$/,``)}/node_modules`}\n`,stderr:``,exitCode:0}}function UD(e,t){let n=e===`i`;return S(e,async(r,i)=>{if(PD(r))return{stdout:jD(e),stderr:``,exitCode:0};if(n)return RD(e,r,i,t);if(r.length===0)return{stdout:jD(e),stderr:`${e}: missing subcommand\n`,exitCode:1};let a=r[0],o=r.slice(1);return ED.has(a)?RD(e,o,i,t):DD.has(a)?BD(e,o,i,t):OD.has(a)?VD(e,o,i,t):a===`root`?HD(e,o,i,t):YE.has(a)?TD(e,o,i,{fs:t.fs}):XE.has(a)?TD(e,r,i,{fs:t.fs}):{stdout:``,stderr:`${e}: unknown subcommand '${a}' (supported: install, uninstall, list, root, run)\n`,exitCode:1}})}const WD=`0.5.461`,GD=`v86 is not installed in node_modules: run \`${N} v86@${WD}\` (no network fallback)`;let KD=null;async function qD(e={}){return KD||=ZD(e.ipk).catch(e=>{throw KD=null,e}),KD}const JD=[{js:`build/libv86.mjs`,wasm:`build/v86.wasm`}];async function YD(e,t){for(let{js:n,wasm:r}of JD){let i=`${e}/${n}`,a=`${e}/${r}`;if(await t.exists(i)&&await t.exists(a))return{jsPath:i,wasmPath:a}}return null}async function XD(e){let t;try{t=await qn(`v86/package.json`,e.fromDir,e.reader)}catch{return null}if(t.type!==`file`)return null;let n=await YD(Te(t.path).dir,e.reader);if(!n)return null;try{let r=await e.reader.readFile(t.path),i=String(JSON.parse(r).version??`0.5.461`);return{jsSource:await e.reader.readFile(n.jsPath),wasmBytes:await e.readBytes(n.wasmPath),version:i}}catch{return null}}async function ZD(e){if(or())throw Error(`v86 is not available in Node runtime`);if(!e)throw Error(GD);let t=await XD(e);if(!t)throw Error(GD);let n=URL.createObjectURL(new Blob([t.jsSource],{type:`text/javascript`})),r;try{r=await import(n)}finally{URL.revokeObjectURL(n)}let i=r.V86??r.default;if(typeof i!=`function`)throw Error(`v86: installed package did not export a V86 constructor`);return{V86:i,wasmModule:await Yr(t.wasmBytes),version:t.version}}function QD(e){return async t=>(await WebAssembly.instantiate(e,t)).exports}const $D={command:`biome`,example:`biome check foo.js`,bootstrap:`${N} ${__}`},eO={command:`playwright-cli`,example:`playwright-cli open https://example.com`},tO={command:`puppeteer`,example:`puppeteer open https://example.com`},nO={command:`convert`,example:`convert input.png output.jpg`,bootstrap:`${N} @imagemagick/magick-wasm@${Ni}`},rO={...nO,command:`magick`,example:`magick input.png output.jpg`},iO={command:`pdftoppm`,example:`pdftoppm -png -r 150 doc.pdf page`},aO={"@biomejs/biome":$D,biome:$D,esbuild:{command:`esbuild`,example:`esbuild --bundle src/index.js --outfile=dist/bundle.js`,bootstrap:`${N} esbuild-wasm@${Jr}`},playwright:eO,"@playwright/test":eO,"playwright-core":eO,puppeteer:tO,"puppeteer-core":tO,typescript:{command:`tsc`,example:`tsc --noEmit`,bootstrap:sr},"pdf-poppler":iO,"pdf-to-img":iO,pdf2pic:iO,"pdf-img-convert":iO,poppler:iO,"poppler-utils":iO,imagemagick:nO,"imagemagick-cli":nO,"imagemagick-convert":nO,"magick-cli":rO,"@imagemagick/magick-wasm":rO,ffmpeg:{command:`ffmpeg`,example:`ffmpeg -i input.mp4 output.webm`,bootstrap:`${N} @ffmpeg/core@${$i}`},"@ffmpeg/ffmpeg":{command:`ffmpeg`,example:`ffmpeg -i input.mp4 output.webm`,bootstrap:`${N} @ffmpeg/core@${$i}`},ffprobe:{command:`ffprobe`,example:`ffprobe -v error -show_format -of json input.mp4`,bootstrap:`${N} @ffmpeg/core@${$i}`},"@ffprobe-installer/ffprobe":{command:`ffprobe`,example:`ffprobe -v error -show_format -of json input.mp4`,bootstrap:`${N} @ffmpeg/core@${$i}`},sqlite3:{command:`sqlite3`,example:`sqlite3 database.db "SELECT 1"`},v86:{command:`v86`,example:`v86 start -cdrom alpine.iso`,bootstrap:`${N} v86@${WD}`}};function oO(e){return Object.hasOwn(aO,e)?aO[e]:void 0}function sO(e){return/^[A-Za-z0-9_./:=@%+-]+$/.test(e)?e:`'${e.replace(/'/g,`'\\''`)}'`}function cO(e,t,n,r){let i=n.length?[r.command,...n].map(sO).join(` `):r.example,a=[`${e}: SLICC has a built-in \`${r.command}\` for npm package \`${t}\`.`,` try: ${i}`];return r.bootstrap&&a.push(` first run: ${r.bootstrap}`),a.push(` install anyway: ${[e,`--force`,t,...n].map(sO).join(` `)}`),`${a.join(`
1452
- `)}\n`}const lO=/require\(\s*["']([^"']+)["']\s*\)/;function uO(e){return`${e} - run an installed package's executable bin
1451
+ `)}\n`:``,exitCode:+!!u}}async function UD(e,t,n,r){let{global:i}=FD(t);try{let e=i?await Wi(r.fs):await Bi(r.fs,n.cwd);return{stdout:VD(i?tr:n.cwd,e),stderr:``,exitCode:0}}catch(t){return{stdout:``,stderr:`${e}: list failed: ${LD(t)}\n`,exitCode:1}}}async function WD(e,t,n,r){let{global:i}=FD(t);return{stdout:`${i?Kn:`${n.cwd.replace(/\/$/,``)}/node_modules`}\n`,stderr:``,exitCode:0}}function GD(e,t){let n=e===`i`;return S(e,async(r,i)=>{if(ID(r))return{stdout:ND(e),stderr:``,exitCode:0};if(n)return BD(e,r,i,t);if(r.length===0)return{stdout:ND(e),stderr:`${e}: missing subcommand\n`,exitCode:1};let a=r[0],o=r.slice(1);return OD.has(a)?BD(e,o,i,t):kD.has(a)?HD(e,o,i,t):AD.has(a)?UD(e,o,i,t):a===`root`?WD(e,o,i,t):ZE.has(a)?DD(e,o,i,{fs:t.fs}):QE.has(a)?DD(e,r,i,{fs:t.fs}):{stdout:``,stderr:`${e}: unknown subcommand '${a}' (supported: install, uninstall, list, root, run)\n`,exitCode:1}})}const KD=`0.5.461`,qD=`v86 is not installed in node_modules: run \`${N} v86@${KD}\` (no network fallback)`;let JD=null;async function YD(e={}){return JD||=$D(e.ipk).catch(e=>{throw JD=null,e}),JD}const XD=[{js:`build/libv86.mjs`,wasm:`build/v86.wasm`}];async function ZD(e,t){for(let{js:n,wasm:r}of XD){let i=`${e}/${n}`,a=`${e}/${r}`;if(await t.exists(i)&&await t.exists(a))return{jsPath:i,wasmPath:a}}return null}async function QD(e){let t;try{t=await qn(`v86/package.json`,e.fromDir,e.reader)}catch{return null}if(t.type!==`file`)return null;let n=await ZD(Te(t.path).dir,e.reader);if(!n)return null;try{let r=await e.reader.readFile(t.path),i=String(JSON.parse(r).version??`0.5.461`);return{jsSource:await e.reader.readFile(n.jsPath),wasmBytes:await e.readBytes(n.wasmPath),version:i}}catch{return null}}async function $D(e){if(or())throw Error(`v86 is not available in Node runtime`);if(!e)throw Error(qD);let t=await QD(e);if(!t)throw Error(qD);let n=URL.createObjectURL(new Blob([t.jsSource],{type:`text/javascript`})),r;try{r=await import(n)}finally{URL.revokeObjectURL(n)}let i=r.V86??r.default;if(typeof i!=`function`)throw Error(`v86: installed package did not export a V86 constructor`);return{V86:i,wasmModule:await Yr(t.wasmBytes),version:t.version}}function eO(e){return async t=>(await WebAssembly.instantiate(e,t)).exports}const tO={command:`biome`,example:`biome check foo.js`,bootstrap:`${N} ${__}`},nO={command:`playwright-cli`,example:`playwright-cli open https://example.com`},rO={command:`puppeteer`,example:`puppeteer open https://example.com`},iO={command:`convert`,example:`convert input.png output.jpg`,bootstrap:`${N} @imagemagick/magick-wasm@${Ni}`},aO={...iO,command:`magick`,example:`magick input.png output.jpg`},oO={command:`pdftoppm`,example:`pdftoppm -png -r 150 doc.pdf page`},sO={"@biomejs/biome":tO,biome:tO,esbuild:{command:`esbuild`,example:`esbuild --bundle src/index.js --outfile=dist/bundle.js`,bootstrap:`${N} esbuild-wasm@${Jr}`},playwright:nO,"@playwright/test":nO,"playwright-core":nO,puppeteer:rO,"puppeteer-core":rO,typescript:{command:`tsc`,example:`tsc --noEmit`,bootstrap:sr},"pdf-poppler":oO,"pdf-to-img":oO,pdf2pic:oO,"pdf-img-convert":oO,poppler:oO,"poppler-utils":oO,imagemagick:iO,"imagemagick-cli":iO,"imagemagick-convert":iO,"magick-cli":aO,"@imagemagick/magick-wasm":aO,ffmpeg:{command:`ffmpeg`,example:`ffmpeg -i input.mp4 output.webm`,bootstrap:`${N} @ffmpeg/core@${$i}`},"@ffmpeg/ffmpeg":{command:`ffmpeg`,example:`ffmpeg -i input.mp4 output.webm`,bootstrap:`${N} @ffmpeg/core@${$i}`},ffprobe:{command:`ffprobe`,example:`ffprobe -v error -show_format -of json input.mp4`,bootstrap:`${N} @ffmpeg/core@${$i}`},"@ffprobe-installer/ffprobe":{command:`ffprobe`,example:`ffprobe -v error -show_format -of json input.mp4`,bootstrap:`${N} @ffmpeg/core@${$i}`},sqlite3:{command:`sqlite3`,example:`sqlite3 database.db "SELECT 1"`},v86:{command:`v86`,example:`v86 start -cdrom alpine.iso`,bootstrap:`${N} v86@${KD}`}};function cO(e){return Object.hasOwn(sO,e)?sO[e]:void 0}function lO(e){return/^[A-Za-z0-9_./:=@%+-]+$/.test(e)?e:`'${e.replace(/'/g,`'\\''`)}'`}function uO(e,t,n,r){let i=n.length?[r.command,...n].map(lO).join(` `):r.example,a=[`${e}: SLICC has a built-in \`${r.command}\` for npm package \`${t}\`.`,` try: ${i}`];return r.bootstrap&&a.push(` first run: ${r.bootstrap}`),a.push(` install anyway: ${[e,`--force`,t,...n].map(lO).join(` `)}`),`${a.join(`
1452
+ `)}\n`}const dO=/require\(\s*["']([^"']+)["']\s*\)/;function fO(e){return`${e} - run an installed package's executable bin
1453
1453
 
1454
1454
  Usage:
1455
1455
  ${e} [--force] [--global] <pkg-or-bin> [args...]
@@ -1462,12 +1462,12 @@ Options:
1462
1462
  --force Install a package even when a SLICC built-in shadows it
1463
1463
  --global Resolve only from the shared global prefix (/shared/lib/node_modules)
1464
1464
  -h, --help Show this help message
1465
- `}async function dO(e,t){let n=await e.readFile(t);return typeof n==`string`?n:new TextDecoder().decode(n)}async function fO(e,t){try{return(await e.stat(t)).type===`file`}catch{return!1}}async function pO(e,t){try{return(await e.stat(t)).type===`directory`}catch{return!1}}function*mO(e,t=!1){if(t){yield Kn;return}let n=b(e);for(;yield x(n,`node_modules`),n!==`/`;)n=Te(n).dir;yield Kn}async function hO(e,t,n,r=!1){for(let i of mO(t,r)){let t=x(i,`.bin`,n);if(!await fO(e,t))continue;let r=await dO(e,t),a=lO.exec(r),o=Te(t).dir;return{binFilePath:a?x(o,a[1]):t,argvName:t}}return null}function gO(e){if(e.startsWith(`@`)){let t=e.indexOf(`/`);if(t!==-1)return e.slice(t+1)}return e}function _O(e,t){if(typeof e==`string`)return{binName:gO(t),binPath:e};if(typeof e!=`object`||!e)return null;let n=[t,gO(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 vO(e,t,n,r=!1){for(let i of mO(t,r)){let t=x(i,n),r=x(t,`package.json`);if(!await fO(e,r))continue;let a;try{a=JSON.parse(await dO(e,r))}catch{return null}let o=_O(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 yO(e,t,n,r=!1){return await hO(e,t,n,r)??await vO(e,t,n,r)}async function bO(e,t,n){for(let r of mO(t))if(await fO(e,x(r,n,`package.json`)))return!0;return!1}function xO(e){return e instanceof Error?e.message:String(e)}function SO(e,t){return{stdout:``,stderr:`${e}: ${t}\n`,exitCode:1}}async function CO(e,t,n,r){try{let i=await Yi([t],{fs:r.fs,fetch:r.fetch,cwd:n.cwd});if(i.errors.length>0)return{error:SO(e,`failed to install '${t}': ${xO(i.errors[0].error)}`)};let a=i.results.map(t=>`${e}: installed ${t.name}@${t.version}`);return{progress:a.length>0?`${a.join(`
1466
- `)}\n`:``}}catch(n){return{error:SO(e,`failed to install '${t}': ${xO(n)}`)}}}async function wO(e,t,n,r){return await fO(r,n)?null:await pO(r,n)?SO(e,`bin target '${n}' is a directory, not a file`):SO(e,`bin file '${n}' for '${t}' does not exist`)}async function TO(e,t,n,r,i,a){if(await bO(a.fs,i.cwd,t))return{error:SO(e,`package '${t}' does not expose an executable bin`)};let o=r?void 0:oO(t);if(o)return{error:{stdout:``,stderr:cO(e,t,n,o),exitCode:1}};let s=await CO(e,t,i,a);if(`error`in s)return s;let c=await yO(a.fs,i.cwd,t);return c?{resolved:c,installProgress:s.progress}:{error:SO(e,`package '${t}' was installed but does not expose an executable bin`)}}function EO(e,t){return{name:e,trusted:!0,async execute(n,r){if(n.length===0||n[0]===`--help`||n[0]===`-h`)return{stdout:uO(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:uO(e),stderr:``,exitCode:1};let c=s[0],l=s.slice(1),u;try{u=await yO(t.fs,r.cwd,c,o)}catch(t){return SO(e,xO(t))}let d=``;if(!u){if(o)return SO(e,`no global bin '${c}' found in ${Kn}`);let n=await TO(e,c,l,i,r,t);if(`error`in n)return n.error;u=n.resolved,d=n.installProgress}let f=await wO(e,c,u.binFilePath,t.fs);if(f)return f;let p=Wr(await dO(t.fs,u.binFilePath)),m=[`node`,u.argvName,...l],h=await Hr(p,m,r,void 0,{filename:u.binFilePath});return{stdout:h.stdout,stderr:d+h.stderr,exitCode:h.exitCode}}}}function DO(e={}){return S(`jshd`,async(t,n)=>{let{runJshd:r}=await import(`./run-DgblerTV.js`);return r(t,n,e)})}const OO=new Set([`SIGINT`,`SIGTERM`,`SIGKILL`,`SIGSTOP`,`SIGCONT`]);function kO(e={}){return S(`kill`,async t=>{if(t.length===0||t.includes(`--help`)||t.includes(`-h`))return FO();let n=e.processManager??AO();if(!n)return{stdout:``,stderr:`kill: no process manager available in this runtime
1467
- `,exitCode:1};let r=jO(t);if(!r.ok)return{stdout:``,stderr:r.stderr,exitCode:r.exitCode};let{allDelivered:i,errors:a}=MO(n,r.pids,r.signal);return{stdout:``,stderr:a.length?`${a.join(`
1468
- `)}\n`:``,exitCode:+!i}})}function AO(){let e=globalThis.__slicc_pm;return e instanceof Object&&typeof e.signal==`function`?e:null}function jO(e){let t=`SIGTERM`,n=[];for(let r=0;r<e.length;r++){let i=e[r];if(i===`-s`||i===`--signal`){let n=e[++r];if(!n)return{ok:!1,stderr:`kill: -s requires a signal name
1469
- `,exitCode:2};let i=NO(n);if(i instanceof Error)return{ok:!1,stderr:`kill: ${i.message}\n`,exitCode:2};t=i;continue}if(i.startsWith(`-`)){let e=PO(i);if(e instanceof Error)return{ok:!1,stderr:`kill: ${e.message}\n`,exitCode:2};t=e;continue}let a=Number.parseInt(i,10);if(!Number.isFinite(a)||String(a)!==i)return{ok:!1,stderr:`kill: invalid pid '${i}'\n`,exitCode:2};n.push(a)}return n.length===0?{ok:!1,stderr:`kill: no pids supplied
1470
- `,exitCode:2}:OO.has(t)?{ok:!0,signal:t,pids:n}:{ok:!1,stderr:`kill: signal ${t} not supported\n`,exitCode:2}}function MO(e,t,n){let r=!0,i=[];for(let a of t)e.signal(a,n)||(r=!1,i.push(e.get(a)?`kill: (${a}) - process already terminated`:`kill: (${a}) - no such process`));return{allDelivered:r,errors:i}}function NO(e){let t=e.toUpperCase(),n=t.startsWith(`SIG`)?t:`SIG${t}`;return n===`SIGINT`||n===`SIGTERM`||n===`SIGKILL`||n===`SIGSTOP`||n===`SIGCONT`?n:Error(`unknown signal '${e}'`)}function PO(e){return e===`-9`?`SIGKILL`:NO(e.slice(1))}function FO(){return{stdout:`Usage: kill [-s SIGNAL | -INT | -TERM | -KILL | -STOP | -CONT | -9] PID [PID …]
1465
+ `}async function pO(e,t){let n=await e.readFile(t);return typeof n==`string`?n:new TextDecoder().decode(n)}async function mO(e,t){try{return(await e.stat(t)).type===`file`}catch{return!1}}async function hO(e,t){try{return(await e.stat(t)).type===`directory`}catch{return!1}}function*gO(e,t=!1){if(t){yield Kn;return}let n=b(e);for(;yield x(n,`node_modules`),n!==`/`;)n=Te(n).dir;yield Kn}async function _O(e,t,n,r=!1){for(let i of gO(t,r)){let t=x(i,`.bin`,n);if(!await mO(e,t))continue;let r=await pO(e,t),a=dO.exec(r),o=Te(t).dir;return{binFilePath:a?x(o,a[1]):t,argvName:t}}return null}function vO(e){if(e.startsWith(`@`)){let t=e.indexOf(`/`);if(t!==-1)return e.slice(t+1)}return e}function yO(e,t){if(typeof e==`string`)return{binName:vO(t),binPath:e};if(typeof e!=`object`||!e)return null;let n=[t,vO(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 bO(e,t,n,r=!1){for(let i of gO(t,r)){let t=x(i,n),r=x(t,`package.json`);if(!await mO(e,r))continue;let a;try{a=JSON.parse(await pO(e,r))}catch{return null}let o=yO(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 xO(e,t,n,r=!1){return await _O(e,t,n,r)??await bO(e,t,n,r)}async function SO(e,t,n){for(let r of gO(t))if(await mO(e,x(r,n,`package.json`)))return!0;return!1}function CO(e){return e instanceof Error?e.message:String(e)}function wO(e,t){return{stdout:``,stderr:`${e}: ${t}\n`,exitCode:1}}async function TO(e,t,n,r){try{let i=await Yi([t],{fs:r.fs,fetch:r.fetch,cwd:n.cwd});if(i.errors.length>0)return{error:wO(e,`failed to install '${t}': ${CO(i.errors[0].error)}`)};let a=i.results.map(t=>`${e}: installed ${t.name}@${t.version}`);return{progress:a.length>0?`${a.join(`
1466
+ `)}\n`:``}}catch(n){return{error:wO(e,`failed to install '${t}': ${CO(n)}`)}}}async function EO(e,t,n,r){return await mO(r,n)?null:await hO(r,n)?wO(e,`bin target '${n}' is a directory, not a file`):wO(e,`bin file '${n}' for '${t}' does not exist`)}async function DO(e,t,n,r,i,a){if(await SO(a.fs,i.cwd,t))return{error:wO(e,`package '${t}' does not expose an executable bin`)};let o=r?void 0:cO(t);if(o)return{error:{stdout:``,stderr:uO(e,t,n,o),exitCode:1}};let s=await TO(e,t,i,a);if(`error`in s)return s;let c=await xO(a.fs,i.cwd,t);return c?{resolved:c,installProgress:s.progress}:{error:wO(e,`package '${t}' was installed but does not expose an executable bin`)}}function OO(e,t){return{name:e,trusted:!0,async execute(n,r){if(n.length===0||n[0]===`--help`||n[0]===`-h`)return{stdout:fO(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:fO(e),stderr:``,exitCode:1};let c=s[0],l=s.slice(1),u;try{u=await xO(t.fs,r.cwd,c,o)}catch(t){return wO(e,CO(t))}let d=``;if(!u){if(o)return wO(e,`no global bin '${c}' found in ${Kn}`);let n=await DO(e,c,l,i,r,t);if(`error`in n)return n.error;u=n.resolved,d=n.installProgress}let f=await EO(e,c,u.binFilePath,t.fs);if(f)return f;let p=Wr(await pO(t.fs,u.binFilePath)),m=[`node`,u.argvName,...l],h=await Hr(p,m,r,void 0,{filename:u.binFilePath});return{stdout:h.stdout,stderr:d+h.stderr,exitCode:h.exitCode}}}}function kO(e={}){return S(`jshd`,async(t,n)=>{let{runJshd:r}=await import(`./run-2oVsdzZj.js`);return r(t,n,e)})}const AO=new Set([`SIGINT`,`SIGTERM`,`SIGKILL`,`SIGSTOP`,`SIGCONT`]);function jO(e={}){return S(`kill`,async t=>{if(t.length===0||t.includes(`--help`)||t.includes(`-h`))return LO();let n=e.processManager??MO();if(!n)return{stdout:``,stderr:`kill: no process manager available in this runtime
1467
+ `,exitCode:1};let r=NO(t);if(!r.ok)return{stdout:``,stderr:r.stderr,exitCode:r.exitCode};let{allDelivered:i,errors:a}=PO(n,r.pids,r.signal);return{stdout:``,stderr:a.length?`${a.join(`
1468
+ `)}\n`:``,exitCode:+!i}})}function MO(){let e=globalThis.__slicc_pm;return e instanceof Object&&typeof e.signal==`function`?e:null}function NO(e){let t=`SIGTERM`,n=[];for(let r=0;r<e.length;r++){let i=e[r];if(i===`-s`||i===`--signal`){let n=e[++r];if(!n)return{ok:!1,stderr:`kill: -s requires a signal name
1469
+ `,exitCode:2};let i=FO(n);if(i instanceof Error)return{ok:!1,stderr:`kill: ${i.message}\n`,exitCode:2};t=i;continue}if(i.startsWith(`-`)){let e=IO(i);if(e instanceof Error)return{ok:!1,stderr:`kill: ${e.message}\n`,exitCode:2};t=e;continue}let a=Number.parseInt(i,10);if(!Number.isFinite(a)||String(a)!==i)return{ok:!1,stderr:`kill: invalid pid '${i}'\n`,exitCode:2};n.push(a)}return n.length===0?{ok:!1,stderr:`kill: no pids supplied
1470
+ `,exitCode:2}:AO.has(t)?{ok:!0,signal:t,pids:n}:{ok:!1,stderr:`kill: signal ${t} not supported\n`,exitCode:2}}function PO(e,t,n){let r=!0,i=[];for(let a of t)e.signal(a,n)||(r=!1,i.push(e.get(a)?`kill: (${a}) - process already terminated`:`kill: (${a}) - no such process`));return{allDelivered:r,errors:i}}function FO(e){let t=e.toUpperCase(),n=t.startsWith(`SIG`)?t:`SIG${t}`;return n===`SIGINT`||n===`SIGTERM`||n===`SIGKILL`||n===`SIGSTOP`||n===`SIGCONT`?n:Error(`unknown signal '${e}'`)}function IO(e){return e===`-9`?`SIGKILL`:FO(e.slice(1))}function LO(){return{stdout:`Usage: kill [-s SIGNAL | -INT | -TERM | -KILL | -STOP | -CONT | -9] PID [PID …]
1471
1471
 
1472
1472
  Send a signal to one or more processes tracked by the kernel.
1473
1473
 
@@ -1489,7 +1489,7 @@ Examples:
1489
1489
  kill -INT 1024 1025 SIGINT both
1490
1490
  kill -STOP 1024 pause; \`kill -CONT 1024\` resumes
1491
1491
  kill -s SIGKILL 1024 explicit signal name
1492
- `,stderr:``,exitCode:0}}const IO=[`top`,`left`,`middle`,`right`,`bottom`],LO=`usage: layout <verb> [args]
1492
+ `,stderr:``,exitCode:0}}const RO=[`top`,`left`,`middle`,`right`,`bottom`],zO=`usage: layout <verb> [args]
1493
1493
 
1494
1494
  list List the built-in presets
1495
1495
  set <preset> Switch to a built-in preset
@@ -1509,9 +1509,9 @@ Examples:
1509
1509
  docs Describe the layout surfaces
1510
1510
  panels List the registered panel ids
1511
1511
 
1512
- Zones: ${IO.join(`, `)}
1513
- `,RO=new Set([`files`,`term`,`memory`,`monitor`]),zO=`sprinkle:`;function BO(e){return e===`chat`||RO.has(e)||e.startsWith(zO)?e:`${zO}${e}`}function VO(e){let t=/^(\d+(?:\.\d+)?)%$/.exec(e);if(t)return{percent:Number.parseFloat(t[1])};let n=/^(\d+(?:\.\d+)?)(?:px)?$/.exec(e);return n?{px:Number.parseFloat(n[1])}:null}const HO=`usage: layout size <surfaceId> [--width <px|percent>] [--height <px|percent>]`;function UO(e){let t=e[0],n=t?ps(t):null;return n?{kind:`set`,tree:n.tree}:{error:`unknown layout: ${t??`(none)`}`}}function WO(e){let t=e[0];return IO.includes(t)?{kind:`chat`,zone:t}:{error:`usage: layout chat <${IO.join(`|`)}>`}}function GO(e){let[t,n]=e;return!t||!IO.includes(n)?{error:`usage: layout open <surfaceId> <${IO.join(`|`)}>`}:{kind:`open`,surfaceId:BO(t),zone:n}}function KO(e){let t=e[0];return t?{kind:`close`,surfaceId:BO(t)}:{error:`usage: layout close <surfaceId>`}}function qO(e){let[t,n]=e;return!t||!IO.includes(n)?{error:`usage: layout move <surfaceId> <${IO.join(`|`)}>`}:{kind:`move`,surfaceId:BO(t),zone:n}}function JO(e,t,n){if(t!==`--width`&&t!==`--height`)return{error:`layout size: unknown flag "${t}"`};if(!n)return{error:`layout size: missing value for ${t}`};let r=VO(n);return r?(t===`--width`?r.percent==null?e.widthPx=r.px:e.widthPercent=r.percent:r.percent==null?e.heightPx=r.px:e.heightPercent=r.percent,null):{error:`layout size: invalid size "${n}" (want <number>px or <number>%)`}}function YO(e){let t=e[0];if(!t)return{error:HO};let n={};for(let t=1;t<e.length;t+=2){let r=JO(n,e[t],e[t+1]);if(r)return r}return n.widthPx==null&&n.widthPercent==null&&n.heightPx==null&&n.heightPercent==null?{error:HO}:{kind:`size`,surfaceId:BO(t),size:n}}function XO(e){let t=e[0];if(!t||t.startsWith(`--`))return{error:`usage: layout save <name> [--protected]`};if(!/^[\w.-]+$/.test(t))return{error:`invalid layout name "${t}" (use letters, digits, . _ -)`};let n=e.slice(1),r=n.find(e=>e!==`--protected`);return r?{error:`layout save: unknown flag "${r}"`}:{kind:`save`,name:t,protected:n.includes(`--protected`)}}function ZO(e,t){let n=t[0];return n?e===`load`?{kind:`load`,name:n}:{kind:`delete`,name:n}:{error:`usage: layout ${e} <name>`}}function QO(e,t){let n=t[0];return n?e===`show`?{kind:`show`,panelId:BO(n)}:{kind:`hide`,panelId:BO(n)}:{error:`usage: layout ${e} <panelId>`}}function $O(){let e=ps(ls);return e?{kind:`set`,tree:e.tree}:{error:`default layout unavailable`}}function ek(e){let[t,...n]=e;switch(t){case`set`:return UO(n);case`chat`:return WO(n);case`open`:return GO(n);case`close`:return KO(n);case`move`:return qO(n);case`size`:return YO(n);case`reset`:return{kind:`reset`};case`edit`:return $O();case`load`:return ZO(`load`,n);case`save`:return XO(n);case`delete`:return ZO(`delete`,n);case`docs`:return{kind:`docs`};case`panels`:return{kind:`panels`};case`show`:return QO(`show`,n);case`hide`:return QO(`hide`,n);default:return{error:`usage: layout <set|edit|chat|open|close|move|size|show|hide|load|save|delete|docs|panels|list|reset>`}}}function tk(){return S(`layout`,async e=>{if(w(e))return{stdout:e[0]?.startsWith(`-`)?LO:$e(`layout`,e[0],LO),stderr:``,exitCode:0};if(e[0]===`list`||e.length===0)return{stdout:`layouts: ${Object.keys(fs).join(`, `)}\ndefault: ${ls}\n`,stderr:``,exitCode:0};let t=ek(e);if(`error`in t)return{stdout:``,stderr:`layout: ${t.error}\n`,exitCode:1};let n=y();if(!n)return{stdout:``,stderr:`layout: UI is unavailable in this environment
1514
- `,exitCode:1};try{let e=await n.call(`layout-apply`,t);if(e&&e.applied===!1)return{stdout:``,stderr:`layout: ${e.error??`could not apply layout`}\n`,exitCode:1};let r=e?.output;return{stdout:r?`${r.replace(/\n*$/,``)}\n`:``,stderr:``,exitCode:0}}catch(e){return{stdout:``,stderr:`layout: ${e.message}\n`,exitCode:1}}})}const nk=ea.id;function rk(){return`local-llm — inspect and configure the Local LLM provider
1512
+ Zones: ${RO.join(`, `)}
1513
+ `,BO=new Set([`files`,`term`,`memory`,`monitor`]),VO=`sprinkle:`;function HO(e){return e===`chat`||BO.has(e)||e.startsWith(VO)?e:`${VO}${e}`}function UO(e){let t=/^(\d+(?:\.\d+)?)%$/.exec(e);if(t)return{percent:Number.parseFloat(t[1])};let n=/^(\d+(?:\.\d+)?)(?:px)?$/.exec(e);return n?{px:Number.parseFloat(n[1])}:null}const WO=`usage: layout size <surfaceId> [--width <px|percent>] [--height <px|percent>]`;function GO(e){let t=e[0],n=t?ps(t):null;return n?{kind:`set`,tree:n.tree}:{error:`unknown layout: ${t??`(none)`}`}}function KO(e){let t=e[0];return RO.includes(t)?{kind:`chat`,zone:t}:{error:`usage: layout chat <${RO.join(`|`)}>`}}function qO(e){let[t,n]=e;return!t||!RO.includes(n)?{error:`usage: layout open <surfaceId> <${RO.join(`|`)}>`}:{kind:`open`,surfaceId:HO(t),zone:n}}function JO(e){let t=e[0];return t?{kind:`close`,surfaceId:HO(t)}:{error:`usage: layout close <surfaceId>`}}function YO(e){let[t,n]=e;return!t||!RO.includes(n)?{error:`usage: layout move <surfaceId> <${RO.join(`|`)}>`}:{kind:`move`,surfaceId:HO(t),zone:n}}function XO(e,t,n){if(t!==`--width`&&t!==`--height`)return{error:`layout size: unknown flag "${t}"`};if(!n)return{error:`layout size: missing value for ${t}`};let r=UO(n);return r?(t===`--width`?r.percent==null?e.widthPx=r.px:e.widthPercent=r.percent:r.percent==null?e.heightPx=r.px:e.heightPercent=r.percent,null):{error:`layout size: invalid size "${n}" (want <number>px or <number>%)`}}function ZO(e){let t=e[0];if(!t)return{error:WO};let n={};for(let t=1;t<e.length;t+=2){let r=XO(n,e[t],e[t+1]);if(r)return r}return n.widthPx==null&&n.widthPercent==null&&n.heightPx==null&&n.heightPercent==null?{error:WO}:{kind:`size`,surfaceId:HO(t),size:n}}function QO(e){let t=e[0];if(!t||t.startsWith(`--`))return{error:`usage: layout save <name> [--protected]`};if(!/^[\w.-]+$/.test(t))return{error:`invalid layout name "${t}" (use letters, digits, . _ -)`};let n=e.slice(1),r=n.find(e=>e!==`--protected`);return r?{error:`layout save: unknown flag "${r}"`}:{kind:`save`,name:t,protected:n.includes(`--protected`)}}function $O(e,t){let n=t[0];return n?e===`load`?{kind:`load`,name:n}:{kind:`delete`,name:n}:{error:`usage: layout ${e} <name>`}}function ek(e,t){let n=t[0];return n?e===`show`?{kind:`show`,panelId:HO(n)}:{kind:`hide`,panelId:HO(n)}:{error:`usage: layout ${e} <panelId>`}}function tk(){let e=ps(ls);return e?{kind:`set`,tree:e.tree}:{error:`default layout unavailable`}}function nk(e){let[t,...n]=e;switch(t){case`set`:return GO(n);case`chat`:return KO(n);case`open`:return qO(n);case`close`:return JO(n);case`move`:return YO(n);case`size`:return ZO(n);case`reset`:return{kind:`reset`};case`edit`:return tk();case`load`:return $O(`load`,n);case`save`:return QO(n);case`delete`:return $O(`delete`,n);case`docs`:return{kind:`docs`};case`panels`:return{kind:`panels`};case`show`:return ek(`show`,n);case`hide`:return ek(`hide`,n);default:return{error:`usage: layout <set|edit|chat|open|close|move|size|show|hide|load|save|delete|docs|panels|list|reset>`}}}function rk(){return S(`layout`,async e=>{if(w(e))return{stdout:e[0]?.startsWith(`-`)?zO:$e(`layout`,e[0],zO),stderr:``,exitCode:0};if(e[0]===`list`||e.length===0)return{stdout:`layouts: ${Object.keys(fs).join(`, `)}\ndefault: ${ls}\n`,stderr:``,exitCode:0};let t=nk(e);if(`error`in t)return{stdout:``,stderr:`layout: ${t.error}\n`,exitCode:1};let n=y();if(!n)return{stdout:``,stderr:`layout: UI is unavailable in this environment
1514
+ `,exitCode:1};try{let e=await n.call(`layout-apply`,t);if(e&&e.applied===!1)return{stdout:``,stderr:`layout: ${e.error??`could not apply layout`}\n`,exitCode:1};let r=e?.output;return{stdout:r?`${r.replace(/\n*$/,``)}\n`:``,stderr:``,exitCode:0}}catch(e){return{stdout:``,stderr:`layout: ${e.message}\n`,exitCode:1}}})}const ik=ea.id;function ak(){return`local-llm — inspect and configure the Local LLM provider
1515
1515
 
1516
1516
  Usage:
1517
1517
  local-llm Show current config + verify connection
@@ -1530,20 +1530,20 @@ Common base URLs:
1530
1530
  llama.cpp http://localhost:8080/v1
1531
1531
  vLLM http://localhost:8000/v1
1532
1532
  Jan http://localhost:1337/v1
1533
- `}function ik(e,t){return e.version?t?`${e.kind} (${e.version})`:`${e.kind} ${e.version}`:e.kind}function ak(e){return e.map(e=>` • ${e}`)}function ok(e,t){let n=[`✗ Could not reach ${e}`,` runtime: ${ik(t.runtime,!0)}`,` error: ${t.error?.message??`unknown`}`];return t.error?.hint&&n.push(` hint: ${t.error.hint}`),{stdout:``,stderr:n.join(`
1533
+ `}function ok(e,t){return e.version?t?`${e.kind} (${e.version})`:`${e.kind} ${e.version}`:e.kind}function sk(e){return e.map(e=>` • ${e}`)}function ck(e,t){let n=[`✗ Could not reach ${e}`,` runtime: ${ok(t.runtime,!0)}`,` error: ${t.error?.message??`unknown`}`];return t.error?.hint&&n.push(` hint: ${t.error.hint}`),{stdout:``,stderr:n.join(`
1534
1534
  `)+`
1535
- `,exitCode:1}}function sk(e,t){return{stdout:[`✓ ${e}`,` runtime: ${ik(t.runtime,!0)}`,` models: ${t.models.length}`,...ak(t.models)].join(`
1535
+ `,exitCode:1}}function lk(e,t){return{stdout:[`✓ ${e}`,` runtime: ${ok(t.runtime,!0)}`,` models: ${t.models.length}`,...sk(t.models)].join(`
1536
1536
  `)+`
1537
- `,stderr:``,exitCode:0}}function ck(e,t){let n=t.models.length;return{stdout:[`✓ ${e} (${ik(t.runtime,!1)})`,` Saved ${n} model${n===1?``:`s`} to Settings:`,...ak(t.models)].join(`
1537
+ `,stderr:``,exitCode:0}}function uk(e,t){let n=t.models.length;return{stdout:[`✓ ${e} (${ok(t.runtime,!1)})`,` Saved ${n} model${n===1?``:`s`} to Settings:`,...sk(t.models)].join(`
1538
1538
  `)+`
1539
- `,stderr:``,exitCode:0}}function lk(){return S(nk,async e=>{if(e.includes(`--help`)||e.includes(`-h`))return{stdout:rk(),stderr:``,exitCode:0};let{getApiKeyForProvider:t,getRawApiKeyForProvider:n,getBaseUrlForProvider:r,addAccount:i}=await import(`./account-store-UA_3Tz4g.js`).then(e=>e.t),{verifyConnection:a}=await import(`./local-llm-3Pq3W9JZ.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(nk);if(!s)return{stdout:``,stderr:`Local LLM is not configured. Open Settings → Providers → Local LLM and set a base URL.
1540
- `,exitCode:1};let c=await a(s,t(nk)??void 0);if(!c.ok)return ok(s,c);if(o===`discover`){let e=n(nk)??``;return i(nk,e,s,c.models.join(`, `)),ck(s,c)}return sk(s,c)})}function uk(){return{stdout:`usage: man <topic>
1539
+ `,stderr:``,exitCode:0}}function dk(){return S(ik,async e=>{if(e.includes(`--help`)||e.includes(`-h`))return{stdout:ak(),stderr:``,exitCode:0};let{getApiKeyForProvider:t,getRawApiKeyForProvider:n,getBaseUrlForProvider:r,addAccount:i}=await import(`./account-store-D0ciUU3U.js`).then(e=>e.t),{verifyConnection:a}=await import(`./local-llm-BSMA7cC5.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(ik);if(!s)return{stdout:``,stderr:`Local LLM is not configured. Open Settings → Providers → Local LLM and set a base URL.
1540
+ `,exitCode:1};let c=await a(s,t(ik)??void 0);if(!c.ok)return ck(s,c);if(o===`discover`){let e=n(ik)??``;return i(ik,e,s,c.models.join(`, `)),uk(s,c)}return lk(s,c)})}function fk(){return{stdout:`usage: man <topic>
1541
1541
 
1542
1542
  Fetches documentation for a given topic from sliccy.com.
1543
- `,stderr:``,exitCode:0}}function dk(e){return e.replace(/<[^>]*>/g,``).replace(/&lt;/g,`<`).replace(/&gt;/g,`>`).replace(/&quot;/g,`"`).replace(/&#39;/g,`'`).replace(/&nbsp;/g,` `).replace(/&amp;/g,`&`).trimEnd()}function fk(){let e=h();return S(`man`,async t=>{if(t.includes(`--help`)||t.includes(`-h`))return uk();if(t.length===0)return{stdout:``,stderr:`What manual page do you want?
1543
+ `,stderr:``,exitCode:0}}function pk(e){return e.replace(/<[^>]*>/g,``).replace(/&lt;/g,`<`).replace(/&gt;/g,`>`).replace(/&quot;/g,`"`).replace(/&#39;/g,`'`).replace(/&nbsp;/g,` `).replace(/&amp;/g,`&`).trimEnd()}function mk(){let e=h();return S(`man`,async t=>{if(t.includes(`--help`)||t.includes(`-h`))return fk();if(t.length===0)return{stdout:``,stderr:`What manual page do you want?
1544
1544
  For example, try 'man commands'.
1545
- `,exitCode:1};let n=t.join(`-`),r=`https://www.sliccy.com/man/${n}.plain.html`;try{let t=await e(r,{method:`GET`});return t.status===404?{stdout:``,stderr:`No manual entry for ${n}\n`,exitCode:1}:t.status<200||t.status>=300?{stdout:``,stderr:`man: failed to fetch manual page for ${n}: ${t.status} ${t.statusText}\n`,exitCode:1}:{stdout:dk(new TextDecoder(`utf-8`).decode(t.body))+`
1546
- `,stderr:``,exitCode:0}}catch(e){return{stdout:``,stderr:`man: ${e instanceof Error?e.message:String(e)}\n`,exitCode:1}}})}const pk=[`--silent`,`-s`,`--interactive`,`-i`],mk=e(`mcp-command`),hk=`/workspace/.mcp/aliases`;function W(e){return{stdout:e,stderr:``,exitCode:0}}function G(e,t=1){return{stdout:``,stderr:`${e}\n`,exitCode:t}}function gk(e){return G(`mcp: ${e}`)}function _k(){return`usage: mcp <command> [args]
1545
+ `,exitCode:1};let n=t.join(`-`),r=`https://www.sliccy.com/man/${n}.plain.html`;try{let t=await e(r,{method:`GET`});return t.status===404?{stdout:``,stderr:`No manual entry for ${n}\n`,exitCode:1}:t.status<200||t.status>=300?{stdout:``,stderr:`man: failed to fetch manual page for ${n}: ${t.status} ${t.statusText}\n`,exitCode:1}:{stdout:pk(new TextDecoder(`utf-8`).decode(t.body))+`
1546
+ `,stderr:``,exitCode:0}}catch(e){return{stdout:``,stderr:`man: ${e instanceof Error?e.message:String(e)}\n`,exitCode:1}}})}const hk=[`--silent`,`-s`,`--interactive`,`-i`],gk=e(`mcp-command`),_k=`/workspace/.mcp/aliases`;function W(e){return{stdout:e,stderr:``,exitCode:0}}function G(e,t=1){return{stdout:``,stderr:`${e}\n`,exitCode:t}}function vk(e){return G(`mcp: ${e}`)}function yk(){return`usage: mcp <command> [args]
1547
1547
 
1548
1548
  Commands:
1549
1549
  add <url> <name> Register an MCP server. Runs OAuth if required.
@@ -1565,7 +1565,7 @@ Examples:
1565
1565
  mcp search forecast
1566
1566
  mcp auth weather
1567
1567
  mcp delete weather
1568
- `}function vk(e={}){return S(`mcp`,async t=>{if(t.length===0||t[0]===`--help`||t[0]===`-h`)return W(_k());let n=t[0],r=t.slice(1);try{switch(n){case`add`:return await yk(r,e);case`list`:case`ls`:return await xk(r,e);case`delete`:case`rm`:return await Tk(r,e);case`invoke`:return await Ek(r,e);case`search`:return await Ck(r,e);case`refresh`:return await Kk(r,e);case`auth`:return await qk(r,e);default:return G(`mcp: unknown subcommand "${n}" (try \`mcp --help\`)`)}}catch(e){let t=e instanceof Error?e.message:String(e);return mk.error(`mcp subcommand failed`,{sub:n,error:t}),e instanceof ta?G(`mcp ${n}: ${t}`,124):G(`mcp ${n}: ${t}`)}})}async function yk(e,t){if(w(e))return W(`usage: mcp add <url> <name>
1568
+ `}function bk(e={}){return S(`mcp`,async t=>{if(t.length===0||t[0]===`--help`||t[0]===`-h`)return W(yk());let n=t[0],r=t.slice(1);try{switch(n){case`add`:return await xk(r,e);case`list`:case`ls`:return await Ck(r,e);case`delete`:case`rm`:return await Dk(r,e);case`invoke`:return await Ok(r,e);case`search`:return await Tk(r,e);case`refresh`:return await Jk(r,e);case`auth`:return await Yk(r,e);default:return G(`mcp: unknown subcommand "${n}" (try \`mcp --help\`)`)}}catch(e){let t=e instanceof Error?e.message:String(e);return gk.error(`mcp subcommand failed`,{sub:n,error:t}),e instanceof ta?G(`mcp ${n}: ${t}`,124):G(`mcp ${n}: ${t}`)}})}async function xk(e,t){if(w(e))return W(`usage: mcp add <url> <name>
1569
1569
 
1570
1570
  Probes <url> with an unauthenticated MCP \`initialize\`. If the server
1571
1571
  returns 401, runs OAuth discovery → dynamic client registration → PKCE
@@ -1574,20 +1574,20 @@ authorization-code flow, stores the access token, and retries.
1574
1574
  On success, the server is persisted to /workspace/.mcp/servers.json and
1575
1575
  an alias shim is written to /workspace/.mcp/aliases/<name>.jsh so the
1576
1576
  short name resolves on the PATH.
1577
- `);let n=C(e,{});if(`error`in n)return gk(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-B3uS3nQU.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-Sb_wIqH2.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 bk(r,i,e.resourceMetadataUrl,t),l=new s({url:r,fetchImpl:t.fetchImpl,getAuthHeader:()=>Yk(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 eA(i,t);let m=await rA(i,f,t);if(u){let{registerMcpProvider:e}=await import(`./provider-DuCd6_sr.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: ${hk}/${i}.jsh`,u?` auth: oauth (provider mcp:${i})`:` auth: none`].join(`
1577
+ `);let n=C(e,{});if(`error`in n)return vk(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-DYTzgtEI.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-CmfvXtLV.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 Sk(r,i,e.resourceMetadataUrl,t),l=new s({url:r,fetchImpl:t.fetchImpl,getAuthHeader:()=>Zk(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 nA(i,t);let m=await aA(i,f,t);if(u){let{registerMcpProvider:e}=await import(`./provider-Dv9W3IvY.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: ${_k}/${i}.jsh`,u?` auth: oauth (provider mcp:${i})`:` auth: none`].join(`
1578
1578
  `)+`
1579
- `)}async function bk(e,t,n,r){let{discoverAuth:i,dynamicRegister:a,runAuthFlow:o}=await import(`./oauth-D20BEoY6.js`),{saveOAuthAccount:s}=await import(`./account-store-UA_3Tz4g.js`).then(e=>e.t),c=await Zk(r.oauthFetchImpl),l=r.oauthLauncher??await Xk(),u=await i(e,n,c);mk.debug(`MCP OAuth discovery succeeded`,{name:t,serverUrl:e,discoveryPath:u.discoveryPath,issuer:u.issuer});let d=await na(ge()),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 xk(e,t){if(w(e))return W(`usage: mcp list
1580
- `);let n=C(e,{});if(`error`in n)return gk(n.error);let{ensureAllMcpProvidersRegistered:r}=await import(`./provider-DuCd6_sr.js`);await r();let{listServers:i}=await import(`./store-B3uS3nQU.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(Sk(s))}function Sk(e){let t=e[0].map((t,n)=>e.reduce((e,t)=>Math.max(e,(t[n]??``).length),0));return e.map(e=>e.map((e,n)=>e.padEnd(t[n])).join(` `).trimEnd()).join(`
1579
+ `)}async function Sk(e,t,n,r){let{discoverAuth:i,dynamicRegister:a,runAuthFlow:o}=await import(`./oauth-D20BEoY6.js`),{saveOAuthAccount:s}=await import(`./account-store-D0ciUU3U.js`).then(e=>e.t),c=await $k(r.oauthFetchImpl),l=r.oauthLauncher??await Qk(),u=await i(e,n,c);gk.debug(`MCP OAuth discovery succeeded`,{name:t,serverUrl:e,discoveryPath:u.discoveryPath,issuer:u.issuer});let d=await na(ge()),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 Ck(e,t){if(w(e))return W(`usage: mcp list
1580
+ `);let n=C(e,{});if(`error`in n)return vk(n.error);let{ensureAllMcpProvidersRegistered:r}=await import(`./provider-Dv9W3IvY.js`);await r();let{listServers:i}=await import(`./store-DYTzgtEI.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(wk(s))}function wk(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(`
1581
1581
  `)+`
1582
- `}async function Ck(e,t){if(w(e))return W(`usage: mcp search <query>
1582
+ `}async function Tk(e,t){if(w(e))return W(`usage: mcp search <query>
1583
1583
 
1584
1584
  Case-insensitive substring search across the cached tools of every
1585
1585
  registered MCP server. Matches tool name OR description and prints a
1586
1586
  table of (server, tool, description, match-field) rows.
1587
- `);let n=C(e,{});if(`error`in n)return gk(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-DuCd6_sr.js`);await a();let{listServers:o}=await import(`./store-B3uS3nQU.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,wk(e.description),e.match]);return W(Sk(u))}function wk(e){if(!e)return``;let t=e.replace(/\s+/g,` `).trim();return t.length<=60?t:t.slice(0,59)+`…`}async function Tk(e,t){if(e.length===0||w(e))return e.length===0?G(`mcp delete: expected <name>`):W(`usage: mcp delete <name>
1588
- `);let n=C(e,{});if(`error`in n)return gk(n.error);let r=n.positionals[0];if(!r)return G(`mcp delete: expected <name>`);let{ensureMcpProviderRegistered:i,removeMcpProvider:a}=await import(`./provider-DuCd6_sr.js`);await i(r);let{deleteServer:o}=await import(`./store-B3uS3nQU.js`).then(e=>e.r),s=await o(r,t.fs);await tA(r,t),await nA(r,t);let c=`mcp:${r}`,l=!1;try{let{removeAccount:e,getAccounts:t}=await import(`./account-store-UA_3Tz4g.js`).then(e=>e.t);t().some(e=>e.providerId===c)&&(await e(c),l=!0)}catch(e){mk.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(`
1587
+ `);let n=C(e,{});if(`error`in n)return vk(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-Dv9W3IvY.js`);await a();let{listServers:o}=await import(`./store-DYTzgtEI.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,Ek(e.description),e.match]);return W(wk(u))}function Ek(e){if(!e)return``;let t=e.replace(/\s+/g,` `).trim();return t.length<=60?t:t.slice(0,59)+`…`}async function Dk(e,t){if(e.length===0||w(e))return e.length===0?G(`mcp delete: expected <name>`):W(`usage: mcp delete <name>
1588
+ `);let n=C(e,{});if(`error`in n)return vk(n.error);let r=n.positionals[0];if(!r)return G(`mcp delete: expected <name>`);let{ensureMcpProviderRegistered:i,removeMcpProvider:a}=await import(`./provider-Dv9W3IvY.js`);await i(r);let{deleteServer:o}=await import(`./store-DYTzgtEI.js`).then(e=>e.r),s=await o(r,t.fs);await rA(r,t),await iA(r,t);let c=`mcp:${r}`,l=!1;try{let{removeAccount:e,getAccounts:t}=await import(`./account-store-D0ciUU3U.js`).then(e=>e.t);t().some(e=>e.providerId===c)&&(await e(c),l=!0)}catch(e){gk.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(`
1589
1589
  `)+`
1590
- `)}async function Ek(e,t){if(e.length===0)return G(`mcp invoke: expected <name>`);if(w(e.slice(0,1)))return W(kk());let n=C([e[0]],{});if(`error`in n)return gk(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-DuCd6_sr.js`);await a(r);let{getServer:o}=await import(`./store-B3uS3nQU.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(Ak(r,s,c));let l=C([i[0]],{});if(`error`in l)return gk(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}=Dk(i.slice(1));if(w(p))return W(Mk(r,d));let h=Nk(p,d.inputSchema);if(!h.ok)return G(`mcp invoke: ${h.error}`);let{McpClient:g}=await import(`./client-Sb_wIqH2.js`).then(e=>e.n),_=new g({url:s.url,fetchImpl:t.fetchImpl,headers:s.headers,getAuthHeader:s.auth?()=>Yk(r):void 0,...f===void 0?{}:{timeoutMs:f}});await _.initialize();let v=Gk(await _.toolsCall(u,h.value));return m.length>0&&(v.stderr=m.map(e=>`${e}\n`).join(``)+v.stderr),v}function Dk(e){let t=[],n=[],r,i=0;for(;i<e.length;){let a=e[i];if(a.startsWith(`--timeout=`)){let e=Ok(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=Ok(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 Ok(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 kk(){return`usage: mcp invoke <name> [tool] [--timeout <seconds>] [--flag value …]
1590
+ `)}async function Ok(e,t){if(e.length===0)return G(`mcp invoke: expected <name>`);if(w(e.slice(0,1)))return W(jk());let n=C([e[0]],{});if(`error`in n)return vk(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-Dv9W3IvY.js`);await a(r);let{getServer:o}=await import(`./store-DYTzgtEI.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(Mk(r,s,c));let l=C([i[0]],{});if(`error`in l)return vk(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}=kk(i.slice(1));if(w(p))return W(Pk(r,d));let h=Fk(p,d.inputSchema);if(!h.ok)return G(`mcp invoke: ${h.error}`);let{McpClient:g}=await import(`./client-CmfvXtLV.js`).then(e=>e.n),_=new g({url:s.url,fetchImpl:t.fetchImpl,headers:s.headers,getAuthHeader:s.auth?()=>Zk(r):void 0,...f===void 0?{}:{timeoutMs:f}});await _.initialize();let v=qk(await _.toolsCall(u,h.value));return m.length>0&&(v.stderr=m.map(e=>`${e}\n`).join(``)+v.stderr),v}function kk(e){let t=[],n=[],r,i=0;for(;i<e.length;){let a=e[i];if(a.startsWith(`--timeout=`)){let e=Ak(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=Ak(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 Ak(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 jk(){return`usage: mcp invoke <name> [tool] [--timeout <seconds>] [--flag value …]
1591
1591
 
1592
1592
  mcp invoke <name> List tools on <name>.
1593
1593
  mcp invoke <name> <tool> --help Show flags for <tool>.
@@ -1607,20 +1607,20 @@ Arguments are coerced according to the tool's JSON Schema:
1607
1607
  array of objects) is parsed as JSON, e.g. \`--params '{"url":"…"}'\`.
1608
1608
  Nested fields can be set with dotted flags (\`--params.url …\`).
1609
1609
  Unknown \`--flags\` exit non-zero instead of being dropped.
1610
- `}function Ak(e,t,n){let r=[];if(r.push(`MCP server "${e}" → ${t.url}`),n.length===0)r.push(" (no tools cached — run `mcp refresh "+e+"`)");else{r.push(``),r.push(`Tools:`);let t=n.reduce((e,t)=>Math.max(e,t.name.length),0);for(let e of n)r.push(` ${e.name.padEnd(t)} ${e.description??``}`.trimEnd());r.push(``),r.push(`Run \`${e} <tool> --help\` for tool-specific flags.`)}return r.join(`
1610
+ `}function Mk(e,t,n){let r=[];if(r.push(`MCP server "${e}" → ${t.url}`),n.length===0)r.push(" (no tools cached — run `mcp refresh "+e+"`)");else{r.push(``),r.push(`Tools:`);let t=n.reduce((e,t)=>Math.max(e,t.name.length),0);for(let e of n)r.push(` ${e.name.padEnd(t)} ${e.description??``}`.trimEnd());r.push(``),r.push(`Run \`${e} <tool> --help\` for tool-specific flags.`)}return r.join(`
1611
1611
  `)+`
1612
- `}function jk(e){return e??{}}function Mk(e,t){let n=jk(t.inputSchema),r=n.properties??{},i=new Set(Array.isArray(n.required)?n.required:[]),a=[];a.push(`usage: ${e} ${t.name} [flags]`),t.description&&(a.push(``),a.push(t.description));let o=Object.keys(r);if(o.length===0)return a.push(``),a.push(`(no flags declared)`),a.join(`
1612
+ `}function Nk(e){return e??{}}function Pk(e,t){let n=Nk(t.inputSchema),r=n.properties??{},i=new Set(Array.isArray(n.required)?n.required:[]),a=[];a.push(`usage: ${e} ${t.name} [flags]`),t.description&&(a.push(``),a.push(t.description));let o=Object.keys(r);if(o.length===0)return a.push(``),a.push(`(no flags declared)`),a.join(`
1613
1613
  `)+`
1614
1614
  `;a.push(``),a.push(`Flags:`);let s=o.map(e=>` --${e} <${r[e]?.type??`string`}>`),c=s.reduce((e,t)=>Math.max(e,t.length),0);for(let e=0;e<o.length;e++){let t=o[e],n=r[t]?.description??``,l=i.has(t)?` (required)`:``;a.push(`${s[e].padEnd(c)} ${n}${l}`.trimEnd())}return a.join(`
1615
1615
  `)+`
1616
- `}function Nk(e,t){let n=jk(t),r=n.properties??{},i=new Set(Array.isArray(n.required)?n.required:[]),a=zk(),o=0;for(;o<e.length;){let t=Pk(e,o,r,a);if(!t.ok)return t;o=t.nextIndex}for(let e of i)if(!Object.hasOwn(a,e))return{ok:!1,error:`missing required flag --${e}`};return{ok:!0,value:a}}function Pk(e,t,n,r){let i=e[t];if(!i.startsWith(`--`))return{ok:!1,error:`unexpected positional argument "${i}"`};let{key:a,inlineValue:o}=Hk(i),s=Fk(a,n);if(!s.ok)return s;let{rootKey:c,dottedPath:l,meta:u}=s,d=u.type,f=d??`string`,p=f===`array`,m=(p?u.items?.type:void 0)??`string`;if(l&&d!==void 0&&d!==`object`)return{ok:!1,error:`unknown flag: --${a}`};let h=Ik(e,t,a,o,f,l);if(!h.ok)return h;if(h.bareBoolean)return r[c]=!0,{ok:!0,nextIndex:h.nextIndex};let g=l?`string`:p?m:f,_=Uk(h.raw,g);if(!_.ok)return{ok:!1,error:`--${a}: ${_.error}`};let v=Lk(r,c,l,_.value,p);return v.ok?{ok:!0,nextIndex:h.nextIndex}:v}function Fk(e,t){if(Object.hasOwn(t,e))return{ok:!0,rootKey:e,dottedPath:null,meta:t[e]??{}};let n=e.indexOf(`.`);if(n<=0)return{ok:!1,error:`unknown flag: --${e}`};let r=e.slice(0,n),i=e.slice(n+1);if(!Object.hasOwn(t,r)||i.length===0)return{ok:!1,error:`unknown flag: --${e}`};let a=i.split(`.`);return Bk(r)||a.some(e=>e.length===0||Bk(e))?{ok:!1,error:`unknown flag: --${e}`}:{ok:!0,rootKey:r,dottedPath:a,meta:t[r]??{}}}function Ik(e,t,n,r,i,a){if(r!==void 0)return{ok:!0,raw:r,nextIndex:t+1,bareBoolean:!1};let o=e[t+1];return!a&&i===`boolean`&&(o===void 0||o.startsWith(`--`))?{ok:!0,raw:``,nextIndex:t+1,bareBoolean:!0}:o===void 0?{ok:!1,error:`flag --${n} requires a value`}:{ok:!0,raw:o,nextIndex:t+2,bareBoolean:!1}}function Lk(e,t,n,r,i){if(n)return Rk(e,t,n,r);if(i){let n=e[t];return Array.isArray(n)?n.push(r):e[t]=[r],{ok:!0}}let a=e[t];return Vk(a)&&Vk(r)?(Object.assign(a,r),{ok:!0}):(e[t]=r,{ok:!0})}function Rk(e,t,n,r){if(Bk(t)||n.some(e=>e.length===0||Bk(e)))return{ok:!1,error:`unknown flag: --${t}.${n.join(`.`)}`};let i=Object.hasOwn(e,t)?e[t]:void 0;if(i===void 0)e[t]=zk();else if(!Vk(i))return{ok:!1,error:`--${t}: cannot nest into a ${typeof i} value`};let a=e[t];for(let e=0;e<n.length-1;e++){let r=n[e],i=Object.hasOwn(a,r)?a[r]:void 0;if(i===void 0)a[r]=zk();else if(!Vk(i))return{ok:!1,error:`--${t}.${n.slice(0,e+1).join(`.`)}: cannot nest into a ${typeof i} value`};a=a[r]}return a[n[n.length-1]]=r,{ok:!0}}function zk(){return Object.create(null)}function Bk(e){return e===`__proto__`||e===`prototype`||e===`constructor`}function Vk(e){return typeof e==`object`&&!!e&&!Array.isArray(e)&&e!==Object.prototype}function Hk(e){let t=e.indexOf(`=`);return t>2?{key:e.slice(2,t),inlineValue:e.slice(t+1)}:{key:e.slice(2),inlineValue:void 0}}function Uk(e,t){switch(t){case`integer`:return/^-?\d+$/.test(e)?{ok:!0,value:Number(e)}:{ok:!1,error:`expected integer, got "${e}"`};case`number`:{let t=Number(e);return Number.isFinite(t)?{ok:!0,value:t}:{ok:!1,error:`expected number, got "${e}"`}}case`boolean`:return e===`true`||e===`1`||e===`yes`?{ok:!0,value:!0}:e===`false`||e===`0`||e===`no`?{ok:!0,value:!1}:{ok:!1,error:`expected boolean, got "${e}"`};case`object`:return Wk(e);default:return{ok:!0,value:e}}}function Wk(e){let t;try{t=JSON.parse(e)}catch{return{ok:!1,error:`expected object JSON, got "${e}"`}}return Vk(t)?{ok:!0,value:t}:{ok:!1,error:`expected object JSON, got "${e}"`}}function Gk(e){let t=e??{},n=Array.isArray(t.content)?t.content:[],r=[];for(let e of n)if(!(!e||typeof e!=`object`))switch(e.type){case`text`:typeof e.text==`string`&&r.push(e.text);break;case`image`:r.push(`[image: ${e.mimeType??`unknown mime`}]`);break;case`resource`:{let t=e.resource?.uri??e.uri??`unknown uri`;r.push(`[resource: ${t}]`);break}default:r.push(`[${e.type??`unknown`}]`)}let i=r.join(`
1616
+ `}function Fk(e,t){let n=Nk(t),r=n.properties??{},i=new Set(Array.isArray(n.required)?n.required:[]),a=Vk(),o=0;for(;o<e.length;){let t=Ik(e,o,r,a);if(!t.ok)return t;o=t.nextIndex}for(let e of i)if(!Object.hasOwn(a,e))return{ok:!1,error:`missing required flag --${e}`};return{ok:!0,value:a}}function Ik(e,t,n,r){let i=e[t];if(!i.startsWith(`--`))return{ok:!1,error:`unexpected positional argument "${i}"`};let{key:a,inlineValue:o}=Wk(i),s=Lk(a,n);if(!s.ok)return s;let{rootKey:c,dottedPath:l,meta:u}=s,d=u.type,f=d??`string`,p=f===`array`,m=(p?u.items?.type:void 0)??`string`;if(l&&d!==void 0&&d!==`object`)return{ok:!1,error:`unknown flag: --${a}`};let h=Rk(e,t,a,o,f,l);if(!h.ok)return h;if(h.bareBoolean)return r[c]=!0,{ok:!0,nextIndex:h.nextIndex};let g=l?`string`:p?m:f,_=Gk(h.raw,g);if(!_.ok)return{ok:!1,error:`--${a}: ${_.error}`};let v=zk(r,c,l,_.value,p);return v.ok?{ok:!0,nextIndex:h.nextIndex}:v}function Lk(e,t){if(Object.hasOwn(t,e))return{ok:!0,rootKey:e,dottedPath:null,meta:t[e]??{}};let n=e.indexOf(`.`);if(n<=0)return{ok:!1,error:`unknown flag: --${e}`};let r=e.slice(0,n),i=e.slice(n+1);if(!Object.hasOwn(t,r)||i.length===0)return{ok:!1,error:`unknown flag: --${e}`};let a=i.split(`.`);return Hk(r)||a.some(e=>e.length===0||Hk(e))?{ok:!1,error:`unknown flag: --${e}`}:{ok:!0,rootKey:r,dottedPath:a,meta:t[r]??{}}}function Rk(e,t,n,r,i,a){if(r!==void 0)return{ok:!0,raw:r,nextIndex:t+1,bareBoolean:!1};let o=e[t+1];return!a&&i===`boolean`&&(o===void 0||o.startsWith(`--`))?{ok:!0,raw:``,nextIndex:t+1,bareBoolean:!0}:o===void 0?{ok:!1,error:`flag --${n} requires a value`}:{ok:!0,raw:o,nextIndex:t+2,bareBoolean:!1}}function zk(e,t,n,r,i){if(n)return Bk(e,t,n,r);if(i){let n=e[t];return Array.isArray(n)?n.push(r):e[t]=[r],{ok:!0}}let a=e[t];return Uk(a)&&Uk(r)?(Object.assign(a,r),{ok:!0}):(e[t]=r,{ok:!0})}function Bk(e,t,n,r){if(Hk(t)||n.some(e=>e.length===0||Hk(e)))return{ok:!1,error:`unknown flag: --${t}.${n.join(`.`)}`};let i=Object.hasOwn(e,t)?e[t]:void 0;if(i===void 0)e[t]=Vk();else if(!Uk(i))return{ok:!1,error:`--${t}: cannot nest into a ${typeof i} value`};let a=e[t];for(let e=0;e<n.length-1;e++){let r=n[e],i=Object.hasOwn(a,r)?a[r]:void 0;if(i===void 0)a[r]=Vk();else if(!Uk(i))return{ok:!1,error:`--${t}.${n.slice(0,e+1).join(`.`)}: cannot nest into a ${typeof i} value`};a=a[r]}return a[n[n.length-1]]=r,{ok:!0}}function Vk(){return Object.create(null)}function Hk(e){return e===`__proto__`||e===`prototype`||e===`constructor`}function Uk(e){return typeof e==`object`&&!!e&&!Array.isArray(e)&&e!==Object.prototype}function Wk(e){let t=e.indexOf(`=`);return t>2?{key:e.slice(2,t),inlineValue:e.slice(t+1)}:{key:e.slice(2),inlineValue:void 0}}function Gk(e,t){switch(t){case`integer`:return/^-?\d+$/.test(e)?{ok:!0,value:Number(e)}:{ok:!1,error:`expected integer, got "${e}"`};case`number`:{let t=Number(e);return Number.isFinite(t)?{ok:!0,value:t}:{ok:!1,error:`expected number, got "${e}"`}}case`boolean`:return e===`true`||e===`1`||e===`yes`?{ok:!0,value:!0}:e===`false`||e===`0`||e===`no`?{ok:!0,value:!1}:{ok:!1,error:`expected boolean, got "${e}"`};case`object`:return Kk(e);default:return{ok:!0,value:e}}}function Kk(e){let t;try{t=JSON.parse(e)}catch{return{ok:!1,error:`expected object JSON, got "${e}"`}}return Uk(t)?{ok:!0,value:t}:{ok:!1,error:`expected object JSON, got "${e}"`}}function qk(e){let t=e??{},n=Array.isArray(t.content)?t.content:[],r=[];for(let e of n)if(!(!e||typeof e!=`object`))switch(e.type){case`text`:typeof e.text==`string`&&r.push(e.text);break;case`image`:r.push(`[image: ${e.mimeType??`unknown mime`}]`);break;case`resource`:{let t=e.resource?.uri??e.uri??`unknown uri`;r.push(`[resource: ${t}]`);break}default:r.push(`[${e.type??`unknown`}]`)}let i=r.join(`
1617
1617
  `),a=i.endsWith(`
1618
1618
  `)?``:`
1619
- `;return t.isError?{stdout:``,stderr:(i||`(tool reported error)`)+a,exitCode:1}:{stdout:i+(i?a:``),stderr:``,exitCode:0}}async function Kk(e,t){if(e.length===0||w(e))return e.length===0?G(`mcp refresh: expected <name>`):W(`usage: mcp refresh <name>
1619
+ `;return t.isError?{stdout:``,stderr:(i||`(tool reported error)`)+a,exitCode:1}:{stdout:i+(i?a:``),stderr:``,exitCode:0}}async function Jk(e,t){if(e.length===0||w(e))return e.length===0?G(`mcp refresh: expected <name>`):W(`usage: mcp refresh <name>
1620
1620
 
1621
1621
  Re-fetches the tool catalog and \`apps/list\` for <name>. Does NOT refresh
1622
1622
  OAuth tokens — for OAuth token refresh use \`mcp auth <name>\`.
1623
- `);let n=C(e,{});if(`error`in n)return gk(n.error);let r=n.positionals[0];if(!r)return G(`mcp refresh: expected <name>`);let{ensureMcpProviderRegistered:i}=await import(`./provider-DuCd6_sr.js`);await i(r);let{getServer:a,setServer:o}=await import(`./store-B3uS3nQU.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-Sb_wIqH2.js`).then(e=>e.n),u=new c({url:s.url,fetchImpl:t.fetchImpl,headers:s.headers,getAuthHeader:s.auth?()=>Yk(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 rA(r,f,t);return W(`Refreshed "${r}" — tools: ${d.length}, apps: ${f.length} (${p} sprinkle${p===1?``:`s`})\n`)}async function qk(e,t){if(w(e))return W(`usage: mcp auth <name> [--silent | --interactive]
1623
+ `);let n=C(e,{});if(`error`in n)return vk(n.error);let r=n.positionals[0];if(!r)return G(`mcp refresh: expected <name>`);let{ensureMcpProviderRegistered:i}=await import(`./provider-Dv9W3IvY.js`);await i(r);let{getServer:a,setServer:o}=await import(`./store-DYTzgtEI.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-CmfvXtLV.js`).then(e=>e.n),u=new c({url:s.url,fetchImpl:t.fetchImpl,headers:s.headers,getAuthHeader:s.auth?()=>Zk(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 aA(r,f,t);return W(`Refreshed "${r}" — tools: ${d.length}, apps: ${f.length} (${p} sprinkle${p===1?``:`s`})\n`)}async function Yk(e,t){if(w(e))return W(`usage: mcp auth <name> [--silent | --interactive]
1624
1624
 
1625
1625
  Re-authenticate an existing MCP server. By default, attempts a silent
1626
1626
  token renewal using the persisted refresh_token; if that returns no
@@ -1632,7 +1632,7 @@ Options:
1632
1632
  -i, --interactive Skip silent renewal and open the OAuth popup
1633
1633
  directly. Use after revoking a refresh token or
1634
1634
  when the AS no longer accepts the cached one.
1635
- `);let n=C(e,{bool:pk});if(`error`in n)return gk(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-DuCd6_sr.js`),s=await o(r,{fetchImpl:t.oauthFetchImpl,launcher:t.oauthLauncher}),{getServer:c}=await import(`./store-B3uS3nQU.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-CWFcdblf.js`).then(e=>e.r),f=d(u);if(!f)return G(`mcp auth: provider "${u}" is not registered`);if(a)return await Jk(r,f,t);if(!f.onSilentRenew)return i?G(`mcp auth: provider "${u}" does not support silent renewal; retry without --silent`):await Jk(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`);mk.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 Jk(r,f,t)}async function Jk(e,t,n){if(!t.onOAuthLogin)return G(`mcp auth: provider "${t.id}" does not support interactive OAuth login`);let r=n.oauthLauncher??await Xk(),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 Yk(e){let t=`mcp:${e}`,{getOAuthAccountInfo:n}=await import(`./account-store-UA_3Tz4g.js`).then(e=>e.t),r=n(t);if(!r)return null;if(r.expired){try{let{getRegisteredProviderConfig:e}=await import(`./providers-CWFcdblf.js`).then(e=>e.r),n=await e(t)?.onSilentRenew?.();if(n)return`Bearer ${n}`}catch(e){mk.debug(`silent renewal threw`,{providerId:t,error:e instanceof Error?e.message:String(e)})}return null}return`Bearer ${r.token}`}async function Xk(){let{createOAuthLauncher:e}=await import(`./oauth-service-CxXBA9rC.js`);return e()}async function Zk(e){if(e)return e;let{createProxiedFetch:t}=await import(`./proxied-fetch-CNe6icTW.js`).then(e=>e.i),n=t();return async(e,t)=>{let r=await n(e,{method:t?.method,headers:t?.headers,body:t?.body}),i=new TextDecoder().decode(r.body);return{ok:r.status>=200&&r.status<300,status:r.status,statusText:r.statusText,text:async()=>i,json:async()=>JSON.parse(i),headers:{get:e=>r.headers[e.toLowerCase()]??null}}}}async function Qk(e){if(e)return e;let{VirtualFS:t}=await import(`./fs-Bvj_6WV6.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 $k(e){return`// MCP alias for "${e}" — forwards args to \`mcp invoke ${e}\`.
1635
+ `);let n=C(e,{bool:hk});if(`error`in n)return vk(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-Dv9W3IvY.js`),s=await o(r,{fetchImpl:t.oauthFetchImpl,launcher:t.oauthLauncher}),{getServer:c}=await import(`./store-DYTzgtEI.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-DLk_1jra.js`).then(e=>e.r),f=d(u);if(!f)return G(`mcp auth: provider "${u}" is not registered`);if(a)return await Xk(r,f,t);if(!f.onSilentRenew)return i?G(`mcp auth: provider "${u}" does not support silent renewal; retry without --silent`):await Xk(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`);gk.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 Xk(r,f,t)}async function Xk(e,t,n){if(!t.onOAuthLogin)return G(`mcp auth: provider "${t.id}" does not support interactive OAuth login`);let r=n.oauthLauncher??await Qk(),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 Zk(e){let t=`mcp:${e}`,{getOAuthAccountInfo:n}=await import(`./account-store-D0ciUU3U.js`).then(e=>e.t),r=n(t);if(!r)return null;if(r.expired){try{let{getRegisteredProviderConfig:e}=await import(`./providers-DLk_1jra.js`).then(e=>e.r),n=await e(t)?.onSilentRenew?.();if(n)return`Bearer ${n}`}catch(e){gk.debug(`silent renewal threw`,{providerId:t,error:e instanceof Error?e.message:String(e)})}return null}return`Bearer ${r.token}`}async function Qk(){let{createOAuthLauncher:e}=await import(`./oauth-service-Dn_Xz1FZ.js`);return e()}async function $k(e){if(e)return e;let{createProxiedFetch:t}=await import(`./proxied-fetch-J19bK2dG.js`).then(e=>e.i),n=t();return async(e,t)=>{let r=await n(e,{method:t?.method,headers:t?.headers,body:t?.body}),i=new TextDecoder().decode(r.body);return{ok:r.status>=200&&r.status<300,status:r.status,statusText:r.statusText,text:async()=>i,json:async()=>JSON.parse(i),headers:{get:e=>r.headers[e.toLowerCase()]??null}}}}async function eA(e){if(e)return e;let{VirtualFS:t}=await import(`./fs-TVcPtHbB.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 tA(e){return`// MCP alias for "${e}" — forwards args to \`mcp invoke ${e}\`.
1636
1636
  // Auto-generated by \`mcp add ${e}\`; do not edit by hand.
1637
1637
  const { promisify } = require('util');
1638
1638
  const { exec } = require('child_process');
@@ -1661,8 +1661,8 @@ try {
1661
1661
  if (stdout) process.stdout.write(stdout);
1662
1662
  if (stderr) process.stderr.write(stderr);
1663
1663
  process.exit(exitCode);
1664
- `}async function eA(e,t){let n=await Qk(t.fs);await n.mkdir(hk,{recursive:!0}),await n.writeFile(`${hk}/${e}.jsh`,$k(e)),t.scriptCatalog?.invalidateJsh()}async function tA(e,t){let n=await Qk(t.fs),r=`${hk}/${e}.jsh`;try{await n.exists(r)&&await n.rm(r)}catch(e){mk.debug(`alias removal failed`,{path:r,error:e instanceof Error?e.message:String(e)})}t.scriptCatalog?.invalidateJsh()}async function nA(e,t){let{removeAppSprinkles:n}=await import(`./apps-BX-IbYH9.js`);await n(e,t.fs)}async function rA(e,t,n){try{let{materializeAppSprinkles:r}=await import(`./apps-BX-IbYH9.js`);return(await r(e,t,n.fs)).length}catch(t){return mk.warn(`mcp: failed to materialize app sprinkles`,{name:e,error:t instanceof Error?t.message:String(t)}),0}}function iA(e){return{stdout:``,stderr:`meminfo: ${e}\n`,exitCode:1}}function aA(e){if(e<1024)return`${e} B`;let t=[`KB`,`MB`,`GB`],n=e,r=`B`;for(let e of t){if(n<1024)break;n/=1024,r=e}return`${n.toFixed(1)} ${r}`}function oA(e){return e.attribution.length===0?`(shared)`:e.attribution.map(e=>{let t=e.container?.src??e.container?.id??e.url??`?`;return e.scope?`${e.scope} ${t}`:t}).join(`, `)}function sA(){let e=globalThis.performance,t=e?.measureUserAgentSpecificMemory;return t?t.bind(e):null}function cA(e){if(e[0]===`--help`||e[0]===`-h`||e[0]===`help`)return{help:!0};let t=!1;for(let n of e){if(n!==`--json`)return{error:`unknown option '${n}' — see \`meminfo --help\``};t=!0}return{help:!1,json:t}}function lA(e){let t=[`total: ${aA(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(`${aA(e.bytes).padEnd(10)} ${e.types.join(`,`).padEnd(20)} ${oA(e)}`)}return`${t.join(`
1665
- `)}\n`}function uA(e={}){return S(`meminfo`,async t=>{let n=cA(t);if(`error`in n)return iA(n.error);if(n.help)return{stdout:`meminfo - agent-cluster memory diagnostics
1664
+ `}async function nA(e,t){let n=await eA(t.fs);await n.mkdir(_k,{recursive:!0}),await n.writeFile(`${_k}/${e}.jsh`,tA(e)),t.scriptCatalog?.invalidateJsh()}async function rA(e,t){let n=await eA(t.fs),r=`${_k}/${e}.jsh`;try{await n.exists(r)&&await n.rm(r)}catch(e){gk.debug(`alias removal failed`,{path:r,error:e instanceof Error?e.message:String(e)})}t.scriptCatalog?.invalidateJsh()}async function iA(e,t){let{removeAppSprinkles:n}=await import(`./apps-C20mWJ8w.js`);await n(e,t.fs)}async function aA(e,t,n){try{let{materializeAppSprinkles:r}=await import(`./apps-C20mWJ8w.js`);return(await r(e,t,n.fs)).length}catch(t){return gk.warn(`mcp: failed to materialize app sprinkles`,{name:e,error:t instanceof Error?t.message:String(t)}),0}}function oA(e){return{stdout:``,stderr:`meminfo: ${e}\n`,exitCode:1}}function sA(e){if(e<1024)return`${e} B`;let t=[`KB`,`MB`,`GB`],n=e,r=`B`;for(let e of t){if(n<1024)break;n/=1024,r=e}return`${n.toFixed(1)} ${r}`}function cA(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 lA(){let e=globalThis.performance,t=e?.measureUserAgentSpecificMemory;return t?t.bind(e):null}function uA(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 dA(e){let t=[`total: ${sA(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(`${sA(e.bytes).padEnd(10)} ${e.types.join(`,`).padEnd(20)} ${cA(e)}`)}return`${t.join(`
1665
+ `)}\n`}function fA(e={}){return S(`meminfo`,async t=>{let n=uA(t);if(`error`in n)return oA(n.error);if(n.help)return{stdout:`meminfo - agent-cluster memory diagnostics
1666
1666
 
1667
1667
  Usage:
1668
1668
  meminfo Human-readable breakdown (bytes, scope, types, url)
@@ -1673,8 +1673,8 @@ Notes:
1673
1673
  Document-Isolation-Policy). Embedded floats cannot be isolated and
1674
1674
  report why instead.
1675
1675
  - The browser randomizes measurement timing — expect a short delay.
1676
- `,stderr:``,exitCode:0};let r=e.isIsolated?e.isIsolated():globalThis.crossOriginIsolated===!0,i=e.measure??sA();if(!r&&!e.measure)return iA(`memory measurement requires a cross-origin-isolated runtime (Document-Isolation-Policy) — this runtime is not isolated`);if(!i)return iA(`performance.measureUserAgentSpecificMemory is not available in this browser`);let a;try{a=await i()}catch(e){return iA(e instanceof Error?e.message:String(e))}return n.json?{stdout:`${JSON.stringify(a,null,2)}\n`,stderr:``,exitCode:0}:{stdout:lA(a),stderr:``,exitCode:0}})}function dA(e){return S(`memory`,async t=>{let{runMemory:n}=await import(`./run-C0CADtt5.js`);return n(t,e)})}function fA(){return S(`mktemp`,async(e,t)=>{let{runMktemp:n}=await import(`./run-dAJe7sKp.js`);return n(e,t)})}const pA=`/.cache/artificial-analysis.json`,mA=[`--all`,`--all-versions`,`--json`,`--refresh`,`--no-benchmarks`,`--help`,`-h`],hA=[`--provider`];function gA(e){return{stdout:``,stderr:e.endsWith(`
1677
- `)?e:`${e}\n`,exitCode:1}}async function _A(e){try{let t=await e.readFile(pA),n=JSON.parse(t);if(Date.now()-n.fetchedAt<864e5)return n.models}catch{}return null}function vA(){try{return localStorage.getItem(`aa_api_key`)}catch{return null}}function yA(e){return e.map(e=>{let t=e;return{slug:t.slug??``,name:t.name??``,creator_slug:t.model_creator?.slug??``,intelligence_index:t.evaluations?.artificial_analysis_intelligence_index??null,coding_index:t.evaluations?.artificial_analysis_coding_index??null,speed_tps:t.median_output_tokens_per_second??null}})}async function bA(e,t){let n={fetchedAt:Date.now(),models:t};try{await e.mkdir(`/.cache`,{recursive:!0}),await e.writeFile(pA,JSON.stringify(n))}catch{}}async function xA(e,t=!1){if(e&&!t){let t=await _A(e);if(t)return t}let n={Accept:`application/json`},r=vA();r&&(n[`x-api-key`]=r);let i=h(),a;try{a=await i(`https://artificialanalysis.ai/api/v2/data/llms/models`,{method:`GET`,headers:n})}catch{return[]}if(a.status===401||a.status<200||a.status>=300)return[];let o;try{o=JSON.parse(new TextDecoder().decode(a.body))}catch{return[]}if(typeof o!=`object`||!o)return[];let s=o,c=yA(Array.isArray(s)?s:s.data??s.models??[]);return e&&c.length>0&&await bA(e,c),c}function SA(e){return e.toLowerCase().replace(/\./g,`-`).replace(/-\d{8}$/,``).replace(/-\d{4}$/,``)}function CA(e,t){let n=e.toLowerCase(),r=t.find(e=>e.slug===n);if(r)return r;let i=SA(e),a=t.find(e=>SA(e.slug)===i);if(a)return a;let o=t.filter(e=>n.includes(e.slug)||e.slug.includes(n));if(o.length!==0)return o.sort((e,t)=>t.slug.length-e.slug.length),o[0]}function wA(){return`models - list available LLM models
1676
+ `,stderr:``,exitCode:0};let r=e.isIsolated?e.isIsolated():globalThis.crossOriginIsolated===!0,i=e.measure??lA();if(!r&&!e.measure)return oA(`memory measurement requires a cross-origin-isolated runtime (Document-Isolation-Policy) — this runtime is not isolated`);if(!i)return oA(`performance.measureUserAgentSpecificMemory is not available in this browser`);let a;try{a=await i()}catch(e){return oA(e instanceof Error?e.message:String(e))}return n.json?{stdout:`${JSON.stringify(a,null,2)}\n`,stderr:``,exitCode:0}:{stdout:dA(a),stderr:``,exitCode:0}})}function pA(e){return S(`memory`,async t=>{let{runMemory:n}=await import(`./run-Dl4OQ_Yd.js`);return n(t,e)})}function mA(){return S(`mktemp`,async(e,t)=>{let{runMktemp:n}=await import(`./run-dAJe7sKp.js`);return n(e,t)})}const hA=`/.cache/artificial-analysis.json`,gA=[`--all`,`--all-versions`,`--json`,`--refresh`,`--no-benchmarks`,`--help`,`-h`],_A=[`--provider`];function vA(e){return{stdout:``,stderr:e.endsWith(`
1677
+ `)?e:`${e}\n`,exitCode:1}}async function yA(e){try{let t=await e.readFile(hA),n=JSON.parse(t);if(Date.now()-n.fetchedAt<864e5)return n.models}catch{}return null}function bA(){try{return localStorage.getItem(`aa_api_key`)}catch{return null}}function xA(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 SA(e,t){let n={fetchedAt:Date.now(),models:t};try{await e.mkdir(`/.cache`,{recursive:!0}),await e.writeFile(hA,JSON.stringify(n))}catch{}}async function CA(e,t=!1){if(e&&!t){let t=await yA(e);if(t)return t}let n={Accept:`application/json`},r=bA();r&&(n[`x-api-key`]=r);let i=h(),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=xA(Array.isArray(s)?s:s.data??s.models??[]);return e&&c.length>0&&await SA(e,c),c}function wA(e){return e.toLowerCase().replace(/\./g,`-`).replace(/-\d{8}$/,``).replace(/-\d{4}$/,``)}function TA(e,t){let n=e.toLowerCase(),r=t.find(e=>e.slug===n);if(r)return r;let i=wA(e),a=t.find(e=>wA(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 EA(){return`models - list available LLM models
1678
1678
 
1679
1679
  Usage: models [options]
1680
1680
 
@@ -1686,14 +1686,14 @@ Options:
1686
1686
  --refresh Force re-fetch benchmark data from Artificial Analysis
1687
1687
  --no-benchmarks Skip benchmark data enrichment (faster, works offline)
1688
1688
  -h, --help Show this help message
1689
- `}function TA(e){return e>=1e6?`${(e/1e6).toFixed(1)}M`.replace(`.0M`,`M`):e>=1e3?`${(e/1e3).toFixed(0)}K`:`${e}`}function EA(e){return`$${e.toFixed(2)}`}const DA=/\b(embedding|embed|tts|whisper|dall-e|image-gen|audio|vision-preview)\b/i;function OA(e){let t=`${e.id} ${e.name??``}`;return!DA.test(t)}function kA(e){let t=e.match(/^(claude-(?:opus|sonnet|haiku))/);if(t)return t[1];let n=e.match(/^(gpt-\d+)(?:\.\d+)?(-[a-z][-a-z]*)?$/);if(n)return n[1]+(n[2]??``);let r=e.match(/^gemini-[\d.]+-(.+)$/);if(r)return`gemini-${r[1]}`;let i=e.match(/^gemini-(\d+)-(.+)$/);if(i)return`gemini-${i[2]}`;let a=e.match(/^grok-[\d.]+-([\w-]+)$/);if(a)return`grok-${a[1]}`;if(e.match(/^(grok)-[\d.]+$/))return`grok`;let o=e.match(/^(o\d+(?:-[a-z]+)?)(?:-\d.*)?$/);if(o)return o[1]}function AA(e){let t=e.toLowerCase();return t=t.replace(/-\d{8}$/,``),t=t.replace(/-\d{4}$/,``),t=t.replace(/-(preview|latest)$/,``),kA(t)??t.replace(/-[\d.]+$/,``)}function jA(e){let t=new Map;for(let n of e){let e=AA(n.id);(!t.has(e)||n.selected)&&t.set(e,n)}return[...t.values()]}function MA(e,t,n,r,i){let a=i?CA(e.id,i):void 0,o={id:e.id,name:e.name,provider:t,cost:e.cost??{input:0,output:0,cacheRead:0,cacheWrite:0},contextWindow:e.contextWindow??0,maxTokens:e.maxTokens??0,reasoning:!!e.reasoning,input:e.input??[`text`],selected:e.id===n&&t===r};return a?.intelligence_index!=null&&(o.intelligence=a.intelligence_index),a?.coding_index!=null&&(o.codingScore=a.coding_index),a?.speed_tps!=null&&(o.speed=a.speed_tps),o}function NA(e,t,n,r){let i=[];i.push(`Models for "${e}" (${t}):\n`);for(let e of n){let t=e.selected?` ► `:` `,n=e.id.padEnd(30),r=`${EA(e.cost.input)} / ${EA(e.cost.output)}`,a=`${TA(e.contextWindow)} ctx`,o=e.intelligence==null?``:`IQ:${e.intelligence}`,s=e.speed==null?``:`${Math.round(e.speed)} t/s`,c=e.reasoning?`reasoning`:``,l=o||s?`${o.padEnd(6)} ${s.padEnd(8)}`:``;i.push(`${t}${n} ${r.padEnd(16)} ${a.padEnd(10)} ${l} ${c}`)}return i.push(`\n ${n.length} model${n.length===1?``:`s`} available.`),r&&i.push(` Intelligence data: artificialanalysis.ai`),i.join(`
1689
+ `}function DA(e){return e>=1e6?`${(e/1e6).toFixed(1)}M`.replace(`.0M`,`M`):e>=1e3?`${(e/1e3).toFixed(0)}K`:`${e}`}function OA(e){return`$${e.toFixed(2)}`}const kA=/\b(embedding|embed|tts|whisper|dall-e|image-gen|audio|vision-preview)\b/i;function AA(e){let t=`${e.id} ${e.name??``}`;return!kA.test(t)}function jA(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 MA(e){let t=e.toLowerCase();return t=t.replace(/-\d{8}$/,``),t=t.replace(/-\d{4}$/,``),t=t.replace(/-(preview|latest)$/,``),jA(t)??t.replace(/-[\d.]+$/,``)}function NA(e){let t=new Map;for(let n of e){let e=MA(n.id);(!t.has(e)||n.selected)&&t.set(e,n)}return[...t.values()]}function PA(e,t,n,r,i){let a=i?TA(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 FA(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=`${OA(e.cost.input)} / ${OA(e.cost.output)}`,a=`${DA(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(`
1690
1690
  `)+`
1691
- `}function PA(e){let t=C(e,{bool:mA,value:hA});return`error`in t?t:{jsonMode:t.bools.has(`--json`),allMode:t.bools.has(`--all`),allVersions:t.bools.has(`--all-versions`),forceRefresh:t.bools.has(`--refresh`),noBenchmarks:t.bools.has(`--no-benchmarks`),explicitProvider:t.values.get(`--provider`)}}function FA(e,t,n){if(t.explicitProvider){let n=e.getAvailableProviders();return n.includes(t.explicitProvider)?[t.explicitProvider]:{error:`Unknown provider: ${t.explicitProvider}. Available: ${n.join(`, `)}\n`}}return t.allMode?[...new Set(e.getAccounts().map(e=>e.providerId))]:[n]}function IA(e,t,n,r,i,a){let o=e.getProviderModels(t).filter(OA);if(o.length===0)return[];let s=o.map(e=>MA(e,t,n,r,i)).sort((e,t)=>t.cost.input-e.cost.input);return a||(s=jA(s)),s}function LA(e,t,n,r){let i=`${e}:${t}`,a=`${n}:${r}`;return i===a?`Currently using: ${i}\n`:`Currently using: ${i} (selected ${a} — resolved to a different model)\n`}async function RA(e,t){if(w(e,{valueFlags:hA}))return{stdout:wA(),stderr:``,exitCode:0};let n=PA(e);if(`error`in n)return gA(`models: ${n.error}`);let r=await import(`./account-store-UA_3Tz4g.js`).then(e=>e.t);if(r.getAccounts().length===0)return gA(`No provider accounts configured. Run the provider settings to add one.
1692
- `);let i=r.resolveCurrentModel(),a=i.id,o=i.provider,s=r.getSelectedProvider(),c=r.getSelectedModelId(),l;if(!n.noBenchmarks){let e=await xA(t,n.forceRefresh);e.length>0&&(l=e)}let u=FA(r,n,s);if(`error`in u)return gA(u.error);let d=[],f=[];for(let e of u){let t=IA(r,e,a,o,l,n.allVersions);if(t.length===0){if(!n.allMode)return gA(`No models available for provider ${e}.\n`);continue}if(d.push(...t),!n.jsonMode){let n=r.getProviderConfig(e);f.push(NA(n.name,e,t,!!l))}}return n.jsonMode?{stdout:JSON.stringify(d,null,2)+`
1691
+ `}function IA(e){let t=C(e,{bool:gA,value:_A});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 LA(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 RA(e,t,n,r,i,a){let o=e.getProviderModels(t).filter(AA);if(o.length===0)return[];let s=o.map(e=>PA(e,t,n,r,i)).sort((e,t)=>t.cost.input-e.cost.input);return a||(s=NA(s)),s}function zA(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 BA(e,t){if(w(e,{valueFlags:_A}))return{stdout:EA(),stderr:``,exitCode:0};let n=IA(e);if(`error`in n)return vA(`models: ${n.error}`);let r=await import(`./account-store-D0ciUU3U.js`).then(e=>e.t);if(r.getAccounts().length===0)return vA(`No provider accounts configured. Run the provider settings to add one.
1692
+ `);let i=r.resolveCurrentModel(),a=i.id,o=i.provider,s=r.getSelectedProvider(),c=r.getSelectedModelId(),l;if(!n.noBenchmarks){let e=await CA(t,n.forceRefresh);e.length>0&&(l=e)}let u=LA(r,n,s);if(`error`in u)return vA(u.error);let d=[],f=[];for(let e of u){let t=RA(r,e,a,o,l,n.allVersions);if(t.length===0){if(!n.allMode)return vA(`No models available for provider ${e}.\n`);continue}if(d.push(...t),!n.jsonMode){let n=r.getProviderConfig(e);f.push(FA(n.name,e,t,!!l))}}return n.jsonMode?{stdout:JSON.stringify(d,null,2)+`
1693
1693
  `,stderr:``,exitCode:0}:(n.allVersions||f.push(`Showing latest versions only. Use --all-versions to see all.
1694
- `),f.push(LA(o,a,s,c)),{stdout:f.join(`
1695
- `),stderr:``,exitCode:0})}function zA(e){return S(`models`,async t=>RA(t,e))}const BA=new Set([`-`,`/dev/stdin`,`/dev/fd/0`,`/proc/self/fd/0`]);function VA(e){return e===`-e`||e===`--eval`||BA.has(e)||!e.startsWith(`-`)}function HA(e){return{stdout:``,stderr:`node: ${e} is not a valid value for --input-type. Valid values are: 'commonjs' or 'module'.\n`,exitCode:9}}function UA(e,t,n){let r=e.startsWith(`--input-type=`),i=r?e.slice(13):t,a=r?n+1:n+2;return i===void 0?{nextIndex:n+1,error:{stdout:``,stderr:`node: option --input-type requires an argument
1696
- `,exitCode:9}}:i!==`module`&&i!==`commonjs`?{nextIndex:a,error:HA(i)}:{inputType:i,nextIndex:a}}function WA(e){let t=!1,n=!1,r=!1,i,a=0;for(;a<e.length;){let o=e[a];if(VA(o))break;if(o===`-h`||o===`--help`){t=!0,a+=1;continue}if(o===`-v`||o===`--version`){n=!0,a+=1;continue}if(o===`-c`||o===`--check`){r=!0,a+=1;continue}if(o===`--input-type`||o.startsWith(`--input-type=`)){let s=UA(o,e[a+1],a);if(s.error)return{help:t,version:n,check:r,inputType:i,sourceIndex:s.nextIndex,error:s.error};i=s.inputType,a=s.nextIndex;continue}return{help:t,version:n,check:r,inputType:i,sourceIndex:a,error:{stdout:``,stderr:`node: unsupported option '${o}'\n`,exitCode:9}}}return{help:t,version:n,check:r,inputType:i,sourceIndex:a}}function GA(){return{stdout:`usage: node [options] [script.js] [args...]
1694
+ `),f.push(zA(o,a,s,c)),{stdout:f.join(`
1695
+ `),stderr:``,exitCode:0})}function VA(e){return S(`models`,async t=>BA(t,e))}const HA=new Set([`-`,`/dev/stdin`,`/dev/fd/0`,`/proc/self/fd/0`]);function UA(e){return e===`-e`||e===`--eval`||HA.has(e)||!e.startsWith(`-`)}function WA(e){return{stdout:``,stderr:`node: ${e} is not a valid value for --input-type. Valid values are: 'commonjs' or 'module'.\n`,exitCode:9}}function GA(e,t,n){let r=e.startsWith(`--input-type=`),i=r?e.slice(13):t,a=r?n+1:n+2;return i===void 0?{nextIndex:n+1,error:{stdout:``,stderr:`node: option --input-type requires an argument
1696
+ `,exitCode:9}}:i!==`module`&&i!==`commonjs`?{nextIndex:a,error:WA(i)}:{inputType:i,nextIndex:a}}function KA(e){let t=!1,n=!1,r=!1,i,a=0;for(;a<e.length;){let o=e[a];if(UA(o))break;if(o===`-h`||o===`--help`){t=!0,a+=1;continue}if(o===`-v`||o===`--version`){n=!0,a+=1;continue}if(o===`-c`||o===`--check`){r=!0,a+=1;continue}if(o===`--input-type`||o.startsWith(`--input-type=`)){let s=GA(o,e[a+1],a);if(s.error)return{help:t,version:n,check:r,inputType:i,sourceIndex:s.nextIndex,error:s.error};i=s.inputType,a=s.nextIndex;continue}return{help:t,version:n,check:r,inputType:i,sourceIndex:a,error:{stdout:``,stderr:`node: unsupported option '${o}'\n`,exitCode:9}}}return{help:t,version:n,check:r,inputType:i,sourceIndex:a}}function qA(){return{stdout:`usage: node [options] [script.js] [args...]
1697
1697
  node [options] -e <code> [args...]
1698
1698
 
1699
1699
  Options:
@@ -1702,20 +1702,20 @@ Options:
1702
1702
  --input-type=TYPE module or commonjs (stdin / -e / .js)
1703
1703
  -h, --help print this help
1704
1704
  -v, --version print Node shim version
1705
- `,stderr:``,exitCode:0}}function KA(){return{stdout:`${ir}\n`,stderr:``,exitCode:0}}function qA(e,t){if(t){if(e.endsWith(`.mjs`)&&t===`commonjs`)return{stdout:``,stderr:`node: cannot set --input-type=commonjs for a .mjs file
1705
+ `,stderr:``,exitCode:0}}function JA(){return{stdout:`${ir}\n`,stderr:``,exitCode:0}}function YA(e,t){if(t){if(e.endsWith(`.mjs`)&&t===`commonjs`)return{stdout:``,stderr:`node: cannot set --input-type=commonjs for a .mjs file
1706
1706
  `,exitCode:9};if(e.endsWith(`.cjs`)&&t===`module`)return{stdout:``,stderr:`node: cannot set --input-type=module for a .cjs file
1707
- `,exitCode:9}}}function JA(e,t){if(!e.startsWith(`/`))return t;let n=e.lastIndexOf(`/`);return n<=0?`/`:e.slice(0,n)}function YA(e){return e instanceof Error?e.stack??e.message:String(e)}async function XA(e,t,n){if(!(Yn(e)||dr(e)||t.endsWith(`.mjs`)))return e;try{return(await(await qr()).transform(e,{loader:`js`,format:`cjs`,sourcefile:`${t.replace(/\.[^./]+$/,``)}.js`,supported:{"dynamic-import":!1}})).code}catch(r){if(!/top-level await/i.test(YA(r)))throw r;return Kr()({source:e,filename:t,fromDir:JA(t,n)})}}async function ZA(e,t,n){let r=e;try{r=await XA(e,t,n)}catch(e){return{stdout:``,stderr:`${YA(e)}\n`,exitCode:1}}try{let e=Object.getPrototypeOf(async function(){}).constructor;return new e(r),{stdout:``,stderr:``,exitCode:0}}catch(e){return{stdout:``,stderr:`${YA(e)}\n`,exitCode:1}}}async function QA(e,t){if(e.length>0&&(e[0]===`-e`||e[0]===`--eval`))return e[1]?{kind:`ok`,code:e[1],filename:`[eval]`,argv:[`node`,...e.slice(2)],innerCtx:t}:{kind:`result`,result:{stdout:``,stderr:`node: option requires an argument -- eval
1708
- `,exitCode:9}};if(e.length>0&&BA.has(e[0]))return{kind:`ok`,code:P(t.stdin),filename:`<stdin>`,argv:[`node`,e[0],...e.slice(1)],innerCtx:{...t,stdin:``}};if(e.length>0&&!e[0].startsWith(`-`)){let n=e[0],r=t.fs.resolvePath(t.cwd,n);return await t.fs.exists(r)?{kind:`ok`,code:await t.fs.readFile(r),filename:r,argv:[`node`,r,...e.slice(1)],innerCtx:t}:{kind:`result`,result:{stdout:``,stderr:`node: cannot find module '${n}'\n`,exitCode:1}}}return P(t.stdin).trim().length>0?{kind:`ok`,code:P(t.stdin),filename:`<stdin>`,argv:[`node`],innerCtx:{...t,stdin:``}}:e.length>0?{kind:`result`,result:{stdout:``,stderr:`node: unsupported option '${e[0]}'\n`,exitCode:9}}:{kind:`result`,result:{stdout:``,stderr:`node: REPL mode is not supported in this environment; use node -e "code"
1709
- `,exitCode:9}}}function $A(e={},t=`node`){return{name:t,trusted:!0,async execute(t,n){let r=WA(t);if(r.error)return r.error;if(r.help)return GA();if(r.version)return KA();let i=await QA(t.slice(r.sourceIndex),n);if(i.kind===`result`)return r.check&&i.result.exitCode===9&&t.slice(r.sourceIndex).length===0?{stdout:``,stderr:`node: -c/--check requires a filename or -e CODE
1710
- `,exitCode:9}:i.result;let{code:a,filename:o,argv:s,innerCtx:c}=i,l=qA(o,r.inputType);if(l)return l;let u=Wr(a);return r.check?ZA(u,o,n.cwd):Hr(u,s,c,e.buildProcessConfig?.(n.env),{filename:o})}}}const ej=[`slicc:welcome-flow-fired`,`slicc.trayJoinUrl`,`slicc.trayWorkerBaseUrl`];async function tj(){try{let e=await navigator.serviceWorker?.getRegistrations?.();e&&await Promise.all(e.map(e=>e.unregister().catch(()=>!1)))}catch{}try{let e=await indexedDB.databases();await Promise.all(e.filter(e=>!!e.name).map(e=>new Promise(t=>{let n=indexedDB.deleteDatabase(e.name);n.onsuccess=()=>t(),n.onerror=()=>t(),n.onblocked=()=>t()})))}catch{}try{let e=navigator.storage;if(typeof e?.getDirectory==`function`){let t=await e.getDirectory(),n=[];for await(let e of t.keys())n.push(e);await Promise.all(n.map(e=>t.removeEntry(e,{recursive:!0}).catch(()=>{})))}}catch{}}const nj=[],rj=[`--yes`];function ij(){return S(`nuke`,async e=>{if(w(e,{valueFlags:nj}))return{stdout:`Usage: nuke <launch-code>
1707
+ `,exitCode:9}}}function XA(e,t){if(!e.startsWith(`/`))return t;let n=e.lastIndexOf(`/`);return n<=0?`/`:e.slice(0,n)}function ZA(e){return e instanceof Error?e.stack??e.message:String(e)}async function QA(e,t,n){if(!(Yn(e)||dr(e)||t.endsWith(`.mjs`)))return e;try{return(await(await qr()).transform(e,{loader:`js`,format:`cjs`,sourcefile:`${t.replace(/\.[^./]+$/,``)}.js`,supported:{"dynamic-import":!1}})).code}catch(r){if(!/top-level await/i.test(ZA(r)))throw r;return Kr()({source:e,filename:t,fromDir:XA(t,n)})}}async function $A(e,t,n){let r=e;try{r=await QA(e,t,n)}catch(e){return{stdout:``,stderr:`${ZA(e)}\n`,exitCode:1}}try{let e=Object.getPrototypeOf(async function(){}).constructor;return new e(r),{stdout:``,stderr:``,exitCode:0}}catch(e){return{stdout:``,stderr:`${ZA(e)}\n`,exitCode:1}}}async function ej(e,t){if(e.length>0&&(e[0]===`-e`||e[0]===`--eval`))return e[1]?{kind:`ok`,code:e[1],filename:`[eval]`,argv:[`node`,...e.slice(2)],innerCtx:t}:{kind:`result`,result:{stdout:``,stderr:`node: option requires an argument -- eval
1708
+ `,exitCode:9}};if(e.length>0&&HA.has(e[0]))return{kind:`ok`,code:P(t.stdin),filename:`<stdin>`,argv:[`node`,e[0],...e.slice(1)],innerCtx:{...t,stdin:``}};if(e.length>0&&!e[0].startsWith(`-`)){let n=e[0],r=t.fs.resolvePath(t.cwd,n);return await t.fs.exists(r)?{kind:`ok`,code:await t.fs.readFile(r),filename:r,argv:[`node`,r,...e.slice(1)],innerCtx:t}:{kind:`result`,result:{stdout:``,stderr:`node: cannot find module '${n}'\n`,exitCode:1}}}return P(t.stdin).trim().length>0?{kind:`ok`,code:P(t.stdin),filename:`<stdin>`,argv:[`node`],innerCtx:{...t,stdin:``}}:e.length>0?{kind:`result`,result:{stdout:``,stderr:`node: unsupported option '${e[0]}'\n`,exitCode:9}}:{kind:`result`,result:{stdout:``,stderr:`node: REPL mode is not supported in this environment; use node -e "code"
1709
+ `,exitCode:9}}}function tj(e={},t=`node`){return{name:t,trusted:!0,async execute(t,n){let r=KA(t);if(r.error)return r.error;if(r.help)return qA();if(r.version)return JA();let i=await ej(t.slice(r.sourceIndex),n);if(i.kind===`result`)return r.check&&i.result.exitCode===9&&t.slice(r.sourceIndex).length===0?{stdout:``,stderr:`node: -c/--check requires a filename or -e CODE
1710
+ `,exitCode:9}:i.result;let{code:a,filename:o,argv:s,innerCtx:c}=i,l=YA(o,r.inputType);if(l)return l;let u=Wr(a);return r.check?$A(u,o,n.cwd):Hr(u,s,c,e.buildProcessConfig?.(n.env),{filename:o})}}}const nj=[`slicc:welcome-flow-fired`,`slicc.trayJoinUrl`,`slicc.trayWorkerBaseUrl`];async function rj(){try{let e=await navigator.serviceWorker?.getRegistrations?.();e&&await Promise.all(e.map(e=>e.unregister().catch(()=>!1)))}catch{}try{let e=await indexedDB.databases();await Promise.all(e.filter(e=>!!e.name).map(e=>new Promise(t=>{let n=indexedDB.deleteDatabase(e.name);n.onsuccess=()=>t(),n.onerror=()=>t(),n.onblocked=()=>t()})))}catch{}try{let e=navigator.storage;if(typeof e?.getDirectory==`function`){let t=await e.getDirectory(),n=[];for await(let e of t.keys())n.push(e);await Promise.all(n.map(e=>t.removeEntry(e,{recursive:!0}).catch(()=>{})))}}catch{}}const ij=[],aj=[`--yes`];function oj(){return S(`nuke`,async e=>{if(w(e,{valueFlags:ij}))return{stdout:`Usage: nuke <launch-code>
1711
1711
 
1712
1712
  Completely reset the environment by deleting all local data and reloading.
1713
1713
  Destroys the file system, chat history, and scoops database.
1714
1714
  Requires the secret launch code to proceed.
1715
- `,stderr:``,exitCode:0};let t=C(e,{value:nj,bool:rj});return`error`in t?{stdout:``,stderr:`nuke: ${t.error}\n`,exitCode:1}:t.positionals.join(``).includes(`1234`)?((async()=>{await tj(),aj(ej)})(),{stdout:`Nuking everything…
1715
+ `,stderr:``,exitCode:0};let t=C(e,{value:ij,bool:aj});return`error`in t?{stdout:``,stderr:`nuke: ${t.error}\n`,exitCode:1}:t.positionals.join(``).includes(`1234`)?((async()=>{await rj(),sj(nj)})(),{stdout:`Nuking everything…
1716
1716
  `,stderr:``,exitCode:0}):{stdout:``,stderr:`⚠️ WARNING: this will reset the entire environment, file system, chats, and scoops.
1717
1717
  Run nuke again with the secret launch code to proceed.
1718
- `,exitCode:1}})}function aj(e=[]){let t=[...e];try{if(typeof BroadcastChannel==`function`){let e=new BroadcastChannel(`slicc-nuke-control`);e.postMessage({type:`nuke-reload`,keysToRemove:t}),setTimeout(()=>e.close(),100)}}catch{}for(let e of t)try{globalThis.localStorage?.removeItem(e)}catch{}try{globalThis.location?.reload?.()}catch{}}function oj(){return`oauth-domain — manage extra allowed domains for OAuth-issued tokens
1718
+ `,exitCode:1}})}function sj(e=[]){let t=[...e];try{if(typeof BroadcastChannel==`function`){let e=new BroadcastChannel(`slicc-nuke-control`);e.postMessage({type:`nuke-reload`,keysToRemove:t}),setTimeout(()=>e.close(),100)}}catch{}for(let e of t)try{globalThis.localStorage?.removeItem(e)}catch{}try{globalThis.location?.reload?.()}catch{}}function cj(){return`oauth-domain — manage extra allowed domains for OAuth-issued tokens
1719
1719
 
1720
1720
  Usage:
1721
1721
  oauth-domain list List extra domains for every provider
@@ -1740,13 +1740,13 @@ Examples:
1740
1740
  oauth-domain add adobe '*.da.live'
1741
1741
  oauth-domain list adobe
1742
1742
  oauth-domain remove adobe admin.da.live
1743
- `}function sj(e){return{stdout:``,stderr:`oauth-domain: ${e}\n`,exitCode:1}}function cj(e,t){if(t){let n=e.getExtraOAuthDomains(t);return n.length===0?{stdout:`(no extra domains configured for ${t})\n`,stderr:``,exitCode:0}:{stdout:`${n.join(`
1743
+ `}function lj(e){return{stdout:``,stderr:`oauth-domain: ${e}\n`,exitCode:1}}function uj(e,t){if(t){let n=e.getExtraOAuthDomains(t);return n.length===0?{stdout:`(no extra domains configured for ${t})\n`,stderr:``,exitCode:0}:{stdout:`${n.join(`
1744
1744
  `)}\n`,stderr:``,exitCode:0}}let n=Object.entries(e.getAllExtraOAuthDomains()).filter(([,e])=>e.length>0);return n.length===0?{stdout:`(no extra OAuth domains configured)
1745
1745
  `,stderr:``,exitCode:0}:{stdout:`${n.map(([e,t])=>`${e}: ${t.join(`, `)}`).join(`
1746
- `)}\n`,stderr:``,exitCode:0}}async function lj(e,t,n){if(!t||!n)return{stdout:``,stderr:`oauth-domain add: requires <providerId> and <domain>
1747
- `,exitCode:1};let r=e.getExtraOAuthDomains(t),i=n.toLowerCase();return r.some(e=>e.toLowerCase()===i)?{stdout:`(${n} already in ${t} extras)\n`,stderr:``,exitCode:0}:(await e.setExtraOAuthDomainsAsync(t,[...r,n]),{stdout:`Added ${n} to ${t}. Reload the page to apply.\n`,stderr:``,exitCode:0})}async function uj(e,t,n){if(!t||!n)return{stdout:``,stderr:`oauth-domain remove: requires <providerId> and <domain>
1748
- `,exitCode:1};let r=e.getExtraOAuthDomains(t),i=n.toLowerCase(),a=r.filter(e=>e.toLowerCase()!==i);return a.length===r.length?{stdout:`(${n} not found in ${t} extras)\n`,stderr:``,exitCode:0}:(await e.setExtraOAuthDomainsAsync(t,a),{stdout:`Removed ${n} from ${t}. Reload the page to apply.\n`,stderr:``,exitCode:0})}async function dj(e,t){return t?(await e.setExtraOAuthDomainsAsync(t,[]),{stdout:`Cleared extra domains for ${t}. Reload the page to apply.\n`,stderr:``,exitCode:0}):{stdout:``,stderr:`oauth-domain clear: requires <providerId>
1749
- `,exitCode:1}}async function fj(e,t,n,r){switch(t){case`list`:return cj(e,n);case`add`:return lj(e,n,r);case`remove`:return uj(e,n,r);case`clear`:return dj(e,n);default:return{stdout:``,stderr:`oauth-domain: unknown subcommand "${t}"\n${oj()}`,exitCode:1}}}function pj(){return S(`oauth-domain`,async e=>{if(e.length===0||w(e))return{stdout:oj(),stderr:``,exitCode:0};let t=C(e);if(`error`in t)return sj(t.error);let[n,r,i]=t.positionals,a=await import(`./account-store-UA_3Tz4g.js`).then(e=>e.t);try{return await fj(a,n,r,i)}catch(e){return sj(e instanceof Error?e.message:String(e))}})}function mj(){return S(`oauth-token`,async(e,t)=>{let{runOAuthToken:n}=await import(`./run-DEBWO_VC.js`);return n(e,t)})}const hj=[`--download`,`-d`,`--view`,`-v`],gj=[`--size`],_j={low:256,medium:768,high:1536};function vj(){return{stdout:`usage: open [--download|-d] [--view|-v [--size <spec>]] <url|path> [url|path...]
1746
+ `)}\n`,stderr:``,exitCode:0}}async function dj(e,t,n){if(!t||!n)return{stdout:``,stderr:`oauth-domain add: requires <providerId> and <domain>
1747
+ `,exitCode:1};let r=e.getExtraOAuthDomains(t),i=n.toLowerCase();return r.some(e=>e.toLowerCase()===i)?{stdout:`(${n} already in ${t} extras)\n`,stderr:``,exitCode:0}:(await e.setExtraOAuthDomainsAsync(t,[...r,n]),{stdout:`Added ${n} to ${t}. Reload the page to apply.\n`,stderr:``,exitCode:0})}async function fj(e,t,n){if(!t||!n)return{stdout:``,stderr:`oauth-domain remove: requires <providerId> and <domain>
1748
+ `,exitCode:1};let r=e.getExtraOAuthDomains(t),i=n.toLowerCase(),a=r.filter(e=>e.toLowerCase()!==i);return a.length===r.length?{stdout:`(${n} not found in ${t} extras)\n`,stderr:``,exitCode:0}:(await e.setExtraOAuthDomainsAsync(t,a),{stdout:`Removed ${n} from ${t}. Reload the page to apply.\n`,stderr:``,exitCode:0})}async function pj(e,t){return t?(await e.setExtraOAuthDomainsAsync(t,[]),{stdout:`Cleared extra domains for ${t}. Reload the page to apply.\n`,stderr:``,exitCode:0}):{stdout:``,stderr:`oauth-domain clear: requires <providerId>
1749
+ `,exitCode:1}}async function mj(e,t,n,r){switch(t){case`list`:return uj(e,n);case`add`:return dj(e,n,r);case`remove`:return fj(e,n,r);case`clear`:return pj(e,n);default:return{stdout:``,stderr:`oauth-domain: unknown subcommand "${t}"\n${cj()}`,exitCode:1}}}function hj(){return S(`oauth-domain`,async e=>{if(e.length===0||w(e))return{stdout:cj(),stderr:``,exitCode:0};let t=C(e);if(`error`in t)return lj(t.error);let[n,r,i]=t.positionals,a=await import(`./account-store-D0ciUU3U.js`).then(e=>e.t);try{return await mj(a,n,r,i)}catch(e){return lj(e instanceof Error?e.message:String(e))}})}function gj(){return S(`oauth-token`,async(e,t)=>{let{runOAuthToken:n}=await import(`./run-CH8M889A.js`);return n(e,t)})}const _j=[`--download`,`-d`,`--view`,`-v`],vj=[`--size`],yj={low:256,medium:768,high:1536};function bj(){return{stdout:`usage: open [--download|-d] [--view|-v [--size <spec>]] <url|path> [url|path...]
1750
1750
 
1751
1751
  VFS paths are served in a new browser tab via the preview service worker.
1752
1752
  URLs (http/https/etc.) are opened directly in a new tab.
@@ -1760,19 +1760,19 @@ Examples:
1760
1760
  medium (768x768), high (1536x1536), or a custom WxH
1761
1761
  box like 512x512. The image is fit inside the box
1762
1762
  with aspect ratio preserved and is never upscaled.
1763
- `,stderr:``,exitCode:0}}function yj(e){if(e in _j){let t=_j[e];return{maxW:t,maxH:t}}let t=/^(\d+)x(\d+)$/.exec(e);if(t){let e=parseInt(t[1],10),n=parseInt(t[2],10);if(e>0&&n>0)return{maxW:e,maxH:n}}return null}function bj(e,t){if(t===`image/png`||t===`image/apng`){if(e.length<26)return!1;let t=e[25];return t===4||t===6}if(t===`image/webp`){if(e.length<16)return!1;let t=String.fromCharCode(e[12],e[13],e[14],e[15]);return t===`VP8L`?!0:t===`VP8X`?e.length<21?!1:!!(e[20]&16):!1}return!1}function xj(){return`open --view requires --size to bound the inlined image. Use one of:
1763
+ `,stderr:``,exitCode:0}}function xj(e){if(e in yj){let t=yj[e];return{maxW:t,maxH:t}}let t=/^(\d+)x(\d+)$/.exec(e);if(t){let e=parseInt(t[1],10),n=parseInt(t[2],10);if(e>0&&n>0)return{maxW:e,maxH:n}}return null}function Sj(e,t){if(t===`image/png`||t===`image/apng`){if(e.length<26)return!1;let t=e[25];return t===4||t===6}if(t===`image/webp`){if(e.length<16)return!1;let t=String.fromCharCode(e[12],e[13],e[14],e[15]);return t===`VP8L`?!0:t===`VP8X`?e.length<21?!1:!!(e[20]&16):!1}return!1}function Cj(){return`open --view requires --size to bound the inlined image. Use one of:
1764
1764
  --size low (256x256)
1765
1765
  --size medium (768x768)
1766
1766
  --size high (1536x1536)
1767
1767
  --size WxH (custom box, e.g. 512x512)
1768
- `}const Sj=new Set([`image/png`,`image/webp`]);function Cj(e){let t=new ArrayBuffer(e.byteLength),n=new Uint8Array(t);return n.set(e),n}async function wj(e,t){let n=Cj(e),r=new Blob([n],{type:t}),i=await createImageBitmap(r);try{return{width:i.width,height:i.height}}finally{i.close?.()}}async function Tj(e,t,n,r){let i=Cj(e),a=new Blob([i],{type:t}),o=await createImageBitmap(a);try{let i=o.width,a=o.height,s=Math.min(n/i,r/a,1),c=Math.max(1,Math.round(i*s)),l=Math.max(1,Math.round(a*s)),u=new OffscreenCanvas(c,l),d=u.getContext(`2d`);if(!d)throw Error(`failed to acquire 2d context for resize`);d.drawImage(o,0,0,c,l);let f=bj(e,t)?Sj.has(t)?t:`image/png`:`image/jpeg`,p=await u.convertToBlob(f===`image/jpeg`?{type:`image/jpeg`,quality:.85}:{type:f});return{bytes:new Uint8Array(await p.arrayBuffer()),mime:f,width:c,height:l,nativeWidth:i,nativeHeight:a}}finally{o.close?.()}}function Ej(e){let t=C(e,{bool:hj,value:gj});if(`error`in t)return{error:`open: ${t.error}`};let n=t.values.get(`--size`);return n?.startsWith(`-`)&&n!==`-`?{error:`open: unknown flag: ${n}`}:{download:t.bools.has(`--download`)||t.bools.has(`-d`),view:t.bools.has(`--view`)||t.bools.has(`-v`),sizeSpec:n,targets:t.positionals}}function Dj(e){return{ok:!0,message:e}}function K(e){return{ok:!1,result:{stdout:``,stderr:e,exitCode:1}}}function Oj(e){return e?` (targetId: ${e})`:``}function kj(e,t,n){return async r=>{if(e)return e.createPage(r);if(t){window.open(r,`_blank`,`noopener,noreferrer`);return}try{await n.call(`window-open`,{url:r,target:`_blank`,features:`noopener,noreferrer`})}catch(e){throw Error(`open: ${e instanceof Error?e.message:String(e)}`)}}}async function Aj(e,t,n,r,i){let a=t.fs.resolvePath(t.cwd,e);if(n){let e=(a.split(`/`).pop()??``).replace(/\.shtml$/,``);try{return await n.open(e),Dj(`opened sprinkle ${e} from ${a}`)}catch(e){return K(`open: ${e instanceof Error?e.message:String(e)}\n`)}}if(r){let e=await Xn(t.fs,ar(a)),n=Dr(a,e),r;try{r=await i(n)}catch(e){return K(`${e instanceof Error?e.message:String(e)}\n`)}return Dj(`opened ${a} → ${n}${Oj(r)}`)}return K(`open: sprinkle manager not initialized
1769
- `)}async function jj(e,t,n){if(!t)return K(`open: browser APIs are unavailable in this environment
1770
- `);let r;try{r=await n(e)}catch(e){return K(`${e instanceof Error?e.message:String(e)}\n`)}return Dj(`opened ${e}${Oj(r)}`)}async function Mj(e,n,r,i){let a;try{a=await r.fs.stat(n)}catch{return K(`open: no such file: ${e}\n`)}if(!a.isFile)return K(`open: not a file: ${e}\n`);let o;try{o=await r.fs.readFileBuffer(n)}catch{return K(`open: failed to read: ${e}\n`)}let s=Jn(n),c=new Uint8Array(o),l=null;if(i!==void 0&&(l=yj(i),!l))return K(`open: invalid --size spec '${i}' (expected low|medium|high or WxH such as 512x512)\n`);if(!l){let t;try{t=await wj(c,s)}catch(t){return K(`open: not an image or failed to decode: ${e} (${t instanceof Error?t.message:String(t)})\n`)}let r=Math.round(c.byteLength/1024);return K(`open --view: ${n} is ${t.width}x${t.height} (${r} KB, ${s})\n`+xj())}let u;try{u=await Tj(c,s,l.maxW,l.maxH)}catch(t){return K(`open: not an image or failed to decode: ${e} (${t instanceof Error?t.message:String(t)})\n`)}let d=t(u.bytes),f=Math.round(u.bytes.byteLength/1024);return Dj(`${n} (${u.nativeWidth}x${u.nativeHeight} → ${u.width}x${u.height}, ${f} KB, ${u.mime})\n<img:data:${u.mime};base64,${d}>`)}async function Nj(e,t,n,r){if(!r)return K(`open: --download requires the in-panel terminal (DOM-only)
1771
- `);let i;try{i=await n.fs.stat(t)}catch{return K(`open: no such file: ${e}\n`)}if(!i.isFile)return K(`open: not a file: ${e}\n`);let a;try{a=await n.fs.readFileBuffer(t)}catch{return K(`open: failed to read: ${e}\n`)}let o=new Uint8Array(a.byteLength);o.set(a);let s=new Blob([o.buffer],{type:Jn(t)}),c=URL.createObjectURL(s),l=document.createElement(`a`);return l.href=c,l.download=er(t)||`download`,l.style.display=`none`,document.body.appendChild(l),l.click(),document.body.removeChild(l),setTimeout(()=>URL.revokeObjectURL(c),0),Dj(`downloaded ${t}`)}async function Pj(e,t,n,r){if(!n)return K(`open: browser APIs are unavailable in this environment
1772
- `);let i=!1;try{i=(await t.fs.stat(e)).isDirectory}catch{}let a=await Xn(t.fs,i?e:ar(e)),o=Dr(e,a),s;try{s=await r(o)}catch(e){return K(`${e instanceof Error?e.message:String(e)}\n`)}return Dj(`opened ${e} → ${o}${Oj(s)}`)}async function Fj(e,t,n,r){if(!Qn(e)&&e.endsWith(`.shtml`)&&t.fs)return Aj(e,t,r.sprinkleManager,r.canOpenWindow,r.openExternal);if(!n.view&&!r.canOpenWindow)return K(`open: browser APIs are unavailable in this environment
1773
- `);if(Qn(e))return jj(e,r.canOpenWindow,r.openExternal);let i=t.fs.resolvePath(t.cwd,e);return n.view?Mj(e,i,t,n.sizeSpec):n.download?Nj(e,i,t,r.hasDom):Pj(i,t,r.canOpenWindow,r.openExternal)}function Ij(e){return S(`open`,async(t,n)=>{if(t.length===0||w(t,{valueFlags:gj}))return vj();let r=Ej(t);if(`error`in r)return{stdout:``,stderr:`${r.error}\n`,exitCode:1};let{download:i,view:a,sizeSpec:o,targets:s}=r;if(s.length===0)return vj();let c=globalThis.__slicc_sprinkleManager,l=typeof window<`u`&&typeof document<`u`,u=l?null:y(),d={canOpenWindow:!!e||l||!!u,hasDom:l,sprinkleManager:c,openExternal:kj(e,l,u)},f=[];for(let e of s){let t=await Fj(e,n,{view:a,download:i,sizeSpec:o},d);if(!t.ok)return t.result;f.push(t.message)}return{stdout:f.join(`
1768
+ `}const wj=new Set([`image/png`,`image/webp`]);function Tj(e){let t=new ArrayBuffer(e.byteLength),n=new Uint8Array(t);return n.set(e),n}async function Ej(e,t){let n=Tj(e),r=new Blob([n],{type:t}),i=await createImageBitmap(r);try{return{width:i.width,height:i.height}}finally{i.close?.()}}async function Dj(e,t,n,r){let i=Tj(e),a=new Blob([i],{type:t}),o=await createImageBitmap(a);try{let i=o.width,a=o.height,s=Math.min(n/i,r/a,1),c=Math.max(1,Math.round(i*s)),l=Math.max(1,Math.round(a*s)),u=new OffscreenCanvas(c,l),d=u.getContext(`2d`);if(!d)throw Error(`failed to acquire 2d context for resize`);d.drawImage(o,0,0,c,l);let f=Sj(e,t)?wj.has(t)?t:`image/png`:`image/jpeg`,p=await u.convertToBlob(f===`image/jpeg`?{type:`image/jpeg`,quality:.85}:{type:f});return{bytes:new Uint8Array(await p.arrayBuffer()),mime:f,width:c,height:l,nativeWidth:i,nativeHeight:a}}finally{o.close?.()}}function Oj(e){let t=C(e,{bool:_j,value:vj});if(`error`in t)return{error:`open: ${t.error}`};let n=t.values.get(`--size`);return n?.startsWith(`-`)&&n!==`-`?{error:`open: unknown flag: ${n}`}:{download:t.bools.has(`--download`)||t.bools.has(`-d`),view:t.bools.has(`--view`)||t.bools.has(`-v`),sizeSpec:n,targets:t.positionals}}function kj(e){return{ok:!0,message:e}}function K(e){return{ok:!1,result:{stdout:``,stderr:e,exitCode:1}}}function Aj(e){return e?` (targetId: ${e})`:``}function jj(e,t,n){return async r=>{if(e)return e.createPage(r);if(t){window.open(r,`_blank`,`noopener,noreferrer`);return}try{await n.call(`window-open`,{url:r,target:`_blank`,features:`noopener,noreferrer`})}catch(e){throw Error(`open: ${e instanceof Error?e.message:String(e)}`)}}}async function Mj(e,t,n,r,i){let a=t.fs.resolvePath(t.cwd,e);if(n){let e=(a.split(`/`).pop()??``).replace(/\.shtml$/,``);try{return await n.open(e),kj(`opened sprinkle ${e} from ${a}`)}catch(e){return K(`open: ${e instanceof Error?e.message:String(e)}\n`)}}if(r){let e=await Xn(t.fs,ar(a)),n=Dr(a,e),r;try{r=await i(n)}catch(e){return K(`${e instanceof Error?e.message:String(e)}\n`)}return kj(`opened ${a} → ${n}${Aj(r)}`)}return K(`open: sprinkle manager not initialized
1769
+ `)}async function Nj(e,t,n){if(!t)return K(`open: browser APIs are unavailable in this environment
1770
+ `);let r;try{r=await n(e)}catch(e){return K(`${e instanceof Error?e.message:String(e)}\n`)}return kj(`opened ${e}${Aj(r)}`)}async function Pj(e,n,r,i){let a;try{a=await r.fs.stat(n)}catch{return K(`open: no such file: ${e}\n`)}if(!a.isFile)return K(`open: not a file: ${e}\n`);let o;try{o=await r.fs.readFileBuffer(n)}catch{return K(`open: failed to read: ${e}\n`)}let s=Jn(n),c=new Uint8Array(o),l=null;if(i!==void 0&&(l=xj(i),!l))return K(`open: invalid --size spec '${i}' (expected low|medium|high or WxH such as 512x512)\n`);if(!l){let t;try{t=await Ej(c,s)}catch(t){return K(`open: not an image or failed to decode: ${e} (${t instanceof Error?t.message:String(t)})\n`)}let r=Math.round(c.byteLength/1024);return K(`open --view: ${n} is ${t.width}x${t.height} (${r} KB, ${s})\n`+Cj())}let u;try{u=await Dj(c,s,l.maxW,l.maxH)}catch(t){return K(`open: not an image or failed to decode: ${e} (${t instanceof Error?t.message:String(t)})\n`)}let d=t(u.bytes),f=Math.round(u.bytes.byteLength/1024);return kj(`${n} (${u.nativeWidth}x${u.nativeHeight} → ${u.width}x${u.height}, ${f} KB, ${u.mime})\n<img:data:${u.mime};base64,${d}>`)}async function Fj(e,t,n,r){if(!r)return K(`open: --download requires the in-panel terminal (DOM-only)
1771
+ `);let i;try{i=await n.fs.stat(t)}catch{return K(`open: no such file: ${e}\n`)}if(!i.isFile)return K(`open: not a file: ${e}\n`);let a;try{a=await n.fs.readFileBuffer(t)}catch{return K(`open: failed to read: ${e}\n`)}let o=new Uint8Array(a.byteLength);o.set(a);let s=new Blob([o.buffer],{type:Jn(t)}),c=URL.createObjectURL(s),l=document.createElement(`a`);return l.href=c,l.download=er(t)||`download`,l.style.display=`none`,document.body.appendChild(l),l.click(),document.body.removeChild(l),setTimeout(()=>URL.revokeObjectURL(c),0),kj(`downloaded ${t}`)}async function Ij(e,t,n,r){if(!n)return K(`open: browser APIs are unavailable in this environment
1772
+ `);let i=!1;try{i=(await t.fs.stat(e)).isDirectory}catch{}let a=await Xn(t.fs,i?e:ar(e)),o=Dr(e,a),s;try{s=await r(o)}catch(e){return K(`${e instanceof Error?e.message:String(e)}\n`)}return kj(`opened ${e} → ${o}${Aj(s)}`)}async function Lj(e,t,n,r){if(!Qn(e)&&e.endsWith(`.shtml`)&&t.fs)return Mj(e,t,r.sprinkleManager,r.canOpenWindow,r.openExternal);if(!n.view&&!r.canOpenWindow)return K(`open: browser APIs are unavailable in this environment
1773
+ `);if(Qn(e))return Nj(e,r.canOpenWindow,r.openExternal);let i=t.fs.resolvePath(t.cwd,e);return n.view?Pj(e,i,t,n.sizeSpec):n.download?Fj(e,i,t,r.hasDom):Ij(i,t,r.canOpenWindow,r.openExternal)}function Rj(e){return S(`open`,async(t,n)=>{if(t.length===0||w(t,{valueFlags:vj}))return bj();let r=Oj(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 bj();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:jj(e,l,u)},f=[];for(let e of s){let t=await Lj(e,n,{view:a,download:i,sizeSpec:o},d);if(!t.ok)return t.result;f.push(t.message)}return{stdout:f.join(`
1774
1774
  `)+`
1775
- `,stderr:``,exitCode:0}})}function Lj(){return S(`patch`,async(e,t)=>{let{runPatch:n}=await import(`./run-CKI507uv.js`);return n(e,t)})}function Rj(e=`pdftk`){return S(e,async(t,n)=>{let{runPdftk:r}=await import(`./run-BEs473Sp.js`);return r(e,t,n)})}function zj(){return{stdout:`usage: pdftoppm [options] <input.pdf> [output-prefix]
1775
+ `,stderr:``,exitCode:0}})}function zj(){return S(`patch`,async(e,t)=>{let{runPatch:n}=await import(`./run-CW0-cog1.js`);return n(e,t)})}function Bj(e=`pdftk`){return S(e,async(t,n)=>{let{runPdftk:r}=await import(`./run-BEs473Sp.js`);return r(e,t,n)})}function Vj(){return{stdout:`usage: pdftoppm [options] <input.pdf> [output-prefix]
1776
1776
 
1777
1777
  Rasterize PDF pages to images. Writes <prefix>-<n>.<ext> per page, where <n>
1778
1778
  is zero-padded to the digit width of the last page (out-1.png for a 9-page
@@ -1799,8 +1799,8 @@ Examples:
1799
1799
  pdftoppm -png -r 150 doc.pdf page
1800
1800
  pdftoppm -jpeg -jpegopt quality=80 -f 1 -l 3 doc.pdf out
1801
1801
  pdftoppm -png -singlefile -scale-to 1024 doc.pdf cover
1802
- `,stderr:``,exitCode:0}}function Bj(e,t){if(e===void 0)throw Error(`missing argument for ${t}`);let n=Number(e);if(!Number.isFinite(n)||!Number.isInteger(n)||n<=0)throw Error(`invalid ${t} value: ${e}`);return n}function Vj(e){if(e===void 0)throw Error(`missing argument for -jpegopt`);for(let t of e.split(`,`)){let[e,n]=t.split(`=`);if(e?.trim()!==`quality`)continue;let r=Number(n);if(!Number.isFinite(r)||r<0||r>100)throw Error(`invalid -jpegopt quality: ${n}`);return r}throw Error(`unsupported -jpegopt: ${e}`)}function Hj(e){let t=`png`,n=150,r,i,a,o,s,c,l=!1,u=[];for(let d=0;d<e.length;d++){let f=e[d];switch(f){case`-png`:t=`png`;break;case`-jpeg`:t=`jpeg`;break;case`-jpegopt`:c=Vj(e[++d]),t=`jpeg`;break;case`-r`:n=Bj(e[++d],`-r`);break;case`-f`:r=Bj(e[++d],`-f`);break;case`-l`:i=Bj(e[++d],`-l`);break;case`-scale-to`:a=Bj(e[++d],`-scale-to`);break;case`-scale-to-x`:o=Bj(e[++d],`-scale-to-x`);break;case`-scale-to-y`:s=Bj(e[++d],`-scale-to-y`);break;case`-singlefile`:l=!0;break;default:if(f.startsWith(`-`))throw Error(`unsupported option ${f}`);u.push(f)}}if(u.length===0)throw Error(`expected an input PDF`);if(u.length>2)throw Error(`expected at most one input PDF and one output prefix`);if(r!==void 0&&i!==void 0&&r>i)throw Error(`invalid page range: ${r}-${i}`);return{inputPath:u[0],outputRoot:u[1],format:t,dpi:n,firstPage:r,lastPage:i,scaleTo:a,scaleToX:o,scaleToY:s,quality:c,singleFile:l}}function Uj(e){let t=e.lastIndexOf(`.`);return t>0?e.slice(0,t):e}function Wj(e,t,n,r){let i=String(n).length;return`${e}-${String(t).padStart(i,`0`)}.${r}`}function Gj(e){return e===`jpeg`?`jpg`:`png`}function Kj(e){return e.scaleToX===void 0?e.scaleToY===void 0?e.scaleTo===void 0?{scale:Li(e.dpi)}:{longEdge:e.scaleTo}:{height:e.scaleToY}:{width:e.scaleToX}}async function qj(e,t){let n=e.fs.resolvePath(e.cwd,t),r=await e.fs.readFileBuffer(n);if(!Fi(r))throw Error(`${t}: not a PDF file`);return r}function Jj(e=`pdftoppm`){return S(e,async(t,n)=>{if(t.length===0||t.includes(`--help`)||t.includes(`-h`))return zj();let r;try{r=Hj(t)}catch(t){return{stdout:``,stderr:`${e}: ${t instanceof Error?t.message:String(t)}\n`,exitCode:1}}try{let t=await qj(n,r.inputPath),i=Gj(r.format),a=r.outputRoot??Uj(er(r.inputPath)),o=[];return await Pi(t,{firstPage:r.firstPage,lastPage:r.singleFile?r.firstPage??1:r.lastPage,format:r.format,quality:r.quality,...Kj(r)},async(e,t)=>{let s=r.singleFile?`${a}.${i}`:Wj(a,e.pageNumber,t.lastPage,i);await n.fs.writeFile(n.fs.resolvePath(n.cwd,s),e.bytes),o.push(s)}),o.length===0?{stdout:``,stderr:`${e}: no pages to render\n`,exitCode:1}:{stdout:`${o.join(`
1803
- `)}\n`,stderr:``,exitCode:0}}catch(t){return{stdout:``,stderr:`${e}: ${t instanceof Error?t.message:String(t)}\n`,exitCode:1}}})}function Yj(e=`pdftotext`){return S(e,async(t,n)=>{let{runPdftotext:r}=await import(`./run-BVzzZSqz.js`);return r(e,t,n)})}function Xj(e){let t=e.filter(e=>e.teleportEligible===!0&&e.bootstrapId&&e.floatType);if(t.length===0)return null;let n=t.filter(e=>e.floatType===`standalone`),r=n.length>0?n:t;r.sort((e,t)=>(t.lastActivity??0)-(e.lastActivity??0));let i=r[0];return{runtimeId:i.runtimeId,bootstrapId:i.bootstrapId,floatType:i.floatType}}function Zj(){cw(()=>()=>ee()),sw(()=>()=>Xj(ee()))}const Qj=`/workspace/.plugins/sources`;function $j(e){return{stdout:e,stderr:``,exitCode:0}}function q(e,t=1){return{stdout:``,stderr:`${e}\n`,exitCode:t}}function eM(e,t){let n=C(t,{});return`error`in n?q(`plugin ${e}: ${n.error}`):{ok:!0,positionals:n.positionals}}function tM(){return`usage: plugin <command> [args]
1802
+ `,stderr:``,exitCode:0}}function Hj(e,t){if(e===void 0)throw Error(`missing argument for ${t}`);let n=Number(e);if(!Number.isFinite(n)||!Number.isInteger(n)||n<=0)throw Error(`invalid ${t} value: ${e}`);return n}function Uj(e){if(e===void 0)throw Error(`missing argument for -jpegopt`);for(let t of e.split(`,`)){let[e,n]=t.split(`=`);if(e?.trim()!==`quality`)continue;let r=Number(n);if(!Number.isFinite(r)||r<0||r>100)throw Error(`invalid -jpegopt quality: ${n}`);return r}throw Error(`unsupported -jpegopt: ${e}`)}function Wj(e){let t=`png`,n=150,r,i,a,o,s,c,l=!1,u=[];for(let d=0;d<e.length;d++){let f=e[d];switch(f){case`-png`:t=`png`;break;case`-jpeg`:t=`jpeg`;break;case`-jpegopt`:c=Uj(e[++d]),t=`jpeg`;break;case`-r`:n=Hj(e[++d],`-r`);break;case`-f`:r=Hj(e[++d],`-f`);break;case`-l`:i=Hj(e[++d],`-l`);break;case`-scale-to`:a=Hj(e[++d],`-scale-to`);break;case`-scale-to-x`:o=Hj(e[++d],`-scale-to-x`);break;case`-scale-to-y`:s=Hj(e[++d],`-scale-to-y`);break;case`-singlefile`:l=!0;break;default:if(f.startsWith(`-`))throw Error(`unsupported option ${f}`);u.push(f)}}if(u.length===0)throw Error(`expected an input PDF`);if(u.length>2)throw Error(`expected at most one input PDF and one output prefix`);if(r!==void 0&&i!==void 0&&r>i)throw Error(`invalid page range: ${r}-${i}`);return{inputPath:u[0],outputRoot:u[1],format:t,dpi:n,firstPage:r,lastPage:i,scaleTo:a,scaleToX:o,scaleToY:s,quality:c,singleFile:l}}function Gj(e){let t=e.lastIndexOf(`.`);return t>0?e.slice(0,t):e}function Kj(e,t,n,r){let i=String(n).length;return`${e}-${String(t).padStart(i,`0`)}.${r}`}function qj(e){return e===`jpeg`?`jpg`:`png`}function Jj(e){return e.scaleToX===void 0?e.scaleToY===void 0?e.scaleTo===void 0?{scale:Li(e.dpi)}:{longEdge:e.scaleTo}:{height:e.scaleToY}:{width:e.scaleToX}}async function Yj(e,t){let n=e.fs.resolvePath(e.cwd,t),r=await e.fs.readFileBuffer(n);if(!Fi(r))throw Error(`${t}: not a PDF file`);return r}function Xj(e=`pdftoppm`){return S(e,async(t,n)=>{if(t.length===0||t.includes(`--help`)||t.includes(`-h`))return Vj();let r;try{r=Wj(t)}catch(t){return{stdout:``,stderr:`${e}: ${t instanceof Error?t.message:String(t)}\n`,exitCode:1}}try{let t=await Yj(n,r.inputPath),i=qj(r.format),a=r.outputRoot??Gj(er(r.inputPath)),o=[];return await Pi(t,{firstPage:r.firstPage,lastPage:r.singleFile?r.firstPage??1:r.lastPage,format:r.format,quality:r.quality,...Jj(r)},async(e,t)=>{let s=r.singleFile?`${a}.${i}`:Kj(a,e.pageNumber,t.lastPage,i);await n.fs.writeFile(n.fs.resolvePath(n.cwd,s),e.bytes),o.push(s)}),o.length===0?{stdout:``,stderr:`${e}: no pages to render\n`,exitCode:1}:{stdout:`${o.join(`
1803
+ `)}\n`,stderr:``,exitCode:0}}catch(t){return{stdout:``,stderr:`${e}: ${t instanceof Error?t.message:String(t)}\n`,exitCode:1}}})}function Zj(e=`pdftotext`){return S(e,async(t,n)=>{let{runPdftotext:r}=await import(`./run-BVzzZSqz.js`);return r(e,t,n)})}function Qj(e){let t=e.filter(e=>e.teleportEligible===!0&&e.bootstrapId&&e.floatType);if(t.length===0)return null;let n=t.filter(e=>e.floatType===`standalone`),r=n.length>0?n:t;r.sort((e,t)=>(t.lastActivity??0)-(e.lastActivity??0));let i=r[0];return{runtimeId:i.runtimeId,bootstrapId:i.bootstrapId,floatType:i.floatType}}function $j(){cw(()=>()=>ee()),sw(()=>()=>Qj(ee()))}const eM=`/workspace/.plugins/sources`;function tM(e){return{stdout:e,stderr:``,exitCode:0}}function q(e,t=1){return{stdout:``,stderr:`${e}\n`,exitCode:t}}function nM(e,t){let n=C(t,{});return`error`in n?q(`plugin ${e}: ${n.error}`):{ok:!0,positionals:n.positionals}}function rM(){return`usage: plugin <command> [args]
1804
1804
 
1805
1805
  Load Agent Plugins packages (agent-plugins.org spec v1.0.0): portable
1806
1806
  directories bundling Agent Skills (skills/*/SKILL.md) and MCP servers
@@ -1810,7 +1810,7 @@ Commands:
1810
1810
  install <path|repo> Validate the plugin and register it. <repo> is a
1811
1811
  GitHub reference (owner/repo, owner/repo@branch, or
1812
1812
  https://github.com/owner/repo[/tree/branch[/dir]]),
1813
- downloaded into ${Qj}/.
1813
+ downloaded into ${eM}/.
1814
1814
  Skills surface through the standard skills discovery;
1815
1815
  streamable-http MCP servers are added to the MCP
1816
1816
  store as "<plugin>:<server>".
@@ -1832,36 +1832,36 @@ Examples:
1832
1832
  plugin list
1833
1833
  plugin info my-plugin
1834
1834
  plugin remove my-plugin
1835
- `}function nM(e={}){return S(`plugin`,async(t,n)=>{if(t.length===0||t[0]===`--help`||t[0]===`-h`)return $j(tM());let r=t[0],i=t.slice(1),a=n?.cwd??`/`;try{switch(r){case`install`:case`add`:return await lM(i,a,e);case`list`:case`ls`:return await pM(i,e);case`info`:return await mM(i,e);case`validate`:return await hM(i,a,e,zi(n?.env));case`remove`:case`rm`:case`delete`:return await gM(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 rM(e){if(e.fs)return e.fs;let{VirtualFS:t}=await import(`./fs-Bvj_6WV6.js`).then(e=>e.t),{GLOBAL_FS_DB_NAME:n}=await import(`./global-db-DJXlpNui.js`).then(e=>e.n);return t.create({dbName:n})}async function iM(e,t,n){let r=_M(t,e);if(await n.exists(r))return{kind:`local`,root:r};let{parseGitHubRef:i}=await import(`./github-install-z8nzKR56.js`).then(e=>e.t),a=i(e);if(a){let e=`${a.owner}/${a.repo}${a.branch?`@${a.branch}`:``}${a.path?`/${a.path}`:``}`;return{kind:`github`,ref:{...a,display:e}}}return{kind:`error`,message:`${r} does not exist and "${e}" is not a GitHub reference (owner/repo[@branch] or https://github.com/owner/repo[/tree/branch[/dir]])`}}function aM(e){let t=e.replace(/[^A-Za-z0-9._-]+/g,`-`);return/^\.+$/.test(t)?t.replace(/\./g,`_`):t}function oM(e){let t=[e.owner,e.repo,...e.path?[e.path]:[]];return`${Qj}/${t.map(aM).join(`--`)}`}async function sM(e,t,n,r){let{fetchRepoZip:i,stripZipPrefix:a,writeZipFilesToDir:o}=await import(`./github-zip-YeBT3Ny7.js`).then(e=>e.i),s=await i(e.owner,e.repo,r,e.branch);if(s.status===`error`)return`failed to download ${e.display}: ${s.message}`;let c=a(s.files),l=e.path?e.path.replace(/^\/|\/$/g,``)+`/`:``;if(!c[`${l}plugin.json`])return`no plugin.json found at ${e.display} — not an Agent Plugins package`;try{await n.rm(t,{recursive:!0})}catch{}return await n.mkdir(t,{recursive:!0}),(await o(c,l,t,n,!1)).length===0?`no files found at ${e.display}`:null}async function cM(e,t){try{await e.rm(t,{recursive:!0})}catch{}}async function lM(e,t,n){if(w(e))return $j(`usage: plugin install <path|repo>
1835
+ `}function iM(e={}){return S(`plugin`,async(t,n)=>{if(t.length===0||t[0]===`--help`||t[0]===`-h`)return tM(rM());let r=t[0],i=t.slice(1),a=n?.cwd??`/`;try{switch(r){case`install`:case`add`:return await dM(i,a,e);case`list`:case`ls`:return await hM(i,e);case`info`:return await gM(i,e);case`validate`:return await _M(i,a,e,zi(n?.env));case`remove`:case`rm`:case`delete`:return await vM(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 aM(e){if(e.fs)return e.fs;let{VirtualFS:t}=await import(`./fs-TVcPtHbB.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 oM(e,t,n){let r=yM(t,e);if(await n.exists(r))return{kind:`local`,root:r};let{parseGitHubRef:i}=await import(`./github-install-DB3-4PDg.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 sM(e){let t=e.replace(/[^A-Za-z0-9._-]+/g,`-`);return/^\.+$/.test(t)?t.replace(/\./g,`_`):t}function cM(e){let t=[e.owner,e.repo,...e.path?[e.path]:[]];return`${eM}/${t.map(sM).join(`--`)}`}async function lM(e,t,n,r){let{fetchRepoZip:i,stripZipPrefix:a,writeZipFilesToDir:o}=await import(`./github-zip-CfS9P2dH.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 uM(e,t){try{await e.rm(t,{recursive:!0})}catch{}}async function dM(e,t,n){if(w(e))return tM(`usage: plugin install <path|repo>
1836
1836
 
1837
1837
  Loads the Agent Plugins package at <path>, or downloads it from a GitHub
1838
1838
  reference (owner/repo, owner/repo@branch, or
1839
1839
  https://github.com/owner/repo[/tree/branch[/dir]]) into
1840
- ${Qj}/ first. Validates plugin.json (closed
1840
+ ${eM}/ first. Validates plugin.json (closed
1841
1841
  schema, name constraints), discovers skills/*/SKILL.md, and validates
1842
1842
  mcp.json. On success the plugin is recorded in
1843
1843
  /workspace/.plugins/plugins.json — its skills then surface through the
1844
1844
  standard skills discovery, and each supported streamable-http MCP server
1845
1845
  is registered in the MCP store as "<plugin>:<server>".
1846
- `);let r=eM(`install`,e);if(!(`ok`in r))return r;if(r.positionals.length<1)return q(`plugin install: expected <path|repo>`);let i=await rM(n),a=await iM(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=oM(a.ref),s=a.ref.display;let e=await sM(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 cM(i,o),q(`plugin install: plugin at ${s??o} was rejected:\n${vM(l.diagnostics)}`);let{plugin:u}=l,d=u.manifest.name,{getInstalledPlugin:f,setInstalledPlugin:p}=await import(`./store-DTMATE-h.js`),m=await f(d,n.fs);if(m&&m.root!==o)return a.kind===`github`&&await cM(i,o),q(`plugin install: a plugin named "${d}" is already installed from ${m.root} (remove it first)`);let h=await fM(u,n),g=await dM(d,m?.mcpServerNames,h.registered,n);return await p(d,{root:o,version:u.manifest.version,description:u.manifest.description,installedAt:new Date().toISOString(),mcpServerNames:h.registered,...s?{source:s}:{}},n.fs),$j(uM(u,h,g,s??o,l.diagnostics))}function uM(e,t,n,r,i){let a=e.manifest.name,o=t.registered,s=e.mcp.servers.filter(e=>e.status!==`supported`),c=[`Installed agent plugin "${a}"${e.manifest.version?` v${e.manifest.version}`:``} from ${r}`,` skills: ${e.skills.length}${e.skills.length>0?` (${e.skills.map(e=>e.name).join(`, `)})`:``}`,` mcp: ${o.length} registered${o.length>0?` (${o.join(`, `)})`:``}${s.length>0?`, ${s.length} skipped`:``}${n>0?`, ${n} removed from previous install`:``}`];return t.conflicts.length>0&&c.push(` warning: not bridged — MCP server name(s) already in use and not owned by this plugin: ${t.conflicts.join(`, `)} (remove them with \`mcp remove\` first)`),i.length>0&&c.push(`Diagnostics:`,vM(i)),c.join(`
1846
+ `);let r=nM(`install`,e);if(!(`ok`in r))return r;if(r.positionals.length<1)return q(`plugin install: expected <path|repo>`);let i=await aM(n),a=await oM(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=cM(a.ref),s=a.ref.display;let e=await lM(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 uM(i,o),q(`plugin install: plugin at ${s??o} was rejected:\n${bM(l.diagnostics)}`);let{plugin:u}=l,d=u.manifest.name,{getInstalledPlugin:f,setInstalledPlugin:p}=await import(`./store-D9HgQRdy.js`),m=await f(d,n.fs);if(m&&m.root!==o)return a.kind===`github`&&await uM(i,o),q(`plugin install: a plugin named "${d}" is already installed from ${m.root} (remove it first)`);let h=await mM(u,n),g=await pM(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),tM(fM(u,h,g,s??o,l.diagnostics))}function fM(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:`,bM(i)),c.join(`
1847
1847
  `)+`
1848
- `}async function dM(e,t,n,r){let i=(t??[]).filter(e=>!n.includes(e));if(i.length===0)return 0;let{deleteServer:a,getServer:o}=await import(`./store-B3uS3nQU.js`).then(e=>e.r),s=0;for(let t of i)(await o(t,r.fs))?.pluginOrigin===e&&await a(t,r.fs)&&(s+=1);return s}async function fM(e,t){let n=e.mcp.servers.filter(e=>e.status===`supported`);if(n.length===0)return{registered:[],conflicts:[]};let{getServer:r,setServer:i}=await import(`./store-B3uS3nQU.js`).then(e=>e.r),{McpClient:a}=await import(`./client-Sb_wIqH2.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 pM(e,t){if(w(e))return $j(`usage: plugin list
1849
- `);let n=eM(`list`,e);if(!(`ok`in n))return n;let{listInstalledPlugins:r}=await import(`./store-DTMATE-h.js`),i=await r(t.fs),a=Object.keys(i).sort();if(a.length===0)return $j("No agent plugins installed. Use `plugin install <path>`.\n");let o=[[`NAME`,`VERSION`,`ROOT`,`MCP`]];for(let e of a){let t=i[e];o.push([e,t.version??`-`,t.root,String(t.mcpServerNames?.length??0)])}let s=o[0].map((e,t)=>Math.max(...o.map(e=>e[t].length)));return $j(o.map(e=>e.map((e,t)=>e.padEnd(s[t])).join(` `)).join(`
1848
+ `}async function pM(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-DYTzgtEI.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 mM(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-DYTzgtEI.js`).then(e=>e.r),{McpClient:a}=await import(`./client-CmfvXtLV.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 hM(e,t){if(w(e))return tM(`usage: plugin list
1849
+ `);let n=nM(`list`,e);if(!(`ok`in n))return n;let{listInstalledPlugins:r}=await import(`./store-D9HgQRdy.js`),i=await r(t.fs),a=Object.keys(i).sort();if(a.length===0)return tM("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 tM(o.map(e=>e.map((e,t)=>e.padEnd(s[t])).join(` `)).join(`
1850
1850
  `)+`
1851
- `)}async function mM(e,t){if(w(e))return $j(`usage: plugin info <name>
1852
- `);let n=eM(`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-DTMATE-h.js`),a=await i(r,t.fs);if(!a)return q(`plugin info: no installed plugin named "${r}"`);let o=await rM(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${vM(c.diagnostics)}`);let{plugin:l}=c,u=l.manifest,d=[`${u.name}${u.version?` v${u.version}`:``}`,...u.description?[` ${u.description}`]:[],` root: ${l.root}`,...u.license?[` license: ${u.license}`]:[],...u.homepage?[` home: ${u.homepage}`]:[],``,`Skills (${l.skills.length}):`,...l.skills.map(e=>` ${e.name} ${e.description}`),``,`MCP servers (${l.mcp.servers.length}):`,...l.mcp.servers.map(e=>e.status===`supported`?` ${e.name} ${e.config.type} ${e.config.url}`:` ${e.name} [skipped: ${e.reason}]`)];return c.diagnostics.length>0&&d.push(``,`Diagnostics:`,vM(c.diagnostics)),$j(d.join(`
1851
+ `)}async function gM(e,t){if(w(e))return tM(`usage: plugin info <name>
1852
+ `);let n=nM(`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-D9HgQRdy.js`),a=await i(r,t.fs);if(!a)return q(`plugin info: no installed plugin named "${r}"`);let o=await aM(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${bM(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:`,bM(c.diagnostics)),tM(d.join(`
1853
1853
  `)+`
1854
- `)}async function hM(e,t,n,r){if(w(e))return $j(`usage: plugin validate <path|repo>
1855
- `);let i=eM(`validate`,e);if(!(`ok`in i))return i;if(i.positionals.length<1)return q(`plugin validate: expected <path|repo>`);let a=await rM(n),o=await iM(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/${oM(o.ref).split(`/`).pop()}`;let e=await sM(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 cM(a,c)}if(!u.ok)return{stdout:``,stderr:`plugin validate: REJECTED\n${vM(u.diagnostics)}\n`,exitCode:1};let{plugin:d}=u,f=d.mcp.servers.filter(e=>e.status===`supported`).length,p=[`plugin validate: OK — "${d.manifest.name}"${d.manifest.version?` v${d.manifest.version}`:``}`,` skills: ${d.skills.length}`,` mcp servers: ${f} supported, ${d.mcp.servers.length-f} skipped (mcp.json ${d.mcp.status})`];return u.diagnostics.length>0&&p.push(`Diagnostics:`,vM(u.diagnostics)),$j(p.join(`
1854
+ `)}async function _M(e,t,n,r){if(w(e))return tM(`usage: plugin validate <path|repo>
1855
+ `);let i=nM(`validate`,e);if(!(`ok`in i))return i;if(i.positionals.length<1)return q(`plugin validate: expected <path|repo>`);let a=await aM(n),o=await oM(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/${cM(o.ref).split(`/`).pop()}`;let e=await lM(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 uM(a,c)}if(!u.ok)return{stdout:``,stderr:`plugin validate: REJECTED\n${bM(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:`,bM(u.diagnostics)),tM(p.join(`
1856
1856
  `)+`
1857
- `)}async function gM(e,t){if(w(e))return $j(`usage: plugin remove <name>
1858
- `);let n=eM(`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-DTMATE-h.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-B3uS3nQU.js`).then(e=>e.r);for(let i of o.mcpServerNames)(await n(i,t.fs))?.pluginOrigin===r&&await e(i,t.fs)&&(s+=1)}await a(r,t.fs);let c=o.root.startsWith(`${Qj}/`);return c&&await cM(await rM(t),o.root),$j([`Removed agent plugin "${r}"`,` registry: removed`,` mcp servers: ${s} removed`,c?` files: removed (${o.root})`:` files: left in place (${o.root})`].join(`
1857
+ `)}async function vM(e,t){if(w(e))return tM(`usage: plugin remove <name>
1858
+ `);let n=nM(`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-D9HgQRdy.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-DYTzgtEI.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(`${eM}/`);return c&&await uM(await aM(t),o.root),tM([`Removed agent plugin "${r}"`,` registry: removed`,` mcp servers: ${s} removed`,c?` files: removed (${o.root})`:` files: left in place (${o.root})`].join(`
1859
1859
  `)+`
1860
- `)}function _M(e,t){let n=t.startsWith(`/`)?t:`${e.replace(/\/$/,``)}/${t}`,r=[];for(let e of n.split(`/`))e!==``&&e!==`.`&&(e===`..`?r.pop():r.push(e));return`/${r.join(`/`)}`}function vM(e){return e.map(e=>` ${e.level===`error`?`error`:`warn `} [${e.component}] ${e.message}`).join(`
1861
- `)}const yM=[`pid`,`ppid`,`kind`,`stat`,`start`,`scoop`,`command`],bM=[`pid`,`ppid`,`stat`,`start`,`scoop`,`command`],xM={running:`R`,pending:`S`,exited:`Z`,killed:`K`},SM=[`-a`,`-A`,`-e`,`--all`,`-T`,`--tree`],CM=[`-o`,`--columns`];function wM(e={}){return S(`ps`,async t=>{if(w(t,{valueFlags:CM}))return RM();let n=e.processManager??TM();if(!n)return{stdout:``,stderr:`ps: no process manager available in this runtime
1862
- `,exitCode:1};let r=C(t,{bool:SM,value:CM});if(`error`in r)return{stdout:``,stderr:`ps: ${r.error}\n`,exitCode:r.error.startsWith(`unknown flag:`)?1:2};if(r.positionals.length>0)return{stdout:``,stderr:`ps: unrecognized argument '${r.positionals[0]}'\n`,exitCode:2};let i=bM,a=r.bools.has(`-T`)||r.bools.has(`--tree`),o=r.bools.has(`-a`)||r.bools.has(`-A`)||r.bools.has(`-e`)||r.bools.has(`--all`),s=r.values.get(`-o`)??r.values.get(`--columns`);if(s!==void 0){let e=EM(s);if(e instanceof Error)return{stdout:``,stderr:`ps: ${e.message}\n`,exitCode:2};i=e}let c=n.list().sort((e,t)=>e.pid-t.pid),l=o?c:c.filter(e=>e.status===`running`||e.status===`pending`),u=a?LM(l):l.map(e=>({proc:e,depth:0})),d=DM(i,u.map(({proc:e})=>e),s!==void 0),f=u.map(({proc:e,depth:t})=>AM(e,i,t,a,d));return{stdout:[OM(i,d),...f].join(`
1860
+ `)}function yM(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 bM(e){return e.map(e=>` ${e.level===`error`?`error`:`warn `} [${e.component}] ${e.message}`).join(`
1861
+ `)}const xM=[`pid`,`ppid`,`kind`,`stat`,`start`,`scoop`,`command`],SM=[`pid`,`ppid`,`stat`,`start`,`scoop`,`command`],CM={running:`R`,pending:`S`,exited:`Z`,killed:`K`},wM=[`-a`,`-A`,`-e`,`--all`,`-T`,`--tree`],TM=[`-o`,`--columns`];function EM(e={}){return S(`ps`,async t=>{if(w(t,{valueFlags:TM}))return BM();let n=e.processManager??DM();if(!n)return{stdout:``,stderr:`ps: no process manager available in this runtime
1862
+ `,exitCode:1};let r=C(t,{bool:wM,value:TM});if(`error`in r)return{stdout:``,stderr:`ps: ${r.error}\n`,exitCode:r.error.startsWith(`unknown flag:`)?1:2};if(r.positionals.length>0)return{stdout:``,stderr:`ps: unrecognized argument '${r.positionals[0]}'\n`,exitCode:2};let i=SM,a=r.bools.has(`-T`)||r.bools.has(`--tree`),o=r.bools.has(`-a`)||r.bools.has(`-A`)||r.bools.has(`-e`)||r.bools.has(`--all`),s=r.values.get(`-o`)??r.values.get(`--columns`);if(s!==void 0){let e=OM(s);if(e instanceof Error)return{stdout:``,stderr:`ps: ${e.message}\n`,exitCode:2};i=e}let c=n.list().sort((e,t)=>e.pid-t.pid),l=o?c:c.filter(e=>e.status===`running`||e.status===`pending`),u=a?zM(l):l.map(e=>({proc:e,depth:0})),d=kM(i,u.map(({proc:e})=>e),s!==void 0),f=u.map(({proc:e,depth:t})=>MM(e,i,t,a,d));return{stdout:[AM(i,d),...f].join(`
1863
1863
  `)+`
1864
- `,stderr:``,exitCode:0}})}function TM(){let e=globalThis.__slicc_pm;return e instanceof Object&&typeof e.list==`function`?e:null}function EM(e){let t=e.split(`,`).map(e=>e.trim().toLowerCase()).filter(Boolean);if(t.length===0)return Error(`-o requires at least one column`);let n=[];for(let e of t){if(!yM.includes(e))return Error(`unknown column '${e}'; supported: ${yM.join(`, `)}`);n.push(e)}return n}function DM(e,t,n){if(!(n&&e.includes(`scoop`)))return{full:!1,width:10};let r=5;for(let e of t)r=Math.max(r,NM(e).length);return{full:!0,width:r}}function OM(e,t){return e.map(e=>kM(e,t)).join(` `)}function kM(e,t){switch(e){case`pid`:return`PID`.padStart(5);case`ppid`:return`PPID`.padStart(5);case`kind`:return`KIND`.padEnd(10);case`stat`:return`STAT`;case`start`:return`START`;case`scoop`:return`SCOOP`.padEnd(t.width);case`command`:return`COMMAND`}}function AM(e,t,n,r,i){return t.map(t=>jM(e,t,n,r,i)).join(` `)}function jM(e,t,n,r,i){switch(t){case`pid`:return String(e.pid).padStart(5);case`ppid`:return String(e.ppid).padStart(5);case`kind`:return e.kind.padEnd(10);case`stat`:return xM[e.status];case`start`:return MM(e.startedAt);case`scoop`:return PM(e,i);case`command`:return FM(e,n,r)}}function MM(e){let t=new Date(e);return`${String(t.getHours()).padStart(2,`0`)}:${String(t.getMinutes()).padStart(2,`0`)}:${String(t.getSeconds()).padStart(2,`0`)}`}function NM(e){return e.owner.kind===`cone`?`cone`:e.owner.kind===`system`?`system`:e.owner.kind===`jshd`?`jshd`:e.owner.scoopJid??`scoop`}function PM(e,t){let n=NM(e);return(t.full?n:n.slice(0,t.width)).padEnd(t.width)}function FM(e,t,n){let r=n&&t>0?` `.repeat(t-1)+`└─ `:``,i=e.argv.length===0?`[${e.kind}]`:e.argv.map(IM).join(` `);return r+(i.length>80?i.slice(0,79)+`…`:i)}function IM(e){return e===``?`''`:/^[A-Za-z0-9_./:=@%+-]+$/.test(e)?e:e.includes(`"`)&&!e.includes(`'`)?`'${e}'`:`"${e.replace(/\\/g,`\\\\`).replace(/"/g,`\\"`)}"`}function LM(e){let t=new Map;for(let n of e)t.set(n.pid,n);let n=new Map,r=[];for(let i of e)if(t.has(i.ppid)){let e=n.get(i.ppid)??[];e.push(i),n.set(i.ppid,e)}else r.push(i);let i=[],a=new Set,o=(e,t)=>{if(a.has(e.pid))return;a.add(e.pid),i.push({proc:e,depth:t});let r=n.get(e.pid)??[];for(let e of r.sort((e,t)=>e.pid-t.pid))o(e,t+1)};for(let e of r.sort((e,t)=>e.pid-t.pid))o(e,0);return i}function RM(){return{stdout:`Usage: ps [-a] [-T] [-o col[,col…]]
1864
+ `,stderr:``,exitCode:0}})}function DM(){let e=globalThis.__slicc_pm;return e instanceof Object&&typeof e.list==`function`?e:null}function OM(e){let t=e.split(`,`).map(e=>e.trim().toLowerCase()).filter(Boolean);if(t.length===0)return Error(`-o requires at least one column`);let n=[];for(let e of t){if(!xM.includes(e))return Error(`unknown column '${e}'; supported: ${xM.join(`, `)}`);n.push(e)}return n}function kM(e,t,n){if(!(n&&e.includes(`scoop`)))return{full:!1,width:10};let r=5;for(let e of t)r=Math.max(r,FM(e).length);return{full:!0,width:r}}function AM(e,t){return e.map(e=>jM(e,t)).join(` `)}function jM(e,t){switch(e){case`pid`:return`PID`.padStart(5);case`ppid`:return`PPID`.padStart(5);case`kind`:return`KIND`.padEnd(10);case`stat`:return`STAT`;case`start`:return`START`;case`scoop`:return`SCOOP`.padEnd(t.width);case`command`:return`COMMAND`}}function MM(e,t,n,r,i){return t.map(t=>NM(e,t,n,r,i)).join(` `)}function NM(e,t,n,r,i){switch(t){case`pid`:return String(e.pid).padStart(5);case`ppid`:return String(e.ppid).padStart(5);case`kind`:return e.kind.padEnd(10);case`stat`:return CM[e.status];case`start`:return PM(e.startedAt);case`scoop`:return IM(e,i);case`command`:return LM(e,n,r)}}function PM(e){let t=new Date(e);return`${String(t.getHours()).padStart(2,`0`)}:${String(t.getMinutes()).padStart(2,`0`)}:${String(t.getSeconds()).padStart(2,`0`)}`}function FM(e){return e.owner.kind===`cone`?`cone`:e.owner.kind===`system`?`system`:e.owner.kind===`jshd`?`jshd`:e.owner.scoopJid??`scoop`}function IM(e,t){let n=FM(e);return(t.full?n:n.slice(0,t.width)).padEnd(t.width)}function LM(e,t,n){let r=n&&t>0?` `.repeat(t-1)+`└─ `:``,i=e.argv.length===0?`[${e.kind}]`:e.argv.map(RM).join(` `);return r+(i.length>80?i.slice(0,79)+`…`:i)}function RM(e){return e===``?`''`:/^[A-Za-z0-9_./:=@%+-]+$/.test(e)?e:e.includes(`"`)&&!e.includes(`'`)?`'${e}'`:`"${e.replace(/\\/g,`\\\\`).replace(/"/g,`\\"`)}"`}function zM(e){let t=new Map;for(let n of e)t.set(n.pid,n);let n=new Map,r=[];for(let i of e)if(t.has(i.ppid)){let e=n.get(i.ppid)??[];e.push(i),n.set(i.ppid,e)}else r.push(i);let i=[],a=new Set,o=(e,t)=>{if(a.has(e.pid))return;a.add(e.pid),i.push({proc:e,depth:t});let r=n.get(e.pid)??[];for(let e of r.sort((e,t)=>e.pid-t.pid))o(e,t+1)};for(let e of r.sort((e,t)=>e.pid-t.pid))o(e,0);return i}function BM(){return{stdout:`Usage: ps [-a] [-T] [-o col[,col…]]
1865
1865
 
1866
1866
  List processes tracked by the kernel.
1867
1867
 
@@ -1894,9 +1894,9 @@ Examples:
1894
1894
  ps -a -T full tree
1895
1895
  ps -o pid,kind,stat just three columns
1896
1896
  ps -o scoop,stat,pid full scoop jid, with STAT and PID
1897
- `,stderr:``,exitCode:0}}const zM=new Set([`dev`,`proc`,`lib`,`bin`,`usr`,`etc`,`home`,`tmp`]);async function BM(e,t=zM){let n=[],r=new Set;try{let i=await e.readdir(`/`);for(let a of i){if(!a||a.includes(`/`)||t.has(a))continue;let i=`/${a}`,o=!1;try{o=!!(await e.stat(i)).isDirectory}catch{continue}o&&(r.has(i)||(r.add(i),n.push(i)))}}catch{}return r.has(`/tmp`)||(r.add(`/tmp`),n.push(`/tmp`)),n}function VM(e,t){let n=e;if(typeof n.listMountPoints!=`function`)return[];let r=e=>{for(let n of t)if(e===n||e.startsWith(n===`/`?`/`:n+`/`)||n.startsWith(e+`/`))return!0;return!1},i=[];for(let e of n.listMountPoints())e.kind!==`proc`&&r(e.path)&&i.push({path:e.path,kind:e.kind});return i}function HM(){try{if(typeof globalThis.navigator?.storage?.getDirectory==`function`)return`slicc-fs`}catch{}}function UM(e){return{reader:{exists:t=>e.fs.exists(t),isDirectory:async t=>{try{return(await e.fs.stat(t)).isDirectory}catch{return!1}},readFile:t=>e.fs.readFile(t)},fromDir:e.cwd}}async function WM(e,t){try{let n=await e.readFile(`${t}/package.json`),r=JSON.parse(n);return typeof r.version==`string`?r.version:null}catch{return null}}function GM(e,t){return`installed pyodide ${e} is not the supported version ${t}: run \`ipk uninstall pyodide\` then \`ipk add pyodide@${t}\``}function KM(){return{stdout:`usage: python3 [-c code | script.py] [args...]
1898
- `,stderr:``,exitCode:0}}function qM(){return{stdout:`Python 3.14 (Pyodide)
1899
- `,stderr:``,exitCode:0}}async function JM(e,t,n){if(t[0]===`-c`){if(!t[1])return{kind:`result`,result:{stdout:``,stderr:`${e}: option requires an argument -- 'c'\n`,exitCode:2}};let n=t[1];return{kind:`ok`,code:n,filename:`-c`,sysArgv:[`-c`,...t.slice(2)],procArgv:[e,`-c`,n,...t.slice(2)]}}if(t.length>0&&!t[0].startsWith(`-`)){let r=t[0],i=n.fs.resolvePath(n.cwd,r);return await n.fs.exists(i)?{kind:`ok`,code:await n.fs.readFile(i),filename:r,sysArgv:[r,...t.slice(1)],procArgv:[e,r,...t.slice(1)]}:{kind:`result`,result:{stdout:``,stderr:`${e}: can't open file '${r}': [Errno 2] No such file or directory\n`,exitCode:2}}}return P(n.stdin).trim().length>0?{kind:`ok`,code:P(n.stdin),filename:`<stdin>`,sysArgv:[`<stdin>`],procArgv:[e]}:t.length>0?{kind:`result`,result:{stdout:``,stderr:`${e}: unsupported option '${t[0]}'\n`,exitCode:2}}:{kind:`result`,result:{stdout:``,stderr:`${e}: no input provided (use -c CODE, script path, or stdin)\n`,exitCode:2}}}async function YM(e){let t=UM(e),n=await wr(t);if(!n)return{kind:`result`,result:{stdout:``,stderr:`${Cr}\n`,exitCode:1}};let r=await WM(t.reader,n);return r?r===pr?{kind:`ok`,assetRoot:n}:{kind:`result`,result:{stdout:``,stderr:`${GM(r,pr)}\n`,exitCode:1}}:{kind:`result`,result:{stdout:``,stderr:`${Cr}\n`,exitCode:1}}}function XM(e,t={}){return S(e,async(n,r)=>{let i=n[0];if(i===`--help`||i===`-h`)return KM();if(i===`--version`||i===`-V`)return qM();let a=await JM(e,n,r);if(a.kind===`result`)return a.result;let{code:o,filename:s,sysArgv:c,procArgv:l}=a,u=await BM(r.fs),d=VM(r.fs,u),f=t.buildProcessConfig?.(r.env),p=f?.processManager??ZM(),m=f?.owner??{kind:`system`},h=f?.getParentPid?.(),g=t.realmFactory??jr(),_=t.pyodideIndexURL??Gr(),v=t.pyodideAssetRoot;if(!v&&_===void 0){let e=await YM(r);if(e.kind===`result`)return e.result;v=e.assetRoot}let ee=s===`<stdin>`?``:P(r.stdin),te=HM();return p?Vr({pm:p,realmFactory:g,owner:m,kind:`py`,code:o,argv:l,realmArgv:c,env:Object.fromEntries(r.env.entries()),cwd:r.cwd,filename:s,ctx:r,stdin:ee,pyodideIndexURL:_,pyodideAssetRoot:v,pyodideMountDirs:u,opfsMountDbName:te,mountPoints:d,procKind:`py`,ppid:h,syncFsBridgeEnabled:Ar()}):$M({realmFactory:g,owner:m,code:o,argv:l,realmArgv:c,env:Object.fromEntries(r.env.entries()),cwd:r.cwd,filename:s,ctx:r,stdin:ee,pyodideIndexURL:_,pyodideAssetRoot:v,pyodideMountDirs:u,opfsMountDbName:te,mountPoints:d})})}function ZM(){let e=globalThis.__slicc_pm;return e&&typeof e==`object`&&typeof e.spawn==`function`&&typeof e.onSignal==`function`?e:null}let QM=null;async function $M(e){if(!QM){let{ProcessManager:e}=await import(`./process-manager-BkhAohXT.js`).then(e=>e.n);QM=new e}return Vr({pm:QM,realmFactory:e.realmFactory,owner:e.owner,kind:`py`,code:e.code,argv:e.argv,realmArgv:e.realmArgv,env:e.env,cwd:e.cwd,filename:e.filename,ctx:e.ctx,stdin:e.stdin,pyodideIndexURL:e.pyodideIndexURL,pyodideAssetRoot:e.pyodideAssetRoot,pyodideMountDirs:e.pyodideMountDirs,mountPoints:e.mountPoints,opfsMountDbName:e.opfsMountDbName,procKind:`py`,syncFsBridgeEnabled:Ar()})}function eN(){return S(`rg`,async(e,t)=>{let{runRg:n}=await import(`./run-DniTiLYn.js`);return n(e,t)})}function tN(e,t,n={}){let r=new Map;for(let e of t)r.set(e.path,e);let i=new Set,a=[],o=[],s=[];for(let t of e){i.add(t.path);let e=r.get(t.path);e?e.size===t.size&&e.mtimeMs===t.mtimeMs?s.push(t.path):o.push(t.path):a.push(t.path)}let c=[];if(n.delete)for(let e of t)i.has(e.path)||c.push(e.path);return{toAdd:a,toUpdate:o,toDelete:c,toSkip:s}}function nN(){return null}function rN(e){let t={dryRun:!1,delete:!1,verbose:!1},n=[];for(let r of e)if(r===`--dry-run`||r===`-n`)t.dryRun=!0;else if(r===`--delete`)t.delete=!0;else if(r===`--verbose`||r===`-v`)t.verbose=!0;else if(r===`--help`||r===`-h`)return{error:`__help__`};else if(r.startsWith(`-`))return{error:`Unknown flag: ${r}`};else n.push(r);if(n.length!==2)return{error:`Expected exactly 2 arguments: <source> <dest>`};let[r,i]=n,a=iN(r),o=iN(i);return a&&o?{error:`Cannot sync between two remote paths — one side must be local`}:!a&&!o?{error:`One argument must be a remote path (runtime-id:/path)`}:o?{direction:`push`,localPath:r,remotePath:o.path,runtimeId:o.runtimeId,...t}:{direction:`pull`,localPath:i,remotePath:a.path,runtimeId:a.runtimeId,...t}}function iN(e){let t=e.indexOf(`:`);if(t<=0)return null;let n=e.slice(0,t),r=e.slice(t+1);return r.startsWith(`/`)?{runtimeId:n,path:r}:null}function aN(){return{stdout:`rsync — sync files between local VFS and a remote tray runtime
1897
+ `,stderr:``,exitCode:0}}const VM=new Set([`dev`,`proc`,`lib`,`bin`,`usr`,`etc`,`home`,`tmp`]);async function HM(e,t=VM){let n=[],r=new Set;try{let i=await e.readdir(`/`);for(let a of i){if(!a||a.includes(`/`)||t.has(a))continue;let i=`/${a}`,o=!1;try{o=!!(await e.stat(i)).isDirectory}catch{continue}o&&(r.has(i)||(r.add(i),n.push(i)))}}catch{}return r.has(`/tmp`)||(r.add(`/tmp`),n.push(`/tmp`)),n}function UM(e,t){let n=e;if(typeof n.listMountPoints!=`function`)return[];let r=e=>{for(let n of t)if(e===n||e.startsWith(n===`/`?`/`:n+`/`)||n.startsWith(e+`/`))return!0;return!1},i=[];for(let e of n.listMountPoints())e.kind!==`proc`&&r(e.path)&&i.push({path:e.path,kind:e.kind});return i}function WM(){try{if(typeof globalThis.navigator?.storage?.getDirectory==`function`)return`slicc-fs`}catch{}}function GM(e){return{reader:{exists:t=>e.fs.exists(t),isDirectory:async t=>{try{return(await e.fs.stat(t)).isDirectory}catch{return!1}},readFile:t=>e.fs.readFile(t)},fromDir:e.cwd}}async function KM(e,t){try{let n=await e.readFile(`${t}/package.json`),r=JSON.parse(n);return typeof r.version==`string`?r.version:null}catch{return null}}function qM(e,t){return`installed pyodide ${e} is not the supported version ${t}: run \`ipk uninstall pyodide\` then \`ipk add pyodide@${t}\``}function JM(){return{stdout:`usage: python3 [-c code | script.py] [args...]
1898
+ `,stderr:``,exitCode:0}}function YM(){return{stdout:`Python 3.14 (Pyodide)
1899
+ `,stderr:``,exitCode:0}}async function XM(e,t,n){if(t[0]===`-c`){if(!t[1])return{kind:`result`,result:{stdout:``,stderr:`${e}: option requires an argument -- 'c'\n`,exitCode:2}};let n=t[1];return{kind:`ok`,code:n,filename:`-c`,sysArgv:[`-c`,...t.slice(2)],procArgv:[e,`-c`,n,...t.slice(2)]}}if(t.length>0&&!t[0].startsWith(`-`)){let r=t[0],i=n.fs.resolvePath(n.cwd,r);return await n.fs.exists(i)?{kind:`ok`,code:await n.fs.readFile(i),filename:r,sysArgv:[r,...t.slice(1)],procArgv:[e,r,...t.slice(1)]}:{kind:`result`,result:{stdout:``,stderr:`${e}: can't open file '${r}': [Errno 2] No such file or directory\n`,exitCode:2}}}return P(n.stdin).trim().length>0?{kind:`ok`,code:P(n.stdin),filename:`<stdin>`,sysArgv:[`<stdin>`],procArgv:[e]}:t.length>0?{kind:`result`,result:{stdout:``,stderr:`${e}: unsupported option '${t[0]}'\n`,exitCode:2}}:{kind:`result`,result:{stdout:``,stderr:`${e}: no input provided (use -c CODE, script path, or stdin)\n`,exitCode:2}}}async function ZM(e){let t=GM(e),n=await wr(t);if(!n)return{kind:`result`,result:{stdout:``,stderr:`${Cr}\n`,exitCode:1}};let r=await KM(t.reader,n);return r?r===pr?{kind:`ok`,assetRoot:n}:{kind:`result`,result:{stdout:``,stderr:`${qM(r,pr)}\n`,exitCode:1}}:{kind:`result`,result:{stdout:``,stderr:`${Cr}\n`,exitCode:1}}}function QM(e,t={}){return S(e,async(n,r)=>{let i=n[0];if(i===`--help`||i===`-h`)return JM();if(i===`--version`||i===`-V`)return YM();let a=await XM(e,n,r);if(a.kind===`result`)return a.result;let{code:o,filename:s,sysArgv:c,procArgv:l}=a,u=await HM(r.fs),d=UM(r.fs,u),f=t.buildProcessConfig?.(r.env),p=f?.processManager??$M(),m=f?.owner??{kind:`system`},h=f?.getParentPid?.(),g=t.realmFactory??jr(),_=t.pyodideIndexURL??Gr(),v=t.pyodideAssetRoot;if(!v&&_===void 0){let e=await ZM(r);if(e.kind===`result`)return e.result;v=e.assetRoot}let ee=s===`<stdin>`?``:P(r.stdin),te=WM();return p?Vr({pm:p,realmFactory:g,owner:m,kind:`py`,code:o,argv:l,realmArgv:c,env:Object.fromEntries(r.env.entries()),cwd:r.cwd,filename:s,ctx:r,stdin:ee,pyodideIndexURL:_,pyodideAssetRoot:v,pyodideMountDirs:u,opfsMountDbName:te,mountPoints:d,procKind:`py`,ppid:h,syncFsBridgeEnabled:Ar()}):tN({realmFactory:g,owner:m,code:o,argv:l,realmArgv:c,env:Object.fromEntries(r.env.entries()),cwd:r.cwd,filename:s,ctx:r,stdin:ee,pyodideIndexURL:_,pyodideAssetRoot:v,pyodideMountDirs:u,opfsMountDbName:te,mountPoints:d})})}function $M(){let e=globalThis.__slicc_pm;return e&&typeof e==`object`&&typeof e.spawn==`function`&&typeof e.onSignal==`function`?e:null}let eN=null;async function tN(e){if(!eN){let{ProcessManager:e}=await import(`./process-manager-BkhAohXT.js`).then(e=>e.n);eN=new e}return Vr({pm:eN,realmFactory:e.realmFactory,owner:e.owner,kind:`py`,code:e.code,argv:e.argv,realmArgv:e.realmArgv,env:e.env,cwd:e.cwd,filename:e.filename,ctx:e.ctx,stdin:e.stdin,pyodideIndexURL:e.pyodideIndexURL,pyodideAssetRoot:e.pyodideAssetRoot,pyodideMountDirs:e.pyodideMountDirs,mountPoints:e.mountPoints,opfsMountDbName:e.opfsMountDbName,procKind:`py`,syncFsBridgeEnabled:Ar()})}function nN(){return S(`rg`,async(e,t)=>{let{runRg:n}=await import(`./run-DniTiLYn.js`);return n(e,t)})}function rN(e,t,n={}){let r=new Map;for(let e of t)r.set(e.path,e);let i=new Set,a=[],o=[],s=[];for(let t of e){i.add(t.path);let e=r.get(t.path);e?e.size===t.size&&e.mtimeMs===t.mtimeMs?s.push(t.path):o.push(t.path):a.push(t.path)}let c=[];if(n.delete)for(let e of t)i.has(e.path)||c.push(e.path);return{toAdd:a,toUpdate:o,toDelete:c,toSkip:s}}function iN(){return null}function aN(e){let t={dryRun:!1,delete:!1,verbose:!1},n=[];for(let r of e)if(r===`--dry-run`||r===`-n`)t.dryRun=!0;else if(r===`--delete`)t.delete=!0;else if(r===`--verbose`||r===`-v`)t.verbose=!0;else if(r===`--help`||r===`-h`)return{error:`__help__`};else if(r.startsWith(`-`))return{error:`Unknown flag: ${r}`};else n.push(r);if(n.length!==2)return{error:`Expected exactly 2 arguments: <source> <dest>`};let[r,i]=n,a=oN(r),o=oN(i);return a&&o?{error:`Cannot sync between two remote paths — one side must be local`}:!a&&!o?{error:`One argument must be a remote path (runtime-id:/path)`}:o?{direction:`push`,localPath:r,remotePath:o.path,runtimeId:o.runtimeId,...t}:{direction:`pull`,localPath:i,remotePath:a.path,runtimeId:a.runtimeId,...t}}function oN(e){let t=e.indexOf(`:`);if(t<=0)return null;let n=e.slice(0,t),r=e.slice(t+1);return r.startsWith(`/`)?{runtimeId:n,path:r}:null}function sN(){return{stdout:`rsync — sync files between local VFS and a remote tray runtime
1900
1900
 
1901
1901
  Usage:
1902
1902
  rsync [flags] <local-path> <runtime-id>:<remote-path> # push
@@ -1912,21 +1912,21 @@ Examples:
1912
1912
  rsync /workspace follower-abc123:/workspace
1913
1913
  rsync --delete /shared leader:/shared
1914
1914
  rsync follower-abc123:/workspace/project /workspace/project
1915
- `,stderr:``,exitCode:0}}async function oN(e,t){if(!await e.exists(t))return[];let n=[];for await(let r of e.walk(t)){let i=r.slice(t.length).replace(/^\//,``);if(!i)continue;let a=await e.stat(r);n.push({path:i,size:a.size,mtimeMs:a.mtime})}return n}async function sN(e,t,n){let r=(await e(t,{op:`walk`,path:n}))[0];if(!r.ok){if(r.code===`ENOENT`)return[];throw Error(`Remote walk failed: ${r.error}`)}if(r.data.type!==`paths`)throw Error(`Unexpected walk response type`);let i=r.data.paths,a=[];for(let r of i){let i=r.slice(n.length).replace(/^\//,``);if(!i)continue;let o=(await e(t,{op:`stat`,path:r}))[0];o.ok&&o.data.type===`stat`&&a.push({path:i,size:o.data.stat.size,mtimeMs:o.data.stat.mtime})}return a}async function cN(e,t,n){let r=await e(t,{op:`readFile`,path:n,encoding:`binary`}),i=``;for(let e of r){if(!e.ok)throw Error(`Remote read failed: ${e.error}`);e.data.type===`file`&&(i+=e.data.content)}return i}async function lN(e,t,n){let r=await e(t,{op:`mkdir`,path:n,recursive:!0});if(!r[0].ok)throw Error(`Remote mkdir failed: ${r[0].error}`)}function uN(e){let t=e.lastIndexOf(`/`);return t<=0?`/`:e.slice(0,t)}async function dN(e,n,r){let i=[],{localPath:a,remotePath:o,runtimeId:s,verbose:c,dryRun:l}=r,u=tN(await oN(e,a),await sN(n,s,o),{delete:r.delete});if(c||l){for(let e of u.toAdd)i.push(`+ ${e}`);for(let e of u.toUpdate)i.push(`~ ${e}`);for(let e of u.toDelete)i.push(`- ${e}`);if(c)for(let e of u.toSkip)i.push(` ${e} (up to date)`)}let d=u.toAdd.length+u.toUpdate.length+u.toDelete.length;if(l)return i.push(`\n(dry run) ${d} file(s) would be transferred, ${u.toSkip.length} up to date`),{stdout:i.join(`
1915
+ `,stderr:``,exitCode:0}}async function cN(e,t){if(!await e.exists(t))return[];let n=[];for await(let r of e.walk(t)){let i=r.slice(t.length).replace(/^\//,``);if(!i)continue;let a=await e.stat(r);n.push({path:i,size:a.size,mtimeMs:a.mtime})}return n}async function lN(e,t,n){let r=(await e(t,{op:`walk`,path:n}))[0];if(!r.ok){if(r.code===`ENOENT`)return[];throw Error(`Remote walk failed: ${r.error}`)}if(r.data.type!==`paths`)throw Error(`Unexpected walk response type`);let i=r.data.paths,a=[];for(let r of i){let i=r.slice(n.length).replace(/^\//,``);if(!i)continue;let o=(await e(t,{op:`stat`,path:r}))[0];o.ok&&o.data.type===`stat`&&a.push({path:i,size:o.data.stat.size,mtimeMs:o.data.stat.mtime})}return a}async function uN(e,t,n){let r=await e(t,{op:`readFile`,path:n,encoding:`binary`}),i=``;for(let e of r){if(!e.ok)throw Error(`Remote read failed: ${e.error}`);e.data.type===`file`&&(i+=e.data.content)}return i}async function dN(e,t,n){let r=await e(t,{op:`mkdir`,path:n,recursive:!0});if(!r[0].ok)throw Error(`Remote mkdir failed: ${r[0].error}`)}function fN(e){let t=e.lastIndexOf(`/`);return t<=0?`/`:e.slice(0,t)}async function pN(e,n,r){let i=[],{localPath:a,remotePath:o,runtimeId:s,verbose:c,dryRun:l}=r,u=rN(await cN(e,a),await lN(n,s,o),{delete:r.delete});if(c||l){for(let e of u.toAdd)i.push(`+ ${e}`);for(let e of u.toUpdate)i.push(`~ ${e}`);for(let e of u.toDelete)i.push(`- ${e}`);if(c)for(let e of u.toSkip)i.push(` ${e} (up to date)`)}let d=u.toAdd.length+u.toUpdate.length+u.toDelete.length;if(l)return i.push(`\n(dry run) ${d} file(s) would be transferred, ${u.toSkip.length} up to date`),{stdout:i.join(`
1916
1916
  `)+`
1917
- `,stderr:``,exitCode:0};for(let r of[...u.toAdd,...u.toUpdate]){let c=a+`/`+r,l=o+`/`+r;await lN(n,s,uN(l));let u=await e.readFile(c,{encoding:`binary`}),d=await n(s,{op:`writeFile`,path:l,content:t(u),encoding:`base64`});if(!d[0].ok)return{stdout:i.join(`
1917
+ `,stderr:``,exitCode:0};for(let r of[...u.toAdd,...u.toUpdate]){let c=a+`/`+r,l=o+`/`+r;await dN(n,s,fN(l));let u=await e.readFile(c,{encoding:`binary`}),d=await n(s,{op:`writeFile`,path:l,content:t(u),encoding:`base64`});if(!d[0].ok)return{stdout:i.join(`
1918
1918
  `)+`
1919
1919
  `,stderr:`Error writing ${l}: ${d[0].error}\n`,exitCode:1}}for(let e of u.toDelete){let t=o+`/`+e,r=await n(s,{op:`rm`,path:t});if(!r[0].ok)return{stdout:i.join(`
1920
1920
  `)+`
1921
1921
  `,stderr:`Error deleting ${t}: ${r[0].error}\n`,exitCode:1}}return i.push(`${d} file(s) transferred, ${u.toSkip.length} up to date`),{stdout:i.join(`
1922
1922
  `)+`
1923
- `,stderr:``,exitCode:0}}async function fN(e,t,r){let i=[],{localPath:a,remotePath:o,runtimeId:s,verbose:c,dryRun:l}=r,u=tN(await sN(t,s,o),await oN(e,a),{delete:r.delete});if(c||l){for(let e of u.toAdd)i.push(`+ ${e}`);for(let e of u.toUpdate)i.push(`~ ${e}`);for(let e of u.toDelete)i.push(`- ${e}`);if(c)for(let e of u.toSkip)i.push(` ${e} (up to date)`)}let d=u.toAdd.length+u.toUpdate.length+u.toDelete.length;if(l)return i.push(`\n(dry run) ${d} file(s) would be transferred, ${u.toSkip.length} up to date`),{stdout:i.join(`
1923
+ `,stderr:``,exitCode:0}}async function mN(e,t,r){let i=[],{localPath:a,remotePath:o,runtimeId:s,verbose:c,dryRun:l}=r,u=rN(await lN(t,s,o),await cN(e,a),{delete:r.delete});if(c||l){for(let e of u.toAdd)i.push(`+ ${e}`);for(let e of u.toUpdate)i.push(`~ ${e}`);for(let e of u.toDelete)i.push(`- ${e}`);if(c)for(let e of u.toSkip)i.push(` ${e} (up to date)`)}let d=u.toAdd.length+u.toUpdate.length+u.toDelete.length;if(l)return i.push(`\n(dry run) ${d} file(s) would be transferred, ${u.toSkip.length} up to date`),{stdout:i.join(`
1924
1924
  `)+`
1925
- `,stderr:``,exitCode:0};for(let r of[...u.toAdd,...u.toUpdate]){let i=o+`/`+r,c=a+`/`+r,l=uN(c);await e.exists(l)||await e.mkdir(l,{recursive:!0});let u=await cN(t,s,i),d=n(u);await e.writeFile(c,d)}for(let t of u.toDelete){let n=a+`/`+t;await e.rm(n)}return i.push(`${d} file(s) transferred, ${u.toSkip.length} up to date`),{stdout:i.join(`
1925
+ `,stderr:``,exitCode:0};for(let r of[...u.toAdd,...u.toUpdate]){let i=o+`/`+r,c=a+`/`+r,l=fN(c);await e.exists(l)||await e.mkdir(l,{recursive:!0});let u=await uN(t,s,i),d=n(u);await e.writeFile(c,d)}for(let t of u.toDelete){let n=a+`/`+t;await e.rm(n)}return i.push(`${d} file(s) transferred, ${u.toSkip.length} up to date`),{stdout:i.join(`
1926
1926
  `)+`
1927
- `,stderr:``,exitCode:0}}function pN(e={}){let t=e.fs,n=e.getSendFsRequest??nN;return S(`rsync`,async e=>{if(e.includes(`--help`)||e.includes(`-h`)||e.length===0)return aN();if(!t)return{stdout:``,stderr:`rsync: no filesystem available
1927
+ `,stderr:``,exitCode:0}}function hN(e={}){let t=e.fs,n=e.getSendFsRequest??iN;return S(`rsync`,async e=>{if(e.includes(`--help`)||e.includes(`-h`)||e.length===0)return sN();if(!t)return{stdout:``,stderr:`rsync: no filesystem available
1928
1928
  `,exitCode:1};let r=n();if(!r)return{stdout:``,stderr:`rsync: not connected to a tray — rsync requires a tray connection
1929
- `,exitCode:1};let i=rN(e);if(`error`in i)return i.error===`__help__`?aN():{stdout:``,stderr:`rsync: ${i.error}\n`,exitCode:1};try{return i.direction===`push`?await dN(t,r,i):await fN(t,r,i)}catch(e){return{stdout:``,stderr:`rsync: ${e instanceof Error?e.message:String(e)}\n`,exitCode:1}}})}function mN(){return{stdout:`usage: say [-v voice] [-r rate] [-l lang] [-o file] [--list] <text>
1929
+ `,exitCode:1};let i=aN(e);if(`error`in i)return i.error===`__help__`?sN():{stdout:``,stderr:`rsync: ${i.error}\n`,exitCode:1};try{return i.direction===`push`?await pN(t,r,i):await mN(t,r,i)}catch(e){return{stdout:``,stderr:`rsync: ${e instanceof Error?e.message:String(e)}\n`,exitCode:1}}})}function gN(){return{stdout:`usage: say [-v voice] [-r rate] [-l lang] [-o file] [--list] <text>
1930
1930
  say --status | --warmup
1931
1931
 
1932
1932
  Speaks the given text. Uses on-device Kokoro voices when the model
@@ -1945,14 +1945,14 @@ Examples:
1945
1945
  [web speech] otherwise); kokoro voices lead when ready
1946
1946
  --status Show the on-device voice state (downloading/ready + ETA)
1947
1947
  --warmup Stage + start the on-device voice download in the background
1948
- `,stderr:``,exitCode:0}}function hN(e){switch(e.state){case`ready`:return`voice engine: ready
1948
+ `,stderr:``,exitCode:0}}function _N(e){switch(e.state){case`ready`:return`voice engine: ready
1949
1949
  `;case`failed`:return`voice engine: failed (re-run say --warmup to retry)
1950
1950
  `;case`idle`:return`voice engine: not downloaded (run say --warmup)
1951
- `;case`loading`:{let t=e=>(e/1024/1024).toFixed(1);return`voice engine: downloading${e.loaded!=null&&e.total?` ${t(e.loaded)}/${t(e.total)} MB`:``}${e.etaSeconds!=null&&Number.isFinite(e.etaSeconds)?` · ready in ~${Math.max(1,Math.round(e.etaSeconds))}s`:``}\n`}}}function gN(e){return{stdout:``,stderr:`say: ${e}\n`,exitCode:1}}function _N(e){return e instanceof Error?e.message:String(e)}let vN=!1,yN=null;function bN(){return vN?Promise.resolve(speechSynthesis.getVoices()):(yN||=new Promise(e=>{let t=speechSynthesis.getVoices();if(t.length>0){vN=!0,e(t);return}let n=()=>{vN=!0,speechSynthesis.removeEventListener(`voiceschanged`,n),e(speechSynthesis.getVoices())};speechSynthesis.addEventListener(`voiceschanged`,n),setTimeout(()=>{speechSynthesis.removeEventListener(`voiceschanged`,n),vN=!0,e(speechSynthesis.getVoices())},1e3)}),yN)}const xN={"-v":`a voice name`,"-r":`a rate value`,"-l":`a language tag`,"-o":`an output file path`,"--out":`an output file path`};function SN(e){return e!=null&&(!e.startsWith(`-`)||e===`-`)}function CN(e,t,n){switch(t){case`-v`:return e.voiceName=n,null;case`-l`:return e.lang=n,null;case`-o`:case`--out`:return e.outFile=n,null;case`-r`:{let t=parseFloat(n);return Number.isNaN(t)||t<.1||t>10?`rate must be between 0.1 and 10`:(e.rate=t,null)}default:return`unknown option: ${t}`}}function wN(e){let t={voiceName:null,rate:1,lang:null,outFile:null,text:``},n=[];for(let r=0;r<e.length;r++){let i=e[r];if(i in xN){let n=SN(r+1<e.length?e[r+1]:void 0)?e[++r]:null;if(n==null)return gN(`${i} requires ${xN[i]}`);let a=CN(t,i,n);if(a)return gN(a)}else if(i.startsWith(`-`)&&i!==`--list`)return gN(`unknown option: ${i}`);else i.startsWith(`-`)||n.push(i)}return t.text=n.join(` `),t}function TN(e){let t=e.onDevice?`[kokoro]`:`[web speech]`;return`${e.name} (${e.lang}) ${t}${e.default?` [default]`:``}`}async function EN(e){if(e.local){let{kokoroVoicesIfReady:e}=await import(`./speech-page-realm-stub-C7EPKrHd.js`),t=e().map(e=>TN({name:e.id,lang:e.lang,onDevice:e.onDevice})),n=(await bN()).map(e=>TN({name:e.name,lang:e.lang,onDevice:!1,default:e.default}));return{stdout:[...t,...n].join(`
1951
+ `;case`loading`:{let t=e=>(e/1024/1024).toFixed(1);return`voice engine: downloading${e.loaded!=null&&e.total?` ${t(e.loaded)}/${t(e.total)} MB`:``}${e.etaSeconds!=null&&Number.isFinite(e.etaSeconds)?` · ready in ~${Math.max(1,Math.round(e.etaSeconds))}s`:``}\n`}}}function vN(e){return{stdout:``,stderr:`say: ${e}\n`,exitCode:1}}function yN(e){return e instanceof Error?e.message:String(e)}let bN=!1,xN=null;function SN(){return bN?Promise.resolve(speechSynthesis.getVoices()):(xN||=new Promise(e=>{let t=speechSynthesis.getVoices();if(t.length>0){bN=!0,e(t);return}let n=()=>{bN=!0,speechSynthesis.removeEventListener(`voiceschanged`,n),e(speechSynthesis.getVoices())};speechSynthesis.addEventListener(`voiceschanged`,n),setTimeout(()=>{speechSynthesis.removeEventListener(`voiceschanged`,n),bN=!0,e(speechSynthesis.getVoices())},1e3)}),xN)}const CN={"-v":`a voice name`,"-r":`a rate value`,"-l":`a language tag`,"-o":`an output file path`,"--out":`an output file path`};function wN(e){return e!=null&&(!e.startsWith(`-`)||e===`-`)}function TN(e,t,n){switch(t){case`-v`:return e.voiceName=n,null;case`-l`:return e.lang=n,null;case`-o`:case`--out`:return e.outFile=n,null;case`-r`:{let t=parseFloat(n);return Number.isNaN(t)||t<.1||t>10?`rate must be between 0.1 and 10`:(e.rate=t,null)}default:return`unknown option: ${t}`}}function EN(e){let t={voiceName:null,rate:1,lang:null,outFile:null,text:``},n=[];for(let r=0;r<e.length;r++){let i=e[r];if(i in CN){let n=wN(r+1<e.length?e[r+1]:void 0)?e[++r]:null;if(n==null)return vN(`${i} requires ${CN[i]}`);let a=TN(t,i,n);if(a)return vN(a)}else if(i.startsWith(`-`)&&i!==`--list`)return vN(`unknown option: ${i}`);else i.startsWith(`-`)||n.push(i)}return t.text=n.join(` `),t}function DN(e){let t=e.onDevice?`[kokoro]`:`[web speech]`;return`${e.name} (${e.lang}) ${t}${e.default?` [default]`:``}`}async function ON(e){if(e.local){let{kokoroVoicesIfReady:e}=await import(`./speech-page-realm-stub-C7EPKrHd.js`),t=e().map(e=>DN({name:e.id,lang:e.lang,onDevice:e.onDevice})),n=(await SN()).map(e=>DN({name:e.name,lang:e.lang,onDevice:!1,default:e.default}));return{stdout:[...t,...n].join(`
1952
1952
  `)+`
1953
- `,stderr:``,exitCode:0}}try{return{stdout:(await e.panelRpc.call(`list-voices`,void 0)).voices.map(e=>TN(e)).join(`
1953
+ `,stderr:``,exitCode:0}}try{return{stdout:(await e.panelRpc.call(`list-voices`,void 0)).voices.map(e=>DN(e)).join(`
1954
1954
  `)+`
1955
- `,stderr:``,exitCode:0}}catch(e){return gN(_N(e))}}async function DN(e){if(!e.local)return(await e.panelRpc.call(`list-voices`,void 0)).voices;let{kokoroVoicesIfReady:t}=await import(`./speech-page-realm-stub-C7EPKrHd.js`),n=t().map(e=>({name:e.id})),r=(await bN()).map(e=>({name:e.name}));return[...n,...r]}async function ON(e,t){let n=(await DN(e)).find(e=>e.name.toLowerCase().includes(t.toLowerCase()));return n?{resolved:n.name}:{error:gN(`voice "${t}" not found. Use --list to see available voices.`)}}async function kN(e,t){try{if(e.local){let{kokoroStatus:e,kokoroWarmup:n}=await import(`./speech-page-realm-stub-C7EPKrHd.js`);return{stdout:hN(t?n():e()),stderr:``,exitCode:0}}return{stdout:hN(t?await e.panelRpc.call(`speak-warmup`,void 0):await e.panelRpc.call(`speak-status`,void 0)),stderr:``,exitCode:0}}catch(e){return gN(_N(e))}}async function AN(e,t){return t.includes(`--list`)?EN(e):t.includes(`--status`)?kN(e,!1):t.includes(`--warmup`)?kN(e,!0):null}async function jN(e){try{let{speak:t}=await import(`./speech-page-realm-stub-C7EPKrHd.js`);return await t(e),{stdout:``,stderr:``,exitCode:0}}catch(e){return gN(`speech synthesis error: ${_N(e)}`)}}async function MN(e,t){try{return await e.panelRpc.call(`speak-text`,t,{timeoutMs:3e5}),{stdout:``,stderr:``,exitCode:0}}catch(e){return gN(_N(e))}}async function NN(e){let{synthesizeToWav:t}=await import(`./speech-page-realm-stub-C7EPKrHd.js`);try{return{bytes:await t(e)}}catch(e){return gN(_N(e))}}async function PN(e,t){try{let n=await e.panelRpc.call(`synthesize-to-wav`,{text:t.text,lang:t.lang,...t.voice?{voice:t.voice}:{},rate:t.rate},{timeoutMs:3e5});return{bytes:new Uint8Array(n.bytes)}}catch(e){return gN(_N(e))}}async function FN(e,t){return e.local?NN(t):PN(e,t)}async function IN(e,t){let n=await FN(e,t);return`exitCode`in n?n:{...ni(n.bytes),stderr:``,exitCode:0}}async function LN(e,t,n,r){let i=await FN(e,r);if(`exitCode`in i)return i;let a=t.fs.resolvePath(t.cwd,n);try{await t.fs.writeFile(a,i.bytes)}catch(e){return gN(`failed to write ${n}: ${_N(e)}`)}return{stdout:`wrote ${Math.max(1,Math.round(i.bytes.byteLength/1024))} KB to ${a}\n`,stderr:``,exitCode:0}}async function RN(e,t,n){let r;if(n.voiceName){let{resolved:t,error:i}=await ON(e,n.voiceName);if(i)return i;r=t}let i={text:n.text,lang:n.lang,voice:r,rate:n.rate};return n.outFile===`-`||!n.outFile&&!bS(t)?IN(e,i):n.outFile?LN(e,t,n.outFile,i):e.local?jN(i):MN(e,i)}function zN(){return S(`say`,async(e,t)=>{if(e.includes(`--help`)||e.includes(`-h`))return mN();let n={local:typeof window<`u`&&typeof speechSynthesis<`u`,panelRpc:y()};if(!n.local&&!n.panelRpc)return gN(`Web Speech API unavailable in this environment`);let r=await AN(n,e);if(r)return r;let i=wN(e);return`exitCode`in i?i:i.text?i.lang?RN(n,t,{...i,lang:i.lang}):gN(`-l language tag is required`):mN()})}function BN(){return S(`screencapture`,async(e,t)=>{let{runScreencapture:n}=await import(`./screencapture-run-Dt7lEfIp.js`);return n(e,t)})}function VN(e){return new Promise((t,n)=>{chrome.runtime.sendMessage(e,e=>{let r=chrome.runtime.lastError;if(r){n(Error(r.message??`chrome.runtime.lastError`));return}t(e)})})}const HN=1e4;async function UN(e,t,n){let r={method:e,headers:me({"Content-Type":`application/json`}),signal:AbortSignal.timeout(HN)};n&&(r.body=JSON.stringify(n));try{let e=await fetch(pe(`/api/secrets${t}`),r),n=await e.json().catch(()=>({}));return{ok:e.ok,status:e.status,data:n}}catch(e){return{ok:!1,status:0,data:{error:WN(e)}}}}function WN(e){let t=e instanceof Error?e.name:``;return t===`TimeoutError`||t===`AbortError`?`no response from the secret store within ${HN/1e3}s`:`secret store unreachable: ${e instanceof Error?e.message:String(e)}`}function GN(e,t){return`could not read ${e} secrets — ${t??`the bridge gave no reason`}`}function KN(e,t){let n=e.entries.find(e=>e.name===t)??null;if(n)return n;if(e.warnings.length>0)throw Error(e.warnings.join(`; `));return null}function qN(){return{async list(){let[e,t]=await Promise.all([UN(`GET`,``),UN(`GET`,`/session`)]),n=[],r=[];if(e.ok)for(let t of e.data)n.push({name:t.name,domains:t.domains,persisted:!0});else r.push(GN(`saved`,ZN(e.data)));if(t.ok)for(let e of t.data)n.push({name:e.name,domains:e.domains,persisted:!1});else r.push(GN(`session`,ZN(t.data)));return{entries:n,warnings:r}},async getInfo(e){return KN(await this.list(),e)},async getMasked(e){let{ok:t,data:n}=await UN(`GET`,`/masked`);return t?n.find(t=>t.name===e)??null:null},async peek(e){let{ok:t,data:n}=await UN(`GET`,`/peek?name=${encodeURIComponent(e)}`);return t?n:null},async setSession(e,t,n){let{ok:r,data:i}=await UN(`POST`,`/session`,{name:e,value:t,domains:n});if(!r)throw Error(ZN(i)??`failed to set session secret`)},async setPersisted(e,t,n){let{ok:r,data:i}=await UN(`POST`,``,{name:e,value:t,domains:n});if(!r)throw Error(ZN(i)??`failed to persist secret`)},async setScope(e,t){let{ok:n,data:r}=await UN(`POST`,`/scope`,{name:e,domains:t});if(!n)throw Error(ZN(r)??`failed to update scope`)},async delete(e){let{ok:t,status:n,data:r}=await UN(`DELETE`,`/${encodeURIComponent(e)}`);if(n===404)return{removed:!1};if(!t)throw Error(ZN(r)??`failed to delete secret`);return{removed:!0,fromSession:r&&typeof r==`object`&&`fromSession`in r?!!r.fromSession:void 0}}}}function JN(e){let t=t=>e(t);return{async list(){let[e,n]=await Promise.all([t({type:`secrets.list`}),t({type:`secrets.session.list`})]),r=[],i=[];for(let t of e?.entries??[])r.push({name:t.name,domains:t.domains,persisted:!0});for(let e of n?.entries??[])r.push({name:e.name,domains:e.domains,persisted:!1});return e?.entries||i.push(GN(`saved`,e?.error)),n?.entries||i.push(GN(`session`,n?.error)),{entries:r,warnings:i}},async getInfo(e){return KN(await this.list(),e)},async getMasked(e){return((await t({type:`secrets.list-masked-entries`}))?.entries??[]).find(t=>t.name===e)??null},async peek(e){let n=await t({type:`secrets.peek`,name:e});if(n?.error)throw Error(n.error);return n?.record??null},async setSession(e,n,r){let i=await t({type:`secrets.session.set`,name:e,value:n,domains:r});if(!i?.ok)throw Error(i?.error??`secrets.session.set failed`)},async setPersisted(e,n,r){let i=await t({type:`secrets.set`,name:e,value:n,domains:r});if(!i?.ok)throw Error(i?.error??`secrets.set failed`)},async setScope(e,n){let r=await t({type:`secrets.set-domains`,name:e,domains:n});if(!r?.ok)throw Error(r?.error??`secrets.set-domains failed`)},async delete(e){let n=await t({type:`secrets.delete`,name:e});if(!n?.ok)throw Error(n?.error??`secrets.delete failed`);return{removed:n.removed??!0,fromSession:n.fromSession}}}}function YN(){return JN(e=>VN(e))}function XN(){return JN(e=>{let{type:t,...n}=e;return be(t,n)})}function ZN(e){if(e&&typeof e==`object`&&`error`in e){let t=e.error;if(typeof t==`string`)return t}}function QN(e){switch(e){case`extension-direct`:return YN();case`extension-delegate`:return XN();default:return qN()}}const $N=[`--domain`],eP=[`--persist`];function tP(){return`secret — manage secrets for the fetch proxy and mount backends
1955
+ `,stderr:``,exitCode:0}}catch(e){return vN(yN(e))}}async function kN(e){if(!e.local)return(await e.panelRpc.call(`list-voices`,void 0)).voices;let{kokoroVoicesIfReady:t}=await import(`./speech-page-realm-stub-C7EPKrHd.js`),n=t().map(e=>({name:e.id})),r=(await SN()).map(e=>({name:e.name}));return[...n,...r]}async function AN(e,t){let n=(await kN(e)).find(e=>e.name.toLowerCase().includes(t.toLowerCase()));return n?{resolved:n.name}:{error:vN(`voice "${t}" not found. Use --list to see available voices.`)}}async function jN(e,t){try{if(e.local){let{kokoroStatus:e,kokoroWarmup:n}=await import(`./speech-page-realm-stub-C7EPKrHd.js`);return{stdout:_N(t?n():e()),stderr:``,exitCode:0}}return{stdout:_N(t?await e.panelRpc.call(`speak-warmup`,void 0):await e.panelRpc.call(`speak-status`,void 0)),stderr:``,exitCode:0}}catch(e){return vN(yN(e))}}async function MN(e,t){return t.includes(`--list`)?ON(e):t.includes(`--status`)?jN(e,!1):t.includes(`--warmup`)?jN(e,!0):null}async function NN(e){try{let{speak:t}=await import(`./speech-page-realm-stub-C7EPKrHd.js`);return await t(e),{stdout:``,stderr:``,exitCode:0}}catch(e){return vN(`speech synthesis error: ${yN(e)}`)}}async function PN(e,t){try{return await e.panelRpc.call(`speak-text`,t,{timeoutMs:3e5}),{stdout:``,stderr:``,exitCode:0}}catch(e){return vN(yN(e))}}async function FN(e){let{synthesizeToWav:t}=await import(`./speech-page-realm-stub-C7EPKrHd.js`);try{return{bytes:await t(e)}}catch(e){return vN(yN(e))}}async function IN(e,t){try{let n=await e.panelRpc.call(`synthesize-to-wav`,{text:t.text,lang:t.lang,...t.voice?{voice:t.voice}:{},rate:t.rate},{timeoutMs:3e5});return{bytes:new Uint8Array(n.bytes)}}catch(e){return vN(yN(e))}}async function LN(e,t){return e.local?FN(t):IN(e,t)}async function RN(e,t){let n=await LN(e,t);return`exitCode`in n?n:{...ni(n.bytes),stderr:``,exitCode:0}}async function zN(e,t,n,r){let i=await LN(e,r);if(`exitCode`in i)return i;let a=t.fs.resolvePath(t.cwd,n);try{await t.fs.writeFile(a,i.bytes)}catch(e){return vN(`failed to write ${n}: ${yN(e)}`)}return{stdout:`wrote ${Math.max(1,Math.round(i.bytes.byteLength/1024))} KB to ${a}\n`,stderr:``,exitCode:0}}async function BN(e,t,n){let r;if(n.voiceName){let{resolved:t,error:i}=await AN(e,n.voiceName);if(i)return i;r=t}let i={text:n.text,lang:n.lang,voice:r,rate:n.rate};return n.outFile===`-`||!n.outFile&&!bS(t)?RN(e,i):n.outFile?zN(e,t,n.outFile,i):e.local?NN(i):PN(e,i)}function VN(){return S(`say`,async(e,t)=>{if(e.includes(`--help`)||e.includes(`-h`))return gN();let n={local:typeof window<`u`&&typeof speechSynthesis<`u`,panelRpc:y()};if(!n.local&&!n.panelRpc)return vN(`Web Speech API unavailable in this environment`);let r=await MN(n,e);if(r)return r;let i=EN(e);return`exitCode`in i?i:i.text?i.lang?BN(n,t,{...i,lang:i.lang}):vN(`-l language tag is required`):gN()})}function HN(){return S(`screencapture`,async(e,t)=>{let{runScreencapture:n}=await import(`./screencapture-run-Dt7lEfIp.js`);return n(e,t)})}function UN(e){return new Promise((t,n)=>{chrome.runtime.sendMessage(e,e=>{let r=chrome.runtime.lastError;if(r){n(Error(r.message??`chrome.runtime.lastError`));return}t(e)})})}const WN=1e4;async function GN(e,t,n){let r={method:e,headers:me({"Content-Type":`application/json`}),signal:AbortSignal.timeout(WN)};n&&(r.body=JSON.stringify(n));try{let e=await fetch(pe(`/api/secrets${t}`),r),n=await e.json().catch(()=>({}));return{ok:e.ok,status:e.status,data:n}}catch(e){return{ok:!1,status:0,data:{error:KN(e)}}}}function KN(e){let t=e instanceof Error?e.name:``;return t===`TimeoutError`||t===`AbortError`?`no response from the secret store within ${WN/1e3}s`:`secret store unreachable: ${e instanceof Error?e.message:String(e)}`}function qN(e,t){return`could not read ${e} secrets — ${t??`the bridge gave no reason`}`}function JN(e,t){let n=e.entries.find(e=>e.name===t)??null;if(n)return n;if(e.warnings.length>0)throw Error(e.warnings.join(`; `));return null}function YN(){return{async list(){let[e,t]=await Promise.all([GN(`GET`,``),GN(`GET`,`/session`)]),n=[],r=[];if(e.ok)for(let t of e.data)n.push({name:t.name,domains:t.domains,persisted:!0});else r.push(qN(`saved`,$N(e.data)));if(t.ok)for(let e of t.data)n.push({name:e.name,domains:e.domains,persisted:!1});else r.push(qN(`session`,$N(t.data)));return{entries:n,warnings:r}},async getInfo(e){return JN(await this.list(),e)},async getMasked(e){let{ok:t,data:n}=await GN(`GET`,`/masked`);return t?n.find(t=>t.name===e)??null:null},async peek(e){let{ok:t,data:n}=await GN(`GET`,`/peek?name=${encodeURIComponent(e)}`);return t?n:null},async setSession(e,t,n){let{ok:r,data:i}=await GN(`POST`,`/session`,{name:e,value:t,domains:n});if(!r)throw Error($N(i)??`failed to set session secret`)},async setPersisted(e,t,n){let{ok:r,data:i}=await GN(`POST`,``,{name:e,value:t,domains:n});if(!r)throw Error($N(i)??`failed to persist secret`)},async setScope(e,t){let{ok:n,data:r}=await GN(`POST`,`/scope`,{name:e,domains:t});if(!n)throw Error($N(r)??`failed to update scope`)},async delete(e){let{ok:t,status:n,data:r}=await GN(`DELETE`,`/${encodeURIComponent(e)}`);if(n===404)return{removed:!1};if(!t)throw Error($N(r)??`failed to delete secret`);return{removed:!0,fromSession:r&&typeof r==`object`&&`fromSession`in r?!!r.fromSession:void 0}}}}function XN(e){let t=t=>e(t);return{async list(){let[e,n]=await Promise.all([t({type:`secrets.list`}),t({type:`secrets.session.list`})]),r=[],i=[];for(let t of e?.entries??[])r.push({name:t.name,domains:t.domains,persisted:!0});for(let e of n?.entries??[])r.push({name:e.name,domains:e.domains,persisted:!1});return e?.entries||i.push(qN(`saved`,e?.error)),n?.entries||i.push(qN(`session`,n?.error)),{entries:r,warnings:i}},async getInfo(e){return JN(await this.list(),e)},async getMasked(e){return((await t({type:`secrets.list-masked-entries`}))?.entries??[]).find(t=>t.name===e)??null},async peek(e){let n=await t({type:`secrets.peek`,name:e});if(n?.error)throw Error(n.error);return n?.record??null},async setSession(e,n,r){let i=await t({type:`secrets.session.set`,name:e,value:n,domains:r});if(!i?.ok)throw Error(i?.error??`secrets.session.set failed`)},async setPersisted(e,n,r){let i=await t({type:`secrets.set`,name:e,value:n,domains:r});if(!i?.ok)throw Error(i?.error??`secrets.set failed`)},async setScope(e,n){let r=await t({type:`secrets.set-domains`,name:e,domains:n});if(!r?.ok)throw Error(r?.error??`secrets.set-domains failed`)},async delete(e){let n=await t({type:`secrets.delete`,name:e});if(!n?.ok)throw Error(n?.error??`secrets.delete failed`);return{removed:n.removed??!0,fromSession:n.fromSession}}}}function ZN(){return XN(e=>UN(e))}function QN(){return XN(e=>{let{type:t,...n}=e;return be(t,n)})}function $N(e){if(e&&typeof e==`object`&&`error`in e){let t=e.error;if(typeof t==`string`)return t}}function eP(e){switch(e){case`extension-direct`:return ZN();case`extension-delegate`:return QN();default:return YN()}}const tP=[`--domain`],nP=[`--persist`];function rP(){return`secret — manage secrets for the fetch proxy and mount backends
1956
1956
 
1957
1957
  No approval (session-only, in-memory, never persisted):
1958
1958
  secret set <name> <value> --domain <pat> Set a session secret. Free for a
@@ -1989,23 +1989,23 @@ Examples:
1989
1989
  secret peek OPENAI_KEY
1990
1990
  secret set GITHUB_TOKEN ghp_… --domain "api.github.com" --persist # prompts
1991
1991
  secret scope GITHUB_TOKEN --domain "api.github.com,*.github.com" # prompts
1992
- `}function nP(e){if(e===void 0||e.startsWith(`-`))return null;let t=e.split(`,`).map(e=>e.trim()).filter(e=>e.length>0);return t.length===0?null:t}function rP(e){return{stdout:``,stderr:`secret: ${e}\n`,exitCode:1}}const iP={persist:`persist secret`,scope:`edit secret scope`,value:`change secret value`},aP=new Set;function oP(e,t){if(e===t)return!0;try{return at(e).test(t)}catch{return!1}}function sP(e,t){for(let n of e)if(oP(n,t))return!0;return!1}function cP(e){return{stdout:``,stderr:`${ct(`secret`,e)}\n`,exitCode:1}}function lP(e){let t=ge(),n=e.isExtension??(t===`extension-direct`||t===`extension-delegate`),r=e.backend??QN(t),i=e.grants??aP,a=e.broker,o=()=>(a??=is(null),a);return{backend:r,inExtension:n,gate:async(e,t)=>{let n=`secret:${e}:${t}`;if(sP(i,n))return`ok`;let r=await o().requestApproval({kind:`secret`,detail:`${iP[e]}: ${t}`,suggestedPattern:n});if(r.decision===`deny`)return r;if(r.decision===`always`){let e=r.pattern?.trim();i.add(e&&oP(e,n)?e:n)}return`ok`},injectMaskedEnv:async t=>{if(e.setEnv&&hs(t))try{let n=await r.getMasked(t);n&&e.setEnv(t,n.maskedValue)}catch{}},clearMaskedEnv:t=>{e.unsetEnv&&hs(t)&&e.unsetEnv(t)}}}function uP(e){let t=P(e);if(t.length!==0)return t.endsWith(`\r
1992
+ `}function iP(e){if(e===void 0||e.startsWith(`-`))return null;let t=e.split(`,`).map(e=>e.trim()).filter(e=>e.length>0);return t.length===0?null:t}function aP(e){return{stdout:``,stderr:`secret: ${e}\n`,exitCode:1}}const oP={persist:`persist secret`,scope:`edit secret scope`,value:`change secret value`},sP=new Set;function cP(e,t){if(e===t)return!0;try{return at(e).test(t)}catch{return!1}}function lP(e,t){for(let n of e)if(cP(n,t))return!0;return!1}function uP(e){return{stdout:``,stderr:`${ct(`secret`,e)}\n`,exitCode:1}}function dP(e){let t=ge(),n=e.isExtension??(t===`extension-direct`||t===`extension-delegate`),r=e.backend??eP(t),i=e.grants??sP,a=e.broker,o=()=>(a??=is(null),a);return{backend:r,inExtension:n,gate:async(e,t)=>{let n=`secret:${e}:${t}`;if(lP(i,n))return`ok`;let r=await o().requestApproval({kind:`secret`,detail:`${oP[e]}: ${t}`,suggestedPattern:n});if(r.decision===`deny`)return r;if(r.decision===`always`){let e=r.pattern?.trim();i.add(e&&cP(e,n)?e:n)}return`ok`},injectMaskedEnv:async t=>{if(e.setEnv&&hs(t))try{let n=await r.getMasked(t);n&&e.setEnv(t,n.maskedValue)}catch{}},clearMaskedEnv:t=>{e.unsetEnv&&hs(t)&&e.unsetEnv(t)}}}function fP(e){let t=P(e);if(t.length!==0)return t.endsWith(`\r
1993
1993
  `)?t.slice(0,-2):t.endsWith(`
1994
- `)?t.slice(0,-1):t}async function dP(e,t,n,r){let i=await r.gate(`persist`,e);return i===`ok`?(await r.backend.setPersisted(e,t,n),await r.injectMaskedEnv(e),{stdout:`Persisted "${e}" (domains: ${n.join(`, `)})\n`,stderr:``,exitCode:0}):cP(i)}async function fP(e,t,n,r){if(await r.backend.getInfo(e)){let t=await r.gate(`value`,e);if(t!==`ok`)return cP(t)}return await r.backend.setSession(e,t,n),await r.injectMaskedEnv(e),{stdout:`Set session secret "${e}" (domains: ${n.join(`, `)}) — in-memory only, not persisted.\n`,stderr:``,exitCode:0}}async function pP(e,t,n){let r=C(e.slice(1),{value:$N,bool:eP});if(`error`in r)return rP(r.error);let i=r.positionals[0];if(!i||i.startsWith(`-`))return{stdout:``,stderr:`secret: set requires a <name>
1995
- `,exitCode:1};let a=r.positionals[1],o=uP(t.stdin);if(a!==void 0&&o!==void 0)return{stdout:``,stderr:`secret: provide <value> as an argument OR via stdin, not both
1994
+ `)?t.slice(0,-1):t}async function pP(e,t,n,r){let i=await r.gate(`persist`,e);return i===`ok`?(await r.backend.setPersisted(e,t,n),await r.injectMaskedEnv(e),{stdout:`Persisted "${e}" (domains: ${n.join(`, `)})\n`,stderr:``,exitCode:0}):uP(i)}async function mP(e,t,n,r){if(await r.backend.getInfo(e)){let t=await r.gate(`value`,e);if(t!==`ok`)return uP(t)}return await r.backend.setSession(e,t,n),await r.injectMaskedEnv(e),{stdout:`Set session secret "${e}" (domains: ${n.join(`, `)}) — in-memory only, not persisted.\n`,stderr:``,exitCode:0}}async function hP(e,t,n){let r=C(e.slice(1),{value:tP,bool:nP});if(`error`in r)return aP(r.error);let i=r.positionals[0];if(!i||i.startsWith(`-`))return{stdout:``,stderr:`secret: set requires a <name>
1995
+ `,exitCode:1};let a=r.positionals[1],o=fP(t.stdin);if(a!==void 0&&o!==void 0)return{stdout:``,stderr:`secret: provide <value> as an argument OR via stdin, not both
1996
1996
  `,exitCode:1};let s=a??o;if(s===void 0)return{stdout:``,stderr:`secret: set requires a <value>: secret set <name> <value> --domain <patterns> [--persist]
1997
1997
  or pipe the value on stdin: echo "$TOKEN" | secret set <name> --domain <patterns>
1998
- `,exitCode:1};let c=nP(r.values.get(`--domain`));return c?r.bools.has(`--persist`)?dP(i,s,c,n):fP(i,s,c,n):{stdout:``,stderr:`secret: set requires --domain <patterns>
1999
- `,exitCode:1}}async function mP(e,t){let n=C(e.slice(1),{});if(`error`in n)return rP(n.error);let r=n.positionals[0];if(!r)return{stdout:``,stderr:`secret: get requires a <name>
2000
- `,exitCode:1};let i=await t.backend.getMasked(r);return i?{stdout:`${i.name}=${i.maskedValue}\n domains: ${i.domains.join(`, `)||`(none)`}\n`,stderr:``,exitCode:0}:{stdout:``,stderr:`secret: no secret named "${r}"\n`,exitCode:1}}async function hP(e,t){let n=C(e.slice(1),{});if(`error`in n)return rP(n.error);let r=n.positionals[0];if(!r)return{stdout:``,stderr:`secret: peek requires a <name>
2001
- `,exitCode:1};let i=await t.backend.peek(r);return i?{stdout:`${i.name}: ${i.preview}\n domains: ${i.domains.join(`, `)||`(none)`}\n`,stderr:``,exitCode:0}:{stdout:``,stderr:`secret: no secret named "${r}"\n`,exitCode:1}}async function gP(e,t){let n=C(e.slice(1),{value:$N});if(`error`in n)return rP(n.error);let r=n.positionals[0];if(!r||r.startsWith(`-`))return{stdout:``,stderr:`secret: scope requires a <name>
2002
- `,exitCode:1};let i=nP(n.values.get(`--domain`));if(!i)return{stdout:``,stderr:`secret: scope requires --domain <patterns>
2003
- `,exitCode:1};let a=await t.gate(`scope`,r);return a===`ok`?(await t.backend.setScope(r,i),{stdout:`Updated scope for "${r}" (domains: ${i.join(`, `)})\n`,stderr:``,exitCode:0}):cP(a)}async function _P(e,t){let n=C(e.slice(1),{});if(`error`in n)return rP(n.error);let{entries:r,warnings:i}=await t.backend.list(),a=i.map(e=>`secret: ${e}\n`).join(``),o=+(i.length>0);if(r.length===0)return{stdout:i.length>0?``:`No secrets stored
2004
- `,stderr:a,exitCode:o};let s=Math.max(4,...r.map(e=>e.name.length)),c=`${`NAME`.padEnd(s)} TYPE DOMAINS\n`;for(let e of r){let t=e.persisted?`SAVED`:`SESSION`;c+=`${e.name.padEnd(s)} ${t.padEnd(7)} ${e.domains.join(`, `)}\n`}return{stdout:c,stderr:a,exitCode:o}}async function vP(e,t,n){let r=C(e.slice(1),{});if(`error`in r)return rP(r.error);let i=r.positionals[0];if(!i)return{stdout:``,stderr:`secret: ${t} requires a <name>\n`,exitCode:1};let a=await n.backend.delete(i);return a.removed?(n.clearMaskedEnv(i),{stdout:`Removed ${a.fromSession===!0?`session`:`persisted`} secret "${i}"\n`,stderr:``,exitCode:0}):{stdout:``,stderr:`secret: no secret named "${i}"\n`,exitCode:1}}async function yP(e,t){let n=C(e.slice(1),{});if(`error`in n)return rP(n.error);let r=n.positionals[0],i=n.positionals[1];if(!r||!i)return{stdout:``,stderr:`secret: test requires <name> <url>
2005
- `,exitCode:1};let a;try{a=new URL(i).hostname}catch{return{stdout:``,stderr:`secret: invalid URL "${i}"\n`,exitCode:1}}let{entries:o,warnings:s}=await t.backend.list(),c=o.find(e=>e.name===r);return c?_a(c.domains,a)?{stdout:`✓ ${r} is allowed for ${a}\n`,stderr:``,exitCode:0}:{stdout:`✗ ${r} is NOT allowed for ${a}\n Allowed domains: ${c.domains.join(`, `)}\n`,stderr:``,exitCode:1}:{stdout:``,stderr:s.length>0?s.map(e=>`secret: ${e}\n`).join(``):`secret: no secret named "${r}"\n`,exitCode:1}}async function bP(e,t){let n=C(e.slice(1),{});if(`error`in n)return rP(n.error);if(!t.inExtension)return{stdout:`secret: in CLI mode, edit ~/.slicc/secrets.env directly with your text editor.
1998
+ `,exitCode:1};let c=iP(r.values.get(`--domain`));return c?r.bools.has(`--persist`)?pP(i,s,c,n):mP(i,s,c,n):{stdout:``,stderr:`secret: set requires --domain <patterns>
1999
+ `,exitCode:1}}async function gP(e,t){let n=C(e.slice(1),{});if(`error`in n)return aP(n.error);let r=n.positionals[0];if(!r)return{stdout:``,stderr:`secret: get requires a <name>
2000
+ `,exitCode:1};let i=await t.backend.getMasked(r);return i?{stdout:`${i.name}=${i.maskedValue}\n domains: ${i.domains.join(`, `)||`(none)`}\n`,stderr:``,exitCode:0}:{stdout:``,stderr:`secret: no secret named "${r}"\n`,exitCode:1}}async function _P(e,t){let n=C(e.slice(1),{});if(`error`in n)return aP(n.error);let r=n.positionals[0];if(!r)return{stdout:``,stderr:`secret: peek requires a <name>
2001
+ `,exitCode:1};let i=await t.backend.peek(r);return i?{stdout:`${i.name}: ${i.preview}\n domains: ${i.domains.join(`, `)||`(none)`}\n`,stderr:``,exitCode:0}:{stdout:``,stderr:`secret: no secret named "${r}"\n`,exitCode:1}}async function vP(e,t){let n=C(e.slice(1),{value:tP});if(`error`in n)return aP(n.error);let r=n.positionals[0];if(!r||r.startsWith(`-`))return{stdout:``,stderr:`secret: scope requires a <name>
2002
+ `,exitCode:1};let i=iP(n.values.get(`--domain`));if(!i)return{stdout:``,stderr:`secret: scope requires --domain <patterns>
2003
+ `,exitCode:1};let a=await t.gate(`scope`,r);return a===`ok`?(await t.backend.setScope(r,i),{stdout:`Updated scope for "${r}" (domains: ${i.join(`, `)})\n`,stderr:``,exitCode:0}):uP(a)}async function yP(e,t){let n=C(e.slice(1),{});if(`error`in n)return aP(n.error);let{entries:r,warnings:i}=await t.backend.list(),a=i.map(e=>`secret: ${e}\n`).join(``),o=+(i.length>0);if(r.length===0)return{stdout:i.length>0?``:`No secrets stored
2004
+ `,stderr:a,exitCode:o};let s=Math.max(4,...r.map(e=>e.name.length)),c=`${`NAME`.padEnd(s)} TYPE DOMAINS\n`;for(let e of r){let t=e.persisted?`SAVED`:`SESSION`;c+=`${e.name.padEnd(s)} ${t.padEnd(7)} ${e.domains.join(`, `)}\n`}return{stdout:c,stderr:a,exitCode:o}}async function bP(e,t,n){let r=C(e.slice(1),{});if(`error`in r)return aP(r.error);let i=r.positionals[0];if(!i)return{stdout:``,stderr:`secret: ${t} requires a <name>\n`,exitCode:1};let a=await n.backend.delete(i);return a.removed?(n.clearMaskedEnv(i),{stdout:`Removed ${a.fromSession===!0?`session`:`persisted`} secret "${i}"\n`,stderr:``,exitCode:0}):{stdout:``,stderr:`secret: no secret named "${i}"\n`,exitCode:1}}async function xP(e,t){let n=C(e.slice(1),{});if(`error`in n)return aP(n.error);let r=n.positionals[0],i=n.positionals[1];if(!r||!i)return{stdout:``,stderr:`secret: test requires <name> <url>
2005
+ `,exitCode:1};let a;try{a=new URL(i).hostname}catch{return{stdout:``,stderr:`secret: invalid URL "${i}"\n`,exitCode:1}}let{entries:o,warnings:s}=await t.backend.list(),c=o.find(e=>e.name===r);return c?_a(c.domains,a)?{stdout:`✓ ${r} is allowed for ${a}\n`,stderr:``,exitCode:0}:{stdout:`✗ ${r} is NOT allowed for ${a}\n Allowed domains: ${c.domains.join(`, `)}\n`,stderr:``,exitCode:1}:{stdout:``,stderr:s.length>0?s.map(e=>`secret: ${e}\n`).join(``):`secret: no secret named "${r}"\n`,exitCode:1}}async function SP(e,t){let n=C(e.slice(1),{});if(`error`in n)return aP(n.error);if(!t.inExtension)return{stdout:`secret: in CLI mode, edit ~/.slicc/secrets.env directly with your text editor.
2006
2006
  (changes are picked up on the next request — no restart needed)
2007
2007
  `,stderr:``,exitCode:0};try{return await chrome.runtime.openOptionsPage(),{stdout:`Opened Mount Secrets options page in a new tab.
2008
- `,stderr:``,exitCode:0}}catch{let e=chrome.runtime.getURL(`secrets.html`);return window.open(e,`_blank`),{stdout:`Opened ${e}\n`,stderr:``,exitCode:0}}}async function xP(e,t,n){let r=e[0];switch(r){case`set`:return pP(e,t,n);case`get`:case`read`:return mP(e,n);case`peek`:return hP(e,n);case`scope`:return gP(e,n);case`list`:return _P(e,n);case`delete`:case`rm`:return vP(e,r,n);case`test`:return yP(e,n);case`edit`:return bP(e,n);default:return{stdout:``,stderr:`secret: unknown command "${r}"\n`,exitCode:1}}}function SP(e={}){let t=lP(e);return S(`secret`,async(e,n)=>{if(e.length===0||w(e,{valueFlags:$N}))return{stdout:tP(),stderr:``,exitCode:0};try{return await xP(e,n,t)}catch(e){return{stdout:``,stderr:`secret: ${e instanceof Error?e.message:String(e)}\n`,exitCode:1}}})}function CP(){return null}function wP(){return null}function TP(){return{stdout:`usage: serve [--entry <relative-path>] [--ttl <duration>] [--bridge | --no-bridge] [--max-tabs <n>] [--quiet] [--stop <token>] [--list] <directory>
2008
+ `,stderr:``,exitCode:0}}catch{let e=chrome.runtime.getURL(`secrets.html`);return window.open(e,`_blank`),{stdout:`Opened ${e}\n`,stderr:``,exitCode:0}}}async function CP(e,t,n){let r=e[0];switch(r){case`set`:return hP(e,t,n);case`get`:case`read`:return gP(e,n);case`peek`:return _P(e,n);case`scope`:return vP(e,n);case`list`:return yP(e,n);case`delete`:case`rm`:return bP(e,r,n);case`test`:return xP(e,n);case`edit`:return SP(e,n);default:return{stdout:``,stderr:`secret: unknown command "${r}"\n`,exitCode:1}}}function wP(e={}){let t=dP(e);return S(`secret`,async(e,n)=>{if(e.length===0||w(e,{valueFlags:tP}))return{stdout:rP(),stderr:``,exitCode:0};try{return await CP(e,n,t)}catch(e){return{stdout:``,stderr:`secret: ${e instanceof Error?e.message:String(e)}\n`,exitCode:1}}})}function TP(){return null}function EP(){return null}function DP(){return{stdout:`usage: serve [--entry <relative-path>] [--ttl <duration>] [--bridge | --no-bridge] [--max-tabs <n>] [--quiet] [--stop <token>] [--list] <directory>
2009
2009
  serve --logs [<token>] [--lines <n>]
2010
2010
  serve --truncate [<token>]
2011
2011
 
@@ -2041,28 +2041,28 @@ Limits and lifetime:
2041
2041
  its TTL. Either can be removed sooner with \`serve --stop\`.
2042
2042
  - <token> is the "Preview token" printed at mint time or the TOKEN column
2043
2043
  of \`serve --list\`; \`--stop\` also accepts the preview URL.
2044
- `,stderr:``,exitCode:0}}function EP(e){return`error`in e}function DP(e,t,n){if(e===`--list`)return n.list=!0,{skip:0};if(e===`--logs`||e===`--truncate`){let r=e===`--logs`?`logs`:`truncate`;return t&&!t.startsWith(`-`)?(n[r]=t,{skip:1}):(n[r]=!0,{skip:0})}if(e.startsWith(`--logs=`)||e.startsWith(`--truncate=`)){let t=e.startsWith(`--logs=`)?`logs`:`truncate`,r=e.slice(e.indexOf(`=`)+1);return r?(n[t]=r,{skip:0}):{error:`serve: missing value for --${t}\n`}}if(e===`--lines`||e.startsWith(`--lines=`)){let r=e===`--lines`?t:e.slice(8),i=r===void 0?NaN:Number(r);return!Number.isSafeInteger(i)||i<=0?{error:`serve: --lines must be a positive integer
2045
- `}:(n.lines=i,{skip:+(e===`--lines`)})}}function OP(e,t,n){if(e!==`--ttl`&&!e.startsWith(`--ttl=`))return;let r=e===`--ttl`?t:e.slice(6);if(!r)return{error:`serve: missing value for --ttl
2044
+ `,stderr:``,exitCode:0}}function OP(e){return`error`in e}function kP(e,t,n){if(e===`--list`)return n.list=!0,{skip:0};if(e===`--logs`||e===`--truncate`){let r=e===`--logs`?`logs`:`truncate`;return t&&!t.startsWith(`-`)?(n[r]=t,{skip:1}):(n[r]=!0,{skip:0})}if(e.startsWith(`--logs=`)||e.startsWith(`--truncate=`)){let t=e.startsWith(`--logs=`)?`logs`:`truncate`,r=e.slice(e.indexOf(`=`)+1);return r?(n[t]=r,{skip:0}):{error:`serve: missing value for --${t}\n`}}if(e===`--lines`||e.startsWith(`--lines=`)){let r=e===`--lines`?t:e.slice(8),i=r===void 0?NaN:Number(r);return!Number.isSafeInteger(i)||i<=0?{error:`serve: --lines must be a positive integer
2045
+ `}:(n.lines=i,{skip:+(e===`--lines`)})}}function AP(e,t,n){if(e!==`--ttl`&&!e.startsWith(`--ttl=`))return;let r=e===`--ttl`?t:e.slice(6);if(!r)return{error:`serve: missing value for --ttl
2046
2046
  `};let i=/^([1-9][0-9]*)([mhdw])$/.exec(r);if(!i)return{error:`serve: --ttl must be a positive whole duration (m, h, d, or w)
2047
2047
  `};let a=Number(i[1])*{m:6e4,h:36e5,d:864e5,w:6048e5}[i[2]];return Number.isSafeInteger(a)?a>2592e6?{error:`serve: --ttl cannot exceed 30d; longer retention requires a Sliccy Deluxe De-Enshittification plan.
2048
2048
  `}:(n.ttlMs=a,{skip:+(e===`--ttl`)}):{error:`serve: --ttl must be a positive whole duration (m, h, d, or w)
2049
- `}}function kP(e,t){let n={"--bridge":`bridge`,"--no-bridge":`noBridge`,"--project":`project`,"--quiet":`quiet`}[e];if(n)return t[n]=!0,{skip:0}}function AP(e,t,n){let r=OP(e,t,n);if(r)return r;let i=kP(e,n);if(i)return i;if(e===`--entry`)return t?(n.entry=t,{skip:1}):{error:`serve: missing value for --entry
2049
+ `}}function jP(e,t){let n={"--bridge":`bridge`,"--no-bridge":`noBridge`,"--project":`project`,"--quiet":`quiet`}[e];if(n)return t[n]=!0,{skip:0}}function MP(e,t,n){let r=AP(e,t,n);if(r)return r;let i=jP(e,n);if(i)return i;if(e===`--entry`)return t?(n.entry=t,{skip:1}):{error:`serve: missing value for --entry
2050
2050
  `};if(e.startsWith(`--entry=`))return n.entry=e.slice(8),{skip:0};if(e===`--stop`)return t?(n.stop=t,{skip:1}):{error:`serve: missing value for --stop
2051
- `};if(e.startsWith(`--stop=`))return n.stop=e.slice(7),{skip:0};let a=DP(e,t,n);if(a)return a;if(e===`--max-tabs`){if(!t)return{error:`serve: missing value for --max-tabs
2051
+ `};if(e.startsWith(`--stop=`))return n.stop=e.slice(7),{skip:0};let a=kP(e,t,n);if(a)return a;if(e===`--max-tabs`){if(!t)return{error:`serve: missing value for --max-tabs
2052
2052
  `};let e=Number.parseInt(t,10);return!Number.isFinite(e)||e<=0?{error:`serve: --max-tabs must be a positive integer
2053
2053
  `}:(n.maxTabs=e,{skip:1})}if(e.startsWith(`--max-tabs=`)){let t=Number.parseInt(e.slice(11),10);return!Number.isFinite(t)||t<=0?{error:`serve: --max-tabs must be a positive integer
2054
2054
  `}:(n.maxTabs=t,{skip:0})}return e.startsWith(`-`)?{error:`serve: unknown option: ${e}\n`}:n.directory?{error:`serve: expected a single directory argument
2055
- `}:(n.directory=e,{skip:0})}function jP(e){let t={entry:`index.html`,bridge:!1,noBridge:!1,project:!1,list:!1,quiet:!1};for(let n=0;n<e.length;n+=1){let r=AP(e[n],e[n+1],t);if(EP(r))return{...t,error:r.error};n+=r.skip}return t}async function MP(e,t,n,r){if(!rr(t))return{stdout:``,stderr:`serve: invalid entry file: ${t}\n`,exitCode:1};let i=n.resolvePath(r,e),a;try{a=await n.stat(i)}catch{return{stdout:``,stderr:`serve: no such directory: ${e}\n`,exitCode:1}}if(!a.isDirectory)return{stdout:``,stderr:`serve: not a directory: ${e}\n`,exitCode:1};let o=ur(i,t),s;try{s=await n.stat(o)}catch{return{stdout:``,stderr:`serve: entry file not found: ${o}\n`,exitCode:1}}return s.isFile?{fullDirectory:i,entryPath:o}:{stdout:``,stderr:`serve: entry is not a file: ${o}\n`,exitCode:1}}function NP(e){return`exitCode`in e}async function PP(e){let t=ha(e)??e,n,r=wP();if(r)n=await r({type:`stop`,previewToken:t});else{let e=y();if(!e)return{stdout:``,stderr:"serve: no leader tray available. Enable multi-browser sync via `host enable` or the avatar popover.\n",exitCode:1};n=await e.call(`tray-revoke-preview`,{previewToken:t})}if(!n.revoked)return{stdout:``,stderr:`serve: preview token not found or already revoked
2056
- `,exitCode:1};if(n.webhookId){let e=await ey();if(!e)return{stdout:`Preview revoked: ${t}\n`,stderr:`serve: preview revoked, but the preview-bridge webhook could not be cleaned up (lick manager unavailable). It is a live endpoint — delete it with \`webhook delete ${n.webhookId}\`.\n`,exitCode:0};try{await e.deleteWebhook(n.webhookId)}catch(e){return{stdout:`Preview revoked: ${t}\n`,stderr:`serve: preview revoked, but webhook cleanup failed: ${e instanceof Error?e.message:String(e)}. Delete it with \`webhook delete ${n.webhookId}\`.\n`,exitCode:0}}}return{stdout:`Preview revoked: ${t}\n`,stderr:``,exitCode:0}}async function FP(){let e=wP();if(e){let t=(await e({type:`list`})).previews??[];return t.length===0?{stdout:`No active previews
2057
- `,stderr:``,exitCode:0}:{stdout:LP(t),stderr:``,exitCode:0}}let t=y();if(!t)return{stdout:``,stderr:"serve: no leader tray available. Enable multi-browser sync via `host enable` or the avatar popover.\n",exitCode:1};let n=(await t.call(`tray-list-previews`,void 0)).previews??[];return n.length===0?{stdout:`No active previews
2058
- `,stderr:``,exitCode:0}:{stdout:LP(n),stderr:``,exitCode:0}}function IP(e){return e.mode===`persistent`?e.state===`pending`?`uploading`:`persistent`:`live`}function LP(e){return`Active previews:\n TOKEN MODE EXPIRES URL ROOT CREATED\n${e.map(e=>` ${e.previewToken} ${IP(e)} ${e.expiresAt??`-`} ${e.url} ${e.servedRoot} ${e.createdAt}\n`).join(``)}`}function RP(e){let t=e.announced?`announced`:`suppressed`,n=e.previewToken??`-`,r=e.lifecycle===`connected`?`origin=${e.origin??`-`} userAgent=${e.userAgent??`-`}`:`reason=${e.reason??`-`}`;return`${e.timestamp} ${e.lifecycle.padEnd(12)} ${t.padEnd(10)} preview=${n} conn=${e.connId} ${r}\n`}async function zP(e){let t,n=wP();if(n)t=(await n({type:`logs`,previewToken:e.previewToken})).lifecycleRecords??[];else{let n=y();if(!n)return{stdout:``,stderr:"serve --logs: no leader tray available. Enable multi-browser sync via `host enable` or the avatar popover.\n",exitCode:1};t=(await n.call(`tray-preview-logs`,{previewToken:e.previewToken})).lifecycleRecords}return e.lines!==void 0&&(t=t.slice(-e.lines)),t.length===0?{stdout:`No preview lifecycle records. The recorder is leader-memory-only and resets on leader restart.
2059
- `,stderr:``,exitCode:0}:{stdout:`Preview lifecycle records (oldest to newest):\n${t.map(RP).join(``)}`,stderr:``,exitCode:0}}async function BP(e){let t,n,r=wP();if(r){let i=await r({type:`truncate`,previewToken:e});t=i.cleared??0,n=i.rearmed??0}else{let r=y();if(!r)return{stdout:``,stderr:"serve --truncate: no leader tray available. Enable multi-browser sync via `host enable` or the avatar popover.\n",exitCode:1};let i=await r.call(`tray-preview-truncate`,{previewToken:e});t=i.cleared,n=i.rearmed}return{stdout:`Cleared ${t} preview lifecycle record${t===1?``:`s`}; re-armed ${n} preview announcement${n===1?``:`s`}.\n`,stderr:``,exitCode:0}}async function VP(e,t){let n=[],r=0;for await(let i of e.walk(t)){if(n.length>=1e3)throw Error(`persistent preview exceeds 1000 file limit`);let a=await e.readFile(i,{encoding:`binary`}),o=typeof a==`string`?new TextEncoder().encode(a):a,s=i.slice(t===`/`?1:t.length+1);if(o.byteLength>26214400)throw Error(`preview file exceeds 25 MiB limit: ${s}`);if(r+=o.byteLength,r>52428800)throw Error(`persistent preview exceeds 50 MiB total limit`);n.push({path:s,content:o,mime:Jn(s)})}return n}function HP(e){return e().catch(e=>({stdout:``,stderr:`serve: ${e instanceof Error?e.message:String(e)}\n`,exitCode:1}))}async function UP(e){let t=CP();if(t)return t(e);let n=y();if(!n)throw Error("no leader tray available. Enable multi-browser sync via `host enable` or the avatar popover.");return e.ttlMs===void 0?n.call(`tray-open-preview`,e):n.call(`tray-open-preview`,e,{timeoutMs:6e5})}async function WP(e,t){if(t)return t.createPage(e);typeof window<`u`&&typeof window.open==`function`&&window.open(e,`_blank`,`noopener,noreferrer`)}async function GP(e,t){if(!e)return{ok:!0};let n=await ey();if(!n)return{ok:!1,result:{stdout:``,stderr:`${t}serve: --bridge requires an active lick manager\n`,exitCode:1}};try{return{ok:!0,webhookId:(await n.createWebhook(`preview-bridge`)).id}}catch(e){return{ok:!1,result:{stdout:``,stderr:`${t}serve: webhook creation failed: ${e instanceof Error?e.message:String(e)}\n`,exitCode:1}}}}async function KP(e,t,n,r,i,a,o){let s;try{s=await UP({entryPath:n,servedRoot:t,bridge:e.bridge,noBridge:e.ttlMs!==void 0||e.noBridge,maxTabs:e.maxTabs,quiet:e.quiet,webhookId:r,ttlMs:e.ttlMs,snapshotFiles:a})}catch(e){if(r){let e=await ey();e&&await e.deleteWebhook(r).catch(()=>{})}return{stdout:``,stderr:`${i}serve: ${e instanceof Error?e.message:String(e)}\n`,exitCode:1}}let c=await WP(s.url,o),l=`${s.pushed} follower${s.pushed===1?``:`s`}`,u=c?` (targetId: ${c})`:``,d=e.ttlMs===void 0?`expires 5 min after the leader disconnects`:`kept until its --ttl expires; counts toward the 10-snapshot tray quota`,f=s.previewToken?`Preview token: ${s.previewToken} (${d}; revoke sooner with serve --stop)\n`:``;return{stdout:`Preview URL: ${s.url}${u}\n${f}Pushed to ${l}\n`,stderr:i,exitCode:0}}async function qP(e){if(e.stop){let t=e.stop;return HP(()=>PP(t))}if(e.list)return HP(()=>FP());if(e.logs&&e.truncate)return{stdout:``,stderr:`serve: --logs and --truncate are mutually exclusive
2055
+ `}:(n.directory=e,{skip:0})}function NP(e){let t={entry:`index.html`,bridge:!1,noBridge:!1,project:!1,list:!1,quiet:!1};for(let n=0;n<e.length;n+=1){let r=MP(e[n],e[n+1],t);if(OP(r))return{...t,error:r.error};n+=r.skip}return t}async function PP(e,t,n,r){if(!rr(t))return{stdout:``,stderr:`serve: invalid entry file: ${t}\n`,exitCode:1};let i=n.resolvePath(r,e),a;try{a=await n.stat(i)}catch{return{stdout:``,stderr:`serve: no such directory: ${e}\n`,exitCode:1}}if(!a.isDirectory)return{stdout:``,stderr:`serve: not a directory: ${e}\n`,exitCode:1};let o=ur(i,t),s;try{s=await n.stat(o)}catch{return{stdout:``,stderr:`serve: entry file not found: ${o}\n`,exitCode:1}}return s.isFile?{fullDirectory:i,entryPath:o}:{stdout:``,stderr:`serve: entry is not a file: ${o}\n`,exitCode:1}}function FP(e){return`exitCode`in e}async function IP(e){let t=ha(e)??e,n,r=EP();if(r)n=await r({type:`stop`,previewToken:t});else{let e=y();if(!e)return{stdout:``,stderr:"serve: no leader tray available. Enable multi-browser sync via `host enable` or the avatar popover.\n",exitCode:1};n=await e.call(`tray-revoke-preview`,{previewToken:t})}if(!n.revoked)return{stdout:``,stderr:`serve: preview token not found or already revoked
2056
+ `,exitCode:1};if(n.webhookId){let e=await ey();if(!e)return{stdout:`Preview revoked: ${t}\n`,stderr:`serve: preview revoked, but the preview-bridge webhook could not be cleaned up (lick manager unavailable). It is a live endpoint — delete it with \`webhook delete ${n.webhookId}\`.\n`,exitCode:0};try{await e.deleteWebhook(n.webhookId)}catch(e){return{stdout:`Preview revoked: ${t}\n`,stderr:`serve: preview revoked, but webhook cleanup failed: ${e instanceof Error?e.message:String(e)}. Delete it with \`webhook delete ${n.webhookId}\`.\n`,exitCode:0}}}return{stdout:`Preview revoked: ${t}\n`,stderr:``,exitCode:0}}async function LP(){let e=EP();if(e){let t=(await e({type:`list`})).previews??[];return t.length===0?{stdout:`No active previews
2057
+ `,stderr:``,exitCode:0}:{stdout:zP(t),stderr:``,exitCode:0}}let t=y();if(!t)return{stdout:``,stderr:"serve: no leader tray available. Enable multi-browser sync via `host enable` or the avatar popover.\n",exitCode:1};let n=(await t.call(`tray-list-previews`,void 0)).previews??[];return n.length===0?{stdout:`No active previews
2058
+ `,stderr:``,exitCode:0}:{stdout:zP(n),stderr:``,exitCode:0}}function RP(e){return e.mode===`persistent`?e.state===`pending`?`uploading`:`persistent`:`live`}function zP(e){return`Active previews:\n TOKEN MODE EXPIRES URL ROOT CREATED\n${e.map(e=>` ${e.previewToken} ${RP(e)} ${e.expiresAt??`-`} ${e.url} ${e.servedRoot} ${e.createdAt}\n`).join(``)}`}function BP(e){let t=e.announced?`announced`:`suppressed`,n=e.previewToken??`-`,r=e.lifecycle===`connected`?`origin=${e.origin??`-`} userAgent=${e.userAgent??`-`}`:`reason=${e.reason??`-`}`;return`${e.timestamp} ${e.lifecycle.padEnd(12)} ${t.padEnd(10)} preview=${n} conn=${e.connId} ${r}\n`}async function VP(e){let t,n=EP();if(n)t=(await n({type:`logs`,previewToken:e.previewToken})).lifecycleRecords??[];else{let n=y();if(!n)return{stdout:``,stderr:"serve --logs: no leader tray available. Enable multi-browser sync via `host enable` or the avatar popover.\n",exitCode:1};t=(await n.call(`tray-preview-logs`,{previewToken:e.previewToken})).lifecycleRecords}return e.lines!==void 0&&(t=t.slice(-e.lines)),t.length===0?{stdout:`No preview lifecycle records. The recorder is leader-memory-only and resets on leader restart.
2059
+ `,stderr:``,exitCode:0}:{stdout:`Preview lifecycle records (oldest to newest):\n${t.map(BP).join(``)}`,stderr:``,exitCode:0}}async function HP(e){let t,n,r=EP();if(r){let i=await r({type:`truncate`,previewToken:e});t=i.cleared??0,n=i.rearmed??0}else{let r=y();if(!r)return{stdout:``,stderr:"serve --truncate: no leader tray available. Enable multi-browser sync via `host enable` or the avatar popover.\n",exitCode:1};let i=await r.call(`tray-preview-truncate`,{previewToken:e});t=i.cleared,n=i.rearmed}return{stdout:`Cleared ${t} preview lifecycle record${t===1?``:`s`}; re-armed ${n} preview announcement${n===1?``:`s`}.\n`,stderr:``,exitCode:0}}async function UP(e,t){let n=[],r=0;for await(let i of e.walk(t)){if(n.length>=1e3)throw Error(`persistent preview exceeds 1000 file limit`);let a=await e.readFile(i,{encoding:`binary`}),o=typeof a==`string`?new TextEncoder().encode(a):a,s=i.slice(t===`/`?1:t.length+1);if(o.byteLength>26214400)throw Error(`preview file exceeds 25 MiB limit: ${s}`);if(r+=o.byteLength,r>52428800)throw Error(`persistent preview exceeds 50 MiB total limit`);n.push({path:s,content:o,mime:Jn(s)})}return n}function WP(e){return e().catch(e=>({stdout:``,stderr:`serve: ${e instanceof Error?e.message:String(e)}\n`,exitCode:1}))}async function GP(e){let t=TP();if(t)return t(e);let n=y();if(!n)throw Error("no leader tray available. Enable multi-browser sync via `host enable` or the avatar popover.");return e.ttlMs===void 0?n.call(`tray-open-preview`,e):n.call(`tray-open-preview`,e,{timeoutMs:6e5})}async function KP(e,t){if(t)return t.createPage(e);typeof window<`u`&&typeof window.open==`function`&&window.open(e,`_blank`,`noopener,noreferrer`)}async function qP(e,t){if(!e)return{ok:!0};let n=await ey();if(!n)return{ok:!1,result:{stdout:``,stderr:`${t}serve: --bridge requires an active lick manager\n`,exitCode:1}};try{return{ok:!0,webhookId:(await n.createWebhook(`preview-bridge`)).id}}catch(e){return{ok:!1,result:{stdout:``,stderr:`${t}serve: webhook creation failed: ${e instanceof Error?e.message:String(e)}\n`,exitCode:1}}}}async function JP(e,t,n,r,i,a,o){let s;try{s=await GP({entryPath:n,servedRoot:t,bridge:e.bridge,noBridge:e.ttlMs!==void 0||e.noBridge,maxTabs:e.maxTabs,quiet:e.quiet,webhookId:r,ttlMs:e.ttlMs,snapshotFiles:a})}catch(e){if(r){let e=await ey();e&&await e.deleteWebhook(r).catch(()=>{})}return{stdout:``,stderr:`${i}serve: ${e instanceof Error?e.message:String(e)}\n`,exitCode:1}}let c=await KP(s.url,o),l=`${s.pushed} follower${s.pushed===1?``:`s`}`,u=c?` (targetId: ${c})`:``,d=e.ttlMs===void 0?`expires 5 min after the leader disconnects`:`kept until its --ttl expires; counts toward the 10-snapshot tray quota`,f=s.previewToken?`Preview token: ${s.previewToken} (${d}; revoke sooner with serve --stop)\n`:``;return{stdout:`Preview URL: ${s.url}${u}\n${f}Pushed to ${l}\n`,stderr:i,exitCode:0}}async function YP(e){if(e.stop){let t=e.stop;return WP(()=>IP(t))}if(e.list)return WP(()=>LP());if(e.logs&&e.truncate)return{stdout:``,stderr:`serve: --logs and --truncate are mutually exclusive
2060
2060
  `,exitCode:1};if(e.lines!==void 0&&!e.logs)return{stdout:``,stderr:`serve: --lines requires --logs
2061
- `,exitCode:1};if(e.logs){let t=typeof e.logs==`string`?e.logs:void 0;return HP(()=>zP({previewToken:t,lines:e.lines}))}if(e.truncate){let t=typeof e.truncate==`string`?e.truncate:void 0;return HP(()=>BP(t))}}function JP(e){if(e.ttlMs!==void 0&&e.bridge)return{stdout:``,stderr:`serve: --ttl cannot be combined with --bridge
2061
+ `,exitCode:1};if(e.logs){let t=typeof e.logs==`string`?e.logs:void 0;return WP(()=>VP({previewToken:t,lines:e.lines}))}if(e.truncate){let t=typeof e.truncate==`string`?e.truncate:void 0;return WP(()=>HP(t))}}function XP(e){if(e.ttlMs!==void 0&&e.bridge)return{stdout:``,stderr:`serve: --ttl cannot be combined with --bridge
2062
2062
  `,exitCode:1};if(e.ttlMs!==void 0&&e.maxTabs!==void 0)return{stdout:``,stderr:`serve: --ttl cannot be combined with --max-tabs
2063
- `,exitCode:1}}async function YP(e,t,n){if(e.ttlMs!==void 0){if(!t)throw Error(`persistent snapshot filesystem unavailable`);return VP(t,n)}}async function XP(e,t,n,r){if(e.length===0||e.includes(`--help`)||e.includes(`-h`))return TP();let i=jP(e);if(i.error)return{stdout:``,stderr:i.error,exitCode:1};let a=await qP(i);if(a)return a;if(!i.directory)return TP();let o=JP(i);if(o)return o;let s=await MP(i.directory,i.entry,t.fs,t.cwd);if(NP(s))return s;let{fullDirectory:c,entryPath:l}=s,u;try{u=await YP(i,r,c)}catch(e){return{stdout:``,stderr:`serve: ${e instanceof Error?e.message:String(e)}\n`,exitCode:1}}let d=i.project?`serve: --project is obsolete; ignored (root-absolute paths work natively under unified preview)
2064
- `:``,f=await GP(!i.noBridge&&i.bridge,d);return f.ok?KP(i,c,l,f.webhookId,d,u,n):f.result}function ZP(e,t){return S(`serve`,(n,r)=>XP(n,r,e,t))}const QP=`usage: session export [--id <id>] [--output <path>]
2065
- `;function $P(e){if(e.includes(`\0`))return{ok:!1,reason:`path must not contain NUL bytes`};if(e.includes(`\\`))return{ok:!1,reason:`path must not contain backslashes`};let t=e.split(`/`);for(let e of t)if(e===`..`)return{ok:!1,reason:`path must not contain ".."/traversal segments`};return{ok:!0}}function eF(e){let t=null,n=null,r=e.slice(1);for(let e=0;e<r.length;e++){let i=r[e];if(i===`--id`){if(t!==null)return{ok:!1,stderr:`session export: duplicate flag --id\n${QP}`};let n=r[e+1];if(!n||n.startsWith(`-`))return{ok:!1,stderr:`session export: --id requires a value\n${QP}`};t=n,e++}else if(i===`--output`){if(n!==null)return{ok:!1,stderr:`session export: duplicate flag --output\n${QP}`};let t=r[e+1];if(!t||t.startsWith(`-`))return{ok:!1,stderr:`session export: --output requires a path\n${QP}`};n=t,e++}else if(i.startsWith(`-`))return{ok:!1,stderr:`session export: unknown flag ${i}\n${QP}`};else return{ok:!1,stderr:`session export: unexpected argument ${JSON.stringify(i)}\n${QP}`}}return{ok:!0,args:{sessionId:t,outputPath:n}}}async function tF(e){let t=[],n=0;for await(let r of e.chunks)t.push(r),n+=r.byteLength;let r=new Uint8Array(n),i=0;for(let e of t)r.set(e,i),i+=e.byteLength;let a=await e.completion;if(a.byteLength!==n||bt(r)!==a.sha256)throw new Sa(`transfer-corrupt`);return r}async function nF(e,t){let n=eF(e);if(!n.ok)return{stdout:``,stderr:n.stderr,exitCode:1};let{sessionId:r,outputPath:i}=n.args;if(i!==null){let e=$P(i);if(!e.ok)return{stdout:``,stderr:`session export: --output ${e.reason}\n${QP}`,exitCode:1}}let a=r==null?{kind:`active`}:{kind:`frozen`,sessionId:r};try{let e=await cs().export(a,{}),n=await tF(e),r=i??`/workspace/${e.filename}`;return await t.fs.writeFile(r,n),{stdout:`exported ${r}\n`,stderr:``,exitCode:0}}catch(e){return{stdout:``,stderr:`session export: ${e instanceof Sa?e.code:e instanceof Error?e.message:String(e)}\n`,exitCode:1}}}function rF(){return S(`session`,async(e,t)=>{if(e[0]===`export`&&!w(e))return nF(e,t);let{dispatchSessionMemoryAware:n}=await import(`./session-command-memory-D-p81a7P.js`);return n(e,t,QP)})}function iF(){return S(`slicc`,async(e,t)=>{let{runSlicc:n}=await import(`./run-cvQKad0O.js`);return await n(e,t)})}const aF=`leader`;function oF(){try{let e=globalThis.localStorage?.getItem(`slicc.leaderSprinkleInstances`);if(e)return JSON.parse(e)}catch{}return[]}function sF(e){return+!!e.leader+e.followers.length}function cF(){return{stdout:`usage: sprinkle <subcommand> [args]
2063
+ `,exitCode:1}}async function ZP(e,t,n){if(e.ttlMs!==void 0){if(!t)throw Error(`persistent snapshot filesystem unavailable`);return UP(t,n)}}async function QP(e,t,n,r){if(e.length===0||e.includes(`--help`)||e.includes(`-h`))return DP();let i=NP(e);if(i.error)return{stdout:``,stderr:i.error,exitCode:1};let a=await YP(i);if(a)return a;if(!i.directory)return DP();let o=XP(i);if(o)return o;let s=await PP(i.directory,i.entry,t.fs,t.cwd);if(FP(s))return s;let{fullDirectory:c,entryPath:l}=s,u;try{u=await ZP(i,r,c)}catch(e){return{stdout:``,stderr:`serve: ${e instanceof Error?e.message:String(e)}\n`,exitCode:1}}let d=i.project?`serve: --project is obsolete; ignored (root-absolute paths work natively under unified preview)
2064
+ `:``,f=await qP(!i.noBridge&&i.bridge,d);return f.ok?JP(i,c,l,f.webhookId,d,u,n):f.result}function $P(e,t){return S(`serve`,(n,r)=>QP(n,r,e,t))}const eF=`usage: session export [--id <id>] [--output <path>]
2065
+ `;function tF(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 nF(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${eF}`};let n=r[e+1];if(!n||n.startsWith(`-`))return{ok:!1,stderr:`session export: --id requires a value\n${eF}`};t=n,e++}else if(i===`--output`){if(n!==null)return{ok:!1,stderr:`session export: duplicate flag --output\n${eF}`};let t=r[e+1];if(!t||t.startsWith(`-`))return{ok:!1,stderr:`session export: --output requires a path\n${eF}`};n=t,e++}else if(i.startsWith(`-`))return{ok:!1,stderr:`session export: unknown flag ${i}\n${eF}`};else return{ok:!1,stderr:`session export: unexpected argument ${JSON.stringify(i)}\n${eF}`}}return{ok:!0,args:{sessionId:t,outputPath:n}}}async function rF(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||bt(r)!==a.sha256)throw new Sa(`transfer-corrupt`);return r}async function iF(e,t){let n=nF(e);if(!n.ok)return{stdout:``,stderr:n.stderr,exitCode:1};let{sessionId:r,outputPath:i}=n.args;if(i!==null){let e=tF(i);if(!e.ok)return{stdout:``,stderr:`session export: --output ${e.reason}\n${eF}`,exitCode:1}}let a=r==null?{kind:`active`}:{kind:`frozen`,sessionId:r};try{let e=await cs().export(a,{}),n=await rF(e),r=i??`/workspace/${e.filename}`;return await t.fs.writeFile(r,n),{stdout:`exported ${r}\n`,stderr:``,exitCode:0}}catch(e){return{stdout:``,stderr:`session export: ${e instanceof Sa?e.code:e instanceof Error?e.message:String(e)}\n`,exitCode:1}}}function aF(){return S(`session`,async(e,t)=>{if(e[0]===`export`&&!w(e))return iF(e,t);let{dispatchSessionMemoryAware:n}=await import(`./session-command-memory-mbpebhz_.js`);return n(e,t,eF)})}function oF(){return S(`slicc`,async(e,t)=>{let{runSlicc:n}=await import(`./run-cvQKad0O.js`);return await n(e,t)})}const sF=`leader`;function cF(){try{let e=globalThis.localStorage?.getItem(`slicc.leaderSprinkleInstances`);if(e)return JSON.parse(e)}catch{}return[]}function lF(e){return+!!e.leader+e.followers.length}function uF(){return{stdout:`usage: sprinkle <subcommand> [args]
2066
2066
 
2067
2067
  list [--runtime <id>] List sprinkles + an instance line per runtime
2068
2068
  open <name> Open a sprinkle by name
@@ -2080,22 +2080,22 @@ Limits and lifetime:
2080
2080
  chat <html> Show inline HTML in chat (Tool UI)
2081
2081
  Use data-action="name" on buttons for callbacks
2082
2082
  Pipe HTML: echo "<div>...</div>" | sprinkle chat
2083
- `,stderr:``,exitCode:0}}function lF(){return globalThis.__slicc_sprinkleManager??null}function J(e,t){return{stdout:``,stderr:`sprinkle ${e}: ${t}\n`,exitCode:1}}function uF(){return[aF,...ee().map(e=>e.runtimeId)]}function dF(e){return`unknown runtime "${e}"\nknown runtimes: ${uF().join(`, `)}\nRun \`host\` to see connected followers.`}async function fF(e,t){let n=e.slice(1).join(` `);if(!n){let e=P(t.stdin);e&&(n=e)}if(!n)return{stdout:``,stderr:`sprinkle chat: HTML content required
2083
+ `,stderr:``,exitCode:0}}function dF(){return globalThis.__slicc_sprinkleManager??null}function J(e,t){return{stdout:``,stderr:`sprinkle ${e}: ${t}\n`,exitCode:1}}function fF(){return[sF,...ee().map(e=>e.runtimeId)]}function pF(e){return`unknown runtime "${e}"\nknown runtimes: ${fF().join(`, `)}\nRun \`host\` to see connected followers.`}async function mF(e,t){let n=e.slice(1).join(` `);if(!n){let e=P(t.stdin);e&&(n=e)}if(!n)return{stdout:``,stderr:`sprinkle chat: HTML content required
2084
2084
  `,exitCode:1};let r=await we({html:n,onAction:async(e,t)=>({action:e,data:t})});return r===null?{stdout:``,stderr:`sprinkle chat: not in tool execution context
2085
2085
  `,exitCode:1}:{stdout:JSON.stringify(r)+`
2086
- `,stderr:``,exitCode:0}}function pF(e){return e.map(e=>{let t=e.runtime?` (${e.runtime})`:``;return` instance: ${e.runtimeId}${t}`})}function mF(e){return[...e.map(e=>({name:e,runtimeId:aF})),...oF()]}async function hF(e,t){let n=C(t.slice(1),{value:[`--runtime`]});if(`error`in n)return J(`list`,n.error);let r=n.values.get(`--runtime`);if(r!==void 0&&!uF().includes(r))return J(`list`,dF(r));await e.refresh();let i=e.available();if(i.length===0)return{stdout:`No .shtml sprinkles found.
2087
- `,stderr:``,exitCode:0};let a=new Set(e.opened()),o=mF([...a]).filter(e=>r===void 0||e.runtimeId===r),s=[];for(let e of i){let t=o.filter(t=>t.name===e.name);if(r!==void 0&&t.length===0)continue;let n=a.has(e.name)?` [open]`:``;s.push(` ${e.name}${n} ${e.title} (${e.path})`),s.push(...pF(t))}return s.length===0?{stdout:`No sprinkles are open on runtime "${r}".\n`,stderr:``,exitCode:0}:{stdout:s.join(`
2086
+ `,stderr:``,exitCode:0}}function hF(e){return e.map(e=>{let t=e.runtime?` (${e.runtime})`:``;return` instance: ${e.runtimeId}${t}`})}function gF(e){return[...e.map(e=>({name:e,runtimeId:sF})),...cF()]}async function _F(e,t){let n=C(t.slice(1),{value:[`--runtime`]});if(`error`in n)return J(`list`,n.error);let r=n.values.get(`--runtime`);if(r!==void 0&&!fF().includes(r))return J(`list`,pF(r));await e.refresh();let i=e.available();if(i.length===0)return{stdout:`No .shtml sprinkles found.
2087
+ `,stderr:``,exitCode:0};let a=new Set(e.opened()),o=gF([...a]).filter(e=>r===void 0||e.runtimeId===r),s=[];for(let e of i){let t=o.filter(t=>t.name===e.name);if(r!==void 0&&t.length===0)continue;let n=a.has(e.name)?` [open]`:``;s.push(` ${e.name}${n} ${e.title} (${e.path})`),s.push(...hF(t))}return s.length===0?{stdout:`No sprinkles are open on runtime "${r}".\n`,stderr:``,exitCode:0}:{stdout:s.join(`
2088
2088
  `)+`
2089
- `,stderr:``,exitCode:0}}function gF(e,t){return!t||Do(e)?null:(Oo(e,t),Do(e)===t?t:null)}async function _F(e,t,n){let r=C(t.slice(1),{});if(`error`in r)return J(`open`,r.error);let i=r.positionals[0];if(!i)return J(`open`,`name required`);let a=Ri(void 0,n),o=gF(i,a);try{a?await e.open(i,void 0,{lickOriginTarget:a}):await e.open(i)}catch(e){return o&&ko(i),J(`open`,e instanceof Error?e.message:String(e))}return{stdout:`Sprinkle "${i}" opened${o?`; licks route to "${o}"`:``}.\n`,stderr:``,exitCode:0}}function vF(e,t){let n=C(t.slice(1),{});if(`error`in n)return J(`close`,n.error);let r=n.positionals[0];return r?(e.close(r),{stdout:`Sprinkle "${r}" closed.\n`,stderr:``,exitCode:0}):J(`close`,`name required`)}async function yF(e,t){let n=C(t.slice(1),{});if(`error`in n)return J(`reload`,n.error);let r=n.positionals[0];if(!r)return J(`reload`,`name required`);try{return await e.reload(r),{stdout:`Sprinkle "${r}" reloaded.\n`,stderr:``,exitCode:0}}catch(e){return J(`reload`,e instanceof Error?e.message:String(e))}}async function bF(e,t){let n=C(t.slice(1),{});if(`error`in n)return J(`refresh`,n.error);await e.refresh();let r=e.available().length;return{stdout:`Found ${r} sprinkle${r===1?``:`s`}.\n`,stderr:``,exitCode:0}}function xF(e){let t=C(e.slice(1),{value:[`--scoop`],bool:[`--clear`]});if(`error`in t)return J(`route`,t.error);let n=t.positionals[0];if(!n){let e=Ao(),t=Object.entries(e);return t.length===0?{stdout:`No sprinkle routes configured (all licks go to cone).
2089
+ `,stderr:``,exitCode:0}}function vF(e,t){return!t||Do(e)?null:(Oo(e,t),Do(e)===t?t:null)}async function yF(e,t,n){let r=C(t.slice(1),{});if(`error`in r)return J(`open`,r.error);let i=r.positionals[0];if(!i)return J(`open`,`name required`);let a=Ri(void 0,n),o=vF(i,a);try{a?await e.open(i,void 0,{lickOriginTarget:a}):await e.open(i)}catch(e){return o&&ko(i),J(`open`,e instanceof Error?e.message:String(e))}return{stdout:`Sprinkle "${i}" opened${o?`; licks route to "${o}"`:``}.\n`,stderr:``,exitCode:0}}function bF(e,t){let n=C(t.slice(1),{});if(`error`in n)return J(`close`,n.error);let r=n.positionals[0];return r?(e.close(r),{stdout:`Sprinkle "${r}" closed.\n`,stderr:``,exitCode:0}):J(`close`,`name required`)}async function xF(e,t){let n=C(t.slice(1),{});if(`error`in n)return J(`reload`,n.error);let r=n.positionals[0];if(!r)return J(`reload`,`name required`);try{return await e.reload(r),{stdout:`Sprinkle "${r}" reloaded.\n`,stderr:``,exitCode:0}}catch(e){return J(`reload`,e instanceof Error?e.message:String(e))}}async function SF(e,t){let n=C(t.slice(1),{});if(`error`in n)return J(`refresh`,n.error);await e.refresh();let r=e.available().length;return{stdout:`Found ${r} sprinkle${r===1?``:`s`}.\n`,stderr:``,exitCode:0}}function CF(e){let t=C(e.slice(1),{value:[`--scoop`],bool:[`--clear`]});if(`error`in t)return J(`route`,t.error);let n=t.positionals[0];if(!n){let e=Ao(),t=Object.entries(e);return t.length===0?{stdout:`No sprinkle routes configured (all licks go to cone).
2090
2090
  `,stderr:``,exitCode:0}:{stdout:`Sprinkle routes (applied to every runtime — the leader resolves the
2091
2091
  route for follower-forwarded licks too):
2092
2092
  `+t.map(([e,t])=>` ${e} -> ${t}`).join(`
2093
2093
  `)+`
2094
- `,stderr:``,exitCode:0}}if(t.bools.has(`--clear`))return ko(n),{stdout:`Route cleared for sprinkle "${n}" (licks will go to cone).\n`,stderr:``,exitCode:0};let r=t.values.get(`--scoop`);if(!r){let e=Do(n);return e?{stdout:`${n} -> ${e}\n`,stderr:``,exitCode:0}:{stdout:`${n} -> cone (default)\n`,stderr:``,exitCode:0}}return Oo(n,r),{stdout:`Sprinkle "${n}" lick events will route to scoop "${r}".\n`,stderr:``,exitCode:0}}function SF(e){let t=[];return e.leader&&t.push(aF),t.push(...e.followers),t.join(`, `)}async function CF(e,t){let n=C(t.slice(1),{value:[`--runtime`]});if(`error`in n)return J(`send`,n.error);let r=n.positionals[0];if(!r)return J(`send`,`name required`);let i=n.positionals.slice(1).join(` `);if(!i)return J(`send`,`JSON data required`);let a;try{a=JSON.parse(i)}catch{return J(`send`,`invalid JSON`)}let o=n.values.get(`--runtime`);if(o!==void 0&&!uF().includes(o))return J(`send`,dF(o));let s=await e.sendToSprinkle(r,a,o?{runtime:o}:void 0);if(!s)return J(`send`,`sprinkle manager returned no delivery report — push not confirmed`);if(s.unknownRuntime)return J(`send`,dF(s.unknownRuntime));let c=sF(s);return c===0?J(`send`,o?`"${r}" is not open on runtime "${o}" — nothing was delivered`:`"${r}" is not open on the leader or any connected follower — nothing was delivered`):{stdout:`Data sent to sprinkle "${r}" — ${c} instance${c===1?``:`s`} (${SF(s)}).\n`,stderr:``,exitCode:0}}function wF(){return S(`sprinkle`,async(e,t)=>{if(e.length===0||e[0]===`--help`||e[0]===`-h`)return cF();let n=e[0];if(w(e.slice(1),{valueFlags:[`--scoop`,`--runtime`]}))return{stdout:$e(`sprinkle`,n,cF().stdout),stderr:``,exitCode:0};if(n===`chat`)return fF(Qe(e),t);let r=lF();if(!r)return{stdout:``,stderr:`sprinkle: sprinkle manager not initialized
2095
- `,exitCode:1};switch(n){case`list`:return hF(r,e);case`open`:return _F(r,e,t.env);case`close`:return vF(r,e);case`reload`:return yF(r,e);case`refresh`:return bF(r,e);case`route`:return xF(e);case`send`:return CF(r,e);default:return{stdout:``,stderr:`sprinkle: unknown subcommand "${n}"\n`,exitCode:1}}})}function TF(){return{stdout:`usage: sqlite3 [database] [sql]
2096
- `,stderr:``,exitCode:0}}function EF(e,t){let n=e.length>0&&!e[0].startsWith(`-`);return{database:n?e[0]:`:memory:`,sql:(n?e.slice(1):e).join(` `).trim()||P(t.stdin).trim()}}function DF(e,t){return e===`:memory:`?e:t.fs.resolvePath(t.cwd,e)}async function OF(e,t,n){return t===`:memory:`||!await n.fs.exists(t)?new e.Database:new e.Database(await n.fs.readFileBuffer(t))}async function kF(e,t,n){t!==`:memory:`&&await n.fs.writeFile(t,e.export())}function AF(e){let t=e.flatMap(e=>e.values.map(e=>e.map(nr).join(`|`)));return t.length>0?`${t.join(`
2097
- `)}\n`:``}async function jF(e,t,n){let r=await lr(),i=DF(e,n),a=await OF(r,i,n),o=a.exec(t);return await kF(a,i,n),a.close(),AF(o)}function MF(e,t){return{stdout:``,stderr:`${e}: ${t instanceof Error?t.message:String(t)}\n`,exitCode:1}}function NF(e=`sqlite3`){return S(e,async(t,n)=>{if(t.includes(`--help`)||t.includes(`-h`))return TF();let{database:r,sql:i}=EF(t,n);if(!i)return MF(e,`interactive mode is not supported; provide SQL as argument or stdin`);try{return{stdout:await jF(r,i,n),stderr:``,exitCode:0}}catch(t){return MF(e,t)}})}function PF(e){return{stdout:``,stderr:e.endsWith(`
2098
- `)?e:`${e}\n`,exitCode:1}}function FF(){return{stdout:`ssh - run a command on a connected tray follower
2094
+ `,stderr:``,exitCode:0}}if(t.bools.has(`--clear`))return ko(n),{stdout:`Route cleared for sprinkle "${n}" (licks will go to cone).\n`,stderr:``,exitCode:0};let r=t.values.get(`--scoop`);if(!r){let e=Do(n);return e?{stdout:`${n} -> ${e}\n`,stderr:``,exitCode:0}:{stdout:`${n} -> cone (default)\n`,stderr:``,exitCode:0}}return Oo(n,r),{stdout:`Sprinkle "${n}" lick events will route to scoop "${r}".\n`,stderr:``,exitCode:0}}function wF(e){let t=[];return e.leader&&t.push(sF),t.push(...e.followers),t.join(`, `)}async function TF(e,t){let n=C(t.slice(1),{value:[`--runtime`]});if(`error`in n)return J(`send`,n.error);let r=n.positionals[0];if(!r)return J(`send`,`name required`);let i=n.positionals.slice(1).join(` `);if(!i)return J(`send`,`JSON data required`);let a;try{a=JSON.parse(i)}catch{return J(`send`,`invalid JSON`)}let o=n.values.get(`--runtime`);if(o!==void 0&&!fF().includes(o))return J(`send`,pF(o));let s=await e.sendToSprinkle(r,a,o?{runtime:o}:void 0);if(!s)return J(`send`,`sprinkle manager returned no delivery report — push not confirmed`);if(s.unknownRuntime)return J(`send`,pF(s.unknownRuntime));let c=lF(s);return c===0?J(`send`,o?`"${r}" is not open on runtime "${o}" — nothing was delivered`:`"${r}" is not open on the leader or any connected follower — nothing was delivered`):{stdout:`Data sent to sprinkle "${r}" — ${c} instance${c===1?``:`s`} (${wF(s)}).\n`,stderr:``,exitCode:0}}function EF(){return S(`sprinkle`,async(e,t)=>{if(e.length===0||e[0]===`--help`||e[0]===`-h`)return uF();let n=e[0];if(w(e.slice(1),{valueFlags:[`--scoop`,`--runtime`]}))return{stdout:$e(`sprinkle`,n,uF().stdout),stderr:``,exitCode:0};if(n===`chat`)return mF(Qe(e),t);let r=dF();if(!r)return{stdout:``,stderr:`sprinkle: sprinkle manager not initialized
2095
+ `,exitCode:1};switch(n){case`list`:return _F(r,e);case`open`:return yF(r,e,t.env);case`close`:return bF(r,e);case`reload`:return xF(r,e);case`refresh`:return SF(r,e);case`route`:return CF(e);case`send`:return TF(r,e);default:return{stdout:``,stderr:`sprinkle: unknown subcommand "${n}"\n`,exitCode:1}}})}function DF(){return{stdout:`usage: sqlite3 [database] [sql]
2096
+ `,stderr:``,exitCode:0}}function OF(e,t){let n=e.length>0&&!e[0].startsWith(`-`);return{database:n?e[0]:`:memory:`,sql:(n?e.slice(1):e).join(` `).trim()||P(t.stdin).trim()}}function kF(e,t){return e===`:memory:`?e:t.fs.resolvePath(t.cwd,e)}async function AF(e,t,n){return t===`:memory:`||!await n.fs.exists(t)?new e.Database:new e.Database(await n.fs.readFileBuffer(t))}async function jF(e,t,n){t!==`:memory:`&&await n.fs.writeFile(t,e.export())}function MF(e){let t=e.flatMap(e=>e.values.map(e=>e.map(nr).join(`|`)));return t.length>0?`${t.join(`
2097
+ `)}\n`:``}async function NF(e,t,n){let r=await lr(),i=kF(e,n),a=await AF(r,i,n),o=a.exec(t);return await jF(a,i,n),a.close(),MF(o)}function PF(e,t){return{stdout:``,stderr:`${e}: ${t instanceof Error?t.message:String(t)}\n`,exitCode:1}}function FF(e=`sqlite3`){return S(e,async(t,n)=>{if(t.includes(`--help`)||t.includes(`-h`))return DF();let{database:r,sql:i}=OF(t,n);if(!i)return PF(e,`interactive mode is not supported; provide SQL as argument or stdin`);try{return{stdout:await NF(r,i,n),stderr:``,exitCode:0}}catch(t){return PF(e,t)}})}function IF(e){return{stdout:``,stderr:e.endsWith(`
2098
+ `)?e:`${e}\n`,exitCode:1}}function LF(){return{stdout:`ssh - run a command on a connected tray follower
2099
2099
 
2100
2100
  Usage: ssh [--cwd <dir>] [--timeout <seconds>] <runtime-id> <command...>
2101
2101
  ssh --list
@@ -2118,11 +2118,11 @@ Examples:
2118
2118
  ssh --list
2119
2119
  ssh follower-abc123 "uname -a"
2120
2120
  ssh --cwd /tmp follower-abc123 "ls -la"
2121
- `,stderr:``,exitCode:0}}function IF(e){let t=e.filter(e=>e.exec);if(t.length===0)return`No exec-capable followers connected.
2121
+ `,stderr:``,exitCode:0}}function RF(e){let t=e.filter(e=>e.exec);if(t.length===0)return`No exec-capable followers connected.
2122
2122
  Start one with: slicc <join-url> follow sh -c
2123
2123
  `;let n=[`exec targets:`];for(let e of t){let t=[e.runtimeId];e.runtime&&t.push(`(${e.runtime})`),n.push(` - ${t.join(` `)}`),e.motd&&n.push(` ${e.motd}`),e.computerMotd&&n.push(` ${e.computerMotd}`)}return`${n.join(`
2124
- `)}\n`}function LF(e){if(e.stdin===void 0)return;let n=ei(e.stdin);if(n.length===0)return;let r=new Uint8Array(n.length);for(let e=0;e<n.length;e++)r[e]=n.charCodeAt(e)&255;return t(r)}function RF(e){let t=!1,n,r,i=0;for(;i<e.length;){let a=e[i];if(a===`--help`||a===`-h`)return{help:!0};if(a===`--list`||a===`-l`){t=!0,i+=1;continue}if(a===`--cwd`){let t=e[i+1];if(t===void 0)return{error:`ssh: --cwd requires a directory argument`};n=t,i+=2;continue}if(a===`--timeout`){let t=e[i+1],n=Number(t);if(t===void 0||!Number.isFinite(n)||n<=0)return{error:`ssh: --timeout requires a positive number of seconds`};r=n,i+=2;continue}if(a.startsWith(`-`)&&a!==`-`)return{error:`ssh: unknown flag: ${a}`};break}let a=e[i],o=e.slice(i+1).join(` `);return{list:t,cwd:n,timeoutSec:r,runtimeId:a,command:o}}function zF(){return S(`ssh`,async(e,t)=>{let n=RF(e);if(`help`in n)return FF();if(`error`in n)return PF(n.error);if(n.list||n.runtimeId===void 0)return{stdout:IF(ee()),stderr:``,exitCode:0};if(!n.command)return PF(`ssh: missing command
2125
- Usage: ssh <runtime-id> <command...>`);let r=y();if(!r)return PF(`ssh: not available in this environment (needs the standalone app)`);let i=`ssh-${Date.now()}-${Math.random().toString(36).slice(2,10)}`,a=()=>{r.call(`tray-exec-signal`,{execToken:i}).catch(()=>{})};t.signal?.addEventListener(`abort`,a,{once:!0});try{let e=n.timeoutSec?n.timeoutSec*1e3:void 0,a=await r.call(`tray-exec`,{runtimeId:n.runtimeId,command:n.command,cwd:n.cwd,execToken:i,timeoutMs:e,stdin:LF(t)},{timeoutMs:(e??864e5)+5e3});return a.error?{stdout:a.stdout,stderr:`${a.stderr}ssh: ${a.error}\n`,exitCode:a.exitCode||1}:{stdout:a.stdout,stderr:a.stderr,exitCode:a.exitCode}}catch(e){return PF(`ssh: ${e instanceof Error?e.message:String(e)}`)}finally{t.signal?.removeEventListener(`abort`,a)}})}function BF(e){return{stdout:``,stderr:`${ct(`sudo`,e)}\n`,exitCode:1}}function VF(e={}){let{broker:t,persistGrant:n,suppressNextGate:r}=e;return S(`sudo`,async(e,i)=>{if(e.length===0)return{stdout:``,stderr:`sudo: usage: sudo <command> [args...]
2124
+ `)}\n`}function zF(e){if(e.stdin===void 0)return;let n=ei(e.stdin);if(n.length===0)return;let r=new Uint8Array(n.length);for(let e=0;e<n.length;e++)r[e]=n.charCodeAt(e)&255;return t(r)}function BF(e){let t=!1,n,r,i=0;for(;i<e.length;){let a=e[i];if(a===`--help`||a===`-h`)return{help:!0};if(a===`--list`||a===`-l`){t=!0,i+=1;continue}if(a===`--cwd`){let t=e[i+1];if(t===void 0)return{error:`ssh: --cwd requires a directory argument`};n=t,i+=2;continue}if(a===`--timeout`){let t=e[i+1],n=Number(t);if(t===void 0||!Number.isFinite(n)||n<=0)return{error:`ssh: --timeout requires a positive number of seconds`};r=n,i+=2;continue}if(a.startsWith(`-`)&&a!==`-`)return{error:`ssh: unknown flag: ${a}`};break}let a=e[i],o=e.slice(i+1).join(` `);return{list:t,cwd:n,timeoutSec:r,runtimeId:a,command:o}}function VF(){return S(`ssh`,async(e,t)=>{let n=BF(e);if(`help`in n)return LF();if(`error`in n)return IF(n.error);if(n.list||n.runtimeId===void 0)return{stdout:RF(ee()),stderr:``,exitCode:0};if(!n.command)return IF(`ssh: missing command
2125
+ Usage: ssh <runtime-id> <command...>`);let r=y();if(!r)return IF(`ssh: not available in this environment (needs the standalone app)`);let i=`ssh-${Date.now()}-${Math.random().toString(36).slice(2,10)}`,a=()=>{r.call(`tray-exec-signal`,{execToken:i}).catch(()=>{})};t.signal?.addEventListener(`abort`,a,{once:!0});try{let e=n.timeoutSec?n.timeoutSec*1e3:void 0,a=await r.call(`tray-exec`,{runtimeId:n.runtimeId,command:n.command,cwd:n.cwd,execToken:i,timeoutMs:e,stdin:zF(t)},{timeoutMs:(e??864e5)+5e3});return a.error?{stdout:a.stdout,stderr:`${a.stderr}ssh: ${a.error}\n`,exitCode:a.exitCode||1}:{stdout:a.stdout,stderr:a.stderr,exitCode:a.exitCode}}catch(e){return IF(`ssh: ${e instanceof Error?e.message:String(e)}`)}finally{t.signal?.removeEventListener(`abort`,a)}})}function HF(e){return{stdout:``,stderr:`${ct(`sudo`,e)}\n`,exitCode:1}}function UF(e={}){let{broker:t,persistGrant:n,suppressNextGate:r}=e;return S(`sudo`,async(e,i)=>{if(e.length===0)return{stdout:``,stderr:`sudo: usage: sudo <command> [args...]
2126
2126
  `,exitCode:1};if(e[0]===`--help`||e[0]===`-h`)return{stdout:`usage: sudo <command> [args...]
2127
2127
 
2128
2128
  Request human approval to run <command> with elevation. If approved, the
@@ -2136,14 +2136,14 @@ Options:
2136
2136
  -h, --help Show this help message and exit.
2137
2137
  `,stderr:``,exitCode:0};if(!t)return{stdout:``,stderr:`sudo: command-level approval is not configured
2138
2138
  `,exitCode:1};if(!i.exec)return{stdout:``,stderr:`sudo: cannot dispatch inner command in this context
2139
- `,exitCode:1};let a=Yp(e[0],e.slice(1)),o=i.env?.get($p),s=await t.requestApproval({kind:`command`,detail:a,...o?{reason:o}:{}});if(s.decision===`deny`)return BF(s);if(s.decision===`always`){let e=s.pattern?.trim()||a;if(n)try{await n(e)}catch{}}return r&&r(a),i.exec(e[0],{cwd:i.cwd,args:e.slice(1)})})}function HF(e){let t=e instanceof Error?e.message:String(e);return/ENOENT|no such file/i.test(t)?`No such file or directory`:/ENOTEMPTY|not empty/i.test(t)?`Directory not empty`:t.replace(/^\w+:\s*/,``)}async function UF(e,t){return e.fs.lstat?e.fs.lstat(t):e.fs.stat(t)}function WF(e,t){return e.some(e=>/^-[^-]/.test(e)&&e.slice(1).includes(t))}async function GF(e,t,n){let r=e.fs.resolvePath(e.cwd,t);try{let i=await UF(e,r);return i.isDirectory&&!i.isSymbolicLink&&!n.recursive?{stdout:``,stderr:`rm: cannot remove '${t}': Is a directory\n`}:(await e.fs.rm(r,{recursive:n.recursive,force:n.force}),{stdout:n.verbose?`removed '${t}'\n`:``,stderr:``})}catch(e){return{stdout:``,stderr:n.force?``:`rm: cannot remove '${t}': ${HF(e)}\n`}}}function KF(){return S(`rm`,async(e,t)=>{let n={recursive:WF(e,`r`)||WF(e,`R`)||e.includes(`--recursive`),force:WF(e,`f`)||e.includes(`--force`),verbose:WF(e,`v`)||e.includes(`--verbose`)},r=e.filter(e=>!e.startsWith(`-`));if(r.length===0)return n.force?{stdout:``,stderr:``,exitCode:0}:{stdout:``,stderr:`rm: missing operand
2140
- `,exitCode:1};let i=await Promise.all(r.map(e=>GF(t,e,n))),a=i.map(e=>e.stdout).join(``),o=i.map(e=>e.stderr).join(``);return{stdout:a,stderr:o,exitCode:+!!o}})}function qF(e,t,n){let r=n.isSymbolicLink?`symbolic link`:n.isDirectory?`directory`:`regular file`;return e.replace(/%n/g,t).replace(/%N/g,`'${t}'`).replace(/%s/g,String(n.size)).replace(/%F/g,r).replace(/%a/g,n.mode.toString(8))}function JF(e){let t={follow:!1,paths:[]};for(let n=0;n<e.length;n++){let r=e[n];r===`-L`||r===`--dereference`?t.follow=!0:r===`-c`&&e[n+1]?t.format=e[++n]:r.startsWith(`--format=`)?t.format=r.slice(9):r.startsWith(`-`)||t.paths.push(r)}return t}async function YF(e,t,n){try{let r=e.fs.resolvePath(e.cwd,t),i=n.follow?await e.fs.stat(r):await UF(e,r);return{stdout:n.format?`${qF(n.format,t,i)}\n`:` File: ${t}\n Size: ${i.size}\n`,stderr:``}}catch{return{stdout:``,stderr:`stat: cannot stat '${t}': No such file or directory\n`}}}function XF(){return S(`stat`,async(e,t)=>{let n=JF(e);if(n.paths.length===0)return{stdout:``,stderr:`stat: missing operand
2141
- `,exitCode:1};let r=await Promise.all(n.paths.map(e=>YF(t,e,n))),i=r.map(e=>e.stdout).join(``),a=r.map(e=>e.stderr).join(``);return{stdout:i,stderr:a,exitCode:+!!a}})}function ZF(e){let t=e.replace(/\/+$/,``),n=t.lastIndexOf(`/`);return n<=0?`/`:t.slice(0,n)}async function QF(e,t,n,r){let i=e.fs.resolvePath(`/`,t).split(`/`).filter(Boolean),a=e.fs.resolvePath(e.cwd,t),o=``;for(let s=0;s<i.length;s++){try{let t=await UF(e,a);if(!t.isDirectory||t.isSymbolicLink)throw Error(`Not a directory`);await e.fs.rm(a,{recursive:!1,force:!1}),r&&(o+=`rmdir: removing directory, '${a}'\n`)}catch(e){return{stdout:o,stderr:`rmdir: failed to remove '${t}': ${HF(e)}\n`}}if(!n||s===i.length-1)return{stdout:o,stderr:``};a=ZF(a)}return{stdout:o,stderr:``}}function $F(){return S(`rmdir`,async(e,t)=>{let n=e.some(e=>e===`-p`||e===`--parents`),r=e.some(e=>e===`-v`||e===`--verbose`),i=e.filter(e=>!e.startsWith(`-`));if(i.length===0)return{stdout:``,stderr:`rmdir: missing operand
2142
- `,exitCode:1};let a=await Promise.all(i.map(e=>QF(t,e,n,r))),o=a.map(e=>e.stdout).join(``),s=a.map(e=>e.stderr).join(``);return{stdout:o,stderr:s,exitCode:+!!s}})}function eI(){return{stdout:`usage: tar (-c|-x|-t) [-zv] -f <archive> [-C <dir>] [paths...]
2143
- `,stderr:``,exitCode:0}}function tI(e){return{stdout:``,stderr:`tar: ${e}\n`,exitCode:1}}function nI(e,t){if(e.mode)return tI(`exactly one of -c, -x, or -t is required`);e.mode=t}function rI(e,t,n){if(n)return[n,t];let r=e[t+1];return r===void 0?void 0:[r,t+1]}const iI={c:`create`,x:`extract`,t:`list`};function aI(e,t,n,r,i){let a=iI[e];if(a)return{nextIndex:r,error:nI(i,a)};if(e===`z`)return i.gzip=!0,{nextIndex:r};if(e===`v`)return i.verbose=!0,{nextIndex:r};if(e!==`f`&&e!==`C`)return{nextIndex:r,error:tI(`unsupported option -${e}`)};let o=rI(n,r,t);return o?(e===`f`?i.archive=o[0]:i.directory=o[0],{nextIndex:o[1],consumedValue:!0}):{nextIndex:r,error:tI(`option -${e} requires an argument`)}}function oI(e,t,n){let r=e[t];for(let i=1;i<r.length;i++){let a=aI(r[i],r.slice(i+1),e,t,n);if(a.error||a.consumedValue)return a}return{nextIndex:t}}function sI(e){let t={gzip:!1,verbose:!1,directory:`.`,paths:[]};for(let n=0;n<e.length;n++){let r=e[n];if(!r.startsWith(`-`)||r===`-`){t.paths.push(r);continue}if(r.startsWith(`--`))return tI(`unsupported option ${r}`);let i=oI(e,n,t);if(i.error)return i.error;n=i.nextIndex}return t}function cI(e,t){let n=e.replace(/\\/g,`/`).replace(/^\/+/,``).replace(/^(?:\.\/)+/,``);return n?n===`.`?`.`:n.replace(/\/+$/,``):er(t)}async function lI(e,t,n,r){let i=await e.fs.stat(t);if(i.isFile){r.push({path:n,bytes:await e.fs.readFileBuffer(t)});return}if(!i.isDirectory)throw Error(`unsupported file type: ${t}`);let a=n.endsWith(`/`)?n:`${n}/`;r.push({path:a,bytes:new Uint8Array,directory:!0});for(let n of await e.fs.readdir(t))await lI(e,$n(t,n),`${a}${n}`,r)}function uI(e,t){let n=e.length>=2&&e[0]===31&&e[1]===139,r=t||n?Xi(e):e;return Gi(r,{stripNpmPrefix:!1,includeDirectories:!0,preserveRawPaths:!0})}function dI(e,t,n){let r=n.replace(/\\/g,`/`);if(!r||r.startsWith(`/`)||/^[a-zA-Z]:\//.test(r)||r.split(`/`).includes(`..`))return;let i=e.fs.resolvePath(t,r);return cr(t,i)?i:void 0}async function fI(e,t){if(e.paths.length===0)return tI(`create mode requires at least one input path`);let n=[],r=t.fs.resolvePath(t.cwd,e.directory);for(let i of e.paths){let e=t.fs.resolvePath(r,i);await lI(t,e,cI(i,e),n)}let i=t.fs.resolvePath(t.cwd,e.archive),a=Qi(n);return await t.fs.writeFile(i,e.gzip?Vi(a):a),{stdout:e.verbose?`${n.map(e=>e.path).join(`
2144
- `)}\n`:``,stderr:``,exitCode:0}}async function pI(e,t){if(e.paths.length>0)return tI(`${e.mode} mode does not accept input paths`);let n=t.fs.resolvePath(t.cwd,e.archive),r=uI(await t.fs.readFileBuffer(n),e.gzip);if(e.mode===`list`){let e=r.map(e=>e.path).join(`
2145
- `);return{stdout:e?`${e}\n`:``,stderr:``,exitCode:0}}let i=t.fs.resolvePath(t.cwd,e.directory);await t.fs.mkdir(i,{recursive:!0});let a=[];for(let e of r){let n=dI(t,i,e.path);if(!n)return tI(`blocked suspicious path ${e.path}`);if(e.directory)await t.fs.mkdir(n,{recursive:!0});else{let r=ar(n);r!==`/`&&await t.fs.mkdir(r,{recursive:!0}),await t.fs.writeFile(n,e.bytes)}a.push(e.path)}return{stdout:e.verbose?`${a.join(`
2146
- `)}\n`:``,stderr:``,exitCode:0}}function mI(){return S(`tar`,async(e,t)=>{if(e.length===0||e.includes(`--help`)||e.includes(`-h`))return eI();let n=sI(e);return`exitCode`in n?n:n.mode?n.archive?n.mode===`list`&&n.directory!==`.`?tI(`-C is only supported in create or extract mode`):n.mode===`create`?fI(n,t):pI(n,t):tI(`option -f requires an archive path`):tI(`exactly one of -c, -x, or -t is required`)})}var hI=`/**
2139
+ `,exitCode:1};let a=Yp(e[0],e.slice(1)),o=i.env?.get($p),s=await t.requestApproval({kind:`command`,detail:a,...o?{reason:o}:{}});if(s.decision===`deny`)return HF(s);if(s.decision===`always`){let e=s.pattern?.trim()||a;if(n)try{await n(e)}catch{}}return r&&r(a),i.exec(e[0],{cwd:i.cwd,args:e.slice(1)})})}function WF(e){let t=e instanceof Error?e.message:String(e);return/ENOENT|no such file/i.test(t)?`No such file or directory`:/ENOTEMPTY|not empty/i.test(t)?`Directory not empty`:t.replace(/^\w+:\s*/,``)}async function GF(e,t){return e.fs.lstat?e.fs.lstat(t):e.fs.stat(t)}function KF(e,t){return e.some(e=>/^-[^-]/.test(e)&&e.slice(1).includes(t))}async function qF(e,t,n){let r=e.fs.resolvePath(e.cwd,t);try{let i=await GF(e,r);return i.isDirectory&&!i.isSymbolicLink&&!n.recursive?{stdout:``,stderr:`rm: cannot remove '${t}': Is a directory\n`}:(await e.fs.rm(r,{recursive:n.recursive,force:n.force}),{stdout:n.verbose?`removed '${t}'\n`:``,stderr:``})}catch(e){return{stdout:``,stderr:n.force?``:`rm: cannot remove '${t}': ${WF(e)}\n`}}}function JF(){return S(`rm`,async(e,t)=>{let n={recursive:KF(e,`r`)||KF(e,`R`)||e.includes(`--recursive`),force:KF(e,`f`)||e.includes(`--force`),verbose:KF(e,`v`)||e.includes(`--verbose`)},r=e.filter(e=>!e.startsWith(`-`));if(r.length===0)return n.force?{stdout:``,stderr:``,exitCode:0}:{stdout:``,stderr:`rm: missing operand
2140
+ `,exitCode:1};let i=await Promise.all(r.map(e=>qF(t,e,n))),a=i.map(e=>e.stdout).join(``),o=i.map(e=>e.stderr).join(``);return{stdout:a,stderr:o,exitCode:+!!o}})}function YF(e,t,n){let r=n.isSymbolicLink?`symbolic link`:n.isDirectory?`directory`:`regular file`;return e.replace(/%n/g,t).replace(/%N/g,`'${t}'`).replace(/%s/g,String(n.size)).replace(/%F/g,r).replace(/%a/g,n.mode.toString(8))}function XF(e){let t={follow:!1,paths:[]};for(let n=0;n<e.length;n++){let r=e[n];r===`-L`||r===`--dereference`?t.follow=!0:r===`-c`&&e[n+1]?t.format=e[++n]:r.startsWith(`--format=`)?t.format=r.slice(9):r.startsWith(`-`)||t.paths.push(r)}return t}async function ZF(e,t,n){try{let r=e.fs.resolvePath(e.cwd,t),i=n.follow?await e.fs.stat(r):await GF(e,r);return{stdout:n.format?`${YF(n.format,t,i)}\n`:` File: ${t}\n Size: ${i.size}\n`,stderr:``}}catch{return{stdout:``,stderr:`stat: cannot stat '${t}': No such file or directory\n`}}}function QF(){return S(`stat`,async(e,t)=>{let n=XF(e);if(n.paths.length===0)return{stdout:``,stderr:`stat: missing operand
2141
+ `,exitCode:1};let r=await Promise.all(n.paths.map(e=>ZF(t,e,n))),i=r.map(e=>e.stdout).join(``),a=r.map(e=>e.stderr).join(``);return{stdout:i,stderr:a,exitCode:+!!a}})}function $F(e){let t=e.replace(/\/+$/,``),n=t.lastIndexOf(`/`);return n<=0?`/`:t.slice(0,n)}async function eI(e,t,n,r){let i=e.fs.resolvePath(`/`,t).split(`/`).filter(Boolean),a=e.fs.resolvePath(e.cwd,t),o=``;for(let s=0;s<i.length;s++){try{let t=await GF(e,a);if(!t.isDirectory||t.isSymbolicLink)throw Error(`Not a directory`);await e.fs.rm(a,{recursive:!1,force:!1}),r&&(o+=`rmdir: removing directory, '${a}'\n`)}catch(e){return{stdout:o,stderr:`rmdir: failed to remove '${t}': ${WF(e)}\n`}}if(!n||s===i.length-1)return{stdout:o,stderr:``};a=$F(a)}return{stdout:o,stderr:``}}function tI(){return S(`rmdir`,async(e,t)=>{let n=e.some(e=>e===`-p`||e===`--parents`),r=e.some(e=>e===`-v`||e===`--verbose`),i=e.filter(e=>!e.startsWith(`-`));if(i.length===0)return{stdout:``,stderr:`rmdir: missing operand
2142
+ `,exitCode:1};let a=await Promise.all(i.map(e=>eI(t,e,n,r))),o=a.map(e=>e.stdout).join(``),s=a.map(e=>e.stderr).join(``);return{stdout:o,stderr:s,exitCode:+!!s}})}function nI(){return{stdout:`usage: tar (-c|-x|-t) [-zv] -f <archive> [-C <dir>] [paths...]
2143
+ `,stderr:``,exitCode:0}}function rI(e){return{stdout:``,stderr:`tar: ${e}\n`,exitCode:1}}function iI(e,t){if(e.mode)return rI(`exactly one of -c, -x, or -t is required`);e.mode=t}function aI(e,t,n){if(n)return[n,t];let r=e[t+1];return r===void 0?void 0:[r,t+1]}const oI={c:`create`,x:`extract`,t:`list`};function sI(e,t,n,r,i){let a=oI[e];if(a)return{nextIndex:r,error:iI(i,a)};if(e===`z`)return i.gzip=!0,{nextIndex:r};if(e===`v`)return i.verbose=!0,{nextIndex:r};if(e!==`f`&&e!==`C`)return{nextIndex:r,error:rI(`unsupported option -${e}`)};let o=aI(n,r,t);return o?(e===`f`?i.archive=o[0]:i.directory=o[0],{nextIndex:o[1],consumedValue:!0}):{nextIndex:r,error:rI(`option -${e} requires an argument`)}}function cI(e,t,n){let r=e[t];for(let i=1;i<r.length;i++){let a=sI(r[i],r.slice(i+1),e,t,n);if(a.error||a.consumedValue)return a}return{nextIndex:t}}function lI(e){let t={gzip:!1,verbose:!1,directory:`.`,paths:[]};for(let n=0;n<e.length;n++){let r=e[n];if(!r.startsWith(`-`)||r===`-`){t.paths.push(r);continue}if(r.startsWith(`--`))return rI(`unsupported option ${r}`);let i=cI(e,n,t);if(i.error)return i.error;n=i.nextIndex}return t}function uI(e,t){let n=e.replace(/\\/g,`/`).replace(/^\/+/,``).replace(/^(?:\.\/)+/,``);return n?n===`.`?`.`:n.replace(/\/+$/,``):er(t)}async function dI(e,t,n,r){let i=await e.fs.stat(t);if(i.isFile){r.push({path:n,bytes:await e.fs.readFileBuffer(t)});return}if(!i.isDirectory)throw Error(`unsupported file type: ${t}`);let a=n.endsWith(`/`)?n:`${n}/`;r.push({path:a,bytes:new Uint8Array,directory:!0});for(let n of await e.fs.readdir(t))await dI(e,$n(t,n),`${a}${n}`,r)}function fI(e,t){let n=e.length>=2&&e[0]===31&&e[1]===139,r=t||n?Xi(e):e;return Gi(r,{stripNpmPrefix:!1,includeDirectories:!0,preserveRawPaths:!0})}function pI(e,t,n){let r=n.replace(/\\/g,`/`);if(!r||r.startsWith(`/`)||/^[a-zA-Z]:\//.test(r)||r.split(`/`).includes(`..`))return;let i=e.fs.resolvePath(t,r);return cr(t,i)?i:void 0}async function mI(e,t){if(e.paths.length===0)return rI(`create mode requires at least one input path`);let n=[],r=t.fs.resolvePath(t.cwd,e.directory);for(let i of e.paths){let e=t.fs.resolvePath(r,i);await dI(t,e,uI(i,e),n)}let i=t.fs.resolvePath(t.cwd,e.archive),a=Qi(n);return await t.fs.writeFile(i,e.gzip?Vi(a):a),{stdout:e.verbose?`${n.map(e=>e.path).join(`
2144
+ `)}\n`:``,stderr:``,exitCode:0}}async function hI(e,t){if(e.paths.length>0)return rI(`${e.mode} mode does not accept input paths`);let n=t.fs.resolvePath(t.cwd,e.archive),r=fI(await t.fs.readFileBuffer(n),e.gzip);if(e.mode===`list`){let e=r.map(e=>e.path).join(`
2145
+ `);return{stdout:e?`${e}\n`:``,stderr:``,exitCode:0}}let i=t.fs.resolvePath(t.cwd,e.directory);await t.fs.mkdir(i,{recursive:!0});let a=[];for(let e of r){let n=pI(t,i,e.path);if(!n)return rI(`blocked suspicious path ${e.path}`);if(e.directory)await t.fs.mkdir(n,{recursive:!0});else{let r=ar(n);r!==`/`&&await t.fs.mkdir(r,{recursive:!0}),await t.fs.writeFile(n,e.bytes)}a.push(e.path)}return{stdout:e.verbose?`${a.join(`
2146
+ `)}\n`:``,stderr:``,exitCode:0}}function gI(){return S(`tar`,async(e,t)=>{if(e.length===0||e.includes(`--help`)||e.includes(`-h`))return nI();let n=lI(e);return`exitCode`in n?n:n.mode?n.archive?n.mode===`list`&&n.directory!==`.`?rI(`-C is only supported in create or extract mode`):n.mode===`create`?mI(n,t):hI(n,t):rI(`option -f requires an archive path`):rI(`exactly one of -c, -x, or -t is required`)})}var _I=`/**
2147
2147
  * Standalone assertions - no dependency on test runner
2148
2148
  *
2149
2149
  * Each assertion:
@@ -2331,7 +2331,7 @@ function sameMembers(a, b) {
2331
2331
  }
2332
2332
 
2333
2333
  const slice = a => (isPrimitive(a) ? a : a.slice ? a.slice() : Object.assign({}, a))
2334
- `,gI=`/**
2334
+ `,vI=`/**
2335
2335
  * tst - minimal test runner
2336
2336
  *
2337
2337
  * - Standalone assertions (assert.js works anywhere)
@@ -2961,7 +2961,7 @@ function scheduleAutoRun() {
2961
2961
  scheduleAutoRun()
2962
2962
 
2963
2963
  export * from './assert.js'
2964
- `;function _I(e){return{reader:{exists:t=>e.fs.exists(t),isDirectory:async t=>{try{return(await e.fs.stat(t)).isDirectory}catch{return!1}},readFile:t=>e.fs.readFile(t)},readBytes:t=>e.fs.readFileBuffer(t),fromDir:e.cwd}}const vI=`tsc - thin wrapper over the ipk-loaded TypeScript 6 package
2964
+ `;function yI(e){return{reader:{exists:t=>e.fs.exists(t),isDirectory:async t=>{try{return(await e.fs.stat(t)).isDirectory}catch{return!1}},readFile:t=>e.fs.readFile(t)},readBytes:t=>e.fs.readFileBuffer(t),fromDir:e.cwd}}const bI=`tsc - thin wrapper over the ipk-loaded TypeScript 6 package
2965
2965
 
2966
2966
  Usage:
2967
2967
  tsc [options] [files...]
@@ -2985,28 +2985,28 @@ Install:
2985
2985
  Then \`tsc --version\` and the transpile commands above. There is no
2986
2986
  bundled binary, no CDN fallback; a missing package exits non-zero
2987
2987
  with a clear \`ipk add\` hint.
2988
- `;function yI(e){let t=[],n=!1,r=null,i=!1,a=!1;for(let o=0;o<e.length;o++){let s=e[o];if(s===`-h`||s===`--help`){i=!0;continue}if(s===`-v`||s===`--version`){a=!0;continue}if(s===`--noEmit`){n=!0;continue}if(s===`--outDir`){let t=e[o+1];if(typeof t!=`string`||t.startsWith(`-`))throw Error(`tsc: --outDir requires a value`);r=t,o+=1;continue}if(s.startsWith(`--outDir=`)){r=s.slice(9);continue}if(s.startsWith(`-`))throw Error(`tsc: unknown option: ${s}`);t.push(s)}return{files:t,noEmit:n,outDir:r,showHelp:i,showVersion:a}}function bI(e,t){let n=`${er(e).replace(/\.(ts|tsx|mts|cts)$/i,``)}.js`;return t?`${t.endsWith(`/`)?t.slice(0,-1):t}/${n}`:`${ar(e)}/${n}`}async function xI(e,t){let n=t||`/`,r=``;for(;n&&n!==r;){let t=n===`/`?`/tsconfig.json`:`${n}/tsconfig.json`;if(await e.exists(t))return t;r=n,n=ar(n)}return null}function SI(e){return{target:e.ScriptTarget.ES2022,module:e.ModuleKind.ESNext,moduleResolution:e.ModuleResolutionKind.Bundler,esModuleInterop:!0,allowSyntheticDefaultImports:!0,isolatedModules:!0}}function CI(e){if(typeof e!=`object`||!e)return{};let{compilerOptions:t}=e;return t??{}}async function wI(e,t,n){let r=SI(t),i=await xI(e,n);if(!i)return{compilerOptions:{...r}};let a;try{a=await e.readFile(i)}catch{return{compilerOptions:{...r}}}let{config:o,error:s}=t.parseConfigFileTextToJson(i,a);return s||!o?{compilerOptions:{...r}}:{compilerOptions:{...r,...CI(o)}}}function TI(e,t){let n=e.flattenDiagnosticMessageText(t.messageText,`
2989
- `);if(t.file&&typeof t.start==`number`){let{line:e,character:r}=t.file.getLineAndCharacterOfPosition(t.start);return`${t.file.fileName}(${e+1},${r+1}): error TS${t.code}: ${n}`}return`error TS${t.code}: ${n}`}function EI(e,t){let n=t.toLowerCase();return n.endsWith(`.tsx`)?e.ScriptKind.TSX:n.endsWith(`.jsx`)?e.ScriptKind.JSX:n.endsWith(`.js`)||n.endsWith(`.mjs`)||n.endsWith(`.cjs`)?e.ScriptKind.JS:e.ScriptKind.TS}function DI(e,t,n,r,i){let a=e.transpileModule(t,{compilerOptions:r,fileName:n,reportDiagnostics:i});return{outputText:a.outputText,diagnostics:a.diagnostics??[]}}function OI(e,t,n,r){let{outputText:i,diagnostics:a}=DI(e,r,`<stdin>.ts`,n.compilerOptions,!0),o=a.map(t=>TI(e,t)),s=o.length>0?`${o.join(`
2990
- `)}\n`:``;return{stdout:t.noEmit?``:i,stderr:s,exitCode:+(a.length>0)}}async function kI(e,t,n,r,i){let a=t.fs.resolvePath(t.cwd,n);if(!await t.fs.exists(a))return{stderr:`tsc: ${n}: no such file\n`,hadError:!0};let o;try{o=await t.fs.readFile(a)}catch(e){return{stderr:`tsc: ${n}: ${e instanceof Error?e.message:String(e)}\n`,hadError:!0}}EI(e,a);let{outputText:s,diagnostics:c}=DI(e,o,a,i.compilerOptions,!0),l=[];for(let t of c)l.push(`${TI(e,t)}\n`);let u=c.length>0;if(r.noEmit)return{stderr:l.join(``),hadError:u};let d=t.fs.resolvePath(t.cwd,bI(a,r.outDir));try{await t.fs.writeFile(d,s)}catch(e){l.push(`tsc: ${d}: ${e instanceof Error?e.message:String(e)}\n`),u=!0}return{stderr:l.join(``),hadError:u}}async function AI(e,t){let n;try{n=yI(e)}catch(e){return{done:{stdout:``,stderr:`${e instanceof Error?e.message:String(e)}\n`,exitCode:2}}}if(n.showHelp)return{done:{stdout:vI,stderr:``,exitCode:0}};let r;try{r=await Zn(_I(t))}catch(e){return{done:{stdout:``,stderr:`tsc: ${e instanceof Error?e.message:String(e)}\n`,exitCode:1}}}return n.showVersion?{done:{stdout:`Version ${r.version}\n`,stderr:``,exitCode:0}}:{parsed:n,ts:r}}function jI(){return S(`tsc`,async(e,t)=>{let n=await AI(e,t);if(`done`in n)return n.done;let{parsed:r,ts:i}=n,a=await wI(t.fs,i,t.cwd);if(r.files.length===0){let e=P(t.stdin);return e?OI(i,r,a,e):{stdout:vI,stderr:``,exitCode:0}}let o=[],s=!1;for(let e of r.files){let n=await kI(i,t,e,r,a);n.stderr&&o.push(n.stderr),n.hadError&&(s=!0)}return{stdout:``,stderr:o.join(``),exitCode:+!!s}})}const MI=[`**/*.test.{js,ts}`];function NI(e,t){let n,r=1;if(e===`--reporter`)n=t,r=2;else if(e.startsWith(`--reporter=`))n=e.slice(11);else return null;if(n!==`tap`&&n!==`spec`)throw Error(`tst: --reporter must be tap or spec`);return{reporter:n,consumed:r}}function PI(e,t){return e===`--coverage`?{consumed:1}:e===`--coverage-dir`&&t!==void 0?{coverageDir:t,consumed:2}:e.startsWith(`--coverage-dir=`)?{coverageDir:e.slice(15),consumed:1}:null}function FI(e){let t=[],n=`tap`,r=!1,i=!1,a=``;for(let o=0;o<e.length;o++){let s=e[o];if(s===`-h`||s===`--help`){r=!0;continue}let c=NI(s,e[o+1]);if(c){n=c.reporter,c.consumed===2&&(o+=1);continue}let l=PI(s,e[o+1]);if(l){i=!0,l.coverageDir!==void 0&&(a=l.coverageDir),l.consumed===2&&(o+=1);continue}if(s.startsWith(`-`))throw Error(`tst: unknown option: ${s}`);t.push(s)}return{globs:t.length>0?t:[...MI],reporter:n,showHelp:r,coverage:i,coverageDir:a}}function II(e){let t=e.indexOf(`{`);if(t===-1)return[e];let n=e.indexOf(`}`,t);if(n===-1)return[e];let r=e.slice(0,t),i=e.slice(n+1),a=e.slice(t+1,n).split(`,`),o=[];for(let e of a)for(let t of II(`${r}${e}${i}`))o.push(t);return o}function LI(e){let t=``,n=0;for(;n<e.length;){let r=e[n];r===`*`&&e[n+1]===`*`?(t+=`(?:.*/)?`,n+=2,e[n]===`/`&&(n+=1)):r===`*`?(t+=`[^/]*`,n+=1):r===`?`?(t+=`[^/]`,n+=1):`.+^$()[]|\\`.includes(r)?(t+=`\\${r}`,n+=1):(t+=r,n+=1)}return RegExp(`^${t}$`)}async function RI(e,t,n){let r=n.flatMap(II).map(LI),i=new Set,a=t===`/`?``:t;async function o(t){let n;try{n=await e.readdir(t)}catch{return}for(let s of n){if(s===`node_modules`||s.startsWith(`.`))continue;let n=t===`/`?`/${s}`:`${t}/${s}`,c=!1;try{c=(await e.stat(n)).isDirectory}catch{continue}if(c){await o(n);continue}let l=n.startsWith(`${a}/`)?n.slice(a.length+1):n;r.some(e=>e.test(l))&&i.add(n)}}return await o(t),[...i].sort()}let zI=null;async function BI(e){if(zI)return zI;let t={module:e.ModuleKind.CommonJS,target:e.ScriptTarget.ES2022,esModuleInterop:!0,isolatedModules:!1};return zI=`
2988
+ `;function xI(e){let t=[],n=!1,r=null,i=!1,a=!1;for(let o=0;o<e.length;o++){let s=e[o];if(s===`-h`||s===`--help`){i=!0;continue}if(s===`-v`||s===`--version`){a=!0;continue}if(s===`--noEmit`){n=!0;continue}if(s===`--outDir`){let t=e[o+1];if(typeof t!=`string`||t.startsWith(`-`))throw Error(`tsc: --outDir requires a value`);r=t,o+=1;continue}if(s.startsWith(`--outDir=`)){r=s.slice(9);continue}if(s.startsWith(`-`))throw Error(`tsc: unknown option: ${s}`);t.push(s)}return{files:t,noEmit:n,outDir:r,showHelp:i,showVersion:a}}function SI(e,t){let n=`${er(e).replace(/\.(ts|tsx|mts|cts)$/i,``)}.js`;return t?`${t.endsWith(`/`)?t.slice(0,-1):t}/${n}`:`${ar(e)}/${n}`}async function CI(e,t){let n=t||`/`,r=``;for(;n&&n!==r;){let t=n===`/`?`/tsconfig.json`:`${n}/tsconfig.json`;if(await e.exists(t))return t;r=n,n=ar(n)}return null}function wI(e){return{target:e.ScriptTarget.ES2022,module:e.ModuleKind.ESNext,moduleResolution:e.ModuleResolutionKind.Bundler,esModuleInterop:!0,allowSyntheticDefaultImports:!0,isolatedModules:!0}}function TI(e){if(typeof e!=`object`||!e)return{};let{compilerOptions:t}=e;return t??{}}async function EI(e,t,n){let r=wI(t),i=await CI(e,n);if(!i)return{compilerOptions:{...r}};let a;try{a=await e.readFile(i)}catch{return{compilerOptions:{...r}}}let{config:o,error:s}=t.parseConfigFileTextToJson(i,a);return s||!o?{compilerOptions:{...r}}:{compilerOptions:{...r,...TI(o)}}}function DI(e,t){let n=e.flattenDiagnosticMessageText(t.messageText,`
2989
+ `);if(t.file&&typeof t.start==`number`){let{line:e,character:r}=t.file.getLineAndCharacterOfPosition(t.start);return`${t.file.fileName}(${e+1},${r+1}): error TS${t.code}: ${n}`}return`error TS${t.code}: ${n}`}function OI(e,t){let n=t.toLowerCase();return n.endsWith(`.tsx`)?e.ScriptKind.TSX:n.endsWith(`.jsx`)?e.ScriptKind.JSX:n.endsWith(`.js`)||n.endsWith(`.mjs`)||n.endsWith(`.cjs`)?e.ScriptKind.JS:e.ScriptKind.TS}function kI(e,t,n,r,i){let a=e.transpileModule(t,{compilerOptions:r,fileName:n,reportDiagnostics:i});return{outputText:a.outputText,diagnostics:a.diagnostics??[]}}function AI(e,t,n,r){let{outputText:i,diagnostics:a}=kI(e,r,`<stdin>.ts`,n.compilerOptions,!0),o=a.map(t=>DI(e,t)),s=o.length>0?`${o.join(`
2990
+ `)}\n`:``;return{stdout:t.noEmit?``:i,stderr:s,exitCode:+(a.length>0)}}async function jI(e,t,n,r,i){let a=t.fs.resolvePath(t.cwd,n);if(!await t.fs.exists(a))return{stderr:`tsc: ${n}: no such file\n`,hadError:!0};let o;try{o=await t.fs.readFile(a)}catch(e){return{stderr:`tsc: ${n}: ${e instanceof Error?e.message:String(e)}\n`,hadError:!0}}OI(e,a);let{outputText:s,diagnostics:c}=kI(e,o,a,i.compilerOptions,!0),l=[];for(let t of c)l.push(`${DI(e,t)}\n`);let u=c.length>0;if(r.noEmit)return{stderr:l.join(``),hadError:u};let d=t.fs.resolvePath(t.cwd,SI(a,r.outDir));try{await t.fs.writeFile(d,s)}catch(e){l.push(`tsc: ${d}: ${e instanceof Error?e.message:String(e)}\n`),u=!0}return{stderr:l.join(``),hadError:u}}async function MI(e,t){let n;try{n=xI(e)}catch(e){return{done:{stdout:``,stderr:`${e instanceof Error?e.message:String(e)}\n`,exitCode:2}}}if(n.showHelp)return{done:{stdout:bI,stderr:``,exitCode:0}};let r;try{r=await Zn(yI(t))}catch(e){return{done:{stdout:``,stderr:`tsc: ${e instanceof Error?e.message:String(e)}\n`,exitCode:1}}}return n.showVersion?{done:{stdout:`Version ${r.version}\n`,stderr:``,exitCode:0}}:{parsed:n,ts:r}}function NI(){return S(`tsc`,async(e,t)=>{let n=await MI(e,t);if(`done`in n)return n.done;let{parsed:r,ts:i}=n,a=await EI(t.fs,i,t.cwd);if(r.files.length===0){let e=P(t.stdin);return e?AI(i,r,a,e):{stdout:bI,stderr:``,exitCode:0}}let o=[],s=!1;for(let e of r.files){let n=await jI(i,t,e,r,a);n.stderr&&o.push(n.stderr),n.hadError&&(s=!0)}return{stdout:``,stderr:o.join(``),exitCode:+!!s}})}const PI=[`**/*.test.{js,ts}`];function FI(e,t){let n,r=1;if(e===`--reporter`)n=t,r=2;else if(e.startsWith(`--reporter=`))n=e.slice(11);else return null;if(n!==`tap`&&n!==`spec`)throw Error(`tst: --reporter must be tap or spec`);return{reporter:n,consumed:r}}function II(e,t){return e===`--coverage`?{consumed:1}:e===`--coverage-dir`&&t!==void 0?{coverageDir:t,consumed:2}:e.startsWith(`--coverage-dir=`)?{coverageDir:e.slice(15),consumed:1}:null}function LI(e){let t=[],n=`tap`,r=!1,i=!1,a=``;for(let o=0;o<e.length;o++){let s=e[o];if(s===`-h`||s===`--help`){r=!0;continue}let c=FI(s,e[o+1]);if(c){n=c.reporter,c.consumed===2&&(o+=1);continue}let l=II(s,e[o+1]);if(l){i=!0,l.coverageDir!==void 0&&(a=l.coverageDir),l.consumed===2&&(o+=1);continue}if(s.startsWith(`-`))throw Error(`tst: unknown option: ${s}`);t.push(s)}return{globs:t.length>0?t:[...PI],reporter:n,showHelp:r,coverage:i,coverageDir:a}}function RI(e){let t=e.indexOf(`{`);if(t===-1)return[e];let n=e.indexOf(`}`,t);if(n===-1)return[e];let r=e.slice(0,t),i=e.slice(n+1),a=e.slice(t+1,n).split(`,`),o=[];for(let e of a)for(let t of RI(`${r}${e}${i}`))o.push(t);return o}function zI(e){let t=``,n=0;for(;n<e.length;){let r=e[n];r===`*`&&e[n+1]===`*`?(t+=`(?:.*/)?`,n+=2,e[n]===`/`&&(n+=1)):r===`*`?(t+=`[^/]*`,n+=1):r===`?`?(t+=`[^/]`,n+=1):`.+^$()[]|\\`.includes(r)?(t+=`\\${r}`,n+=1):(t+=r,n+=1)}return RegExp(`^${t}$`)}async function BI(e,t,n){let r=n.flatMap(RI).map(zI),i=new Set,a=t===`/`?``:t;async function o(t){let n;try{n=await e.readdir(t)}catch{return}for(let s of n){if(s===`node_modules`||s.startsWith(`.`))continue;let n=t===`/`?`/${s}`:`${t}/${s}`,c=!1;try{c=(await e.stat(n)).isDirectory}catch{continue}if(c){await o(n);continue}let l=n.startsWith(`${a}/`)?n.slice(a.length+1):n;r.some(e=>e.test(l))&&i.add(n)}}return await o(t),[...i].sort()}let VI=null;async function HI(e){if(VI)return VI;let t={module:e.ModuleKind.CommonJS,target:e.ScriptTarget.ES2022,esModuleInterop:!0,isolatedModules:!1};return VI=`
2991
2991
  if (typeof process !== 'undefined' && !process.versions) {
2992
2992
  try { process.versions = { node: '20.0.0' }; } catch (_) { /* readonly process.versions is fine */ }
2993
2993
  }
2994
2994
  const __tst_assert_exports = (function () {
2995
2995
  const module = { exports: {} };
2996
2996
  const exports = module.exports;
2997
- ${e.transpileModule(hI,{compilerOptions:t,fileName:`assert.js`}).outputText}
2997
+ ${e.transpileModule(_I,{compilerOptions:t,fileName:`assert.js`}).outputText}
2998
2998
  return module.exports;
2999
2999
  })();
3000
3000
  const __tst_module_exports = (function () {
3001
3001
  const module = { exports: {} };
3002
3002
  const exports = module.exports;
3003
- ${e.transpileModule(gI,{compilerOptions:t,fileName:`tst.js`}).outputText.replace(/require\(["']\.\/assert\.js["']\)/g,`__tst_assert_exports`).replace(/\bimport\.meta\b/g,`({url:""})`).replace(/await\s+import\(['"](?:worker_threads|fs|path)['"]\)/g,`await Promise.reject(new Error("tst: fork mode is not supported in the realm"))`)}
3003
+ ${e.transpileModule(vI,{compilerOptions:t,fileName:`tst.js`}).outputText.replace(/require\(["']\.\/assert\.js["']\)/g,`__tst_assert_exports`).replace(/\bimport\.meta\b/g,`({url:""})`).replace(/await\s+import\(['"](?:worker_threads|fs|path)['"]\)/g,`await Promise.reject(new Error("tst: fork mode is not supported in the realm"))`)}
3004
3004
  return module.exports;
3005
3005
  })();
3006
3006
  const __tst = __tst_module_exports.default || __tst_module_exports;
3007
3007
  __tst.manual = true;
3008
- `.trim(),zI}function VI(e,t=new Map){return e.replace(/(^|[^\w$.])require\(\s*(["'`])([^"'`]+)\2\s*\)/g,(e,n,r,i)=>i===`tst`||i===`tst/tst.js`?`${n}__tstReq("tst")`:i===`tst/assert`||i===`tst/assert.js`?`${n}__tstReq("tst/assert")`:t.has(i)?`${n}__localReq(${JSON.stringify(t.get(i))})`:e)}function HI(e){let t=new Set,n=/(?:^|[^\w$.])require\(\s*(["'`])([^"'`]+)\1\s*\)/g,r;for(;(r=n.exec(e))!==null;)t.add(r[2]);return[...t]}async function UI(e,t,n){let r=b(`${t}/${n}`),i=[r];r.endsWith(`.js`)&&i.push(`${r.slice(0,-3)}.ts`),/\.[a-zA-Z0-9]+$/.test(r)||i.push(`${r}.ts`,`${r}.js`);for(let t of i)if(await e.exists(t))return t;return null}async function WI(e,t,n,r,i,a){let o=new Map,s=new Map,c=[{path:n,cjs:r}];for(;c.length>0;){let{path:n,cjs:r}=c.shift(),l=ar(n),u=new Map;for(let n of HI(r)){if(!n.startsWith(`./`)&&!n.startsWith(`../`))continue;let r=await UI(e,l,n);if(!r||(u.set(n,r),o.has(r)))continue;let s=await e.readFile(r);a&&(s=a(s,r));let d=t.transpileModule(s,{compilerOptions:i,fileName:r}).outputText;o.set(r,d),c.push({path:r,cjs:d})}s.set(n,u)}return{modules:o,edgeRewrites:s}}function GI(e,t,n,r,i,a,o=``,s=``){let c=r===`spec`?`pretty`:`tap`,l=[];for(let[e,t]of i.entries()){let n=VI(t,a.get(e)??new Map);l.push(`${JSON.stringify(e)}: function (module, exports, require) {\n${n}\n}`)}let u=`{${l.join(`,
3009
- `)}}`,d=VI(n,a.get(t)??new Map),f=o,p=s;return`"use strict";
3008
+ `.trim(),VI}function UI(e,t=new Map){return e.replace(/(^|[^\w$.])require\(\s*(["'`])([^"'`]+)\2\s*\)/g,(e,n,r,i)=>i===`tst`||i===`tst/tst.js`?`${n}__tstReq("tst")`:i===`tst/assert`||i===`tst/assert.js`?`${n}__tstReq("tst/assert")`:t.has(i)?`${n}__localReq(${JSON.stringify(t.get(i))})`:e)}function WI(e){let t=new Set,n=/(?:^|[^\w$.])require\(\s*(["'`])([^"'`]+)\1\s*\)/g,r;for(;(r=n.exec(e))!==null;)t.add(r[2]);return[...t]}async function GI(e,t,n){let r=b(`${t}/${n}`),i=[r];r.endsWith(`.js`)&&i.push(`${r.slice(0,-3)}.ts`),/\.[a-zA-Z0-9]+$/.test(r)||i.push(`${r}.ts`,`${r}.js`);for(let t of i)if(await e.exists(t))return t;return null}async function KI(e,t,n,r,i,a){let o=new Map,s=new Map,c=[{path:n,cjs:r}];for(;c.length>0;){let{path:n,cjs:r}=c.shift(),l=ar(n),u=new Map;for(let n of WI(r)){if(!n.startsWith(`./`)&&!n.startsWith(`../`))continue;let r=await GI(e,l,n);if(!r||(u.set(n,r),o.has(r)))continue;let s=await e.readFile(r);a&&(s=a(s,r));let d=t.transpileModule(s,{compilerOptions:i,fileName:r}).outputText;o.set(r,d),c.push({path:r,cjs:d})}s.set(n,u)}return{modules:o,edgeRewrites:s}}function qI(e,t,n,r,i,a,o=``,s=``){let c=r===`spec`?`pretty`:`tap`,l=[];for(let[e,t]of i.entries()){let n=UI(t,a.get(e)??new Map);l.push(`${JSON.stringify(e)}: function (module, exports, require) {\n${n}\n}`)}let u=`{${l.join(`,
3009
+ `)}}`,d=UI(n,a.get(t)??new Map),f=o,p=s;return`"use strict";
3010
3010
  ${f}${e}
3011
3011
  const __realmRequire = require;
3012
3012
  const { createRequire: __createRequire } = __realmRequire("module");
@@ -3049,7 +3049,7 @@ await Promise.resolve();
3049
3049
  await new Promise((resolve) => setTimeout(resolve));
3050
3050
  ${p}
3051
3051
  if (__state && __state.failed && __state.failed.length > 0) process.exit(1);
3052
- `}const KI={esModuleInterop:!0,allowJs:!0,isolatedModules:!1};function qI(e){return{module:e.ModuleKind.CommonJS,target:e.ScriptTarget.ES2022,...KI}}async function JI(e,t){let n;try{n=FI(e)}catch(e){return{done:{stdout:``,stderr:`${e instanceof Error?e.message:String(e)}\n`,exitCode:2}}}if(n.showHelp)return{done:{stdout:`tst - run *.test.{js,ts} files with the bundled tst runner
3052
+ `}const JI={esModuleInterop:!0,allowJs:!0,isolatedModules:!1};function YI(e){return{module:e.ModuleKind.CommonJS,target:e.ScriptTarget.ES2022,...JI}}async function XI(e,t){let n;try{n=LI(e)}catch(e){return{done:{stdout:``,stderr:`${e instanceof Error?e.message:String(e)}\n`,exitCode:2}}}if(n.showHelp)return{done:{stdout:`tst - run *.test.{js,ts} files with the bundled tst runner
3053
3053
 
3054
3054
  Usage:
3055
3055
  tst [options] [glob...]
@@ -3071,7 +3071,7 @@ Notes:
3071
3071
  with statement counters. nyc/c8 cannot wrap this runner: it is not a
3072
3072
  Node child. Istanbul/Babel are not bundled (webapp size-limit); the
3073
3073
  TypeScript AST already in process does the rewrite.
3074
- `,stderr:``,exitCode:0}};let r=await RI(t.fs,t.cwd,n.globs);if(r.length===0)return{done:{stdout:``,stderr:`tst: no test files matched ${n.globs.join(` `)}\n`,exitCode:1}};let i;try{i=await Zn(_I(t))}catch(e){return{done:{stdout:``,stderr:`tst: ${e instanceof Error?e.message:String(e)}\n`,exitCode:1}}}let a=await BI(i),o=n.coverage?await import(`./coverage-instrument-CjoHgKzK.js`):null;return{parsed:n,files:r,ts:i,harness:a,userOpts:qI(i),coverageMaps:{},coverageCounts:{},coverageMod:o}}function YI(e){return e.includes(`# fail `)||/(^|\n)not ok /.test(e)}async function XI(e,t,n,r){let{ts:i,harness:a,userOpts:o,parsed:s}=t,c=t.coverageMod,l=c?(e,n)=>{let{source:r,map:a}=c.instrumentSource(i,e,n);return t.coverageMaps[n]=a,r}:void 0,u;try{u=await e.fs.readFile(n)}catch(e){return{stdout:``,stderr:`tst: ${n}: ${e instanceof Error?e.message:String(e)}\n`,failed:!0}}l&&(u=l(u,n));let d;try{d=i.transpileModule(u,{compilerOptions:o,fileName:n}).outputText}catch(e){return{stdout:``,stderr:`tst: ${n}: transpile error: ${e instanceof Error?e.message:String(e)}\n`,failed:!0}}let f,p;try{({modules:f,edgeRewrites:p}=await WI(e.fs,i,n,d,o,l))}catch(e){return{stdout:``,stderr:`tst: ${n}: local-require resolve error: ${e instanceof Error?e.message:String(e)}\n`,failed:!0}}let m=GI(a,n,d,s.reporter,f,p,c?`${c.coverageRuntimeSource()}\n`:``,c?`\n${c.coverageDumpSource()}`:``),h=await Hr(m,[`node`,n],e,void 0,{filename:n}),g=h.stdout;if(c){let e=c.extractCoverageCounts(g);g=e.stdout,c.mergeCounts(t.coverageCounts,e.counts)}return{stdout:r?`# ${n}\n${g}`:g,stderr:h.stderr,failed:h.exitCode!==0||YI(g)}}function ZI(){return S(`tst`,async(e,t)=>{let n=await JI(e,t);if(`done`in n)return n.done;let r=n.files.length>1,i=``,a=``,o=!1;for(let e of n.files){let s=await XI(t,n,e,r);i+=s.stdout,a+=s.stderr,s.failed&&(o=!0)}if(n.coverageMod){let e=n.coverageMod.resolveCoverageDir(t.cwd,n.parsed.coverageDir,(e,n)=>t.fs.resolvePath(e,n)),r=JSON.stringify({counts:n.coverageCounts,maps:n.coverageMaps},null,2),s=n.coverageMod.toLcov(n.coverageCounts,n.coverageMaps),c=n.coverageMod.coverageSummary(n.coverageCounts,n.coverageMaps);try{await t.fs.writeFile(`${e}/coverage.json`,r),await t.fs.writeFile(`${e}/coverage.lcov`,s)}catch(t){a+=`tst: writing coverage to ${e}: ${t instanceof Error?t.message:String(t)}\n`,o=!0}i+=`\n${c}`}return{stdout:i,stderr:a,exitCode:+!!o}})}const QI=[],$I=`usage: theme <subcommand> [args]
3074
+ `,stderr:``,exitCode:0}};let r=await BI(t.fs,t.cwd,n.globs);if(r.length===0)return{done:{stdout:``,stderr:`tst: no test files matched ${n.globs.join(` `)}\n`,exitCode:1}};let i;try{i=await Zn(yI(t))}catch(e){return{done:{stdout:``,stderr:`tst: ${e instanceof Error?e.message:String(e)}\n`,exitCode:1}}}let a=await HI(i),o=n.coverage?await import(`./coverage-instrument-CjoHgKzK.js`):null;return{parsed:n,files:r,ts:i,harness:a,userOpts:YI(i),coverageMaps:{},coverageCounts:{},coverageMod:o}}function ZI(e){return e.includes(`# fail `)||/(^|\n)not ok /.test(e)}async function QI(e,t,n,r){let{ts:i,harness:a,userOpts:o,parsed:s}=t,c=t.coverageMod,l=c?(e,n)=>{let{source:r,map:a}=c.instrumentSource(i,e,n);return t.coverageMaps[n]=a,r}:void 0,u;try{u=await e.fs.readFile(n)}catch(e){return{stdout:``,stderr:`tst: ${n}: ${e instanceof Error?e.message:String(e)}\n`,failed:!0}}l&&(u=l(u,n));let d;try{d=i.transpileModule(u,{compilerOptions:o,fileName:n}).outputText}catch(e){return{stdout:``,stderr:`tst: ${n}: transpile error: ${e instanceof Error?e.message:String(e)}\n`,failed:!0}}let f,p;try{({modules:f,edgeRewrites:p}=await KI(e.fs,i,n,d,o,l))}catch(e){return{stdout:``,stderr:`tst: ${n}: local-require resolve error: ${e instanceof Error?e.message:String(e)}\n`,failed:!0}}let m=qI(a,n,d,s.reporter,f,p,c?`${c.coverageRuntimeSource()}\n`:``,c?`\n${c.coverageDumpSource()}`:``),h=await Hr(m,[`node`,n],e,void 0,{filename:n}),g=h.stdout;if(c){let e=c.extractCoverageCounts(g);g=e.stdout,c.mergeCounts(t.coverageCounts,e.counts)}return{stdout:r?`# ${n}\n${g}`:g,stderr:h.stderr,failed:h.exitCode!==0||ZI(g)}}function $I(){return S(`tst`,async(e,t)=>{let n=await XI(e,t);if(`done`in n)return n.done;let r=n.files.length>1,i=``,a=``,o=!1;for(let e of n.files){let s=await QI(t,n,e,r);i+=s.stdout,a+=s.stderr,s.failed&&(o=!0)}if(n.coverageMod){let e=n.coverageMod.resolveCoverageDir(t.cwd,n.parsed.coverageDir,(e,n)=>t.fs.resolvePath(e,n)),r=JSON.stringify({counts:n.coverageCounts,maps:n.coverageMaps},null,2),s=n.coverageMod.toLcov(n.coverageCounts,n.coverageMaps),c=n.coverageMod.coverageSummary(n.coverageCounts,n.coverageMaps);try{await t.fs.writeFile(`${e}/coverage.json`,r),await t.fs.writeFile(`${e}/coverage.lcov`,s)}catch(t){a+=`tst: writing coverage to ${e}: ${t instanceof Error?t.message:String(t)}\n`,o=!0}i+=`\n${c}`}return{stdout:i,stderr:a,exitCode:+!!o}})}const eL=[],tL=`usage: theme <subcommand> [args]
3075
3075
 
3076
3076
  Subcommands:
3077
3077
  list List available preset and custom themes
@@ -3080,23 +3080,23 @@ Subcommands:
3080
3080
  reset Reset to the default theme
3081
3081
  current Show the currently active theme
3082
3082
  export <id> <path> Export a theme to a VFS path
3083
- `;function eL(e,t){return{stdout:``,stderr:`theme ${e}: ${t}\n`,exitCode:1}}function tL(){return S(`theme`,async(e,t)=>{if(e.length===0||e[0]===`--help`||e[0]===`-h`)return{stdout:$I,stderr:``,exitCode:0};let n=e[0];return w(e.slice(1),{valueFlags:QI})?{stdout:$e(`theme`,n,$I),stderr:``,exitCode:0}:n===`list`?nL(e):n===`current`?rL(e):n===`reset`?iL(e):n===`apply`?aL(e.slice(1),t):n===`export`?oL(e.slice(1),t):{stdout:``,stderr:`theme: unknown subcommand "${n}"\n${$I}`,exitCode:1}})}async function nL(e){let t=C(e.slice(1),{value:QI});if(`error`in t)return eL(`list`,t.error);let{PRESETS:n}=await import(`./theme-presets-xiOb9AFN.js`),r=[`Presets:`];for(let e of n)r.push(` ${e.id.padEnd(16)} ${e.name}`);return r.push(``),{stdout:r.join(`
3084
- `),stderr:``,exitCode:0}}async function rL(e){let t=C(e.slice(1),{value:QI});return`error`in t?eL(`current`,t.error):{stdout:`Check the Theme settings dialog for the active theme.
3085
- `,stderr:``,exitCode:0}}async function iL(e){let t=C(e.slice(1),{value:QI});if(`error`in t)return eL(`reset`,t.error);let n=y();return n?(await n.call(`theme-apply`,{action:`reset`}),{stdout:`Theme reset to default.
3083
+ `;function nL(e,t){return{stdout:``,stderr:`theme ${e}: ${t}\n`,exitCode:1}}function rL(){return S(`theme`,async(e,t)=>{if(e.length===0||e[0]===`--help`||e[0]===`-h`)return{stdout:tL,stderr:``,exitCode:0};let n=e[0];return w(e.slice(1),{valueFlags:eL})?{stdout:$e(`theme`,n,tL),stderr:``,exitCode:0}:n===`list`?iL(e):n===`current`?aL(e):n===`reset`?oL(e):n===`apply`?sL(e.slice(1),t):n===`export`?cL(e.slice(1),t):{stdout:``,stderr:`theme: unknown subcommand "${n}"\n${tL}`,exitCode:1}})}async function iL(e){let t=C(e.slice(1),{value:eL});if(`error`in t)return nL(`list`,t.error);let{PRESETS:n}=await import(`./theme-presets-xiOb9AFN.js`),r=[`Presets:`];for(let e of n)r.push(` ${e.id.padEnd(16)} ${e.name}`);return r.push(``),{stdout:r.join(`
3084
+ `),stderr:``,exitCode:0}}async function aL(e){let t=C(e.slice(1),{value:eL});return`error`in t?nL(`current`,t.error):{stdout:`Check the Theme settings dialog for the active theme.
3085
+ `,stderr:``,exitCode:0}}async function oL(e){let t=C(e.slice(1),{value:eL});if(`error`in t)return nL(`reset`,t.error);let n=y();return n?(await n.call(`theme-apply`,{action:`reset`}),{stdout:`Theme reset to default.
3086
3086
  `,stderr:``,exitCode:0}):{stdout:``,stderr:`theme: no panel-RPC connection available
3087
- `,exitCode:1}}async function aL(e,t){let n=C(e,{value:QI});if(`error`in n)return eL(`apply`,n.error);if(n.positionals.length===0)return{stdout:``,stderr:`theme apply: missing theme id or path
3087
+ `,exitCode:1}}async function sL(e,t){let n=C(e,{value:eL});if(`error`in n)return nL(`apply`,n.error);if(n.positionals.length===0)return{stdout:``,stderr:`theme apply: missing theme id or path
3088
3088
  `,exitCode:1};let r=y();if(!r)return{stdout:``,stderr:`theme: no panel-RPC connection available
3089
3089
  `,exitCode:1};let i=n.positionals[0],{PRESETS:a}=await import(`./theme-presets-xiOb9AFN.js`),o=a.find(e=>e.id===i);if(o){let e=JSON.stringify(o);return await r.call(`theme-apply`,{themeJson:e,action:`apply`}),{stdout:`Applied theme: ${o.name}\n`,stderr:``,exitCode:0}}let s=t.fs.resolvePath(t.cwd,i),c;try{c=await t.fs.readFile(s)}catch{return{stdout:``,stderr:`theme apply: "${i}" is not a known preset id and file not found at ${s}\n`,exitCode:1}}try{let e=JSON.parse(c);if(!e.id||!e.name||!e.base||!e.tokens)return{stdout:``,stderr:`theme apply: invalid theme file (missing id, name, base, or tokens)
3090
3090
  `,exitCode:1}}catch{return{stdout:``,stderr:`theme apply: file is not valid JSON
3091
- `,exitCode:1}}return{stdout:`Applied theme: ${(await r.call(`theme-apply`,{themeJson:c,action:`apply`})).applied}\n`,stderr:``,exitCode:0}}async function oL(e,t){let n=C(e,{value:QI});if(`error`in n)return eL(`export`,n.error);if(n.positionals.length<2)return{stdout:``,stderr:`theme export: usage: theme export <id> <path>
3092
- `,exitCode:1};let[r,i]=n.positionals,{PRESETS:a}=await import(`./theme-presets-xiOb9AFN.js`),o=a.find(e=>e.id===r);if(!o)return{stdout:``,stderr:`theme export: unknown preset id "${r}"\n`,exitCode:1};let s=t.fs.resolvePath(t.cwd,i);try{await t.fs.writeFile(s,JSON.stringify(o,null,2))}catch(e){return{stdout:``,stderr:`theme export: write failed: ${e instanceof Error?e.message:String(e)}\n`,exitCode:1}}return{stdout:`Exported "${o.name}" to ${s}\n`,stderr:``,exitCode:0}}const sL=`unknown`,cL=`usage: uname [-amnorsv]`,lL=[`s`,`n`,`r`,`v`,`m`,`o`];function uL(){return{stdout:[cL,` -s kernel name (SLICC) -n nodename (leader/follower/standalone)`,` -r release (SLICC version) -v build stamp`,` -m machine (realm platform) -o operating system (user agent)`,` -a all of the above, in uname order`,``].join(`
3093
- `),stderr:``,exitCode:0}}function dL(){let{releasedAt:e,buildId:t}=Ke();return e?`${t} (${e})`:t}function fL(){let e=globalThis.navigator,t=e?.userAgentData?.platform||e?.platform;return typeof t==`string`&&t.length>0?t:sL}function pL(){let e=globalThis.navigator?.userAgent;return typeof e==`string`&&e.length>0?e:sL}function mL(e){switch(e){case`s`:return`SLICC`;case`n`:return Ge();case`r`:return Ke().version;case`v`:return dL();case`m`:return fL();case`o`:return pL()}}function hL(e){return{stdout:``,stderr:`uname: ${e}\n${cL}\n`,exitCode:1}}function gL(e){let t=new Set;for(let n of e){if(!n.startsWith(`-`)||n===`-`)return{error:`extra operand '${n}'`};if(n.startsWith(`--`))return{error:`unrecognized option '${n}'`};for(let e of n.slice(1)){if(e===`a`){for(let e of lL)t.add(e);continue}if(!lL.includes(e))return{error:`unrecognized option '-${e}'`};t.add(e)}}return t}function _L(){return S(`uname`,async e=>{if(e.includes(`--help`)||e.includes(`-h`))return uL();let t=gL(e);return`error`in t?hL(t.error):{stdout:`${(t.size>0?lL.filter(e=>t.has(e)):[`s`]).map(mL).join(` `)}\n`,stderr:``,exitCode:0}})}function vL(){return S(`unlink`,async(e,t)=>{if(e.includes(`--help`))return{stdout:`Usage: unlink FILE
3091
+ `,exitCode:1}}return{stdout:`Applied theme: ${(await r.call(`theme-apply`,{themeJson:c,action:`apply`})).applied}\n`,stderr:``,exitCode:0}}async function cL(e,t){let n=C(e,{value:eL});if(`error`in n)return nL(`export`,n.error);if(n.positionals.length<2)return{stdout:``,stderr:`theme export: usage: theme export <id> <path>
3092
+ `,exitCode:1};let[r,i]=n.positionals,{PRESETS:a}=await import(`./theme-presets-xiOb9AFN.js`),o=a.find(e=>e.id===r);if(!o)return{stdout:``,stderr:`theme export: unknown preset id "${r}"\n`,exitCode:1};let s=t.fs.resolvePath(t.cwd,i);try{await t.fs.writeFile(s,JSON.stringify(o,null,2))}catch(e){return{stdout:``,stderr:`theme export: write failed: ${e instanceof Error?e.message:String(e)}\n`,exitCode:1}}return{stdout:`Exported "${o.name}" to ${s}\n`,stderr:``,exitCode:0}}const lL=`unknown`,uL=`usage: uname [-amnorsv]`,dL=[`s`,`n`,`r`,`v`,`m`,`o`];function fL(){return{stdout:[uL,` -s kernel name (SLICC) -n nodename (leader/follower/standalone)`,` -r release (SLICC version) -v build stamp`,` -m machine (realm platform) -o operating system (user agent)`,` -a all of the above, in uname order`,``].join(`
3093
+ `),stderr:``,exitCode:0}}function pL(){let{releasedAt:e,buildId:t}=Ke();return e?`${t} (${e})`:t}function mL(){let e=globalThis.navigator,t=e?.userAgentData?.platform||e?.platform;return typeof t==`string`&&t.length>0?t:lL}function hL(){let e=globalThis.navigator?.userAgent;return typeof e==`string`&&e.length>0?e:lL}function gL(e){switch(e){case`s`:return`SLICC`;case`n`:return Ge();case`r`:return Ke().version;case`v`:return pL();case`m`:return mL();case`o`:return hL()}}function _L(e){return{stdout:``,stderr:`uname: ${e}\n${uL}\n`,exitCode:1}}function vL(e){let t=new Set;for(let n of e){if(!n.startsWith(`-`)||n===`-`)return{error:`extra operand '${n}'`};if(n.startsWith(`--`))return{error:`unrecognized option '${n}'`};for(let e of n.slice(1)){if(e===`a`){for(let e of dL)t.add(e);continue}if(!dL.includes(e))return{error:`unrecognized option '-${e}'`};t.add(e)}}return t}function yL(){return S(`uname`,async e=>{if(e.includes(`--help`)||e.includes(`-h`))return fL();let t=vL(e);return`error`in t?_L(t.error):{stdout:`${(t.size>0?dL.filter(e=>t.has(e)):[`s`]).map(gL).join(` `)}\n`,stderr:``,exitCode:0}})}function bL(){return S(`unlink`,async(e,t)=>{if(e.includes(`--help`))return{stdout:`Usage: unlink FILE
3094
3094
  Remove FILE. Symbolic links are removed without following their target.
3095
3095
  `,stderr:``,exitCode:0};if(e.length!==1||e[0].startsWith(`-`))return{stdout:``,stderr:e.length===0?`unlink: missing operand
3096
3096
  `:`unlink: extra operand
3097
- `,exitCode:1};let n=t.fs.resolvePath(t.cwd,e[0]);try{let r=t.fs.lstat?await t.fs.lstat(n):await t.fs.stat(n);return r.isDirectory&&!r.isSymbolicLink?{stdout:``,stderr:`unlink: cannot unlink '${e[0]}': Is a directory\n`,exitCode:1}:(await t.fs.rm(n,{recursive:!1,force:!1}),{stdout:``,stderr:``,exitCode:0})}catch(t){let n=t instanceof Error?t.message:String(t);return{stdout:``,stderr:`unlink: cannot unlink '${e[0]}': ${n}\n`,exitCode:1}}})}function yL(){return{stdout:`usage: unzip <archive.zip> [-d <destination>]
3098
- `,stderr:``,exitCode:0}}function bL(e){let t=`.`,n=[];for(let r=0;r<e.length;r++){let i=e[r];if(i===`-d`){t=e[r+1]??``,r++;continue}if(i.startsWith(`-`))return{kind:`error`,result:{stdout:``,stderr:`unzip: unsupported option ${i}\n`,exitCode:1}};n.push(i)}return n.length<1?{kind:`error`,result:{stdout:``,stderr:`unzip: expected archive path
3099
- `,exitCode:1}}:{kind:`ok`,archive:n[0],destination:t||`.`}}async function xL(e,t,n,r){let i=n.replace(/\\/g,`/`);if(!i||i.endsWith(`/`))return!1;let a=e.fs.resolvePath(t,i);if(!cr(t,a))return{stdout:``,stderr:`unzip: blocked suspicious path ${n}\n`,exitCode:1};let o=ar(a);return o!==`/`&&await e.fs.mkdir(o,{recursive:!0}),await e.fs.writeFile(a,r),!0}function SL(){return S(`unzip`,async(e,t)=>{if(e.length===0||e.includes(`--help`)||e.includes(`-h`))return yL();let n=bL(e);if(n.kind===`error`)return n.result;let r=t.fs.resolvePath(t.cwd,n.archive),i=t.fs.resolvePath(t.cwd,n.destination);await t.fs.mkdir(i,{recursive:!0});let a=await t.fs.readFileBuffer(r),o=xt(a),s=0;for(let[e,n]of Object.entries(o)){let r=await xL(t,i,e,n);if(r===!0)s++;else if(r!==!1)return r}return{stdout:`extracted ${s} file(s) to ${i}\n`,stderr:``,exitCode:0}})}const CL=`ai-ecoverse/slicc`,wL=`usage: upgrade status | upgrade apply --from=<version> --to=<version>`,TL=`packages/vfs-root`,EL=3e4,DL=[`${TL}/workspace/skills/`,`${TL}/shared/sprinkles/`,`${TL}/shared/sounds/`,`${TL}/shared/GELATIERE.md`,`${TL}/shared/wiki/WIKI.md`,`${TL}/etc/`],OL=[`auto-applied`,`merged-clean`,`kept-local`,`needs-review`,`unchanged`,`added-new`];function kL(){return Object.fromEntries(OL.map(e=>[e,0]))}function AL(e,t,n,r){let i=kL();for(let e of n)i[e.classification]+=1;return`${JSON.stringify({ok:r.length===0&&i[`needs-review`]===0,from:e,to:t,results:n.map(({path:e,classification:t,sidecar:n})=>({path:e,status:t,...n?{sidecar:n}:{}})),summary:i,errors:r})}\n`}function jL(e){if(e[0]!==`apply`)throw Error(wL);let t=new Map;for(let n of e.slice(1)){let e=n.match(/^--(from|to)=(.+)$/);if(!e)throw Error(`unsupported argument: ${n}`);t.set(e[1],e[2])}let n=t.get(`from`)??``,r=t.get(`to`)??``,i=/^v?[0-9][0-9A-Za-z.+_-]*$/;if(!i.test(n)||!i.test(r))throw Error(`both --from and --to must be release versions`);return{from:n,to:r}}function ML(e){return e.startsWith(`v`)?e:`v${e}`}function NL(e){if(!DL.some(t=>e.startsWith(t)))return null;let t=e.slice(17);return!t||t.split(`/`).some(e=>e===`.`||e===`..`)?null:t}async function PL(e,t){let n,r;try{n=await Promise.race([e(t,{method:`GET`,headers:{Accept:`application/json`}}),new Promise((e,t)=>{r=setTimeout(()=>t(Error(`request timed out after ${EL}ms`)),EL)})])}catch(e){let n=e instanceof Error?e.message:String(e);throw Error(`fetch failed for ${t}: ${n}`)}finally{r!==void 0&&clearTimeout(r)}if(n.status<200||n.status>=300)throw Error(`fetch failed for ${t}: HTTP ${n.status} ${n.statusText}`);return n}async function FL(e,t){let n=await PL(t,`https://api.github.com/repos/${CL}/git/trees/${encodeURIComponent(e)}?recursive=1`),r=ue(n.body);if(r.truncated)throw Error(`bundled file discovery was truncated for ${e}`);if(!Array.isArray(r.tree))throw Error(`invalid bundled file discovery response for ${e}`);let i=new Map;for(let e of r.tree){if(e.type!==`blob`||typeof e.path!=`string`)continue;let t=NL(e.path);t&&i.set(t,e.path)}return i}function IL(e,t){let n=t.split(`/`).map(encodeURIComponent).join(`/`);return`https://raw.githubusercontent.com/${CL}/${encodeURIComponent(e)}/${n}`}function LL(e,t){return!e||!t||e.byteLength!==t.byteLength?!1:e.every((e,n)=>e===t[n])}function RL(e){try{return new TextDecoder(`utf-8`,{fatal:!0}).decode(e)}catch{return null}}async function zL(e,t){if(!await e.exists(t))return;let n=await e.readFile(t,{encoding:`binary`});return n instanceof Uint8Array?n:new TextEncoder().encode(n)}async function BL(e,t,n,r,i){let a=`${t}.upgrade-${ML(n)}-to-${ML(r)}.conflict`;if(!i.has(a)&&!await e.exists(a))return i.add(a),a;for(let t=1;;t+=1){let n=`${a}.${t}`;if(!i.has(n)&&!await e.exists(n))return i.add(n),n}}async function VL(e,t,n,r,i,a,o){let s=await zL(e.fs,t);if(!a)return{path:t,classification:s?`kept-local`:`unchanged`};if(!i)return s?{path:t,classification:LL(s,a)?`unchanged`:`kept-local`}:{path:t,classification:`added-new`,content:a};if(LL(i,a)||LL(s,a))return{path:t,classification:`unchanged`};if(!s)return{path:t,classification:`kept-local`};if(LL(s,i))return{path:t,classification:`auto-applied`,content:a};let[c,l,u]=[s,i,a].map(RL);if(c!==null&&l!==null&&u!==null){let i=ke(c,l,u,{diff3:!0,labels:{current:`local:${t}`,base:`${ML(n)}:${t}`,other:`${ML(r)}:${t}`}}),a=new TextEncoder().encode(i.content);return i.conflicts===0?{path:t,classification:`merged-clean`,content:a}:{path:t,classification:`needs-review`,content:a,sidecar:await BL(e.fs,t,n,r,o)}}return{path:t,classification:`needs-review`,content:a,sidecar:await BL(e.fs,t,n,r,o)}}async function HL(e,t){t.content?await e.writeFile(t.path,t.content):await e.exists(t.path)&&await e.rm(t.path)}async function UL(e,t){let n=t.filter(e=>e.content!==void 0),r=await Promise.all(n.map(async t=>{let n=t.sidecar??t.path;return{path:n,content:await zL(e,n)}})),i=[];for(let t=0;t<n.length;t+=1){let a=n[t],o=r[t];try{await e.writeFile(o.path,a.content),i.push(o)}catch(t){let n=[];for(let t of[o,...i.slice().reverse()])try{await HL(e,t)}catch(e){n.push(`${t.path}: ${e instanceof Error?e.message:String(e)}`)}let r=t instanceof Error?t.message:String(t),a=n.length===0?`all writes rolled back`:`rollback failed (${n.join(`; `)})`;throw Error(`apply failed for ${o.path}: ${r}; ${a}`)}}}async function WL(e,t,n){let r=ML(t),i=ML(n),[a,o]=await Promise.all([FL(r,e.fetch),FL(i,e.fetch)]),s=[...new Set([...a.keys(),...o.keys()])].sort(),c=await Promise.all(s.map(async t=>{let[n,s]=await Promise.all([a.has(t)?PL(e.fetch,IL(r,a.get(t))).then(e=>fe(e.body)):void 0,o.has(t)?PL(e.fetch,IL(i,o.get(t))).then(e=>fe(e.body)):void 0]);return{path:t,base:n,theirs:s}})),l=new Set(s),u=[];for(let{path:r,base:i,theirs:a}of c)u.push(await VL(e,r,t,n,i,a,l));return await UL(e.fs,u),u}async function GL(e){let{version:t,releasedAt:n,buildId:r}=Ke(),i=[],a=null,o=e.getLastSeen??qe();if(!o)i.push(`last-seen version unavailable: no reader registered in this runtime`);else try{a=await o()}catch(e){i.push(`last-seen version unavailable: ${e instanceof Error?e.message:String(e)}`)}let s=a!==null&&a!==t;return`${JSON.stringify({ok:i.length===0,version:t,releasedAt:n,build:r,lastSeen:a,mergePending:s,...s?{apply:`upgrade apply --from=${a} --to=${t}`}:{},errors:i})}\n`}function KL(e){return S(`upgrade`,async t=>{if(t.includes(`--help`)||t.includes(`-h`))return{stdout:`${wL}\n`,stderr:``,exitCode:0};if(t[0]===`status`)return t.length>1?{stdout:AL(``,``,[],[`unsupported argument: ${t[1]}`]),stderr:``,exitCode:1}:{stdout:await GL(e),stderr:``,exitCode:0};let n=``,r=``;try{({from:n,to:r}=jL(t));let i=await WL(e,n,r),a=i.some(e=>e.classification===`needs-review`);return{stdout:AL(n,r,i,[]),stderr:``,exitCode:+!!a}}catch(e){let t=e instanceof Error?e.message:String(e);return{stdout:AL(n,r,[],[t]),stderr:``,exitCode:1}}})}const qL=`usage: uptime [-p|--pretty] [-s|--since]`,JL=`${qL}
3097
+ `,exitCode:1};let n=t.fs.resolvePath(t.cwd,e[0]);try{let r=t.fs.lstat?await t.fs.lstat(n):await t.fs.stat(n);return r.isDirectory&&!r.isSymbolicLink?{stdout:``,stderr:`unlink: cannot unlink '${e[0]}': Is a directory\n`,exitCode:1}:(await t.fs.rm(n,{recursive:!1,force:!1}),{stdout:``,stderr:``,exitCode:0})}catch(t){let n=t instanceof Error?t.message:String(t);return{stdout:``,stderr:`unlink: cannot unlink '${e[0]}': ${n}\n`,exitCode:1}}})}function xL(){return{stdout:`usage: unzip <archive.zip> [-d <destination>]
3098
+ `,stderr:``,exitCode:0}}function SL(e){let t=`.`,n=[];for(let r=0;r<e.length;r++){let i=e[r];if(i===`-d`){t=e[r+1]??``,r++;continue}if(i.startsWith(`-`))return{kind:`error`,result:{stdout:``,stderr:`unzip: unsupported option ${i}\n`,exitCode:1}};n.push(i)}return n.length<1?{kind:`error`,result:{stdout:``,stderr:`unzip: expected archive path
3099
+ `,exitCode:1}}:{kind:`ok`,archive:n[0],destination:t||`.`}}async function CL(e,t,n,r){let i=n.replace(/\\/g,`/`);if(!i||i.endsWith(`/`))return!1;let a=e.fs.resolvePath(t,i);if(!cr(t,a))return{stdout:``,stderr:`unzip: blocked suspicious path ${n}\n`,exitCode:1};let o=ar(a);return o!==`/`&&await e.fs.mkdir(o,{recursive:!0}),await e.fs.writeFile(a,r),!0}function wL(){return S(`unzip`,async(e,t)=>{if(e.length===0||e.includes(`--help`)||e.includes(`-h`))return xL();let n=SL(e);if(n.kind===`error`)return n.result;let r=t.fs.resolvePath(t.cwd,n.archive),i=t.fs.resolvePath(t.cwd,n.destination);await t.fs.mkdir(i,{recursive:!0});let a=await t.fs.readFileBuffer(r),o=xt(a),s=0;for(let[e,n]of Object.entries(o)){let r=await CL(t,i,e,n);if(r===!0)s++;else if(r!==!1)return r}return{stdout:`extracted ${s} file(s) to ${i}\n`,stderr:``,exitCode:0}})}const TL=`ai-ecoverse/slicc`,EL=`usage: upgrade status | upgrade apply --from=<version> --to=<version>`,DL=`packages/vfs-root`,OL=3e4,kL=[`${DL}/workspace/skills/`,`${DL}/shared/sprinkles/`,`${DL}/shared/sounds/`,`${DL}/shared/GELATIERE.md`,`${DL}/shared/wiki/WIKI.md`,`${DL}/etc/`],AL=[`auto-applied`,`merged-clean`,`kept-local`,`needs-review`,`unchanged`,`added-new`];function jL(){return Object.fromEntries(AL.map(e=>[e,0]))}function ML(e,t,n,r){let i=jL();for(let e of n)i[e.classification]+=1;return`${JSON.stringify({ok:r.length===0&&i[`needs-review`]===0,from:e,to:t,results:n.map(({path:e,classification:t,sidecar:n})=>({path:e,status:t,...n?{sidecar:n}:{}})),summary:i,errors:r})}\n`}function NL(e){if(e[0]!==`apply`)throw Error(EL);let t=new Map;for(let n of e.slice(1)){let e=n.match(/^--(from|to)=(.+)$/);if(!e)throw Error(`unsupported argument: ${n}`);t.set(e[1],e[2])}let n=t.get(`from`)??``,r=t.get(`to`)??``,i=/^v?[0-9][0-9A-Za-z.+_-]*$/;if(!i.test(n)||!i.test(r))throw Error(`both --from and --to must be release versions`);return{from:n,to:r}}function PL(e){return e.startsWith(`v`)?e:`v${e}`}function FL(e){if(!kL.some(t=>e.startsWith(t)))return null;let t=e.slice(17);return!t||t.split(`/`).some(e=>e===`.`||e===`..`)?null:t}async function IL(e,t){let n,r;try{n=await Promise.race([e(t,{method:`GET`,headers:{Accept:`application/json`}}),new Promise((e,t)=>{r=setTimeout(()=>t(Error(`request timed out after ${OL}ms`)),OL)})])}catch(e){let n=e instanceof Error?e.message:String(e);throw Error(`fetch failed for ${t}: ${n}`)}finally{r!==void 0&&clearTimeout(r)}if(n.status<200||n.status>=300)throw Error(`fetch failed for ${t}: HTTP ${n.status} ${n.statusText}`);return n}async function LL(e,t){let n=await IL(t,`https://api.github.com/repos/${TL}/git/trees/${encodeURIComponent(e)}?recursive=1`),r=ue(n.body);if(r.truncated)throw Error(`bundled file discovery was truncated for ${e}`);if(!Array.isArray(r.tree))throw Error(`invalid bundled file discovery response for ${e}`);let i=new Map;for(let e of r.tree){if(e.type!==`blob`||typeof e.path!=`string`)continue;let t=FL(e.path);t&&i.set(t,e.path)}return i}function RL(e,t){let n=t.split(`/`).map(encodeURIComponent).join(`/`);return`https://raw.githubusercontent.com/${TL}/${encodeURIComponent(e)}/${n}`}function zL(e,t){return!e||!t||e.byteLength!==t.byteLength?!1:e.every((e,n)=>e===t[n])}function BL(e){try{return new TextDecoder(`utf-8`,{fatal:!0}).decode(e)}catch{return null}}async function VL(e,t){if(!await e.exists(t))return;let n=await e.readFile(t,{encoding:`binary`});return n instanceof Uint8Array?n:new TextEncoder().encode(n)}async function HL(e,t,n,r,i){let a=`${t}.upgrade-${PL(n)}-to-${PL(r)}.conflict`;if(!i.has(a)&&!await e.exists(a))return i.add(a),a;for(let t=1;;t+=1){let n=`${a}.${t}`;if(!i.has(n)&&!await e.exists(n))return i.add(n),n}}async function UL(e,t,n,r,i,a,o){let s=await VL(e.fs,t);if(!a)return{path:t,classification:s?`kept-local`:`unchanged`};if(!i)return s?{path:t,classification:zL(s,a)?`unchanged`:`kept-local`}:{path:t,classification:`added-new`,content:a};if(zL(i,a)||zL(s,a))return{path:t,classification:`unchanged`};if(!s)return{path:t,classification:`kept-local`};if(zL(s,i))return{path:t,classification:`auto-applied`,content:a};let[c,l,u]=[s,i,a].map(BL);if(c!==null&&l!==null&&u!==null){let i=ke(c,l,u,{diff3:!0,labels:{current:`local:${t}`,base:`${PL(n)}:${t}`,other:`${PL(r)}:${t}`}}),a=new TextEncoder().encode(i.content);return i.conflicts===0?{path:t,classification:`merged-clean`,content:a}:{path:t,classification:`needs-review`,content:a,sidecar:await HL(e.fs,t,n,r,o)}}return{path:t,classification:`needs-review`,content:a,sidecar:await HL(e.fs,t,n,r,o)}}async function WL(e,t){t.content?await e.writeFile(t.path,t.content):await e.exists(t.path)&&await e.rm(t.path)}async function GL(e,t){let n=t.filter(e=>e.content!==void 0),r=await Promise.all(n.map(async t=>{let n=t.sidecar??t.path;return{path:n,content:await VL(e,n)}})),i=[];for(let t=0;t<n.length;t+=1){let a=n[t],o=r[t];try{await e.writeFile(o.path,a.content),i.push(o)}catch(t){let n=[];for(let t of[o,...i.slice().reverse()])try{await WL(e,t)}catch(e){n.push(`${t.path}: ${e instanceof Error?e.message:String(e)}`)}let r=t instanceof Error?t.message:String(t),a=n.length===0?`all writes rolled back`:`rollback failed (${n.join(`; `)})`;throw Error(`apply failed for ${o.path}: ${r}; ${a}`)}}}async function KL(e,t,n){let r=PL(t),i=PL(n),[a,o]=await Promise.all([LL(r,e.fetch),LL(i,e.fetch)]),s=[...new Set([...a.keys(),...o.keys()])].sort(),c=await Promise.all(s.map(async t=>{let[n,s]=await Promise.all([a.has(t)?IL(e.fetch,RL(r,a.get(t))).then(e=>fe(e.body)):void 0,o.has(t)?IL(e.fetch,RL(i,o.get(t))).then(e=>fe(e.body)):void 0]);return{path:t,base:n,theirs:s}})),l=new Set(s),u=[];for(let{path:r,base:i,theirs:a}of c)u.push(await UL(e,r,t,n,i,a,l));return await GL(e.fs,u),u}async function qL(e){let{version:t,releasedAt:n,buildId:r}=Ke(),i=[],a=null,o=e.getLastSeen??qe();if(!o)i.push(`last-seen version unavailable: no reader registered in this runtime`);else try{a=await o()}catch(e){i.push(`last-seen version unavailable: ${e instanceof Error?e.message:String(e)}`)}let s=a!==null&&a!==t;return`${JSON.stringify({ok:i.length===0,version:t,releasedAt:n,build:r,lastSeen:a,mergePending:s,...s?{apply:`upgrade apply --from=${a} --to=${t}`}:{},errors:i})}\n`}function JL(e){return S(`upgrade`,async t=>{if(t.includes(`--help`)||t.includes(`-h`))return{stdout:`${EL}\n`,stderr:``,exitCode:0};if(t[0]===`status`)return t.length>1?{stdout:ML(``,``,[],[`unsupported argument: ${t[1]}`]),stderr:``,exitCode:1}:{stdout:await qL(e),stderr:``,exitCode:0};let n=``,r=``;try{({from:n,to:r}=NL(t));let i=await KL(e,n,r),a=i.some(e=>e.classification===`needs-review`);return{stdout:ML(n,r,i,[]),stderr:``,exitCode:+!!a}}catch(e){let t=e instanceof Error?e.message:String(e);return{stdout:ML(n,r,[],[t]),stderr:``,exitCode:1}}})}const YL=`usage: uptime [-p|--pretty] [-s|--since]`,XL=`${YL}
3100
3100
 
3101
3101
  Print how long this SLICC has been running. The clock starts when the browser
3102
3102
  window was last loaded — a reload is a reboot.
@@ -3112,7 +3112,7 @@ The load average is the average number of live kernel processes over the last
3112
3112
  processes are retained in bounded numbers, so a long burst of short commands
3113
3113
  can under-report the older windows. The user count is always 1: a SLICC
3114
3114
  runtime has one user identity (see \`id\`).
3115
- `,YL=[1,5,15],XL=6e4,ZL=60*XL,QL=24*ZL;function $L(){let e=globalThis.__slicc_pm;return e instanceof Object&&typeof e.list==`function`?e:null}function eR(e,t,n,r){let i=Math.min(n,Math.max(1,t-r)),a=t-i,o=0;for(let n of e){let e=Math.min(n.finishedAt??t,t);o+=Math.max(0,e-Math.max(n.startedAt,a))}return o/i}function tR(e){let t=Math.max(0,e),n=Math.floor(t/QL),r=Math.floor(t%QL/ZL),i=Math.floor(t%ZL/XL),a=r>0?`${r}:${String(i).padStart(2,`0`)}`:`${i} min`;return n===0?a:`${n} ${n===1?`day`:`days`}, ${a}`}function nR(e){let t=Math.max(0,e),n=[],r=(e,t)=>{e>0&&n.push(`${e} ${t}${e===1?``:`s`}`)};return r(Math.floor(t/QL),`day`),r(Math.floor(t%QL/ZL),`hour`),r(Math.floor(t%ZL/XL),`minute`),n.length===0?`up ${Math.floor(t/1e3)} seconds`:`up ${n.join(`, `)}`}function rR(e){let t=new Date(e),n=e=>String(e).padStart(2,`0`);return`${`${t.getFullYear()}-${n(t.getMonth()+1)}-${n(t.getDate())}`} ${n(t.getHours())}:${n(t.getMinutes())}:${n(t.getSeconds())}`}function iR(e){let t=new Date(e),n=e=>String(e).padStart(2,`0`);return`${n(t.getHours())}:${n(t.getMinutes())}:${n(t.getSeconds())}`}function aR(e,t,n){let r=YL.map(r=>eR(e,t,r*XL,n).toFixed(2));return` ${iR(t)} up ${tR(t-n)}, 1 user, load average: ${r.join(`, `)}\n`}function oR(e){let t=`default`;for(let n of e)switch(n){case`-p`:case`--pretty`:t=`pretty`;break;case`-s`:case`--since`:t=`since`;break;case`-h`:case`--help`:return`help`;case`--version`:return`version`;default:return{error:`unrecognized option '${n}'`}}return t}function sR(e={}){return S(`uptime`,async t=>{let n=oR(t);if(typeof n!=`string`)return{stdout:``,stderr:`uptime: ${n.error}\n${qL}\n`,exitCode:1};if(n===`help`)return{stdout:JL,stderr:``,exitCode:0};if(n===`version`)return{stdout:`uptime (SLICC) ${Ke().version}\n`,stderr:``,exitCode:0};let r=e.now?e.now():Date.now(),i=e.bootedAt?e.bootedAt():pa();if(n===`since`)return cR(`${rR(i)}\n`);if(n===`pretty`)return cR(`${nR(r-i)}\n`);let a=e.processManager??$L();return cR(aR(a?a.list():[],r,i))})}function cR(e){return{stdout:e,stderr:``,exitCode:0}}const lR=new Set([`--vid`,`--pid`,`--class`,`--subclass`,`--protocol`,`--serial`,`--request-type`,`--recipient`,`--request`,`--value`,`--index`,`--__resolved`]);function uR(e){return vn(e,lR)}function Y(e,t){let n=/^0x/i.test(e)?parseInt(e,16):parseInt(e,10);if(!Number.isFinite(n)||Number.isNaN(n))throw Error(`invalid ${t}: '${e}'`);return n}function dR(e){let t={};return e.has(`--vid`)&&(t.vendorId=Y(e.get(`--vid`),`vid`)),e.has(`--pid`)&&(t.productId=Y(e.get(`--pid`),`pid`)),e.has(`--class`)&&(t.classCode=Y(e.get(`--class`),`class`)),e.has(`--subclass`)&&(t.subclassCode=Y(e.get(`--subclass`),`subclass`)),e.has(`--protocol`)&&(t.protocolCode=Y(e.get(`--protocol`),`protocol`)),e.has(`--serial`)&&(t.serialNumber=e.get(`--serial`)),Object.keys(t).length>0?[t]:[]}const fR=new Set([`standard`,`class`,`vendor`]),pR=new Set([`device`,`interface`,`endpoint`,`other`]);function mR(e){let t=e.get(`--request-type`)??`vendor`,n=e.get(`--recipient`)??`device`;if(!fR.has(t))throw Error(`invalid --request-type: '${t}'`);if(!pR.has(n))throw Error(`invalid --recipient: '${n}'`);return{requestType:t,recipient:n,request:Y(e.get(`--request`)??`0`,`request`),value:Y(e.get(`--value`)??`0`,`value`),index:Y(e.get(`--index`)??`0`,`index`)}}function hR(e){let t=ei(e.stdin),n=new Uint8Array(t.length);for(let e=0;e<t.length;e++)n[e]=t.charCodeAt(e)&255;return n}function gR(e){return Array.from(e,e=>e.toString(16).padStart(2,`0`)).join(` `)}function _R(e){return`0x${e.toString(16).padStart(4,`0`)}`}function vR(e){let t=[e.manufacturerName,e.productName].filter(Boolean).join(` `)||`(unknown)`,n=e.serialNumber?` serial=${e.serialNumber}`:``,r=e.opened?` [open]`:``;return`${e.handle}\t${_R(e.vendorId)}:${_R(e.productId)}\t${t}${n}${r}`}function X(e){return{stdout:e,stderr:``,exitCode:0}}function Z(e){return{stdout:``,stderr:`usb: ${e}\n`,exitCode:1}}const yR=`usb - access USB devices via WebUSB
3115
+ `,ZL=[1,5,15],QL=6e4,$L=60*QL,eR=24*$L;function tR(){let e=globalThis.__slicc_pm;return e instanceof Object&&typeof e.list==`function`?e:null}function nR(e,t,n,r){let i=Math.min(n,Math.max(1,t-r)),a=t-i,o=0;for(let n of e){let e=Math.min(n.finishedAt??t,t);o+=Math.max(0,e-Math.max(n.startedAt,a))}return o/i}function rR(e){let t=Math.max(0,e),n=Math.floor(t/eR),r=Math.floor(t%eR/$L),i=Math.floor(t%$L/QL),a=r>0?`${r}:${String(i).padStart(2,`0`)}`:`${i} min`;return n===0?a:`${n} ${n===1?`day`:`days`}, ${a}`}function iR(e){let t=Math.max(0,e),n=[],r=(e,t)=>{e>0&&n.push(`${e} ${t}${e===1?``:`s`}`)};return r(Math.floor(t/eR),`day`),r(Math.floor(t%eR/$L),`hour`),r(Math.floor(t%$L/QL),`minute`),n.length===0?`up ${Math.floor(t/1e3)} seconds`:`up ${n.join(`, `)}`}function aR(e){let t=new Date(e),n=e=>String(e).padStart(2,`0`);return`${`${t.getFullYear()}-${n(t.getMonth()+1)}-${n(t.getDate())}`} ${n(t.getHours())}:${n(t.getMinutes())}:${n(t.getSeconds())}`}function oR(e){let t=new Date(e),n=e=>String(e).padStart(2,`0`);return`${n(t.getHours())}:${n(t.getMinutes())}:${n(t.getSeconds())}`}function sR(e,t,n){let r=ZL.map(r=>nR(e,t,r*QL,n).toFixed(2));return` ${oR(t)} up ${rR(t-n)}, 1 user, load average: ${r.join(`, `)}\n`}function cR(e){let t=`default`;for(let n of e)switch(n){case`-p`:case`--pretty`:t=`pretty`;break;case`-s`:case`--since`:t=`since`;break;case`-h`:case`--help`:return`help`;case`--version`:return`version`;default:return{error:`unrecognized option '${n}'`}}return t}function lR(e={}){return S(`uptime`,async t=>{let n=cR(t);if(typeof n!=`string`)return{stdout:``,stderr:`uptime: ${n.error}\n${YL}\n`,exitCode:1};if(n===`help`)return{stdout:XL,stderr:``,exitCode:0};if(n===`version`)return{stdout:`uptime (SLICC) ${Ke().version}\n`,stderr:``,exitCode:0};let r=e.now?e.now():Date.now(),i=e.bootedAt?e.bootedAt():pa();if(n===`since`)return uR(`${aR(i)}\n`);if(n===`pretty`)return uR(`${iR(r-i)}\n`);let a=e.processManager??tR();return uR(sR(a?a.list():[],r,i))})}function uR(e){return{stdout:e,stderr:``,exitCode:0}}const dR=new Set([`--vid`,`--pid`,`--class`,`--subclass`,`--protocol`,`--serial`,`--request-type`,`--recipient`,`--request`,`--value`,`--index`,`--__resolved`]);function fR(e){return vn(e,dR)}function Y(e,t){let n=/^0x/i.test(e)?parseInt(e,16):parseInt(e,10);if(!Number.isFinite(n)||Number.isNaN(n))throw Error(`invalid ${t}: '${e}'`);return n}function pR(e){let t={};return e.has(`--vid`)&&(t.vendorId=Y(e.get(`--vid`),`vid`)),e.has(`--pid`)&&(t.productId=Y(e.get(`--pid`),`pid`)),e.has(`--class`)&&(t.classCode=Y(e.get(`--class`),`class`)),e.has(`--subclass`)&&(t.subclassCode=Y(e.get(`--subclass`),`subclass`)),e.has(`--protocol`)&&(t.protocolCode=Y(e.get(`--protocol`),`protocol`)),e.has(`--serial`)&&(t.serialNumber=e.get(`--serial`)),Object.keys(t).length>0?[t]:[]}const mR=new Set([`standard`,`class`,`vendor`]),hR=new Set([`device`,`interface`,`endpoint`,`other`]);function gR(e){let t=e.get(`--request-type`)??`vendor`,n=e.get(`--recipient`)??`device`;if(!mR.has(t))throw Error(`invalid --request-type: '${t}'`);if(!hR.has(n))throw Error(`invalid --recipient: '${n}'`);return{requestType:t,recipient:n,request:Y(e.get(`--request`)??`0`,`request`),value:Y(e.get(`--value`)??`0`,`value`),index:Y(e.get(`--index`)??`0`,`index`)}}function _R(e){let t=ei(e.stdin),n=new Uint8Array(t.length);for(let e=0;e<t.length;e++)n[e]=t.charCodeAt(e)&255;return n}function vR(e){return Array.from(e,e=>e.toString(16).padStart(2,`0`)).join(` `)}function yR(e){return`0x${e.toString(16).padStart(4,`0`)}`}function bR(e){let t=[e.manufacturerName,e.productName].filter(Boolean).join(` `)||`(unknown)`,n=e.serialNumber?` serial=${e.serialNumber}`:``,r=e.opened?` [open]`:``;return`${e.handle}\t${yR(e.vendorId)}:${yR(e.productId)}\t${t}${n}${r}`}function X(e){return{stdout:e,stderr:``,exitCode:0}}function Z(e){return{stdout:``,stderr:`usb: ${e}\n`,exitCode:1}}const xR=`usb - access USB devices via WebUSB
3116
3116
 
3117
3117
  Usage: usb <subcommand> [options]
3118
3118
 
@@ -3151,11 +3151,11 @@ Options:
3151
3151
  -h, --help
3152
3152
 
3153
3153
  Transfers are capped at ${$r} bytes (4 MiB).
3154
- `;function bR(e,t){if(t){let t=``;for(let n=0;n<e.length;n++)t+=String.fromCharCode(e[n]);return X(t)}return X(e.length?`${gR(e)}\n`:``)}async function xR(e){let t=await e.list();return t.length===0?X(`no granted USB devices
3155
- `):X(`${t.map(vR).join(`
3156
- `)}\n`)}async function SR(e,t){let n=e.get(`--__resolved`);if(n)return X(`${vR(await t.info(n))}\n`);let r=dR(e),i=xe();if(i){let e=await Sx(`usb-device`,r,i);if(e.handle)return X(`${vR(await t.info(e.handle))}\n`);let n=e.info,a=Zr();if(!a)return Z(`request: WebUSB unavailable for device re-acquire`);let o=(await a.getDevices()).find(e=>e.vendorId===n.vendorId&&e.productId===n.productId&&(!n.serialNumber||e.serialNumber===n.serialNumber));if(!o)return Z(`request: granted device could not be re-acquired`);let s=Qr().register(o);return X(`${vR(Xr(s,o))}\n`)}return X(`${vR(await t.request(r))}\n`)}async function CR(e,t,n,r){let i=t[1];if(!i)return Z(`${e}: handle required`);let a=r.has(`--force`);return e===`open`?await n.open(i):e===`close`?await n.close(i,{force:a}):await n.reset(i,{force:a}),X(``)}async function wR(e,t){let[,n,r,i]=e;return!n||r===void 0||i===void 0?Z(`clear-halt: handle, direction and endpoint required`):r!==`in`&&r!==`out`?Z(`clear-halt: direction must be 'in' or 'out', got '${r}'`):(await t.clearHalt(n,r,Y(i,`endpoint`)),X(``))}async function TR(e,t){let[,n,r]=e;return!n||r===void 0?Z(`select-config: handle and value required`):(await t.selectConfig(n,Y(r,`configuration`)),X(``))}async function ER(e,t,n,r){let[,i,a]=t;if(!i||a===void 0)return Z(`${e}: handle and interface required`);let o=Y(a,`interface`);return e===`claim`?await n.claim(i,o,{wait:r.has(`--wait`)}):await n.release(i,o),X(``)}async function DR(e,t,n,r){let[,i,a]=e;if(!i||a===void 0)return Z(`control-in: handle and length required`);let o=Y(a,`length`);return o>4194304?Z(`control-in length exceeds 4 MiB limit`):bR((await n.controlIn(i,mR(t),o)).bytes,r)}async function OR(e,t,n,r){let i=e[1];if(!i)return Z(`control-out: handle required`);let a=hR(t);return a.length>4194304?Z(`control-out payload exceeds 4 MiB limit`):X(`${(await r.controlOut(i,mR(n),a)).bytesWritten} bytes written\n`)}async function kR(e,t,n,r){let[,i,a,o]=e;if(!i||a===void 0||o===void 0)return Z(`transfer-in: handle, endpoint and length required`);let s=Y(o,`length`);return s>4194304?Z(`transfer-in length exceeds 4 MiB limit`):bR((await n.transferIn(i,Y(a,`endpoint`),s)).bytes,r)}async function AR(e,t,n,r){let[,i,a]=e;if(!i||a===void 0)return Z(`transfer-out: handle and endpoint required`);let o=hR(t);return o.length>4194304?Z(`transfer-out payload exceeds 4 MiB limit`):X(`${(await r.transferOut(i,Y(a,`endpoint`),o)).bytesWritten} bytes written\n`)}async function jR(e,t,n){let{positionals:r,flags:i,bools:a}=uR(e),o=r[0],s=a.has(`--raw`);switch(o){case`list`:return xR(n);case`request`:return SR(i,n);case`open`:case`close`:case`reset`:return CR(o,r,n,a);case`clear-halt`:return wR(r,n);case`select-config`:return TR(r,n);case`claim`:case`release`:return ER(o,r,n,a);case`control-in`:return DR(r,i,n,s);case`control-out`:return OR(r,t,i,n);case`transfer-in`:return kR(r,i,n,s);case`transfer-out`:return AR(r,t,i,n);default:return Z(`unknown subcommand '${o??``}'. Try 'usb --help'.`)}}function MR(){return S(`usb`,async(e,t)=>{if(e.length===0||e.includes(`--help`)||e.includes(`-h`))return X(yR);let n=Mr(se(),y());if(!n)return Z(`WebUSB is unavailable in this environment`);try{return await jR(e,t,n)}catch(e){let t=e instanceof Error?e.message:String(e);return/cancelled|NotFoundError|No device selected/i.test(t)?Z(`user cancelled or no device selected`):Z(t)}})}const NR=`/workspace/.v86`,PR=`v86 - run an x86 virtual machine (v86 wasm engine)
3154
+ `;function SR(e,t){if(t){let t=``;for(let n=0;n<e.length;n++)t+=String.fromCharCode(e[n]);return X(t)}return X(e.length?`${vR(e)}\n`:``)}async function CR(e){let t=await e.list();return t.length===0?X(`no granted USB devices
3155
+ `):X(`${t.map(bR).join(`
3156
+ `)}\n`)}async function wR(e,t){let n=e.get(`--__resolved`);if(n)return X(`${bR(await t.info(n))}\n`);let r=pR(e),i=xe();if(i){let e=await Sx(`usb-device`,r,i);if(e.handle)return X(`${bR(await t.info(e.handle))}\n`);let n=e.info,a=Zr();if(!a)return Z(`request: WebUSB unavailable for device re-acquire`);let o=(await a.getDevices()).find(e=>e.vendorId===n.vendorId&&e.productId===n.productId&&(!n.serialNumber||e.serialNumber===n.serialNumber));if(!o)return Z(`request: granted device could not be re-acquired`);let s=Qr().register(o);return X(`${bR(Xr(s,o))}\n`)}return X(`${bR(await t.request(r))}\n`)}async function TR(e,t,n,r){let i=t[1];if(!i)return Z(`${e}: handle required`);let a=r.has(`--force`);return e===`open`?await n.open(i):e===`close`?await n.close(i,{force:a}):await n.reset(i,{force:a}),X(``)}async function ER(e,t){let[,n,r,i]=e;return!n||r===void 0||i===void 0?Z(`clear-halt: handle, direction and endpoint required`):r!==`in`&&r!==`out`?Z(`clear-halt: direction must be 'in' or 'out', got '${r}'`):(await t.clearHalt(n,r,Y(i,`endpoint`)),X(``))}async function DR(e,t){let[,n,r]=e;return!n||r===void 0?Z(`select-config: handle and value required`):(await t.selectConfig(n,Y(r,`configuration`)),X(``))}async function OR(e,t,n,r){let[,i,a]=t;if(!i||a===void 0)return Z(`${e}: handle and interface required`);let o=Y(a,`interface`);return e===`claim`?await n.claim(i,o,{wait:r.has(`--wait`)}):await n.release(i,o),X(``)}async function kR(e,t,n,r){let[,i,a]=e;if(!i||a===void 0)return Z(`control-in: handle and length required`);let o=Y(a,`length`);return o>4194304?Z(`control-in length exceeds 4 MiB limit`):SR((await n.controlIn(i,gR(t),o)).bytes,r)}async function AR(e,t,n,r){let i=e[1];if(!i)return Z(`control-out: handle required`);let a=_R(t);return a.length>4194304?Z(`control-out payload exceeds 4 MiB limit`):X(`${(await r.controlOut(i,gR(n),a)).bytesWritten} bytes written\n`)}async function jR(e,t,n,r){let[,i,a,o]=e;if(!i||a===void 0||o===void 0)return Z(`transfer-in: handle, endpoint and length required`);let s=Y(o,`length`);return s>4194304?Z(`transfer-in length exceeds 4 MiB limit`):SR((await n.transferIn(i,Y(a,`endpoint`),s)).bytes,r)}async function MR(e,t,n,r){let[,i,a]=e;if(!i||a===void 0)return Z(`transfer-out: handle and endpoint required`);let o=_R(t);return o.length>4194304?Z(`transfer-out payload exceeds 4 MiB limit`):X(`${(await r.transferOut(i,Y(a,`endpoint`),o)).bytesWritten} bytes written\n`)}async function NR(e,t,n){let{positionals:r,flags:i,bools:a}=fR(e),o=r[0],s=a.has(`--raw`);switch(o){case`list`:return CR(n);case`request`:return wR(i,n);case`open`:case`close`:case`reset`:return TR(o,r,n,a);case`clear-halt`:return ER(r,n);case`select-config`:return DR(r,n);case`claim`:case`release`:return OR(o,r,n,a);case`control-in`:return kR(r,i,n,s);case`control-out`:return AR(r,t,i,n);case`transfer-in`:return jR(r,i,n,s);case`transfer-out`:return MR(r,t,i,n);default:return Z(`unknown subcommand '${o??``}'. Try 'usb --help'.`)}}function PR(){return S(`usb`,async(e,t)=>{if(e.length===0||e.includes(`--help`)||e.includes(`-h`))return X(xR);let n=Mr(se(),y());if(!n)return Z(`WebUSB is unavailable in this environment`);try{return await NR(e,t,n)}catch(e){let t=e instanceof Error?e.message:String(e);return/cancelled|NotFoundError|No device selected/i.test(t)?Z(`user cancelled or no device selected`):Z(t)}})}const FR=`/workspace/.v86`,IR=`v86 - run an x86 virtual machine (v86 wasm engine)
3157
3157
 
3158
- Requires: ${N} v86@${WD}
3158
+ Requires: ${N} v86@${KD}
3159
3159
 
3160
3160
  Usage:
3161
3161
  v86 start [boot options] Boot a VM in the background (prints pid)
@@ -3189,7 +3189,7 @@ Boot options (QEMU-flavored):
3189
3189
  proxy — no gateway needed, https upstream via the proxy
3190
3190
  -vga <MiB> SVGA/VBE video memory (default 8, max 64) —
3191
3191
  raise for high-res VESA modes (1080p32 needs ~9)
3192
- -bios <path> -vgabios <path> BIOS blobs (default ${NR}/{seabios,vgabios}.bin)
3192
+ -bios <path> -vgabios <path> BIOS blobs (default ${FR}/{seabios,vgabios}.bin)
3193
3193
  -nographic Serial-only guest (skip VGA)
3194
3194
 
3195
3195
  Notes:
@@ -3197,19 +3197,19 @@ Notes:
3197
3197
  (Alpine, FreeDOS, Buildroot Linux) work best.
3198
3198
  - The copy.sh Arch Linux image boots via -state + -fs9p; see the v86 skill.
3199
3199
  - BIOS blobs are not bundled; download once:
3200
- mkdir -p ${NR}
3201
- curl -o ${NR}/seabios.bin https://raw.githubusercontent.com/copy/v86/master/bios/seabios.bin
3202
- curl -o ${NR}/vgabios.bin https://raw.githubusercontent.com/copy/v86/master/bios/vgabios.bin
3203
- `,FR=`v86: BIOS images not found. Download them once:
3204
- mkdir -p ${NR}
3205
- curl -o ${NR}/seabios.bin https://raw.githubusercontent.com/copy/v86/master/bios/seabios.bin
3206
- curl -o ${NR}/vgabios.bin https://raw.githubusercontent.com/copy/v86/master/bios/vgabios.bin
3207
- or pass -bios / -vgabios with explicit VFS paths.`,IR={"-n":LR,"-name":LR,"--name":LR,"-m":(e,t)=>{let n=Number.parseInt(t,10);return!Number.isFinite(n)||n<=0?`-m requires a positive MiB value`:n>512?`-m ${n} exceeds the 512 MiB cap`:(e.memoryMib=n,null)},"-vga":(e,t)=>{let n=Number.parseInt(t,10);return!Number.isFinite(n)||n<=0?`-vga requires a positive MiB value`:n>64?`-vga ${n} exceeds the 64 MiB cap`:(e.vgaMemoryMib=n,null)},"-cdrom":(e,t)=>RR(e,`cdrom`,t),"-hda":(e,t)=>RR(e,`hda`,t),"-fda":(e,t)=>RR(e,`fda`,t),"-kernel":(e,t)=>RR(e,`kernel`,t),"-initrd":(e,t)=>RR(e,`initrd`,t),"-append":(e,t)=>RR(e,`append`,t),"-bios":(e,t)=>RR(e,`bios`,t),"-vgabios":(e,t)=>RR(e,`vgabios`,t),"-state":(e,t)=>RR(e,`state`,t),"-fs9p":(e,t)=>/^https?:\/\//u.test(t)?(e.fs9p=t,null):`-fs9p requires an http(s) base URL`,"-net":(e,t)=>{let[n,...r]=t.split(`,`);if(n!==`ne2k`&&n!==`virtio`)return`-net requires ne2k or virtio`;for(let t of r){if(t!==`relay=fetch`)return`-net: unknown option '${t}' (only relay=fetch)`;e.netRelay=`fetch`}return e.net=n,null},"-boot":(e,t)=>t!==`a`&&t!==`c`&&t!==`d`?`-boot requires a, c, or d`:(e.boot=t,null)};function LR(e,t){return/^[A-Za-z0-9_-]+$/.test(t)?(e.name=t,null):`invalid VM name '${t}'`}function RR(e,t,n){return e[t]=n,null}const zR=[...Object.keys(IR),`--fps`,`--tail`,`--send`,`--to`];function BR(e){let t={name:`vm0`,memoryMib:128,vgaMemoryMib:8,nographic:!1};for(let n=0;n<e.length;n++){let r=e[n];if(r===`-nographic`){t.nographic=!0;continue}let i=Object.hasOwn(IR,r)?IR[r]:void 0;if(!i)return{ok:!1,error:`unknown option '${r}'`};let a=n+1<e.length?e[n+1]:null;if(a===null)return{ok:!1,error:`${r} requires a value`};let o=i(t,a);if(o)return{ok:!1,error:o};n++}return!t.cdrom&&!t.hda&&!t.fda&&!t.kernel&&!t.state?{ok:!1,error:`no bootable media (-cdrom, -hda, -fda, -kernel, or -state required)`}:{ok:!0,parsed:t}}function VR(e){return{reader:{exists:t=>e.fs.exists(t),isDirectory:async t=>{try{return(await e.fs.stat(t)).isDirectory}catch{return!1}},readFile:t=>e.fs.readFile(t)},readBytes:t=>e.fs.readFileBuffer(t),fromDir:e.cwd}}function Q(e){return{stdout:``,stderr:`v86: ${e}\n`,exitCode:1}}function $(e=``){return{stdout:e,stderr:``,exitCode:0}}function HR(e){let t=[],n=`vm0`;for(let r=0;r<e.length;r++){if(e[r]===`-n`||e[r]===`-name`||e[r]===`--name`){let t=e[r+1];if(t){n=t,r++;continue}}t.push(e[r])}return{name:n,rest:t}}function UR(e){return sa(e)||Q(`no VM named '${e}' — boot one with \`v86 start -n ${e} ...\``)}function WR(e){return`exitCode`in e}async function GR(e,t,n){let r=e.fs.resolvePath(e.cwd,t);if(!await e.fs.exists(r))return Q(`${n}: no such file: ${t}`);let i=await e.fs.readFileBuffer(r),a=new ArrayBuffer(i.byteLength);return new Uint8Array(a).set(i),{buffer:a}}const KR={a:801,c:306,d:531};function qR(){let e=globalThis.__slicc_pm;return e instanceof Object&&typeof e.signal==`function`?e:null}function JR(e={}){return S(`v86`,async(t,n)=>{if(t.length===0||t[0]===`--help`||t[0]===`-h`||t[0]===`help`)return $(PR);if(t[0]===`--version`)return YR(n,e);let r=t[0];if(w(t.slice(1),{valueFlags:zR}))return $($e(`v86`,r,PR,{prefix:`v86`}));let i=Qe(t.slice(1));try{switch(r){case`start`:return await tz(i,n,e);case`ls`:return rz();case`type`:return await sz(i,n);case`key`:return await cz(i,n);case`mouse`:return await uz(i,n);case`screenshot`:return await dz(i,n);case`text`:return await fz(i,n);case`serve`:return pz(i);case`serial`:return mz(i);case`state`:return await hz(i,n);case`stop`:return await gz(i,e);default:return Q(`unknown subcommand '${r}' — see \`v86 --help\``)}}catch(e){return Q(e instanceof Error?e.message:String(e))}})}async function YR(e,t){if(t.loadEngine)return $(`v86 ${(await t.loadEngine(VR(e))).version} (qemu-flavored CLI)\n`);let n=await XD(VR(e));return n?$(`v86 ${n.version} (qemu-flavored CLI)\n`):Q(GD)}async function XR(e,t,n){if(e.state&&!e.bios&&!e.vgabios)return null;let r=await GR(t,e.bios??`${NR}/seabios.bin`,`-bios`);if(`exitCode`in r)return e.bios?r:Q(FR.replace(/^v86: /u,``));if(n.bios=r,e.nographic)return null;let i=await GR(t,e.vgabios??`${NR}/vgabios.bin`,`-vgabios`);return`exitCode`in i?e.vgabios?i:Q(FR.replace(/^v86: /u,``)):(n.vga_bios=i,null)}async function ZR(e,t,n){let r=await XR(e,t,n);if(r)return r;for(let[r,i]of[[`cdrom`,`cdrom`],[`hda`,`hda`],[`fda`,`fda`],[`kernel`,`bzimage`],[`initrd`,`initrd`]]){let a=e[r];if(!a)continue;let o=await GR(t,a,`-${r}`);if(`exitCode`in o)return o;n[i]=o}if(e.append&&(n.cmdline=e.append),e.boot&&(n.boot_order=KR[e.boot]),e.state){let r=await GR(t,e.state,`-state`);if(`exitCode`in r)return r;n.initial_state=r}return e.fs9p&&(n.filesystem={baseurl:e.fs9p}),e.net&&(n.net_device=e.netRelay===`fetch`?{type:e.net,relay_url:`fetch`}:{type:e.net}),null}const QR=6e4;function $R(e){return e.v86?Promise.resolve():new Promise((t,n)=>{let r=setTimeout(()=>n(Error(`engine init timed out after ${QR/1e3}s`)),QR);e.add_listener(`emulator-loaded`,()=>{clearTimeout(r),t()})})}function ez(e,t){let n=e.network_adapter;if(!n||typeof n.fetch!=`function`)return Q(`relay=fetch: engine exposed no fetch-relay network adapter`);let r=t.proxiedFetch??h();return n.fetch=async(e,t)=>{let n=e.replace(/^http:\/\/(?!localhost[:/]|127\.0\.0\.1[:/])/u,`https://`),i={};t?.headers?.forEach((e,t)=>{i[t]=e});let a;if(t?.body){let e=``;for(let n of t.body)e+=String.fromCharCode(n);a=e}let o=await r(n,{method:t?.method,headers:i,body:a}),s=o.body,c=s.buffer.slice(s.byteOffset,s.byteOffset+s.byteLength);return{status:o.status,statusText:o.statusText,headers:new Headers(o.headers),redirected:!1,url:o.url,arrayBuffer:async()=>c}},null}async function tz(e,t,n){let r=BR(e);if(!r.ok)return Q(r.error);let i=r.parsed;if(sa(i.name))return Q(`VM '${i.name}' already running — stop it first or pick another -n name`);let a=VR(t),o=n.loadEngine?await n.loadEngine(a):await qD({ipk:a}),s={wasm_fn:QD(o.wasmModule),memory_size:i.memoryMib*1024*1024,vga_memory_size:i.vgaMemoryMib*1024*1024,autostart:!1,disable_speaker:!0,fastboot:!0},c=await ZR(i,t,s);if(c)return c;let l=new o.V86(s),u={name:i.name,emulator:l,engineVersion:o.version,pid:null,startedAt:Date.now(),bootArgv:[`v86`,`start`,...e],serial:{buffer:``},screen:{mode:`text`,width:0,height:0,frame:null},serve:null},d=n.processManager??qR();if(d){let e=d.spawn({kind:`net`,argv:u.bootArgv,cwd:t.cwd,owner:{kind:`system`}});u.pid=e.pid,e.abort.signal.addEventListener(`abort`,()=>{nz(u,d)})}oa(u);try{if(await $R(l),i.netRelay===`fetch`){let e=ez(l,n);if(e)return await nz(u,d),e}aa(u),await l.run()}catch(e){return await nz(u,d),Q(`boot failed: ${e instanceof Error?e.message:String(e)}`)}u.onScreenChange=()=>{import(`./registry-DfuJBCKY.js`).then(({getComputerRegistry:e})=>{e()?.refresh(`v86:${u.name}`)})},import(`./v86-DKE8ZbX9.js`).then(({registerV86Computer:e})=>e(u)).catch(()=>{});let f=u.pid===null?``:` (pid ${u.pid})`;return $(`VM '${i.name}' booting in the background${f}.\nDrive it with: v86 text -n ${i.name} | v86 screenshot -n ${i.name} | v86 type -n ${i.name} "..."\n`)}async function nz(e,t){ca(e),ia(e.name),import(`./v86-DKE8ZbX9.js`).then(({unregisterV86Computer:t})=>t(e.name)).catch(()=>{});try{e.emulator.is_running()&&await e.emulator.stop()}catch{}try{await e.emulator.destroy()}catch{}t&&e.pid!==null&&t.exit(e.pid,null)}function rz(){let e=ra();if(e.length===0)return $(`no VMs running
3200
+ mkdir -p ${FR}
3201
+ curl -o ${FR}/seabios.bin https://raw.githubusercontent.com/copy/v86/master/bios/seabios.bin
3202
+ curl -o ${FR}/vgabios.bin https://raw.githubusercontent.com/copy/v86/master/bios/vgabios.bin
3203
+ `,LR=`v86: BIOS images not found. Download them once:
3204
+ mkdir -p ${FR}
3205
+ curl -o ${FR}/seabios.bin https://raw.githubusercontent.com/copy/v86/master/bios/seabios.bin
3206
+ curl -o ${FR}/vgabios.bin https://raw.githubusercontent.com/copy/v86/master/bios/vgabios.bin
3207
+ or pass -bios / -vgabios with explicit VFS paths.`,RR={"-n":zR,"-name":zR,"--name":zR,"-m":(e,t)=>{let n=Number.parseInt(t,10);return!Number.isFinite(n)||n<=0?`-m requires a positive MiB value`:n>512?`-m ${n} exceeds the 512 MiB cap`:(e.memoryMib=n,null)},"-vga":(e,t)=>{let n=Number.parseInt(t,10);return!Number.isFinite(n)||n<=0?`-vga requires a positive MiB value`:n>64?`-vga ${n} exceeds the 64 MiB cap`:(e.vgaMemoryMib=n,null)},"-cdrom":(e,t)=>BR(e,`cdrom`,t),"-hda":(e,t)=>BR(e,`hda`,t),"-fda":(e,t)=>BR(e,`fda`,t),"-kernel":(e,t)=>BR(e,`kernel`,t),"-initrd":(e,t)=>BR(e,`initrd`,t),"-append":(e,t)=>BR(e,`append`,t),"-bios":(e,t)=>BR(e,`bios`,t),"-vgabios":(e,t)=>BR(e,`vgabios`,t),"-state":(e,t)=>BR(e,`state`,t),"-fs9p":(e,t)=>/^https?:\/\//u.test(t)?(e.fs9p=t,null):`-fs9p requires an http(s) base URL`,"-net":(e,t)=>{let[n,...r]=t.split(`,`);if(n!==`ne2k`&&n!==`virtio`)return`-net requires ne2k or virtio`;for(let t of r){if(t!==`relay=fetch`)return`-net: unknown option '${t}' (only relay=fetch)`;e.netRelay=`fetch`}return e.net=n,null},"-boot":(e,t)=>t!==`a`&&t!==`c`&&t!==`d`?`-boot requires a, c, or d`:(e.boot=t,null)};function zR(e,t){return/^[A-Za-z0-9_-]+$/.test(t)?(e.name=t,null):`invalid VM name '${t}'`}function BR(e,t,n){return e[t]=n,null}const VR=[...Object.keys(RR),`--fps`,`--tail`,`--send`,`--to`];function HR(e){let t={name:`vm0`,memoryMib:128,vgaMemoryMib:8,nographic:!1};for(let n=0;n<e.length;n++){let r=e[n];if(r===`-nographic`){t.nographic=!0;continue}let i=Object.hasOwn(RR,r)?RR[r]:void 0;if(!i)return{ok:!1,error:`unknown option '${r}'`};let a=n+1<e.length?e[n+1]:null;if(a===null)return{ok:!1,error:`${r} requires a value`};let o=i(t,a);if(o)return{ok:!1,error:o};n++}return!t.cdrom&&!t.hda&&!t.fda&&!t.kernel&&!t.state?{ok:!1,error:`no bootable media (-cdrom, -hda, -fda, -kernel, or -state required)`}:{ok:!0,parsed:t}}function UR(e){return{reader:{exists:t=>e.fs.exists(t),isDirectory:async t=>{try{return(await e.fs.stat(t)).isDirectory}catch{return!1}},readFile:t=>e.fs.readFile(t)},readBytes:t=>e.fs.readFileBuffer(t),fromDir:e.cwd}}function Q(e){return{stdout:``,stderr:`v86: ${e}\n`,exitCode:1}}function $(e=``){return{stdout:e,stderr:``,exitCode:0}}function WR(e){let t=[],n=`vm0`;for(let r=0;r<e.length;r++){if(e[r]===`-n`||e[r]===`-name`||e[r]===`--name`){let t=e[r+1];if(t){n=t,r++;continue}}t.push(e[r])}return{name:n,rest:t}}function GR(e){return sa(e)||Q(`no VM named '${e}' — boot one with \`v86 start -n ${e} ...\``)}function KR(e){return`exitCode`in e}async function qR(e,t,n){let r=e.fs.resolvePath(e.cwd,t);if(!await e.fs.exists(r))return Q(`${n}: no such file: ${t}`);let i=await e.fs.readFileBuffer(r),a=new ArrayBuffer(i.byteLength);return new Uint8Array(a).set(i),{buffer:a}}const JR={a:801,c:306,d:531};function YR(){let e=globalThis.__slicc_pm;return e instanceof Object&&typeof e.signal==`function`?e:null}function XR(e={}){return S(`v86`,async(t,n)=>{if(t.length===0||t[0]===`--help`||t[0]===`-h`||t[0]===`help`)return $(IR);if(t[0]===`--version`)return ZR(n,e);let r=t[0];if(w(t.slice(1),{valueFlags:VR}))return $($e(`v86`,r,IR,{prefix:`v86`}));let i=Qe(t.slice(1));try{switch(r){case`start`:return await rz(i,n,e);case`ls`:return az();case`type`:return await lz(i,n);case`key`:return await uz(i,n);case`mouse`:return await fz(i,n);case`screenshot`:return await pz(i,n);case`text`:return await mz(i,n);case`serve`:return hz(i);case`serial`:return gz(i);case`state`:return await _z(i,n);case`stop`:return await vz(i,e);default:return Q(`unknown subcommand '${r}' — see \`v86 --help\``)}}catch(e){return Q(e instanceof Error?e.message:String(e))}})}async function ZR(e,t){if(t.loadEngine)return $(`v86 ${(await t.loadEngine(UR(e))).version} (qemu-flavored CLI)\n`);let n=await QD(UR(e));return n?$(`v86 ${n.version} (qemu-flavored CLI)\n`):Q(qD)}async function QR(e,t,n){if(e.state&&!e.bios&&!e.vgabios)return null;let r=await qR(t,e.bios??`${FR}/seabios.bin`,`-bios`);if(`exitCode`in r)return e.bios?r:Q(LR.replace(/^v86: /u,``));if(n.bios=r,e.nographic)return null;let i=await qR(t,e.vgabios??`${FR}/vgabios.bin`,`-vgabios`);return`exitCode`in i?e.vgabios?i:Q(LR.replace(/^v86: /u,``)):(n.vga_bios=i,null)}async function $R(e,t,n){let r=await QR(e,t,n);if(r)return r;for(let[r,i]of[[`cdrom`,`cdrom`],[`hda`,`hda`],[`fda`,`fda`],[`kernel`,`bzimage`],[`initrd`,`initrd`]]){let a=e[r];if(!a)continue;let o=await qR(t,a,`-${r}`);if(`exitCode`in o)return o;n[i]=o}if(e.append&&(n.cmdline=e.append),e.boot&&(n.boot_order=JR[e.boot]),e.state){let r=await qR(t,e.state,`-state`);if(`exitCode`in r)return r;n.initial_state=r}return e.fs9p&&(n.filesystem={baseurl:e.fs9p}),e.net&&(n.net_device=e.netRelay===`fetch`?{type:e.net,relay_url:`fetch`}:{type:e.net}),null}const ez=6e4;function tz(e){return e.v86?Promise.resolve():new Promise((t,n)=>{let r=setTimeout(()=>n(Error(`engine init timed out after ${ez/1e3}s`)),ez);e.add_listener(`emulator-loaded`,()=>{clearTimeout(r),t()})})}function nz(e,t){let n=e.network_adapter;if(!n||typeof n.fetch!=`function`)return Q(`relay=fetch: engine exposed no fetch-relay network adapter`);let r=t.proxiedFetch??h();return n.fetch=async(e,t)=>{let n=e.replace(/^http:\/\/(?!localhost[:/]|127\.0\.0\.1[:/])/u,`https://`),i={};t?.headers?.forEach((e,t)=>{i[t]=e});let a;if(t?.body){let e=``;for(let n of t.body)e+=String.fromCharCode(n);a=e}let o=await r(n,{method:t?.method,headers:i,body:a}),s=o.body,c=s.buffer.slice(s.byteOffset,s.byteOffset+s.byteLength);return{status:o.status,statusText:o.statusText,headers:new Headers(o.headers),redirected:!1,url:o.url,arrayBuffer:async()=>c}},null}async function rz(e,t,n){let r=HR(e);if(!r.ok)return Q(r.error);let i=r.parsed;if(sa(i.name))return Q(`VM '${i.name}' already running — stop it first or pick another -n name`);let a=UR(t),o=n.loadEngine?await n.loadEngine(a):await YD({ipk:a}),s={wasm_fn:eO(o.wasmModule),memory_size:i.memoryMib*1024*1024,vga_memory_size:i.vgaMemoryMib*1024*1024,autostart:!1,disable_speaker:!0,fastboot:!0},c=await $R(i,t,s);if(c)return c;let l=new o.V86(s),u={name:i.name,emulator:l,engineVersion:o.version,pid:null,startedAt:Date.now(),bootArgv:[`v86`,`start`,...e],serial:{buffer:``},screen:{mode:`text`,width:0,height:0,frame:null},serve:null},d=n.processManager??YR();if(d){let e=d.spawn({kind:`net`,argv:u.bootArgv,cwd:t.cwd,owner:{kind:`system`}});u.pid=e.pid,e.abort.signal.addEventListener(`abort`,()=>{iz(u,d)})}oa(u);try{if(await tz(l),i.netRelay===`fetch`){let e=nz(l,n);if(e)return await iz(u,d),e}aa(u),await l.run()}catch(e){return await iz(u,d),Q(`boot failed: ${e instanceof Error?e.message:String(e)}`)}u.onScreenChange=()=>{import(`./registry-DfuJBCKY.js`).then(({getComputerRegistry:e})=>{e()?.refresh(`v86:${u.name}`)})},import(`./v86-DKE8ZbX9.js`).then(({registerV86Computer:e})=>e(u)).catch(()=>{});let f=u.pid===null?``:` (pid ${u.pid})`;return $(`VM '${i.name}' booting in the background${f}.\nDrive it with: v86 text -n ${i.name} | v86 screenshot -n ${i.name} | v86 type -n ${i.name} "..."\n`)}async function iz(e,t){ca(e),ia(e.name),import(`./v86-DKE8ZbX9.js`).then(({unregisterV86Computer:t})=>t(e.name)).catch(()=>{});try{e.emulator.is_running()&&await e.emulator.stop()}catch{}try{await e.emulator.destroy()}catch{}t&&e.pid!==null&&t.exit(e.pid,null)}function az(){let e=ra();if(e.length===0)return $(`no VMs running
3208
3208
  `);let t=[`NAME PID STATE UP BOOT`];for(let n of e){let e=Math.round((Date.now()-n.startedAt)/1e3),r=e>=60?`${Math.floor(e/60)}m${e%60}s`:`${e}s`;t.push(`${n.name.padEnd(10)} ${String(n.pid??`-`).padEnd(6)} ${(n.emulator.is_running()?`running`:`stopped`).padEnd(9)} ${r.padEnd(9)} `+n.bootArgv.slice(2).join(` `))}return $(`${t.join(`
3209
- `)}\n`)}function iz(e,t){return`prefer: computer ${e} -c ${t}\n`}async function az(e,t,n,r){let i=UR(t);if(WR(i))return i;let[{runComputer:a},{getComputerRegistry:o,installComputerRegistry:s},c]=await Promise.all([import(`./run-CKdymE5z.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),oz(await a([`-c`,l,...n],e,{registry:u}),r,l)}function oz(e,t,n){let r=iz(t,n);return e.exitCode===0?$(`${e.stdout}${r}`):e.stderr.includes(`screenshot failed after input`)?$(`${e.stderr}${r}`):{stdout:e.stdout,stderr:e.stderr.replace(/^computer: /u,`v86: `),exitCode:e.exitCode}}async function sz(e,t){let{name:n,rest:r}=HR(e);if(r.length===0){let e=UR(n);return WR(e)?e:Q(`type: no text supplied`)}return az(t,n,[`type`,`--`,...r],`type`)}async function cz(e,t){let{name:n,rest:r}=HR(e);if(r.length===0){let e=UR(n);return WR(e)?e:Q(`key: no chord supplied`)}return az(t,n,[`key`,...r],`key`)}const lz=[`left`,`middle`,`right`];async function uz(e,t){let{name:n,rest:r}=HR(e),i=UR(n);if(WR(i))return i;let a=r.indexOf(`--to`);if(a!==-1){let e=r[a+1],i=e?/^(\d+),(\d+)$/u.exec(e):null;return i?az(t,n,[`--native`,`mousemove`,i[1],i[2]],`mousemove`):Q(`mouse: --to requires <x>,<y>`)}let o=r[0];if(o===`move`){let e=r[1],i=r[2];return e===void 0||i===void 0||!Number.isFinite(Number(e))||!Number.isFinite(Number(i))?Q(`mouse: move requires <dx> <dy>`):az(t,n,[`--native`,`mousemove`,e,i,`--relative`],`mousemove`)}if(o===`click`){let e=r[1]??`left`;if(!lz.includes(e))return Q(`mouse: unknown button '${r[1]}'`);let i=[`click`,e];return r.includes(`--double`)&&i.push(`--repeat`,`2`),az(t,n,i,`click`)}return Q(`mouse: expected move <dx> <dy>, click [button], or --to <x>,<y>`)}async function dz(e,t){let{name:n,rest:r}=HR(e);return az(t,n,[`screenshot`,...r],`screenshot`)}async function fz(e,t){let{name:n}=HR(e);return az(t,n,[`text`],`text`)}function pz(e){let{name:t}=HR(e);return $(`v86 serve is retired.\nUse: computer watch -c v86:${t}\nLive frames go to the overlay, lightbox, and bash rows.\n`)}function mz(e){let{name:t,rest:n}=HR(e),r=UR(t);if(WR(r))return r;let i=n.indexOf(`--send`);if(i!==-1){let e=n.slice(i+1).join(` `).replace(/\\n/gu,`
3209
+ `)}\n`)}function oz(e,t){return`prefer: computer ${e} -c ${t}\n`}async function sz(e,t,n,r){let i=GR(t);if(KR(i))return i;let[{runComputer:a},{getComputerRegistry:o,installComputerRegistry:s},c]=await Promise.all([import(`./run-BVlVC7jS.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),cz(await a([`-c`,l,...n],e,{registry:u}),r,l)}function cz(e,t,n){let r=oz(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 lz(e,t){let{name:n,rest:r}=WR(e);if(r.length===0){let e=GR(n);return KR(e)?e:Q(`type: no text supplied`)}return sz(t,n,[`type`,`--`,...r],`type`)}async function uz(e,t){let{name:n,rest:r}=WR(e);if(r.length===0){let e=GR(n);return KR(e)?e:Q(`key: no chord supplied`)}return sz(t,n,[`key`,...r],`key`)}const dz=[`left`,`middle`,`right`];async function fz(e,t){let{name:n,rest:r}=WR(e),i=GR(n);if(KR(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?sz(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>`):sz(t,n,[`--native`,`mousemove`,e,i,`--relative`],`mousemove`)}if(o===`click`){let e=r[1]??`left`;if(!dz.includes(e))return Q(`mouse: unknown button '${r[1]}'`);let i=[`click`,e];return r.includes(`--double`)&&i.push(`--repeat`,`2`),sz(t,n,i,`click`)}return Q(`mouse: expected move <dx> <dy>, click [button], or --to <x>,<y>`)}async function pz(e,t){let{name:n,rest:r}=WR(e);return sz(t,n,[`screenshot`,...r],`screenshot`)}async function mz(e,t){let{name:n}=WR(e);return sz(t,n,[`text`],`text`)}function hz(e){let{name:t}=WR(e);return $(`v86 serve is retired.\nUse: computer watch -c v86:${t}\nLive frames go to the overlay, lightbox, and bash rows.\n`)}function gz(e){let{name:t,rest:n}=WR(e),r=GR(t);if(KR(r))return r;let i=n.indexOf(`--send`);if(i!==-1){let e=n.slice(i+1).join(` `).replace(/\\n/gu,`
3210
3210
  `);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(`
3211
3211
  `).slice(-Math.max(1,e)).join(`
3212
- `)}\n`)}return $(r.serial.buffer?`${r.serial.buffer}\n`:``)}async function hz(e,t){let{name:n,rest:r}=HR(e),i=UR(n);if(WR(i))return i;let[a,o]=r;if(a!==`save`&&a!==`load`||!o)return Q(`state: expected save|load <file>`);let s=t.fs.resolvePath(t.cwd,o);if(a===`save`){let e=await i.emulator.save_state();return await t.fs.writeFile(s,new Uint8Array(e)),$(`${s} (${e.byteLength} bytes)\n`)}if(!await t.fs.exists(s))return Q(`state: no such file: ${o}`);let c=await t.fs.readFileBuffer(s),l=new ArrayBuffer(c.byteLength);return new Uint8Array(l).set(c),await i.emulator.restore_state(l),$()}async function gz(e,t){let{name:n,rest:r}=HR(e),i=UR(n);if(WR(i))return i;let a=t.processManager??qR();return r.includes(`--force`)&&a&&i.pid!==null?(a.signal(i.pid,`SIGKILL`),$(`VM '${n}' killed\n`)):(await nz(i,a),$(`VM '${n}' stopped\n`))}const _z=[`--name`,`--filter`,`--scoop`],vz={state:`inactive`,session:null};function yz(){return{stdout:`usage: webhook <command> [options]
3212
+ `)}\n`)}return $(r.serial.buffer?`${r.serial.buffer}\n`:``)}async function _z(e,t){let{name:n,rest:r}=WR(e),i=GR(n);if(KR(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 vz(e,t){let{name:n,rest:r}=WR(e),i=GR(n);if(KR(i))return i;let a=t.processManager??YR();return r.includes(`--force`)&&a&&i.pid!==null?(a.signal(i.pid,`SIGKILL`),$(`VM '${n}' killed\n`)):(await iz(i,a),$(`VM '${n}' stopped\n`))}const yz=[`--name`,`--filter`,`--scoop`],bz={state:`inactive`,session:null};function xz(){return{stdout:`usage: webhook <command> [options]
3213
3213
 
3214
3214
  Commands:
3215
3215
  create [--scoop <name>] [--name <name>] [--filter <code>] Create a new webhook endpoint
@@ -3229,21 +3229,21 @@ Examples:
3229
3229
  webhook create --scoop slack-relay --name slack --filter "(e) => ({ text: e.body.text, user: e.body.user })"
3230
3230
  webhook list
3231
3231
  webhook delete abc123
3232
- `,stderr:``,exitCode:0}}function bz(e){return e().session?.webhookUrl??null}function xz(e,t,n){return t?la(t,e):n()?ua(self.location.href,e):`(URL unavailable — connect a leader tray)`}function Sz(e){return{stdout:``,stderr:`webhook ${e}: kernel host has not booted yet — try again in a moment\n`,exitCode:1}}async function Cz(e){if(e.length!==1)return{stdout:``,stderr:`webhook rotate: takes no arguments
3232
+ `,stderr:``,exitCode:0}}function Sz(e){return e().session?.webhookUrl??null}function Cz(e,t,n){return t?la(t,e):n()?ua(self.location.href,e):`(URL unavailable — connect a leader tray)`}function wz(e){return{stdout:``,stderr:`webhook ${e}: kernel host has not booted yet — try again in a moment\n`,exitCode:1}}async function Tz(e){if(e.length!==1)return{stdout:``,stderr:`webhook rotate: takes no arguments
3233
3233
  `,exitCode:1};let t=y();if(!t)return{stdout:``,stderr:`webhook rotate: no leader panel connected
3234
3234
  `,exitCode:1};try{return await t.call(`tray-webhook-rotate`,void 0),{stdout:`Rotated webhook delivery secret. Old URLs no longer work; run webhook list for replacement URLs.
3235
3235
  `,stderr:``,exitCode:0}}catch{return{stdout:``,stderr:`webhook rotate: rotation failed; reconnect the leader and retry
3236
- `,exitCode:1}}}async function wz(e,t,n){let r=C(e.slice(1),{value:_z});if(`error`in r)return{stdout:``,stderr:`webhook create: ${r.error}\n`,exitCode:1};let i=r.values.get(`--name`)??`default`,a=r.values.get(`--filter`),o=Ri(r.values.get(`--scoop`),n);if(!t.hasLocalNodeServer()&&a)return{stdout:``,stderr:`webhook create: --filter is not supported in extension mode (CSP forbids dynamic eval) — drop --filter, or use standalone CLI mode
3237
- `,exitCode:1};let s=Dz(t);if(s)return s;let c=await ey();if(!c)return Sz(`create`);let l=await ny(c,`webhook create`,r.values.get(`--scoop`));if(l)return{stdout:``,stderr:l,exitCode:1};let u=await c.createWebhook(i,o,a),d=Oz(u.id,t),f=`Created webhook "${u.name}"\nID: ${u.id}\nURL: ${d}\n`;return u.scoop&&(f+=`Scoop: ${u.scoop}\n`),u.filter&&(f+=`Filter: ${u.filter}\n`),{stdout:f,stderr:``,exitCode:0}}async function Tz(e,t){let n=C(e.slice(1),{});if(`error`in n)return{stdout:``,stderr:`webhook list: ${n.error}\n`,exitCode:1};let r=await ey();if(!r)return Sz(`list`);let i=await r.listWebhooks();if(i.length===0)return{stdout:`No active webhooks
3238
- `,stderr:``,exitCode:0};let{trayUrlBase:a,urlResolutionError:o}=kz(t);return{stdout:Az(i.map(e=>({id:e.id,name:e.name,url:xz(e.id,a,t.hasLocalNodeServer),createdAt:e.createdAt,filter:e.filter,scoop:e.scoop})),a,o,t.hasLocalNodeServer),stderr:``,exitCode:0}}async function Ez(e,t){let n=C(e.slice(1),{});if(`error`in n)return{stdout:``,stderr:`webhook delete: ${n.error}\n`,exitCode:1};let r=n.positionals[0];if(n.positionals.length>1)return{stdout:``,stderr:`webhook delete: requires exactly one ID
3236
+ `,exitCode:1}}}async function Ez(e,t,n){let r=C(e.slice(1),{value:yz});if(`error`in r)return{stdout:``,stderr:`webhook create: ${r.error}\n`,exitCode:1};let i=r.values.get(`--name`)??`default`,a=r.values.get(`--filter`),o=Ri(r.values.get(`--scoop`),n);if(!t.hasLocalNodeServer()&&a)return{stdout:``,stderr:`webhook create: --filter is not supported in extension mode (CSP forbids dynamic eval) — drop --filter, or use standalone CLI mode
3237
+ `,exitCode:1};let s=kz(t);if(s)return s;let c=await ey();if(!c)return wz(`create`);let l=await ny(c,`webhook create`,r.values.get(`--scoop`));if(l)return{stdout:``,stderr:l,exitCode:1};let u=await c.createWebhook(i,o,a),d=Az(u.id,t),f=`Created webhook "${u.name}"\nID: ${u.id}\nURL: ${d}\n`;return u.scoop&&(f+=`Scoop: ${u.scoop}\n`),u.filter&&(f+=`Filter: ${u.filter}\n`),{stdout:f,stderr:``,exitCode:0}}async function Dz(e,t){let n=C(e.slice(1),{});if(`error`in n)return{stdout:``,stderr:`webhook list: ${n.error}\n`,exitCode:1};let r=await ey();if(!r)return wz(`list`);let i=await r.listWebhooks();if(i.length===0)return{stdout:`No active webhooks
3238
+ `,stderr:``,exitCode:0};let{trayUrlBase:a,urlResolutionError:o}=jz(t);return{stdout:Mz(i.map(e=>({id:e.id,name:e.name,url:Cz(e.id,a,t.hasLocalNodeServer),createdAt:e.createdAt,filter:e.filter,scoop:e.scoop})),a,o,t.hasLocalNodeServer),stderr:``,exitCode:0}}async function Oz(e,t){let n=C(e.slice(1),{});if(`error`in n)return{stdout:``,stderr:`webhook delete: ${n.error}\n`,exitCode:1};let r=n.positionals[0];if(n.positionals.length>1)return{stdout:``,stderr:`webhook delete: requires exactly one ID
3239
3239
  `,exitCode:1};if(!r)return{stdout:``,stderr:`webhook delete: requires an ID
3240
- `,exitCode:1};let i=await ey();if(!i)return Sz(`delete`);let a=y();try{if(a){if((await a.call(`tray-webhook-revoke`,{webhookId:r}))?.ok!==!0)throw Error(`revocation not acknowledged`)}else if(t.getLeaderStatus().session?.webhookUrl?.includes(`/wh/`))throw Error(`no leader panel`)}catch{return{stdout:``,stderr:`webhook delete: revocation failed; registration retained, reconnect the leader and retry
3241
- `,exitCode:1}}return await i.deleteWebhook(r)?{stdout:`Deleted webhook "${r}"\n`,stderr:``,exitCode:0}:{stdout:``,stderr:`webhook delete: webhook "${r}" not found\n`,exitCode:1}}function Dz(e){if(e.hasLocalNodeServer())return null;if(!bz(e.getLeaderStatus)){let t=e.getLeaderStatus().state;return{stdout:``,stderr:(t===`leader`?`webhook create: tray session is not connected yet — wait for the leader to attach`:`webhook create: requires extension-leader mode with a tray worker URL configured (current state: "${t}")`)+`
3242
- `,exitCode:1}}return null}function Oz(e,t){try{return xz(e,bz(t.getLeaderStatus),t.hasLocalNodeServer)}catch(e){return`(URL resolution failed: ${e instanceof Error?e.message:String(e)})`}}function kz(e){try{return{trayUrlBase:bz(e.getLeaderStatus),urlResolutionError:null}}catch(e){return{trayUrlBase:null,urlResolutionError:e instanceof Error?e.message:String(e)}}}function Az(e,t,n,r){let i=`Active webhooks:
3240
+ `,exitCode:1};let i=await ey();if(!i)return wz(`delete`);let a=y();try{if(a){if((await a.call(`tray-webhook-revoke`,{webhookId:r}))?.ok!==!0)throw Error(`revocation not acknowledged`)}else if(t.getLeaderStatus().session?.webhookUrl?.includes(`/wh/`))throw Error(`no leader panel`)}catch{return{stdout:``,stderr:`webhook delete: revocation failed; registration retained, reconnect the leader and retry
3241
+ `,exitCode:1}}return await i.deleteWebhook(r)?{stdout:`Deleted webhook "${r}"\n`,stderr:``,exitCode:0}:{stdout:``,stderr:`webhook delete: webhook "${r}" not found\n`,exitCode:1}}function kz(e){if(e.hasLocalNodeServer())return null;if(!Sz(e.getLeaderStatus)){let t=e.getLeaderStatus().state;return{stdout:``,stderr:(t===`leader`?`webhook create: tray session is not connected yet — wait for the leader to attach`:`webhook create: requires extension-leader mode with a tray worker URL configured (current state: "${t}")`)+`
3242
+ `,exitCode:1}}return null}function Az(e,t){try{return Cz(e,Sz(t.getLeaderStatus),t.hasLocalNodeServer)}catch(e){return`(URL resolution failed: ${e instanceof Error?e.message:String(e)})`}}function jz(e){try{return{trayUrlBase:Sz(e.getLeaderStatus),urlResolutionError:null}}catch(e){return{trayUrlBase:null,urlResolutionError:e instanceof Error?e.message:String(e)}}}function Mz(e,t,n,r){let i=`Active webhooks:
3243
3243
  `;for(let t of e)i+=` ${t.id} ${t.name.padEnd(20)} ${t.url}`,t.scoop&&(i+=` -> ${t.scoop}`),t.filter&&(i+=` [filtered]`),i+=`
3244
3244
  `;return n?i+=`\nNote: webhook URL resolution failed (${n}). Try again once the tray is connected.\n`:!r()&&!t&&(i+=`
3245
3245
  Note: webhook URLs require a leader tray. Configure one in Settings to expose POST endpoints.
3246
- `),i}function jz(e={}){let t={hasLocalNodeServer:e.hasLocalNodeServer??(()=>!0),getLeaderStatus:e.getLeaderStatus??(()=>vz)};return S(`webhook`,async(e,n)=>{if(e.length===0)return yz();let r=e[0];if(w(e,{valueFlags:r===`create`?_z:void 0}))return yz();try{switch(r){case`create`:return await wz(e,t,n.env);case`list`:return await Tz(e,t);case`delete`:return await Ez(e,t);case`rotate`:return await Cz(e);default:return{stdout:``,stderr:`webhook: unknown command "${r}"\n`,exitCode:1}}}catch(e){let t=e instanceof Error?e.message:String(e);return{stdout:``,stderr:`webhook ${r??`?`}: ${t}\n`,exitCode:1}}})}function Mz(){return{text:!0,binary:!1,oneMessage:!1,noClose:!1,exitOnEof:!1,unidirectional:!1,unidirectionalReverse:!1,insecure:!1,quiet:!1,verbose:0,nullTerminated:!1,base64:!1,jsonrpc:!1,jsonrpcOmit:!1,bufferSize:65536,connTimeoutMs:3e4,customHeaders:[],showHelp:!1}}function Nz(){return{stdout:`usage: websocat [FLAGS] [OPTIONS] <ws://URL | wss://URL>
3246
+ `),i}function Nz(e={}){let t={hasLocalNodeServer:e.hasLocalNodeServer??(()=>!0),getLeaderStatus:e.getLeaderStatus??(()=>bz)};return S(`webhook`,async(e,n)=>{if(e.length===0)return xz();let r=e[0];if(w(e,{valueFlags:r===`create`?yz:void 0}))return xz();try{switch(r){case`create`:return await Ez(e,t,n.env);case`list`:return await Dz(e,t);case`delete`:return await Oz(e,t);case`rotate`:return await Tz(e);default:return{stdout:``,stderr:`webhook: unknown command "${r}"\n`,exitCode:1}}}catch(e){let t=e instanceof Error?e.message:String(e);return{stdout:``,stderr:`webhook ${r??`?`}: ${t}\n`,exitCode:1}}})}function Pz(){return{text:!0,binary:!1,oneMessage:!1,noClose:!1,exitOnEof:!1,unidirectional:!1,unidirectionalReverse:!1,insecure:!1,quiet:!1,verbose:0,nullTerminated:!1,base64:!1,jsonrpc:!1,jsonrpcOmit:!1,bufferSize:65536,connTimeoutMs:3e4,customHeaders:[],showHelp:!1}}function Fz(){return{stdout:`usage: websocat [FLAGS] [OPTIONS] <ws://URL | wss://URL>
3247
3247
 
3248
3248
  Minimal websocat client. Sends stdin lines as WebSocket messages and prints
3249
3249
  received messages to stdout. Server mode and advanced specifiers (exec:, tcp:,
@@ -3285,14 +3285,14 @@ EXAMPLES:
3285
3285
  echo 'Page.navigate {"url":"https://example.com"}' \\
3286
3286
  | websocat -1 --jsonrpc --jsonrpc-omit-jsonrpc \\
3287
3287
  ws://127.0.0.1:9222/devtools/page/<id>
3288
- `,stderr:``,exitCode:0}}const Pz=new Set([`-s`,`--server-mode`,`--oneshot`,`--socks5`,`--basic-auth`,`--basic-auth-file`,`--header-to-env`,`--server-header`,`--exec`,`--ws-c-uri`,`--restrict-uri`,`--unlink`,`--strict`,`-S`]);function Fz(e,t,n,r){let i=e[t].indexOf(`=`);if(i!==-1&&e[t].startsWith(n))return{value:e[t].slice(i+1),next:t};let a=e[t+1];return a===void 0?(r.error=`websocat: missing value for ${n}\n`,null):{value:a,next:t+1}}function Iz(e,t,n,r=`positive integer`){let i=Number(t);return!Number.isFinite(i)||i<=0?(e.error=`websocat: ${n} expects ${r}\n`,null):i}function Lz(e,t){let n=Number(t);return!Number.isFinite(n)||n<1e3||n>4999?(e.error=`websocat: --close-status-code expects 1000..4999, got '${t}'\n`,null):n}function Rz(e,t){let n={"-t":()=>{e.text=!0,e.binary=!1},"--text":()=>{e.text=!0,e.binary=!1},"-b":()=>{e.binary=!0,e.text=!1},"--binary":()=>{e.binary=!0,e.text=!1},"-1n":()=>{e.oneMessage=!0,e.noClose=!0},"-n1":()=>{e.oneMessage=!0,e.noClose=!0},"-1":()=>{e.oneMessage=!0},"--one-message":()=>{e.oneMessage=!0},"-n":()=>{e.noClose=!0},"--no-close":()=>{e.noClose=!0},"-E":()=>{e.exitOnEof=!0},"--exit-on-eof":()=>{e.exitOnEof=!0},"-u":()=>{e.unidirectional=!0},"--unidirectional":()=>{e.unidirectional=!0},"-U":()=>{e.unidirectionalReverse=!0},"--unidirectional-reverse":()=>{e.unidirectionalReverse=!0},"-k":()=>{e.insecure=!0},"--insecure":()=>{e.insecure=!0},"-q":()=>{e.quiet=!0},"-0":()=>{e.nullTerminated=!0},"--null-terminated":()=>{e.nullTerminated=!0},"--base64":()=>{e.base64=!0},"--jsonrpc":()=>{e.jsonrpc=!0},"--jsonrpc-omit-jsonrpc":()=>{e.jsonrpcOmit=!0,e.jsonrpc=!0}}[t];return n?(n(),!0):!1}function zz(e,t){return t===`-v`?(e.verbose+=1,!0):t===`-vv`&&(e.verbose+=2,!0)}function Bz(e,t,n,r,i){let a=Fz(t,n,r,e);return a?(i(a.value),{nextIndex:a.next}):{stop:!0}}function Vz(e,t,n,r,i,a,o){let s=Fz(t,n,r,e);if(!s)return{stop:!0};let c=Iz(e,s.value,i,o);return c===null?{stop:!0}:(a(c),{nextIndex:s.next})}function Hz(e,t){return t.some(t=>e===t||e.startsWith(`${t}=`))}const Uz=[(e,t,n,r)=>{if(!Hz(r,[`--close-status-code`]))return null;let i=Fz(t,n,`--close-status-code`,e);if(!i)return{stop:!0};let a=Lz(e,i.value);return a===null?{stop:!0}:(e.closeStatus=a,{nextIndex:i.next})},(e,t,n,r)=>Hz(r,[`--close-reason`])?Bz(e,t,n,`--close-reason`,t=>{e.closeReason=t}):null,(e,t,n,r)=>Hz(r,[`-B`,`--buffer-size`])?Vz(e,t,n,r===`-B`?`-B`:`--buffer-size`,`--buffer-size`,t=>{e.bufferSize=t}):null,(e,t,n,r)=>Hz(r,[`--max-messages`])?Vz(e,t,n,`--max-messages`,`--max-messages`,t=>{e.maxMessages=t}):null,(e,t,n,r)=>Hz(r,[`--protocol`])?Bz(e,t,n,`--protocol`,t=>{e.protocol=t}):null,(e,t,n,r)=>{if(!Hz(r,[`--ping-interval`]))return null;let i=Fz(t,n,`--ping-interval`,e);return i?(e.pingInterval=Number(i.value),{nextIndex:i.next}):{stop:!0}},(e,t,n,r)=>Hz(r,[`--conn-timeout`])?Vz(e,t,n,`--conn-timeout`,`--conn-timeout`,t=>{e.connTimeoutMs=Math.round(t*1e3)},`positive seconds`):null,(e,t,n,r)=>Hz(r,[`-H`,`--header`])?Bz(e,t,n,r===`-H`?`-H`:`--header`,t=>{e.customHeaders.push(t)}):null];function Wz(e,t,n,r){for(let i of Uz){let a=i(e,t,n,r);if(a)return a}return null}function Gz(e){e.closeReason!==void 0&&e.closeStatus===void 0&&(e.error=`websocat: --close-reason requires --close-status-code (the WebSocket close frame cannot carry a reason without a status code)
3289
- `)}function Kz(e){let t=Mz();for(let n=0;n<e.length;n+=1){let r=e[n];if(r===`-h`||r===`--help`)return t.showHelp=!0,t;if(Pz.has(r)||Pz.has(r.split(`=`)[0]))return t.error=`websocat: flag '${r}' is not supported in slicc's minimal client\n`,t;if(Rz(t,r)||zz(t,r))continue;let i=Wz(t,e,n,r);if(i){if(`stop`in i)return t;n=i.nextIndex;continue}if(r.startsWith(`-`))return t.error=`websocat: unknown flag '${r}'\n`,t;if(t.url)return t.error=`websocat: extra positional argument '${r}' — advanced mode is not supported\n`,t;t.url=r}return Gz(t),t}function qz(e,t){if(!e)return[];let n=t?`\0`:`
3290
- `,r=e.split(n);return r.length>0&&r[r.length-1]===``&&r.pop(),r}function Jz(e,t,n){let r=e.trim();if(!r)return e;let i=r.search(/\s/),a=i===-1?r:r.slice(0,i),o=i===-1?``:r.slice(i+1).trim(),s=[];if(o)try{s=JSON.parse(o)}catch{s=[o]}let c={id:t,method:a,params:s};return n||(c.jsonrpc=`2.0`),JSON.stringify(c)}function Yz(e){try{return new TextDecoder(`utf-8`,{fatal:!1}).decode(e)}catch{return t(e)}}function Xz(e){if(typeof e==`string`)return{bytes:new TextEncoder().encode(e),isBinary:!1};if(e instanceof ArrayBuffer)return{bytes:new Uint8Array(e),isBinary:!0};if(ArrayBuffer.isView(e)){let t=e;return{bytes:new Uint8Array(t.buffer,t.byteOffset,t.byteLength),isBinary:!0}}return{bytes:new TextEncoder().encode(String(e)),isBinary:!1}}const Zz=1e4;function Qz(){let e,t;return{promise:new Promise((n,r)=>{e=n,t=r}),resolve:e,reject:t}}function $z(){let e=!1,t=Qz();return{...t,settle:n=>{e||(e=!0,t.resolve(n))}}}function eB(e,t){return e.length?e.join(t)+t:``}function tB(e){return e.length?e.join(`
3288
+ `,stderr:``,exitCode:0}}const Iz=new Set([`-s`,`--server-mode`,`--oneshot`,`--socks5`,`--basic-auth`,`--basic-auth-file`,`--header-to-env`,`--server-header`,`--exec`,`--ws-c-uri`,`--restrict-uri`,`--unlink`,`--strict`,`-S`]);function Lz(e,t,n,r){let i=e[t].indexOf(`=`);if(i!==-1&&e[t].startsWith(n))return{value:e[t].slice(i+1),next:t};let a=e[t+1];return a===void 0?(r.error=`websocat: missing value for ${n}\n`,null):{value:a,next:t+1}}function Rz(e,t,n,r=`positive integer`){let i=Number(t);return!Number.isFinite(i)||i<=0?(e.error=`websocat: ${n} expects ${r}\n`,null):i}function zz(e,t){let n=Number(t);return!Number.isFinite(n)||n<1e3||n>4999?(e.error=`websocat: --close-status-code expects 1000..4999, got '${t}'\n`,null):n}function Bz(e,t){let n={"-t":()=>{e.text=!0,e.binary=!1},"--text":()=>{e.text=!0,e.binary=!1},"-b":()=>{e.binary=!0,e.text=!1},"--binary":()=>{e.binary=!0,e.text=!1},"-1n":()=>{e.oneMessage=!0,e.noClose=!0},"-n1":()=>{e.oneMessage=!0,e.noClose=!0},"-1":()=>{e.oneMessage=!0},"--one-message":()=>{e.oneMessage=!0},"-n":()=>{e.noClose=!0},"--no-close":()=>{e.noClose=!0},"-E":()=>{e.exitOnEof=!0},"--exit-on-eof":()=>{e.exitOnEof=!0},"-u":()=>{e.unidirectional=!0},"--unidirectional":()=>{e.unidirectional=!0},"-U":()=>{e.unidirectionalReverse=!0},"--unidirectional-reverse":()=>{e.unidirectionalReverse=!0},"-k":()=>{e.insecure=!0},"--insecure":()=>{e.insecure=!0},"-q":()=>{e.quiet=!0},"-0":()=>{e.nullTerminated=!0},"--null-terminated":()=>{e.nullTerminated=!0},"--base64":()=>{e.base64=!0},"--jsonrpc":()=>{e.jsonrpc=!0},"--jsonrpc-omit-jsonrpc":()=>{e.jsonrpcOmit=!0,e.jsonrpc=!0}}[t];return n?(n(),!0):!1}function Vz(e,t){return t===`-v`?(e.verbose+=1,!0):t===`-vv`&&(e.verbose+=2,!0)}function Hz(e,t,n,r,i){let a=Lz(t,n,r,e);return a?(i(a.value),{nextIndex:a.next}):{stop:!0}}function Uz(e,t,n,r,i,a,o){let s=Lz(t,n,r,e);if(!s)return{stop:!0};let c=Rz(e,s.value,i,o);return c===null?{stop:!0}:(a(c),{nextIndex:s.next})}function Wz(e,t){return t.some(t=>e===t||e.startsWith(`${t}=`))}const Gz=[(e,t,n,r)=>{if(!Wz(r,[`--close-status-code`]))return null;let i=Lz(t,n,`--close-status-code`,e);if(!i)return{stop:!0};let a=zz(e,i.value);return a===null?{stop:!0}:(e.closeStatus=a,{nextIndex:i.next})},(e,t,n,r)=>Wz(r,[`--close-reason`])?Hz(e,t,n,`--close-reason`,t=>{e.closeReason=t}):null,(e,t,n,r)=>Wz(r,[`-B`,`--buffer-size`])?Uz(e,t,n,r===`-B`?`-B`:`--buffer-size`,`--buffer-size`,t=>{e.bufferSize=t}):null,(e,t,n,r)=>Wz(r,[`--max-messages`])?Uz(e,t,n,`--max-messages`,`--max-messages`,t=>{e.maxMessages=t}):null,(e,t,n,r)=>Wz(r,[`--protocol`])?Hz(e,t,n,`--protocol`,t=>{e.protocol=t}):null,(e,t,n,r)=>{if(!Wz(r,[`--ping-interval`]))return null;let i=Lz(t,n,`--ping-interval`,e);return i?(e.pingInterval=Number(i.value),{nextIndex:i.next}):{stop:!0}},(e,t,n,r)=>Wz(r,[`--conn-timeout`])?Uz(e,t,n,`--conn-timeout`,`--conn-timeout`,t=>{e.connTimeoutMs=Math.round(t*1e3)},`positive seconds`):null,(e,t,n,r)=>Wz(r,[`-H`,`--header`])?Hz(e,t,n,r===`-H`?`-H`:`--header`,t=>{e.customHeaders.push(t)}):null];function Kz(e,t,n,r){for(let i of Gz){let a=i(e,t,n,r);if(a)return a}return null}function qz(e){e.closeReason!==void 0&&e.closeStatus===void 0&&(e.error=`websocat: --close-reason requires --close-status-code (the WebSocket close frame cannot carry a reason without a status code)
3289
+ `)}function Jz(e){let t=Pz();for(let n=0;n<e.length;n+=1){let r=e[n];if(r===`-h`||r===`--help`)return t.showHelp=!0,t;if(Iz.has(r)||Iz.has(r.split(`=`)[0]))return t.error=`websocat: flag '${r}' is not supported in slicc's minimal client\n`,t;if(Bz(t,r)||Vz(t,r))continue;let i=Kz(t,e,n,r);if(i){if(`stop`in i)return t;n=i.nextIndex;continue}if(r.startsWith(`-`))return t.error=`websocat: unknown flag '${r}'\n`,t;if(t.url)return t.error=`websocat: extra positional argument '${r}' — advanced mode is not supported\n`,t;t.url=r}return qz(t),t}function Yz(e,t){if(!e)return[];let n=t?`\0`:`
3290
+ `,r=e.split(n);return r.length>0&&r[r.length-1]===``&&r.pop(),r}function Xz(e,t,n){let r=e.trim();if(!r)return e;let i=r.search(/\s/),a=i===-1?r:r.slice(0,i),o=i===-1?``:r.slice(i+1).trim(),s=[];if(o)try{s=JSON.parse(o)}catch{s=[o]}let c={id:t,method:a,params:s};return n||(c.jsonrpc=`2.0`),JSON.stringify(c)}function Zz(e){try{return new TextDecoder(`utf-8`,{fatal:!1}).decode(e)}catch{return t(e)}}function Qz(e){if(typeof e==`string`)return{bytes:new TextEncoder().encode(e),isBinary:!1};if(e instanceof ArrayBuffer)return{bytes:new Uint8Array(e),isBinary:!0};if(ArrayBuffer.isView(e)){let t=e;return{bytes:new Uint8Array(t.buffer,t.byteOffset,t.byteLength),isBinary:!0}}return{bytes:new TextEncoder().encode(String(e)),isBinary:!1}}const $z=1e4;function eB(){let e,t;return{promise:new Promise((n,r)=>{e=n,t=r}),resolve:e,reject:t}}function tB(){let e=!1,t=eB();return{...t,settle:n=>{e||(e=!0,t.resolve(n))}}}function nB(e,t){return e.length?e.join(t)+t:``}function rB(e){return e.length?e.join(`
3291
3291
  `)+`
3292
- `:``}function nB(e,t,n){e.quiet||t.push(`websocat: ${n}`)}function rB(e,t){e.verbose<1||(e.customHeaders.length>0&&nB(e,t,`-H/--header is accepted for parity but browsers do not allow setting WebSocket request headers; only --protocol is honored`),e.pingInterval!==void 0&&nB(e,t,`--ping-interval has no effect in browsers (no ping API exposed)`),e.insecure&&nB(e,t,`-k/--insecure has no effect in browsers`))}function iB(e,t){try{let n=t.protocol?new e(t.url,t.protocol):new e(t.url);return n.binaryType=`arraybuffer`,{ws:n}}catch(e){return{error:`websocat: connect failed: ${e instanceof Error?e.message:String(e)}\n`}}}function aB(e,t,n,r){if(n.outLines.length<Zz){n.outLines.push(r);return}n.droppedForOverflow===0&&nB(e,t,`output buffer reached ${Zz} messages; dropping further inbound messages — use -1, --max-messages, or pipe to a file with a different tool for long-running streams`),n.droppedForOverflow+=1}function oB(e,n,r){let{bytes:i,isBinary:a}=Xz(r);return i.length>e.bufferSize&&(nB(e,n,`inbound message of ${i.length} bytes exceeds --buffer-size ${e.bufferSize}; truncating`),i=i.slice(0,e.bufferSize)),a&&e.base64?t(i):Yz(i)}function sB(e,t){return e.maxMessages!==void 0&&t>=e.maxMessages||e.oneMessage}function cB(e,t,n){try{n===void 0?e.close(t):e.close(t,n)}catch{}}function lB(e,t){setTimeout(()=>{cB(t,e.closeStatus??1e3,e.closeReason)},0)}function uB(e,t,n){let r=qz(n,t.nullTerminated),i=1,a=0,o=t.oneMessage?r.slice(0,1):r;for(let n of o){let r=n;t.jsonrpc&&(r=Jz(n,i,t.jsonrpcOmit),i+=1),t.binary?e.send(new TextEncoder().encode(r).buffer):e.send(r),a+=1}return a}function dB(e,t,n){!t.oneMessage&&!t.noClose&&(t.exitOnEof||n===0)&&lB(t,e)}async function fB(e,t,n){let r=[];rB(e,r);let i=e.nullTerminated?`\0`:`
3293
- `,a=iB(n,e);if(`error`in a)return{stdout:``,stderr:a.error,exitCode:1};let{ws:o}=a,s={outLines:[],droppedForOverflow:0,received:0,finishing:!1},c=!1,l=Qz(),u=$z(),d=0,f=!1,p=setTimeout(()=>{f=!0,cB(o,1e3),c||l.reject(Error(`connect timeout`))},e.connTimeoutMs),m=()=>{if(e.noClose){u.settle(d);return}cB(o,e.closeStatus??1e3,e.closeReason)};o.onopen=()=>{clearTimeout(p),c=!0,l.resolve()},o.onmessage=t=>{if(!s.finishing){if(!e.unidirectional){let n=oB(e,r,t.data);aB(e,r,s,n)}s.received+=1,sB(e,s.received)&&(s.finishing=!0,m())}},o.onerror=()=>{f||(nB(e,r,`websocket error`),d=1,c||l.reject(Error(`connect failed`)))},o.onclose=t=>{if(clearTimeout(p),f){u.settle(124);return}e.verbose>=1&&nB(e,r,`closed code=${t.code} reason=${JSON.stringify(t.reason||``)}`),d===0&&t.code!==1e3&&t.code!==1005&&t.code!==1001&&(d=1),c||l.reject(Error(`connect closed (code ${t.code})`)),u.settle(d)};try{await l.promise}catch(e){clearTimeout(p);let t=e instanceof Error?e.message:String(e);return{stdout:eB(s.outLines,i),stderr:tB(r.concat([`websocat: ${t}`])),exitCode:t===`connect timeout`?124:1}}e.unidirectionalReverse?!e.noClose&&e.exitOnEof&&!e.oneMessage&&lB(e,o):dB(o,e,uB(o,e,t));let h=await u.promise;return s.droppedForOverflow>0&&nB(e,r,`dropped ${s.droppedForOverflow} inbound message(s) due to output buffer cap`),{stdout:eB(s.outLines,i),stderr:tB(r),exitCode:h}}function pB(e){return{stdout:``,stderr:e,exitCode:2}}function mB(e){return e.WebSocketCtor??(typeof WebSocket<`u`?WebSocket:void 0)}async function hB(e,t,n={}){let r=Kz(e);if(r.showHelp)return Nz();if(r.error)return pB(r.error);if(!r.url)return pB(`websocat: missing ws:// or wss:// URL (use --help for usage)
3294
- `);if(!/^wss?:\/\//i.test(r.url))return pB(`websocat: URL must start with ws:// or wss://, got '${r.url}'\n`);let i=mB(n);return i?fB(r,t.stdin,i):{stdout:``,stderr:`websocat: no WebSocket implementation available in this runtime
3295
- `,exitCode:1}}function gB(){return S(`websocat`,async(e,t)=>hB(e,{stdin:P(t.stdin)}))}function _B(){return S(`__wf_progress`,async()=>({stdout:``,stderr:``,exitCode:0}))}const vB={commands:new Map,collisions:[]};async function yB(e,t){let n=Vn(t);return e.scriptCatalog?e.scriptCatalog.getJshIndex(n):e.fs?Wn(e.fs,n):vB}async function bB(e){return e.scriptCatalog?e.scriptCatalog.getWorkflowCommands():e.fs?ri(e.fs):new Map}function xB(e,t,n,r,i,a,o){if(i.has(e)){let i=[`/usr/bin/${e}`];if((t||r)&&i.push(` (shadowed by built-in ${e})`),t){let e=n?[t,...n.shadowedPaths]:[t];for(let t of e)i.push(` (shadowed ${t})`)}return{lines:i,found:!0}}if(t){let e=[t];if(n)for(let t of n.shadowedPaths)e.push(` (shadowed ${t})`);return r&&e.push(` ${r.path} (workflow, shadowed by .jsh)`),{lines:e,found:!0}}return r?{lines:[`${r.path} (workflow)`],found:!0}:a.has(e)&&!o.has(e)?{lines:[`/usr/bin/${e}`],found:!0}:{lines:[],found:!1}}function SB(e={}){let t=e.scriptCatalog!==void 0||e.fs!==void 0?e:typeof e.walk==`function`&&typeof e.exists==`function`?{fs:e}:{};return S(`which`,async(e,n)=>{if(w(e))return{stdout:`which - locate a command
3292
+ `:``}function iB(e,t,n){e.quiet||t.push(`websocat: ${n}`)}function aB(e,t){e.verbose<1||(e.customHeaders.length>0&&iB(e,t,`-H/--header is accepted for parity but browsers do not allow setting WebSocket request headers; only --protocol is honored`),e.pingInterval!==void 0&&iB(e,t,`--ping-interval has no effect in browsers (no ping API exposed)`),e.insecure&&iB(e,t,`-k/--insecure has no effect in browsers`))}function oB(e,t){try{let n=t.protocol?new e(t.url,t.protocol):new e(t.url);return n.binaryType=`arraybuffer`,{ws:n}}catch(e){return{error:`websocat: connect failed: ${e instanceof Error?e.message:String(e)}\n`}}}function sB(e,t,n,r){if(n.outLines.length<$z){n.outLines.push(r);return}n.droppedForOverflow===0&&iB(e,t,`output buffer reached ${$z} messages; dropping further inbound messages — use -1, --max-messages, or pipe to a file with a different tool for long-running streams`),n.droppedForOverflow+=1}function cB(e,n,r){let{bytes:i,isBinary:a}=Qz(r);return i.length>e.bufferSize&&(iB(e,n,`inbound message of ${i.length} bytes exceeds --buffer-size ${e.bufferSize}; truncating`),i=i.slice(0,e.bufferSize)),a&&e.base64?t(i):Zz(i)}function lB(e,t){return e.maxMessages!==void 0&&t>=e.maxMessages||e.oneMessage}function uB(e,t,n){try{n===void 0?e.close(t):e.close(t,n)}catch{}}function dB(e,t){setTimeout(()=>{uB(t,e.closeStatus??1e3,e.closeReason)},0)}function fB(e,t,n){let r=Yz(n,t.nullTerminated),i=1,a=0,o=t.oneMessage?r.slice(0,1):r;for(let n of o){let r=n;t.jsonrpc&&(r=Xz(n,i,t.jsonrpcOmit),i+=1),t.binary?e.send(new TextEncoder().encode(r).buffer):e.send(r),a+=1}return a}function pB(e,t,n){!t.oneMessage&&!t.noClose&&(t.exitOnEof||n===0)&&dB(t,e)}async function mB(e,t,n){let r=[];aB(e,r);let i=e.nullTerminated?`\0`:`
3293
+ `,a=oB(n,e);if(`error`in a)return{stdout:``,stderr:a.error,exitCode:1};let{ws:o}=a,s={outLines:[],droppedForOverflow:0,received:0,finishing:!1},c=!1,l=eB(),u=tB(),d=0,f=!1,p=setTimeout(()=>{f=!0,uB(o,1e3),c||l.reject(Error(`connect timeout`))},e.connTimeoutMs),m=()=>{if(e.noClose){u.settle(d);return}uB(o,e.closeStatus??1e3,e.closeReason)};o.onopen=()=>{clearTimeout(p),c=!0,l.resolve()},o.onmessage=t=>{if(!s.finishing){if(!e.unidirectional){let n=cB(e,r,t.data);sB(e,r,s,n)}s.received+=1,lB(e,s.received)&&(s.finishing=!0,m())}},o.onerror=()=>{f||(iB(e,r,`websocket error`),d=1,c||l.reject(Error(`connect failed`)))},o.onclose=t=>{if(clearTimeout(p),f){u.settle(124);return}e.verbose>=1&&iB(e,r,`closed code=${t.code} reason=${JSON.stringify(t.reason||``)}`),d===0&&t.code!==1e3&&t.code!==1005&&t.code!==1001&&(d=1),c||l.reject(Error(`connect closed (code ${t.code})`)),u.settle(d)};try{await l.promise}catch(e){clearTimeout(p);let t=e instanceof Error?e.message:String(e);return{stdout:nB(s.outLines,i),stderr:rB(r.concat([`websocat: ${t}`])),exitCode:t===`connect timeout`?124:1}}e.unidirectionalReverse?!e.noClose&&e.exitOnEof&&!e.oneMessage&&dB(e,o):pB(o,e,fB(o,e,t));let h=await u.promise;return s.droppedForOverflow>0&&iB(e,r,`dropped ${s.droppedForOverflow} inbound message(s) due to output buffer cap`),{stdout:nB(s.outLines,i),stderr:rB(r),exitCode:h}}function hB(e){return{stdout:``,stderr:e,exitCode:2}}function gB(e){return e.WebSocketCtor??(typeof WebSocket<`u`?WebSocket:void 0)}async function _B(e,t,n={}){let r=Jz(e);if(r.showHelp)return Fz();if(r.error)return hB(r.error);if(!r.url)return hB(`websocat: missing ws:// or wss:// URL (use --help for usage)
3294
+ `);if(!/^wss?:\/\//i.test(r.url))return hB(`websocat: URL must start with ws:// or wss://, got '${r.url}'\n`);let i=gB(n);return i?mB(r,t.stdin,i):{stdout:``,stderr:`websocat: no WebSocket implementation available in this runtime
3295
+ `,exitCode:1}}function vB(){return S(`websocat`,async(e,t)=>_B(e,{stdin:P(t.stdin)}))}function yB(){return S(`__wf_progress`,async()=>({stdout:``,stderr:``,exitCode:0}))}const bB={commands:new Map,collisions:[]};async function xB(e,t){let n=Vn(t);return e.scriptCatalog?e.scriptCatalog.getJshIndex(n):e.fs?Wn(e.fs,n):bB}async function SB(e){return e.scriptCatalog?e.scriptCatalog.getWorkflowCommands():e.fs?ri(e.fs):new Map}function CB(e,t,n,r,i,a,o){if(i.has(e)){let i=[`/usr/bin/${e}`];if((t||r)&&i.push(` (shadowed by built-in ${e})`),t){let e=n?[t,...n.shadowedPaths]:[t];for(let t of e)i.push(` (shadowed ${t})`)}return{lines:i,found:!0}}if(t){let e=[t];if(n)for(let t of n.shadowedPaths)e.push(` (shadowed ${t})`);return r&&e.push(` ${r.path} (workflow, shadowed by .jsh)`),{lines:e,found:!0}}return r?{lines:[`${r.path} (workflow)`],found:!0}:a.has(e)&&!o.has(e)?{lines:[`/usr/bin/${e}`],found:!0}:{lines:[],found:!1}}function wB(e={}){let t=e.scriptCatalog!==void 0||e.fs!==void 0?e:typeof e.walk==`function`&&typeof e.exists==`function`?{fs:e}:{};return S(`which`,async(e,n)=>{if(w(e))return{stdout:`which - locate a command
3296
3296
 
3297
3297
  Usage: which <command> [command...]
3298
3298
 
@@ -3303,9 +3303,9 @@ Prints the path of the given command(s).
3303
3303
 
3304
3304
  Exit code 0 if all commands found, 1 if any not found.
3305
3305
  `,stderr:``,exitCode:0};let r=C(e,{});if(`error`in r)return{stdout:``,stderr:`which: ${r.error}\n`,exitCode:1};if(r.positionals.length===0)return{stdout:``,stderr:`which: missing argument
3306
- `,exitCode:1};let i=n.getRegisteredCommands?.()??[],a=new Set(i),o=await yB(t,n.env.get(`PATH`)),s=o.commands,c=new Map(o.collisions.map(e=>[e.name,e])),l=await bB(t),u=typeof t.getStaticBuiltins==`function`?new Set(t.getStaticBuiltins()):a,d=new Set(t.getScriptRegisteredNames?.()??[]),f=[],p=!0;for(let e of r.positionals){let t=s.get(e),n=l.get(e),r=xB(e,t,c.get(e),n,u,a,d);f.push(...r.lines),r.found||(p=!1)}return{stdout:f.length>0?f.join(`
3306
+ `,exitCode:1};let i=n.getRegisteredCommands?.()??[],a=new Set(i),o=await xB(t,n.env.get(`PATH`)),s=o.commands,c=new Map(o.collisions.map(e=>[e.name,e])),l=await SB(t),u=typeof t.getStaticBuiltins==`function`?new Set(t.getStaticBuiltins()):a,d=new Set(t.getScriptRegisteredNames?.()??[]),f=[],p=!0;for(let e of r.positionals){let t=s.get(e),n=l.get(e),r=CB(e,t,c.get(e),n,u,a,d);f.push(...r.lines),r.found||(p=!1)}return{stdout:f.length>0?f.join(`
3307
3307
  `)+`
3308
- `:``,stderr:``,exitCode:+!p}})}const CB=`__slicc_workflows`,wB=String.raw`
3308
+ `:``,stderr:``,exitCode:+!p}})}const TB=`__slicc_workflows`,EB=String.raw`
3309
3309
  class WorkflowError extends Error {}
3310
3310
  class WorkflowDeterminismError extends WorkflowError {}
3311
3311
  class WorkflowAgentCapError extends WorkflowError {}
@@ -3418,40 +3418,40 @@ function log(message) {
3418
3418
  }
3419
3419
  const budget = { total: (__WF.budget == null ? null : __WF.budget), spent() { return 0; }, remaining() { return this.total == null ? Infinity : Math.max(0, this.total - this.spent()); } };
3420
3420
  function workflow() { throw new WorkflowNestingUnsupportedError('nested workflow() unsupported in SP1'); }
3421
- `;function TB(){return`WF_RESULT_${globalThis.crypto?.randomUUID?.()??`${Date.now().toString(36)}${Math.random().toString(36).slice(2)}`}`}function EB(e){let t=AB(e);return t===null?{name:null,description:null}:{name:jB(t,`name`),description:jB(t,`description`)}}function DB(e){return e.replace(/\bexport\s+(const|let|var|function|async\s+function|class)\b/g,`$1`)}function OB(e){return`const __emit = console.log.bind(console);
3421
+ `;function DB(){return`WF_RESULT_${globalThis.crypto?.randomUUID?.()??`${Date.now().toString(36)}${Math.random().toString(36).slice(2)}`}`}function OB(e){let t=MB(e);return t===null?{name:null,description:null}:{name:NB(t,`name`),description:NB(t,`description`)}}function kB(e){return e.replace(/\bexport\s+(const|let|var|function|async\s+function|class)\b/g,`$1`)}function AB(e){return`const __emit = console.log.bind(console);
3422
3422
  const __stringify = JSON.stringify.bind(JSON);
3423
- const __WF = ${JSON.stringify(e.config)};\n${e.prelude}\nconst __r = await (async () => {\n${DB(e.body)}\n})();\n__emit(${JSON.stringify(e.sentinel)} + __stringify(__r ?? null));\n`}function kB(e,t){let n=e.split(`
3423
+ const __WF = ${JSON.stringify(e.config)};\n${e.prelude}\nconst __r = await (async () => {\n${kB(e.body)}\n})();\n__emit(${JSON.stringify(e.sentinel)} + __stringify(__r ?? null));\n`}function jB(e,t){let n=e.split(`
3424
3424
  `);for(let e=n.length-1;e>=0;e--)if(n[e].startsWith(t)){let r=[...n.slice(0,e),...n.slice(e+1)].join(`
3425
- `).replace(/\n+$/,``);try{return{result:JSON.parse(n[e].slice(t.length)),log:r,hadResult:!0}}catch{return{result:null,log:r,hadResult:!0}}}return{result:null,log:e.replace(/\n+$/,``),hadResult:!1}}function AB(e){let t=/\bmeta\s*=\s*\{/.exec(e);if(!t)return null;let n=t.index+t[0].length-1,r=0;for(let t=n;t<e.length;t++)if(e[t]===`{`)r++;else if(e[t]===`}`&&--r===0)return e.slice(n+1,t);return null}function jB(e,t){let n=RegExp(`\\b${t}\\s*:\\s*(['"\\\`])((?:\\\\.|(?!\\1).)*)\\1`).exec(e);return n?n[2]:null}const MB=e(`workflow-command`),NB=`usage: workflow run <file.js> [--args <json>] [--budget <n>] [--concurrency <n>] [--wait]
3425
+ `).replace(/\n+$/,``);try{return{result:JSON.parse(n[e].slice(t.length)),log:r,hadResult:!0}}catch{return{result:null,log:r,hadResult:!0}}}return{result:null,log:e.replace(/\n+$/,``),hadResult:!1}}function MB(e){let t=/\bmeta\s*=\s*\{/.exec(e);if(!t)return null;let n=t.index+t[0].length-1,r=0;for(let t=n;t<e.length;t++)if(e[t]===`{`)r++;else if(e[t]===`}`&&--r===0)return e.slice(n+1,t);return null}function NB(e,t){let n=RegExp(`\\b${t}\\s*:\\s*(['"\\\`])((?:\\\\.|(?!\\1).)*)\\1`).exec(e);return n?n[2]:null}const PB=e(`workflow-command`),FB=`usage: workflow run <file.js> [--args <json>] [--budget <n>] [--concurrency <n>] [--wait]
3426
3426
  workflow run --script '<inline js>' [...]
3427
3427
  workflow list
3428
3428
  workflow status <runId>
3429
3429
  workflow stop <runId>
3430
3430
  workflow save <runId> <name> [--force]
3431
3431
  Runs a Claude-Code-format dynamic workflow. Default is non-blocking (returns a run id);
3432
- pass --wait to block and print the full result.`,PB=new Set([`list`,`status`,`stop`,`save`]);function FB(){return globalThis[CB]}function IB(){let e=globalThis.navigator?.hardwareConcurrency??8;return Math.min(16,Math.max(8,e*4))}function LB(e,t,n,r){let i=t[n];switch(i){case`-h`:case`--help`:return{i:n,help:!0};case`--script`:return e.script=t[++n],{i:n};case`--wait`:return e.wait=!0,{i:n};case`--args`:try{e.args=JSON.parse(t[++n]??``),e.hasArgs=!0}catch{return{i:n,error:`workflow: --args must be valid JSON`}}return{i:n};case`--budget`:{let r=Number(t[++n]);return Number.isFinite(r)?(e.budget=r,{i:n}):{i:n,error:`workflow: --budget must be a number`}}case`--concurrency`:{let i=Number(t[++n]);return Number.isFinite(i)?(e.cap=Math.min(r,Math.max(1,Math.trunc(i))),{i:n}):{i:n,error:`workflow: --concurrency must be a number`}}default:return i.startsWith(`-`)?{i:n,error:`workflow: unknown flag '${i}'`}:e.file===void 0?(e.file=i,{i:n}):{i:n,error:`workflow: too many arguments`}}}function RB(e){if(e[0]!==`run`)return e.length===0||e.includes(`-h`)||e.includes(`--help`)?{help:!0}:{error:`workflow: unknown subcommand '${e[0]}' (only 'run' in SP1)`};let t=IB(),n={budget:null,cap:Math.min(8,t)};for(let r=1;r<e.length;r++){let i=LB(n,e,r,t);if(i.help)return{help:!0};if(i.error)return{error:i.error};r=i.i}return n.script===void 0&&n.file===void 0?{error:`workflow: a <file.js> or --script is required`}:n}function zB(e={}){return S(`workflow`,async(t,n)=>{if(PB.has(t[0])&&w(t.slice(1)))return{stdout:NB+`
3433
- `,stderr:``,exitCode:0};if(t[0]===`list`||t[0]===`status`||t[0]===`stop`)return GB(t,n);if(t[0]===`save`)return WB(t,n,e);let r=RB(t);if(r.help)return{stdout:NB+`
3432
+ pass --wait to block and print the full result.`,IB=new Set([`list`,`status`,`stop`,`save`]);function LB(){return globalThis[TB]}function RB(){let e=globalThis.navigator?.hardwareConcurrency??8;return Math.min(16,Math.max(8,e*4))}function zB(e,t,n,r){let i=t[n];switch(i){case`-h`:case`--help`:return{i:n,help:!0};case`--script`:return e.script=t[++n],{i:n};case`--wait`:return e.wait=!0,{i:n};case`--args`:try{e.args=JSON.parse(t[++n]??``),e.hasArgs=!0}catch{return{i:n,error:`workflow: --args must be valid JSON`}}return{i:n};case`--budget`:{let r=Number(t[++n]);return Number.isFinite(r)?(e.budget=r,{i:n}):{i:n,error:`workflow: --budget must be a number`}}case`--concurrency`:{let i=Number(t[++n]);return Number.isFinite(i)?(e.cap=Math.min(r,Math.max(1,Math.trunc(i))),{i:n}):{i:n,error:`workflow: --concurrency must be a number`}}default:return i.startsWith(`-`)?{i:n,error:`workflow: unknown flag '${i}'`}:e.file===void 0?(e.file=i,{i:n}):{i:n,error:`workflow: too many arguments`}}}function BB(e){if(e[0]!==`run`)return e.length===0||e.includes(`-h`)||e.includes(`--help`)?{help:!0}:{error:`workflow: unknown subcommand '${e[0]}' (only 'run' in SP1)`};let t=RB(),n={budget:null,cap:Math.min(8,t)};for(let r=1;r<e.length;r++){let i=zB(n,e,r,t);if(i.help)return{help:!0};if(i.error)return{error:i.error};r=i.i}return n.script===void 0&&n.file===void 0?{error:`workflow: a <file.js> or --script is required`}:n}function VB(e={}){return S(`workflow`,async(t,n)=>{if(IB.has(t[0])&&w(t.slice(1)))return{stdout:FB+`
3433
+ `,stderr:``,exitCode:0};if(t[0]===`list`||t[0]===`status`||t[0]===`stop`)return qB(t,n);if(t[0]===`save`)return KB(t,n,e);let r=BB(t);if(r.help)return{stdout:FB+`
3434
3434
  `,stderr:``,exitCode:0};if(r.error)return{stdout:``,stderr:r.error+`
3435
- `,exitCode:1};let i,a;if(r.script!==void 0)i=r.script,a=`<workflow>`;else{let e=n.fs.resolvePath(n.cwd,r.file);if(!await n.fs.exists(e))return{stdout:``,stderr:`workflow: file not found: ${r.file}\n`,exitCode:1};i=await n.fs.readFile(e),a=r.file}let o=EB(i);if(!o.name)return{stdout:``,stderr:`workflow: script must define a meta block with a name (description optional)
3436
- `,exitCode:1};let s=TB().slice(10,22),c=`/shared/workflow-runs/${s}/scratch/`;await n.fs.mkdir(c,{recursive:!0});let l=TB(),u=OB({prelude:wB,config:{...r.hasArgs?{args:r.args}:{},cap:r.cap??8,budget:r.budget??null,cwd:n.cwd,agentCwd:c},body:i,sentinel:l});return r.wait?BB(u,a,l,o,n):VB({code:u,source:i,name:o.name,filename:a,sentinel:l,runId:s,ctx:n,options:e})})}async function BB(e,t,n,r,i){let a;try{a=await Hr(e,[`workflow`,t],i,void 0,{filename:t})}catch(e){return MB.error(`workflow run failed`,e),{stdout:``,stderr:`workflow: ${e instanceof Error?e.message:String(e)}\n`,exitCode:1}}return KB(r,a,n)}async function VB(e){let t=FB();if(!t)return{stdout:``,stderr:`workflow: run manager not available
3437
- `,exitCode:1};let n=e.options.getParentJid?.(),{runId:r}=await t.start({code:e.code,source:e.source,name:e.name,filename:e.filename,parentJid:n,ctx:e.ctx,sentinel:e.sentinel,runId:e.runId});return{stdout:`▶ workflow '${e.name}' started (run ${r}). Watch: workflow status ${r}\n`,stderr:``,exitCode:0}}const HB=/^[a-z0-9][a-z0-9-]*$/,UB=`/workspace/.workflows`;async function WB(e,t,n){let r=!1,i=[];for(let t of e.slice(1))t===`--force`?r=!0:i.push(t);let[a,o,...s]=i;if(!a||!o||s.length>0)return{stdout:``,stderr:`usage: workflow save <runId> <name> [--force]
3438
- `,exitCode:1};if(!HB.test(o))return{stdout:``,stderr:`workflow: invalid name '${o}' (use [a-z0-9][a-z0-9-]*)\n`,exitCode:1};let c=FB()?.getRun(a);if(!c)return{stdout:``,stderr:`workflow: no run '${a}' (only backgrounded runs are saveable; --wait runs are not)\n`,exitCode:1};if(!c.source)return{stdout:``,stderr:`workflow: run '${a}' has no source to save\n`,exitCode:1};let l=`${UB}/${o}.workflow.js`;if(await t.fs.exists(l)){if(!r)return{stdout:``,stderr:`workflow: ${l} already exists (pass --force to overwrite)\n`,exitCode:1}}else if(new Set(t.getRegisteredCommands?.()??[]).has(o))return{stdout:``,stderr:`workflow: '${o}' is already a command — choose another name\n`,exitCode:1};await t.fs.mkdir(UB,{recursive:!0}),await t.fs.writeFile(l,c.source);try{await n.syncScriptCommands?.()}catch(e){MB.warn(`workflow save: command re-sync failed; workflow saved, will register on next sync`,{name:o,error:e instanceof Error?e.message:String(e)})}return{stdout:`saved workflow '${o}' → ${l}\nrun it as '${o}' (or 'workflow run ${l}' if a built-in/.jsh shadows the name)\n`,stderr:``,exitCode:0}}async function GB(e,t){let n=FB();if(e[0]===`list`){if(!n)return{stdout:``,stderr:`workflow: run manager not available
3435
+ `,exitCode:1};let i,a;if(r.script!==void 0)i=r.script,a=`<workflow>`;else{let e=n.fs.resolvePath(n.cwd,r.file);if(!await n.fs.exists(e))return{stdout:``,stderr:`workflow: file not found: ${r.file}\n`,exitCode:1};i=await n.fs.readFile(e),a=r.file}let o=OB(i);if(!o.name)return{stdout:``,stderr:`workflow: script must define a meta block with a name (description optional)
3436
+ `,exitCode:1};let s=DB().slice(10,22),c=`/shared/workflow-runs/${s}/scratch/`;await n.fs.mkdir(c,{recursive:!0});let l=DB(),u=AB({prelude:EB,config:{...r.hasArgs?{args:r.args}:{},cap:r.cap??8,budget:r.budget??null,cwd:n.cwd,agentCwd:c},body:i,sentinel:l});return r.wait?HB(u,a,l,o,n):UB({code:u,source:i,name:o.name,filename:a,sentinel:l,runId:s,ctx:n,options:e})})}async function HB(e,t,n,r,i){let a;try{a=await Hr(e,[`workflow`,t],i,void 0,{filename:t})}catch(e){return PB.error(`workflow run failed`,e),{stdout:``,stderr:`workflow: ${e instanceof Error?e.message:String(e)}\n`,exitCode:1}}return JB(r,a,n)}async function UB(e){let t=LB();if(!t)return{stdout:``,stderr:`workflow: run manager not available
3437
+ `,exitCode:1};let n=e.options.getParentJid?.(),{runId:r}=await t.start({code:e.code,source:e.source,name:e.name,filename:e.filename,parentJid:n,ctx:e.ctx,sentinel:e.sentinel,runId:e.runId});return{stdout:`▶ workflow '${e.name}' started (run ${r}). Watch: workflow status ${r}\n`,stderr:``,exitCode:0}}const WB=/^[a-z0-9][a-z0-9-]*$/,GB=`/workspace/.workflows`;async function KB(e,t,n){let r=!1,i=[];for(let t of e.slice(1))t===`--force`?r=!0:i.push(t);let[a,o,...s]=i;if(!a||!o||s.length>0)return{stdout:``,stderr:`usage: workflow save <runId> <name> [--force]
3438
+ `,exitCode:1};if(!WB.test(o))return{stdout:``,stderr:`workflow: invalid name '${o}' (use [a-z0-9][a-z0-9-]*)\n`,exitCode:1};let c=LB()?.getRun(a);if(!c)return{stdout:``,stderr:`workflow: no run '${a}' (only backgrounded runs are saveable; --wait runs are not)\n`,exitCode:1};if(!c.source)return{stdout:``,stderr:`workflow: run '${a}' has no source to save\n`,exitCode:1};let l=`${GB}/${o}.workflow.js`;if(await t.fs.exists(l)){if(!r)return{stdout:``,stderr:`workflow: ${l} already exists (pass --force to overwrite)\n`,exitCode:1}}else if(new Set(t.getRegisteredCommands?.()??[]).has(o))return{stdout:``,stderr:`workflow: '${o}' is already a command — choose another name\n`,exitCode:1};await t.fs.mkdir(GB,{recursive:!0}),await t.fs.writeFile(l,c.source);try{await n.syncScriptCommands?.()}catch(e){PB.warn(`workflow save: command re-sync failed; workflow saved, will register on next sync`,{name:o,error:e instanceof Error?e.message:String(e)})}return{stdout:`saved workflow '${o}' → ${l}\nrun it as '${o}' (or 'workflow run ${l}' if a built-in/.jsh shadows the name)\n`,stderr:``,exitCode:0}}async function qB(e,t){let n=LB();if(e[0]===`list`){if(!n)return{stdout:``,stderr:`workflow: run manager not available
3439
3439
  `,exitCode:1};let e=n.listRuns().map(e=>`${e.id} ${e.status.padEnd(7)} ${e.agentsDone}/${e.agentsStarted} ${e.name??``}`);return{stdout:(e.length?e.join(`
3440
3440
  `):`(no runs)`)+`
3441
3441
  `,stderr:``,exitCode:0}}let r=e[1],i=n?.getRun(r??``);if(!i)return{stdout:``,stderr:`workflow: no run '${r}'\n`,exitCode:1};if(e[0]===`status`)return{stdout:[`run ${i.id} (${i.name??`unnamed`}) status=${i.status}`,`agents ${i.agentsDone}/${i.agentsStarted} phase=${i.currentPhase??`-`}`,i.resultPath?`result: ${i.resultPath}`:``,i.preview?`preview: ${i.preview}`:``,i.error?`error: ${i.error}`:``].filter(Boolean).join(`
3442
3442
  `)+`
3443
- `,stderr:``,exitCode:0};if(i.pid==null)return{stdout:`workflow: run ${i.id} has not started a realm process yet (nothing to stop)\n`,stderr:``,exitCode:0};if(i.status!==`running`&&i.status!==`paused`)return{stdout:`workflow: run ${i.id} already ${i.status}\n`,stderr:``,exitCode:0};let a=await t.exec?.(`kill`,{cwd:t.cwd,args:[`-KILL`,String(i.pid)]});return a&&a.exitCode!==0?{stdout:``,stderr:a.stderr||`workflow: kill failed (exit ${a.exitCode})\n`,exitCode:a.exitCode}:{stdout:`stopped run ${i.id} (pid ${i.pid})\n`,stderr:``,exitCode:0}}function KB(e,t,n){let{result:r,log:i,hadResult:a}=kB(t.stdout,n),o=e.name?`workflow: ${e.name}${e.description?` — `+e.description:``}\n`:``,s=i?qB(i)+`
3443
+ `,stderr:``,exitCode:0};if(i.pid==null)return{stdout:`workflow: run ${i.id} has not started a realm process yet (nothing to stop)\n`,stderr:``,exitCode:0};if(i.status!==`running`&&i.status!==`paused`)return{stdout:`workflow: run ${i.id} already ${i.status}\n`,stderr:``,exitCode:0};let a=await t.exec?.(`kill`,{cwd:t.cwd,args:[`-KILL`,String(i.pid)]});return a&&a.exitCode!==0?{stdout:``,stderr:a.stderr||`workflow: kill failed (exit ${a.exitCode})\n`,exitCode:a.exitCode}:{stdout:`stopped run ${i.id} (pid ${i.pid})\n`,stderr:``,exitCode:0}}function JB(e,t,n){let{result:r,log:i,hadResult:a}=jB(t.stdout,n),o=e.name?`workflow: ${e.name}${e.description?` — `+e.description:``}\n`:``,s=i?YB(i)+`
3444
3444
  `:``;return t.exitCode!==0||!a?{stdout:o+s,stderr:t.stderr||(a?``:`workflow: script produced no result
3445
3445
  `),exitCode:t.exitCode||1}:{stdout:o+s+(typeof r==`string`?r:JSON.stringify(r))+`
3446
- `,stderr:t.stderr,exitCode:0}}function qB(e){return e.split(`
3446
+ `,stderr:t.stderr,exitCode:0}}function YB(e){return e.split(`
3447
3447
  `).map(e=>e.replace(/^WFPHASE/,`▸ `).replace(/^WFLOG/,`· `)).join(`
3448
- `)}function JB(e){return{stdout:``,stderr:`xxd: ${e}\n`,exitCode:1}}function YB(e){if(e==null)throw Error(`missing option value`);let t=e.startsWith(`-`),n=t||e.startsWith(`+`)?e.slice(1):e,r;if(/^0x[0-9a-fA-F]+$/.test(n))r=parseInt(n.slice(2),16);else if(/^[0-9]+$/.test(n))r=parseInt(n,10);else throw Error(`invalid number: ${e}`);return t?-r:r}function XB(e,t){let n=e.toString(16).padStart(2,`0`);return t?n.toUpperCase():n}function ZB(e){let t=``;for(let n=0;n<e.length;n++)t+=String.fromCharCode(e[n]);return t}function QB(e){return e.replace(/[^0-9a-zA-Z]/g,`_`)}function $B(e,t,n,r,i){let a=[];for(let o=0;o<e.length;o+=t){let s=Math.min(o+t,e.length),c=(i+o).toString(16).padStart(8,`0`),l=``;for(let i=0;i<t;i++)n>0&&i>0&&i%n===0&&(l+=` `),l+=o+i<s?XB(e[o+i],r):` `;let u=``;for(let t=o;t<s;t++)u+=e[t]>=32&&e[t]<=126?String.fromCharCode(e[t]):`.`;a.push(`${c}: ${l} ${u}`)}return a.length?a.join(`
3448
+ `)}function XB(e){return{stdout:``,stderr:`xxd: ${e}\n`,exitCode:1}}function ZB(e){if(e==null)throw Error(`missing option value`);let t=e.startsWith(`-`),n=t||e.startsWith(`+`)?e.slice(1):e,r;if(/^0x[0-9a-fA-F]+$/.test(n))r=parseInt(n.slice(2),16);else if(/^[0-9]+$/.test(n))r=parseInt(n,10);else throw Error(`invalid number: ${e}`);return t?-r:r}function QB(e,t){let n=e.toString(16).padStart(2,`0`);return t?n.toUpperCase():n}function $B(e){let t=``;for(let n=0;n<e.length;n++)t+=String.fromCharCode(e[n]);return t}function eV(e){return e.replace(/[^0-9a-zA-Z]/g,`_`)}function tV(e,t,n,r,i){let a=[];for(let o=0;o<e.length;o+=t){let s=Math.min(o+t,e.length),c=(i+o).toString(16).padStart(8,`0`),l=``;for(let i=0;i<t;i++)n>0&&i>0&&i%n===0&&(l+=` `),l+=o+i<s?QB(e[o+i],r):` `;let u=``;for(let t=o;t<s;t++)u+=e[t]>=32&&e[t]<=126?String.fromCharCode(e[t]):`.`;a.push(`${c}: ${l} ${u}`)}return a.length?a.join(`
3449
3449
  `)+`
3450
- `:``}function eV(e,t,n){let r=``;for(let i=0;i<e.length;i+=t){let a=``;for(let r=0;r<t&&i+r<e.length;r++)a+=XB(e[i+r],n);r+=a+`
3451
- `}return r}function tV(e,t,n,r){let i=Array.from(e,e=>`0x${XB(e,n)}`),a=[];for(let e=0;e<i.length;e+=t)a.push(` `+i.slice(e,e+t).join(`, `));let o=a.join(`,
3450
+ `:``}function nV(e,t,n){let r=``;for(let i=0;i<e.length;i+=t){let a=``;for(let r=0;r<t&&i+r<e.length;r++)a+=QB(e[i+r],n);r+=a+`
3451
+ `}return r}function rV(e,t,n,r){let i=Array.from(e,e=>`0x${QB(e,n)}`),a=[];for(let e=0;e<i.length;e+=t)a.push(` `+i.slice(e,e+t).join(`, `));let o=a.join(`,
3452
3452
  `);return r===null?i.length?o+`
3453
- `:``:`unsigned char ${r}[] = {\n${o}\n};\nunsigned int ${r}_len = ${e.length};\n`}function nV(e){let t=e.replace(/[^0-9a-fA-F]/g,``),n=Math.floor(t.length/2),r=new Uint8Array(n);for(let e=0;e<n;e++)r[e]=parseInt(t.substr(e*2,2),16);return r}function rV(e){let t=[],n=0;for(let r of e.split(`
3454
- `)){let e=r.replace(/\r$/,``),i=e.indexOf(`:`);if(i<0)continue;let a=parseInt(e.slice(0,i).trim(),16);if(Number.isNaN(a))continue;let o=e.slice(i+1),s=o.indexOf(` `);s>=0&&(o=o.slice(0,s));let c=o.replace(/[^0-9a-fA-F]/g,``),l=[];for(let e=0;e+1<c.length;e+=2)l.push(parseInt(c.substr(e,2),16));l.length&&(t.push({offset:a,bytes:l}),n=Math.max(n,a+l.length))}if(!t.length)return new Uint8Array;let r=new Uint8Array(n);for(let e of t)for(let t=0;t<e.bytes.length;t++)r[e.offset+t]=e.bytes[t];return r}const iV={"-u":`upper`,"-p":`plain`,"-ps":`plain`,"-postscript":`plain`,"-i":`include`,"-include":`include`,"-r":`revert`,"-revert":`revert`},aV=[{key:`cols`,exact:[`-c`,`-cols`],attached:/^-c(0x)?[0-9]/},{key:`group`,exact:[`-g`,`-groupsize`],attached:/^-g(0x)?[0-9]/},{key:`length`,exact:[`-l`,`-len`],attached:/^-l(0x)?[0-9]/},{key:`seek`,exact:[`-s`,`-seek`],attached:/^-s[+-]?(0x)?[0-9]/}];function oV(e){let t={upper:!1,plain:!1,include:!1,revert:!1,positional:[]};for(let n=0;n<e.length;n++){let r=e[n],i=iV[r];if(i){t[i]=!0;continue}let a=aV.find(e=>e.exact.includes(r)||e.attached.test(r));if(a){t[a.key]=YB(a.exact.includes(r)?e[++n]:r.slice(2));continue}if(r!==`-`&&r.startsWith(`-`)&&r.length>1)throw Error(`invalid option ${r}`);t.positional.push(r)}return t}function sV(e){return e.includes(`-h`)||e.includes(`--help`)||e.includes(`-help`)}async function cV(e,t,n){if(!n&&t)return e.fs.readFileBuffer(e.fs.resolvePath(e.cwd,t));let r=ei(e.stdin),i=new Uint8Array(r.length);for(let e=0;e<r.length;e++)i[e]=r.charCodeAt(e)&255;return i}function lV(e,t,n,r,i){let a=e.cols&&e.cols>0?e.cols:e.plain?30:e.include?12:16;return e.plain?eV(t,a,e.upper):e.include?tV(t,a,e.upper,i?null:QB(r??``)):$B(t,a,e.group!=null&&e.group>=0?e.group:2,e.upper,n)}function uV(e,t){let n=0,r=t;return e.seek!==void 0&&(n=e.seek<0?Math.max(0,r.length+e.seek):Math.min(e.seek,r.length),r=r.subarray(n)),e.length!==void 0&&(r=r.subarray(0,Math.max(0,e.length))),{data:r,base:n}}function dV(){return S(`xxd`,async(e,t)=>{if(sV(e))return{stdout:`usage: xxd [options] [infile [outfile]]
3453
+ `:``:`unsigned char ${r}[] = {\n${o}\n};\nunsigned int ${r}_len = ${e.length};\n`}function iV(e){let t=e.replace(/[^0-9a-fA-F]/g,``),n=Math.floor(t.length/2),r=new Uint8Array(n);for(let e=0;e<n;e++)r[e]=parseInt(t.substr(e*2,2),16);return r}function aV(e){let t=[],n=0;for(let r of e.split(`
3454
+ `)){let e=r.replace(/\r$/,``),i=e.indexOf(`:`);if(i<0)continue;let a=parseInt(e.slice(0,i).trim(),16);if(Number.isNaN(a))continue;let o=e.slice(i+1),s=o.indexOf(` `);s>=0&&(o=o.slice(0,s));let c=o.replace(/[^0-9a-fA-F]/g,``),l=[];for(let e=0;e+1<c.length;e+=2)l.push(parseInt(c.substr(e,2),16));l.length&&(t.push({offset:a,bytes:l}),n=Math.max(n,a+l.length))}if(!t.length)return new Uint8Array;let r=new Uint8Array(n);for(let e of t)for(let t=0;t<e.bytes.length;t++)r[e.offset+t]=e.bytes[t];return r}const oV={"-u":`upper`,"-p":`plain`,"-ps":`plain`,"-postscript":`plain`,"-i":`include`,"-include":`include`,"-r":`revert`,"-revert":`revert`},sV=[{key:`cols`,exact:[`-c`,`-cols`],attached:/^-c(0x)?[0-9]/},{key:`group`,exact:[`-g`,`-groupsize`],attached:/^-g(0x)?[0-9]/},{key:`length`,exact:[`-l`,`-len`],attached:/^-l(0x)?[0-9]/},{key:`seek`,exact:[`-s`,`-seek`],attached:/^-s[+-]?(0x)?[0-9]/}];function cV(e){let t={upper:!1,plain:!1,include:!1,revert:!1,positional:[]};for(let n=0;n<e.length;n++){let r=e[n],i=oV[r];if(i){t[i]=!0;continue}let a=sV.find(e=>e.exact.includes(r)||e.attached.test(r));if(a){t[a.key]=ZB(a.exact.includes(r)?e[++n]:r.slice(2));continue}if(r!==`-`&&r.startsWith(`-`)&&r.length>1)throw Error(`invalid option ${r}`);t.positional.push(r)}return t}function lV(e){return e.includes(`-h`)||e.includes(`--help`)||e.includes(`-help`)}async function uV(e,t,n){if(!n&&t)return e.fs.readFileBuffer(e.fs.resolvePath(e.cwd,t));let r=ei(e.stdin),i=new Uint8Array(r.length);for(let e=0;e<r.length;e++)i[e]=r.charCodeAt(e)&255;return i}function dV(e,t,n,r,i){let a=e.cols&&e.cols>0?e.cols:e.plain?30:e.include?12:16;return e.plain?nV(t,a,e.upper):e.include?rV(t,a,e.upper,i?null:eV(r??``)):tV(t,a,e.group!=null&&e.group>=0?e.group:2,e.upper,n)}function fV(e,t){let n=0,r=t;return e.seek!==void 0&&(n=e.seek<0?Math.max(0,r.length+e.seek):Math.min(e.seek,r.length),r=r.subarray(n)),e.length!==void 0&&(r=r.subarray(0,Math.max(0,e.length))),{data:r,base:n}}function pV(){return S(`xxd`,async(e,t)=>{if(lV(e))return{stdout:`usage: xxd [options] [infile [outfile]]
3455
3455
  -c cols number of octets per line (default 16; 30 for -p; 12 for -i)
3456
3456
  -g bytes number of octets per group (default 2; 0 disables grouping)
3457
3457
  -l len stop after len octets
@@ -3461,8 +3461,8 @@ pass --wait to block and print the full result.`,PB=new Set([`list`,`status`,`st
3461
3461
  -i output in C include style
3462
3462
  -r reverse: convert a hex dump back to binary (-r -p for plain)
3463
3463
  -h show this help
3464
- `,stderr:``,exitCode:0};let n;try{n=oV(e)}catch(e){return JB(e.message)}let r=n.positional[0],i=n.positional[1],a=!r||r===`-`,o;try{o=await cV(t,r,a)}catch{return JB(`${r}: No such file or directory`)}if(n.revert){let e=ZB(o),r=n.plain?nV(e):rV(e);return i?(await t.fs.writeFile(t.fs.resolvePath(t.cwd,i),r),{stdout:``,stderr:``,exitCode:0}):{stdout:ZB(r),stderr:``,exitCode:0}}let{data:s,base:c}=uV(n,o),l=lV(n,s,c,r,a);return i?(await t.fs.writeFile(t.fs.resolvePath(t.cwd,i),l),{stdout:``,stderr:``,exitCode:0}):{stdout:l,stderr:``,exitCode:0}})}async function fV(e,t,n,r){if((await e.fs.stat(t)).isFile)return r[n]=await e.fs.readFileBuffer(t),1;let i=await e.fs.readdir(t),a=0;for(let o of i){let i=$n(t,o),s=n?`${n}/${o}`:o;a+=await fV(e,i,s,r)}return a}function pV(){return{stdout:`usage: zip [-r] <archive.zip> <path> [path...]
3465
- `,stderr:``,exitCode:0}}function mV(){return S(`zip`,async(e,t)=>{if(e.length===0||e.includes(`--help`)||e.includes(`-h`))return pV();let n=!1,r=[];for(let t of e){if(t===`-r`){n=!0;continue}if(t.startsWith(`-`))return{stdout:``,stderr:`zip: unsupported option ${t}\n`,exitCode:1};r.push(t)}if(r.length<2)return{stdout:``,stderr:`zip: expected archive path and at least one input path
3466
- `,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(/^\.\//,``))||er(r);if(i.isDirectory&&!n)return{stdout:``,stderr:`zip: ${e} is a directory (use -r)\n`,exitCode:1};s+=await fV(t,r,a,o)}if(s===0)return{stdout:``,stderr:`zip: nothing to do
3467
- `,exitCode:1};let c=St(o);return await t.fs.writeFile(i,c),{stdout:`created ${i} (${s} file(s))\n`,stderr:``,exitCode:0}})}function hV(e){return{setEnv:e.setEnv,unsetEnv:e.unsetEnv,broker:e.sudoCommand?.broker}}function gV(e){let{fs:t,fetch:n}=e;if(!t||!n)return[];let r={fs:t,fetch:n,scriptCatalog:e.scriptCatalog,syncScriptCommands:e.syncScriptCommands};return[UD(`ipk`,r),UD(`npm`,r),UD(`i`,r),EO(`ipx`,{fs:t,fetch:n}),EO(`npx`,{fs:t,fetch:n}),Zy(`di`,{fs:t,fetch:n}),Zy(`uv`,{fs:t,fetch:n}),KL({fs:t,fetch:n})]}function _V(e={}){let t=[qT({getJshCommands:e.getJshCommands,getWorkflowCommands:e.getWorkflowCommands}),te(),zF(),iF(),ZP(e.browserAPI,e.fs),Ij(e.browserAPI),py(e.browserAPI),JE(e),mV(),SL(),mI(),KF(),$F(),XF(),cv(),dV(),NF(`sqlite3`),NF(`sqllite`),jI(),ZI(),px(),W_(),$A({buildProcessConfig:e.buildProcessConfig}),$A({buildProcessConfig:e.buildProcessConfig},`jsh`),XM(`python3`,{buildProcessConfig:e.buildProcessConfig}),XM(`python`,{buildProcessConfig:e.buildProcessConfig}),...gV(e),...e.fs?[yS({fs:e.fs})]:[],...e.fs?[dA({fs:e.fs})]:[],...e.fetch?[eE({fetch:e.fetch})]:[],oS(),sS(),jz(e.webhook),gB(),fy(e.crontask),vk({fs:e.fs,scriptCatalog:e.scriptCatalog}),nM({fs:e.fs,fetch:e.fetch}),vS(),wF(),Lj(),Rj(`pdftk`),Rj(`pdf`),G_(`biscotto`),G_(`biscotti`),Jj(`pdftoppm`),Jj(`pdftocairo`),Yj(`pdftotext`),Xv(`convert`),Xv(`magick`),SB({fs:e.fs,scriptCatalog:e.scriptCatalog,getStaticBuiltins:e.getStaticBuiltins,getScriptRegisteredNames:e.getScriptRegisteredNames}),tL(),_L(),WE(),GE(),vL(),fA(),eN(),fk(),Rb(),mj(),pj(),lk(),SP(hV(e)),pN({fs:e.fs}),BN(),av(),ov(),sv(`xclip`),sv(`xsel`),zN(),LS(),gg(),_g(),zA(e.fs),et(),ij(),Lg({getParentJid:e.getParentJid}),Kb(),wM({processManager:e.processManager}),sR({processManager:e.processManager}),kO({processManager:e.processManager}),DO({processManager:e.processManager,scriptCatalog:e.scriptCatalog}),...Bg(),uA(),tk(),MR(),EE(),Jx(),JR({processManager:e.processManager}),dv({processManager:e.processManager,browser:e.browserAPI,sudoBroker:e.sudoCommand?.broker}),aS(),Q_({registry:e.cherryRuntimeRegistry}),by(),Dy({fs:e.fs}),Oy({fs:e.fs}),VF(e.sudoCommand),zB({getParentJid:e.getParentJid,syncScriptCommands:e.syncScriptCommands}),_B(),rF()];return e.fs&&(Zj(),t.push(...Mn.map(t=>WT(t,e.browserAPI,e.fs)))),t}let vV=null;function yV(e){vV=e}function bV(e){vV?.(e)}var xV=Et();const SV=Reflect.get(Je,`DefenseInDepthBox`);function CV(e){return(typeof e==`string`?e:e?.encoding)??`utf8`}function wV(e,t){if(typeof e!=`string`)return e;let n=CV(t);if(n===`binary`||n===`latin1`){let t=le(e);if(t)return t}return xV.Buffer.from(e,n)}var TV=class{vfs;registeredCommandsFn=null;listingStats=new Map;listingStatsMax;listingStatsTtlMs;constructor(e,t){this.vfs=e,this.listingStatsMax=Math.max(1,t?.listingStatsMax??2e4),this.listingStatsTtlMs=t?.listingStatsTtlMs??1e3}get listingStatsSize(){return this.listingStats.size}primeListingStats(e,t){let n=Date.now();if(t.length>this.listingStatsMax){this.listingStats.clear();return}this.sweepExpiredListingStats(n),this.listingStats.size+t.length>this.listingStatsMax&&this.listingStats.clear();let r=e===`/`?`/`:`${e}/`;for(let e of t){let t=Ne(e),i=`${r}${e.name}`;this.listingStats.delete(i),t&&this.listingStats.set(i,{stats:t,at:n})}}sweepExpiredListingStats(e){for(let[t,n]of this.listingStats){if(e-n.at<=this.listingStatsTtlMs)break;this.listingStats.delete(t)}}primedStats(e){let t=this.listingStats.get(e);if(t){if(Date.now()-t.at>this.listingStatsTtlMs){this.listingStats.delete(e);return}return t.stats}}dropListingStats(){this.listingStats.clear()}setRegisteredCommandsFn(e){this.registeredCommandsFn=e}getVirtualBinCommands(){return this.registeredCommandsFn?.()??[]}virtualUsrStat(e){if(e===`/usr`||e===`/usr/bin`)return{isFile:!1,isDirectory:!0,isSymbolicLink:!1,mode:493,size:0,mtime:new Date(0)};if(e.startsWith(`/usr/bin/`)){let t=e.slice(9);if(t.length>0&&!t.includes(`/`)&&this.getVirtualBinCommands().includes(t))return{isFile:!0,isDirectory:!1,isSymbolicLink:!1,mode:493,size:0,mtime:new Date(0)}}return null}canWrite(e){let t=this.vfs;return typeof t.canWrite!=`function`||t.canWrite(e)}listMountPoints(){let e=this.vfs;return typeof e.listMountPoints==`function`?e.listMountPoints():[]}trusted(e){let t=SV?.runTrustedAsync;return t?t(e):Promise.resolve().then(e)}async readFile(e,t){return this.trusted(async()=>{let n=b(e),r=await this.vfs.readFile(n,{encoding:`binary`}),i=r instanceof Uint8Array?r:new TextEncoder().encode(r),a=CV(t),o=xV.Buffer.from(i.buffer,i.byteOffset,i.byteLength).toString(a);return a!==`hex`&&a!==`base64`&&g(o,i),o})}async readFileBuffer(e){return this.trusted(async()=>{let t=b(e),n=await this.vfs.readFile(t,{encoding:`binary`});return n instanceof Uint8Array?n:new TextEncoder().encode(n)})}async readFileBytes(e){let t=await this.readFileBuffer(e);return xV.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,wV(t,n))})}async appendFile(e,t,n){return this.dropListingStats(),this.trusted(()=>this.vfs.appendFile(b(e),wV(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(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(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 Pe(`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 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 EV(e){return e&&typeof e.getWatcher==`function`?e.getWatcher?.()??null:e&&typeof e.getUnderlyingFS==`function`?EV(e.getUnderlyingFS?.()):null}async function DV(e){let t=ce(`github`);if(t){if(e?.force){await t.onSilentRenew?.();return}await t.getValidAccessToken?.()}}const OV=e(`almost-bash-shell`),kV=`__SLICC_RUN_PID`,AV=`__SLICC_OUTPUT_TEE__`;function jV(e){let t=e?.get(kV);if(t===void 0)return;let n=Number.parseInt(t,10);return Number.isSafeInteger(n)&&n>0?n:void 0}function MV(e){if(!(kV in e)&&!(AV in e)&&!(`__SLICC_SUDO_REASON`in e)&&!(`__SLICC_PIPESTATUS`in e)&&!(`__SLICC_PIPESTATUS_EX`in e))return{...e};let{[kV]:t,[AV]:n,[$p]:r,[rp]:i,[ip]:a,...o}=e;return o}var NV=class e{options;bash;vfsAdapter;gitCommands;mountCommands;lastEnv;cwd;builtinCommandNames;staticBuiltinNames;allowedCommands;scriptCatalog;initialJshSync=null;ownsScriptCatalog;registeredJshCommands=new Map;registeredWorkflowCommands=new Set;jshSyncInflight=null;jshSyncDirty=!1;pendingCommandGrants=[];pendingSudoBypasses=new Map;pendingEnvWrites=new Map;activeShellPid;progress;activeRunSignal;scriptRun=null;scriptRunsActive=0;registryNames=new Set;outputTees=new Map;nextOutputTeeId=0;resolveJshProcessConfig=e=>this.buildJshProcessConfig(jV(e));static buildAllowedCommandSet(e){return e.sudo?.defaultDisposition===`require-approval`||!e.allowedCommands||e.allowedCommands.includes(`*`)?null:new Set(e.allowedCommands)}static buildInitialEnv(e,t){return{HOME:$f,PATH:Hn,USER:`user`,SHELL:`/bin/bash`,TMPDIR:`/tmp`,PWD:t,...e.env}}buildSupplementalCommands(e,t){return _V({onMediaPreview:async e=>this.renderMediaPreview(e),getJshCommands:()=>this.getJshCommandNames(),getWorkflowCommands:()=>this.getWorkflowCommandNames(),syncScriptCommands:()=>this.syncJshCommands(),getStaticBuiltins:()=>[...this.staticBuiltinNames],getScriptRegisteredNames:()=>[...this.registeredJshCommands.keys(),...this.registeredWorkflowCommands],fs:e.fs,fetch:t,scriptCatalog:this.scriptCatalog,browserAPI:e.browserAPI,webhook:e.webhook,crontask:e.crontask,getParentJid:e.getParentJid,buildProcessConfig:this.resolveJshProcessConfig,processManager:e.processManager,sudoCommand:e.sudo?{broker:e.sudo.broker,persistGrant:async e=>{this.pendingCommandGrants.push(e)},suppressNextGate:e=>this.registerSudoBypass(e)}:void 0,setEnv:(e,t)=>{this.pendingEnvWrites.set(e,t),this.lastEnv[e]=t},unsetEnv:e=>{this.pendingEnvWrites.set(e,null),delete this.lastEnv[e]}})}constructor(t){this.options=t,this.vfsAdapter=new TV(t.fs),this.progress=new hp({scrubLabel:t.scrubProgressLabel}),this.allowedCommands=e.buildAllowedCommandSet(t);let n=t.cwd??`/`,r=e.buildInitialEnv(t,n);this.gitCommands=new Xf({fs:t.fs,authorName:r.GIT_AUTHOR_NAME??`User`,authorEmail:r.GIT_AUTHOR_EMAIL??`user@example.com`,ensureFreshGithubToken:DV}),this.mountCommands=new Cs({fs:t.fs,isScoop:t.isScoop,acquireLocalMountViaToolUI:om});let i=t.jshDiscoveryFs??t.fs,a=t.bshDiscoveryFs??t.fs,o=EV(i)??EV(a);this.scriptCatalog=t.scriptCatalog??new ai({jshFs:i,bshFs:a,watcher:o}),this.ownsScriptCatalog=!t.scriptCatalog,o&&o.watch(`/`,e=>e.endsWith(`.jsh`)||e.endsWith(`.workflow.js`),()=>{this.syncJshCommands().catch(()=>void 0)});let s=this.createGitCustomCommand(),c=h({progress:bp(this.progress)}),l=this.buildSupplementalCommands(t,c),u=[s,this.createMountCustomCommand(),this.createUmountCustomCommand(),eh(t.fs),Zh(t.fs,c,t.browserAPI),...l].filter(e=>this.isCommandAllowed(e.name)),d=[...Xe(),...Ye()],f=this.allowedCommands?d.filter(e=>this.isCommandAllowed(e)):void 0;if(this.bash=new Ze({fs:this.vfsAdapter,cwd:n,env:{},fetch:c,commands:f,customCommands:u,sleep:Vp(this.progress,{isAborted:()=>this.activeRunSignal?.aborted??!1}),executionLimitProfile:t.executionLimitProfile,executionLimits:Qf(t.isScoop?.()??!1,t.executionLimits)}),this.bash.registerTransformPlugin(mm),this.allowedCommands!==null){let e=this.bash;for(let t of Ye())this.isCommandAllowed(t)||e.commands.delete(t)}{let e=this.bash;for(let[t,n]of e.commands)e.commands.set(t,this.wrapCommandForDispatch(n));this.registryNames=new Set(e.commands.keys())}let p=u.map(e=>e.name),m=f??[...Xe(),...Ye()];this.builtinCommandNames=new Set([...m,...p]),this.staticBuiltinNames=new Set(this.builtinCommandNames),this.vfsAdapter.setRegisteredCommandsFn(()=>[...this.builtinCommandNames]),this.lastEnv={...r},this.cwd=n,this.startInitialJshSync()}getBash(){return this.bash}getCwd(){return this.cwd}getScriptCatalog(){return this.scriptCatalog}getEnv(){return{...this.lastEnv}}setMaskedEnvVar(e,t){this.pendingEnvWrites.set(e,t),this.lastEnv[e]=t}applySessionOverrides(e){e.cwd!==void 0&&(this.cwd=e.cwd,this.lastEnv.PWD=e.cwd),e.env&&Object.assign(this.lastEnv,e.env)}async getJshCommandNames(){return[...(await this.getFilteredJshCommands()).keys()]}async syncJshCommands(){return this.jshSyncInflight===null?(this.jshSyncInflight=this.doSyncJshCommands(),this.jshSyncInflight):(this.jshSyncDirty=!0,this.jshSyncInflight)}async executeCommand(e,t,n,r=``,i){let a=this.activeShellPid;n!==void 0&&(this.activeShellPid=n);let o=i?.onOutput?`tee-${this.nextOutputTeeId+=1}`:void 0;o&&i?.onOutput&&this.outputTees.set(o,i.onOutput);try{let a=await this.runCommand(e,t,n,r,o,i?.capturePipeStatus);return{stdout:a.stdout,stderr:a.stderr,exitCode:a.exitCode,...a.pipeStatus===void 0?{}:{pipeStatus:a.pipeStatus}}}finally{this.activeShellPid=a,o&&this.outputTees.delete(o)}}async executeScriptFile(e,t=[]){return zr(e,t,{fs:this.vfsAdapter,cwd:this.cwd,env:new Map(Object.entries(this.lastEnv)),stdin:``,exec:(e,t)=>this.bash.exec(e,{env:t?.env??this.lastEnv,cwd:t?.cwd??this.cwd,...t?.env===void 0?{}:{replaceEnv:!0}})},this.buildJshProcessConfig())}dispose(){this.ownsScriptCatalog&&this.scriptCatalog.dispose()}async renderMediaPreview(e){throw Error(`terminal preview is unavailable in headless mode`)}currentScanRoots(){return Un(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 ep(e);this.lastEnv.HOME=t,this.options.env?.USER||(this.lastEnv.USER=tp(t));let n=`${t.replace(/\/+$/,``)}/.profile`;if(!await e.exists(n).catch(()=>!1))return;let r=await this.bash.exec(`. "$HOME/.profile"`,{env:this.lastEnv,cwd:this.cwd});if(r.env){let{PWD:e,...t}=r.env;this.lastEnv={...t,PWD:this.lastEnv.PWD??this.cwd}}}catch(e){OV.warn(`HOME/profile init failed; continuing with defaults`,e)}}async waitForInitialJshSync(e){let t=this.initialJshSync;if(t===null)return;if(!e){await t;return}if(e.aborted)return;let n;try{await new Promise(r=>{n=()=>r(),e.addEventListener(`abort`,n,{once:!0}),t.then(()=>r(),()=>r())})}finally{n&&e.removeEventListener(`abort`,n)}}async runCommand(e,t,n,r=``,i,a=!1){bV(e.trim().split(/\s+/)[0]||`unknown`),p(),await this.waitForInitialJshSync(t);let o=tm(e),s={env:{...this.lastEnv,...n===void 0?{}:{[kV]:String(n)},...i===void 0?{}:{[AV]:i},...o?{[$p]:o}:{}},cwd:this.cwd,signal:t,...r===``?{}:{stdin:r,stdinKind:`bytes`}},c=this.lastEnv.PATH;this.activeRunSignal=t;let l=this.beginScriptRun(e),u;try{u=await this.bash.exec(lp(e,a),s)}finally{this.activeRunSignal===t&&(this.activeRunSignal=void 0),this.endScriptRun(l)}if(await this.flushPendingCommandGrants(),u=up(u,a),u.env&&(this.lastEnv=MV(u.env)),u.env&&this.lastEnv.PATH!==c&&await this.syncJshCommands().catch(()=>void 0),this.pendingEnvWrites.size>0){for(let[e,t]of this.pendingEnvWrites)t===null?delete this.lastEnv[e]:this.lastEnv[e]=t;this.pendingEnvWrites.clear()}if(u.env?.PWD&&(this.cwd=u.env.PWD),u.exitCode===127){let t=await this.tryJshFallback(e,n);if(t)return this.syncJshCommands().catch(()=>void 0),t}if(u.exitCode!==0&&u.stderr.includes(`Permission denied`)){let{withShebangExecHint:e}=await import(`./shebang-exec-hint-BISPom3l.js`);return dp(await e(u,this.cwd,this.vfsAdapter),u.pipeStatus)}return u}isTransparentGatingEnabled(){let e=this.options.sudo;return!!e&&e.transparentGating!==!1}wrapCommandForDispatch(e){let t=this.wrapCommandForSudo(e),n=e.name===`timeout`?Gp(t,this.progress):qp(t,this.progress),r=()=>this.scriptRun?.stepDone(),i=(e,t)=>this.teeCommandOutput(e,t),a=this.outputTees;return{...n,async execute(e,t){let o=t.env?.get(AV),s=o?a.get(o):void 0;s&&(t.writeStdout=s);try{let r=await n.execute(e,t);return i(t.env,r),r}finally{r()}}}}teeCommandOutput(e,t){let n=e?.get(AV);if(!n)return;let r=this.outputTees.get(n);if(!r)return;let i=[t.stdout,t.stderr].filter(Boolean).join(``);i&&r(i)}beginScriptRun(e){if(this.scriptRunsActive+=1,!this.progress.hasSink())return null;if(this.scriptRunsActive>1)return this.scriptRun?.end(),this.scriptRun=null,null;let t={totalSteps:null};try{t=Ip(this.bash.transform(e).ast,this.registryNames)}catch{t={totalSteps:null}}return this.scriptRun=new Rp(t,this.progress,Lp(e)),this.scriptRun}endScriptRun(e){this.scriptRunsActive=Math.max(0,this.scriptRunsActive-1),e&&(e.end(),this.scriptRun===e&&(this.scriptRun=null))}wrapCommandForSudo(e){if(!this.isTransparentGatingEnabled())return e;let t=(t,n)=>this.gateCommandDispatch(e.name,t,n);return{...e,async execute(n,r){return await t(n,r.env?.get($p))||e.execute(n,r)}}}async gateCommandDispatch(e,t,n){let r=this.options.sudo;if(!r)return null;let i=Yp(e,t);if(this.consumeSudoBypass(i))return null;let a=r.getPolicy();if(!a)return null;let o=await Zp(i,{policy:a,broker:r.broker,persistGrant:async e=>{this.pendingCommandGrants.push(e)},defaultDisposition:r.defaultDisposition,...n?{reason:n}:{}});return o.allowed?null:{stdout:``,stderr:`${o.message}\n`,exitCode:1}}registerSudoBypass(e){let t=e.trim();t&&this.pendingSudoBypasses.set(t,(this.pendingSudoBypasses.get(t)??0)+1)}consumeSudoBypass(e){let t=this.pendingSudoBypasses.get(e);return t?(t===1?this.pendingSudoBypasses.delete(e):this.pendingSudoBypasses.set(e,t-1),!0):!1}async flushPendingCommandGrants(){if(this.pendingCommandGrants.length===0)return;let e=this.pendingCommandGrants;this.pendingCommandGrants=[];for(let t of e)try{await this.persistCommandGrant(t)}catch{}}async persistCommandGrant(e){let t=this.options.sudo?.persistCommandGrant;if(t){await t(e);return}let n=nt(e);if(!n)return;let r=`${it}/granted`,i=this.options.fs,a=``;try{await i.exists(r)&&(a=await i.readFile(r))}catch(e){if(!(e instanceof Pe&&e.code===`ENOENT`))throw e}let o=a&&!a.endsWith(`
3468
- `)?`${a}\n`:a;await i.writeFile(r,`${o}NOPASSWD Cmnd ${n}\n`)}isCommandAllowed(e){return this.allowedCommands===null||this.allowedCommands.has(e)}async doSyncJshCommands(){try{let e=await this.scriptCatalog.getJshIndex(this.currentScanRoots()),t=e.commands;for(let t of e.collisions)OV.warn(`jsh command '${t.name}' is provided by more than one skill; using ${t.winnerPath} (${t.reason}), shadowed ${t.shadowedPaths.join(`, `)}`);let n=await this.getFilteredWorkflowCommands();for(let[e,n]of t)this.isCommandAllowed(e)&&(this.builtinCommandNames.has(e)&&!this.registeredJshCommands.has(e)||this.registeredJshCommands.get(e)!==n&&(this.bash.registerCommand(this.wrapCommandForDispatch(this.makeScriptCommand(e))),this.registeredJshCommands.set(e,n),this.builtinCommandNames.add(e)));for(let e of n.keys())if(!this.registeredWorkflowCommands.has(e)){if(this.registeredJshCommands.has(e)){this.registeredWorkflowCommands.add(e);continue}this.builtinCommandNames.has(e)||(this.bash.registerCommand(this.wrapCommandForDispatch(this.makeScriptCommand(e))),this.registeredWorkflowCommands.add(e),this.builtinCommandNames.add(e))}}finally{this.jshSyncInflight=null,this.jshSyncDirty&&(this.jshSyncDirty=!1,this.syncJshCommands().catch(()=>void 0))}}makeScriptCommand(e){let t=this.scriptCatalog,n=this.options.jshDiscoveryFs??this.options.fs,r=e,i=async(e,i)=>{let a=i.exec??((e,t)=>this.bash.exec(e,{env:t?.env??Object.fromEntries(i.env),cwd:t?.cwd??i.cwd,args:t?.args,...t?.env===void 0?{}:{replaceEnv:!0}})),o=(await t.getJshCommands(this.currentScanRoots())).get(r);if(o){let t;try{let e=await n.readFile(o,{encoding:`utf-8`});t=typeof e==`string`?e:new TextDecoder().decode(e)}catch{return{stdout:``,stderr:`jsh: cannot read script '${o}'\n`,exitCode:127}}return Hr(t,[`node`,o,...e],{fs:i.fs,cwd:i.cwd,env:i.env,stdin:i.stdin,exec:a},this.buildJshProcessConfig(jV(i.env)))}let s=(await t.getWorkflowCommands()).get(r);if(s){let t=ii(s.path,e);return a(t[0],{args:t.slice(1),cwd:i.cwd})}return{stdout:``,stderr:`${r}: command no longer exists\n`,exitCode:127}};return{name:e,trusted:!0,async execute(e,t){try{return await i(e,t)}catch(e){let t=e instanceof Error?e.message:String(e);return{stdout:``,stderr:`${r}: ${t}\n`,exitCode:1}}}}}createGitCustomCommand(){let e=this.gitCommands;return S(`git`,async(t,n)=>{let r=n.cwd,i=await e.execute(t,r,n.env,P(n.stdin));return{stdout:i.stdout,stderr:i.stderr,exitCode:i.exitCode}})}createMountCustomCommand(){let e=this.mountCommands;return S(`mount`,async(t,n)=>{let r=n.cwd,i=await e.execute(t,r,n.env);return{stdout:i.stdout,stderr:i.stderr,exitCode:i.exitCode}})}createUmountCustomCommand(){let e=this.mountCommands;return S(`umount`,async(t,n)=>{let r=n.cwd,i=await e.executeUmount(t,r);return{stdout:i.stdout,stderr:i.stderr,exitCode:i.exitCode}})}async getFilteredJshCommands(){let e=await this.scriptCatalog.getJshCommands(this.currentScanRoots()),t=new Map;for(let[n,r]of e)this.builtinCommandNames.has(n)||this.isCommandAllowed(n)&&t.set(n,r);return t}async getFilteredWorkflowCommands(){let e=await this.scriptCatalog.getWorkflowCommands(),t=new Map;for(let[n,r]of e)this.isCommandAllowed(n)&&t.set(n,r);return t}async getWorkflowCommandNames(){return[...(await this.getFilteredWorkflowCommands()).keys()]}async tryJshFallback(e,t){let n=e.trim(),r=n.indexOf(` `),i=r>=0?n.slice(0,r):n,a=r>=0?n.slice(r+1).trim():``,o=(await this.getFilteredJshCommands()).get(i);if(!o)return null;let s=a?np(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 Hr(l,u,{fs:this.vfsAdapter,cwd:this.cwd,env:new Map(Object.entries(this.lastEnv)),stdin:``,exec:(e,t)=>this.bash.exec(e,{env:t?.env??this.lastEnv,cwd:t?.cwd??this.cwd,...t?.env===void 0?{}:{replaceEnv:!0}})},this.buildJshProcessConfig(t));return{stdout:d.stdout,stderr:d.stderr,exitCode:d.exitCode,env:this.lastEnv}}buildJshProcessConfig(e){if(!(!this.options.processManager||!this.options.processOwner))return{processManager:this.options.processManager,owner:this.options.processOwner,getParentPid:()=>e??this.activeShellPid??this.options.getCurrentShellPid?.()}}};export{fa as C,xo as S,Io as _,kB as a,Sa as b,mp as c,ms as d,ss as f,Lo as g,ts as h,TB as i,$f as l,rs as m,TV as n,CB as o,is as p,yV as r,Qp as s,NV as t,hs as u,Do as v,xa as x,va as y};
3464
+ `,stderr:``,exitCode:0};let n;try{n=cV(e)}catch(e){return XB(e.message)}let r=n.positional[0],i=n.positional[1],a=!r||r===`-`,o;try{o=await uV(t,r,a)}catch{return XB(`${r}: No such file or directory`)}if(n.revert){let e=$B(o),r=n.plain?iV(e):aV(e);return i?(await t.fs.writeFile(t.fs.resolvePath(t.cwd,i),r),{stdout:``,stderr:``,exitCode:0}):{stdout:$B(r),stderr:``,exitCode:0}}let{data:s,base:c}=fV(n,o),l=dV(n,s,c,r,a);return i?(await t.fs.writeFile(t.fs.resolvePath(t.cwd,i),l),{stdout:``,stderr:``,exitCode:0}):{stdout:l,stderr:``,exitCode:0}})}async function mV(e,t,n,r){if((await e.fs.stat(t)).isFile)return r[n]=await e.fs.readFileBuffer(t),1;let i=await e.fs.readdir(t),a=0;for(let o of i){let i=$n(t,o),s=n?`${n}/${o}`:o;a+=await mV(e,i,s,r)}return a}function hV(){return{stdout:`usage: zip [-r] <archive.zip> <path> [path...]
3465
+ `,stderr:``,exitCode:0}}function gV(){return S(`zip`,async(e,t)=>{if(e.length===0||e.includes(`--help`)||e.includes(`-h`))return hV();let n=!1,r=[];for(let t of e){if(t===`-r`){n=!0;continue}if(t.startsWith(`-`))return{stdout:``,stderr:`zip: unsupported option ${t}\n`,exitCode:1};r.push(t)}if(r.length<2)return{stdout:``,stderr:`zip: expected archive path and at least one input path
3466
+ `,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(/^\.\//,``))||er(r);if(i.isDirectory&&!n)return{stdout:``,stderr:`zip: ${e} is a directory (use -r)\n`,exitCode:1};s+=await mV(t,r,a,o)}if(s===0)return{stdout:``,stderr:`zip: nothing to do
3467
+ `,exitCode:1};let c=St(o);return await t.fs.writeFile(i,c),{stdout:`created ${i} (${s} file(s))\n`,stderr:``,exitCode:0}})}function _V(e){return{setEnv:e.setEnv,unsetEnv:e.unsetEnv,broker:e.sudoCommand?.broker}}function vV(e){let{fs:t,fetch:n}=e;if(!t||!n)return[];let r={fs:t,fetch:n,scriptCatalog:e.scriptCatalog,syncScriptCommands:e.syncScriptCommands};return[GD(`ipk`,r),GD(`npm`,r),GD(`i`,r),OO(`ipx`,{fs:t,fetch:n}),OO(`npx`,{fs:t,fetch:n}),Zy(`di`,{fs:t,fetch:n}),Zy(`uv`,{fs:t,fetch:n}),JL({fs:t,fetch:n})]}function yV(e={}){let t=[YT({getJshCommands:e.getJshCommands,getWorkflowCommands:e.getWorkflowCommands}),te(),VF(),oF(),$P(e.browserAPI,e.fs),Rj(e.browserAPI),py(e.browserAPI),XE(e),gV(),wL(),gI(),JF(),tI(),QF(),cv(),pV(),FF(`sqlite3`),FF(`sqllite`),NI(),$I(),px(),W_(),tj({buildProcessConfig:e.buildProcessConfig}),tj({buildProcessConfig:e.buildProcessConfig},`jsh`),QM(`python3`,{buildProcessConfig:e.buildProcessConfig}),QM(`python`,{buildProcessConfig:e.buildProcessConfig}),...vV(e),...e.fs?[yS({fs:e.fs})]:[],...e.fs?[pA({fs:e.fs})]:[],...e.fetch?[nE({fetch:e.fetch})]:[],oS(),sS(),Nz(e.webhook),vB(),fy(e.crontask),bk({fs:e.fs,scriptCatalog:e.scriptCatalog}),iM({fs:e.fs,fetch:e.fetch}),vS(),EF(),zj(),Bj(`pdftk`),Bj(`pdf`),G_(`biscotto`),G_(`biscotti`),Xj(`pdftoppm`),Xj(`pdftocairo`),Zj(`pdftotext`),Xv(`convert`),Xv(`magick`),wB({fs:e.fs,scriptCatalog:e.scriptCatalog,getStaticBuiltins:e.getStaticBuiltins,getScriptRegisteredNames:e.getScriptRegisteredNames}),rL(),yL(),KE(),qE(),bL(),mA(),nN(),mk(),Rb(),gj(),hj(),dk(),wP(_V(e)),hN({fs:e.fs}),HN(),av(),ov(),sv(`xclip`),sv(`xsel`),VN(),LS(),gg(),_g(),VA(e.fs),et(),oj(),Lg({getParentJid:e.getParentJid}),Kb(),EM({processManager:e.processManager}),lR({processManager:e.processManager}),jO({processManager:e.processManager}),kO({processManager:e.processManager,scriptCatalog:e.scriptCatalog}),...Bg(),fA(),rk(),PR(),OE(),Jx(),XR({processManager:e.processManager}),dv({processManager:e.processManager,browser:e.browserAPI,sudoBroker:e.sudoCommand?.broker}),aS(),Q_({registry:e.cherryRuntimeRegistry}),by(),Dy({fs:e.fs}),Oy({fs:e.fs}),UF(e.sudoCommand),VB({getParentJid:e.getParentJid,syncScriptCommands:e.syncScriptCommands}),yB(),aF()];return e.fs&&($j(),t.push(...Mn.map(t=>KT(t,e.browserAPI,e.fs,{isScoop:e.isScoop})))),t}let bV=null;function xV(e){bV=e}function SV(e){bV?.(e)}var CV=Et();const wV=Reflect.get(Je,`DefenseInDepthBox`);function TV(e){return(typeof e==`string`?e:e?.encoding)??`utf8`}function EV(e,t){if(typeof e!=`string`)return e;let n=TV(t);if(n===`binary`||n===`latin1`){let t=le(e);if(t)return t}return CV.Buffer.from(e,n)}var DV=class{vfs;registeredCommandsFn=null;listingStats=new Map;listingStatsMax;listingStatsTtlMs;constructor(e,t){this.vfs=e,this.listingStatsMax=Math.max(1,t?.listingStatsMax??2e4),this.listingStatsTtlMs=t?.listingStatsTtlMs??1e3}get listingStatsSize(){return this.listingStats.size}primeListingStats(e,t){let n=Date.now();if(t.length>this.listingStatsMax){this.listingStats.clear();return}this.sweepExpiredListingStats(n),this.listingStats.size+t.length>this.listingStatsMax&&this.listingStats.clear();let r=e===`/`?`/`:`${e}/`;for(let e of t){let t=Ne(e),i=`${r}${e.name}`;this.listingStats.delete(i),t&&this.listingStats.set(i,{stats:t,at:n})}}sweepExpiredListingStats(e){for(let[t,n]of this.listingStats){if(e-n.at<=this.listingStatsTtlMs)break;this.listingStats.delete(t)}}primedStats(e){let t=this.listingStats.get(e);if(t){if(Date.now()-t.at>this.listingStatsTtlMs){this.listingStats.delete(e);return}return t.stats}}dropListingStats(){this.listingStats.clear()}setRegisteredCommandsFn(e){this.registeredCommandsFn=e}getVirtualBinCommands(){return this.registeredCommandsFn?.()??[]}virtualUsrStat(e){if(e===`/usr`||e===`/usr/bin`)return{isFile:!1,isDirectory:!0,isSymbolicLink:!1,mode:493,size:0,mtime:new Date(0)};if(e.startsWith(`/usr/bin/`)){let t=e.slice(9);if(t.length>0&&!t.includes(`/`)&&this.getVirtualBinCommands().includes(t))return{isFile:!0,isDirectory:!1,isSymbolicLink:!1,mode:493,size:0,mtime:new Date(0)}}return null}canWrite(e){let t=this.vfs;return typeof t.canWrite!=`function`||t.canWrite(e)}listMountPoints(){let e=this.vfs;return typeof e.listMountPoints==`function`?e.listMountPoints():[]}trusted(e){let t=wV?.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=TV(t),o=CV.Buffer.from(i.buffer,i.byteOffset,i.byteLength).toString(a);return a!==`hex`&&a!==`base64`&&g(o,i),o})}async readFileBuffer(e){return this.trusted(async()=>{let t=b(e),n=await this.vfs.readFile(t,{encoding:`binary`});return n instanceof Uint8Array?n:new TextEncoder().encode(n)})}async readFileBytes(e){let t=await this.readFileBuffer(e);return CV.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,EV(t,n))})}async appendFile(e,t,n){return this.dropListingStats(),this.trusted(()=>this.vfs.appendFile(b(e),EV(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(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(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 Pe(`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 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 OV(e){return e&&typeof e.getWatcher==`function`?e.getWatcher?.()??null:e&&typeof e.getUnderlyingFS==`function`?OV(e.getUnderlyingFS?.()):null}async function kV(e){let t=ce(`github`);if(t){if(e?.force){await t.onSilentRenew?.();return}await t.getValidAccessToken?.()}}const AV=e(`almost-bash-shell`),jV=`__SLICC_RUN_PID`,MV=`__SLICC_OUTPUT_TEE__`;function NV(e){let t=e?.get(jV);if(t===void 0)return;let n=Number.parseInt(t,10);return Number.isSafeInteger(n)&&n>0?n:void 0}function PV(e){if(!(jV in e)&&!(MV in e)&&!(`__SLICC_SUDO_REASON`in e)&&!(`__SLICC_PIPESTATUS`in e)&&!(`__SLICC_PIPESTATUS_EX`in e))return{...e};let{[jV]:t,[MV]:n,[$p]:r,[rp]:i,[ip]:a,...o}=e;return o}var FV=class e{options;bash;vfsAdapter;gitCommands;mountCommands;lastEnv;cwd;builtinCommandNames;staticBuiltinNames;allowedCommands;scriptCatalog;initialJshSync=null;ownsScriptCatalog;registeredJshCommands=new Map;registeredWorkflowCommands=new Set;jshSyncInflight=null;jshSyncDirty=!1;pendingCommandGrants=[];pendingSudoBypasses=new Map;pendingEnvWrites=new Map;activeShellPid;progress;activeRunSignal;scriptRun=null;scriptRunsActive=0;registryNames=new Set;outputTees=new Map;nextOutputTeeId=0;resolveJshProcessConfig=e=>this.buildJshProcessConfig(NV(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:$f,PATH:Hn,USER:`user`,SHELL:`/bin/bash`,TMPDIR:`/tmp`,PWD:t,...e.env}}buildSupplementalCommands(e,t){return yV({onMediaPreview:async e=>this.renderMediaPreview(e),getJshCommands:()=>this.getJshCommandNames(),getWorkflowCommands:()=>this.getWorkflowCommandNames(),syncScriptCommands:()=>this.syncJshCommands(),getStaticBuiltins:()=>[...this.staticBuiltinNames],getScriptRegisteredNames:()=>[...this.registeredJshCommands.keys(),...this.registeredWorkflowCommands],fs:e.fs,fetch:t,scriptCatalog:this.scriptCatalog,browserAPI:e.browserAPI,webhook:e.webhook,crontask:e.crontask,getParentJid:e.getParentJid,isScoop:e.isScoop,buildProcessConfig:this.resolveJshProcessConfig,processManager:e.processManager,sudoCommand:e.sudo?{broker:e.sudo.broker,persistGrant:async e=>{this.pendingCommandGrants.push(e)},suppressNextGate:e=>this.registerSudoBypass(e)}:void 0,setEnv:(e,t)=>{this.pendingEnvWrites.set(e,t),this.lastEnv[e]=t},unsetEnv:e=>{this.pendingEnvWrites.set(e,null),delete this.lastEnv[e]}})}constructor(t){this.options=t,this.vfsAdapter=new DV(t.fs),this.progress=new hp({scrubLabel:t.scrubProgressLabel}),this.allowedCommands=e.buildAllowedCommandSet(t);let n=t.cwd??`/`,r=e.buildInitialEnv(t,n);this.gitCommands=new Xf({fs:t.fs,authorName:r.GIT_AUTHOR_NAME??`User`,authorEmail:r.GIT_AUTHOR_EMAIL??`user@example.com`,ensureFreshGithubToken:kV}),this.mountCommands=new Cs({fs:t.fs,isScoop:t.isScoop,acquireLocalMountViaToolUI:om});let i=t.jshDiscoveryFs??t.fs,a=t.bshDiscoveryFs??t.fs,o=OV(i)??OV(a);this.scriptCatalog=t.scriptCatalog??new ai({jshFs:i,bshFs:a,watcher:o}),this.ownsScriptCatalog=!t.scriptCatalog,o&&o.watch(`/`,e=>e.endsWith(`.jsh`)||e.endsWith(`.workflow.js`),()=>{this.syncJshCommands().catch(()=>void 0)});let s=this.createGitCustomCommand(),c=h({progress:bp(this.progress)}),l=this.buildSupplementalCommands(t,c),u=[s,this.createMountCustomCommand(),this.createUmountCustomCommand(),eh(t.fs),Zh(t.fs,c,t.browserAPI),...l].filter(e=>this.isCommandAllowed(e.name)),d=[...Xe(),...Ye()],f=this.allowedCommands?d.filter(e=>this.isCommandAllowed(e)):void 0;if(this.bash=new Ze({fs:this.vfsAdapter,cwd:n,env:{},fetch:c,commands:f,customCommands:u,sleep:Vp(this.progress,{isAborted:()=>this.activeRunSignal?.aborted??!1}),executionLimitProfile:t.executionLimitProfile,executionLimits:Qf(t.isScoop?.()??!1,t.executionLimits)}),this.bash.registerTransformPlugin(mm),this.allowedCommands!==null){let e=this.bash;for(let t of Ye())this.isCommandAllowed(t)||e.commands.delete(t)}{let e=this.bash;for(let[t,n]of e.commands)e.commands.set(t,this.wrapCommandForDispatch(n));this.registryNames=new Set(e.commands.keys())}let p=u.map(e=>e.name),m=f??[...Xe(),...Ye()];this.builtinCommandNames=new Set([...m,...p]),this.staticBuiltinNames=new Set(this.builtinCommandNames),this.vfsAdapter.setRegisteredCommandsFn(()=>[...this.builtinCommandNames]),this.lastEnv={...r},this.cwd=n,this.startInitialJshSync()}getBash(){return this.bash}getCwd(){return this.cwd}getScriptCatalog(){return this.scriptCatalog}getEnv(){return{...this.lastEnv}}setMaskedEnvVar(e,t){this.pendingEnvWrites.set(e,t),this.lastEnv[e]=t}applySessionOverrides(e){e.cwd!==void 0&&(this.cwd=e.cwd,this.lastEnv.PWD=e.cwd),e.env&&Object.assign(this.lastEnv,e.env)}async getJshCommandNames(){return[...(await this.getFilteredJshCommands()).keys()]}async syncJshCommands(){return this.jshSyncInflight===null?(this.jshSyncInflight=this.doSyncJshCommands(),this.jshSyncInflight):(this.jshSyncDirty=!0,this.jshSyncInflight)}async executeCommand(e,t,n,r=``,i){let a=this.activeShellPid;n!==void 0&&(this.activeShellPid=n);let o=i?.onOutput?`tee-${this.nextOutputTeeId+=1}`:void 0;o&&i?.onOutput&&this.outputTees.set(o,i.onOutput);try{let a=await this.runCommand(e,t,n,r,o,i?.capturePipeStatus);return{stdout:a.stdout,stderr:a.stderr,exitCode:a.exitCode,...a.pipeStatus===void 0?{}:{pipeStatus:a.pipeStatus}}}finally{this.activeShellPid=a,o&&this.outputTees.delete(o)}}async executeScriptFile(e,t=[]){return zr(e,t,{fs:this.vfsAdapter,cwd:this.cwd,env:new Map(Object.entries(this.lastEnv)),stdin:``,exec:(e,t)=>this.bash.exec(e,{env:t?.env??this.lastEnv,cwd:t?.cwd??this.cwd,...t?.env===void 0?{}:{replaceEnv:!0}})},this.buildJshProcessConfig())}dispose(){this.ownsScriptCatalog&&this.scriptCatalog.dispose()}async renderMediaPreview(e){throw Error(`terminal preview is unavailable in headless mode`)}currentScanRoots(){return Un(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 ep(e);this.lastEnv.HOME=t,this.options.env?.USER||(this.lastEnv.USER=tp(t));let n=`${t.replace(/\/+$/,``)}/.profile`;if(!await e.exists(n).catch(()=>!1))return;let r=await this.bash.exec(`. "$HOME/.profile"`,{env:this.lastEnv,cwd:this.cwd});if(r.env){let{PWD:e,...t}=r.env;this.lastEnv={...t,PWD:this.lastEnv.PWD??this.cwd}}}catch(e){AV.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){SV(e.trim().split(/\s+/)[0]||`unknown`),p(),await this.waitForInitialJshSync(t);let o=tm(e),s={env:{...this.lastEnv,...n===void 0?{}:{[jV]:String(n)},...i===void 0?{}:{[MV]:i},...o?{[$p]:o}:{}},cwd:this.cwd,signal:t,...r===``?{}:{stdin:r,stdinKind:`bytes`}},c=this.lastEnv.PATH;this.activeRunSignal=t;let l=this.beginScriptRun(e),u;try{u=await this.bash.exec(lp(e,a),s)}finally{this.activeRunSignal===t&&(this.activeRunSignal=void 0),this.endScriptRun(l)}if(await this.flushPendingCommandGrants(),u=up(u,a),u.env&&(this.lastEnv=PV(u.env)),u.env&&this.lastEnv.PATH!==c&&await this.syncJshCommands().catch(()=>void 0),this.pendingEnvWrites.size>0){for(let[e,t]of this.pendingEnvWrites)t===null?delete this.lastEnv[e]:this.lastEnv[e]=t;this.pendingEnvWrites.clear()}if(u.env?.PWD&&(this.cwd=u.env.PWD),u.exitCode===127){let t=await this.tryJshFallback(e,n);if(t)return this.syncJshCommands().catch(()=>void 0),t}if(u.exitCode!==0&&u.stderr.includes(`Permission denied`)){let{withShebangExecHint:e}=await import(`./shebang-exec-hint-BISPom3l.js`);return dp(await e(u,this.cwd,this.vfsAdapter),u.pipeStatus)}return u}isTransparentGatingEnabled(){let e=this.options.sudo;return!!e&&e.transparentGating!==!1}wrapCommandForDispatch(e){let t=this.wrapCommandForSudo(e),n=e.name===`timeout`?Gp(t,this.progress):qp(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(MV),s=o?a.get(o):void 0;s&&(t.writeStdout=s);try{let r=await n.execute(e,t);return i(t.env,r),r}finally{r()}}}}teeCommandOutput(e,t){let n=e?.get(MV);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=Ip(this.bash.transform(e).ast,this.registryNames)}catch{t={totalSteps:null}}return this.scriptRun=new Rp(t,this.progress,Lp(e)),this.scriptRun}endScriptRun(e){this.scriptRunsActive=Math.max(0,this.scriptRunsActive-1),e&&(e.end(),this.scriptRun===e&&(this.scriptRun=null))}wrapCommandForSudo(e){if(!this.isTransparentGatingEnabled())return e;let t=(t,n)=>this.gateCommandDispatch(e.name,t,n);return{...e,async execute(n,r){return await t(n,r.env?.get($p))||e.execute(n,r)}}}async gateCommandDispatch(e,t,n){let r=this.options.sudo;if(!r)return null;let i=Yp(e,t);if(this.consumeSudoBypass(i))return null;let a=r.getPolicy();if(!a)return null;let o=await Zp(i,{policy:a,broker:r.broker,persistGrant:async e=>{this.pendingCommandGrants.push(e)},defaultDisposition:r.defaultDisposition,...n?{reason:n}:{}});return o.allowed?null:{stdout:``,stderr:`${o.message}\n`,exitCode:1}}registerSudoBypass(e){let t=e.trim();t&&this.pendingSudoBypasses.set(t,(this.pendingSudoBypasses.get(t)??0)+1)}consumeSudoBypass(e){let t=this.pendingSudoBypasses.get(e);return t?(t===1?this.pendingSudoBypasses.delete(e):this.pendingSudoBypasses.set(e,t-1),!0):!1}async flushPendingCommandGrants(){if(this.pendingCommandGrants.length===0)return;let e=this.pendingCommandGrants;this.pendingCommandGrants=[];for(let t of e)try{await this.persistCommandGrant(t)}catch{}}async persistCommandGrant(e){let t=this.options.sudo?.persistCommandGrant;if(t){await t(e);return}let n=nt(e);if(!n)return;let r=`${it}/granted`,i=this.options.fs,a=``;try{await i.exists(r)&&(a=await i.readFile(r))}catch(e){if(!(e instanceof Pe&&e.code===`ENOENT`))throw e}let o=a&&!a.endsWith(`
3468
+ `)?`${a}\n`:a;await i.writeFile(r,`${o}NOPASSWD Cmnd ${n}\n`)}isCommandAllowed(e){return this.allowedCommands===null||this.allowedCommands.has(e)}async doSyncJshCommands(){try{let e=await this.scriptCatalog.getJshIndex(this.currentScanRoots()),t=e.commands;for(let t of e.collisions)AV.warn(`jsh command '${t.name}' is provided by more than one skill; using ${t.winnerPath} (${t.reason}), shadowed ${t.shadowedPaths.join(`, `)}`);let n=await this.getFilteredWorkflowCommands();for(let[e,n]of t)this.isCommandAllowed(e)&&(this.builtinCommandNames.has(e)&&!this.registeredJshCommands.has(e)||this.registeredJshCommands.get(e)!==n&&(this.bash.registerCommand(this.wrapCommandForDispatch(this.makeScriptCommand(e))),this.registeredJshCommands.set(e,n),this.builtinCommandNames.add(e)));for(let e of n.keys())if(!this.registeredWorkflowCommands.has(e)){if(this.registeredJshCommands.has(e)){this.registeredWorkflowCommands.add(e);continue}this.builtinCommandNames.has(e)||(this.bash.registerCommand(this.wrapCommandForDispatch(this.makeScriptCommand(e))),this.registeredWorkflowCommands.add(e),this.builtinCommandNames.add(e))}}finally{this.jshSyncInflight=null,this.jshSyncDirty&&(this.jshSyncDirty=!1,this.syncJshCommands().catch(()=>void 0))}}makeScriptCommand(e){let t=this.scriptCatalog,n=this.options.jshDiscoveryFs??this.options.fs,r=e,i=async(e,i)=>{let a=i.exec??((e,t)=>this.bash.exec(e,{env:t?.env??Object.fromEntries(i.env),cwd:t?.cwd??i.cwd,args:t?.args,...t?.env===void 0?{}:{replaceEnv:!0}})),o=(await t.getJshCommands(this.currentScanRoots())).get(r);if(o){let t;try{let e=await n.readFile(o,{encoding:`utf-8`});t=typeof e==`string`?e:new TextDecoder().decode(e)}catch{return{stdout:``,stderr:`jsh: cannot read script '${o}'\n`,exitCode:127}}return Hr(t,[`node`,o,...e],{fs:i.fs,cwd:i.cwd,env:i.env,stdin:i.stdin,exec:a},this.buildJshProcessConfig(NV(i.env)))}let s=(await t.getWorkflowCommands()).get(r);if(s){let t=ii(s.path,e);return a(t[0],{args:t.slice(1),cwd:i.cwd})}return{stdout:``,stderr:`${r}: command no longer exists\n`,exitCode:127}};return{name:e,trusted:!0,async execute(e,t){try{return await i(e,t)}catch(e){let t=e instanceof Error?e.message:String(e);return{stdout:``,stderr:`${r}: ${t}\n`,exitCode:1}}}}}createGitCustomCommand(){let e=this.gitCommands;return S(`git`,async(t,n)=>{let r=n.cwd,i=await e.execute(t,r,n.env,P(n.stdin));return{stdout:i.stdout,stderr:i.stderr,exitCode:i.exitCode}})}createMountCustomCommand(){let e=this.mountCommands;return S(`mount`,async(t,n)=>{let r=n.cwd,i=await e.execute(t,r,n.env);return{stdout:i.stdout,stderr:i.stderr,exitCode:i.exitCode}})}createUmountCustomCommand(){let e=this.mountCommands;return S(`umount`,async(t,n)=>{let r=n.cwd,i=await e.executeUmount(t,r);return{stdout:i.stdout,stderr:i.stderr,exitCode:i.exitCode}})}async getFilteredJshCommands(){let e=await this.scriptCatalog.getJshCommands(this.currentScanRoots()),t=new Map;for(let[n,r]of e)this.builtinCommandNames.has(n)||this.isCommandAllowed(n)&&t.set(n,r);return t}async getFilteredWorkflowCommands(){let e=await this.scriptCatalog.getWorkflowCommands(),t=new Map;for(let[n,r]of e)this.isCommandAllowed(n)&&t.set(n,r);return t}async getWorkflowCommandNames(){return[...(await this.getFilteredWorkflowCommands()).keys()]}async tryJshFallback(e,t){let n=e.trim(),r=n.indexOf(` `),i=r>=0?n.slice(0,r):n,a=r>=0?n.slice(r+1).trim():``,o=(await this.getFilteredJshCommands()).get(i);if(!o)return null;let s=a?np(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 Hr(l,u,{fs:this.vfsAdapter,cwd:this.cwd,env:new Map(Object.entries(this.lastEnv)),stdin:``,exec:(e,t)=>this.bash.exec(e,{env:t?.env??this.lastEnv,cwd:t?.cwd??this.cwd,...t?.env===void 0?{}:{replaceEnv:!0}})},this.buildJshProcessConfig(t));return{stdout:d.stdout,stderr:d.stderr,exitCode:d.exitCode,env:this.lastEnv}}buildJshProcessConfig(e){if(!(!this.options.processManager||!this.options.processOwner))return{processManager:this.options.processManager,owner:this.options.processOwner,getParentPid:()=>e??this.activeShellPid??this.options.getCurrentShellPid?.()}}};export{fa as C,xo as S,Io as _,jB as a,Sa as b,mp as c,ms as d,ss as f,Lo as g,ts as h,DB as i,$f as l,rs as m,DV as n,TB as o,is as p,xV as r,Qp as s,FV as t,hs as u,Do as v,xa as x,va as y};