sliccy 6.166.0 → 6.167.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 (212) hide show
  1. package/README.md +1 -0
  2. package/dist/node-server/_shared/base64.d.ts.map +1 -1
  3. package/dist/node-server/_shared/base64.js +7 -3
  4. package/dist/node-server/_shared/base64.js.map +1 -1
  5. package/dist/node-server/_shared/computer-protocol.d.ts +2 -0
  6. package/dist/node-server/_shared/computer-protocol.d.ts.map +1 -1
  7. package/dist/node-server/_shared/tray-sync-protocol.d.ts +66 -2
  8. package/dist/node-server/_shared/tray-sync-protocol.d.ts.map +1 -1
  9. package/dist/node-server/_shared/tray-sync-protocol.js +75 -2
  10. package/dist/node-server/_shared/tray-sync-protocol.js.map +1 -1
  11. package/dist/ui/.vite/manifest.json +274 -260
  12. package/dist/ui/assets/SKILL-CWR-bsvH.js +1 -0
  13. package/dist/ui/assets/{account-store-BEqmysw9.js → account-store-B05_LKnj.js} +1 -1
  14. package/dist/ui/assets/{account-store-C35GYvum.js → account-store-CNTI4kr_.js} +2 -2
  15. package/dist/ui/assets/{adobe-BDH5oLAN.js → adobe-CRRWEbtf.js} +2 -2
  16. package/dist/ui/assets/{adobe-BcTGFCnQ.js → adobe-nu3irXcy.js} +1 -1
  17. package/dist/ui/assets/{agent-panels-DvqNnkLk.js → agent-panels-DvH_qfTh.js} +1 -1
  18. package/dist/ui/assets/{almost-bash-shell-headless-DqTtE9CM.js → almost-bash-shell-headless-BA5r_r61.js} +35 -35
  19. package/dist/ui/assets/{apply-layout-CjYRGs37.js → apply-layout-CASSSWEy.js} +1 -1
  20. package/dist/ui/assets/{apps-dzoLZ_5W.js → apps-BGe9_zJ7.js} +1 -1
  21. package/dist/ui/assets/{azure-openai-DKGdcr4S.js → azure-openai-C-Iw82HZ.js} +1 -1
  22. package/dist/ui/assets/{azure-openai-BffwoCtp.js → azure-openai-DuJciOKd.js} +1 -1
  23. package/dist/ui/assets/{backend-hostfs-CWIlIhve.js → backend-hostfs-DdAVlPMP.js} +1 -1
  24. package/dist/ui/assets/{base64-DzRgusa4.js → base64-BPBW1Gzr.js} +1 -1
  25. package/dist/ui/assets/{base64-DJRlyqZu.js → base64-ELzoYfwP.js} +1 -1
  26. package/dist/ui/assets/{capability-Ci9JmpEG.js → capability-C2eJ1wdx.js} +2 -2
  27. package/dist/ui/assets/{cdp-DXT6yEL1.js → cdp-DG8TVjf3.js} +1 -1
  28. package/dist/ui/assets/{cerebras-BF5efkRL.js → cerebras-BXwtUxTj.js} +1 -1
  29. package/dist/ui/assets/{cerebras-By0l7t0i.js → cerebras-Xadzrxfp.js} +1 -1
  30. package/dist/ui/assets/{client-B6iKb_ye.js → client-BDN4zG90.js} +1 -1
  31. package/dist/ui/assets/{composer-speech-DIEePbQC.js → composer-speech-_uq5e0Bo.js} +1 -1
  32. package/dist/ui/assets/{connect-surface-DBqs7oHf.js → connect-surface-odDz37TJ.js} +1 -1
  33. package/dist/ui/assets/{core-BMcS6rur.js → core-BoFWHLIW.js} +1 -1
  34. package/dist/ui/assets/{core-DP-MJcag.js → core-Bvc89tkf.js} +1 -1
  35. package/dist/ui/assets/{directed-approval-D1lGElvD.js → directed-approval-D_AXAvuz.js} +1 -1
  36. package/dist/ui/assets/{discovery-preference-Bw3Fi0jd.js → discovery-preference-TziZ7Yxu.js} +1 -1
  37. package/dist/ui/assets/encode-frame-B8GkHc2t.js +1 -0
  38. package/dist/ui/assets/engine-D531XNHE.js +1 -0
  39. package/dist/ui/assets/{ensure-speech-assets-BJXemBO4.js → ensure-speech-assets-DTj236n-.js} +1 -1
  40. package/dist/ui/assets/{extension-media-capture-BvLVZFQ0.js → extension-media-capture-DMB4r9UQ.js} +1 -1
  41. package/dist/ui/assets/{extension-ops-B0oi7ypc.js → extension-ops-DNPAsYbK.js} +1 -1
  42. package/dist/ui/assets/fake-computer-Jawax3MO.js +352 -0
  43. package/dist/ui/assets/{float-topology-YtctpJaG.js → float-topology-CurCyQFy.js} +1 -1
  44. package/dist/ui/assets/{follower-navigate-watcher-DnnHgZbM.js → follower-navigate-watcher-C98XMw_C.js} +1 -1
  45. package/dist/ui/assets/{frozen-archive-writer-DYPhPMg7.js → frozen-archive-writer-BIzZxx8R.js} +1 -1
  46. package/dist/ui/assets/{fs-CBH-hQcI.js → fs-Bq8bUwe2.js} +1 -1
  47. package/dist/ui/assets/{fs-BapOupIM.js → fs-CJs9n90Q.js} +2 -2
  48. package/dist/ui/assets/{gelatiere-store-C2u47uk0.js → gelatiere-store-BY0hZvSS.js} +1 -1
  49. package/dist/ui/assets/{gelatiere-unit-wvDEO7gH.js → gelatiere-unit-DrQwRL3O.js} +1 -1
  50. package/dist/ui/assets/{github-Bx7_6LBm.js → github-D1gd3q6u.js} +2 -2
  51. package/dist/ui/assets/{github-auth-DtKS6UIX.js → github-auth-CzzE1eDf.js} +1 -1
  52. package/dist/ui/assets/{github-copilot-CtOjxhqK.js → github-copilot-Bx2lXrwK.js} +1 -1
  53. package/dist/ui/assets/{github-copilot-eCfmryv6.js → github-copilot-DidNEEe_.js} +1 -1
  54. package/dist/ui/assets/{github-install-B6W4-xcc.js → github-install--_xp8s-S.js} +1 -1
  55. package/dist/ui/assets/{github-Db015Tee.js → github-uDwUwz5H.js} +1 -1
  56. package/dist/ui/assets/{github-zip-Bv1smNmy.js → github-zip-Bs35nBig.js} +1 -1
  57. package/dist/ui/assets/{guest-tool-gate-Mu-876Hm.js → guest-tool-gate-B-lZT9hl.js} +1 -1
  58. package/dist/ui/assets/{hear-BZHckZJM.js → hear-BNmJphKg.js} +1 -1
  59. package/dist/ui/assets/{help-BU2Hjl0P.js → help-C7Nq107k.js} +1 -1
  60. package/dist/ui/assets/host-iTtS0MRF.js +1 -0
  61. package/dist/ui/assets/{image-markers-DuyWsic3.js → image-markers-CwM1dvoI.js} +1 -1
  62. package/dist/ui/assets/{image-markers-BFDmhPy4.js → image-markers-q8JQTtid.js} +1 -1
  63. package/dist/ui/assets/{installer-BbtH3u7z.js → installer-C0xiAs69.js} +1 -1
  64. package/dist/ui/assets/{js-realm-worker-BT3mfq3w.js → js-realm-worker-B9Rz0g1p.js} +2 -2
  65. package/dist/ui/assets/jsh-CmIpo35m.js +1 -0
  66. package/dist/ui/assets/{jsh-executor-BWlgcE2N.js → jsh-executor-C7QPZ2Qr.js} +3 -3
  67. package/dist/ui/assets/{jsh-runtime-extensions-BnLXkzqP.js → jsh-runtime-extensions-ddeGEOUw.js} +1 -1
  68. package/dist/ui/assets/{kernel-worker-Dseu067f.js → kernel-worker-4aPSVJ1C.js} +10 -10
  69. package/dist/ui/assets/keys-Dexx8cLD.js +1 -0
  70. package/dist/ui/assets/{lick-ws-bridge-Cc9sToY7.js → lick-ws-bridge-BcAhlead.js} +1 -1
  71. package/dist/ui/assets/{lick-ws-bridge-ChigxI36.js → lick-ws-bridge-DZ0vVYNF.js} +1 -1
  72. package/dist/ui/assets/{live-session-snapshot-B70raB09.js → live-session-snapshot-COMr2v0o.js} +1 -1
  73. package/dist/ui/assets/{local-llm-Dcp5IIP-.js → local-llm-DdGb9WMG.js} +1 -1
  74. package/dist/ui/assets/{local-llm-DpSg-Oe3.js → local-llm-DqeU7kV3.js} +1 -1
  75. package/dist/ui/assets/{main-cherry-VckJPHm5.js → main-cherry-BGZmJFd_.js} +1 -1
  76. package/dist/ui/assets/{main-CfF8CFBr.js → main-jc6OS8lz.js} +3 -3
  77. package/dist/ui/assets/{memory-curation-seam-DUaZFZG9.js → memory-curation-seam-B8pprlUo.js} +1 -1
  78. package/dist/ui/assets/{memory-health-D7uEvfAx.js → memory-health-CGkpyA7o.js} +1 -1
  79. package/dist/ui/assets/memory-v2-flag-DVbOtPFF.js +1 -0
  80. package/dist/ui/assets/{memory-write-execute-rXtR1z76.js → memory-write-execute-B-ahXjaO.js} +1 -1
  81. package/dist/ui/assets/{mount-8lU2iH4k.js → mount-BzdPNQoA.js} +3 -3
  82. package/dist/ui/assets/{mount-DoM0CLGG.js → mount-FkNAB0be.js} +1 -1
  83. package/dist/ui/assets/{mount-bridge-client-3a86Q6J0.js → mount-bridge-client-BO0N4wwP.js} +1 -1
  84. package/dist/ui/assets/{mount-bridge-client-CO2HxXrT.js → mount-bridge-client-CRnohfom.js} +1 -1
  85. package/dist/ui/assets/{new-session-DEhAjxP1.js → new-session-B8iOhaK0.js} +2 -2
  86. package/dist/ui/assets/{oauth-bootstrap-DNTgbEZF.js → oauth-bootstrap-B9PwK4-d.js} +2 -2
  87. package/dist/ui/assets/{oauth-service-BsW9nY_u.js → oauth-service-Bkaz0Dt4.js} +1 -1
  88. package/dist/ui/assets/{oauth-service-IlBYPvwr.js → oauth-service-UTPOqIwj.js} +1 -1
  89. package/dist/ui/assets/{onboarding-orchestrator-DzPQ0pVG.js → onboarding-orchestrator-Cc8Glrem.js} +1 -1
  90. package/dist/ui/assets/{openai-codex-DYRKYWTe.js → openai-codex-BrQ1tsgu.js} +1 -1
  91. package/dist/ui/assets/{openai-codex-CsAhfz0D.js → openai-codex-DmHr_2RR.js} +1 -1
  92. package/dist/ui/assets/{openrouter-IyZlRHg4.js → openrouter-BvM36eS5.js} +1 -1
  93. package/dist/ui/assets/{openrouter-D9T6tXUF.js → openrouter-C6WDBJvB.js} +1 -1
  94. package/dist/ui/assets/{openrouter-free-DfbYsnmf.js → openrouter-free-CFBzPY5J.js} +1 -1
  95. package/dist/ui/assets/{openrouter-free-CPshAgQD.js → openrouter-free-CUKlyrhq.js} +1 -1
  96. package/dist/ui/assets/{openrouter-oauth-xKlWi_wI.js → openrouter-oauth-DOdpRMfw.js} +1 -1
  97. package/dist/ui/assets/{openrouter-oauth-hZg6oH0A.js → openrouter-oauth-RC0CxY4X.js} +1 -1
  98. package/dist/ui/assets/{opfs-mount-C9Iamj6N.js → opfs-mount-B78yj9gx.js} +1 -1
  99. package/dist/ui/assets/{page-approval-service-B8t-buCi.js → page-approval-service-Dy-UA1aK.js} +1 -1
  100. package/dist/ui/assets/{panel-rpc-handlers-Nu-wOrG9.js → panel-rpc-handlers-CQ_iaU6N.js} +2 -2
  101. package/dist/ui/assets/panelize-shell-CFPiIneK.js +4 -0
  102. package/dist/ui/assets/{pi-edit-execution-D6vx5LyF.js → pi-edit-execution-BDl_Xp_M.js} +1 -1
  103. package/dist/ui/assets/{port-bridge-client-Ds3xwapn.js → port-bridge-client-H03Pohgj.js} +1 -1
  104. package/dist/ui/assets/{port-bridge-client-Dn8JtUyP.js → port-bridge-client-ff8DctEN.js} +1 -1
  105. package/dist/ui/assets/{provider-Z5aj7SzG.js → provider-1ByYSphI.js} +2 -2
  106. package/dist/ui/assets/{provider-3--cEcAF.js → provider-Df8LFEZ7.js} +1 -1
  107. package/dist/ui/assets/{provider-settings-D9sjEfYE.js → provider-settings-Bk-fk9dp.js} +1 -1
  108. package/dist/ui/assets/provider-store-access-BJPbOUku.js +1 -0
  109. package/dist/ui/assets/provider-store-access-BrjCBzpb.js +1 -0
  110. package/dist/ui/assets/{providers-CnoKdyLc.js → providers-Q92pCQ8h.js} +2 -2
  111. package/dist/ui/assets/{providers-DVvrXbtx.js → providers-T_FH_8cU.js} +1 -1
  112. package/dist/ui/assets/{proxied-fetch-DyBveeCl.js → proxied-fetch-Bl8AeYdt.js} +1 -1
  113. package/dist/ui/assets/{proxied-fetch-DEK8DT-z.js → proxied-fetch-DARKNygr.js} +1 -1
  114. package/dist/ui/assets/{quick-llm-DjWE-wQw.js → quick-llm-CbGHjrhX.js} +1 -1
  115. package/dist/ui/assets/{realm-inprocess-D0iWBQzz.js → realm-inprocess-CWMnXeN3.js} +2 -2
  116. package/dist/ui/assets/{recovery-screen-Y1CSyfR-.js → recovery-screen-DhUqOdby.js} +1 -1
  117. package/dist/ui/assets/{redirect-uri-CgKdq7-K.js → redirect-uri-Dd0j1fSp.js} +1 -1
  118. package/dist/ui/assets/{request-body-DkfS6k_a.js → request-body-BF4moGct.js} +1 -1
  119. package/dist/ui/assets/{rest-ops-C8YK53pT.js → rest-ops-CQOwDiTR.js} +1 -1
  120. package/dist/ui/assets/{rest-ops-DNanZY2-.js → rest-ops-DkUeDpiM.js} +1 -1
  121. package/dist/ui/assets/{restore-DOkDX8BI.js → restore-CVkulBmU.js} +1 -1
  122. package/dist/ui/assets/{run-BOkp5G58.js → run-1aYSFTwj.js} +2 -2
  123. package/dist/ui/assets/{run-B-fA26ea.js → run-BX9uHbIi.js} +1 -1
  124. package/dist/ui/assets/{run-BOc9XLhg.js → run-COfTem8j.js} +1 -1
  125. package/dist/ui/assets/{run-BWJSDhS7.js → run-CUCg2cJM.js} +2 -2
  126. package/dist/ui/assets/{run-Bld9B0W0.js → run-CreCrLyX.js} +1 -1
  127. package/dist/ui/assets/{run-DgNh1E56.js → run-DgVV_DFr.js} +3 -3
  128. package/dist/ui/assets/{run-D0C4PgZM.js → run-DuW-7oJj.js} +2 -2
  129. package/dist/ui/assets/run-DvD576xV.js +53 -0
  130. package/dist/ui/assets/{run-vEDh-Me-.js → run-IexPmM2B.js} +2 -2
  131. package/dist/ui/assets/{run-a67LpkRp.js → run-ZmpHaamT.js} +2 -2
  132. package/dist/ui/assets/{screencapture-media-B1iFS6Qy.js → screencapture-media-DL5YxrlG.js} +1 -1
  133. package/dist/ui/assets/{screencapture-run-XrgS6hEd.js → screencapture-run-yMA5c_HS.js} +1 -1
  134. package/dist/ui/assets/{secret-env-CDLWFhsq.js → secret-env-BhWGz7yx.js} +1 -1
  135. package/dist/ui/assets/secret-topology-CVneCnID.js +1 -0
  136. package/dist/ui/assets/{secrets-bridge-client-ZpBL1Zhl.js → secrets-bridge-client-BS3V1JBF.js} +1 -1
  137. package/dist/ui/assets/{secrets-bridge-client--VZ3E0yk.js → secrets-bridge-client-C0tvQeuX.js} +1 -1
  138. package/dist/ui/assets/{session-command-memory-DB2GmPSU.js → session-command-memory-DzuRy-nC.js} +2 -2
  139. package/dist/ui/assets/{session-jsonl-DFC-2T76.js → session-jsonl-D01HYAS2.js} +1 -1
  140. package/dist/ui/assets/{session-jsonl-D_pTYppB.js → session-jsonl-iOOR_32X.js} +1 -1
  141. package/dist/ui/assets/{session-search-index-CN1zDLlx.js → session-search-index-CABvtt-r.js} +1 -1
  142. package/dist/ui/assets/{setup-feature-flags-remote-BVd31Z12.js → setup-feature-flags-remote-CvstKwBW.js} +1 -1
  143. package/dist/ui/assets/{signed-fetch-BY2Mdjqe.js → signed-fetch-7NwdVmf1.js} +1 -1
  144. package/dist/ui/assets/{silent-renew-backoff-CKAAh6GN.js → silent-renew-backoff-CXHqSiPb.js} +1 -1
  145. package/dist/ui/assets/slicc-version-CN6V2aMa.js +1 -0
  146. package/dist/ui/assets/{snapshot-gi8tDzvN.js → snapshot-BcYaw9Ip.js} +1 -1
  147. package/dist/ui/assets/{snapshot-features-DjMJkCGq.js → snapshot-features-3xslkGtL.js} +1 -1
  148. package/dist/ui/assets/{soundscape-Bl3LhUk9.js → soundscape-TygolFwj.js} +1 -1
  149. package/dist/ui/assets/{speak-BY_fDou2.js → speak-BCLm04Z2.js} +1 -1
  150. package/dist/ui/assets/{sprinkle-manager-C-NUJqPy.js → sprinkle-manager-DDzNanda.js} +1 -1
  151. package/dist/ui/assets/{sprinkle-renderer-CcA6ie5u.js → sprinkle-renderer-B-CADNjq.js} +1 -1
  152. package/dist/ui/assets/{state-z3wOHLww.js → state-BCTAzK_L.js} +1 -1
  153. package/dist/ui/assets/{store-ByUcAFUa.js → store-C-AW4ogv.js} +1 -1
  154. package/dist/ui/assets/{store-ChWzn_H8.js → store-CzlK9KIc.js} +1 -1
  155. package/dist/ui/assets/{sudo-DNZFIZ-H.js → sudo-BtkDnUA_.js} +1 -1
  156. package/dist/ui/assets/{supervisor-BtH2-9sE.js → supervisor-B6-QPxI3.js} +1 -1
  157. package/dist/ui/assets/{sync-dialog-Jqz74VkZ.js → sync-dialog-B4G7kCwj.js} +1 -1
  158. package/dist/ui/assets/{transformers-env-pq1E2H6B.js → transformers-env-1TbBNkOp.js} +1 -1
  159. package/dist/ui/assets/{tray-leader-Bas0lH9O.js → tray-leader-_KISvFyF.js} +1 -1
  160. package/dist/ui/assets/{tray-leave-runtime-B9aV_guA.js → tray-leave-runtime-CRsRkPHc.js} +1 -1
  161. package/dist/ui/assets/{tray-runtime-config-BZoJXfW0.js → tray-runtime-config-BVgVR3H2.js} +1 -1
  162. package/dist/ui/assets/{tray-sidecar-DA8NfCV6.js → tray-sidecar-BRvCb-i7.js} +1 -1
  163. package/dist/ui/assets/{upgrade-detection-B5ym__Gu.js → upgrade-detection-C5daiUbn.js} +1 -1
  164. package/dist/ui/assets/{upskill-lick-skip-CZGM2OFA.js → upskill-lick-skip-C2ZQ0c2-.js} +1 -1
  165. package/dist/ui/assets/v86-BfdTUFBK.js +1 -0
  166. package/dist/ui/assets/voice-reply-Dk4ztuZL.js +1 -0
  167. package/dist/ui/assets/{wc-attach-C5yXIQNU.js → wc-attach-CFj2ZF5_.js} +3 -3
  168. package/dist/ui/assets/wc-browser-BFL2Tl8W.js +1 -0
  169. package/dist/ui/assets/wc-computers-CcJuQUyG.js +3 -0
  170. package/dist/ui/assets/{wc-detached-f_qit-5b.js → wc-detached-ncc8KuL1.js} +1 -1
  171. package/dist/ui/assets/{wc-extension-DRx21-cq.js → wc-extension-DppNe2VK.js} +2 -2
  172. package/dist/ui/assets/{wc-follower-DcKt92kM.js → wc-follower-CcxFCW-y.js} +3 -3
  173. package/dist/ui/assets/wc-follower-oauth-DQ-JPxl6.js +5 -0
  174. package/dist/ui/assets/{wc-gelatiere-qAW7lWGW.js → wc-gelatiere-CANPh9TU.js} +1 -1
  175. package/dist/ui/assets/wc-live-BLozTZsg.js +427 -0
  176. package/dist/ui/assets/{wc-nav-DzPuXq_n.js → wc-nav-BlLpBAJG.js} +2 -2
  177. package/dist/ui/assets/{wc-onboarding-CXM-z-7_.js → wc-onboarding-OKaUOQ3X.js} +2 -2
  178. package/dist/ui/assets/{wc-placeholder-BBqbsuml.js → wc-placeholder-BrX9-mPv.js} +3 -3
  179. package/dist/ui/assets/{wc-secret-request-BSUlxVVi.js → wc-secret-request-QPmTs_eW.js} +1 -1
  180. package/dist/ui/assets/{wc-settings-55mC-jVS.js → wc-settings-BFgFDtTk.js} +3 -3
  181. package/dist/ui/assets/{wc-shell-C71iKreG.js → wc-shell-CCKjmASt.js} +242 -187
  182. package/dist/ui/assets/{wc-shortcut-config-Crjq_rF1.js → wc-shortcut-config-CeUoljrV.js} +1 -1
  183. package/dist/ui/assets/{wc-sprinkles-Caji5y7n.js → wc-sprinkles-BNp18_jW.js} +2 -2
  184. package/dist/ui/assets/{wc-transcript-export-Dqe3SH1t.js → wc-transcript-export-DJnnZ8L-.js} +2 -2
  185. package/dist/ui/assets/wc-tray-f1LxbB98.js +5 -0
  186. package/dist/ui/assets/welcome-detection-Dg9THpkh.js +1 -0
  187. package/dist/ui/assets/{whisper-session-DfILe4Yb.js → whisper-session-CMiImrJg.js} +2 -2
  188. package/dist/ui/assets/{xai-grok-CVLBrxdD.js → xai-grok-BMr5udF6.js} +1 -1
  189. package/dist/ui/assets/{xai-grok-Dp8n52fO.js → xai-grok-Dzeo18XM.js} +1 -1
  190. package/dist/ui/index.html +11 -11
  191. package/dist/ui/packages/webapp/index.html +11 -11
  192. package/package.json +1 -1
  193. package/dist/ui/assets/SKILL-DB5CVwyu.js +0 -1
  194. package/dist/ui/assets/engine-B-OPe78i.js +0 -1
  195. package/dist/ui/assets/fake-computer-1f2_4vxY.js +0 -65
  196. package/dist/ui/assets/host-BQ2qKD-D.js +0 -1
  197. package/dist/ui/assets/jsh-CrSWPG4t.js +0 -1
  198. package/dist/ui/assets/keys-n5_C9sHW.js +0 -1
  199. package/dist/ui/assets/memory-v2-flag-BHVbti6Z.js +0 -1
  200. package/dist/ui/assets/panelize-shell-tFElgHWF.js +0 -4
  201. package/dist/ui/assets/provider-store-access-M0PvJ08M.js +0 -1
  202. package/dist/ui/assets/provider-store-access-RxIHhH6d.js +0 -1
  203. package/dist/ui/assets/run-BEt0RS3J.js +0 -52
  204. package/dist/ui/assets/secret-topology-DLJBhHOi.js +0 -1
  205. package/dist/ui/assets/slicc-version-BZyTvfoc.js +0 -1
  206. package/dist/ui/assets/v86-DseFx8Yp.js +0 -1
  207. package/dist/ui/assets/voice-reply-CL5tDo0l.js +0 -1
  208. package/dist/ui/assets/wc-browser-DO1Pnegi.js +0 -1
  209. package/dist/ui/assets/wc-follower-oauth-BF3qXDTt.js +0 -5
  210. package/dist/ui/assets/wc-live-DOMCfDT6.js +0 -427
  211. package/dist/ui/assets/wc-tray-B7ayzT1W.js +0 -5
  212. package/dist/ui/assets/welcome-detection-CEARSpAq.js +0 -1
@@ -1,4 +1,4 @@
1
- import{t as e}from"./logger-LESFN7Hj.js";import{a as t,i as n,n as r,r as i,t as a}from"./snapshot-gi8tDzvN.js";import{n as o,r as s}from"./panel-rpc-BPwAqRch.js";import{t as c}from"./providers-DVvrXbtx.js";import{r as l,t as u}from"./base64-DzRgusa4.js";import{n as d}from"./bridge-protocol-31SWTdS5.js";import{a as f,n as p,o as m,s as h,t as g}from"./handoff-link-B3It6xQY.js";import{d as _,f as v,i as ee,u as te}from"./account-store-BEqmysw9.js";import{a as ne,l as re,n as ie,o as ae}from"./proxied-fetch-DEK8DT-z.js";import{t as oe}from"./runtime-env-DadgceZk.js";import{t as se}from"./slugify-BYJ6QVAt.js";import{r as ce}from"./binary-cache-bSOhqXB1.js";import{i as le,n as ue,r as de}from"./fetch-body-CuwTaJC_.js";import{o as fe,t as pe}from"./api-endpoint-3qEcn7BY.js";import{t as me}from"./compat-uEPf6-XW.js";import{a as he,i as ge,l as _e,o as ve,s as ye,u as be}from"./core-DP-MJcag.js";import{n as xe,t as Se}from"./mime-types-D7IV6i7k.js";import{t as Ce}from"./secrets-bridge-client-ZpBL1Zhl.js";import{a as we,i as Te,n as y,t as b}from"./path-utils-DNJG-zQf.js";import{n as Ee,r as De,t as Oe}from"./merge-file-core-VJlzucJY.js";import{r as ke}from"./workspace-mode-D0kUKBVS.js";import{n as Ae,t as je}from"./thinking-level-5x0UAu9N.js";import{n as Me,t as Ne}from"./types-D8gIX-W-.js";import{i as Pe}from"./mount-index-CQfmUPuZ.js";import{a as Fe,i as Ie,n as Le,o as Re,s as ze,t as Be}from"./signed-fetch-BY2Mdjqe.js";import{o as Ve}from"./mount-table-store-DrF_Ifaz.js";import{t as He}from"./remote-cache-BE5T1-53.js";import{n as Ue}from"./fs-CBH-hQcI.js";import{c as We,i as Ge,n as Ke,r as qe,s as Je}from"./lick-urls-DdKPDlgq.js";import{n as Ye,t as Xe}from"./slicc-version-BZyTvfoc.js";import{a as Ze,i as Qe,o as $e,r as x,t as et}from"./browser-eoO4vY7w.js";import{t as S}from"./subcommand-flags-BZi7j78Q.js";import{n as tt,r as nt,t as C}from"./subcommand-help-CgO7wRS5.js";import{n as rt}from"./cost-command-BULzLcvz.js";import{d as it,g as at,i as ot,n as st,o as ct}from"./sudoers-BdBYQPUn.js";import{a as lt,i as ut,o as dt}from"./sudo-fs-D620mZry.js";import{a as ft,c as pt,i as mt,l as ht,n as gt,o as _t,r as vt,t as yt}from"./types-BfwydWt7.js";import{n as w,t as bt}from"./boundary-Cp9c_bPu.js";import"./rest-paths-Dia19u9P.js";import{t as xt}from"./html-B_Hg2WOy.js";import{n as St}from"./llm-session-id-BZyXP_j2.js";import{t as Ct}from"./buffer-polyfill-BccMjOKj.js";import{i as wt,r as Tt}from"./browser-2rCVqcqy.js";import{_ as Et,b as Dt,c as Ot,d as kt,f as At,g as jt,h as Mt,l as Nt,m as Pt,n as Ft,o as It,p as Lt,s as Rt,t as zt,u as Bt,v as Vt,x as Ht,y as Ut}from"./jsh-executor-BWlgcE2N.js";import{t as Wt}from"./buffer-B5d1xHaH.js";import{A as Gt,B as T,C as Kt,D as E,E as qt,F as Jt,G as Yt,H as D,I as O,J as Xt,K as Zt,L as Qt,M as $t,N as en,O as tn,P as nn,R as rn,S as an,T as on,U as sn,V as cn,W as ln,Y as un,_ as dn,a as fn,b as pn,c as mn,d as hn,f as gn,g as _n,h as vn,i as yn,j as bn,k as xn,l as Sn,m as Cn,n as wn,o as Tn,p as k,q as En,r as Dn,s as On,t as kn,u as An,v as jn,w as Mn,x as Nn,y as Pn,z as Fn}from"./isomorphic-git-D2fV6xS-.js";import"./global-db-DJXlpNui.js";import{S as In,_ as Ln,a as Rn,b as zn,c as Bn,d as Vn,f as Hn,g as Un,h as Wn,i as Gn,l as Kn,n as qn,o as Jn,p as Yn,r as Xn,s as Zn,t as Qn,u as $n,v as A,x as j,y as er}from"./state-z3wOHLww.js";import{a as tr,i as nr,r as rr,t as ir}from"./git-config-Bdgu8kD2.js";import{i as ar,n as or,r as sr}from"./jsh-discovery-D3Gk1cKA.js";import{A as cr,C as lr,a as ur,b as dr,c as fr,d as pr,f as mr,h as hr,i as gr,j as _r,l as vr,m as yr,n as br,o as xr,p as Sr,r as Cr,s as wr,t as M,u as Tr,v as Er,y as Dr}from"./shared-C_68vn79.js";import{B as Or,F as kr,G as Ar,H as jr,J as Mr,K as Nr,L as Pr,N as Fr,P as Ir,U as Lr,V as Rr,W as zr,X as Br,Y as Vr,Z as Hr,q as Ur,z as Wr}from"./sync-sab-wire-CC30v4TL.js";import{n as Gr,t as Kr}from"./esbuild-wasm-DS_YG2EY.js";import{n as qr}from"./wasm-compiler-Ct7QZURL.js";import{a as Jr,o as Yr,s as Xr,t as Zr}from"./usb-device-registry-DFzxaOky.js";import{a as N,i as Qr,r as $r,t as ei}from"./just-bash-compat-B-SPHuh_.js";import{i as ti,r as ni,t as ri}from"./script-catalog-CgT8L-OG.js";import{a as ii,c as ai,o as oi,s as si,t as ci}from"./types-Dzr0qYl3.js";import{a as li,c as ui,d as di,f as fi,n as pi,r as mi,u as hi}from"./github-zip-Bv1smNmy.js";import{i as gi,t as _i}from"./github-auth-DtKS6UIX.js";import{a as vi,i as yi,o as bi,r as xi,t as Si}from"./provenance-DdmsQ3Nr.js";import{a as Ci,c as wi,i as Ti,n as Ei,o as Di,r as Oi,s as ki}from"./github-install-B6W4-xcc.js";import{n as Ai,t as ji}from"./magick-wasm-DCNZhAyd.js";import{i as Mi,n as Ni,r as Pi,t as Fi}from"./pdf-raster-BWk6ezTX.js";import{n as Ii}from"./lick-target-env-8JxfVcIV.js";import{t as Li}from"./tmpdir-env-ate4iNcK.js";import{a as Ri,c as zi,d as Bi,f as Vi,i as Hi,l as Ui,n as Wi,o as Gi,p as Ki,r as qi,s as Ji,t as Yi,u as Xi}from"./installer-BbtH3u7z.js";import{t as Zi}from"./ffmpeg-wasm-B77gfnB_.js";import{t as Qi}from"./local-llm-DpSg-Oe3.js";import{t as $i}from"./client-B6iKb_ye.js";import{t as ea}from"./redirect-uri-CgKdq7-K.js";import{a as ta,c as na,i as ra,n as ia,o as aa,r as oa,s as sa,t as ca}from"./v86-vm-DCm7zA2r.js";let la=null;function ua(e){la=e!==null&&Number.isFinite(e)&&e>0?e:null}function da(){if(la!==null)return la;let e=globalThis.performance?.timeOrigin;return typeof e==`number`&&Number.isFinite(e)&&e>0?e:Date.now()}new URL(d).hostname;const fa=/^([0-9a-f]{32})--(?:[0-9a-f]{8}-)?([0-9a-f]+)$/i;function pa(e){let t;try{t=new URL(e.includes(`://`)?e:`https://${e}`).hostname}catch{return null}let n=fa.exec(t.split(`.`)[0]??``);if(!n||!t.includes(`.`))return null;let r=n[1].toLowerCase();return`${[r.slice(0,8),r.slice(8,12),r.slice(12,16),r.slice(16,20),r.slice(20)].join(`-`)}.${n[2].toLowerCase()}`}[`ghp_`,`gho_`,`ghu_`,`ghs_`,`ghr_`,`github_pat_`,`sk-`,`pk-`,`xoxb-`,`xoxp-`,`xoxa-`,`xoxs-`,`AKIA`,`ABIA`,`ACCA`,`ASIA`,`sk-ant-`,`Bearer `].sort((e,t)=>t.length-e.length);function ma(e,t){let n=e.toLowerCase(),r=t.toLowerCase();if(n===`*`)return!0;if(!n.startsWith(`*.`))return n===r;let i=n.slice(1);return r.length>i.length&&r.endsWith(i)}function ha(e,t){return e.some(e=>ma(e,t))}const ga=`slicc-transcript`,_a=[`canonical-agent-history-unavailable`,`tool-data-may-be-truncated`,`model-metadata-unavailable`,`scoop-history-unavailable`,`attachment-file-missing`,`attachment-association-unavailable`,`complete-snapshot-unavailable`],va=new Set(`/export/format./export/producer/application./session/id./session/state./session/completeness/status./session/completeness/missing/*./conversations/*/id./conversations/*/kind./conversations/*/parentConversationId./conversations/*/messages/*/id./conversations/*/messages/*/role./conversations/*/messages/*/timestamp./conversations/*/messages/*/toolCallId./conversations/*/messages/*/content/*/type./conversations/*/messages/*/content/*/id./conversations/*/messages/*/content/*/name./conversations/*/messages/*/content/*/attachmentId./delegations/*/sourceConversationId./delegations/*/targetConversationId./delegations/*/toolCallId./attachments/*/id./attachments/*/path./attachments/*/sha256./attachments/*/sourceConversationId./attachments/*/sourceMessageId./attachments/*/handling./attachments/*/missingReason`.split(`.`));function ya(e){return va.has(e.replace(/\/\d+(?=\/|$)/g,`/*`))}var ba=class extends Error{code;detail;constructor(e,t){super(t?`${e}: ${t}`:e),this.code=e,this.detail=t,this.name=`TranscriptExportError`}};const xa=new Set(_a),Sa=/^[0-9a-fA-F]{64}$/,Ca=/^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}/;function P(e){return typeof e==`object`&&!!e&&!Array.isArray(e)}function wa(e){return typeof e==`string`&&Sa.test(e)}function Ta(e){return Ca.test(e)&&Number.isFinite(Date.parse(e))}function Ea(e,t){let n=t.map(e=>`"${e}"`),r=n[n.length-1];return n.length===2?`${e} must be ${n[0]} or ${r}`:`${e} must be ${n.slice(0,-1).join(`, `)}, or ${r}`}function Da(e,t,n){return typeof e!=`string`||!t.includes(e)?{ok:!1,error:Ea(n,t)}:{ok:!0}}function Oa(e,t,n){for(let r=0;r<e.length;r++){let i=t(e[r],`${n}[${r}]`);if(!i.ok)return i}return{ok:!0}}function ka(e,t){let n=e.type;if(n===`text`){if(typeof e.text!=`string`)return{ok:!1,error:`${t}.text must be a string`}}else if(n===`tool-call`){if(typeof e.id!=`string`||e.id===``)return{ok:!1,error:`${t}.id must be a non-empty string`};if(typeof e.name!=`string`||e.name===``)return{ok:!1,error:`${t}.name must be a non-empty string`};if(!(`input`in e))return{ok:!1,error:`${t}.input must be present`}}else if(typeof e.attachmentId!=`string`||e.attachmentId===``)return{ok:!1,error:`${t}.attachmentId must be a non-empty string`};return{ok:!0}}function Aa(e,t){if(!P(e))return{ok:!1,error:`${t} must be a non-null object`};let n=Da(e.type,[`text`,`tool-call`,`attachment-ref`],`${t}.type`);return n.ok?ka(e,t):n}function ja(e,t){for(let n of[`input`,`output`,`cacheRead`,`cacheWrite`,`totalTokens`]){let r=e[n];if(typeof r!=`number`)return{ok:!1,error:`${t}.${n} must be a number`};if(!Number.isInteger(r)||r<0)return{ok:!1,error:`${t}.${n} must be a non-negative integer`}}return{ok:!0}}function Ma(e,t){for(let n of[`input`,`output`,`cacheRead`,`cacheWrite`,`total`]){let r=e[n];if(typeof r!=`number`)return{ok:!1,error:`${t}.${n} must be a number`};if(!Number.isFinite(r)||r<0)return{ok:!1,error:`${t}.${n} must be a finite non-negative number`}}return{ok:!0}}function Na(e,t){let n=ja(e,t);if(!n.ok)return n;let r=e.cost;return P(r)?Ma(r,`${t}.cost`):{ok:!1,error:`${t}.cost must be a non-null object`}}function Pa(e,t){if(typeof e.id!=`string`)return{ok:!1,error:`${t}.id must be a string`};if(typeof e.sequence!=`number`)return{ok:!1,error:`${t}.sequence must be a number`};let n=e.sequence;return!Number.isInteger(n)||n<1?{ok:!1,error:`${t}.sequence must be a positive integer`}:typeof e.timestamp==`string`?Ta(e.timestamp)?{ok:!0}:{ok:!1,error:`${t}.timestamp must be a valid ISO 8601 date-time string`}:{ok:!1,error:`${t}.timestamp must be a string`}}function Fa(e,t){let n=e.toolCallId;return typeof n!=`string`||n===``?{ok:!1,error:`${t}.toolCallId must be a non-empty string for tool-result messages`}:{ok:!0}}function Ia(e,t){let n=e.usage;return n===void 0?{ok:!0}:P(n)?Na(n,`${t}.usage`):{ok:!1,error:`${t}.usage must be a non-null object`}}function La(e,t){if(!P(e))return{ok:!1,error:`${t} must be a non-null object`};let n=Da(e.role,[`user`,`assistant`,`tool-result`],`${t}.role`);if(!n.ok)return n;if(e.role===`tool-result`){let n=Fa(e,t);if(!n.ok)return n}let r=Pa(e,t);if(!r.ok)return r;let i=e.content;if(!Array.isArray(i))return{ok:!1,error:`${t}.content must be an array`};let a=Oa(i,Aa,`${t}.content`);return a.ok?Ia(e,t):a}function Ra(e,t){if(!P(e))return{ok:!1,error:`${t} must be a non-null object`};if(typeof e.id!=`string`)return{ok:!1,error:`${t}.id must be a string`};if(typeof e.name!=`string`)return{ok:!1,error:`${t}.name must be a string`};let n=Da(e.kind,[`cone`,`scoop`],`${t}.kind`);if(!n.ok)return n;let r=e.messages;return Array.isArray(r)?Oa(r,La,`${t}.messages`):{ok:!1,error:`${t}.messages must be an array`}}function za(e,t){for(let n of[`id`,`path`,`originalName`,`mimeType`,`sha256`,`sourceConversationId`,`sourceMessageId`])if(typeof e[n]!=`string`)return{ok:!1,error:`${t}.${n} must be a string`};return{ok:!0}}function Ba(e,t){let n=e.path,r=e.sha256,i=e.byteLength;return n===``?{ok:!1,error:`${t}.path must be non-empty when present`}:wa(r)?!Number.isInteger(i)||i<0?{ok:!1,error:`${t}.byteLength must be a non-negative integer when present`}:e.missingReason===void 0?{ok:!0}:{ok:!1,error:`${t}.missingReason must be absent when present is true`}:{ok:!1,error:`${t}.sha256 must be a 64-char hex string when present`}}const Va=[`attachment-file-missing`,`attachment-association-unavailable`];function Ha(e,t){let n=e.path,r=e.sha256,i=e.byteLength;return n===``?r===``?i===0?Da(e.missingReason,Va,`${t}.missingReason`):{ok:!1,error:`${t}.byteLength must be zero when not present`}:{ok:!1,error:`${t}.sha256 must be empty when not present`}:{ok:!1,error:`${t}.path must be empty when not present`}}function Ua(e,t){return e.present?Ba(e,t):Ha(e,t)}function Wa(e,t){if(!P(e))return{ok:!1,error:`${t} must be a non-null object`};let n=za(e,t);if(!n.ok)return n;if(typeof e.byteLength!=`number`)return{ok:!1,error:`${t}.byteLength must be a number`};if(typeof e.present!=`boolean`)return{ok:!1,error:`${t}.present must be a boolean`};let r=Da(e.handling,[`text-redacted`,`binary-unchanged`],`${t}.handling`);return r.ok?Ua(e,t):r}function Ga(e,t){let n=Da(e.kind,[`json`,`attachment`],`${t}.kind`);if(!n.ok)return n;if(e.kind===`json`){if(typeof e.pointer!=`string`)return{ok:!1,error:`${t}.pointer must be a string`};let n=e.pointer;if(n!==``&&!n.startsWith(`/`))return{ok:!1,error:`${t}.pointer must be a valid RFC 6901 JSON pointer`}}else if(typeof e.attachmentId!=`string`||e.attachmentId===``)return{ok:!1,error:`${t}.attachmentId must be a non-empty string`};return{ok:!0}}function Ka(e,t){if(!P(e))return{ok:!1,error:`${t} must be a non-null object`};if(typeof e.id!=`string`)return{ok:!1,error:`${t}.id must be a string`};if(typeof e.category!=`string`)return{ok:!1,error:`${t}.category must be a string`};let n=Da(e.detector,[`known-secret`,`credential-pattern`,`pre-obfuscated`],`${t}.detector`);if(!n.ok)return n;let r=e.target;return P(r)?Ga(r,`${t}.target`):{ok:!1,error:`${t}.target must be a non-null object`}}function qa(e,t){return P(e)?typeof e.sourceConversationId==`string`?typeof e.targetConversationId==`string`?{ok:!0}:{ok:!1,error:`${t}.targetConversationId must be a string`}:{ok:!1,error:`${t}.sourceConversationId must be a string`}:{ok:!1,error:`${t} must be a non-null object`}}function Ja(e,t){return typeof e!=`string`||!xa.has(e)?{ok:!1,error:`${t} is not a valid completeness reason`}:{ok:!0}}function Ya(e){if(!P(e))return{ok:!1,error:`export must be a non-null object`};if(typeof e.id!=`string`)return{ok:!1,error:`export.id must be a string`};if(typeof e.generatedAt!=`string`)return{ok:!1,error:`export.generatedAt must be a string`};if(e.format!==`slicc-transcript`)return{ok:!1,error:`export.format must equal "slicc-transcript"`};let t=e.producer;return P(t)?t.application===`slicc`?typeof t.version==`string`?{ok:!0}:{ok:!1,error:`export.producer.version must be a string`}:{ok:!1,error:`export.producer.application must equal "slicc"`}:{ok:!1,error:`export.producer must be a non-null object`}}function Xa(e){if(!P(e))return{ok:!1,error:`session.completeness must be a non-null object`};let t=Da(e.status,[`complete`,`partial`],`session.completeness.status`);return t.ok?Array.isArray(e.missing)?Oa(e.missing,Ja,`session.completeness.missing`):{ok:!1,error:`session.completeness.missing must be an array`}:t}function Za(e){if(!P(e))return{ok:!1,error:`session must be a non-null object`};if(typeof e.id!=`string`)return{ok:!1,error:`session.id must be a string`};if(typeof e.title!=`string`)return{ok:!1,error:`session.title must be a string`};let t=Da(e.state,[`active`,`frozen`],`session.state`);return t.ok?Xa(e.completeness):t}function Qa(e){if(!P(e))return{ok:!1,error:`privacy must be a non-null object`};if(e.reasoningExcluded!==!0)return{ok:!1,error:`privacy.reasoningExcluded must be true`};let t=e.excludedReasoningBlocks;if(typeof t!=`number`)return{ok:!1,error:`privacy.excludedReasoningBlocks must be a number`};if(!Number.isInteger(t)||t<0)return{ok:!1,error:`privacy.excludedReasoningBlocks must be a non-negative integer`};if(e.binaryAttachments!==`included-unchanged`)return{ok:!1,error:`privacy.binaryAttachments must equal "included-unchanged"`};if(!P(e.redactionCounts))return{ok:!1,error:`privacy.redactionCounts must be a non-null object`};let n=e.redactions;return Array.isArray(n)?Oa(n,Ka,`privacy.redactions`):{ok:!1,error:`privacy.redactions must be an array`}}function $a(e){let t=e.conversations;if(!Array.isArray(t))return{ok:!1,error:`conversations must be an array`};let n=Oa(t,Ra,`conversations`);if(!n.ok)return n;let r=e.delegations;if(!Array.isArray(r))return{ok:!1,error:`delegations must be an array`};let i=Oa(r,qa,`delegations`);if(!i.ok)return i;let a=e.attachments;return Array.isArray(a)?Oa(a,Wa,`attachments`):{ok:!1,error:`attachments must be an array`}}function eo(e){let t=new Set,n=new Set;for(let r of e){if(!P(r)||typeof r.id!=`string`)continue;if(t.has(r.id))return{ok:!1,error:`duplicate conversation id "${r.id}"`};t.add(r.id);let e=r.messages;if(Array.isArray(e)){for(let t of e)if(!(!P(t)||typeof t.id!=`string`)){if(n.has(t.id))return{ok:!1,error:`duplicate message id "${t.id}"`};n.add(t.id)}}}return{ok:!0}}function to(e){for(let t of e){if(!P(t))continue;let e=t.messages;if(!Array.isArray(e))continue;let n=typeof t.id==`string`?t.id:`?`,r=0;for(let t of e){if(!P(t)||typeof t.sequence!=`number`)continue;let e=t.sequence;if(e<=r)return{ok:!1,error:`sequences in conversation "${n}" must be strictly increasing`};r=e}}return{ok:!0}}function no(e){let t=[];for(let n of e){if(!P(n))continue;let e=n.content;if(Array.isArray(e))for(let n of e)P(n)&&n.type===`tool-call`&&typeof n.id==`string`&&t.push(n.id)}return t}function ro(e){let t=new Set;for(let n of e){if(!P(n))continue;let e=n.messages;if(Array.isArray(e))for(let n of no(e))t.add(n)}return t}function io(e,t){for(let n of e){if(!P(n))continue;let e=n.messages;if(Array.isArray(e))for(let n of e){if(!P(n)||n.role!==`tool-result`)continue;let e=n.toolCallId;if(typeof e==`string`&&e!==``&&!t.has(e))return{ok:!1,error:`tool-result message references unknown toolCallId "${e}"`}}}return{ok:!0}}function ao(e){return io(e,ro(e))}function oo(e,t){for(let n of e){if(!P(n)||n.type!==`attachment-ref`)continue;let e=n.attachmentId;if(typeof e!=`string`||!t.has(e))return{ok:!1,error:`attachment-ref references unknown attachmentId "${e}"`}}return{ok:!0}}function so(e,t){for(let n of e){if(!P(n))continue;let e=n.messages;if(Array.isArray(e))for(let n of e){if(!P(n))continue;let e=n.content;if(!Array.isArray(e))continue;let r=oo(e,t);if(!r.ok)return r}}return{ok:!0}}function co(e,t){let n=new Set;for(let e of t)P(e)&&typeof e.id==`string`&&n.add(e.id);return so(e,n)}function lo(e){let t=new Map;for(let n of e){if(!P(n)||typeof n.id!=`string`)continue;let e=new Set,r=n.messages;if(Array.isArray(r))for(let t of r)P(t)&&typeof t.id==`string`&&e.add(t.id);t.set(n.id,e)}return t}function uo(e,t){let n=lo(t);for(let t=0;t<e.length;t++){let r=e[t];if(!P(r))continue;let i=r.sourceConversationId,a=r.sourceMessageId;if(typeof i!=`string`||typeof a!=`string`)continue;let o=n.get(i);if(!o)return{ok:!1,error:`attachments[${t}].sourceConversationId "${i}" does not exist`};if(!o.has(a))return{ok:!1,error:`attachments[${t}].sourceMessageId "${a}" does not exist in conversation "${i}"`}}return{ok:!0}}function fo(e){let t=new Map;for(let n of e){if(!P(n)||typeof n.id!=`string`)continue;let e=Array.isArray(n.messages)?n.messages:[];t.set(n.id,new Set(no(e)))}return t}function po(e,t,n){for(let r=0;r<e.length;r++){let i=e[r];if(!P(i))continue;let a=i.sourceConversationId,o=i.targetConversationId;if(typeof a!=`string`||!t.has(a))return{ok:!1,error:`delegations[${r}].sourceConversationId "${a}" does not exist`};if(typeof o!=`string`||!t.has(o))return{ok:!1,error:`delegations[${r}].targetConversationId "${o}" does not exist`};let s=i.toolCallId;if(typeof s==`string`&&s!==``&&!n.get(a)?.has(s))return{ok:!1,error:`delegations[${r}].toolCallId "${s}" does not exist in source conversation "${a}"`}}return{ok:!0}}function mo(e,t){let n=new Set;for(let e of t)P(e)&&typeof e.id==`string`&&n.add(e.id);return po(e,n,fo(t))}function ho(e,t,n){if(e.kind!==`attachment`)return{ok:!0};let r=e.attachmentId;return typeof r!=`string`||!t.has(r)?{ok:!1,error:`${n}.attachmentId "${r}" does not reference a known attachment`}:{ok:!0}}function go(e,t){let n=new Set;for(let e of t)P(e)&&typeof e.id==`string`&&n.add(e.id);for(let t=0;t<e.length;t++){let r=e[t];if(!P(r))continue;let i=r.target;if(!P(i))continue;let a=ho(i,n,`privacy.redactions[${t}].target`);if(!a.ok)return a}return{ok:!0}}function _o(e){let t=e.conversations,n=e.attachments,r=e.delegations,i=e.privacy,a=Array.isArray(i?.redactions)?i.redactions:[],o=eo(t);if(!o.ok)return o;let s=to(t);if(!s.ok)return s;let c=ao(t);if(!c.ok)return c;let l=co(t,n);if(!l.ok)return l;let u=uo(n,t);if(!u.ok)return u;let d=mo(r,t);return d.ok?go(a,n):d}function vo(e){let t=$a(e);return t.ok?_o(e):t}function yo(e){if(!P(e))return{ok:!1,error:`document must be a non-null object`};if(e.schemaVersion!==1)return{ok:!1,error:`schemaVersion must equal 1`};let t=Ya(e.export);if(!t.ok)return t;let n=Za(e.session);if(!n.ok)return n;let r=Qa(e.privacy);return r.ok?vo(e):r}function bo(e){if(!e)return null;try{let t=new URL(e.trim());t.search=``,t.hash=``,t.pathname!==`/`&&(t.pathname=t.pathname.replace(/\/+$/,``)||`/`);let n=t.toString();return n.endsWith(`/`)?n.slice(0,-1):n}catch{return null}}function xo(e){if(!e)return null;try{let t=new URL(e.trim());t.search=``,t.hash=``;let n=t.toString(),r=t.pathname.split(`/`).filter(Boolean);if(r.length<2||r.at(-2)!==`join`)return null;let[i,a,...o]=decodeURIComponent(r.at(-1)).split(`.`);if(!i||!a||o.length>0)return null;r.splice(-2,2),t.pathname=r.length>0?`/${r.join(`/`)}`:`/`;let s=bo(t.toString());return s?{workerBaseUrl:s,trayId:i,joinUrl:n}:null}catch{return null}}async function So(e,t,n){let r=await n({method:`GET`,path:`/${e}/sites/${t}/config.json`,origin:Re});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()}let jo={state:`inactive`,joinUrl:null,trayId:null,error:null,lastPingTime:null,reconnectAttempts:0,attachAttempts:0,lastAttachCode:null,connectingSince:null,lastError:null};function Mo(){return{...jo}}function No(){let e=Mo();if(e.state!==`inactive`)return e;try{let e=globalThis.localStorage?.getItem(Je);if(e){let t=JSON.parse(e);if(t?.state&&t.state!==`inactive`)return t}}catch{}return e}const Po=new Set;function Fo(e){return Po.add(e),()=>{Po.delete(e)}}const Io=`slicc.trayWorkerBaseUrl`,Lo=`slicc.trayJoinUrl`;function Ro(e){if(!e)return null;try{let t=new URL(e.trim());t.search=``,t.hash=``;let n=t.pathname.split(`/`).filter(Boolean),r=null;if(n.length>=2&&n.at(-2)===`tray`)r=decodeURIComponent(n.at(-1)),n.splice(-2,2),t.pathname=n.length>0?`/${n.join(`/`)}`:`/`;else if(n.length>=2&&n.at(-2)===`join`)return xo(t.toString());let i=bo(t.toString());return i?{workerBaseUrl:i,trayId:r,joinUrl:null}:null}catch{return null}}function zo(e){let t=Ro(e);return t?.joinUrl?t:null}function Bo(e,t,n){return pt(t,n,`${e} adapter does not implement ${t}.${n}`)}function Vo(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(Bo(e,t,n))]});return{...Object.fromEntries(a),allowlist:i,supports:e=>i.includes(e)}}function Ho(e){let{adapter:t,pageGestures:n}=e,r=n??{};return{adapter:t,browser:Vo(t,`browser`,gt,e.browser),network:Vo(t,`network`,ft,e.network),secrets:Vo(t,`secrets`,_t,e.secrets),devices:Vo(t,`devices`,vt,{usbRequest:r.usbRequest,serialRequest:r.serialRequest,hidRequest:r.hidRequest,...e.devices}),mounts:Vo(t,`mounts`,mt,{pickDirectory:r.pickDirectory,...e.mounts}),approvals:Vo(t,`approvals`,yt,e.approvals)}}function Uo(e={}){return Ho({adapter:`connect`,pageGestures:e.pageGestures})}function Wo(e){let t=bt(()=>import(`./extension-ops-B0oi7ypc.js`).then(t=>t.createExtensionOps(e)));return Ho({adapter:e.adapter,pageGestures:e.pageGestures,network:{crossOriginFetch:e=>w(`network`,`crossOriginFetch`,async()=>(await t()).crossOriginFetch(e))},secrets:{listMaskedEnv:()=>w(`secrets`,`listMaskedEnv`,async()=>(await t()).secrets.listMaskedEnv()),getMasked:e=>w(`secrets`,`getMasked`,async()=>(await t()).secrets.getMasked(e)),set:e=>w(`secrets`,`set`,async()=>(await t()).secrets.set(e)),delete:e=>w(`secrets`,`delete`,async()=>(await t()).secrets.delete(e))},mounts:{signRequest:e=>w(`mounts`,`signRequest`,async()=>(await t()).signRequest(e))},approvals:{request:e=>w(`approvals`,`request`,async()=>(await t()).requestApproval(e))}})}function Go(e={}){let t=bt(()=>import(`./rest-ops-DNanZY2-.js`).then(t=>t.createRestOps(e)),e.controlTimeoutMs??1e4);return Ho({adapter:`node-rest`,pageGestures:e.pageGestures,network:{localNodeServer:()=>Promise.resolve({ok:!0,value:{available:!0}}),crossOriginFetch:e=>w(`network`,`crossOriginFetch`,async()=>(await t()).crossOriginFetch(e))},secrets:{listMaskedEnv:()=>w(`secrets`,`listMaskedEnv`,async()=>(await t()).secrets.listMaskedEnv()),getMasked:e=>w(`secrets`,`getMasked`,async()=>(await t()).secrets.getMasked(e)),set:e=>w(`secrets`,`set`,async()=>(await t()).secrets.set(e)),delete:e=>w(`secrets`,`delete`,async()=>(await t()).secrets.delete(e))},mounts:{signRequest:e=>w(`mounts`,`signRequest`,async()=>(await t()).signRequest(e))},approvals:{request:e=>w(`approvals`,`request`,async()=>(await t()).requestApproval(e))}})}function Ko(e,t={}){let{pageGestures:n}=t;switch(e){case`node-rest`:return Go({pageGestures:n});case`extension-direct`:case`extension-delegate`:return Wo({adapter:e,pageGestures:n});case`connect`:return Uo({pageGestures:n})}}const qo=e(`quick-llm`);async function Jo(e){let t=ee();if(!t)return qo.debug(`No API key for active provider — skipping`),null;let n=v(),r=_(),i;if(i=e.modelId?Qo(n,e.modelId)??Qo(n,r):Yo(n,r),!i)return qo.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`]=$o());try{let n=(await me(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 qo.debug(`Quick label call failed`,{error:e instanceof Error?e.message:String(e)}),null}}function Yo(e,t){let n=te(e);if(n.length===0)return;let r=n.find(e=>e.id===t)??n[0],i=Zo(r.id),a=n.filter(e=>Xo(e,r,i));return a.length===0?r:(a.sort((e,t)=>(e.cost?.input??0)-(t.cost?.input??0)),a[0])}function Xo(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 Zo(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 Qo(e,t){return te(e).find(e=>e.id===t)}function $o(){return St(`ui-quick-llm`)}const es=e(`sudo-suggest`),ts=[`You generalize a single shell command into a minimal glob pattern for an`,`allow-list rule. Output ONLY the pattern on one line — no prose, no quotes,`,`no backticks. Keep the leading command/sub-command verbatim and replace only`,`the volatile tail (args, paths, refs) with a single trailing "*".`,`Examples:`,` git push origin main -> git push*`,` rm -rf build/cache -> rm -rf*`,` npm install left-pad -> npm install*`].join(`
1
+ import{t as e}from"./logger-LESFN7Hj.js";import{a as t,i as n,n as r,r as i,t as a}from"./snapshot-BcYaw9Ip.js";import{n as o,r as s}from"./panel-rpc-BPwAqRch.js";import{t as c}from"./providers-T_FH_8cU.js";import{r as l,t as u}from"./base64-BPBW1Gzr.js";import{n as d}from"./bridge-protocol-31SWTdS5.js";import{a as f,n as p,o as m,s as h,t as g}from"./handoff-link-B3It6xQY.js";import{d as _,f as v,i as ee,u as te}from"./account-store-B05_LKnj.js";import{a as ne,l as re,n as ie,o as ae}from"./proxied-fetch-DARKNygr.js";import{t as oe}from"./runtime-env-DadgceZk.js";import{t as se}from"./slugify-BYJ6QVAt.js";import{r as ce}from"./binary-cache-bSOhqXB1.js";import{i as le,n as ue,r as de}from"./fetch-body-CuwTaJC_.js";import{o as fe,t as pe}from"./api-endpoint-3qEcn7BY.js";import{t as me}from"./compat-uEPf6-XW.js";import{a as he,i as ge,l as _e,o as ve,s as ye,u as be}from"./core-Bvc89tkf.js";import{n as xe,t as Se}from"./mime-types-D7IV6i7k.js";import{t as Ce}from"./secrets-bridge-client-BS3V1JBF.js";import{a as we,i as Te,n as y,t as b}from"./path-utils-DNJG-zQf.js";import{n as Ee,r as De,t as Oe}from"./merge-file-core-VJlzucJY.js";import{r as ke}from"./workspace-mode-D0kUKBVS.js";import{n as Ae,t as je}from"./thinking-level-5x0UAu9N.js";import{n as Me,t as Ne}from"./types-D8gIX-W-.js";import{i as Pe}from"./mount-index-CQfmUPuZ.js";import{a as Fe,i as Ie,n as Le,o as Re,s as ze,t as Be}from"./signed-fetch-7NwdVmf1.js";import{o as Ve}from"./mount-table-store-DrF_Ifaz.js";import{t as He}from"./remote-cache-BE5T1-53.js";import{n as Ue}from"./fs-Bq8bUwe2.js";import{c as We,i as Ge,n as Ke,r as qe,s as Je}from"./lick-urls-DdKPDlgq.js";import{n as Ye,t as Xe}from"./slicc-version-CN6V2aMa.js";import{a as Ze,i as Qe,o as $e,r as x,t as et}from"./browser-eoO4vY7w.js";import{t as S}from"./subcommand-flags-BZi7j78Q.js";import{n as tt,r as nt,t as C}from"./subcommand-help-CgO7wRS5.js";import{n as rt}from"./cost-command-BULzLcvz.js";import{d as it,g as at,i as ot,n as st,o as ct}from"./sudoers-BdBYQPUn.js";import{a as lt,i as ut,o as dt}from"./sudo-fs-D620mZry.js";import{a as ft,c as pt,i as mt,l as ht,n as gt,o as _t,r as vt,t as yt}from"./types-BfwydWt7.js";import{n as w,t as bt}from"./boundary-Cp9c_bPu.js";import"./rest-paths-Dia19u9P.js";import{t as xt}from"./html-B_Hg2WOy.js";import{n as St}from"./llm-session-id-BZyXP_j2.js";import{t as Ct}from"./buffer-polyfill-BccMjOKj.js";import{i as wt,r as Tt}from"./browser-2rCVqcqy.js";import{_ as Et,b as Dt,c as Ot,d as kt,f as At,g as jt,h as Mt,l as Nt,m as Pt,n as Ft,o as It,p as Lt,s as Rt,t as zt,u as Bt,v as Vt,x as Ht,y as Ut}from"./jsh-executor-C7QPZ2Qr.js";import{t as Wt}from"./buffer-B5d1xHaH.js";import{A as Gt,B as T,C as Kt,D as E,E as qt,F as Jt,G as Yt,H as D,I as O,J as Xt,K as Zt,L as Qt,M as $t,N as en,O as tn,P as nn,R as rn,S as an,T as on,U as sn,V as cn,W as ln,Y as un,_ as dn,a as fn,b as pn,c as mn,d as hn,f as gn,g as _n,h as vn,i as yn,j as bn,k as xn,l as Sn,m as Cn,n as wn,o as Tn,p as k,q as En,r as Dn,s as On,t as kn,u as An,v as jn,w as Mn,x as Nn,y as Pn,z as Fn}from"./isomorphic-git-D2fV6xS-.js";import"./global-db-DJXlpNui.js";import{S as In,_ as Ln,a as Rn,b as zn,c as Bn,d as Vn,f as Hn,g as Un,h as Wn,i as Gn,l as Kn,n as qn,o as Jn,p as Yn,r as Xn,s as Zn,t as Qn,u as $n,v as A,x as j,y as er}from"./state-BCTAzK_L.js";import{a as tr,i as nr,r as rr,t as ir}from"./git-config-Bdgu8kD2.js";import{i as ar,n as or,r as sr}from"./jsh-discovery-D3Gk1cKA.js";import{A as cr,C as lr,a as ur,b as dr,c as fr,d as pr,f as mr,h as hr,i as gr,j as _r,l as vr,m as yr,n as br,o as xr,p as Sr,r as Cr,s as wr,t as M,u as Tr,v as Er,y as Dr}from"./shared-C_68vn79.js";import{B as Or,F as kr,G as Ar,H as jr,J as Mr,K as Nr,L as Pr,N as Fr,P as Ir,U as Lr,V as Rr,W as zr,X as Br,Y as Vr,Z as Hr,q as Ur,z as Wr}from"./sync-sab-wire-CC30v4TL.js";import{n as Gr,t as Kr}from"./esbuild-wasm-DS_YG2EY.js";import{n as qr}from"./wasm-compiler-Ct7QZURL.js";import{a as Jr,o as Yr,s as Xr,t as Zr}from"./usb-device-registry-DFzxaOky.js";import{a as N,i as Qr,r as $r,t as ei}from"./just-bash-compat-B-SPHuh_.js";import{i as ti,r as ni,t as ri}from"./script-catalog-CgT8L-OG.js";import{a as ii,c as ai,o as oi,s as si,t as ci}from"./types-Dzr0qYl3.js";import{a as li,c as ui,d as di,f as fi,n as pi,r as mi,u as hi}from"./github-zip-Bs35nBig.js";import{i as gi,t as _i}from"./github-auth-CzzE1eDf.js";import{a as vi,i as yi,o as bi,r as xi,t as Si}from"./provenance-DdmsQ3Nr.js";import{a as Ci,c as wi,i as Ti,n as Ei,o as Di,r as Oi,s as ki}from"./github-install--_xp8s-S.js";import{n as Ai,t as ji}from"./magick-wasm-DCNZhAyd.js";import{i as Mi,n as Ni,r as Pi,t as Fi}from"./pdf-raster-BWk6ezTX.js";import{n as Ii}from"./lick-target-env-8JxfVcIV.js";import{t as Li}from"./tmpdir-env-ate4iNcK.js";import{a as Ri,c as zi,d as Bi,f as Vi,i as Hi,l as Ui,n as Wi,o as Gi,p as Ki,r as qi,s as Ji,t as Yi,u as Xi}from"./installer-C0xiAs69.js";import{t as Zi}from"./ffmpeg-wasm-B77gfnB_.js";import{t as Qi}from"./local-llm-DqeU7kV3.js";import{t as $i}from"./client-BDN4zG90.js";import{t as ea}from"./redirect-uri-Dd0j1fSp.js";import{a as ta,c as na,i as ra,n as ia,o as aa,r as oa,s as sa,t as ca}from"./v86-vm-DCm7zA2r.js";let la=null;function ua(e){la=e!==null&&Number.isFinite(e)&&e>0?e:null}function da(){if(la!==null)return la;let e=globalThis.performance?.timeOrigin;return typeof e==`number`&&Number.isFinite(e)&&e>0?e:Date.now()}new URL(d).hostname;const fa=/^([0-9a-f]{32})--(?:[0-9a-f]{8}-)?([0-9a-f]+)$/i;function pa(e){let t;try{t=new URL(e.includes(`://`)?e:`https://${e}`).hostname}catch{return null}let n=fa.exec(t.split(`.`)[0]??``);if(!n||!t.includes(`.`))return null;let r=n[1].toLowerCase();return`${[r.slice(0,8),r.slice(8,12),r.slice(12,16),r.slice(16,20),r.slice(20)].join(`-`)}.${n[2].toLowerCase()}`}[`ghp_`,`gho_`,`ghu_`,`ghs_`,`ghr_`,`github_pat_`,`sk-`,`pk-`,`xoxb-`,`xoxp-`,`xoxa-`,`xoxs-`,`AKIA`,`ABIA`,`ACCA`,`ASIA`,`sk-ant-`,`Bearer `].sort((e,t)=>t.length-e.length);function ma(e,t){let n=e.toLowerCase(),r=t.toLowerCase();if(n===`*`)return!0;if(!n.startsWith(`*.`))return n===r;let i=n.slice(1);return r.length>i.length&&r.endsWith(i)}function ha(e,t){return e.some(e=>ma(e,t))}const ga=`slicc-transcript`,_a=[`canonical-agent-history-unavailable`,`tool-data-may-be-truncated`,`model-metadata-unavailable`,`scoop-history-unavailable`,`attachment-file-missing`,`attachment-association-unavailable`,`complete-snapshot-unavailable`],va=new Set(`/export/format./export/producer/application./session/id./session/state./session/completeness/status./session/completeness/missing/*./conversations/*/id./conversations/*/kind./conversations/*/parentConversationId./conversations/*/messages/*/id./conversations/*/messages/*/role./conversations/*/messages/*/timestamp./conversations/*/messages/*/toolCallId./conversations/*/messages/*/content/*/type./conversations/*/messages/*/content/*/id./conversations/*/messages/*/content/*/name./conversations/*/messages/*/content/*/attachmentId./delegations/*/sourceConversationId./delegations/*/targetConversationId./delegations/*/toolCallId./attachments/*/id./attachments/*/path./attachments/*/sha256./attachments/*/sourceConversationId./attachments/*/sourceMessageId./attachments/*/handling./attachments/*/missingReason`.split(`.`));function ya(e){return va.has(e.replace(/\/\d+(?=\/|$)/g,`/*`))}var ba=class extends Error{code;detail;constructor(e,t){super(t?`${e}: ${t}`:e),this.code=e,this.detail=t,this.name=`TranscriptExportError`}};const xa=new Set(_a),Sa=/^[0-9a-fA-F]{64}$/,Ca=/^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}/;function P(e){return typeof e==`object`&&!!e&&!Array.isArray(e)}function wa(e){return typeof e==`string`&&Sa.test(e)}function Ta(e){return Ca.test(e)&&Number.isFinite(Date.parse(e))}function Ea(e,t){let n=t.map(e=>`"${e}"`),r=n[n.length-1];return n.length===2?`${e} must be ${n[0]} or ${r}`:`${e} must be ${n.slice(0,-1).join(`, `)}, or ${r}`}function Da(e,t,n){return typeof e!=`string`||!t.includes(e)?{ok:!1,error:Ea(n,t)}:{ok:!0}}function Oa(e,t,n){for(let r=0;r<e.length;r++){let i=t(e[r],`${n}[${r}]`);if(!i.ok)return i}return{ok:!0}}function ka(e,t){let n=e.type;if(n===`text`){if(typeof e.text!=`string`)return{ok:!1,error:`${t}.text must be a string`}}else if(n===`tool-call`){if(typeof e.id!=`string`||e.id===``)return{ok:!1,error:`${t}.id must be a non-empty string`};if(typeof e.name!=`string`||e.name===``)return{ok:!1,error:`${t}.name must be a non-empty string`};if(!(`input`in e))return{ok:!1,error:`${t}.input must be present`}}else if(typeof e.attachmentId!=`string`||e.attachmentId===``)return{ok:!1,error:`${t}.attachmentId must be a non-empty string`};return{ok:!0}}function Aa(e,t){if(!P(e))return{ok:!1,error:`${t} must be a non-null object`};let n=Da(e.type,[`text`,`tool-call`,`attachment-ref`],`${t}.type`);return n.ok?ka(e,t):n}function ja(e,t){for(let n of[`input`,`output`,`cacheRead`,`cacheWrite`,`totalTokens`]){let r=e[n];if(typeof r!=`number`)return{ok:!1,error:`${t}.${n} must be a number`};if(!Number.isInteger(r)||r<0)return{ok:!1,error:`${t}.${n} must be a non-negative integer`}}return{ok:!0}}function Ma(e,t){for(let n of[`input`,`output`,`cacheRead`,`cacheWrite`,`total`]){let r=e[n];if(typeof r!=`number`)return{ok:!1,error:`${t}.${n} must be a number`};if(!Number.isFinite(r)||r<0)return{ok:!1,error:`${t}.${n} must be a finite non-negative number`}}return{ok:!0}}function Na(e,t){let n=ja(e,t);if(!n.ok)return n;let r=e.cost;return P(r)?Ma(r,`${t}.cost`):{ok:!1,error:`${t}.cost must be a non-null object`}}function Pa(e,t){if(typeof e.id!=`string`)return{ok:!1,error:`${t}.id must be a string`};if(typeof e.sequence!=`number`)return{ok:!1,error:`${t}.sequence must be a number`};let n=e.sequence;return!Number.isInteger(n)||n<1?{ok:!1,error:`${t}.sequence must be a positive integer`}:typeof e.timestamp==`string`?Ta(e.timestamp)?{ok:!0}:{ok:!1,error:`${t}.timestamp must be a valid ISO 8601 date-time string`}:{ok:!1,error:`${t}.timestamp must be a string`}}function Fa(e,t){let n=e.toolCallId;return typeof n!=`string`||n===``?{ok:!1,error:`${t}.toolCallId must be a non-empty string for tool-result messages`}:{ok:!0}}function Ia(e,t){let n=e.usage;return n===void 0?{ok:!0}:P(n)?Na(n,`${t}.usage`):{ok:!1,error:`${t}.usage must be a non-null object`}}function La(e,t){if(!P(e))return{ok:!1,error:`${t} must be a non-null object`};let n=Da(e.role,[`user`,`assistant`,`tool-result`],`${t}.role`);if(!n.ok)return n;if(e.role===`tool-result`){let n=Fa(e,t);if(!n.ok)return n}let r=Pa(e,t);if(!r.ok)return r;let i=e.content;if(!Array.isArray(i))return{ok:!1,error:`${t}.content must be an array`};let a=Oa(i,Aa,`${t}.content`);return a.ok?Ia(e,t):a}function Ra(e,t){if(!P(e))return{ok:!1,error:`${t} must be a non-null object`};if(typeof e.id!=`string`)return{ok:!1,error:`${t}.id must be a string`};if(typeof e.name!=`string`)return{ok:!1,error:`${t}.name must be a string`};let n=Da(e.kind,[`cone`,`scoop`],`${t}.kind`);if(!n.ok)return n;let r=e.messages;return Array.isArray(r)?Oa(r,La,`${t}.messages`):{ok:!1,error:`${t}.messages must be an array`}}function za(e,t){for(let n of[`id`,`path`,`originalName`,`mimeType`,`sha256`,`sourceConversationId`,`sourceMessageId`])if(typeof e[n]!=`string`)return{ok:!1,error:`${t}.${n} must be a string`};return{ok:!0}}function Ba(e,t){let n=e.path,r=e.sha256,i=e.byteLength;return n===``?{ok:!1,error:`${t}.path must be non-empty when present`}:wa(r)?!Number.isInteger(i)||i<0?{ok:!1,error:`${t}.byteLength must be a non-negative integer when present`}:e.missingReason===void 0?{ok:!0}:{ok:!1,error:`${t}.missingReason must be absent when present is true`}:{ok:!1,error:`${t}.sha256 must be a 64-char hex string when present`}}const Va=[`attachment-file-missing`,`attachment-association-unavailable`];function Ha(e,t){let n=e.path,r=e.sha256,i=e.byteLength;return n===``?r===``?i===0?Da(e.missingReason,Va,`${t}.missingReason`):{ok:!1,error:`${t}.byteLength must be zero when not present`}:{ok:!1,error:`${t}.sha256 must be empty when not present`}:{ok:!1,error:`${t}.path must be empty when not present`}}function Ua(e,t){return e.present?Ba(e,t):Ha(e,t)}function Wa(e,t){if(!P(e))return{ok:!1,error:`${t} must be a non-null object`};let n=za(e,t);if(!n.ok)return n;if(typeof e.byteLength!=`number`)return{ok:!1,error:`${t}.byteLength must be a number`};if(typeof e.present!=`boolean`)return{ok:!1,error:`${t}.present must be a boolean`};let r=Da(e.handling,[`text-redacted`,`binary-unchanged`],`${t}.handling`);return r.ok?Ua(e,t):r}function Ga(e,t){let n=Da(e.kind,[`json`,`attachment`],`${t}.kind`);if(!n.ok)return n;if(e.kind===`json`){if(typeof e.pointer!=`string`)return{ok:!1,error:`${t}.pointer must be a string`};let n=e.pointer;if(n!==``&&!n.startsWith(`/`))return{ok:!1,error:`${t}.pointer must be a valid RFC 6901 JSON pointer`}}else if(typeof e.attachmentId!=`string`||e.attachmentId===``)return{ok:!1,error:`${t}.attachmentId must be a non-empty string`};return{ok:!0}}function Ka(e,t){if(!P(e))return{ok:!1,error:`${t} must be a non-null object`};if(typeof e.id!=`string`)return{ok:!1,error:`${t}.id must be a string`};if(typeof e.category!=`string`)return{ok:!1,error:`${t}.category must be a string`};let n=Da(e.detector,[`known-secret`,`credential-pattern`,`pre-obfuscated`],`${t}.detector`);if(!n.ok)return n;let r=e.target;return P(r)?Ga(r,`${t}.target`):{ok:!1,error:`${t}.target must be a non-null object`}}function qa(e,t){return P(e)?typeof e.sourceConversationId==`string`?typeof e.targetConversationId==`string`?{ok:!0}:{ok:!1,error:`${t}.targetConversationId must be a string`}:{ok:!1,error:`${t}.sourceConversationId must be a string`}:{ok:!1,error:`${t} must be a non-null object`}}function Ja(e,t){return typeof e!=`string`||!xa.has(e)?{ok:!1,error:`${t} is not a valid completeness reason`}:{ok:!0}}function Ya(e){if(!P(e))return{ok:!1,error:`export must be a non-null object`};if(typeof e.id!=`string`)return{ok:!1,error:`export.id must be a string`};if(typeof e.generatedAt!=`string`)return{ok:!1,error:`export.generatedAt must be a string`};if(e.format!==`slicc-transcript`)return{ok:!1,error:`export.format must equal "slicc-transcript"`};let t=e.producer;return P(t)?t.application===`slicc`?typeof t.version==`string`?{ok:!0}:{ok:!1,error:`export.producer.version must be a string`}:{ok:!1,error:`export.producer.application must equal "slicc"`}:{ok:!1,error:`export.producer must be a non-null object`}}function Xa(e){if(!P(e))return{ok:!1,error:`session.completeness must be a non-null object`};let t=Da(e.status,[`complete`,`partial`],`session.completeness.status`);return t.ok?Array.isArray(e.missing)?Oa(e.missing,Ja,`session.completeness.missing`):{ok:!1,error:`session.completeness.missing must be an array`}:t}function Za(e){if(!P(e))return{ok:!1,error:`session must be a non-null object`};if(typeof e.id!=`string`)return{ok:!1,error:`session.id must be a string`};if(typeof e.title!=`string`)return{ok:!1,error:`session.title must be a string`};let t=Da(e.state,[`active`,`frozen`],`session.state`);return t.ok?Xa(e.completeness):t}function Qa(e){if(!P(e))return{ok:!1,error:`privacy must be a non-null object`};if(e.reasoningExcluded!==!0)return{ok:!1,error:`privacy.reasoningExcluded must be true`};let t=e.excludedReasoningBlocks;if(typeof t!=`number`)return{ok:!1,error:`privacy.excludedReasoningBlocks must be a number`};if(!Number.isInteger(t)||t<0)return{ok:!1,error:`privacy.excludedReasoningBlocks must be a non-negative integer`};if(e.binaryAttachments!==`included-unchanged`)return{ok:!1,error:`privacy.binaryAttachments must equal "included-unchanged"`};if(!P(e.redactionCounts))return{ok:!1,error:`privacy.redactionCounts must be a non-null object`};let n=e.redactions;return Array.isArray(n)?Oa(n,Ka,`privacy.redactions`):{ok:!1,error:`privacy.redactions must be an array`}}function $a(e){let t=e.conversations;if(!Array.isArray(t))return{ok:!1,error:`conversations must be an array`};let n=Oa(t,Ra,`conversations`);if(!n.ok)return n;let r=e.delegations;if(!Array.isArray(r))return{ok:!1,error:`delegations must be an array`};let i=Oa(r,qa,`delegations`);if(!i.ok)return i;let a=e.attachments;return Array.isArray(a)?Oa(a,Wa,`attachments`):{ok:!1,error:`attachments must be an array`}}function eo(e){let t=new Set,n=new Set;for(let r of e){if(!P(r)||typeof r.id!=`string`)continue;if(t.has(r.id))return{ok:!1,error:`duplicate conversation id "${r.id}"`};t.add(r.id);let e=r.messages;if(Array.isArray(e)){for(let t of e)if(!(!P(t)||typeof t.id!=`string`)){if(n.has(t.id))return{ok:!1,error:`duplicate message id "${t.id}"`};n.add(t.id)}}}return{ok:!0}}function to(e){for(let t of e){if(!P(t))continue;let e=t.messages;if(!Array.isArray(e))continue;let n=typeof t.id==`string`?t.id:`?`,r=0;for(let t of e){if(!P(t)||typeof t.sequence!=`number`)continue;let e=t.sequence;if(e<=r)return{ok:!1,error:`sequences in conversation "${n}" must be strictly increasing`};r=e}}return{ok:!0}}function no(e){let t=[];for(let n of e){if(!P(n))continue;let e=n.content;if(Array.isArray(e))for(let n of e)P(n)&&n.type===`tool-call`&&typeof n.id==`string`&&t.push(n.id)}return t}function ro(e){let t=new Set;for(let n of e){if(!P(n))continue;let e=n.messages;if(Array.isArray(e))for(let n of no(e))t.add(n)}return t}function io(e,t){for(let n of e){if(!P(n))continue;let e=n.messages;if(Array.isArray(e))for(let n of e){if(!P(n)||n.role!==`tool-result`)continue;let e=n.toolCallId;if(typeof e==`string`&&e!==``&&!t.has(e))return{ok:!1,error:`tool-result message references unknown toolCallId "${e}"`}}}return{ok:!0}}function ao(e){return io(e,ro(e))}function oo(e,t){for(let n of e){if(!P(n)||n.type!==`attachment-ref`)continue;let e=n.attachmentId;if(typeof e!=`string`||!t.has(e))return{ok:!1,error:`attachment-ref references unknown attachmentId "${e}"`}}return{ok:!0}}function so(e,t){for(let n of e){if(!P(n))continue;let e=n.messages;if(Array.isArray(e))for(let n of e){if(!P(n))continue;let e=n.content;if(!Array.isArray(e))continue;let r=oo(e,t);if(!r.ok)return r}}return{ok:!0}}function co(e,t){let n=new Set;for(let e of t)P(e)&&typeof e.id==`string`&&n.add(e.id);return so(e,n)}function lo(e){let t=new Map;for(let n of e){if(!P(n)||typeof n.id!=`string`)continue;let e=new Set,r=n.messages;if(Array.isArray(r))for(let t of r)P(t)&&typeof t.id==`string`&&e.add(t.id);t.set(n.id,e)}return t}function uo(e,t){let n=lo(t);for(let t=0;t<e.length;t++){let r=e[t];if(!P(r))continue;let i=r.sourceConversationId,a=r.sourceMessageId;if(typeof i!=`string`||typeof a!=`string`)continue;let o=n.get(i);if(!o)return{ok:!1,error:`attachments[${t}].sourceConversationId "${i}" does not exist`};if(!o.has(a))return{ok:!1,error:`attachments[${t}].sourceMessageId "${a}" does not exist in conversation "${i}"`}}return{ok:!0}}function fo(e){let t=new Map;for(let n of e){if(!P(n)||typeof n.id!=`string`)continue;let e=Array.isArray(n.messages)?n.messages:[];t.set(n.id,new Set(no(e)))}return t}function po(e,t,n){for(let r=0;r<e.length;r++){let i=e[r];if(!P(i))continue;let a=i.sourceConversationId,o=i.targetConversationId;if(typeof a!=`string`||!t.has(a))return{ok:!1,error:`delegations[${r}].sourceConversationId "${a}" does not exist`};if(typeof o!=`string`||!t.has(o))return{ok:!1,error:`delegations[${r}].targetConversationId "${o}" does not exist`};let s=i.toolCallId;if(typeof s==`string`&&s!==``&&!n.get(a)?.has(s))return{ok:!1,error:`delegations[${r}].toolCallId "${s}" does not exist in source conversation "${a}"`}}return{ok:!0}}function mo(e,t){let n=new Set;for(let e of t)P(e)&&typeof e.id==`string`&&n.add(e.id);return po(e,n,fo(t))}function ho(e,t,n){if(e.kind!==`attachment`)return{ok:!0};let r=e.attachmentId;return typeof r!=`string`||!t.has(r)?{ok:!1,error:`${n}.attachmentId "${r}" does not reference a known attachment`}:{ok:!0}}function go(e,t){let n=new Set;for(let e of t)P(e)&&typeof e.id==`string`&&n.add(e.id);for(let t=0;t<e.length;t++){let r=e[t];if(!P(r))continue;let i=r.target;if(!P(i))continue;let a=ho(i,n,`privacy.redactions[${t}].target`);if(!a.ok)return a}return{ok:!0}}function _o(e){let t=e.conversations,n=e.attachments,r=e.delegations,i=e.privacy,a=Array.isArray(i?.redactions)?i.redactions:[],o=eo(t);if(!o.ok)return o;let s=to(t);if(!s.ok)return s;let c=ao(t);if(!c.ok)return c;let l=co(t,n);if(!l.ok)return l;let u=uo(n,t);if(!u.ok)return u;let d=mo(r,t);return d.ok?go(a,n):d}function vo(e){let t=$a(e);return t.ok?_o(e):t}function yo(e){if(!P(e))return{ok:!1,error:`document must be a non-null object`};if(e.schemaVersion!==1)return{ok:!1,error:`schemaVersion must equal 1`};let t=Ya(e.export);if(!t.ok)return t;let n=Za(e.session);if(!n.ok)return n;let r=Qa(e.privacy);return r.ok?vo(e):r}function bo(e){if(!e)return null;try{let t=new URL(e.trim());t.search=``,t.hash=``,t.pathname!==`/`&&(t.pathname=t.pathname.replace(/\/+$/,``)||`/`);let n=t.toString();return n.endsWith(`/`)?n.slice(0,-1):n}catch{return null}}function xo(e){if(!e)return null;try{let t=new URL(e.trim());t.search=``,t.hash=``;let n=t.toString(),r=t.pathname.split(`/`).filter(Boolean);if(r.length<2||r.at(-2)!==`join`)return null;let[i,a,...o]=decodeURIComponent(r.at(-1)).split(`.`);if(!i||!a||o.length>0)return null;r.splice(-2,2),t.pathname=r.length>0?`/${r.join(`/`)}`:`/`;let s=bo(t.toString());return s?{workerBaseUrl:s,trayId:i,joinUrl:n}:null}catch{return null}}async function So(e,t,n){let r=await n({method:`GET`,path:`/${e}/sites/${t}/config.json`,origin:Re});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()}let jo={state:`inactive`,joinUrl:null,trayId:null,error:null,lastPingTime:null,reconnectAttempts:0,attachAttempts:0,lastAttachCode:null,connectingSince:null,lastError:null};function Mo(){return{...jo}}function No(){let e=Mo();if(e.state!==`inactive`)return e;try{let e=globalThis.localStorage?.getItem(Je);if(e){let t=JSON.parse(e);if(t?.state&&t.state!==`inactive`)return t}}catch{}return e}const Po=new Set;function Fo(e){return Po.add(e),()=>{Po.delete(e)}}const Io=`slicc.trayWorkerBaseUrl`,Lo=`slicc.trayJoinUrl`;function Ro(e){if(!e)return null;try{let t=new URL(e.trim());t.search=``,t.hash=``;let n=t.pathname.split(`/`).filter(Boolean),r=null;if(n.length>=2&&n.at(-2)===`tray`)r=decodeURIComponent(n.at(-1)),n.splice(-2,2),t.pathname=n.length>0?`/${n.join(`/`)}`:`/`;else if(n.length>=2&&n.at(-2)===`join`)return xo(t.toString());let i=bo(t.toString());return i?{workerBaseUrl:i,trayId:r,joinUrl:null}:null}catch{return null}}function zo(e){let t=Ro(e);return t?.joinUrl?t:null}function Bo(e,t,n){return pt(t,n,`${e} adapter does not implement ${t}.${n}`)}function Vo(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(Bo(e,t,n))]});return{...Object.fromEntries(a),allowlist:i,supports:e=>i.includes(e)}}function Ho(e){let{adapter:t,pageGestures:n}=e,r=n??{};return{adapter:t,browser:Vo(t,`browser`,gt,e.browser),network:Vo(t,`network`,ft,e.network),secrets:Vo(t,`secrets`,_t,e.secrets),devices:Vo(t,`devices`,vt,{usbRequest:r.usbRequest,serialRequest:r.serialRequest,hidRequest:r.hidRequest,...e.devices}),mounts:Vo(t,`mounts`,mt,{pickDirectory:r.pickDirectory,...e.mounts}),approvals:Vo(t,`approvals`,yt,e.approvals)}}function Uo(e={}){return Ho({adapter:`connect`,pageGestures:e.pageGestures})}function Wo(e){let t=bt(()=>import(`./extension-ops-DNPAsYbK.js`).then(t=>t.createExtensionOps(e)));return Ho({adapter:e.adapter,pageGestures:e.pageGestures,network:{crossOriginFetch:e=>w(`network`,`crossOriginFetch`,async()=>(await t()).crossOriginFetch(e))},secrets:{listMaskedEnv:()=>w(`secrets`,`listMaskedEnv`,async()=>(await t()).secrets.listMaskedEnv()),getMasked:e=>w(`secrets`,`getMasked`,async()=>(await t()).secrets.getMasked(e)),set:e=>w(`secrets`,`set`,async()=>(await t()).secrets.set(e)),delete:e=>w(`secrets`,`delete`,async()=>(await t()).secrets.delete(e))},mounts:{signRequest:e=>w(`mounts`,`signRequest`,async()=>(await t()).signRequest(e))},approvals:{request:e=>w(`approvals`,`request`,async()=>(await t()).requestApproval(e))}})}function Go(e={}){let t=bt(()=>import(`./rest-ops-DkUeDpiM.js`).then(t=>t.createRestOps(e)),e.controlTimeoutMs??1e4);return Ho({adapter:`node-rest`,pageGestures:e.pageGestures,network:{localNodeServer:()=>Promise.resolve({ok:!0,value:{available:!0}}),crossOriginFetch:e=>w(`network`,`crossOriginFetch`,async()=>(await t()).crossOriginFetch(e))},secrets:{listMaskedEnv:()=>w(`secrets`,`listMaskedEnv`,async()=>(await t()).secrets.listMaskedEnv()),getMasked:e=>w(`secrets`,`getMasked`,async()=>(await t()).secrets.getMasked(e)),set:e=>w(`secrets`,`set`,async()=>(await t()).secrets.set(e)),delete:e=>w(`secrets`,`delete`,async()=>(await t()).secrets.delete(e))},mounts:{signRequest:e=>w(`mounts`,`signRequest`,async()=>(await t()).signRequest(e))},approvals:{request:e=>w(`approvals`,`request`,async()=>(await t()).requestApproval(e))}})}function Ko(e,t={}){let{pageGestures:n}=t;switch(e){case`node-rest`:return Go({pageGestures:n});case`extension-direct`:case`extension-delegate`:return Wo({adapter:e,pageGestures:n});case`connect`:return Uo({pageGestures:n})}}const qo=e(`quick-llm`);async function Jo(e){let t=ee();if(!t)return qo.debug(`No API key for active provider — skipping`),null;let n=v(),r=_(),i;if(i=e.modelId?Qo(n,e.modelId)??Qo(n,r):Yo(n,r),!i)return qo.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`]=$o());try{let n=(await me(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 qo.debug(`Quick label call failed`,{error:e instanceof Error?e.message:String(e)}),null}}function Yo(e,t){let n=te(e);if(n.length===0)return;let r=n.find(e=>e.id===t)??n[0],i=Zo(r.id),a=n.filter(e=>Xo(e,r,i));return a.length===0?r:(a.sort((e,t)=>(e.cost?.input??0)-(t.cost?.input??0)),a[0])}function Xo(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 Zo(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 Qo(e,t){return te(e).find(e=>e.id===t)}function $o(){return St(`ui-quick-llm`)}const es=e(`sudo-suggest`),ts=[`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
  `),ns=[`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 rs(e,t){if(e.suggestedPattern&&e.suggestedPattern.trim().length>0)return e.suggestedPattern.trim();let n=e.detail.trim(),r=e.kind===`command`?ts:ns,i=null;try{i=await Jo({prompt:n,system:r,maxTokens:40,temperature:0,signal:t})}catch(e){es.debug(`suggestPattern: quickLabel threw`,{error:e instanceof Error?e.message:String(e)}),i=null}return is(i)||n}function is(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 as=e(`sudo:capability-gesture`);function os(e,t={}){let n=t.suggest??rs;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 as.warn(`sudo approval aborted before prompting — denying`,{detail:t.detail}),{decision:`deny`};if(!e)return as.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?ht(o.value,a):(as.warn(`capability broker approvals.request failed — denying`,{message:o.message}),{decision:`deny`})}}}const ss=e(`sudo:tray-first`);function cs(e,t={}){let n=t.suggest??rs,r=t.timeoutMs??6e5,i=t.getClient??(async()=>{let{getPanelRpcClient:e}=await import(`./panel-rpc-BPwAqRch.js`).then(e=>e.i);return e()});return{async requestApproval(t,a){if(a?.signal?.aborted)return{decision:`deny`};let o=t.suggestedPattern;if(!o)try{o=await n(t,a?.signal)}catch{o=t.detail}let s={...t,suggestedPattern:o},c=null;try{c=await i()}catch(e){ss.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 ls(e?.decision,o)}catch(e){ss.warn(`tray-first sudo probe failed — using native broker`,{error:e instanceof Error?e.message:String(e)})}return e.requestApproval(s,a)}}}function ls(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 us(e,t){return{requestApproval(n){return t.enqueueSudoRequest(e,n)}}}function ds(){return`lick-${Date.now()}-${Math.random().toString(36).slice(2,10)}`}var fs=class{pending=new Map;timeoutMs;newId;setTimer;clearTimer;onAutoSettle;constructor(e={}){this.timeoutMs=e.timeoutMs??3e5,this.newId=e.newId??ds,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(lt(`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 ps(e){return dt(ms(e))}function ms(e){let t=os(e);return e?.adapter===`extension-direct`||e?.adapter===`extension-delegate`?t:cs(t)}let hs=null;function gs(e){return hs=e,()=>{hs===e&&(hs=null)}}function _s(){if(!hs)throw new ba(`session-not-found`);return hs}const vs=`focus`,ys={type:`leaf`,surfaceId:`chat`};function bs(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 xs={focus:{name:`focus`,tree:bs({left:ys},{left:3,middle:1})}};function Ss(e){return xs[e]??null}const Cs=`progress`;function ws(e){return/^[A-Za-z_][A-Za-z0-9_]*$/.test(e)}const Ts=e(`mount-picker-popup`),Es=6e4;function Ds(e){let t=e??`mount-${Date.now().toString(36)}`;return new Promise(e=>{let n=!1,r=t=>{n||(n=!0,clearTimeout(i),e(t))},i=setTimeout(()=>r({cancelled:!0}),Es);Ht(`directory`,[],t,{timeoutMs:Es}).then(e=>{let n=e;if(n.error){Ts.error(`picker popup launch failed for directory kind`,{requestId:t,error:n.error}),r({error:`Failed to open directory picker window`});return}r(n)}).catch(e=>{Ts.error(`picker popup launch threw for directory kind`,{requestId:t,error:e instanceof Error?e.message:String(e),name:e instanceof Error?e.name:void 0}),r({error:`Failed to open directory picker window`})})})}async function Os(e){let t=await new Promise((e,t)=>{let n=indexedDB.open(`slicc-pending-mount`,1);n.onupgradeneeded=()=>{n.result.objectStoreNames.contains(`handles`)||n.result.createObjectStore(`handles`)},n.onsuccess=()=>e(n.result),n.onerror=()=>t(n.error)}),n=t.transaction(`handles`,`readwrite`),r=n.objectStore(`handles`),i=r.get(e),a=r.delete(e);a.onerror=()=>{Ts.warn(`Failed to delete pending handle from IDB`,{idbKey:e,error:a.error})};let o=await new Promise((e,t)=>{n.oncomplete=()=>e(i.result??null),i.onerror=()=>t(i.error??Error(`IDB get failed`)),n.onerror=()=>t(n.error??Error(`IDB transaction failed`)),n.onabort=()=>t(n.error??Error(`IDB transaction aborted`))});return t.close(),o}async function ks(e){let t=e;if(t.requestPermission){let n=await t.requestPermission({mode:`readwrite`});if(n!==`granted`)throw Error(`Permission denied for "${e.name}" (${n})`)}}async function As(){try{let e=await Ds();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 Os(e.idbKey);if(!t)throw Error(`mount: no directory handle found in storage`);return await ks(t),t}throw Error(`mount: unexpected popup result`)}catch(e){throw Error(`mount: ${e instanceof Error?e.message:String(e)}`)}}async function js(){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 Ms(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 Ns(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 Ps=new Set([`--source`,`--profile`,`--backend`,`--max-body-mb`]);function Fs(e){for(let t=0;t<e.length;t++){let n=e[t];if(n===`--`)return!1;if(n===`--help`||n===`-h`)return!0;Ps.has(n)&&t++}return!1}function Is(e){return`aem://${e.org}/${e.name}${e.path?`/${e.path}`:``}`}var Ls=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=Ms(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=ye();if(!n){let n=await Rs(e);if(n)return await this.options.fs.mount(e,n,{env:t}),{stdout:`Mounted '${n.describe().displayName}' → ${e}\nIndexing in background for fast file discovery.\nNote: External changes are not auto-detected — use 'mount refresh ${e}' after modifying files outside the browser.\n`,stderr:``,exitCode:0}}let r;if(n){let t=this.options.acquireLocalMountViaToolUI;if(!t)throw Error(`mount: tool UI not available in this runtime`);r=await t(n,e)}else r=oe()?await As():await js();let i=Pe.fromHandle(r,{mountId:Ve()});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=Ve(),i=new He({mountId:r,ttlMs:3e4}),a=new Ie({source:t.source,profile:n,cache:i,maxBodyBytes:t.maxBodyMb?t.maxBodyMb*1024*1024:void 0,mountId:r,signedFetch:this.signedFetchS3??Le(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??Be(),i=Ns(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=Ve(),c=new He({mountId:s,ttlMs:3e4}),l={source:a===`aem`?Is(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 ze(l):new Fe(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(Fs(e))return n===`umount`?this.umountHelp():this.help();let r=Ms(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
@@ -275,7 +275,7 @@ Examples:
275
275
  skill list
276
276
  skill info bluebubbles
277
277
  skill read bluebubbles
278
- `,stderr:``,exitCode:0};let r=t[0],i=await import(`./kernel-worker-Dseu067f.js`).then(e=>e.s);try{switch(r){case`list`:return th(t,e,i);case`info`:{let n=t[1];if(!n)return{stdout:``,stderr:`skill: info requires a skill name
278
+ `,stderr:``,exitCode:0};let r=t[0],i=await import(`./kernel-worker-4aPSVJ1C.js`).then(e=>e.s);try{switch(r){case`list`:return th(t,e,i);case`info`:{let n=t[1];if(!n)return{stdout:``,stderr:`skill: info requires a skill name
279
279
  `,exitCode:1};let r=await i.getSkillInfo(e,n);return r?{stdout:$m(r),stderr:``,exitCode:0}:{stdout:``,stderr:`skill: "${n}" not found\n`,exitCode:1}}case`read`:{let n=t[1];if(!n)return{stdout:``,stderr:`skill: read requires a skill name
280
280
  `,exitCode:1};let r=await i.readSkillInstructions(e,n);return r===null?{stdout:``,stderr:`skill: no SKILL.md found for "${n}"\n`,exitCode:1}:{stdout:r+`
281
281
  `,stderr:``,exitCode:0}}default:return{stdout:``,stderr:`skill: unknown command "${r}"\n`,exitCode:1}}}catch(e){return{stdout:``,stderr:`skill: ${e instanceof Error?e.message:String(e)}\n`,exitCode:1}}})}const rh=[{names:[`--branch`,`-b`],validate:e=>!e.startsWith(`-`)&&f(e),error:`upskill: --branch must be a git ref of [A-Za-z0-9._/-]+ with no "..", leading "-"/"/", trailing "/" or ".lock", or shell metacharacters`,apply:(e,t)=>{e.branch=t}},{names:[`--from`],validate:e=>Ti(e)!==null,error:`upskill: --from requires a GitHub source (owner/repo, owner/repo@branch, or a github.com URL)`,apply:(e,t)=>{e.from=t}},{names:[`--path`,`-p`],validate:e=>m(e),error:`upskill: --path must be a repo-relative sub-path of [A-Za-z0-9._/-]+ with no "..", leading "-"/"/", or shell metacharacters`,apply:(e,t)=>{e.path=t}}];function ih(e){let t={skills:[],dryRun:!1,json:!1};for(let n=0;n<e.length;n++){let r=e[n],i=rh.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 ah(e,t){return!e||!t||e.byteLength!==t.byteLength?!1:e.every((e,n)=>e===t[n])}async function oh(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 sh(e,t,n,r){let i=await oh(e,t);return di(n)?i?{status:`kept-local`,write:!1}:{status:`added`,write:!0}:i?ah(i,r)?{status:`unchanged`,write:!1}:{status:`updated`,write:!0}:{status:`added`,write:!0}}async function ch(e,t,n,r){let i={changes:[],writes:[],removals:[]};for(let[r,a]of n){let n=`${t}/${r}`,{status:o,write:s}=await sh(e,n,r,a);i.changes.push({path:r,status:o}),s&&i.writes.push({path:n,content:a})}let a=new Set(r.files??[]);for(let r of await fi(e,t)){if(n.has(r))continue;let e=a.has(r);i.changes.push({path:r,status:e?`removed`:`kept-local`}),e&&i.removals.push(`${t}/${r}`)}return i.changes.sort((e,t)=>e.path.localeCompare(t.path)),i}async function lh(e,t,n,r,i,a){let o={skill:n,source:`${r.kind}:${r.source}`,ref:i??r.ref,from:r.sha,outcome:`current`,changes:[]},[s,c]=r.source.split(`/`);if(!s||!c)return{...o,outcome:`error`,error:`unusable source "${r.source}"`};let l=(r.path??``).replace(/^\/|\/$/g,``),u=await _i(t),d=await yi(s,c,o.ref,u,!0,l||void 0);if(d&&r.sha===d&&await uh(e,n,r))return{...o,to:d,outcome:`current`,changes:[]};let f=await dh(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 ch(e,`${ii}/${n}`,p,r),v=g.length>0||_.length>0;if(a)return{...o,outcome:v?`updated`:`current`,changes:h};let ee=d??r.sha;return v&&await gh(e,{changes:h,writes:g,removals:_}),await bi(e,n,{...r,ref:o.ref,path:m,sha:ee,files:[...p.keys()].sort()}),{...o,to:ee,outcome:v?`updated`:`current`,changes:h}}async function uh(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 dh(e,t,n,r,i,a,o){let s=await mi(e,t,a,i??`main`);if(s.status===`ok`){let i=li(s.files),a=n||fh(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:hh(i,a),path:a}}try{return{files:mh(ph(await pi(e,t,n,i,o))),path:n}}catch(e){let t=e instanceof Error?e.message:String(e);return{error:`${s.message}; Contents API fallback failed: ${t}`}}}function fh(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 ph(e){return new Map([...e].filter(([e])=>ui(e)))}function mh(e){return new Map([...e].sort(([e],[t])=>e.localeCompare(t)))}function hh(e,t){let n=t?`${t}/`:``,r=new Map;for(let[t,i]of Object.entries(e)){if(!t.startsWith(n)||t.endsWith(`/`))continue;let e=t.slice(n.length);ui(e)&&r.set(e,i)}return mh(r)}async function gh(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 _h(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 Jm(o,s,t);if(!c.ok)return{...a,outcome:`error`,error:c.error};let l=`${ii}/${n}/SKILL.md`,u=await oh(e,l),d=new TextEncoder().encode(c.content),f=u!==void 0&&Km(new TextDecoder().decode(u))===Km(c.content);if(ah(u,d)||f)return{...a,changes:[{path:`SKILL.md`,status:`unchanged`}]};let p=u?`updated`:`added`;return i||(await e.mkdir(`${ii}/${n}`,{recursive:!0}),await e.writeFile(l,d),await bi(e,n,{...r,files:[`SKILL.md`]})),{...a,outcome:`updated`,changes:[{path:`SKILL.md`,status:p}]}}function vh(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 yh(e,t,n,r){let i=Ti(t);return i?{version:1,kind:`github`,source:`${i.owner}/${i.repo}`,skill:e,ref:r??i.branch,path:n??i.path,installed:new Date().toISOString()}:null}async function bh(e,t,n){if(t.length===0){let t=await vi(e);return{targets:t.provenanced,missing:[],skipped:t.unattributed}}let r=[],i=[];for(let a of t){let t=await xi(e,a);if(t){r.push({name:a,provenance:t});continue}if(!await e.exists(`/workspace/skills/${a}`)){i.push({name:a,reason:`not-installed`});continue}let o=n.from?yh(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 xh(e){return e.reason===`not-installed`?`upskill: no skill named "${e.name}" is installed — check \`upskill list\`
@@ -286,7 +286,7 @@ Examples:
286
286
  `}function wh(e,t,n,r,i){let a=t?`Skill update (dry run — nothing written):
287
287
  `:`Skill update:
288
288
  `;for(let n of e)a+=vh(n,t);if(i.length>0&&(a+=Ch(i)),!n&&r&&e.length>0){let n=i.length>0?`all ${Sh(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 Th(e,t,n){let{targets:r,missing:i,skipped:a}=await bh(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 _h(e,t,i.name,i.provenance,n.dryRun):await lh(e,t,i.name,i.provenance,n.branch,n.dryRun));return{results:o,skipped:a,missing:i}}async function Eh(e,t,n){let r=ih(e);if(r.error)return{stdout:``,stderr:`${r.error}\n`,exitCode:1};let{results:i,missing:a,skipped:o}=await Th(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`:wh([],r.dryRun,!1,!0,o),stderr:``,exitCode:0}:{stdout:``,stderr:a.length?a.map(xh).join(``):"upskill: no skill has install provenance yet — reinstall a skill, or run `upskill update <skill> --from <owner>/<repo>`, to record its source\n",exitCode:1};let s=i.filter(e=>e.outcome===`error`),c=i.some(e=>e.outcome===`updated`);c&&!r.dryRun&&await wi();let l=a.map(xh).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:wh(i,r.dryRun,c,u,o),stderr:l,exitCode:+!u}}function Dh(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 Oh(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 kh(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}${Oh(e)}`)}if(t.length>0){let e=t.length===1?`skill`:`skills`;r.push(``,`Skipped ${t.length} ${e} with no install provenance — not checked.`)}let i=e.filter(e=>e.outcome===`error`);if(i.length>0){let e=i.length===1?`skill`:`skills`;r.push(``,`Could not check ${i.length} ${e}:`);for(let e of i)r.push(` ${e.skill}: failed — ${e.error}`)}return`${r.join(`
289
- `)}\n`}async function Ah(e,t){let n=await(await import(`./kernel-worker-Dseu067f.js`).then(e=>e.s)).discoverSkills(e);return t?{stdout:`${JSON.stringify({ok:!0,skills:n})}\n`,stderr:``,exitCode:0}:n.length===0?{stdout:`No discoverable local skills found.\n\n${Xm()}`,stderr:``,exitCode:0}:{stdout:Qm(n,`Discoverable local skills`),stderr:``,exitCode:0}}async function jh(e,t,n){let{results:r,skipped:i}=await Th(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:kh(r,i),stderr:c,exitCode:+!s}}async function Mh(e,t,n){let r=Dh(e);return r.error?{stdout:``,stderr:`${r.error}\n`,exitCode:1}:r.outdated?jh(t,n,r.json):Ah(t,r.json)}async function Nh(e,t){let n=`${ai}/experimental/search?q=${encodeURIComponent(e)}&contentType=skills&page%5Bsize%5D=20`,r;try{r=await t(n,{headers:{Accept:`application/json`}})}catch(e){throw Error(gi(e,n))}if(r.status!==200)throw Error(`Tessl returned HTTP ${r.status}`);let i=le(r.body);if(!i.data)return[];let a=new Map;for(let e of i.data){if(e.type!==`skill`)continue;let t=e.attributes,n=Ci(t.sourceUrl),r=n?`${n.owner}/${n.repo}`:void 0,i=t.scores.aggregate==null?null:Math.round(t.scores.aggregate*100),o=t.sourceUrl||e.id,s=a.get(o);if(s&&s.qualityScore!=null&&i!=null&&s.qualityScore>=i)continue;let c=t.path.replace(/\/SKILL\.md$/i,``),l=c.split(`/`).pop()||t.name,u=n?`upskill ${n.owner}/${n.repo} --path ${c.split(`/`).slice(0,-1).join(`/`)||`.`} --skill ${l}`:`upskill tessl:${t.name}`;a.set(o,{name:t.name,displayName:t.name,summary:t.description||``,source:`tessl`,qualityScore:i,installHint:u,featured:t.featured,sourceRepo:r})}return Array.from(a.values())}async function Ph(e,t){let n=`${ai}/experimental/search?q=${encodeURIComponent(e)}&contentType=skills&page%5Bsize%5D=5`,r;try{r=await t(n,{headers:{Accept:`application/json`}})}catch(e){return{error:`Tessl search failed: ${gi(e,n)}`}}if(r.status!==200)return{error:`Tessl search failed (HTTP ${r.status})`};let i=le(r.body).data?.find(t=>t.type===`skill`&&t.attributes.name===e);if(!i)return{error:`skill "${e}" not found on Tessl registry`};let a=Ci(i.attributes.sourceUrl);if(!a)return{error:`skill "${e}" has no GitHub source URL`};let o=i.attributes.path.replace(/\/SKILL\.md$/i,``);return{owner:a.owner,repo:a.repo,skillPath:o,skillName:e}}const Fh=[{label:`Tessl`,host:new URL(ai).host,fetch:Nh},{label:`browse.sh`,host:new URL(ci).host,fetch:Bm}];function Ih(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 Lh(e,t,n=1){let r=await Promise.allSettled(Fh.map(n=>n.fetch(e,t))),i=r.map(e=>e.status===`fulfilled`?e.value:[]),a=r.every(e=>e.status===`rejected`),o=Ih(i),s=``;for(let e=0;e<r.length;e++){let t=r[e];if(t.status===`rejected`){let n=Fh[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+=`
289
+ `)}\n`}async function Ah(e,t){let n=await(await import(`./kernel-worker-4aPSVJ1C.js`).then(e=>e.s)).discoverSkills(e);return t?{stdout:`${JSON.stringify({ok:!0,skills:n})}\n`,stderr:``,exitCode:0}:n.length===0?{stdout:`No discoverable local skills found.\n\n${Xm()}`,stderr:``,exitCode:0}:{stdout:Qm(n,`Discoverable local skills`),stderr:``,exitCode:0}}async function jh(e,t,n){let{results:r,skipped:i}=await Th(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:kh(r,i),stderr:c,exitCode:+!s}}async function Mh(e,t,n){let r=Dh(e);return r.error?{stdout:``,stderr:`${r.error}\n`,exitCode:1}:r.outdated?jh(t,n,r.json):Ah(t,r.json)}async function Nh(e,t){let n=`${ai}/experimental/search?q=${encodeURIComponent(e)}&contentType=skills&page%5Bsize%5D=20`,r;try{r=await t(n,{headers:{Accept:`application/json`}})}catch(e){throw Error(gi(e,n))}if(r.status!==200)throw Error(`Tessl returned HTTP ${r.status}`);let i=le(r.body);if(!i.data)return[];let a=new Map;for(let e of i.data){if(e.type!==`skill`)continue;let t=e.attributes,n=Ci(t.sourceUrl),r=n?`${n.owner}/${n.repo}`:void 0,i=t.scores.aggregate==null?null:Math.round(t.scores.aggregate*100),o=t.sourceUrl||e.id,s=a.get(o);if(s&&s.qualityScore!=null&&i!=null&&s.qualityScore>=i)continue;let c=t.path.replace(/\/SKILL\.md$/i,``),l=c.split(`/`).pop()||t.name,u=n?`upskill ${n.owner}/${n.repo} --path ${c.split(`/`).slice(0,-1).join(`/`)||`.`} --skill ${l}`:`upskill tessl:${t.name}`;a.set(o,{name:t.name,displayName:t.name,summary:t.description||``,source:`tessl`,qualityScore:i,installHint:u,featured:t.featured,sourceRepo:r})}return Array.from(a.values())}async function Ph(e,t){let n=`${ai}/experimental/search?q=${encodeURIComponent(e)}&contentType=skills&page%5Bsize%5D=5`,r;try{r=await t(n,{headers:{Accept:`application/json`}})}catch(e){return{error:`Tessl search failed: ${gi(e,n)}`}}if(r.status!==200)return{error:`Tessl search failed (HTTP ${r.status})`};let i=le(r.body).data?.find(t=>t.type===`skill`&&t.attributes.name===e);if(!i)return{error:`skill "${e}" not found on Tessl registry`};let a=Ci(i.attributes.sourceUrl);if(!a)return{error:`skill "${e}" has no GitHub source URL`};let o=i.attributes.path.replace(/\/SKILL\.md$/i,``);return{owner:a.owner,repo:a.repo,skillPath:o,skillName:e}}const Fh=[{label:`Tessl`,host:new URL(ai).host,fetch:Nh},{label:`browse.sh`,host:new URL(ci).host,fetch:Bm}];function Ih(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 Lh(e,t,n=1){let r=await Promise.allSettled(Fh.map(n=>n.fetch(e,t))),i=r.map(e=>e.status===`fulfilled`?e.value:[]),a=r.every(e=>e.status===`rejected`),o=Ih(i),s=``;for(let e=0;e<r.length;e++){let t=r[e];if(t.status===`rejected`){let n=Fh[e],r=t.reason instanceof Error?t.reason.message:String(t.reason);s+=`warning: ${n.label} registry unavailable (${n.host}): ${r}\n`}}if(o.length===0){let t=a?`${s}upskill: registries failed to respond\n`:s;return{stdout:`No skills found for "${e}"\n\nTry a different search term or browse the registries at https://tessl.io/registry or https://browse.sh\n`,stderr:t,exitCode:+!!a}}let c=o.length,l=Math.ceil(c/10),u=Math.max(1,Math.min(n,l)),d=(u-1)*10,f=o.slice(d,d+10),p=`Search results for "${e}" (page ${u}/${l}, ${c} total):\n\n`;for(let e of f){let t=e.qualityScore==null?` `:String(e.qualityScore).padStart(3),n=`[${e.source}]`,r=e.sourceRepo?` ${e.sourceRepo}`:``;p+=` ${e.name.padEnd(30)} ${t} ${n.padEnd(10)}${r}\n`,e.summary&&(p+=` ${e.summary}\n`),p+=`
290
290
  `}return u<l&&(p+=`Showing ${d+1}-${d+f.length} of ${c}. `,p+=`Next page: upskill search ${e} --page ${u+1}\n\n`),p+=`To install:
291
291
  `,p+=` From Tessl: upskill <owner/repo> --skill <name>
292
292
  `,p+=` From browse.sh: upskill browse:<hostname>/<task>
@@ -309,7 +309,7 @@ Examples:
309
309
  `,{stdout:s,stderr:``,exitCode:0}}function Wh(e){return!e||e.startsWith(`-`)?{stdout:``,stderr:`upskill: --branch requires a value
310
310
  `,exitCode:1}:f(e)?null:{stdout:``,stderr:`upskill: --branch must be a git ref of [A-Za-z0-9._/-]+ with no "..", leading "-"/"/", trailing "/" or ".lock", or shell metacharacters
311
311
  `,exitCode:1}}function Gh(e){let t={selectedSkills:[],listOnly:!1,installAll:!1,force:!1,sourceRef:``},n=0;for(;n<e.length;){let r=e[n];if(r===`--skill`)t.selectedSkills.push(e[++n]);else if(r===`--path`||r===`-p`){let r=e[++n];if(typeof r!=`string`||!m(r))return t.earlyReturn={stdout:``,stderr:`upskill: --path must be a repo-relative sub-path of [A-Za-z0-9._/-]+ with no "..", leading "-"/"/", or shell metacharacters
312
- `,exitCode:1},t;t.subPath=r}else if(r===`--list`)t.listOnly=!0;else if(r===`--all`)t.installAll=!0;else if(r===`--force`)t.force=!0;else if(r===`--branch`||r===`-b`){let r=Wh(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 Kh(e,t,n){if(!t)return{stdout:``,stderr:`upskill: ${e} requires a skill name\n`,exitCode:1};let r=await import(`./kernel-worker-Dseu067f.js`).then(e=>e.s);if(e===`info`){let e=await r.getSkillInfo(n,t);if(!e)return{stdout:``,stderr:`upskill: skill "${t}" not found\n`,exitCode:1};let i=await xi(n,t),a=i?Si(i):"Installed from: (no provenance recorded — reinstall to enable `upskill update`)\n";return{stdout:$m(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+`
312
+ `,exitCode:1},t;t.subPath=r}else if(r===`--list`)t.listOnly=!0;else if(r===`--all`)t.installAll=!0;else if(r===`--force`)t.force=!0;else if(r===`--branch`||r===`-b`){let r=Wh(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 Kh(e,t,n){if(!t)return{stdout:``,stderr:`upskill: ${e} requires a skill name\n`,exitCode:1};let r=await import(`./kernel-worker-4aPSVJ1C.js`).then(e=>e.s);if(e===`info`){let e=await r.getSkillInfo(n,t);if(!e)return{stdout:``,stderr:`upskill: skill "${t}" not found\n`,exitCode:1};let i=await xi(n,t),a=i?Si(i):"Installed from: (no provenance recorded — reinstall to enable `upskill update`)\n";return{stdout:$m(e)+a,stderr:``,exitCode:0}}let i=await r.readSkillInstructions(n,t);return i===null?{stdout:``,stderr:`upskill: no SKILL.md found for "${t}"\n`,exitCode:1}:{stdout:i+`
313
313
  `,stderr:``,exitCode:0}}async function qh(e,t,n,r,i,a,o,s){let c=``,l=``,u=0,d=e.length;for(let f=0;f<e.length;f++){let p=e[f],m=await Di(p.path,p.name,r,i,a,s?{...s,path:p.path}:void 0),h=f+1,g=((Date.now()-o)/1e3).toFixed(1),_=(Date.now()-o)/h,v=h<d?` (~${Math.round((d-h)*_/1e3)}s remaining)`:``;m.ok?(c+=`[${h}/${d}] Installed "${p.name}" from ${t}/${n} (${g}s)${v}\n`,u++):(c+=`[${h}/${d}] Failed "${p.name}": ${m.error}${v}\n`,l+=`upskill: ${m.error}\n`)}return{output:c,errors:l,successCount:u}}async function Jh(e,t,n,r,i,a,o,s){let c=``,l=``,u=0,d=e.length;for(let f=0;f<e.length;f++){let p=e[f],m=await Ei(t,n,p.path,p.name,i,r,a,void 0,o),h=f+1,g=((Date.now()-s)/1e3).toFixed(1),_=(Date.now()-s)/h,v=h<d?` (~${Math.round((d-h)*_/1e3)}s remaining)`:``;m.exitCode===0?(c+=`[${h}/${d}] Installed "${p.name}" from ${t}/${n} (${g}s)${v}\n`,u++):(c+=`[${h}/${d}] Failed "${p.name}": ${m.stderr.trim()}${v}\n`,l+=m.stderr)}return{output:c,errors:l,successCount:u}}async function Yh(e,t,n,r,i,a,o,s){let c=``,l=``,u=0;for(let d of e){let e=await Ei(t,n,d.path,d.name,i,r,a,o,s);e.exitCode===0?(c+=e.stdout,u++):l+=e.stderr}return{output:c,errors:l,successCount:u}}function Xh(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 Zh(e,t,n,r){let{owner:i,repo:a}=e,o=t.branch??e.branch,s=t.subPath??e.path,c=await _i(r),l=await Oi(i,a,c,s,r,o);if(l.error)return{stdout:``,stderr:`upskill: failed to list skills: ${l.error}\n`,exitCode:1};if(l.skills.length===0)return{stdout:`No skills found in ${i}/${a}${s?`/`+s:``}\n`,stderr:``,exitCode:0};if(t.listOnly)return{stdout:Xh(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:Xh(l.skills,i,a)+`\nTo install specific skills: upskill ${t.sourceRef} --skill <name>\nTo install all: upskill ${t.sourceRef} --all\n`,stderr:``,exitCode:0};let d=u.length,f=Date.now(),p=``,m=``,h=0;if(d>1){let e=await mi(i,a,r,o);if(e.status===`ok`){let r=await yi(i,a,o,c,!0,s),l=await qh(u,i,a,li(e.files),n,t.force,f,{kind:`github`,source:`${i}/${a}`,ref:o,sha:r});({output:p,errors:m,successCount:h}=l)}else{let e=await Jh(u,i,a,c,n,t.force,o,f);({output:p,errors:m,successCount:h}=e)}}else({output:p,errors:m,successCount:h}=await Yh(u,i,a,c,n,t.force,r,o));let g=((Date.now()-f)/1e3).toFixed(1);return h>0&&(p+=`\nInstalled ${h} skill(s)${d>1?` in ${g}s`:``}\n`,await wi()),{stdout:p,stderr:m,exitCode:+!!m}}async function Qh(e,t,n,r){switch(e[0]){case`tabs`:return Hh(t,n,r,e.includes(`--json`));case`recommendations`:return Uh(t,n,e.includes(`--install`));case`update`:case`upgrade`:return Eh(e.slice(1),t,n);case`list`:return Mh(e.slice(1),t,n);case`info`:case`read`:return Kh(e[0],e[1],t);case`search`:return eg(e,n);default:return null}}function $h(e,t,n){return x(`upskill`,async(r,i)=>{if(r.length===0||r.includes(`--help`)||r.includes(`-h`))return eh();let a=await Qh(r,e,t,n);if(a)return a;let o=Gh(r);if(o.earlyReturn)return o.earlyReturn;if(!o.sourceRef)return eh();if(o.sourceRef.startsWith(`tessl:`))return tg(o.sourceRef,o.force,e,t);let s=Um(o.sourceRef);if(s)return Ym(s.hostname,s.task,e,t,o.force);let c=Ti(o.sourceRef);return c?Zh(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 eg(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?Lh(a,t,i):eh()}async function tg(e,t,n,r){let i=e.slice(6);if(!i)return{stdout:``,stderr:`upskill: tessl: requires a skill name
314
314
  `,exitCode:1};let a=await Ph(i,r);if(`error`in a)return{stdout:``,stderr:`upskill: ${a.error}\n`,exitCode:1};let o=await _i(r);return Ei(a.owner,a.repo,a.skillPath,a.skillName,n,o,t,r)}function ng(){return{stdout:`usage: afplay [-v volume] [-r rate] <file>
315
315
 
@@ -650,7 +650,7 @@ Usage: cherry-emit <name> [--detail <json>] [--runtime <id>]
650
650
  -o Force paste mode (write to stdout)
651
651
  (default) Auto-detect: stdin present = copy, no stdin = paste
652
652
  Example: echo hello | ${e}\n Example: ${e} -o > file.txt\n`,stderr:``,exitCode:0}}async function kv(e,t){let n=!!globalThis.navigator?.clipboard,r=n?null:o();if(!n&&!r)return{stdout:``,stderr:`${t}: clipboard API is unavailable\n`,exitCode:1};try{return n?await navigator.clipboard.writeText(e):await r.call(`clipboard-write-text`,{text:e}),{stdout:``,stderr:``,exitCode:0}}catch(e){return{stdout:``,stderr:`${t}: failed to write to clipboard: ${Tv(e)}\n`,exitCode:1}}}async function Av(e){let t=!!globalThis.navigator?.clipboard,n=t?null:o();if(!t&&!n)return{stdout:``,stderr:`${e}: clipboard API is unavailable\n`,exitCode:1};try{return{stdout:t?await navigator.clipboard.readText():(await n.call(`clipboard-read-text`,void 0)).text,stderr:``,exitCode:0}}catch(t){return{stdout:``,stderr:`${e}: failed to read from clipboard: ${Tv(t)}\n`,exitCode:1}}}function jv(){return x(`pbcopy`,async(e,t)=>e.includes(`--help`)||e.includes(`-h`)?Ev():kv(N(t.stdin),`pbcopy`))}function Mv(){return x(`pbpaste`,async e=>e.includes(`--help`)||e.includes(`-h`)?Dv():Av(`pbpaste`))}function Nv(e){return x(e,async(t,n)=>{if(t.includes(`--help`)||t.includes(`-h`))return Ov(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 Av(e);let a=N(n.stdin);return r||a.length>0?kv(a,e):Av(e)})}function Pv(){return x(`cmp`,async(e,t)=>{let n=e.some(e=>e===`-s`||e===`--quiet`||e===`--silent`),r=e.filter(e=>![`-s`,`--quiet`,`--silent`].includes(e));if(r.length!==2||r.some(e=>e.startsWith(`-`)&&e!==`-`))return{stdout:``,stderr:`cmp: usage: cmp [-s|--quiet|--silent] FILE1 FILE2
653
- `,exitCode:2};let i=await Fv(t,r[0]);if(`error`in i)return n?{...i.error,stderr:``}:i.error;let a=await Fv(t,r[1]);if(`error`in a)return n?{...a.error,stderr:``}:a.error;let o=Iv(i.bytes,a.bytes);return o?n?{stdout:``,stderr:``,exitCode:1}:o.eof?{stdout:``,stderr:`cmp: EOF on ${i.bytes.length<a.bytes.length?r[0]:r[1]} after byte ${o.byte-1}, line ${o.line}\n`,exitCode:1}:{stdout:`${r[0]} ${r[1]} differ: byte ${o.byte}, line ${o.line}\n`,stderr:``,exitCode:1}:{stdout:``,stderr:``,exitCode:0}})}async function Fv(e,t){if(t===`-`){let t=Qr(e.stdin);return{bytes:Uint8Array.from(t,e=>e.charCodeAt(0)&255)}}try{return{bytes:await e.fs.readFileBuffer(e.fs.resolvePath(e.cwd,t))}}catch{return{error:{stdout:``,stderr:`cmp: ${t}: No such file or directory\n`,exitCode:2}}}}function Iv(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 Lv(e={}){return x(`computer`,async(t,n)=>{let{runComputer:r}=await import(`./run-BEt0RS3J.js`);return r(t,n,e)})}var Rv=`/assets/AdobeClean-Regular-CVsq5gF7.otf`;function zv(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 Bv(e){let t=e.toLowerCase();return t.endsWith(`.jpg`)||t.endsWith(`.jpeg`)?`JPEG`:t.endsWith(`.png`)?`PNG`:t.endsWith(`.gif`)?`GIF`:t.endsWith(`.webp`)?`WEBP`:t.endsWith(`.bmp`)?`BMP`:t.endsWith(`.tiff`)||t.endsWith(`.tif`)?`TIFF`:t.endsWith(`.avif`)?`AVIF`:`PNG`}const Vv=`AdobeClean-Regular.otf`,Hv=new WeakSet;let Uv=null;function Wv(){return{stdout:`usage: convert [input ...] [operations...] [output]
653
+ `,exitCode:2};let i=await Fv(t,r[0]);if(`error`in i)return n?{...i.error,stderr:``}:i.error;let a=await Fv(t,r[1]);if(`error`in a)return n?{...a.error,stderr:``}:a.error;let o=Iv(i.bytes,a.bytes);return o?n?{stdout:``,stderr:``,exitCode:1}:o.eof?{stdout:``,stderr:`cmp: EOF on ${i.bytes.length<a.bytes.length?r[0]:r[1]} after byte ${o.byte-1}, line ${o.line}\n`,exitCode:1}:{stdout:`${r[0]} ${r[1]} differ: byte ${o.byte}, line ${o.line}\n`,stderr:``,exitCode:1}:{stdout:``,stderr:``,exitCode:0}})}async function Fv(e,t){if(t===`-`){let t=Qr(e.stdin);return{bytes:Uint8Array.from(t,e=>e.charCodeAt(0)&255)}}try{return{bytes:await e.fs.readFileBuffer(e.fs.resolvePath(e.cwd,t))}}catch{return{error:{stdout:``,stderr:`cmp: ${t}: No such file or directory\n`,exitCode:2}}}}function Iv(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 Lv(e={}){return x(`computer`,async(t,n)=>{let{runComputer:r}=await import(`./run-DvD576xV.js`);return r(t,n,e)})}var Rv=`/assets/AdobeClean-Regular-CVsq5gF7.otf`;function zv(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 Bv(e){let t=e.toLowerCase();return t.endsWith(`.jpg`)||t.endsWith(`.jpeg`)?`JPEG`:t.endsWith(`.png`)?`PNG`:t.endsWith(`.gif`)?`GIF`:t.endsWith(`.webp`)?`WEBP`:t.endsWith(`.bmp`)?`BMP`:t.endsWith(`.tiff`)||t.endsWith(`.tif`)?`TIFF`:t.endsWith(`.avif`)?`AVIF`:`PNG`}const Vv=`AdobeClean-Regular.otf`,Hv=new WeakSet;let Uv=null;function Wv(){return{stdout:`usage: convert [input ...] [operations...] [output]
654
654
 
655
655
  Operations:
656
656
  -resize GEOMETRY resize; supports %, !, ^, >, and < modifiers
@@ -730,7 +730,7 @@ Examples:
730
730
  `;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+=`
731
731
  `;return t}async function Iy(e,t){let n=S(e.slice(1),{});if(`error`in n)return Ny(n.error);if(!t()){let e=await Ey();if(!e)return ky(`list`);let t=await e.listCronTasks();return t.length===0?{stdout:`No active cron tasks
732
732
  `,stderr:``,exitCode:0}:{stdout:Fy(t),stderr:``,exitCode:0}}let{ok:r,data:i}=await jy(`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
733
- `,stderr:``,exitCode:0}:{stdout:Fy(a),stderr:``,exitCode:0}}async function Ly(e,t){let n=e[0],r=S(e.slice(1),{});if(`error`in r)return Ny(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}:ky(`delete`)}let{ok:a,status:o,data:s}=await jy(`DELETE`,`/${i}`);return a?{stdout:`Deleted cron task "${i}"\n`,stderr:``,exitCode:0}:o===404?{stdout:``,stderr:`crontask: task "${i}" not found\n`,exitCode:1}:{stdout:``,stderr:`crontask: failed to delete: ${s.error??`unknown error`}\n`,exitCode:1}}function Ry(e={}){let t=e.hasLocalNodeServer??(()=>!1);return x(`crontask`,async(e,n)=>{let r=e[0];if(!r||C(e,{valueFlags:My}))return Ay();try{switch(r){case`create`:return await Py(e,n.env,t);case`list`:return await Iy(e,t);case`delete`:case`kill`:return await Ly(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 zy(e){return x(`curlwright`,async(t,n)=>{let{runCurlwright:r}=await import(`./run-B-fA26ea.js`);return r(e,t,n)})}const By=`slicc-fs`;async function Vy(){try{let e=globalThis.indexedDB;if(!e)return!1;let t=e.databases;return typeof t!=`function`||(await t.call(e)).some(e=>e.name===By)}catch{return!0}}async function Hy(){let e=globalThis.indexedDB;return e?new Promise(t=>{let n;try{n=e.deleteDatabase(By)}catch{t(`error`);return}n.onsuccess=()=>t(`deleted`),n.onerror=()=>t(`error`),n.onblocked=()=>t(`blocked`)}):`error`}async function Uy(){if(!await Vy())return{kind:`absent`,message:`legacy slicc-fs IDB not present — nothing to clean`};let e=await Hy();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 Wy(){return`slicc-fs-cleanup — delete the legacy slicc-fs IndexedDB
733
+ `,stderr:``,exitCode:0}:{stdout:Fy(a),stderr:``,exitCode:0}}async function Ly(e,t){let n=e[0],r=S(e.slice(1),{});if(`error`in r)return Ny(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}:ky(`delete`)}let{ok:a,status:o,data:s}=await jy(`DELETE`,`/${i}`);return a?{stdout:`Deleted cron task "${i}"\n`,stderr:``,exitCode:0}:o===404?{stdout:``,stderr:`crontask: task "${i}" not found\n`,exitCode:1}:{stdout:``,stderr:`crontask: failed to delete: ${s.error??`unknown error`}\n`,exitCode:1}}function Ry(e={}){let t=e.hasLocalNodeServer??(()=>!1);return x(`crontask`,async(e,n)=>{let r=e[0];if(!r||C(e,{valueFlags:My}))return Ay();try{switch(r){case`create`:return await Py(e,n.env,t);case`list`:return await Iy(e,t);case`delete`:case`kill`:return await Ly(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 zy(e){return x(`curlwright`,async(t,n)=>{let{runCurlwright:r}=await import(`./run-BX9uHbIi.js`);return r(e,t,n)})}const By=`slicc-fs`;async function Vy(){try{let e=globalThis.indexedDB;if(!e)return!1;let t=e.databases;return typeof t!=`function`||(await t.call(e)).some(e=>e.name===By)}catch{return!0}}async function Hy(){let e=globalThis.indexedDB;return e?new Promise(t=>{let n;try{n=e.deleteDatabase(By)}catch{t(`error`);return}n.onsuccess=()=>t(`deleted`),n.onerror=()=>t(`error`),n.onblocked=()=>t(`blocked`)}):`error`}async function Uy(){if(!await Vy())return{kind:`absent`,message:`legacy slicc-fs IDB not present — nothing to clean`};let e=await Hy();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 Wy(){return`slicc-fs-cleanup — delete the legacy slicc-fs IndexedDB
734
734
 
735
735
  Usage:
736
736
  slicc-fs-cleanup Delete the legacy slicc-fs IDB.
@@ -925,7 +925,7 @@ Without --port, the Web Serial picker opens (needs a user gesture).
925
925
  `)}\n`:`region erased
926
926
  `)}case`run`:{let e=await OS(a,r);return await n.run(e,c,u),TS(l.length?`${l.join(`
927
927
  `)}\n`:`running app
928
- `)}default:return ES(`unknown subcommand '${i[0]??``}'. Try 'esptool --help'.`)}}function jS(){return x(`esptool`,async(e,t)=>{if(e.length===0||e.includes(`--help`)||e.includes(`-h`))return TS(DS);let n=s(),r=o(),i=Kx(n,r),a=Ot(n,r);if(!i||!a)return ES(`Web Serial is unavailable in this environment`);try{return await AS(e,t,i,a)}catch(e){let t=e instanceof Error?e.message:String(e);return/cancelled|NotFoundError|No port selected/i.test(t)?ES(`user cancelled or no port selected`):ES(t)}})}function MS(){return x(`ffmpeg`,async(e,t)=>{let{runFfmpeg:n}=await import(`./run-BOkp5G58.js`);return n(e,t)})}function NS(){return x(`ffprobe`,async(e,t)=>{let{runFfprobe:n}=await import(`./run-D0C4PgZM.js`);return n(e,t)})}const PS=new Map;let FS=0;const IS=e=>({stdout:e,stderr:``,exitCode:0}),LS=e=>({stdout:``,stderr:`fswatch: ${e}\n`,exitCode:1}),RS=[`--path`,`--pattern`,`--scoop`,`--name`];function zS(e){let t=S(e.slice(1),{});if(`error`in t)return LS(t.error);if(PS.size===0)return IS(`No active file watchers.
928
+ `)}default:return ES(`unknown subcommand '${i[0]??``}'. Try 'esptool --help'.`)}}function jS(){return x(`esptool`,async(e,t)=>{if(e.length===0||e.includes(`--help`)||e.includes(`-h`))return TS(DS);let n=s(),r=o(),i=Kx(n,r),a=Ot(n,r);if(!i||!a)return ES(`Web Serial is unavailable in this environment`);try{return await AS(e,t,i,a)}catch(e){let t=e instanceof Error?e.message:String(e);return/cancelled|NotFoundError|No port selected/i.test(t)?ES(`user cancelled or no port selected`):ES(t)}})}function MS(){return x(`ffmpeg`,async(e,t)=>{let{runFfmpeg:n}=await import(`./run-1aYSFTwj.js`);return n(e,t)})}function NS(){return x(`ffprobe`,async(e,t)=>{let{runFfprobe:n}=await import(`./run-DuW-7oJj.js`);return n(e,t)})}const PS=new Map;let FS=0;const IS=e=>({stdout:e,stderr:``,exitCode:0}),LS=e=>({stdout:``,stderr:`fswatch: ${e}\n`,exitCode:1}),RS=[`--path`,`--pattern`,`--scoop`,`--name`];function zS(e){let t=S(e.slice(1),{});if(`error`in t)return LS(t.error);if(PS.size===0)return IS(`No active file watchers.
929
929
  `);let n=``;for(let[,e]of PS)n+=`ID: ${e.id}\n`,n+=` Name: ${e.name}\n`,n+=` Path: ${e.basePath}\n`,n+=` Pattern: ${e.pattern}\n`,e.scoop&&(n+=` Scoop: ${e.scoop}\n`),n+=` Created: ${e.createdAt}\n\n`;return IS(n)}function BS(e){let t=S(e.slice(1),{});if(`error`in t)return LS(t.error);let n=t.positionals[0];if(!n)return LS(`delete requires an ID`);let r=PS.get(n);return r?(r.unsubscribe(),PS.delete(n),IS(`Deleted watcher "${r.name}" (${n})\n`)):LS(`watcher not found: ${n}`)}function VS(e){let t=S(e.slice(1),{value:RS});return`error`in t?t:{basePath:t.values.get(`--path`)??``,pattern:t.values.get(`--pattern`)??``,scoop:t.values.get(`--scoop`)??``,name:t.values.get(`--name`)??``}}function HS(e){let t=RegExp(`^`+e.replace(/\./g,`\\.`).replace(/\*/g,`.*`)+`$`);return e=>t.test(e.split(`/`).pop()??``)}async function US(e,t){let n=VS(e);if(`error`in n)return LS(n.error);let r=n,i=r.scoop||void 0;if(r.scoop=Ii(r.scoop,t)??``,!r.basePath||!r.pattern)return LS(`--path and --pattern are required`);let a=await Oy(await Ey(),`fswatch create`,i);if(a)return{stdout:``,stderr:a,exitCode:1};let o=globalThis,s=o.__slicc_fs_watcher;if(!s)return LS(`file system watcher not available`);let c=`fsw-${++FS}`,l=r.name||`${r.pattern} in ${r.basePath}`,u=o.__slicc_lick_handler,d=s.watch(r.basePath,HS(r.pattern),e=>{if(!u)return;let t=e.map(e=>({type:e.type,path:e.path}));u({type:`fswatch`,fswatchId:c,fswatchName:l,targetScoop:r.scoop,timestamp:new Date().toISOString(),changes:t,body:{changes:t}})});PS.set(c,{id:c,name:l,basePath:r.basePath,pattern:r.pattern,scoop:r.scoop,unsubscribe:d,createdAt:new Date().toISOString()});let f=`Created file watcher "${l}"\n`;return f+=`ID: ${c}\n`,f+=`Path: ${r.basePath}\n`,f+=`Pattern: ${r.pattern}\n`,r.scoop&&(f+=`Scoop: ${r.scoop}\n`),IS(f)}function WS(){return x(`fswatch`,async(e,t)=>{let n=e[0];if(!n||C(e,{valueFlags:RS}))return IS(`usage: fswatch <command> [options]
930
930
 
931
931
  Commands:
@@ -938,7 +938,7 @@ Options:
938
938
  --pattern <glob> File pattern to match, e.g. "*.md", "*.bsh" (required)
939
939
  --scoop <target> Scoop name, cone name, or folder. Omit for your own cone.
940
940
  --name <name> Human-readable name for the watcher
941
- `);switch(n){case`list`:return zS(e);case`delete`:return BS(e);case`create`:return await US(e,t.env);default:return LS(`unknown command: ${n}`)}})}function GS(e){return x(`gelatiere`,async(t,n)=>{let{runGelatiere:r}=await import(`./run-BWJSDhS7.js`);return r(t,n,e)})}function KS(e){return typeof e.stdoutIsTTY!=`boolean`||e.stdoutIsTTY}function qS(e,t){return typeof e.stdinIsTTY==`boolean`?e.stdinIsTTY:t===void 0?Qr(e.stdin).length===0:t===0}function JS(){return{stdout:`usage: hear [-i file] [-l lang] [-T seconds] [-d deviceId] [--engine name]
941
+ `);switch(n){case`list`:return zS(e);case`delete`:return BS(e);case`create`:return await US(e,t.env);default:return LS(`unknown command: ${n}`)}})}function GS(e){return x(`gelatiere`,async(t,n)=>{let{runGelatiere:r}=await import(`./run-CUCg2cJM.js`);return r(t,n,e)})}function KS(e){return typeof e.stdoutIsTTY!=`boolean`||e.stdoutIsTTY}function qS(e,t){return typeof e.stdinIsTTY==`boolean`?e.stdinIsTTY:t===void 0?Qr(e.stdin).length===0:t===0}function JS(){return{stdout:`usage: hear [-i file] [-l lang] [-T seconds] [-d deviceId] [--engine name]
942
942
  hear --devices | --status | --warmup
943
943
 
944
944
  Speech recognition: listens on the microphone until you pause, then
@@ -1223,7 +1223,7 @@ Options:
1223
1223
  `,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 bT(e,t){if(!t.sessionDirsCreated){for(let t of[`/.playwright`,`/.playwright/snapshots`,`/.playwright/screenshots`])try{await e.mkdir(t,{recursive:!0})}catch(e){if(!Hn(e))throw e}t.sessionDirsCreated=!0}}async function xT(e,t,n,r){try{return await e.withTab(n,async e=>{let{url:i,title:o,text:s,refToSelector:c,refToBackendNodeId:l,refToFrameId:u}=await a(e),d={url:i,title:o,refToSelector:c,refToBackendNodeId:l,refToFrameId:u,content:s,timestamp:Date.now()};r.snapshots.set(n,d);let f=[`Page URL: ${i}`,`Page Title: ${o}`,``,s].join(`
1224
1224
  `),p=`/.playwright/snapshots/page-${Bn(new Date)}.yml`;return await t.writeFile(p,f),p})}catch{return null}}async function ST(e,t,n){await bT(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(`
1225
1225
  `)+`
1226
- `,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 CT(){return import(`./snapshot-features-DjMJkCGq.js`)}async function wT(e,t,n,r){let a=await e.getAccessibilityTreeForFrame(r.frameId),o=new Map,s=new Map,c=new Map,l=i(a,o,s,{value:0},``,`f1`);for(let e of o.keys())c.set(e,r.frameId);let u=l.join(`
1226
+ `,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 CT(){return import(`./snapshot-features-3xslkGtL.js`)}async function wT(e,t,n,r){let a=await e.getAccessibilityTreeForFrame(r.frameId),o=new Map,s=new Map,c=new Map,l=i(a,o,s,{value:0},``,`f1`);for(let e of o.keys())c.set(e,r.frameId);let u=l.join(`
1227
1227
  `);return t.snapshots.set(n,{url:r.url,title:r.name,refToSelector:o,refToBackendNodeId:s,refToFrameId:c,content:u,timestamp:Date.now()}),u}async function 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() {
1228
1228
  this.scrollIntoView({ block: 'center' });
1229
1229
  const r = this.getBoundingClientRect();
@@ -1301,7 +1301,7 @@ Options:
1301
1301
  el.dispatchEvent(new Event('input', { bubbles: true }));
1302
1302
  return el.files.length;
1303
1303
  })()`,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`,IT],[`state-load`,LT],[`console`,gC],[`requests`,iT],[`request`,aT],[`request-headers`,oT],[`request-body`,sT],[`response-headers`,cT],[`response-body`,lT],[`mousemove`,cw],[`mousedown`,lw],[`mouseup`,uw],[`mousewheel`,dw],[`drop`,fw],[`route`,_T],[`route-list`,vT],[`unroute`,yT],[`generate-locator`,EC],[`highlight`,DC]]);function oE(){let e=(Gn.string??[]).map(e=>`--${e}`),t=new Set(Gn.boolean??[]);for(let[e,n]of Object.entries(Gn.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 sE(e){return e.map(e=>e===`--no-iframes`||e.startsWith(`--no-iframes=`)?e.replace(`--no-iframes`,`--_noiframes`):e)}function cE(e){return{...e,bool:[...e.bool??[],`--_noiframes`],value:[...e.value??[],`--_noiframes`]}}const lE=2e3;function uE(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 dE(e,t,n,r){if(!t||typeof e.getTabLockStats!=`function`)return r;let i=e.getTabLockStats(),a=i.totalWaitMs-t.totalWaitMs;if(a<lE)return r;let o=(a/1e3).toFixed(1),s=n&&t.tabWaitMs!==void 0?e.getTabLockStats(n).tabWaitMs-t.tabWaitMs:0,c=`note: browser bridge contended — lock waits totaled ${o}s while this command ran, ${s>=lE?`${(s/1e3).toFixed(1)}s of it waiting on this tab (--tab=${n})`:`all of it waiting on the bridge, not on this tab`} (queue depth ${i.queueDepth}). Commands on the same tab serialize; commands on different tabs run in parallel — stagger callers on THIS tab, or give each caller its own tab.
1304
- `;return{...r,stderr:r.stderr+c}}async function fE(e,t,n){let r=n instanceof Error?n.message:String(n);return{stdout:``,stderr:`Error: ${(t.tab?await Kn(e,t.tab,n):null)??r}\n`,exitCode:1}}function pE(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 mE(e,t,n){let r=aE.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?pE(e,t,void 0):a}catch(r){return i?.aborted?pE(e,t,r):await fE(n.browser,n.flags,r)}}async function hE(e,t,n,r){let i=S(sE(n),cE(r));if(`error`in i)return{answer:{stdout:``,stderr:`${e} ${t}: ${i.error}\n`,exitCode:1}};let a;try{({flags:a}=Wn(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-BU2Hjl0P.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 gE(e,t,n){let r=t?Vn(t,n):null,i=oE();return x(e,async(a,o)=>{if(a.length===0||a[0]===`help`||a[0]===`--help`||a[0]===`-h`){let{formatHelp:t}=await import(`./help-BU2Hjl0P.js`);return{stdout:t(e)+`
1304
+ `;return{...r,stderr:r.stderr+c}}async function fE(e,t,n){let r=n instanceof Error?n.message:String(n);return{stdout:``,stderr:`Error: ${(t.tab?await Kn(e,t.tab,n):null)??r}\n`,exitCode:1}}function pE(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 mE(e,t,n){let r=aE.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?pE(e,t,void 0):a}catch(r){return i?.aborted?pE(e,t,r):await fE(n.browser,n.flags,r)}}async function hE(e,t,n,r){let i=S(sE(n),cE(r));if(`error`in i)return{answer:{stdout:``,stderr:`${e} ${t}: ${i.error}\n`,exitCode:1}};let a;try{({flags:a}=Wn(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-C7Nq107k.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 gE(e,t,n){let r=t?Vn(t,n):null,i=oE();return x(e,async(a,o)=>{if(a.length===0||a[0]===`help`||a[0]===`--help`||a[0]===`-h`){let{formatHelp:t}=await import(`./help-C7Nq107k.js`);return{stdout:t(e)+`
1305
1305
  `,stderr:``,exitCode:0}}let s=a[0],c=a.slice(1),l=await hE(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=uE(t,f),m=await mE(e,s,{browser:t,fs:n,state:r,positional:u,flags:d,scratchDir:Li(o.env),onTab:(e,n)=>t.withTab(e,n,{signal:o.signal}),signal:o.signal}),h=d.tab??null,g=null;Qn.has(s)&&m.exitCode===0&&h&&(g=await xT(t,n,h,r));try{await ST(n,r,{command:s,args:c,result:m,snapshotPath:g,targetId:h})}catch{}return dE(t,p,f,m)})}const _E=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`,...Xn,`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)`,[...Vg]]]);function vE(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:
1306
1306
  `);let a=[];for(let[e,t]of _E){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(`
1307
1307
  `)+`
@@ -1486,7 +1486,7 @@ Options:
1486
1486
  --global Resolve only from the shared global prefix (/shared/lib/node_modules)
1487
1487
  -h, --help Show this help message
1488
1488
  `}async function LO(e,t){let n=await e.readFile(t);return typeof n==`string`?n:new TextDecoder().decode(n)}async function RO(e,t){try{return(await e.stat(t)).type===`file`}catch{return!1}}async function zO(e,t){try{return(await e.stat(t)).type===`directory`}catch{return!1}}function*BO(e,t=!1){if(t){yield cr;return}let n=y(e);for(;yield b(n,`node_modules`),n!==`/`;)n=we(n).dir;yield cr}async function VO(e,t,n,r=!1){for(let i of BO(t,r)){let t=b(i,`.bin`,n);if(!await RO(e,t))continue;let r=await LO(e,t),a=FO.exec(r),o=we(t).dir;return{binFilePath:a?b(o,a[1]):t,argvName:t}}return null}function HO(e){if(e.startsWith(`@`)){let t=e.indexOf(`/`);if(t!==-1)return e.slice(t+1)}return e}function UO(e,t){if(typeof e==`string`)return{binName:HO(t),binPath:e};if(typeof e!=`object`||!e)return null;let n=[t,HO(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 WO(e,t,n,r=!1){for(let i of BO(t,r)){let t=b(i,n),r=b(t,`package.json`);if(!await RO(e,r))continue;let a;try{a=JSON.parse(await LO(e,r))}catch{return null}let o=UO(a.bin,n);if(!o)return null;let s=o.binPath.replace(/^\.\//,``);return{binFilePath:b(t,s),argvName:b(i,`.bin`,o.binName)}}return null}async function GO(e,t,n,r=!1){return await VO(e,t,n,r)??await WO(e,t,n,r)}async function KO(e,t,n){for(let r of BO(t))if(await RO(e,b(r,n,`package.json`)))return!0;return!1}function qO(e){return e instanceof Error?e.message:String(e)}function JO(e,t){return{stdout:``,stderr:`${e}: ${t}\n`,exitCode:1}}async function YO(e,t,n,r){try{let i=await qi([t],{fs:r.fs,fetch:r.fetch,cwd:n.cwd});if(i.errors.length>0)return{error:JO(e,`failed to install '${t}': ${qO(i.errors[0].error)}`)};let a=i.results.map(t=>`${e}: installed ${t.name}@${t.version}`);return{progress:a.length>0?`${a.join(`
1489
- `)}\n`:``}}catch(n){return{error:JO(e,`failed to install '${t}': ${qO(n)}`)}}}async function XO(e,t,n,r){return await RO(r,n)?null:await zO(r,n)?JO(e,`bin target '${n}' is a directory, not a file`):JO(e,`bin file '${n}' for '${t}' does not exist`)}async function ZO(e,t,n,r,i,a){if(await KO(a.fs,i.cwd,t))return{error:JO(e,`package '${t}' does not expose an executable bin`)};let o=r?void 0:MO(t);if(o)return{error:{stdout:``,stderr:PO(e,t,n,o),exitCode:1}};let s=await YO(e,t,i,a);if(`error`in s)return s;let c=await GO(a.fs,i.cwd,t);return c?{resolved:c,installProgress:s.progress}:{error:JO(e,`package '${t}' was installed but does not expose an executable bin`)}}function QO(e,t){return{name:e,trusted:!0,async execute(n,r){if(n.length===0||n[0]===`--help`||n[0]===`-h`)return{stdout:IO(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:IO(e),stderr:``,exitCode:1};let c=s[0],l=s.slice(1),u;try{u=await GO(t.fs,r.cwd,c,o)}catch(t){return JO(e,qO(t))}let d=``;if(!u){if(o)return JO(e,`no global bin '${c}' found in ${cr}`);let n=await ZO(e,c,l,i,r,t);if(`error`in n)return n.error;u=n.resolved,d=n.installProgress}let f=await XO(e,c,u.binFilePath,t.fs);if(f)return f;let p=Et(await LO(t.fs,u.binFilePath)),m=[`node`,u.argvName,...l],h=await zt(p,m,r,void 0,{filename:u.binFilePath});return{stdout:h.stdout,stderr:d+h.stderr,exitCode:h.exitCode}}}}function $O(e={}){return x(`jshd`,async(t,n)=>{let{runJshd:r}=await import(`./run-a67LpkRp.js`);return r(t,n,e)})}const ek=new Set([`SIGINT`,`SIGTERM`,`SIGKILL`,`SIGSTOP`,`SIGCONT`]);function tk(e={}){return x(`kill`,async t=>{if(t.length===0||t.includes(`--help`)||t.includes(`-h`))return sk();let n=e.processManager??nk();if(!n)return{stdout:``,stderr:`kill: no process manager available in this runtime
1489
+ `)}\n`:``}}catch(n){return{error:JO(e,`failed to install '${t}': ${qO(n)}`)}}}async function XO(e,t,n,r){return await RO(r,n)?null:await zO(r,n)?JO(e,`bin target '${n}' is a directory, not a file`):JO(e,`bin file '${n}' for '${t}' does not exist`)}async function ZO(e,t,n,r,i,a){if(await KO(a.fs,i.cwd,t))return{error:JO(e,`package '${t}' does not expose an executable bin`)};let o=r?void 0:MO(t);if(o)return{error:{stdout:``,stderr:PO(e,t,n,o),exitCode:1}};let s=await YO(e,t,i,a);if(`error`in s)return s;let c=await GO(a.fs,i.cwd,t);return c?{resolved:c,installProgress:s.progress}:{error:JO(e,`package '${t}' was installed but does not expose an executable bin`)}}function QO(e,t){return{name:e,trusted:!0,async execute(n,r){if(n.length===0||n[0]===`--help`||n[0]===`-h`)return{stdout:IO(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:IO(e),stderr:``,exitCode:1};let c=s[0],l=s.slice(1),u;try{u=await GO(t.fs,r.cwd,c,o)}catch(t){return JO(e,qO(t))}let d=``;if(!u){if(o)return JO(e,`no global bin '${c}' found in ${cr}`);let n=await ZO(e,c,l,i,r,t);if(`error`in n)return n.error;u=n.resolved,d=n.installProgress}let f=await XO(e,c,u.binFilePath,t.fs);if(f)return f;let p=Et(await LO(t.fs,u.binFilePath)),m=[`node`,u.argvName,...l],h=await zt(p,m,r,void 0,{filename:u.binFilePath});return{stdout:h.stdout,stderr:d+h.stderr,exitCode:h.exitCode}}}}function $O(e={}){return x(`jshd`,async(t,n)=>{let{runJshd:r}=await import(`./run-ZmpHaamT.js`);return r(t,n,e)})}const ek=new Set([`SIGINT`,`SIGTERM`,`SIGKILL`,`SIGSTOP`,`SIGCONT`]);function tk(e={}){return x(`kill`,async t=>{if(t.length===0||t.includes(`--help`)||t.includes(`-h`))return sk();let n=e.processManager??nk();if(!n)return{stdout:``,stderr:`kill: no process manager available in this runtime
1490
1490
  `,exitCode:1};let r=rk(t);if(!r.ok)return{stdout:``,stderr:r.stderr,exitCode:r.exitCode};let{allDelivered:i,errors:a}=ik(n,r.pids,r.signal);return{stdout:``,stderr:a.length?`${a.join(`
1491
1491
  `)}\n`:``,exitCode:+!i}})}function nk(){let e=globalThis.__slicc_pm;return e instanceof Object&&typeof e.signal==`function`?e:null}function rk(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
1492
1492
  `,exitCode:2};let i=ak(n);if(i instanceof Error)return{ok:!1,stderr:`kill: ${i.message}\n`,exitCode:2};t=i;continue}if(i.startsWith(`-`)){let e=ok(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
@@ -1559,7 +1559,7 @@ Common base URLs:
1559
1559
  `)+`
1560
1560
  `,stderr:``,exitCode:0}}function Pk(e,t){let n=t.models.length;return{stdout:[`✓ ${e} (${Ak(t.runtime,!1)})`,` Saved ${n} model${n===1?``:`s`} to Settings:`,...jk(t.models)].join(`
1561
1561
  `)+`
1562
- `,stderr:``,exitCode:0}}function Fk(){return x(Ok,async e=>{if(e.includes(`--help`)||e.includes(`-h`))return{stdout:kk(),stderr:``,exitCode:0};let{getApiKeyForProvider:t,getRawApiKeyForProvider:n,getBaseUrlForProvider:r,addAccount:i}=await import(`./account-store-BEqmysw9.js`).then(e=>e.t),{verifyConnection:a}=await import(`./local-llm-DpSg-Oe3.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(Ok);if(!s)return{stdout:``,stderr:`Local LLM is not configured. Open Settings → Providers → Local LLM and set a base URL.
1562
+ `,stderr:``,exitCode:0}}function Fk(){return x(Ok,async e=>{if(e.includes(`--help`)||e.includes(`-h`))return{stdout:kk(),stderr:``,exitCode:0};let{getApiKeyForProvider:t,getRawApiKeyForProvider:n,getBaseUrlForProvider:r,addAccount:i}=await import(`./account-store-B05_LKnj.js`).then(e=>e.t),{verifyConnection:a}=await import(`./local-llm-DqeU7kV3.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(Ok);if(!s)return{stdout:``,stderr:`Local LLM is not configured. Open Settings → Providers → Local LLM and set a base URL.
1563
1563
  `,exitCode:1};let c=await a(s,t(Ok)??void 0);if(!c.ok)return Mk(s,c);if(o===`discover`){let e=n(Ok)??``;return i(Ok,e,s,c.models.join(`, `)),Pk(s,c)}return Nk(s,c)})}function Ik(){return{stdout:`usage: man <topic>
1564
1564
 
1565
1565
  Fetches documentation for a given topic from sliccy.com.
@@ -1597,20 +1597,20 @@ authorization-code flow, stores the access token, and retries.
1597
1597
  On success, the server is persisted to /workspace/.mcp/servers.json and
1598
1598
  an alias shim is written to /workspace/.mcp/aliases/<name>.jsh so the
1599
1599
  short name resolves on the PATH.
1600
- `);let n=S(e,{});if(`error`in n)return Hk(n.error);if(n.positionals.length<2)return W(`mcp add: expected <url> <name>`);let[r,i]=n.positionals;if(!/^https?:\/\//i.test(r))return W(`mcp add: invalid URL "${r}" (must start with http:// or https://)`);if(!/^[A-Za-z][A-Za-z0-9_-]*$/.test(i))return W(`mcp add: invalid name "${i}" (letters, digits, _ and - only; must start with a letter)`);let{getServer:a,setServer:o}=await import(`./store-ChWzn_H8.js`).then(e=>e.r);if(await a(i,t.fs))return W(`mcp add: a server named "${i}" already exists`);let{McpClient:s,McpAuthRequiredError:c}=await import(`./client-B6iKb_ye.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 Kk(r,i,e.resourceMetadataUrl,t),l=new s({url:r,fetchImpl:t.fetchImpl,getAuthHeader:()=>xA(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 kA(i,f,t);if(u){let{registerMcpProvider:e}=await import(`./provider-3--cEcAF.js`);e({name:i,serverUrl:r,auth:u})}return U([`Added MCP server "${i}" → ${r}`,` tools: ${d.length}, apps: ${f.length} (${m} sprinkle${m===1?``:`s`})`,` alias: ${Vk}/${i}.jsh`,u?` auth: oauth (provider mcp:${i})`:` auth: none`].join(`
1600
+ `);let n=S(e,{});if(`error`in n)return Hk(n.error);if(n.positionals.length<2)return W(`mcp add: expected <url> <name>`);let[r,i]=n.positionals;if(!/^https?:\/\//i.test(r))return W(`mcp add: invalid URL "${r}" (must start with http:// or https://)`);if(!/^[A-Za-z][A-Za-z0-9_-]*$/.test(i))return W(`mcp add: invalid name "${i}" (letters, digits, _ and - only; must start with a letter)`);let{getServer:a,setServer:o}=await import(`./store-CzlK9KIc.js`).then(e=>e.r);if(await a(i,t.fs))return W(`mcp add: a server named "${i}" already exists`);let{McpClient:s,McpAuthRequiredError:c}=await import(`./client-BDN4zG90.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 Kk(r,i,e.resourceMetadataUrl,t),l=new s({url:r,fetchImpl:t.fetchImpl,getAuthHeader:()=>xA(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 kA(i,f,t);if(u){let{registerMcpProvider:e}=await import(`./provider-Df8LFEZ7.js`);e({name:i,serverUrl:r,auth:u})}return U([`Added MCP server "${i}" → ${r}`,` tools: ${d.length}, apps: ${f.length} (${m} sprinkle${m===1?``:`s`})`,` alias: ${Vk}/${i}.jsh`,u?` auth: oauth (provider mcp:${i})`:` auth: none`].join(`
1601
1601
  `)+`
1602
- `)}async function Kk(e,t,n,r){let{discoverAuth:i,dynamicRegister:a,runAuthFlow:o}=await import(`./oauth-DR6XMm1M.js`),{saveOAuthAccount:s}=await import(`./account-store-BEqmysw9.js`).then(e=>e.t),c=await CA(r.oauthFetchImpl),l=r.oauthLauncher??await SA(),u=await i(e,n,c);Bk.debug(`MCP OAuth discovery succeeded`,{name:t,serverUrl:e,discoveryPath:u.discoveryPath,issuer:u.issuer});let d=await ea(be()),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 qk(e,t){if(C(e))return U(`usage: mcp list
1603
- `);let n=S(e,{});if(`error`in n)return Hk(n.error);let{ensureAllMcpProvidersRegistered:r}=await import(`./provider-3--cEcAF.js`);await r();let{listServers:i}=await import(`./store-ChWzn_H8.js`).then(e=>e.r),a=await i(t.fs),o=Object.keys(a).sort();if(o.length===0)return U("No MCP servers configured. Use `mcp add <url> <name>`.\n");let s=[[`NAME`,`URL`,`AUTH`,`TOOLS`,`APPS`,`ADDED`]];for(let e of o){let t=a[e];s.push([e,t.url,t.auth?`yes`:`no`,String(t.tools?.length??0),String(t.apps?.length??0),t.addedAt?t.addedAt.slice(0,10):`-`])}return U(Jk(s))}function Jk(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(`
1602
+ `)}async function Kk(e,t,n,r){let{discoverAuth:i,dynamicRegister:a,runAuthFlow:o}=await import(`./oauth-DR6XMm1M.js`),{saveOAuthAccount:s}=await import(`./account-store-B05_LKnj.js`).then(e=>e.t),c=await CA(r.oauthFetchImpl),l=r.oauthLauncher??await SA(),u=await i(e,n,c);Bk.debug(`MCP OAuth discovery succeeded`,{name:t,serverUrl:e,discoveryPath:u.discoveryPath,issuer:u.issuer});let d=await ea(be()),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 qk(e,t){if(C(e))return U(`usage: mcp list
1603
+ `);let n=S(e,{});if(`error`in n)return Hk(n.error);let{ensureAllMcpProvidersRegistered:r}=await import(`./provider-Df8LFEZ7.js`);await r();let{listServers:i}=await import(`./store-CzlK9KIc.js`).then(e=>e.r),a=await i(t.fs),o=Object.keys(a).sort();if(o.length===0)return U("No MCP servers configured. Use `mcp add <url> <name>`.\n");let s=[[`NAME`,`URL`,`AUTH`,`TOOLS`,`APPS`,`ADDED`]];for(let e of o){let t=a[e];s.push([e,t.url,t.auth?`yes`:`no`,String(t.tools?.length??0),String(t.apps?.length??0),t.addedAt?t.addedAt.slice(0,10):`-`])}return U(Jk(s))}function Jk(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(`
1604
1604
  `)+`
1605
1605
  `}async function Yk(e,t){if(C(e))return U(`usage: mcp search <query>
1606
1606
 
1607
1607
  Case-insensitive substring search across the cached tools of every
1608
1608
  registered MCP server. Matches tool name OR description and prints a
1609
1609
  table of (server, tool, description, match-field) rows.
1610
- `);let n=S(e,{});if(`error`in n)return Hk(n.error);if(n.positionals.length===0)return W(`mcp search: expected <query>`);let r=n.positionals[0],i=r.toLowerCase(),{ensureAllMcpProvidersRegistered:a}=await import(`./provider-3--cEcAF.js`);await a();let{listServers:o}=await import(`./store-ChWzn_H8.js`).then(e=>e.r),s=await o(t.fs),c=Object.keys(s).sort();if(c.length===0)return U("No MCP servers configured. Use `mcp add <url> <name>`.\n");let l=[];for(let e of c){let t=s[e].tools??[];for(let n of t){let t=n.description??``,r=n.name.toLowerCase().includes(i),a=t.toLowerCase().includes(i);if(!r&&!a)continue;let o=r&&a?`name+description`:r?`name`:`description`;l.push({server:e,tool:n.name,description:t,match:o})}}if(l.length===0)return U(`No tools matched "${r}".\n`);l.sort((e,t)=>e.server===t.server?e.tool.localeCompare(t.tool):e.server.localeCompare(t.server));let u=[[`SERVER`,`TOOL`,`DESCRIPTION`,`MATCH`]];for(let e of l)u.push([e.server,e.tool,Xk(e.description),e.match]);return U(Jk(u))}function Xk(e){if(!e)return``;let t=e.replace(/\s+/g,` `).trim();return t.length<=60?t:t.slice(0,59)+`…`}async function Zk(e,t){if(e.length===0||C(e))return e.length===0?W(`mcp delete: expected <name>`):U(`usage: mcp delete <name>
1611
- `);let n=S(e,{});if(`error`in n)return Hk(n.error);let r=n.positionals[0];if(!r)return W(`mcp delete: expected <name>`);let{ensureMcpProviderRegistered:i,removeMcpProvider:a}=await import(`./provider-3--cEcAF.js`);await i(r);let{deleteServer:o}=await import(`./store-ChWzn_H8.js`).then(e=>e.r),s=await o(r,t.fs);await DA(r,t),await OA(r,t);let c=`mcp:${r}`,l=!1;try{let{removeAccount:e,getAccounts:t}=await import(`./account-store-BEqmysw9.js`).then(e=>e.t);t().some(e=>e.providerId===c)&&(await e(c),l=!0)}catch(e){Bk.warn(`mcp delete: OAuth removal failed`,{providerId:c,error:e instanceof Error?e.message:String(e)})}let u=a(r);return!s&&!l&&!u?W(`mcp delete: no server, alias, or account found for "${r}"`):U([`Removed MCP server "${r}"`,` servers.json: ${s?`removed`:`not present`}`,` alias: cleaned`,` sprinkles: cleaned`,` oauth: ${l?`removed`:`not present`}`,` provider: ${u?`unregistered`:`not registered`}`].join(`
1610
+ `);let n=S(e,{});if(`error`in n)return Hk(n.error);if(n.positionals.length===0)return W(`mcp search: expected <query>`);let r=n.positionals[0],i=r.toLowerCase(),{ensureAllMcpProvidersRegistered:a}=await import(`./provider-Df8LFEZ7.js`);await a();let{listServers:o}=await import(`./store-CzlK9KIc.js`).then(e=>e.r),s=await o(t.fs),c=Object.keys(s).sort();if(c.length===0)return U("No MCP servers configured. Use `mcp add <url> <name>`.\n");let l=[];for(let e of c){let t=s[e].tools??[];for(let n of t){let t=n.description??``,r=n.name.toLowerCase().includes(i),a=t.toLowerCase().includes(i);if(!r&&!a)continue;let o=r&&a?`name+description`:r?`name`:`description`;l.push({server:e,tool:n.name,description:t,match:o})}}if(l.length===0)return U(`No tools matched "${r}".\n`);l.sort((e,t)=>e.server===t.server?e.tool.localeCompare(t.tool):e.server.localeCompare(t.server));let u=[[`SERVER`,`TOOL`,`DESCRIPTION`,`MATCH`]];for(let e of l)u.push([e.server,e.tool,Xk(e.description),e.match]);return U(Jk(u))}function Xk(e){if(!e)return``;let t=e.replace(/\s+/g,` `).trim();return t.length<=60?t:t.slice(0,59)+`…`}async function Zk(e,t){if(e.length===0||C(e))return e.length===0?W(`mcp delete: expected <name>`):U(`usage: mcp delete <name>
1611
+ `);let n=S(e,{});if(`error`in n)return Hk(n.error);let r=n.positionals[0];if(!r)return W(`mcp delete: expected <name>`);let{ensureMcpProviderRegistered:i,removeMcpProvider:a}=await import(`./provider-Df8LFEZ7.js`);await i(r);let{deleteServer:o}=await import(`./store-CzlK9KIc.js`).then(e=>e.r),s=await o(r,t.fs);await DA(r,t),await OA(r,t);let c=`mcp:${r}`,l=!1;try{let{removeAccount:e,getAccounts:t}=await import(`./account-store-B05_LKnj.js`).then(e=>e.t);t().some(e=>e.providerId===c)&&(await e(c),l=!0)}catch(e){Bk.warn(`mcp delete: OAuth removal failed`,{providerId:c,error:e instanceof Error?e.message:String(e)})}let u=a(r);return!s&&!l&&!u?W(`mcp delete: no server, alias, or account found for "${r}"`):U([`Removed MCP server "${r}"`,` servers.json: ${s?`removed`:`not present`}`,` alias: cleaned`,` sprinkles: cleaned`,` oauth: ${l?`removed`:`not present`}`,` provider: ${u?`unregistered`:`not registered`}`].join(`
1612
1612
  `)+`
1613
- `)}async function Qk(e,t){if(e.length===0)return W(`mcp invoke: expected <name>`);if(C(e.slice(0,1)))return U(tA());let n=S([e[0]],{});if(`error`in n)return Hk(n.error);let r=n.positionals[0];if(!r)return W(`mcp invoke: expected <name>`);let i=e.slice(1),{ensureMcpProviderRegistered:a}=await import(`./provider-3--cEcAF.js`);await a(r);let{getServer:o}=await import(`./store-ChWzn_H8.js`).then(e=>e.r),s=await o(r,t.fs);if(!s)return W(`mcp invoke: unknown server "${r}" (run \`mcp add <url> ${r}\` first)`);let c=s.tools??[];if(i.length===0||C(i.slice(0,1)))return U(nA(r,s,c));let l=S([i[0]],{});if(`error`in l)return Hk(l.error);let u=l.positionals[0];if(!u)return W(`mcp invoke: expected <tool>`);let d=c.find(e=>e.name===u);if(!d)return W(`mcp invoke: unknown tool "${u}" on "${r}" (run \`${r}\` to list tools)`);let{timeoutMs:f,remaining:p,warnings:m}=$k(i.slice(1));if(C(p))return U(iA(r,d));let h=aA(p,d.inputSchema);if(!h.ok)return W(`mcp invoke: ${h.error}`);let{McpClient:g}=await import(`./client-B6iKb_ye.js`).then(e=>e.n),_=new g({url:s.url,fetchImpl:t.fetchImpl,headers:s.headers,getAuthHeader:s.auth?()=>xA(r):void 0,...f===void 0?{}:{timeoutMs:f}});await _.initialize();let v=_A(await _.toolsCall(u,h.value));return m.length>0&&(v.stderr=m.map(e=>`${e}\n`).join(``)+v.stderr),v}function $k(e){let t=[],n=[],r,i=0;for(;i<e.length;){let a=e[i];if(a.startsWith(`--timeout=`)){let e=eA(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=eA(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 eA(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 tA(){return`usage: mcp invoke <name> [tool] [--timeout <seconds>] [--flag value …]
1613
+ `)}async function Qk(e,t){if(e.length===0)return W(`mcp invoke: expected <name>`);if(C(e.slice(0,1)))return U(tA());let n=S([e[0]],{});if(`error`in n)return Hk(n.error);let r=n.positionals[0];if(!r)return W(`mcp invoke: expected <name>`);let i=e.slice(1),{ensureMcpProviderRegistered:a}=await import(`./provider-Df8LFEZ7.js`);await a(r);let{getServer:o}=await import(`./store-CzlK9KIc.js`).then(e=>e.r),s=await o(r,t.fs);if(!s)return W(`mcp invoke: unknown server "${r}" (run \`mcp add <url> ${r}\` first)`);let c=s.tools??[];if(i.length===0||C(i.slice(0,1)))return U(nA(r,s,c));let l=S([i[0]],{});if(`error`in l)return Hk(l.error);let u=l.positionals[0];if(!u)return W(`mcp invoke: expected <tool>`);let d=c.find(e=>e.name===u);if(!d)return W(`mcp invoke: unknown tool "${u}" on "${r}" (run \`${r}\` to list tools)`);let{timeoutMs:f,remaining:p,warnings:m}=$k(i.slice(1));if(C(p))return U(iA(r,d));let h=aA(p,d.inputSchema);if(!h.ok)return W(`mcp invoke: ${h.error}`);let{McpClient:g}=await import(`./client-BDN4zG90.js`).then(e=>e.n),_=new g({url:s.url,fetchImpl:t.fetchImpl,headers:s.headers,getAuthHeader:s.auth?()=>xA(r):void 0,...f===void 0?{}:{timeoutMs:f}});await _.initialize();let v=_A(await _.toolsCall(u,h.value));return m.length>0&&(v.stderr=m.map(e=>`${e}\n`).join(``)+v.stderr),v}function $k(e){let t=[],n=[],r,i=0;for(;i<e.length;){let a=e[i];if(a.startsWith(`--timeout=`)){let e=eA(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=eA(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 eA(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 tA(){return`usage: mcp invoke <name> [tool] [--timeout <seconds>] [--flag value …]
1614
1614
 
1615
1615
  mcp invoke <name> List tools on <name>.
1616
1616
  mcp invoke <name> <tool> --help Show flags for <tool>.
@@ -1643,7 +1643,7 @@ Arguments are coerced according to the tool's JSON Schema:
1643
1643
 
1644
1644
  Re-fetches the tool catalog and \`apps/list\` for <name>. Does NOT refresh
1645
1645
  OAuth tokens — for OAuth token refresh use \`mcp auth <name>\`.
1646
- `);let n=S(e,{});if(`error`in n)return Hk(n.error);let r=n.positionals[0];if(!r)return W(`mcp refresh: expected <name>`);let{ensureMcpProviderRegistered:i}=await import(`./provider-3--cEcAF.js`);await i(r);let{getServer:a,setServer:o}=await import(`./store-ChWzn_H8.js`).then(e=>e.r),s=await a(r,t.fs);if(!s)return W(`mcp refresh: unknown server "${r}"`);let{McpClient:c,McpAuthRequiredError:l}=await import(`./client-B6iKb_ye.js`).then(e=>e.n),u=new c({url:s.url,fetchImpl:t.fetchImpl,headers:s.headers,getAuthHeader:s.auth?()=>xA(r):void 0});try{await u.initialize()}catch(e){if(e instanceof l)return W(`mcp refresh: server "${r}" returned 401 — token may have expired. Run \`mcp auth ${r}\` to re-authenticate.`);throw e}let d=await u.toolsList(),f=await u.appsList();await o(r,{...s,protocolVersion:u.getNegotiatedProtocolVersion(),tools:d,apps:f,lastRefreshedAt:new Date().toISOString()},t.fs);let p=await kA(r,f,t);return U(`Refreshed "${r}" — tools: ${d.length}, apps: ${f.length} (${p} sprinkle${p===1?``:`s`})\n`)}async function yA(e,t){if(C(e))return U(`usage: mcp auth <name> [--silent | --interactive]
1646
+ `);let n=S(e,{});if(`error`in n)return Hk(n.error);let r=n.positionals[0];if(!r)return W(`mcp refresh: expected <name>`);let{ensureMcpProviderRegistered:i}=await import(`./provider-Df8LFEZ7.js`);await i(r);let{getServer:a,setServer:o}=await import(`./store-CzlK9KIc.js`).then(e=>e.r),s=await a(r,t.fs);if(!s)return W(`mcp refresh: unknown server "${r}"`);let{McpClient:c,McpAuthRequiredError:l}=await import(`./client-BDN4zG90.js`).then(e=>e.n),u=new c({url:s.url,fetchImpl:t.fetchImpl,headers:s.headers,getAuthHeader:s.auth?()=>xA(r):void 0});try{await u.initialize()}catch(e){if(e instanceof l)return W(`mcp refresh: server "${r}" returned 401 — token may have expired. Run \`mcp auth ${r}\` to re-authenticate.`);throw e}let d=await u.toolsList(),f=await u.appsList();await o(r,{...s,protocolVersion:u.getNegotiatedProtocolVersion(),tools:d,apps:f,lastRefreshedAt:new Date().toISOString()},t.fs);let p=await kA(r,f,t);return U(`Refreshed "${r}" — tools: ${d.length}, apps: ${f.length} (${p} sprinkle${p===1?``:`s`})\n`)}async function yA(e,t){if(C(e))return U(`usage: mcp auth <name> [--silent | --interactive]
1647
1647
 
1648
1648
  Re-authenticate an existing MCP server. By default, attempts a silent
1649
1649
  token renewal using the persisted refresh_token; if that returns no
@@ -1655,7 +1655,7 @@ Options:
1655
1655
  -i, --interactive Skip silent renewal and open the OAuth popup
1656
1656
  directly. Use after revoking a refresh token or
1657
1657
  when the AS no longer accepts the cached one.
1658
- `);let n=S(e,{bool:zk});if(`error`in n)return Hk(n.error);let r=n.positionals[0];if(!r)return W(`mcp auth: expected <name>`);let i=n.bools.has(`--silent`)||n.bools.has(`-s`),a=n.bools.has(`--interactive`)||n.bools.has(`-i`);if(i&&a)return W(`mcp auth: --silent and --interactive are mutually exclusive`);let{ensureMcpProviderRegistered:o}=await import(`./provider-3--cEcAF.js`),s=await o(r,{fetchImpl:t.oauthFetchImpl,launcher:t.oauthLauncher}),{getServer:c}=await import(`./store-ChWzn_H8.js`).then(e=>e.r),l=await c(r,t.fs);if(!l)return W(`mcp auth: unknown server "${r}" (run \`mcp list\` to see configured servers)`);if(!l.auth)return W(`mcp auth: server "${r}" does not use OAuth`);if(!s)return W(`mcp auth: failed to register provider for "${r}"`);let u=`mcp:${r}`,{getRegisteredProviderConfig:d}=await import(`./providers-DVvrXbtx.js`).then(e=>e.r),f=d(u);if(!f)return W(`mcp auth: provider "${u}" is not registered`);if(a)return await bA(r,f,t);if(!f.onSilentRenew)return i?W(`mcp auth: provider "${u}" does not support silent renewal; retry without --silent`):await bA(r,f,t);let p=null;try{p=await f.onSilentRenew()}catch(e){let t=e instanceof Error?e.message:String(e);if(i)return W(`mcp auth: silent renewal for "${r}" failed (${t}); retry without --silent to run the interactive flow`);Bk.debug(`mcp auth: silent renewal threw, falling back to interactive`,{name:r,error:t})}return p?U(`Re-authenticated "${r}" via silent renewal (provider ${u})\n`):i?W(`mcp auth: silent renewal for "${r}" returned no token; retry without --silent to run the interactive flow`):await bA(r,f,t)}async function bA(e,t,n){if(!t.onOAuthLogin)return W(`mcp auth: provider "${t.id}" does not support interactive OAuth login`);let r=n.oauthLauncher??await SA(),i=!1;return await t.onOAuthLogin(r,()=>{i=!0}),i?U(`Re-authenticated "${e}" via interactive login (provider ${t.id})\n`):W(`mcp auth: interactive login for "${e}" did not complete`)}async function xA(e){let t=`mcp:${e}`,{getOAuthAccountInfo:n}=await import(`./account-store-BEqmysw9.js`).then(e=>e.t),r=n(t);if(!r)return null;if(r.expired){try{let{getRegisteredProviderConfig:e}=await import(`./providers-DVvrXbtx.js`).then(e=>e.r),n=await e(t)?.onSilentRenew?.();if(n)return`Bearer ${n}`}catch(e){Bk.debug(`silent renewal threw`,{providerId:t,error:e instanceof Error?e.message:String(e)})}return null}return`Bearer ${r.token}`}async function SA(){let{createOAuthLauncher:e}=await import(`./oauth-service-IlBYPvwr.js`);return e()}async function CA(e){if(e)return e;let{createProxiedFetch:t}=await import(`./proxied-fetch-DEK8DT-z.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 wA(e){if(e)return e;let{VirtualFS:t}=await import(`./fs-CBH-hQcI.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}\`.
1658
+ `);let n=S(e,{bool:zk});if(`error`in n)return Hk(n.error);let r=n.positionals[0];if(!r)return W(`mcp auth: expected <name>`);let i=n.bools.has(`--silent`)||n.bools.has(`-s`),a=n.bools.has(`--interactive`)||n.bools.has(`-i`);if(i&&a)return W(`mcp auth: --silent and --interactive are mutually exclusive`);let{ensureMcpProviderRegistered:o}=await import(`./provider-Df8LFEZ7.js`),s=await o(r,{fetchImpl:t.oauthFetchImpl,launcher:t.oauthLauncher}),{getServer:c}=await import(`./store-CzlK9KIc.js`).then(e=>e.r),l=await c(r,t.fs);if(!l)return W(`mcp auth: unknown server "${r}" (run \`mcp list\` to see configured servers)`);if(!l.auth)return W(`mcp auth: server "${r}" does not use OAuth`);if(!s)return W(`mcp auth: failed to register provider for "${r}"`);let u=`mcp:${r}`,{getRegisteredProviderConfig:d}=await import(`./providers-T_FH_8cU.js`).then(e=>e.r),f=d(u);if(!f)return W(`mcp auth: provider "${u}" is not registered`);if(a)return await bA(r,f,t);if(!f.onSilentRenew)return i?W(`mcp auth: provider "${u}" does not support silent renewal; retry without --silent`):await bA(r,f,t);let p=null;try{p=await f.onSilentRenew()}catch(e){let t=e instanceof Error?e.message:String(e);if(i)return W(`mcp auth: silent renewal for "${r}" failed (${t}); retry without --silent to run the interactive flow`);Bk.debug(`mcp auth: silent renewal threw, falling back to interactive`,{name:r,error:t})}return p?U(`Re-authenticated "${r}" via silent renewal (provider ${u})\n`):i?W(`mcp auth: silent renewal for "${r}" returned no token; retry without --silent to run the interactive flow`):await bA(r,f,t)}async function bA(e,t,n){if(!t.onOAuthLogin)return W(`mcp auth: provider "${t.id}" does not support interactive OAuth login`);let r=n.oauthLauncher??await SA(),i=!1;return await t.onOAuthLogin(r,()=>{i=!0}),i?U(`Re-authenticated "${e}" via interactive login (provider ${t.id})\n`):W(`mcp auth: interactive login for "${e}" did not complete`)}async function xA(e){let t=`mcp:${e}`,{getOAuthAccountInfo:n}=await import(`./account-store-B05_LKnj.js`).then(e=>e.t),r=n(t);if(!r)return null;if(r.expired){try{let{getRegisteredProviderConfig:e}=await import(`./providers-T_FH_8cU.js`).then(e=>e.r),n=await e(t)?.onSilentRenew?.();if(n)return`Bearer ${n}`}catch(e){Bk.debug(`silent renewal threw`,{providerId:t,error:e instanceof Error?e.message:String(e)})}return null}return`Bearer ${r.token}`}async function SA(){let{createOAuthLauncher:e}=await import(`./oauth-service-UTPOqIwj.js`);return e()}async function CA(e){if(e)return e;let{createProxiedFetch:t}=await import(`./proxied-fetch-DARKNygr.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 wA(e){if(e)return e;let{VirtualFS:t}=await import(`./fs-Bq8bUwe2.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}\`.
1659
1659
  // Auto-generated by \`mcp add ${e}\`; do not edit by hand.
1660
1660
  const { promisify } = require('util');
1661
1661
  const { exec } = require('child_process');
@@ -1684,7 +1684,7 @@ try {
1684
1684
  if (stdout) process.stdout.write(stdout);
1685
1685
  if (stderr) process.stderr.write(stderr);
1686
1686
  process.exit(exitCode);
1687
- `}async function EA(e,t){let n=await wA(t.fs);await n.mkdir(Vk,{recursive:!0}),await n.writeFile(`${Vk}/${e}.jsh`,TA(e)),t.scriptCatalog?.invalidateJsh()}async function DA(e,t){let n=await wA(t.fs),r=`${Vk}/${e}.jsh`;try{await n.exists(r)&&await n.rm(r)}catch(e){Bk.debug(`alias removal failed`,{path:r,error:e instanceof Error?e.message:String(e)})}t.scriptCatalog?.invalidateJsh()}async function OA(e,t){let{removeAppSprinkles:n}=await import(`./apps-dzoLZ_5W.js`);await n(e,t.fs)}async function kA(e,t,n){try{let{materializeAppSprinkles:r}=await import(`./apps-dzoLZ_5W.js`);return(await r(e,t,n.fs)).length}catch(t){return Bk.warn(`mcp: failed to materialize app sprinkles`,{name:e,error:t instanceof Error?t.message:String(t)}),0}}function AA(e){return{stdout:``,stderr:`meminfo: ${e}\n`,exitCode:1}}function jA(e){if(e<1024)return`${e} B`;let t=[`KB`,`MB`,`GB`],n=e,r=`B`;for(let e of t){if(n<1024)break;n/=1024,r=e}return`${n.toFixed(1)} ${r}`}function MA(e){return e.attribution.length===0?`(shared)`:e.attribution.map(e=>{let t=e.container?.src??e.container?.id??e.url??`?`;return e.scope?`${e.scope} ${t}`:t}).join(`, `)}function NA(){let e=globalThis.performance,t=e?.measureUserAgentSpecificMemory;return t?t.bind(e):null}function PA(e){if(e[0]===`--help`||e[0]===`-h`||e[0]===`help`)return{help:!0};let t=!1;for(let n of e){if(n!==`--json`)return{error:`unknown option '${n}' — see \`meminfo --help\``};t=!0}return{help:!1,json:t}}function FA(e){let t=[`total: ${jA(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(`${jA(e.bytes).padEnd(10)} ${e.types.join(`,`).padEnd(20)} ${MA(e)}`)}return`${t.join(`
1687
+ `}async function EA(e,t){let n=await wA(t.fs);await n.mkdir(Vk,{recursive:!0}),await n.writeFile(`${Vk}/${e}.jsh`,TA(e)),t.scriptCatalog?.invalidateJsh()}async function DA(e,t){let n=await wA(t.fs),r=`${Vk}/${e}.jsh`;try{await n.exists(r)&&await n.rm(r)}catch(e){Bk.debug(`alias removal failed`,{path:r,error:e instanceof Error?e.message:String(e)})}t.scriptCatalog?.invalidateJsh()}async function OA(e,t){let{removeAppSprinkles:n}=await import(`./apps-BGe9_zJ7.js`);await n(e,t.fs)}async function kA(e,t,n){try{let{materializeAppSprinkles:r}=await import(`./apps-BGe9_zJ7.js`);return(await r(e,t,n.fs)).length}catch(t){return Bk.warn(`mcp: failed to materialize app sprinkles`,{name:e,error:t instanceof Error?t.message:String(t)}),0}}function AA(e){return{stdout:``,stderr:`meminfo: ${e}\n`,exitCode:1}}function jA(e){if(e<1024)return`${e} B`;let t=[`KB`,`MB`,`GB`],n=e,r=`B`;for(let e of t){if(n<1024)break;n/=1024,r=e}return`${n.toFixed(1)} ${r}`}function MA(e){return e.attribution.length===0?`(shared)`:e.attribution.map(e=>{let t=e.container?.src??e.container?.id??e.url??`?`;return e.scope?`${e.scope} ${t}`:t}).join(`, `)}function NA(){let e=globalThis.performance,t=e?.measureUserAgentSpecificMemory;return t?t.bind(e):null}function PA(e){if(e[0]===`--help`||e[0]===`-h`||e[0]===`help`)return{help:!0};let t=!1;for(let n of e){if(n!==`--json`)return{error:`unknown option '${n}' — see \`meminfo --help\``};t=!0}return{help:!1,json:t}}function FA(e){let t=[`total: ${jA(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(`${jA(e.bytes).padEnd(10)} ${e.types.join(`,`).padEnd(20)} ${MA(e)}`)}return`${t.join(`
1688
1688
  `)}\n`}function IA(e={}){return x(`meminfo`,async t=>{let n=PA(t);if(`error`in n)return AA(n.error);if(n.help)return{stdout:`meminfo - agent-cluster memory diagnostics
1689
1689
 
1690
1690
  Usage:
@@ -1696,7 +1696,7 @@ Notes:
1696
1696
  Document-Isolation-Policy). Embedded floats cannot be isolated and
1697
1697
  report why instead.
1698
1698
  - The browser randomizes measurement timing — expect a short delay.
1699
- `,stderr:``,exitCode:0};let r=e.isIsolated?e.isIsolated():globalThis.crossOriginIsolated===!0,i=e.measure??NA();if(!r&&!e.measure)return AA(`memory measurement requires a cross-origin-isolated runtime (Document-Isolation-Policy) — this runtime is not isolated`);if(!i)return AA(`performance.measureUserAgentSpecificMemory is not available in this browser`);let a;try{a=await i()}catch(e){return AA(e instanceof Error?e.message:String(e))}return n.json?{stdout:`${JSON.stringify(a,null,2)}\n`,stderr:``,exitCode:0}:{stdout:FA(a),stderr:``,exitCode:0}})}function LA(e){return x(`memory`,async t=>{let{runMemory:n}=await import(`./run-vEDh-Me-.js`);return n(t,e)})}function RA(){return x(`mktemp`,async(e,t)=>{let{runMktemp:n}=await import(`./run-dAJe7sKp.js`);return n(e,t)})}const zA=`/.cache/artificial-analysis.json`,BA=[`--all`,`--all-versions`,`--json`,`--refresh`,`--no-benchmarks`,`--help`,`-h`],VA=[`--provider`];function HA(e){return{stdout:``,stderr:e.endsWith(`
1699
+ `,stderr:``,exitCode:0};let r=e.isIsolated?e.isIsolated():globalThis.crossOriginIsolated===!0,i=e.measure??NA();if(!r&&!e.measure)return AA(`memory measurement requires a cross-origin-isolated runtime (Document-Isolation-Policy) — this runtime is not isolated`);if(!i)return AA(`performance.measureUserAgentSpecificMemory is not available in this browser`);let a;try{a=await i()}catch(e){return AA(e instanceof Error?e.message:String(e))}return n.json?{stdout:`${JSON.stringify(a,null,2)}\n`,stderr:``,exitCode:0}:{stdout:FA(a),stderr:``,exitCode:0}})}function LA(e){return x(`memory`,async t=>{let{runMemory:n}=await import(`./run-IexPmM2B.js`);return n(t,e)})}function RA(){return x(`mktemp`,async(e,t)=>{let{runMktemp:n}=await import(`./run-dAJe7sKp.js`);return n(e,t)})}const zA=`/.cache/artificial-analysis.json`,BA=[`--all`,`--all-versions`,`--json`,`--refresh`,`--no-benchmarks`,`--help`,`-h`],VA=[`--provider`];function HA(e){return{stdout:``,stderr:e.endsWith(`
1700
1700
  `)?e:`${e}\n`,exitCode:1}}async function UA(e){try{let t=await e.readFile(zA),n=JSON.parse(t);if(Date.now()-n.fetchedAt<864e5)return n.models}catch{}return null}function WA(){try{return localStorage.getItem(`aa_api_key`)}catch{return null}}function GA(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 KA(e,t){let n={fetchedAt:Date.now(),models:t};try{await e.mkdir(`/.cache`,{recursive:!0}),await e.writeFile(zA,JSON.stringify(n))}catch{}}async function qA(e,t=!1){if(e&&!t){let t=await UA(e);if(t)return t}let n={Accept:`application/json`},r=WA();r&&(n[`x-api-key`]=r);let i=ie(),a;try{a=await i(`https://artificialanalysis.ai/api/v2/data/llms/models`,{method:`GET`,headers:n})}catch{return[]}if(a.status===401||a.status<200||a.status>=300)return[];let o;try{o=JSON.parse(new TextDecoder().decode(a.body))}catch{return[]}if(typeof o!=`object`||!o)return[];let s=o,c=GA(Array.isArray(s)?s:s.data??s.models??[]);return e&&c.length>0&&await KA(e,c),c}function JA(e){return e.toLowerCase().replace(/\./g,`-`).replace(/-\d{8}$/,``).replace(/-\d{4}$/,``)}function YA(e,t){let n=e.toLowerCase(),r=t.find(e=>e.slug===n);if(r)return r;let i=JA(e),a=t.find(e=>JA(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 XA(){return`models - list available LLM models
1701
1701
 
1702
1702
  Usage: models [options]
@@ -1711,7 +1711,7 @@ Options:
1711
1711
  -h, --help Show this help message
1712
1712
  `}function ZA(e){return e>=1e6?`${(e/1e6).toFixed(1)}M`.replace(`.0M`,`M`):e>=1e3?`${(e/1e3).toFixed(0)}K`:`${e}`}function QA(e){return`$${e.toFixed(2)}`}const $A=/\b(embedding|embed|tts|whisper|dall-e|image-gen|audio|vision-preview)\b/i;function ej(e){let t=`${e.id} ${e.name??``}`;return!$A.test(t)}function tj(e){let t=e.match(/^(claude-(?:opus|sonnet|haiku))/);if(t)return t[1];let n=e.match(/^(gpt-\d+)(?:\.\d+)?(-[a-z][-a-z]*)?$/);if(n)return n[1]+(n[2]??``);let r=e.match(/^gemini-[\d.]+-(.+)$/);if(r)return`gemini-${r[1]}`;let i=e.match(/^gemini-(\d+)-(.+)$/);if(i)return`gemini-${i[2]}`;let a=e.match(/^grok-[\d.]+-([\w-]+)$/);if(a)return`grok-${a[1]}`;if(e.match(/^(grok)-[\d.]+$/))return`grok`;let o=e.match(/^(o\d+(?:-[a-z]+)?)(?:-\d.*)?$/);if(o)return o[1]}function nj(e){let t=e.toLowerCase();return t=t.replace(/-\d{8}$/,``),t=t.replace(/-\d{4}$/,``),t=t.replace(/-(preview|latest)$/,``),tj(t)??t.replace(/-[\d.]+$/,``)}function rj(e){let t=new Map;for(let n of e){let e=nj(n.id);(!t.has(e)||n.selected)&&t.set(e,n)}return[...t.values()]}function ij(e,t,n,r,i){let a=i?YA(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 aj(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=`${QA(e.cost.input)} / ${QA(e.cost.output)}`,a=`${ZA(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(`
1713
1713
  `)+`
1714
- `}function oj(e){let t=S(e,{bool:BA,value:VA});return`error`in t?t:{jsonMode:t.bools.has(`--json`),allMode:t.bools.has(`--all`),allVersions:t.bools.has(`--all-versions`),forceRefresh:t.bools.has(`--refresh`),noBenchmarks:t.bools.has(`--no-benchmarks`),explicitProvider:t.values.get(`--provider`)}}function sj(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 cj(e,t,n,r,i,a){let o=e.getProviderModels(t).filter(ej);if(o.length===0)return[];let s=o.map(e=>ij(e,t,n,r,i)).sort((e,t)=>t.cost.input-e.cost.input);return a||(s=rj(s)),s}function lj(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 uj(e,t){if(C(e,{valueFlags:VA}))return{stdout:XA(),stderr:``,exitCode:0};let n=oj(e);if(`error`in n)return HA(`models: ${n.error}`);let r=await import(`./account-store-BEqmysw9.js`).then(e=>e.t);if(r.getAccounts().length===0)return HA(`No provider accounts configured. Run the provider settings to add one.
1714
+ `}function oj(e){let t=S(e,{bool:BA,value:VA});return`error`in t?t:{jsonMode:t.bools.has(`--json`),allMode:t.bools.has(`--all`),allVersions:t.bools.has(`--all-versions`),forceRefresh:t.bools.has(`--refresh`),noBenchmarks:t.bools.has(`--no-benchmarks`),explicitProvider:t.values.get(`--provider`)}}function sj(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 cj(e,t,n,r,i,a){let o=e.getProviderModels(t).filter(ej);if(o.length===0)return[];let s=o.map(e=>ij(e,t,n,r,i)).sort((e,t)=>t.cost.input-e.cost.input);return a||(s=rj(s)),s}function lj(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 uj(e,t){if(C(e,{valueFlags:VA}))return{stdout:XA(),stderr:``,exitCode:0};let n=oj(e);if(`error`in n)return HA(`models: ${n.error}`);let r=await import(`./account-store-B05_LKnj.js`).then(e=>e.t);if(r.getAccounts().length===0)return HA(`No provider accounts configured. Run the provider settings to add one.
1715
1715
  `);let i=r.resolveCurrentModel(),a=i.id,o=i.provider,s=r.getSelectedProvider(),c=r.getSelectedModelId(),l;if(!n.noBenchmarks){let e=await qA(t,n.forceRefresh);e.length>0&&(l=e)}let u=sj(r,n,s);if(`error`in u)return HA(u.error);let d=[],f=[];for(let e of u){let t=cj(r,e,a,o,l,n.allVersions);if(t.length===0){if(!n.allMode)return HA(`No models available for provider ${e}.\n`);continue}if(d.push(...t),!n.jsonMode){let n=r.getProviderConfig(e);f.push(aj(n.name,e,t,!!l))}}return n.jsonMode?{stdout:JSON.stringify(d,null,2)+`
1716
1716
  `,stderr:``,exitCode:0}:(n.allVersions||f.push(`Showing latest versions only. Use --all-versions to see all.
1717
1717
  `),f.push(lj(o,a,s,c)),{stdout:f.join(`
@@ -1769,7 +1769,7 @@ Examples:
1769
1769
  `)}\n`,stderr:``,exitCode:0}}async function Fj(e,t,n){if(!t||!n)return{stdout:``,stderr:`oauth-domain add: requires <providerId> and <domain>
1770
1770
  `,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 Ij(e,t,n){if(!t||!n)return{stdout:``,stderr:`oauth-domain remove: requires <providerId> and <domain>
1771
1771
  `,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 Lj(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>
1772
- `,exitCode:1}}async function Rj(e,t,n,r){switch(t){case`list`:return Pj(e,n);case`add`:return Fj(e,n,r);case`remove`:return Ij(e,n,r);case`clear`:return Lj(e,n);default:return{stdout:``,stderr:`oauth-domain: unknown subcommand "${t}"\n${Mj()}`,exitCode:1}}}function zj(){return x(`oauth-domain`,async e=>{if(e.length===0||C(e))return{stdout:Mj(),stderr:``,exitCode:0};let t=S(e);if(`error`in t)return Nj(t.error);let[n,r,i]=t.positionals,a=await import(`./account-store-BEqmysw9.js`).then(e=>e.t);try{return await Rj(a,n,r,i)}catch(e){return Nj(e instanceof Error?e.message:String(e))}})}function Bj(){return x(`oauth-token`,async(e,t)=>{let{runOAuthToken:n}=await import(`./run-DgNh1E56.js`);return n(e,t)})}const Vj=[`--download`,`-d`,`--view`,`-v`],Hj=[`--size`],Uj={low:256,medium:768,high:1536};function Wj(){return{stdout:`usage: open [--download|-d] [--view|-v [--size <spec>]] <url|path> [url|path...]
1772
+ `,exitCode:1}}async function Rj(e,t,n,r){switch(t){case`list`:return Pj(e,n);case`add`:return Fj(e,n,r);case`remove`:return Ij(e,n,r);case`clear`:return Lj(e,n);default:return{stdout:``,stderr:`oauth-domain: unknown subcommand "${t}"\n${Mj()}`,exitCode:1}}}function zj(){return x(`oauth-domain`,async e=>{if(e.length===0||C(e))return{stdout:Mj(),stderr:``,exitCode:0};let t=S(e);if(`error`in t)return Nj(t.error);let[n,r,i]=t.positionals,a=await import(`./account-store-B05_LKnj.js`).then(e=>e.t);try{return await Rj(a,n,r,i)}catch(e){return Nj(e instanceof Error?e.message:String(e))}})}function Bj(){return x(`oauth-token`,async(e,t)=>{let{runOAuthToken:n}=await import(`./run-DgVV_DFr.js`);return n(e,t)})}const Vj=[`--download`,`-d`,`--view`,`-v`],Hj=[`--size`],Uj={low:256,medium:768,high:1536};function Wj(){return{stdout:`usage: open [--download|-d] [--view|-v [--size <spec>]] <url|path> [url|path...]
1773
1773
 
1774
1774
  VFS paths are served in a new browser tab via the preview service worker.
1775
1775
  URLs (http/https/etc.) are opened directly in a new tab.
@@ -1795,7 +1795,7 @@ Examples:
1795
1795
  `);let i=!1;try{i=(await t.fs.stat(e)).isDirectory}catch{}let a=await fr(t.fs,i?e:xr(e)),o=Hr(e,a),s;try{s=await r(o)}catch(e){return G(`${e instanceof Error?e.message:String(e)}\n`)}return $j(`opened ${e} → ${o}${eM(s)}`)}async function sM(e,t,n,r){if(!mr(e)&&e.endsWith(`.shtml`)&&t.fs)return nM(e,t,r.sprinkleManager,r.canOpenWindow,r.openExternal);if(!n.view&&!r.canOpenWindow)return G(`open: browser APIs are unavailable in this environment
1796
1796
  `);if(mr(e))return rM(e,r.canOpenWindow,r.openExternal);let i=t.fs.resolvePath(t.cwd,e);return n.view?iM(e,i,t,n.sizeSpec):n.download?aM(e,i,t,r.hasDom):oM(i,t,r.canOpenWindow,r.openExternal)}function cM(e){return x(`open`,async(t,n)=>{if(t.length===0||C(t,{valueFlags:Hj}))return Wj();let r=Qj(t);if(`error`in r)return{stdout:``,stderr:`${r.error}\n`,exitCode:1};let{download:i,view:a,sizeSpec:s,targets:c}=r;if(c.length===0)return Wj();let l=globalThis.__slicc_sprinkleManager,u=typeof window<`u`&&typeof document<`u`,d=u?null:o(),f={canOpenWindow:!!e||u||!!d,hasDom:u,sprinkleManager:l,openExternal:tM(e,u,d)},p=[];for(let e of c){let t=await sM(e,n,{view:a,download:i,sizeSpec:s},f);if(!t.ok)return t.result;p.push(t.message)}return{stdout:p.join(`
1797
1797
  `)+`
1798
- `,stderr:``,exitCode:0}})}function lM(){return x(`patch`,async(e,t)=>{let{runPatch:n}=await import(`./run-BOc9XLhg.js`);return n(e,t)})}function uM(e=`pdftk`){return x(e,async(t,n)=>{let{runPdftk:r}=await import(`./run-B-t7kWH3.js`);return r(e,t,n)})}function dM(){return{stdout:`usage: pdftoppm [options] <input.pdf> [output-prefix]
1798
+ `,stderr:``,exitCode:0}})}function lM(){return x(`patch`,async(e,t)=>{let{runPatch:n}=await import(`./run-COfTem8j.js`);return n(e,t)})}function uM(e=`pdftk`){return x(e,async(t,n)=>{let{runPdftk:r}=await import(`./run-B-t7kWH3.js`);return r(e,t,n)})}function dM(){return{stdout:`usage: pdftoppm [options] <input.pdf> [output-prefix]
1799
1799
 
1800
1800
  Rasterize PDF pages to images. Writes <prefix>-<n>.<ext> per page, where <n>
1801
1801
  is zero-padded to the digit width of the last page (out-1.png for a 9-page
@@ -1855,7 +1855,7 @@ Examples:
1855
1855
  plugin list
1856
1856
  plugin info my-plugin
1857
1857
  plugin remove my-plugin
1858
- `}function OM(e={}){return x(`plugin`,async(t,n)=>{if(t.length===0||t[0]===`--help`||t[0]===`-h`)return TM(DM());let r=t[0],i=t.slice(1),a=n?.cwd??`/`;try{switch(r){case`install`:case`add`:return await FM(i,a,e);case`list`:case`ls`:return await zM(i,e);case`info`:return await BM(i,e);case`validate`:return await VM(i,a,e,Li(n?.env));case`remove`:case`rm`:case`delete`:return await HM(i,e);default:return K(`plugin: unknown subcommand "${r}" (try \`plugin --help\`)`)}}catch(e){return K(`plugin ${r}: ${e instanceof Error?e.message:String(e)}`)}})}async function kM(e){if(e.fs)return e.fs;let{VirtualFS:t}=await import(`./fs-CBH-hQcI.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 AM(e,t,n){let r=UM(t,e);if(await n.exists(r))return{kind:`local`,root:r};let{parseGitHubRef:i}=await import(`./github-install-B6W4-xcc.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 jM(e){let t=e.replace(/[^A-Za-z0-9._-]+/g,`-`);return/^\.+$/.test(t)?t.replace(/\./g,`_`):t}function MM(e){let t=[e.owner,e.repo,...e.path?[e.path]:[]];return`${wM}/${t.map(jM).join(`--`)}`}async function NM(e,t,n,r){let{fetchRepoZip:i,stripZipPrefix:a,writeZipFilesToDir:o}=await import(`./github-zip-Bv1smNmy.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 PM(e,t){try{await e.rm(t,{recursive:!0})}catch{}}async function FM(e,t,n){if(C(e))return TM(`usage: plugin install <path|repo>
1858
+ `}function OM(e={}){return x(`plugin`,async(t,n)=>{if(t.length===0||t[0]===`--help`||t[0]===`-h`)return TM(DM());let r=t[0],i=t.slice(1),a=n?.cwd??`/`;try{switch(r){case`install`:case`add`:return await FM(i,a,e);case`list`:case`ls`:return await zM(i,e);case`info`:return await BM(i,e);case`validate`:return await VM(i,a,e,Li(n?.env));case`remove`:case`rm`:case`delete`:return await HM(i,e);default:return K(`plugin: unknown subcommand "${r}" (try \`plugin --help\`)`)}}catch(e){return K(`plugin ${r}: ${e instanceof Error?e.message:String(e)}`)}})}async function kM(e){if(e.fs)return e.fs;let{VirtualFS:t}=await import(`./fs-Bq8bUwe2.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 AM(e,t,n){let r=UM(t,e);if(await n.exists(r))return{kind:`local`,root:r};let{parseGitHubRef:i}=await import(`./github-install--_xp8s-S.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 jM(e){let t=e.replace(/[^A-Za-z0-9._-]+/g,`-`);return/^\.+$/.test(t)?t.replace(/\./g,`_`):t}function MM(e){let t=[e.owner,e.repo,...e.path?[e.path]:[]];return`${wM}/${t.map(jM).join(`--`)}`}async function NM(e,t,n,r){let{fetchRepoZip:i,stripZipPrefix:a,writeZipFilesToDir:o}=await import(`./github-zip-Bs35nBig.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 PM(e,t){try{await e.rm(t,{recursive:!0})}catch{}}async function FM(e,t,n){if(C(e))return TM(`usage: plugin install <path|repo>
1859
1859
 
1860
1860
  Loads the Agent Plugins package at <path>, or downloads it from a GitHub
1861
1861
  reference (owner/repo, owner/repo@branch, or
@@ -1866,19 +1866,19 @@ mcp.json. On success the plugin is recorded in
1866
1866
  /workspace/.plugins/plugins.json — its skills then surface through the
1867
1867
  standard skills discovery, and each supported streamable-http MCP server
1868
1868
  is registered in the MCP store as "<plugin>:<server>".
1869
- `);let r=EM(`install`,e);if(!(`ok`in r))return r;if(r.positionals.length<1)return K(`plugin install: expected <path|repo>`);let i=await kM(n),a=await AM(r.positionals[0],t,i);if(a.kind===`error`)return K(`plugin install: ${a.message}`);let o,s;if(a.kind===`github`){if(!n.fetch)return K(`plugin install: GitHub installs are unavailable (no network fetch configured)`);o=MM(a.ref),s=a.ref.display;let e=await NM(a.ref,o,i,n.fetch);if(e)return K(`plugin install: ${e}`)}else o=a.root;let{loadPluginFromDirectory:c}=await import(`./loader-Dw-TPPKt.js`),l=await c(i,o);if(!l.ok)return a.kind===`github`&&await PM(i,o),K(`plugin install: plugin at ${s??o} was rejected:\n${WM(l.diagnostics)}`);let{plugin:u}=l,d=u.manifest.name,{getInstalledPlugin:f,setInstalledPlugin:p}=await import(`./store-ByUcAFUa.js`),m=await f(d,n.fs);if(m&&m.root!==o)return a.kind===`github`&&await PM(i,o),K(`plugin install: a plugin named "${d}" is already installed from ${m.root} (remove it first)`);let h=await RM(u,n),g=await LM(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(IM(u,h,g,s??o,l.diagnostics))}function IM(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:`,WM(i)),c.join(`
1869
+ `);let r=EM(`install`,e);if(!(`ok`in r))return r;if(r.positionals.length<1)return K(`plugin install: expected <path|repo>`);let i=await kM(n),a=await AM(r.positionals[0],t,i);if(a.kind===`error`)return K(`plugin install: ${a.message}`);let o,s;if(a.kind===`github`){if(!n.fetch)return K(`plugin install: GitHub installs are unavailable (no network fetch configured)`);o=MM(a.ref),s=a.ref.display;let e=await NM(a.ref,o,i,n.fetch);if(e)return K(`plugin install: ${e}`)}else o=a.root;let{loadPluginFromDirectory:c}=await import(`./loader-Dw-TPPKt.js`),l=await c(i,o);if(!l.ok)return a.kind===`github`&&await PM(i,o),K(`plugin install: plugin at ${s??o} was rejected:\n${WM(l.diagnostics)}`);let{plugin:u}=l,d=u.manifest.name,{getInstalledPlugin:f,setInstalledPlugin:p}=await import(`./store-C-AW4ogv.js`),m=await f(d,n.fs);if(m&&m.root!==o)return a.kind===`github`&&await PM(i,o),K(`plugin install: a plugin named "${d}" is already installed from ${m.root} (remove it first)`);let h=await RM(u,n),g=await LM(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(IM(u,h,g,s??o,l.diagnostics))}function IM(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:`,WM(i)),c.join(`
1870
1870
  `)+`
1871
- `}async function LM(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-ChWzn_H8.js`).then(e=>e.r),s=0;for(let t of i)(await o(t,r.fs))?.pluginOrigin===e&&await a(t,r.fs)&&(s+=1);return s}async function RM(e,t){let n=e.mcp.servers.filter(e=>e.status===`supported`);if(n.length===0)return{registered:[],conflicts:[]};let{getServer:r,setServer:i}=await import(`./store-ChWzn_H8.js`).then(e=>e.r),{McpClient:a}=await import(`./client-B6iKb_ye.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 zM(e,t){if(C(e))return TM(`usage: plugin list
1872
- `);let n=EM(`list`,e);if(!(`ok`in n))return n;let{listInstalledPlugins:r}=await import(`./store-ByUcAFUa.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(`
1871
+ `}async function LM(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-CzlK9KIc.js`).then(e=>e.r),s=0;for(let t of i)(await o(t,r.fs))?.pluginOrigin===e&&await a(t,r.fs)&&(s+=1);return s}async function RM(e,t){let n=e.mcp.servers.filter(e=>e.status===`supported`);if(n.length===0)return{registered:[],conflicts:[]};let{getServer:r,setServer:i}=await import(`./store-CzlK9KIc.js`).then(e=>e.r),{McpClient:a}=await import(`./client-BDN4zG90.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 zM(e,t){if(C(e))return TM(`usage: plugin list
1872
+ `);let n=EM(`list`,e);if(!(`ok`in n))return n;let{listInstalledPlugins:r}=await import(`./store-C-AW4ogv.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(`
1873
1873
  `)+`
1874
1874
  `)}async function BM(e,t){if(C(e))return TM(`usage: plugin info <name>
1875
- `);let n=EM(`info`,e);if(!(`ok`in n))return n;if(n.positionals.length<1)return K(`plugin info: expected <name>`);let r=n.positionals[0],{getInstalledPlugin:i}=await import(`./store-ByUcAFUa.js`),a=await i(r,t.fs);if(!a)return K(`plugin info: no installed plugin named "${r}"`);let o=await kM(t),{loadPluginFromDirectory:s}=await import(`./loader-Dw-TPPKt.js`),c=await s(o,a.root);if(!c.ok)return K(`plugin info: plugin at ${a.root} no longer loads:\n${WM(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:`,WM(c.diagnostics)),TM(d.join(`
1875
+ `);let n=EM(`info`,e);if(!(`ok`in n))return n;if(n.positionals.length<1)return K(`plugin info: expected <name>`);let r=n.positionals[0],{getInstalledPlugin:i}=await import(`./store-C-AW4ogv.js`),a=await i(r,t.fs);if(!a)return K(`plugin info: no installed plugin named "${r}"`);let o=await kM(t),{loadPluginFromDirectory:s}=await import(`./loader-Dw-TPPKt.js`),c=await s(o,a.root);if(!c.ok)return K(`plugin info: plugin at ${a.root} no longer loads:\n${WM(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:`,WM(c.diagnostics)),TM(d.join(`
1876
1876
  `)+`
1877
1877
  `)}async function VM(e,t,n,r){if(C(e))return TM(`usage: plugin validate <path|repo>
1878
1878
  `);let i=EM(`validate`,e);if(!(`ok`in i))return i;if(i.positionals.length<1)return K(`plugin validate: expected <path|repo>`);let a=await kM(n),o=await AM(i.positionals[0],t,a);if(o.kind===`error`)return K(`plugin validate: ${o.message}`);let s,c=null;if(o.kind===`github`){if(!n.fetch)return K(`plugin validate: GitHub sources are unavailable (no network fetch configured)`);c=`${r}/.plugin-validate/${MM(o.ref).split(`/`).pop()}`;let e=await NM(o.ref,c,a,n.fetch);if(e)return K(`plugin validate: ${e}`);s=c}else s=o.root;let{loadPluginFromDirectory:l}=await import(`./loader-Dw-TPPKt.js`),u;try{u=await l(a,s)}finally{c&&await PM(a,c)}if(!u.ok)return{stdout:``,stderr:`plugin validate: REJECTED\n${WM(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:`,WM(u.diagnostics)),TM(p.join(`
1879
1879
  `)+`
1880
1880
  `)}async function HM(e,t){if(C(e))return TM(`usage: plugin remove <name>
1881
- `);let n=EM(`remove`,e);if(!(`ok`in n))return n;if(n.positionals.length<1)return K(`plugin remove: expected <name>`);let r=n.positionals[0],{getInstalledPlugin:i,deleteInstalledPlugin:a}=await import(`./store-ByUcAFUa.js`),o=await i(r,t.fs);if(!o)return K(`plugin remove: no installed plugin named "${r}"`);let s=0;if(o.mcpServerNames&&o.mcpServerNames.length>0){let{deleteServer:e,getServer:n}=await import(`./store-ChWzn_H8.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(`${wM}/`);return c&&await PM(await kM(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(`
1881
+ `);let n=EM(`remove`,e);if(!(`ok`in n))return n;if(n.positionals.length<1)return K(`plugin remove: expected <name>`);let r=n.positionals[0],{getInstalledPlugin:i,deleteInstalledPlugin:a}=await import(`./store-C-AW4ogv.js`),o=await i(r,t.fs);if(!o)return K(`plugin remove: no installed plugin named "${r}"`);let s=0;if(o.mcpServerNames&&o.mcpServerNames.length>0){let{deleteServer:e,getServer:n}=await import(`./store-CzlK9KIc.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(`${wM}/`);return c&&await PM(await kM(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(`
1882
1882
  `)+`
1883
1883
  `)}function UM(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 WM(e){return e.map(e=>` ${e.level===`error`?`error`:`warn `} [${e.component}] ${e.message}`).join(`
1884
1884
  `)}const GM=[`pid`,`ppid`,`kind`,`stat`,`start`,`scoop`,`command`],KM=[`pid`,`ppid`,`stat`,`start`,`scoop`,`command`],qM={running:`R`,pending:`S`,exited:`Z`,killed:`K`},JM=[`-a`,`-A`,`-e`,`--all`,`-T`,`--tree`],YM=[`-o`,`--columns`];function XM(e={}){return x(`ps`,async t=>{if(C(t,{valueFlags:YM}))return cN();let n=e.processManager??ZM();if(!n)return{stdout:``,stderr:`ps: no process manager available in this runtime
@@ -1972,7 +1972,7 @@ Examples:
1972
1972
  `)+`
1973
1973
  `,stderr:``,exitCode:0}}try{return{stdout:(await e.panelRpc.call(`list-voices`,void 0)).voices.map(e=>JN(e)).join(`
1974
1974
  `)+`
1975
- `,stderr:``,exitCode:0}}catch(e){return q(BN(e))}}async function XN(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 UN()).map(e=>({name:e.name}));return[...n,...r]}async function ZN(e,t){let n=(await XN(e)).find(e=>e.name.toLowerCase().includes(t.toLowerCase()));return n?{resolved:n.name}:{error:q(`voice "${t}" not found. Use --list to see available voices.`)}}async function QN(e,t){try{if(e.local){let{kokoroStatus:e,kokoroWarmup:n}=await import(`./speech-page-realm-stub-C7EPKrHd.js`);return{stdout:zN(t?n():e()),stderr:``,exitCode:0}}return{stdout:zN(t?await e.panelRpc.call(`speak-warmup`,void 0):await e.panelRpc.call(`speak-status`,void 0)),stderr:``,exitCode:0}}catch(e){return q(BN(e))}}async function $N(e,t){return t.includes(`--list`)?YN(e):t.includes(`--status`)?QN(e,!1):t.includes(`--warmup`)?QN(e,!0):null}async function eP(e){try{let{speak:t}=await import(`./speech-page-realm-stub-C7EPKrHd.js`);return await t(e),{stdout:``,stderr:``,exitCode:0}}catch(e){return q(`speech synthesis error: ${BN(e)}`)}}async function tP(e,t){try{return await e.panelRpc.call(`speak-text`,t,{timeoutMs:3e5}),{stdout:``,stderr:``,exitCode:0}}catch(e){return q(BN(e))}}async function nP(e){let{synthesizeToWav:t}=await import(`./speech-page-realm-stub-C7EPKrHd.js`);try{return{bytes:await t(e)}}catch(e){return q(BN(e))}}async function rP(e,t){try{let n=await e.panelRpc.call(`synthesize-to-wav`,{text:t.text,lang:t.lang,...t.voice?{voice:t.voice}:{},rate:t.rate},{timeoutMs:3e5});return{bytes:new Uint8Array(n.bytes)}}catch(e){return q(BN(e))}}async function iP(e,t){return e.local?nP(t):rP(e,t)}async function aP(e,t){let n=await iP(e,t);return`exitCode`in n?n:{...ei(n.bytes),stderr:``,exitCode:0}}async function oP(e,t,n,r){let i=await iP(e,r);if(`exitCode`in i)return i;let a=t.fs.resolvePath(t.cwd,n);try{await t.fs.writeFile(a,i.bytes)}catch(e){return q(`failed to write ${n}: ${BN(e)}`)}return{stdout:`wrote ${Math.max(1,Math.round(i.bytes.byteLength/1024))} KB to ${a}\n`,stderr:``,exitCode:0}}async function sP(e,t,n){let r;if(n.voiceName){let{resolved:t,error:i}=await ZN(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&&!KS(t)?aP(e,i):n.outFile?oP(e,t,n.outFile,i):e.local?eP(i):tP(e,i)}function cP(){return x(`say`,async(e,t)=>{if(e.includes(`--help`)||e.includes(`-h`))return RN();let n={local:typeof window<`u`&&typeof speechSynthesis<`u`,panelRpc:o()};if(!n.local&&!n.panelRpc)return q(`Web Speech API unavailable in this environment`);let r=await $N(n,e);if(r)return r;let i=qN(e);return`exitCode`in i?i:i.text?i.lang?sP(n,t,{...i,lang:i.lang}):q(`-l language tag is required`):RN()})}function lP(){return x(`screencapture`,async(e,t)=>{let{runScreencapture:n}=await import(`./screencapture-run-XrgS6hEd.js`);return n(e,t)})}function uP(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 dP=1e4;async function fP(e,t,n){let r={method:e,headers:pe({"Content-Type":`application/json`}),signal:AbortSignal.timeout(dP)};n&&(r.body=JSON.stringify(n));try{let e=await fetch(fe(`/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:pP(e)}}}}function pP(e){let t=e instanceof Error?e.name:``;return t===`TimeoutError`||t===`AbortError`?`no response from the secret store within ${dP/1e3}s`:`secret store unreachable: ${e instanceof Error?e.message:String(e)}`}function mP(e,t){return`could not read ${e} secrets — ${t??`the bridge gave no reason`}`}function hP(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 gP(){return{async list(){let[e,t]=await Promise.all([fP(`GET`,``),fP(`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(mP(`saved`,bP(e.data)));if(t.ok)for(let e of t.data)n.push({name:e.name,domains:e.domains,persisted:!1});else r.push(mP(`session`,bP(t.data)));return{entries:n,warnings:r}},async getInfo(e){return hP(await this.list(),e)},async getMasked(e){let{ok:t,data:n}=await fP(`GET`,`/masked`);return t?n.find(t=>t.name===e)??null:null},async peek(e){let{ok:t,data:n}=await fP(`GET`,`/peek?name=${encodeURIComponent(e)}`);return t?n:null},async setSession(e,t,n){let{ok:r,data:i}=await fP(`POST`,`/session`,{name:e,value:t,domains:n});if(!r)throw Error(bP(i)??`failed to set session secret`)},async setPersisted(e,t,n){let{ok:r,data:i}=await fP(`POST`,``,{name:e,value:t,domains:n});if(!r)throw Error(bP(i)??`failed to persist secret`)},async setScope(e,t){let{ok:n,data:r}=await fP(`POST`,`/scope`,{name:e,domains:t});if(!n)throw Error(bP(r)??`failed to update scope`)},async delete(e){let{ok:t,status:n,data:r}=await fP(`DELETE`,`/${encodeURIComponent(e)}`);if(n===404)return{removed:!1};if(!t)throw Error(bP(r)??`failed to delete secret`);return{removed:!0,fromSession:r&&typeof r==`object`&&`fromSession`in r?!!r.fromSession:void 0}}}}function _P(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(mP(`saved`,e?.error)),n?.entries||i.push(mP(`session`,n?.error)),{entries:r,warnings:i}},async getInfo(e){return hP(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 vP(){return _P(e=>uP(e))}function yP(){return _P(e=>{let{type:t,...n}=e;return Ce(t,n)})}function bP(e){if(e&&typeof e==`object`&&`error`in e){let t=e.error;if(typeof t==`string`)return t}}function xP(e){switch(e){case`extension-direct`:return vP();case`extension-delegate`:return yP();default:return gP()}}const SP=[`--domain`],CP=[`--persist`];function wP(){return`secret — manage secrets for the fetch proxy and mount backends
1975
+ `,stderr:``,exitCode:0}}catch(e){return q(BN(e))}}async function XN(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 UN()).map(e=>({name:e.name}));return[...n,...r]}async function ZN(e,t){let n=(await XN(e)).find(e=>e.name.toLowerCase().includes(t.toLowerCase()));return n?{resolved:n.name}:{error:q(`voice "${t}" not found. Use --list to see available voices.`)}}async function QN(e,t){try{if(e.local){let{kokoroStatus:e,kokoroWarmup:n}=await import(`./speech-page-realm-stub-C7EPKrHd.js`);return{stdout:zN(t?n():e()),stderr:``,exitCode:0}}return{stdout:zN(t?await e.panelRpc.call(`speak-warmup`,void 0):await e.panelRpc.call(`speak-status`,void 0)),stderr:``,exitCode:0}}catch(e){return q(BN(e))}}async function $N(e,t){return t.includes(`--list`)?YN(e):t.includes(`--status`)?QN(e,!1):t.includes(`--warmup`)?QN(e,!0):null}async function eP(e){try{let{speak:t}=await import(`./speech-page-realm-stub-C7EPKrHd.js`);return await t(e),{stdout:``,stderr:``,exitCode:0}}catch(e){return q(`speech synthesis error: ${BN(e)}`)}}async function tP(e,t){try{return await e.panelRpc.call(`speak-text`,t,{timeoutMs:3e5}),{stdout:``,stderr:``,exitCode:0}}catch(e){return q(BN(e))}}async function nP(e){let{synthesizeToWav:t}=await import(`./speech-page-realm-stub-C7EPKrHd.js`);try{return{bytes:await t(e)}}catch(e){return q(BN(e))}}async function rP(e,t){try{let n=await e.panelRpc.call(`synthesize-to-wav`,{text:t.text,lang:t.lang,...t.voice?{voice:t.voice}:{},rate:t.rate},{timeoutMs:3e5});return{bytes:new Uint8Array(n.bytes)}}catch(e){return q(BN(e))}}async function iP(e,t){return e.local?nP(t):rP(e,t)}async function aP(e,t){let n=await iP(e,t);return`exitCode`in n?n:{...ei(n.bytes),stderr:``,exitCode:0}}async function oP(e,t,n,r){let i=await iP(e,r);if(`exitCode`in i)return i;let a=t.fs.resolvePath(t.cwd,n);try{await t.fs.writeFile(a,i.bytes)}catch(e){return q(`failed to write ${n}: ${BN(e)}`)}return{stdout:`wrote ${Math.max(1,Math.round(i.bytes.byteLength/1024))} KB to ${a}\n`,stderr:``,exitCode:0}}async function sP(e,t,n){let r;if(n.voiceName){let{resolved:t,error:i}=await ZN(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&&!KS(t)?aP(e,i):n.outFile?oP(e,t,n.outFile,i):e.local?eP(i):tP(e,i)}function cP(){return x(`say`,async(e,t)=>{if(e.includes(`--help`)||e.includes(`-h`))return RN();let n={local:typeof window<`u`&&typeof speechSynthesis<`u`,panelRpc:o()};if(!n.local&&!n.panelRpc)return q(`Web Speech API unavailable in this environment`);let r=await $N(n,e);if(r)return r;let i=qN(e);return`exitCode`in i?i:i.text?i.lang?sP(n,t,{...i,lang:i.lang}):q(`-l language tag is required`):RN()})}function lP(){return x(`screencapture`,async(e,t)=>{let{runScreencapture:n}=await import(`./screencapture-run-yMA5c_HS.js`);return n(e,t)})}function uP(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 dP=1e4;async function fP(e,t,n){let r={method:e,headers:pe({"Content-Type":`application/json`}),signal:AbortSignal.timeout(dP)};n&&(r.body=JSON.stringify(n));try{let e=await fetch(fe(`/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:pP(e)}}}}function pP(e){let t=e instanceof Error?e.name:``;return t===`TimeoutError`||t===`AbortError`?`no response from the secret store within ${dP/1e3}s`:`secret store unreachable: ${e instanceof Error?e.message:String(e)}`}function mP(e,t){return`could not read ${e} secrets — ${t??`the bridge gave no reason`}`}function hP(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 gP(){return{async list(){let[e,t]=await Promise.all([fP(`GET`,``),fP(`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(mP(`saved`,bP(e.data)));if(t.ok)for(let e of t.data)n.push({name:e.name,domains:e.domains,persisted:!1});else r.push(mP(`session`,bP(t.data)));return{entries:n,warnings:r}},async getInfo(e){return hP(await this.list(),e)},async getMasked(e){let{ok:t,data:n}=await fP(`GET`,`/masked`);return t?n.find(t=>t.name===e)??null:null},async peek(e){let{ok:t,data:n}=await fP(`GET`,`/peek?name=${encodeURIComponent(e)}`);return t?n:null},async setSession(e,t,n){let{ok:r,data:i}=await fP(`POST`,`/session`,{name:e,value:t,domains:n});if(!r)throw Error(bP(i)??`failed to set session secret`)},async setPersisted(e,t,n){let{ok:r,data:i}=await fP(`POST`,``,{name:e,value:t,domains:n});if(!r)throw Error(bP(i)??`failed to persist secret`)},async setScope(e,t){let{ok:n,data:r}=await fP(`POST`,`/scope`,{name:e,domains:t});if(!n)throw Error(bP(r)??`failed to update scope`)},async delete(e){let{ok:t,status:n,data:r}=await fP(`DELETE`,`/${encodeURIComponent(e)}`);if(n===404)return{removed:!1};if(!t)throw Error(bP(r)??`failed to delete secret`);return{removed:!0,fromSession:r&&typeof r==`object`&&`fromSession`in r?!!r.fromSession:void 0}}}}function _P(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(mP(`saved`,e?.error)),n?.entries||i.push(mP(`session`,n?.error)),{entries:r,warnings:i}},async getInfo(e){return hP(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 vP(){return _P(e=>uP(e))}function yP(){return _P(e=>{let{type:t,...n}=e;return Ce(t,n)})}function bP(e){if(e&&typeof e==`object`&&`error`in e){let t=e.error;if(typeof t==`string`)return t}}function xP(e){switch(e){case`extension-direct`:return vP();case`extension-delegate`:return yP();default:return gP()}}const SP=[`--domain`],CP=[`--persist`];function wP(){return`secret — manage secrets for the fetch proxy and mount backends
1976
1976
 
1977
1977
  No approval (session-only, in-memory, never persisted):
1978
1978
  secret set <name> <value> --domain <pat> Set a session secret. Free for a
@@ -2082,7 +2082,7 @@ Limits and lifetime:
2082
2082
  `,exitCode:1};if(e.ttlMs!==void 0&&e.maxTabs!==void 0)return{stdout:``,stderr:`serve: --ttl cannot be combined with --max-tabs
2083
2083
  `,exitCode:1}}async function vF(e,t,n){if(e.ttlMs!==void 0){if(!t)throw Error(`persistent snapshot filesystem unavailable`);return uF(t,n)}}async function yF(e,t,n,r){if(e.length===0||e.includes(`--help`)||e.includes(`-h`))return JP();let i=eF(e);if(i.error)return{stdout:``,stderr:i.error,exitCode:1};let a=await gF(i);if(a)return a;if(!i.directory)return JP();let o=_F(i);if(o)return o;let s=await tF(i.directory,i.entry,t.fs,t.cwd);if(nF(s))return s;let{fullDirectory:c,entryPath:l}=s,u;try{u=await vF(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)
2084
2084
  `:``,f=await mF(!i.noBridge&&i.bridge,d);return f.ok?hF(i,c,l,f.webhookId,d,u,n):f.result}function bF(e,t){return x(`serve`,(n,r)=>yF(n,r,e,t))}const xF=`usage: session export [--id <id>] [--output <path>]
2085
- `;function SF(e){if(e.includes(`\0`))return{ok:!1,reason:`path must not contain NUL bytes`};if(e.includes(`\\`))return{ok:!1,reason:`path must not contain backslashes`};let t=e.split(`/`);for(let e of t)if(e===`..`)return{ok:!1,reason:`path must not contain ".."/traversal segments`};return{ok:!0}}function CF(e){let t=null,n=null,r=e.slice(1);for(let e=0;e<r.length;e++){let i=r[e];if(i===`--id`){if(t!==null)return{ok:!1,stderr:`session export: duplicate flag --id\n${xF}`};let n=r[e+1];if(!n||n.startsWith(`-`))return{ok:!1,stderr:`session export: --id requires a value\n${xF}`};t=n,e++}else if(i===`--output`){if(n!==null)return{ok:!1,stderr:`session export: duplicate flag --output\n${xF}`};let t=r[e+1];if(!t||t.startsWith(`-`))return{ok:!1,stderr:`session export: --output requires a path\n${xF}`};n=t,e++}else if(i.startsWith(`-`))return{ok:!1,stderr:`session export: unknown flag ${i}\n${xF}`};else return{ok:!1,stderr:`session export: unexpected argument ${JSON.stringify(i)}\n${xF}`}}return{ok:!0,args:{sessionId:t,outputPath:n}}}async function wF(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||Ct(r)!==a.sha256)throw new ba(`transfer-corrupt`);return r}async function TF(e,t){let n=CF(e);if(!n.ok)return{stdout:``,stderr:n.stderr,exitCode:1};let{sessionId:r,outputPath:i}=n.args;if(i!==null){let e=SF(i);if(!e.ok)return{stdout:``,stderr:`session export: --output ${e.reason}\n${xF}`,exitCode:1}}let a=r==null?{kind:`active`}:{kind:`frozen`,sessionId:r};try{let e=await _s().export(a,{}),n=await wF(e),r=i??`/workspace/${e.filename}`;return await t.fs.writeFile(r,n),{stdout:`exported ${r}\n`,stderr:``,exitCode:0}}catch(e){return{stdout:``,stderr:`session export: ${e instanceof ba?e.code:e instanceof Error?e.message:String(e)}\n`,exitCode:1}}}function EF(){return x(`session`,async(e,t)=>{if(e[0]===`export`&&!C(e))return TF(e,t);let{dispatchSessionMemoryAware:n}=await import(`./session-command-memory-DB2GmPSU.js`);return n(e,t,xF)})}function DF(){return x(`slicc`,async(e,t)=>{let{runSlicc:n}=await import(`./run-Bld9B0W0.js`);return await n(e,t)})}const OF=`leader`;function kF(){try{let e=globalThis.localStorage?.getItem(`slicc.leaderSprinkleInstances`);if(e)return JSON.parse(e)}catch{}return[]}function AF(e){return+!!e.leader+e.followers.length}function jF(){return{stdout:`usage: sprinkle <subcommand> [args]
2085
+ `;function SF(e){if(e.includes(`\0`))return{ok:!1,reason:`path must not contain NUL bytes`};if(e.includes(`\\`))return{ok:!1,reason:`path must not contain backslashes`};let t=e.split(`/`);for(let e of t)if(e===`..`)return{ok:!1,reason:`path must not contain ".."/traversal segments`};return{ok:!0}}function CF(e){let t=null,n=null,r=e.slice(1);for(let e=0;e<r.length;e++){let i=r[e];if(i===`--id`){if(t!==null)return{ok:!1,stderr:`session export: duplicate flag --id\n${xF}`};let n=r[e+1];if(!n||n.startsWith(`-`))return{ok:!1,stderr:`session export: --id requires a value\n${xF}`};t=n,e++}else if(i===`--output`){if(n!==null)return{ok:!1,stderr:`session export: duplicate flag --output\n${xF}`};let t=r[e+1];if(!t||t.startsWith(`-`))return{ok:!1,stderr:`session export: --output requires a path\n${xF}`};n=t,e++}else if(i.startsWith(`-`))return{ok:!1,stderr:`session export: unknown flag ${i}\n${xF}`};else return{ok:!1,stderr:`session export: unexpected argument ${JSON.stringify(i)}\n${xF}`}}return{ok:!0,args:{sessionId:t,outputPath:n}}}async function wF(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||Ct(r)!==a.sha256)throw new ba(`transfer-corrupt`);return r}async function TF(e,t){let n=CF(e);if(!n.ok)return{stdout:``,stderr:n.stderr,exitCode:1};let{sessionId:r,outputPath:i}=n.args;if(i!==null){let e=SF(i);if(!e.ok)return{stdout:``,stderr:`session export: --output ${e.reason}\n${xF}`,exitCode:1}}let a=r==null?{kind:`active`}:{kind:`frozen`,sessionId:r};try{let e=await _s().export(a,{}),n=await wF(e),r=i??`/workspace/${e.filename}`;return await t.fs.writeFile(r,n),{stdout:`exported ${r}\n`,stderr:``,exitCode:0}}catch(e){return{stdout:``,stderr:`session export: ${e instanceof ba?e.code:e instanceof Error?e.message:String(e)}\n`,exitCode:1}}}function EF(){return x(`session`,async(e,t)=>{if(e[0]===`export`&&!C(e))return TF(e,t);let{dispatchSessionMemoryAware:n}=await import(`./session-command-memory-DzuRy-nC.js`);return n(e,t,xF)})}function DF(){return x(`slicc`,async(e,t)=>{let{runSlicc:n}=await import(`./run-CreCrLyX.js`);return await n(e,t)})}const OF=`leader`;function kF(){try{let e=globalThis.localStorage?.getItem(`slicc.leaderSprinkleInstances`);if(e)return JSON.parse(e)}catch{}return[]}function AF(e){return+!!e.leader+e.followers.length}function jF(){return{stdout:`usage: sprinkle <subcommand> [args]
2086
2086
 
2087
2087
  list [--runtime <id>] List sprinkles + an instance line per runtime
2088
2088
  open <name> Open a sprinkle by name
@@ -3205,9 +3205,9 @@ Notes:
3205
3205
  mkdir -p ${ez}
3206
3206
  curl -o ${ez}/seabios.bin https://raw.githubusercontent.com/copy/v86/master/bios/seabios.bin
3207
3207
  curl -o ${ez}/vgabios.bin https://raw.githubusercontent.com/copy/v86/master/bios/vgabios.bin
3208
- or pass -bios / -vgabios with explicit VFS paths.`,rz={"-n":iz,"-name":iz,"--name":iz,"-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)=>az(e,`cdrom`,t),"-hda":(e,t)=>az(e,`hda`,t),"-fda":(e,t)=>az(e,`fda`,t),"-kernel":(e,t)=>az(e,`kernel`,t),"-initrd":(e,t)=>az(e,`initrd`,t),"-append":(e,t)=>az(e,`append`,t),"-bios":(e,t)=>az(e,`bios`,t),"-vgabios":(e,t)=>az(e,`vgabios`,t),"-state":(e,t)=>az(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 iz(e,t){return/^[A-Za-z0-9_-]+$/.test(t)?(e.name=t,null):`invalid VM name '${t}'`}function az(e,t,n){return e[t]=n,null}const oz=[...Object.keys(rz),`--fps`,`--tail`,`--send`,`--to`];function sz(e){let t={name:`vm0`,memoryMib:128,vgaMemoryMib:8,nographic:!1};for(let n=0;n<e.length;n++){let r=e[n];if(r===`-nographic`){t.nographic=!0;continue}let i=Object.hasOwn(rz,r)?rz[r]:void 0;if(!i)return{ok:!1,error:`unknown option '${r}'`};let a=n+1<e.length?e[n+1]:null;if(a===null)return{ok:!1,error:`${r} requires a value`};let o=i(t,a);if(o)return{ok:!1,error:o};n++}return!t.cdrom&&!t.hda&&!t.fda&&!t.kernel&&!t.state?{ok:!1,error:`no bootable media (-cdrom, -hda, -fda, -kernel, or -state required)`}:{ok:!0,parsed:t}}function cz(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 lz(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 uz(e){return oa(e)||Q(`no VM named '${e}' — boot one with \`v86 start -n ${e} ...\``)}function dz(e){return`exitCode`in e}async function fz(e){if(typeof OffscreenCanvas>`u`)throw Error(`screenshot requires OffscreenCanvas, unavailable in this runtime`);let t=new OffscreenCanvas(e.width,e.height),n=t.getContext(`2d`);if(!n)throw Error(`could not acquire 2d canvas context`);let r=e.data;n.putImageData(new ImageData(r,e.width,e.height),0,0);let i=await t.convertToBlob({type:`image/png`});return new Uint8Array(await i.arrayBuffer())}async function pz(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 mz={a:801,c:306,d:531};function hz(){let e=globalThis.__slicc_pm;return e instanceof Object&&typeof e.signal==`function`?e:null}function gz(e={}){return x(`v86`,async(t,n)=>{if(t.length===0||t[0]===`--help`||t[0]===`-h`||t[0]===`help`)return $(tz);if(t[0]===`--version`)return _z(n,e);let r=t[0];if(C(t.slice(1),{valueFlags:oz}))return $(nt(`v86`,r,tz,{prefix:`v86`}));let i=tt(t.slice(1));try{switch(r){case`start`:return await Cz(i,n,e);case`ls`:return Tz();case`type`:return await kz(i,n);case`key`:return await Az(i,n);case`mouse`:return await Mz(i,n);case`screenshot`:return await Nz(i,n);case`text`:return await Pz(i,n);case`serve`:return await Lz(i,n);case`serial`:return Rz(i);case`state`:return await zz(i,n);case`stop`:return await Bz(i,e);default:return Q(`unknown subcommand '${r}' — see \`v86 --help\``)}}catch(e){return Q(e instanceof Error?e.message:String(e))}})}async function _z(e,t){if(t.loadEngine)return $(`v86 ${(await t.loadEngine(cz(e))).version} (qemu-flavored CLI)\n`);let n=await SO(cz(e));return n?$(`v86 ${n.version} (qemu-flavored CLI)\n`):Q(_O)}async function vz(e,t,n){if(e.state&&!e.bios&&!e.vgabios)return null;let r=await pz(t,e.bios??`${ez}/seabios.bin`,`-bios`);if(`exitCode`in r)return e.bios?r:Q(nz.replace(/^v86: /u,``));if(n.bios=r,e.nographic)return null;let i=await pz(t,e.vgabios??`${ez}/vgabios.bin`,`-vgabios`);return`exitCode`in i?e.vgabios?i:Q(nz.replace(/^v86: /u,``)):(n.vga_bios=i,null)}async function yz(e,t,n){let r=await vz(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 pz(t,a,`-${r}`);if(`exitCode`in o)return o;n[i]=o}if(e.append&&(n.cmdline=e.append),e.boot&&(n.boot_order=mz[e.boot]),e.state){let r=await pz(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 bz=6e4;function xz(e){return e.v86?Promise.resolve():new Promise((t,n)=>{let r=setTimeout(()=>n(Error(`engine init timed out after ${bz/1e3}s`)),bz);e.add_listener(`emulator-loaded`,()=>{clearTimeout(r),t()})})}function Sz(e,t){let n=e.network_adapter;if(!n||typeof n.fetch!=`function`)return Q(`relay=fetch: engine exposed no fetch-relay network adapter`);let r=t.proxiedFetch??ie();return n.fetch=async(e,t)=>{let n=e.replace(/^http:\/\/(?!localhost[:/]|127\.0\.0\.1[:/])/u,`https://`),i={};t?.headers?.forEach((e,t)=>{i[t]=e});let a;if(t?.body){let e=``;for(let n of t.body)e+=String.fromCharCode(n);a=e}let o=await r(n,{method:t?.method,headers:i,body:a}),s=o.body,c=s.buffer.slice(s.byteOffset,s.byteOffset+s.byteLength);return{status:o.status,statusText:o.statusText,headers:new Headers(o.headers),redirected:!1,url:o.url,arrayBuffer:async()=>c}},null}async function Cz(e,t,n){let r=sz(e);if(!r.ok)return Q(r.error);let i=r.parsed;if(oa(i.name))return Q(`VM '${i.name}' already running — stop it first or pick another -n name`);let a=cz(t),o=n.loadEngine?await n.loadEngine(a):await yO({ipk:a}),s={wasm_fn:wO(o.wasmModule),memory_size:i.memoryMib*1024*1024,vga_memory_size:i.vgaMemoryMib*1024*1024,autostart:!1,disable_speaker:!0,fastboot:!0},c=await yz(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??hz();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`,()=>{wz(u,d)})}aa(u);try{if(await xz(l),i.netRelay===`fetch`){let e=Sz(l,n);if(e)return await wz(u,d),e}ra(u),await l.run()}catch(e){return await wz(u,d),Q(`boot failed: ${e instanceof Error?e.message:String(e)}`)}u.onScreenChange=()=>{import(`./registry-Bq_j-EXx.js`).then(({getComputerRegistry:e})=>{e()?.refresh(`v86:${u.name}`)})},import(`./v86-DseFx8Yp.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 wz(e,t){sa(e),na(e.name),import(`./v86-DseFx8Yp.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 Tz(){let e=ta();if(e.length===0)return $(`no VMs running
3208
+ or pass -bios / -vgabios with explicit VFS paths.`,rz={"-n":iz,"-name":iz,"--name":iz,"-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)=>az(e,`cdrom`,t),"-hda":(e,t)=>az(e,`hda`,t),"-fda":(e,t)=>az(e,`fda`,t),"-kernel":(e,t)=>az(e,`kernel`,t),"-initrd":(e,t)=>az(e,`initrd`,t),"-append":(e,t)=>az(e,`append`,t),"-bios":(e,t)=>az(e,`bios`,t),"-vgabios":(e,t)=>az(e,`vgabios`,t),"-state":(e,t)=>az(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 iz(e,t){return/^[A-Za-z0-9_-]+$/.test(t)?(e.name=t,null):`invalid VM name '${t}'`}function az(e,t,n){return e[t]=n,null}const oz=[...Object.keys(rz),`--fps`,`--tail`,`--send`,`--to`];function sz(e){let t={name:`vm0`,memoryMib:128,vgaMemoryMib:8,nographic:!1};for(let n=0;n<e.length;n++){let r=e[n];if(r===`-nographic`){t.nographic=!0;continue}let i=Object.hasOwn(rz,r)?rz[r]:void 0;if(!i)return{ok:!1,error:`unknown option '${r}'`};let a=n+1<e.length?e[n+1]:null;if(a===null)return{ok:!1,error:`${r} requires a value`};let o=i(t,a);if(o)return{ok:!1,error:o};n++}return!t.cdrom&&!t.hda&&!t.fda&&!t.kernel&&!t.state?{ok:!1,error:`no bootable media (-cdrom, -hda, -fda, -kernel, or -state required)`}:{ok:!0,parsed:t}}function cz(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 lz(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 uz(e){return oa(e)||Q(`no VM named '${e}' — boot one with \`v86 start -n ${e} ...\``)}function dz(e){return`exitCode`in e}async function fz(e){if(typeof OffscreenCanvas>`u`)throw Error(`screenshot requires OffscreenCanvas, unavailable in this runtime`);let t=new OffscreenCanvas(e.width,e.height),n=t.getContext(`2d`);if(!n)throw Error(`could not acquire 2d canvas context`);let r=e.data;n.putImageData(new ImageData(r,e.width,e.height),0,0);let i=await t.convertToBlob({type:`image/png`});return new Uint8Array(await i.arrayBuffer())}async function pz(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 mz={a:801,c:306,d:531};function hz(){let e=globalThis.__slicc_pm;return e instanceof Object&&typeof e.signal==`function`?e:null}function gz(e={}){return x(`v86`,async(t,n)=>{if(t.length===0||t[0]===`--help`||t[0]===`-h`||t[0]===`help`)return $(tz);if(t[0]===`--version`)return _z(n,e);let r=t[0];if(C(t.slice(1),{valueFlags:oz}))return $(nt(`v86`,r,tz,{prefix:`v86`}));let i=tt(t.slice(1));try{switch(r){case`start`:return await Cz(i,n,e);case`ls`:return Tz();case`type`:return await kz(i,n);case`key`:return await Az(i,n);case`mouse`:return await Mz(i,n);case`screenshot`:return await Nz(i,n);case`text`:return await Pz(i,n);case`serve`:return await Lz(i,n);case`serial`:return Rz(i);case`state`:return await zz(i,n);case`stop`:return await Bz(i,e);default:return Q(`unknown subcommand '${r}' — see \`v86 --help\``)}}catch(e){return Q(e instanceof Error?e.message:String(e))}})}async function _z(e,t){if(t.loadEngine)return $(`v86 ${(await t.loadEngine(cz(e))).version} (qemu-flavored CLI)\n`);let n=await SO(cz(e));return n?$(`v86 ${n.version} (qemu-flavored CLI)\n`):Q(_O)}async function vz(e,t,n){if(e.state&&!e.bios&&!e.vgabios)return null;let r=await pz(t,e.bios??`${ez}/seabios.bin`,`-bios`);if(`exitCode`in r)return e.bios?r:Q(nz.replace(/^v86: /u,``));if(n.bios=r,e.nographic)return null;let i=await pz(t,e.vgabios??`${ez}/vgabios.bin`,`-vgabios`);return`exitCode`in i?e.vgabios?i:Q(nz.replace(/^v86: /u,``)):(n.vga_bios=i,null)}async function yz(e,t,n){let r=await vz(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 pz(t,a,`-${r}`);if(`exitCode`in o)return o;n[i]=o}if(e.append&&(n.cmdline=e.append),e.boot&&(n.boot_order=mz[e.boot]),e.state){let r=await pz(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 bz=6e4;function xz(e){return e.v86?Promise.resolve():new Promise((t,n)=>{let r=setTimeout(()=>n(Error(`engine init timed out after ${bz/1e3}s`)),bz);e.add_listener(`emulator-loaded`,()=>{clearTimeout(r),t()})})}function Sz(e,t){let n=e.network_adapter;if(!n||typeof n.fetch!=`function`)return Q(`relay=fetch: engine exposed no fetch-relay network adapter`);let r=t.proxiedFetch??ie();return n.fetch=async(e,t)=>{let n=e.replace(/^http:\/\/(?!localhost[:/]|127\.0\.0\.1[:/])/u,`https://`),i={};t?.headers?.forEach((e,t)=>{i[t]=e});let a;if(t?.body){let e=``;for(let n of t.body)e+=String.fromCharCode(n);a=e}let o=await r(n,{method:t?.method,headers:i,body:a}),s=o.body,c=s.buffer.slice(s.byteOffset,s.byteOffset+s.byteLength);return{status:o.status,statusText:o.statusText,headers:new Headers(o.headers),redirected:!1,url:o.url,arrayBuffer:async()=>c}},null}async function Cz(e,t,n){let r=sz(e);if(!r.ok)return Q(r.error);let i=r.parsed;if(oa(i.name))return Q(`VM '${i.name}' already running — stop it first or pick another -n name`);let a=cz(t),o=n.loadEngine?await n.loadEngine(a):await yO({ipk:a}),s={wasm_fn:wO(o.wasmModule),memory_size:i.memoryMib*1024*1024,vga_memory_size:i.vgaMemoryMib*1024*1024,autostart:!1,disable_speaker:!0,fastboot:!0},c=await yz(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??hz();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`,()=>{wz(u,d)})}aa(u);try{if(await xz(l),i.netRelay===`fetch`){let e=Sz(l,n);if(e)return await wz(u,d),e}ra(u),await l.run()}catch(e){return await wz(u,d),Q(`boot failed: ${e instanceof Error?e.message:String(e)}`)}u.onScreenChange=()=>{import(`./registry-Bq_j-EXx.js`).then(({getComputerRegistry:e})=>{e()?.refresh(`v86:${u.name}`)})},import(`./v86-BfdTUFBK.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 wz(e,t){sa(e),na(e.name),import(`./v86-BfdTUFBK.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 Tz(){let e=ta();if(e.length===0)return $(`no VMs running
3209
3209
  `);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(`
3210
- `)}\n`)}function Ez(e,t){return`prefer: computer ${e} -c ${t}\n`}async function Dz(e,t,n,r){let i=uz(t);if(dz(i))return i;let[{runComputer:a},{getComputerRegistry:o,installComputerRegistry:s},c]=await Promise.all([import(`./run-BEt0RS3J.js`),import(`./registry-Bq_j-EXx.js`),import(`./v86-DseFx8Yp.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=Ez(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 kz(e,t){let{name:n,rest:r}=lz(e);if(r.length===0){let e=uz(n);return dz(e)?e:Q(`type: no text supplied`)}return Dz(t,n,[`type`,`--`,...r],`type`)}async function Az(e,t){let{name:n,rest:r}=lz(e);if(r.length===0){let e=uz(n);return dz(e)?e:Q(`key: no chord supplied`)}return Dz(t,n,[`key`,...r],`key`)}const jz=[`left`,`middle`,`right`];async function Mz(e,t){let{name:n,rest:r}=lz(e),i=uz(n);if(dz(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?Dz(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>`):Dz(t,n,[`--native`,`mousemove`,e,i,`--relative`],`mousemove`)}if(o===`click`){let e=r[1]??`left`;if(!jz.includes(e))return Q(`mouse: unknown button '${r[1]}'`);let i=[`click`,e];return r.includes(`--double`)&&i.push(`--repeat`,`2`),Dz(t,n,i,`click`)}return Q(`mouse: expected move <dx> <dy>, click [button], or --to <x>,<y>`)}async function Nz(e,t){let{name:n,rest:r}=lz(e);return Dz(t,n,[`screenshot`,...r],`screenshot`)}async function Pz(e,t){let{name:n}=lz(e);return Dz(t,n,[`text`],`text`)}function Fz(e,t){return`<!DOCTYPE html>
3210
+ `)}\n`)}function Ez(e,t){return`prefer: computer ${e} -c ${t}\n`}async function Dz(e,t,n,r){let i=uz(t);if(dz(i))return i;let[{runComputer:a},{getComputerRegistry:o,installComputerRegistry:s},c]=await Promise.all([import(`./run-DvD576xV.js`),import(`./registry-Bq_j-EXx.js`),import(`./v86-BfdTUFBK.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=Ez(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 kz(e,t){let{name:n,rest:r}=lz(e);if(r.length===0){let e=uz(n);return dz(e)?e:Q(`type: no text supplied`)}return Dz(t,n,[`type`,`--`,...r],`type`)}async function Az(e,t){let{name:n,rest:r}=lz(e);if(r.length===0){let e=uz(n);return dz(e)?e:Q(`key: no chord supplied`)}return Dz(t,n,[`key`,...r],`key`)}const jz=[`left`,`middle`,`right`];async function Mz(e,t){let{name:n,rest:r}=lz(e),i=uz(n);if(dz(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?Dz(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>`):Dz(t,n,[`--native`,`mousemove`,e,i,`--relative`],`mousemove`)}if(o===`click`){let e=r[1]??`left`;if(!jz.includes(e))return Q(`mouse: unknown button '${r[1]}'`);let i=[`click`,e];return r.includes(`--double`)&&i.push(`--repeat`,`2`),Dz(t,n,i,`click`)}return Q(`mouse: expected move <dx> <dy>, click [button], or --to <x>,<y>`)}async function Nz(e,t){let{name:n,rest:r}=lz(e);return Dz(t,n,[`screenshot`,...r],`screenshot`)}async function Pz(e,t){let{name:n}=lz(e);return Dz(t,n,[`text`],`text`)}function Fz(e,t){return`<!DOCTYPE html>
3211
3211
  <html lang="en"><head><meta charset="utf-8"><title>v86 — ${e}</title><style>
3212
3212
  html,body{margin:0;height:100%;background:#111;color:#ddd;font-family:monospace}
3213
3213
  body{display:flex;align-items:center;justify-content:center}