sliccy 6.178.2 → 6.179.1

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 (191) hide show
  1. package/dist/node-server/_shared/tray-sync-protocol.d.ts +18 -3
  2. package/dist/node-server/_shared/tray-sync-protocol.d.ts.map +1 -1
  3. package/dist/node-server/_shared/tray-sync-protocol.js.map +1 -1
  4. package/dist/ui/.vite/manifest.json +191 -182
  5. package/dist/ui/assets/SKILL-B2bgzyKV.js +1 -0
  6. package/dist/ui/assets/__vite-browser-external-CVereMU8.js +1 -0
  7. package/dist/ui/assets/account-store-_Ksq0LeF.js +1 -0
  8. package/dist/ui/assets/account-store-dO23dNCl.js +2 -0
  9. package/dist/ui/assets/{adobe-BHZ-TF7E.js → adobe-BIvm4-sf.js} +1 -1
  10. package/dist/ui/assets/{adobe-Cqd5wrqM.js → adobe-DGXLUuxi.js} +1 -1
  11. package/dist/ui/assets/{agent-panels-DXCdmUkc.js → agent-panels-1Al9YhTO.js} +1 -1
  12. package/dist/ui/assets/{almost-bash-shell-headless-B29ulBpN.js → almost-bash-shell-headless-D8xvUvg7.js} +231 -231
  13. package/dist/ui/assets/{apply-layout-BiYaZGTe.js → apply-layout-BInHwmtO.js} +1 -1
  14. package/dist/ui/assets/{apps-BYK0eeEc.js → apps-Baz0Lnmg.js} +1 -1
  15. package/dist/ui/assets/{azure-openai-BgA0OxNa.js → azure-openai-BOY1NiG8.js} +1 -1
  16. package/dist/ui/assets/{azure-openai-DwxTKwka.js → azure-openai-ttpNpc1f.js} +1 -1
  17. package/dist/ui/assets/{backend-hostfs-CeXHlroV.js → backend-hostfs-BOg3QQ4q.js} +1 -1
  18. package/dist/ui/assets/bedrock-camp-BQ02i7Bk.js +1 -0
  19. package/dist/ui/assets/bedrock-camp-CMYc0nQP.js +1 -0
  20. package/dist/ui/assets/bedrock-camp-extra-models-B0WH9IRx.js +1 -0
  21. package/dist/ui/assets/bedrock-camp-extra-models-WTCIjj5a.js +1 -0
  22. package/dist/ui/assets/{bunny-probe-Dk-taSwq.js → bunny-probe-DwyMiB71.js} +1 -1
  23. package/dist/ui/assets/{bunny-run-CmnXF3U5.js → bunny-run-COGwXgvg.js} +1 -1
  24. package/dist/ui/assets/{cdp-wm8vfA8s.js → cdp-BKix-G_U.js} +4 -4
  25. package/dist/ui/assets/{cerebras-BPlfZv3L.js → cerebras-DjoHQ6Xp.js} +1 -1
  26. package/dist/ui/assets/{cerebras-wuHzITPY.js → cerebras-UE5-6iqM.js} +1 -1
  27. package/dist/ui/assets/{composer-speech-DI9SI2lY.js → composer-speech-BVzciYHA.js} +1 -1
  28. package/dist/ui/assets/{connect-surface-zTa8OfFh.js → connect-surface-O3amvWBB.js} +1 -1
  29. package/dist/ui/assets/{directed-approval-DmDgVpiX.js → directed-approval-_Y76j9C0.js} +1 -1
  30. package/dist/ui/assets/{ensure-speech-assets-42E6KJDv.js → ensure-speech-assets-BrVI5VWr.js} +1 -1
  31. package/dist/ui/assets/{fast-path-DiV4YcEb.js → fast-path-CG_eXz0M.js} +1 -1
  32. package/dist/ui/assets/{frozen-archive-writer-C97kBlYw.js → frozen-archive-writer-BqU275cT.js} +1 -1
  33. package/dist/ui/assets/{fs-BKmepe3Q.js → fs-BCvRe0en.js} +2 -2
  34. package/dist/ui/assets/{fs-DmgjBIs9.js → fs-CNQgTr1W.js} +1 -1
  35. package/dist/ui/assets/{gelatiere-store-D1l9WE1j.js → gelatiere-store-Bv8M3zKW.js} +1 -1
  36. package/dist/ui/assets/{gelatiere-unit-jlm5b-JJ.js → gelatiere-unit-ucpnioSj.js} +1 -1
  37. package/dist/ui/assets/{github-C8jjATg2.js → github-B6d20Xtd.js} +2 -2
  38. package/dist/ui/assets/{github-auth-CkC7qTEg.js → github-auth-DHDr0MZD.js} +1 -1
  39. package/dist/ui/assets/{github-copilot-D7QRCTDD.js → github-copilot-DF54WJFJ.js} +1 -1
  40. package/dist/ui/assets/{github-copilot-DuwasHAz.js → github-copilot-DxvP_gQ2.js} +1 -1
  41. package/dist/ui/assets/{github-BB3M-XW1.js → github-gkCO9POj.js} +1 -1
  42. package/dist/ui/assets/{github-install-DT3Wys59.js → github-install-CLwrUeHG.js} +1 -1
  43. package/dist/ui/assets/{github-zip-CX3GXBmW.js → github-zip-ggx_X_vr.js} +1 -1
  44. package/dist/ui/assets/{hear-pJ--prvx.js → hear-BO8nJLV8.js} +1 -1
  45. package/dist/ui/assets/{help-gOzjZhgS.js → help-CPzYQxS7.js} +1 -1
  46. package/dist/ui/assets/{installer-DeqzzcvC.js → installer-DdfBd9PU.js} +1 -1
  47. package/dist/ui/assets/{js-realm-worker-QT2JnICz.js → js-realm-worker-BityZEz7.js} +9 -9
  48. package/dist/ui/assets/{jsh-executor-BBZWMBxV.js → jsh-executor-CKyw9lLY.js} +3 -3
  49. package/dist/ui/assets/{kernel-worker-B23YxkDH.js → kernel-worker-qQGHaMnf.js} +11 -11
  50. package/dist/ui/assets/{lick-ws-bridge-CpcUjLS6.js → lick-ws-bridge-BkNkR9Ca.js} +1 -1
  51. package/dist/ui/assets/{lick-ws-bridge-DsoQWD5s.js → lick-ws-bridge-DRImkUTH.js} +1 -1
  52. package/dist/ui/assets/{live-session-curation-BWfx-Nu1.js → live-session-curation-P6SXyKp0.js} +1 -1
  53. package/dist/ui/assets/{live-session-snapshot-BSNfthJ2.js → live-session-snapshot-CyWcObFf.js} +1 -1
  54. package/dist/ui/assets/{local-llm-vzP-uq7M.js → local-llm-BUnPutW1.js} +1 -1
  55. package/dist/ui/assets/{local-llm-DGFPI_4T.js → local-llm-CmoETAXe.js} +1 -1
  56. package/dist/ui/assets/main-D9U5TUrs.js +22 -0
  57. package/dist/ui/assets/{main-cherry-Bbjw_90k.js → main-cherry-CCD39MP_.js} +1 -1
  58. package/dist/ui/assets/{memory-curation-seam-BufuSUCj.js → memory-curation-seam-DsTTNESg.js} +1 -1
  59. package/dist/ui/assets/{memory-health-DdSqq7yP.js → memory-health-unNAzsFb.js} +1 -1
  60. package/dist/ui/assets/memory-v2-flag-B2nSV4Lc.js +1 -0
  61. package/dist/ui/assets/{memory-write-execute-BygymnF0.js → memory-write-execute-DaxAnwsF.js} +1 -1
  62. package/dist/ui/assets/{mount-_sTSuvKx.js → mount-BMvAKuQj.js} +1 -1
  63. package/dist/ui/assets/{mount-DlogHA7u.js → mount-LPTe0PFr.js} +3 -3
  64. package/dist/ui/assets/new-session-CoExcd2o.js +2 -0
  65. package/dist/ui/assets/oauth-bootstrap-C1B2GC97.js +2 -0
  66. package/dist/ui/assets/{onboarding-orchestrator-CbnB67nZ.js → onboarding-orchestrator-fgBOHrFc.js} +1 -1
  67. package/dist/ui/assets/{openai-codex-SI0nWQNS.js → openai-codex-BG00vpqV.js} +1 -1
  68. package/dist/ui/assets/{openai-codex-BtwVt-12.js → openai-codex-D5bGv3v_.js} +1 -1
  69. package/dist/ui/assets/{openrouter-BFlMjaCH.js → openrouter-BXmUmBsU.js} +1 -1
  70. package/dist/ui/assets/{openrouter-BruOnSfT.js → openrouter-OxxNLK64.js} +1 -1
  71. package/dist/ui/assets/{openrouter-free-DPQDCfqQ.js → openrouter-free-gR5o0rCK.js} +1 -1
  72. package/dist/ui/assets/{openrouter-free-B2pceWVg.js → openrouter-free-uGVhtFc3.js} +1 -1
  73. package/dist/ui/assets/{openrouter-oauth-BLskezr8.js → openrouter-oauth-BvV3Fia1.js} +1 -1
  74. package/dist/ui/assets/{openrouter-oauth-C4kwBIwS.js → openrouter-oauth-CT_Zj9YD.js} +1 -1
  75. package/dist/ui/assets/{opfs-mount-8s9WP18b.js → opfs-mount-UFdaZCov.js} +1 -1
  76. package/dist/ui/assets/panel-rpc-handlers-82bfFThY.js +2 -0
  77. package/dist/ui/assets/{panelize-shell-Dg_58ImI.js → panelize-shell-B5r_tYN0.js} +1 -1
  78. package/dist/ui/assets/{pi-edit-execution-C9GYKunH.js → pi-edit-execution-DF1HhU43.js} +1 -1
  79. package/dist/ui/assets/{provider-DEcfbBkM.js → provider-DIX-yDf1.js} +1 -1
  80. package/dist/ui/assets/{provider-B_fhkXn7.js → provider-ZlWYE7tn.js} +2 -2
  81. package/dist/ui/assets/{provider-settings-BLtjMrT0.js → provider-settings-By6-4Hob.js} +1 -1
  82. package/dist/ui/assets/provider-store-access-DGTGBgAd.js +1 -0
  83. package/dist/ui/assets/provider-store-access-DblNX0Qr.js +1 -0
  84. package/dist/ui/assets/providers-BFl9psp8.js +2 -0
  85. package/dist/ui/assets/providers-CLabs7-N.js +1 -0
  86. package/dist/ui/assets/py-live-vfs-DaPSes0l.js +168 -0
  87. package/dist/ui/assets/py-live-vfs-Dx9cFlfE.js +168 -0
  88. package/dist/ui/assets/{py-realm-worker-A1ICPvEl.js → py-realm-worker-CYwLJW9I.js} +3 -3
  89. package/dist/ui/assets/{pyodide-DGH4V3SQ.js → pyodide-DKNrUBio.js} +2 -2
  90. package/dist/ui/assets/{quick-llm-B8uh7EVu.js → quick-llm-D9d7sUsw.js} +1 -1
  91. package/dist/ui/assets/realm-inprocess-BRBbxPBB.js +30 -0
  92. package/dist/ui/assets/{recovery-screen-M8szzZB2.js → recovery-screen-CkIyMRc0.js} +1 -1
  93. package/dist/ui/assets/{remote-terminal-view-6ygd42Fb.js → remote-terminal-view-CpbLu8Sz.js} +1 -1
  94. package/dist/ui/assets/require-guards-Du29-pl4.js +252 -0
  95. package/dist/ui/assets/{restore-Qq5h6a38.js → restore-BZ9V2jCD.js} +1 -1
  96. package/dist/ui/assets/run-B0N83lIB.js +86 -0
  97. package/dist/ui/assets/{run--H9dud5r.js → run-BEOVa96v.js} +2 -2
  98. package/dist/ui/assets/{run-DK8nktud.js → run-BoSrXXY1.js} +2 -2
  99. package/dist/ui/assets/{run-CPDsfLJJ.js → run-Bq-Xk94T.js} +2 -2
  100. package/dist/ui/assets/{run-dNFrBZDI.js → run-CTYkZrli.js} +1 -1
  101. package/dist/ui/assets/{run-_QNErIec.js → run-DSzWrEfE.js} +2 -2
  102. package/dist/ui/assets/{run-C3rYy-Lu.js → run-Dgam-lSu.js} +1 -1
  103. package/dist/ui/assets/{run-C0wVagJ5.js → run-DkxI8mp3.js} +2 -2
  104. package/dist/ui/assets/{run-Bk0pGJJa.js → run-DnjuDRM3.js} +1 -1
  105. package/dist/ui/assets/{session-command-memory-CAl1-crq.js → session-command-memory-DyJ_PMwk.js} +2 -2
  106. package/dist/ui/assets/{session-jsonl-lB9-7rZS.js → session-jsonl-CGBR73CL.js} +1 -1
  107. package/dist/ui/assets/{session-jsonl-B-4fihPX.js → session-jsonl-px88OtuO.js} +1 -1
  108. package/dist/ui/assets/{session-search-index-Bn4FhmPW.js → session-search-index-yyM4rIX7.js} +1 -1
  109. package/dist/ui/assets/{setup-feature-flags-remote-opNg3JWs.js → setup-feature-flags-remote-B6HW35ii.js} +1 -1
  110. package/dist/ui/assets/{signed-fetch-YC2zrriw.js → signed-fetch-D1gxhAgf.js} +1 -1
  111. package/dist/ui/assets/{silent-renew-backoff-Bak0vwwf.js → silent-renew-backoff-CgDiUeEr.js} +1 -1
  112. package/dist/ui/assets/slicc-version-2HAR5Ivl.js +1 -0
  113. package/dist/ui/assets/{snapshot-features-BqGUjBWl.js → snapshot-features-bBwoXkOR.js} +1 -1
  114. package/dist/ui/assets/{snapshot-6br_5p-f.js → snapshot-oVV9Iqa-.js} +1 -1
  115. package/dist/ui/assets/{soundscape-DRViCPly.js → soundscape-C1bpUu46.js} +1 -1
  116. package/dist/ui/assets/{speak-DRv_vLqY.js → speak-C7tACkSs.js} +1 -1
  117. package/dist/ui/assets/{sprinkle-manager-DeJrE3Hq.js → sprinkle-manager-q03I3INE.js} +1 -1
  118. package/dist/ui/assets/{sprinkle-renderer-DYUy10CO.js → sprinkle-renderer-CeFlc9rW.js} +25 -8
  119. package/dist/ui/assets/{src-CmTUvI8R.js → src-BfoZU01X.js} +74 -74
  120. package/dist/ui/assets/{ssh-D1zj1EXl.js → ssh-DplyBT74.js} +2 -2
  121. package/dist/ui/assets/{state-BpyjzTIG.js → state-CDWzXqaM.js} +1 -1
  122. package/dist/ui/assets/{store-DwUewAuZ.js → store-BSzBYE_Q.js} +1 -1
  123. package/dist/ui/assets/{store-DQkIRnav.js → store-DQazKd79.js} +1 -1
  124. package/dist/ui/assets/{sudo-DIegVBwT.js → sudo-Bel-CIaV.js} +1 -1
  125. package/dist/ui/assets/{supervisor-gHbk5m7z.js → supervisor-Dwyz3Q6J.js} +1 -1
  126. package/dist/ui/assets/{sync-dialog-CH4PBcVu.js → sync-dialog-BrADzVJ_.js} +1 -1
  127. package/dist/ui/assets/sync-exec-xhr-bridge-BjD_IfJF.js +1 -0
  128. package/dist/ui/assets/sync-sab-wire-CkrsRVrw.js +1 -0
  129. package/dist/ui/assets/tab-8LaHojfd.js +1 -0
  130. package/dist/ui/assets/{transformers-env-9M9En1_O.js → transformers-env-BdAlKg6J.js} +1 -1
  131. package/dist/ui/assets/{tray-leader-Bd293BI8.js → tray-leader-Ci2RqIwT.js} +1 -1
  132. package/dist/ui/assets/{tray-leave-runtime-wLd1uBMu.js → tray-leave-runtime-BTZJXHF3.js} +1 -1
  133. package/dist/ui/assets/{tray-sidecar-C35X7Jht.js → tray-sidecar-0neE65_N.js} +1 -1
  134. package/dist/ui/assets/{upgrade-detection-Tp8fDJAG.js → upgrade-detection-BhD72UZe.js} +1 -1
  135. package/dist/ui/assets/{upskill-lick-skip-Cr0VVPGj.js → upskill-lick-skip-CdUqlWMq.js} +1 -1
  136. package/dist/ui/assets/{voice-reply-wJfABSIn.js → voice-reply-DmPQ88Bf.js} +1 -1
  137. package/dist/ui/assets/wc-attach-Cl4xiVKJ.js +13 -0
  138. package/dist/ui/assets/{wc-browser-BJemxWhg.js → wc-browser-BvVPGuJC.js} +1 -1
  139. package/dist/ui/assets/{wc-computers-Cr14YnOg.js → wc-computers-BE8zFCtr.js} +1 -1
  140. package/dist/ui/assets/{wc-detached-DQ_ZTSZ-.js → wc-detached-B0kP4Z2z.js} +1 -1
  141. package/dist/ui/assets/{wc-extension-C8pgLDqO.js → wc-extension-WMLYCZ4S.js} +2 -2
  142. package/dist/ui/assets/wc-follower-D8xNU0aW.js +17 -0
  143. package/dist/ui/assets/{wc-follower-oauth-BU-XAftl.js → wc-follower-oauth-B1NOOs9Y.js} +1 -1
  144. package/dist/ui/assets/{wc-gelatiere-BiyouLW3.js → wc-gelatiere-D11FUwwn.js} +1 -1
  145. package/dist/ui/assets/wc-live-BN97yBha.js +428 -0
  146. package/dist/ui/assets/wc-nav-KGT1hZcx.js +2 -0
  147. package/dist/ui/assets/{wc-onboarding-FjrDOv_u.js → wc-onboarding-Bnq3tf12.js} +2 -2
  148. package/dist/ui/assets/{wc-permissions-C63-jLbY.js → wc-permissions-D5ysM8C0.js} +2 -2
  149. package/dist/ui/assets/{wc-placeholder-Bdbmjijc.js → wc-placeholder-BXQeCEMQ.js} +3 -3
  150. package/dist/ui/assets/{wc-secret-request-C9iCWgBV.js → wc-secret-request-p-Za4Fvj.js} +1 -1
  151. package/dist/ui/assets/{wc-settings-1ZJgN4Wk.js → wc-settings-ZR46gu8_.js} +3 -3
  152. package/dist/ui/assets/{wc-shell-CrMn8BW0.js → wc-shell-BXTMxaKz.js} +149 -149
  153. package/dist/ui/assets/{wc-shortcut-config-JXEU24sg.js → wc-shortcut-config-BcDpfOL9.js} +1 -1
  154. package/dist/ui/assets/{wc-sprinkles-CBaPR_V8.js → wc-sprinkles-DgakIQNM.js} +2 -2
  155. package/dist/ui/assets/{wc-transcript-export-eyG-SwVe.js → wc-transcript-export-diqfvsUL.js} +2 -2
  156. package/dist/ui/assets/wc-tray-CtCdghN6.js +5 -0
  157. package/dist/ui/assets/welcome-detection-wvPklODF.js +1 -0
  158. package/dist/ui/assets/whisper-session-AsG9i34j.js +2 -0
  159. package/dist/ui/assets/{xai-grok-C2oyJ5tt.js → xai-grok-CyMPEYvk.js} +1 -1
  160. package/dist/ui/assets/{xai-grok-G4GFCgrM.js → xai-grok-DeZVR3e9.js} +1 -1
  161. package/dist/ui/index.html +4 -3
  162. package/dist/ui/llm-proxy-sw.js +1 -1
  163. package/dist/ui/packages/webapp/index.html +4 -3
  164. package/package.json +2 -2
  165. package/dist/ui/assets/SKILL-CJrjPuRt.js +0 -1
  166. package/dist/ui/assets/__vite-browser-external-C7Grxh8D.js +0 -1
  167. package/dist/ui/assets/account-store-LwLxI7v1.js +0 -1
  168. package/dist/ui/assets/account-store-SI8RQbm0.js +0 -2
  169. package/dist/ui/assets/bedrock-camp-D-jmLdEX.js +0 -1
  170. package/dist/ui/assets/bedrock-camp-DmVFQWfL.js +0 -1
  171. package/dist/ui/assets/main-DFTTAllP.js +0 -22
  172. package/dist/ui/assets/memory-v2-flag-uChv9nwr.js +0 -1
  173. package/dist/ui/assets/new-session-C914zfKa.js +0 -2
  174. package/dist/ui/assets/oauth-bootstrap-B7cPXMSk.js +0 -2
  175. package/dist/ui/assets/panel-rpc-handlers-BuMdGle_.js +0 -2
  176. package/dist/ui/assets/provider-store-access-C0w1Xcs2.js +0 -1
  177. package/dist/ui/assets/provider-store-access-YjQKD2es.js +0 -1
  178. package/dist/ui/assets/providers-B0rCH1pp.js +0 -1
  179. package/dist/ui/assets/providers-B9p2VR5L.js +0 -2
  180. package/dist/ui/assets/realm-inprocess-qhbZWW6z.js +0 -30
  181. package/dist/ui/assets/run-DUzzkV29.js +0 -82
  182. package/dist/ui/assets/slicc-version-D1Js64gw.js +0 -1
  183. package/dist/ui/assets/sync-sab-wire-CN1_ni9J.js +0 -252
  184. package/dist/ui/assets/tab-0xwFvGm5.js +0 -1
  185. package/dist/ui/assets/wc-attach-CtVWDKPk.js +0 -13
  186. package/dist/ui/assets/wc-follower-nosCeVKN.js +0 -17
  187. package/dist/ui/assets/wc-live-CaopRwn0.js +0 -427
  188. package/dist/ui/assets/wc-nav-Wn2qDNiX.js +0 -2
  189. package/dist/ui/assets/wc-tray-dSLNIDh9.js +0 -5
  190. package/dist/ui/assets/welcome-detection-DuFRP38Z.js +0 -1
  191. package/dist/ui/assets/whisper-session-DrDhzSqp.js +0 -2
@@ -0,0 +1,252 @@
1
+ import{t as e}from"./runtime-env-DadgceZk.js";import{r as t}from"./fetch-body-CuwTaJC_.js";import{a as n,t as r}from"./path-utils-DNJG-zQf.js";import{C as i,_ as a}from"./shared-C_68vn79.js";function o(t,n){let r=e(),i=`/preview${t}${n?`?projectRoot=${encodeURIComponent(n)}`:``}`;if(r){let e=globalThis.chrome?.runtime?.getURL;if(e)return e(i)}let a=`http://localhost:5710`;return typeof window<`u`&&window.location?.origin?a=window.location.origin:typeof self<`u`&&self.location?.origin&&(a=self.location.origin),`${a}${i}`}async function s(e){let t=await crypto.subtle.digest(`SHA-256`,e);return Array.from(new Uint8Array(t)).map(e=>e.toString(16).padStart(2,`0`)).join(``)}function c(e){try{return new URL(e).protocol===`https:`}catch{return!1}}function l(e){return new Promise(t=>setTimeout(t,e))}async function u(e,n,r){let i;try{i=await e(n.url,{method:`GET`,headers:{Accept:`application/octet-stream`},timeoutMs:r})}catch(e){let t=e instanceof Error?e.message:String(e);return{ok:!1,retriable:!0,error:Error(`${n.label}: network error (${t})`)}}if(i.status>=500&&i.status<600)return{ok:!1,retriable:!0,error:Error(`${n.label}: server error HTTP ${i.status}`)};if(i.status<200||i.status>=300){let e=i.statusText?` ${i.statusText}`:``;return{ok:!1,retriable:!1,error:Error(`${n.label}: HTTP ${i.status}${e}`)}}let a=t(i.body);return!(a instanceof Uint8Array)||a.length===0?{ok:!1,retriable:!1,error:Error(`${n.label}: response body was empty`)}:{ok:!0,bytes:a}}async function d(e,t,n){let r;for(let i=1;i<=3;i++){let a=await u(e,t,n);if(a.ok)return a.bytes;if(r=a.error,!a.retriable||i===3)throw a.error;await l(250*i)}throw r??Error(`${t.label}: download failed`)}async function ee(e,t){let n=await s(e);if(n!==t.sha256.toLowerCase())throw Error(`${t.label}: sha256 mismatch (expected ${t.sha256.toLowerCase()}, got ${n})`)}async function f(e,t){if(!c(t.url))throw Error(`${t.label}: refused to fetch non-https URL '${t.url}'`);let n=await d(e,t,t.timeoutMs??6e4);return await ee(n,t),n}const p=`pyproject.toml`,m=`uv.lock`,h=`/workspace`;function g(e){return e.trim().toLowerCase().replace(/[-_.]+/g,`-`)}function _(e){let t=e.indexOf(`==`);return(t===-1?e:e.slice(0,t)).trim()}function v(e){let t=e.indexOf(`==`);return t===-1?{name:e.trim(),version:``}:{name:e.slice(0,t).trim(),version:e.slice(t+2).trim()}}async function y(e,t){let i=t?.startsWith(`/`)?t:h;for(;;){if(await e.exists(r(i,p)))return i;if(i===`/`)return null;i=n(i).dir}}async function te(e,t){return await y(e,t)??h}function b(e){let t=!1,n=!1;for(let r=0;r<e.length;r++){let i=e[r];if(i===`'`&&!n)t=!t;else if(i===`"`&&!t)n=!n;else if(i===`#`&&!t&&!n)return e.slice(0,r)}return e}function x(e){let t=e.trim();return t.startsWith(`"`)&&t.endsWith(`"`)||t.startsWith(`'`)&&t.endsWith(`'`)?t.slice(1,-1):null}function ne(e,t,n){let r=n,i=t;for(;!r.includes(`]`)&&i+1<e.length;)i+=1,r+=`\n${b(e[i])}`;let a=[];for(let e of r.matchAll(/["']([^"']*)["']/g))e[1].trim()&&a.push(e[1].trim());return{items:a,lastIndex:i}}function re(e){let t=e.split(`
2
+ `),n=``,r=`workspace`,i=`0.1.0`,a=[];for(let e=0;e<t.length;e++){let o=b(t[e]).trim();if(!o)continue;if(o.startsWith(`[`)){n=o;continue}if(n!==`[project]`)continue;let s=o.indexOf(`=`);if(s===-1)continue;let c=o.slice(0,s).trim(),l=o.slice(s+1).trim();if(c===`name`)r=x(l)??r;else if(c===`version`)i=x(l)??i;else if(c===`dependencies`){let n=ne(t,e,l);a=n.items,e=n.lastIndex}}return{name:r,version:i,dependencies:a}}function S(e){return e.length===0?`dependencies = []`:`dependencies = [\n${e.map(e=>` "${e}",`).join(`
3
+ `)}\n]`}function C(e){let t=S(e.dependencies);return`[project]\nname = "${e.name}"\nversion = "${e.version}"\n${t}\n`}function ie(e,t){let n=b(e[t]),r=t;for(;!n.includes(`]`)&&r+1<e.length;)r+=1,n+=`\n${b(e[r])}`;return r}function ae(e){let t={depsStart:-1,depsEnd:-1,projectHeaderIndex:-1,projectSectionEnd:-1},n=``;for(let r=0;r<e.length;r++){let i=b(e[r]).trim();if(i.startsWith(`[`)){t.projectHeaderIndex!==-1&&t.projectSectionEnd===-1&&r>t.projectHeaderIndex&&(t.projectSectionEnd=r),n=i,i===`[project]`&&(t.projectHeaderIndex=r);continue}if(n!==`[project]`||t.depsStart!==-1)continue;let a=i.indexOf(`=`);a!==-1&&i.slice(0,a).trim()===`dependencies`&&(t.depsStart=r,t.depsEnd=ie(e,r))}return t}function oe(e,t){let n=S(t.dependencies).split(`
4
+ `),r=e.split(`
5
+ `),{depsStart:i,depsEnd:a,projectHeaderIndex:o,projectSectionEnd:s}=ae(r);if(i!==-1)return r.splice(i,a-i+1,...n),r.join(`
6
+ `);if(o!==-1){let e=s===-1?r.length:s;return r.splice(e,0,...n),r.join(`
7
+ `)}return`${e}${e.length===0||e.endsWith(`
8
+ `)?``:`
9
+ `}\n${C(t)}`}const se={name:`name`,version:`version`,source:`source`,file_name:`fileName`,sha256:`sha256`};function w(e,t){t.name&&t.version&&t.source&&t.fileName&&t.sha256&&e.push(t)}function T(e){let t=[],n=null;for(let r of e.split(`
10
+ `)){let e=b(r).trim();if(!e)continue;if(e===`[[package]]`){n&&w(t,n),n={};continue}if(e.startsWith(`[`)){n&&w(t,n),n=null;continue}if(!n)continue;let i=e.indexOf(`=`);if(i===-1)continue;let a=se[e.slice(0,i).trim()];if(!a)continue;let o=x(e.slice(i+1).trim());o!==null&&(a===`source`?n.source=o:n[a]=o)}return n&&w(t,n),t}function ce(e){return e.map(e=>`[[package]]\nname = "${e.name}"\nversion = "${e.version}"\nsource = "${e.source}"\nfile_name = "${e.fileName}"\nsha256 = "${e.sha256}"\n`).join(`
11
+ `)}function le(e,t,n){let r=g(t),i=e.filter(e=>g(_(e))!==r);return i.push(`${t}==${n}`),i.sort((e,t)=>g(_(e)).localeCompare(g(_(t)))),i}function ue(e,t){let n=g(t.name),r=e.filter(e=>g(e.name)!==n);return r.push(t),r.sort((e,t)=>g(e.name).localeCompare(g(t.name))),r}async function E(e,t){let n=r(t,p);if(!await e.exists(n))return{name:`workspace`,version:`0.1.0`,dependencies:[]};let i=await e.readFile(n);return{...re(i),raw:i}}async function de(e,t,n){await e.mkdir(t,{recursive:!0});let i=n.raw===void 0?C(n):oe(n.raw,n);await e.writeFile(r(t,p),i)}async function D(e,t){let n=r(t,m);return await e.exists(n)?T(await e.readFile(n)):[]}async function fe(e,t,n){await e.mkdir(t,{recursive:!0}),await e.writeFile(r(t,m),ce(n))}const O={EBADF:8,EEXIST:20,EINVAL:28,EIO:29,EISDIR:31,ENOENT:44,ENOTDIR:54,ENOTEMPTY:55,EPERM:63},k=16877;async function pe(e){let t=new Map;t.set(``,{kind:`directory`,dirHandle:e});async function n(e,r){let i=e;for await(let[e,a]of i){let i=r===``?e:`${r}/${e}`;if(a.kind===`directory`)t.set(i,{kind:`directory`,dirHandle:a}),await n(a,i);else{let e=a,n=await e.getFile();t.set(i,{kind:`file`,fileHandle:e,size:n.size,mtime:n.lastModified})}}}return await n(e,``),{entries:t}}function A(e,t){return e===``?t:`${e}/${t}`}function me(e,t){return{getattr(t){let n=e.isDir(t.mode),r=e.isLink(t.mode)?t.opfs.linkTarget?.length??0:n?4096:t.opfs.size,i=new Date(t.opfs.mtime||t.timestamp);return{dev:1,ino:t.id,mode:t.mode,nlink:1,uid:0,gid:0,rdev:0,size:r,atime:i,mtime:i,ctime:i,blksize:4096,blocks:Math.ceil(r/4096)}},setattr(t,n){if(n.mode!==void 0&&(t.mode=t.mode&61440|n.mode&-61441),n.size!==void 0&&e.isFile(t.mode)){let e=n.size;t.opfs.size=e;let r=e;N(t.mount,async()=>{if(t.opfs.size>r)return;let n=await ye(t),i=t.mount.opts.sahProvider.acquire(t.opfs.relPath,n);try{i.truncate(e),i.flush()}finally{i.close(),t.mount.opts.sahProvider.release(t.opfs.relPath)}})}if(n.mtime!==void 0){let e=n.mtime.getTime();t.opfs.mtime=e,t.timestamp=e}},lookup(t,n){let r=t.opfs.children?.get(n);if(!r)throw new e.ErrnoError(O.ENOENT);return r},mknod(n,r,i,a){if(n.opfs.children?.has(r))throw new e.ErrnoError(O.EEXIST);let o=t.createNode(n,r,i,a);return n.opfs.children?.set(r,o),e.isDir(i)?N(n.mount,async()=>{let e=await(await L(n)).getDirectoryHandle(r,{create:!0});o.opfs.dirHandle=e}):e.isFile(i)&&N(n.mount,async()=>{let e=await(await L(n)).getFileHandle(r,{create:!0});o.opfs.fileHandle=e}),o},rename(t,n,r){let i=t.parent,a=t.name;if(a!==r||i!==n){if(n.opfs.children?.has(r))throw new e.ErrnoError(O.EEXIST);i.opfs.children?.delete(a),n.opfs.children?.set(r,t),t.name=r,t.parent=n,R(t,A(n.opfs.relPath,r)),e.isFile(t.mode)?N(t.mount,()=>be(t,i,a,n,r)):e.isDir(t.mode)&&N(t.mount,()=>xe(t,i,a,n,r))}},unlink(t,n){let r=t.opfs.children?.get(n);if(!r)throw new e.ErrnoError(O.ENOENT);if(e.isDir(r.mode))throw new e.ErrnoError(O.EISDIR);t.opfs.children?.delete(n),e.isFile(r.mode)&&N(t.mount,async()=>{try{t.mount.opts.sahProvider.release(r.opfs.relPath)}catch{}await(await L(t)).removeEntry(n)})},rmdir(t,n){let r=t.opfs.children?.get(n);if(!r)throw new e.ErrnoError(O.ENOENT);if(!e.isDir(r.mode))throw new e.ErrnoError(O.ENOTDIR);if((r.opfs.children?.size??0)>0)throw new e.ErrnoError(O.ENOTEMPTY);t.opfs.children?.delete(n),N(t.mount,async()=>{await(await L(t)).removeEntry(n)})},readdir(t){if(!e.isDir(t.mode))throw new e.ErrnoError(O.ENOTDIR);let n=[`.`,`..`];for(let e of t.opfs.children?.keys()??[])n.push(e);return n},symlink(n,r,i){if(n.opfs.children?.has(r))throw new e.ErrnoError(O.EEXIST);let a=t.createNode(n,r,41471,0);return a.opfs.linkTarget=i,n.opfs.children?.set(r,a),a},readlink(t){if(!e.isLink(t.mode))throw new e.ErrnoError(O.EINVAL);return t.opfs.linkTarget??``}}}function he(e){return{open(t){let n=t.node;if(e.isDir(n.mode)||!e.isFile(n.mode))return;let r=n.mount.opts.sahProvider.acquire(n.opfs.relPath,n.opfs.fileHandle);t.sah=r,t.flags!==void 0&&t.flags&512?(r.truncate(0),n.opfs.size=0):n.opfs.size=r.getSize()},close(e){let t=e.sah;if(t)try{t.flush()}finally{t.close(),e.node.mount.opts.sahProvider.release(e.node.opfs.relPath),e.sah=void 0}},read(t,n,r,i,a){let o=t.sah;if(!o)throw new e.ErrnoError(O.EBADF);let s=new Uint8Array(n.buffer,n.byteOffset+r,i);return o.read(s,{at:a})},write(t,n,r,i,a){let o=t.sah;if(!o)throw new e.ErrnoError(O.EBADF);let s=new Uint8Array(n.buffer,n.byteOffset+r,i),c=o.write(s,{at:a}),l=Math.max(t.node.opfs.size,a+c);return t.node.opfs.size=l,t.node.opfs.mtime=Date.now(),t.node.timestamp=t.node.opfs.mtime,c},llseek(t,n,r){let i=n;if(r===1)i=t.position+n;else if(r===2){let e=t.sah;i=(e?e.getSize():t.node.opfs.size)+n}if(i<0)throw new e.ErrnoError(O.EINVAL);return t.position=i,i}}}function ge(e,t,n,r){for(let[i,a]of r.entries){if(i===``)continue;let r=i.split(`/`),o=n;for(let t=0;t<r.length-1;t++){let n=r[t],i=o.opfs.children?.get(n);if(!i)throw new e.ErrnoError(O.EIO);o=i}let s=r[r.length-1];if(a.kind===`directory`){let e=t.createNode(o,s,k,0);e.opfs.dirHandle=a.dirHandle,e.opfs.children=new Map,o.opfs.children?.set(s,e)}else{let e=t.createNode(o,s,33188,0);e.opfs.fileHandle=a.fileHandle,e.opfs.size=a.size,e.opfs.mtime=a.mtime,e.timestamp=a.mtime,o.opfs.children?.set(s,e)}}}function _e(e){let t={mount(n){let{prewalk:r}=n.opts,i=r.entries.get(``);if(i?.kind!==`directory`)throw new e.ErrnoError(O.EINVAL);let a=t.createNode(null,`/`,k,0);return a.mount=n,a.opfs.dirHandle=i.dirHandle,a.opfs.children=new Map,ge(e,t,a,r),a},createNode(n,r,i,a=0){if(!e.isDir(i)&&!e.isFile(i)&&!e.isLink(i))throw new e.ErrnoError(O.EINVAL);let o=n===null?``:A(n.opfs?.relPath??``,r),s=e.createNode(n,r,i,a);return s.node_ops=t.node_ops,s.stream_ops=t.stream_ops,s.timestamp=Date.now(),n!==null&&(s.mount=n.mount),s.opfs={relPath:o,size:0,mtime:s.timestamp},e.isDir(i)&&(s.opfs.children=new Map),s},node_ops:void 0,stream_ops:void 0};return t.node_ops=me(e,t),t.stream_ops=he(e),t}const j=new WeakMap,M=new WeakMap;function N(e,t){M.set(e,!0);let n=(j.get(e)??Promise.resolve()).then(t,t);j.set(e,n),e.opts.flush||(e.opts.flush=()=>j.get(e)??Promise.resolve())}function P(e){return M.get(e)===!0}async function F(e){let t=j.get(e);for(;t;){let n=t;await n;let r=j.get(e);if(r===n){M.set(e,!1);return}t=r}}var I=class{backing;onClose;constructor(e,t){this.backing=e,this.onClose=t}read(e,t){let n=t?.at??0,r=new Uint8Array(e.buffer,e.byteOffset,e.byteLength),i=Math.min(this.backing.data.length,n+r.byteLength),a=Math.max(0,i-n);return r.set(this.backing.data.subarray(n,n+a),0),a}write(e,t){let n=t?.at??0,r=new Uint8Array(e.buffer,e.byteOffset,e.byteLength),i=n+r.byteLength;if(i>this.backing.data.length){let e=new Uint8Array(i);e.set(this.backing.data),this.backing.data=e}return this.backing.data.set(r,n),this.backing.dirty=!0,r.byteLength}truncate(e){if(e===this.backing.data.length)return;let t=new Uint8Array(e);t.set(this.backing.data.subarray(0,Math.min(e,this.backing.data.length))),this.backing.data=t,this.backing.dirty=!0}getSize(){return this.backing.data.length}flush(){}close(){this.onClose()}};function ve(){let e=new Map,t=new Set;return{provider:{acquire(n,r){let i=e.get(n);return i||(i={data:new Uint8Array,dirty:!0},e.set(n,i),t.add(n)),new I(i,()=>{i.dirty&&t.add(n)})},release(e){}},async preload(t){for(let[n,r]of t.entries){if(r.kind!==`file`)continue;let t=await r.fileHandle.getFile(),i=new Uint8Array(await t.arrayBuffer());e.set(n,{data:i,dirty:!1})}},async flush(t){for(let[n,r]of e){if(!r.dirty)continue;let e=n.split(`/`),i=t;for(let t of e.slice(0,-1))i=await i.getDirectoryHandle(t,{create:!0});let a=await(await i.getFileHandle(e[e.length-1],{create:!0})).createWritable(),o=new ArrayBuffer(r.data.byteLength);new Uint8Array(o).set(r.data),await a.write(o),await a.close(),r.dirty=!1}},getDirtyPaths(){return[...t]}}}async function L(e){if(e.opfs.dirHandle)return e.opfs.dirHandle;let t=e.opfs.relPath.split(`/`).filter(Boolean),n=e.mount.root.opfs.dirHandle;for(let e of t)n=await n.getDirectoryHandle(e,{create:!0});return e.opfs.dirHandle=n,n}async function ye(e){if(e.opfs.fileHandle)return e.opfs.fileHandle;let t=await(await L(e.parent)).getFileHandle(e.name,{create:!0});return e.opfs.fileHandle=t,t}function R(e,t){if(e.opfs.relPath=t,e.opfs.children)for(let[n,r]of e.opfs.children)R(r,A(t,n))}async function be(e,t,n,r,i){let a=await L(t),o=await L(r),s=await(await a.getFileHandle(n)).getFile(),c=new Uint8Array(await s.arrayBuffer()),l=await o.getFileHandle(i,{create:!0}),u=e.mount.opts.sahProvider.acquire(e.opfs.relPath,l);try{u.truncate(0),c.byteLength>0&&u.write(c,{at:0}),u.flush()}finally{u.close(),e.mount.opts.sahProvider.release(e.opfs.relPath)}await a.removeEntry(n),e.opfs.fileHandle=l}async function xe(e,t,n,r,i){let a=await L(t),o=await L(r),s=await a.getDirectoryHandle(n),c=await o.getDirectoryHandle(i,{create:!0});await z(s,c),await a.removeEntry(n,{recursive:!0}),e.opfs.dirHandle=c}async function z(e,t){let n=e;for await(let[e,r]of n)if(r.kind===`directory`)await z(r,await t.getDirectoryHandle(e,{create:!0}));else{let n=await r.getFile(),i=new Uint8Array(await n.arrayBuffer()),a=await(await t.getFileHandle(e,{create:!0})).createWritable();await a.write(i),await a.close()}}function B(e){return`slicc: synchronous access to mounted path '${e}' is not supported. Use the async slicc.fs module (e.g. \`await slicc.fs.read_text('${e}')\` or \`await slicc.fs.listdir('${e}')\`), or copy the file into the VFS first (\`await slicc.fs.read_bytes('${e}/<file>')\` then write it under /tmp).`}function V(e,t){let n=new e.ErrnoError(O.EIO);return n.message=B(t),n}function Se(e){let t={mount(n){let r=e.createNode(null,`/`,16877,0);return r.node_ops=t.node_ops,r.stream_ops=t.stream_ops,r.mount=n,r},createNode(n,r,i,a=0){let o=e.createNode(n,r,i,a);return o.node_ops=t.node_ops,o.stream_ops=t.stream_ops,n!==null&&(o.mount=n.mount),o},node_ops:{getattr:e=>{throw V(n(e),H(e))},setattr:e=>{throw V(n(e),H(e))},lookup:e=>{throw V(n(e),H(e))},mknod:e=>{throw V(n(e),H(e))},rename:e=>{throw V(n(e),H(e))},unlink:e=>{throw V(n(e),H(e))},rmdir:e=>{throw V(n(e),H(e))},readdir:e=>{throw V(n(e),H(e))},symlink:e=>{throw V(n(e),H(e))},readlink:e=>{throw V(n(e),H(e))}},stream_ops:{open:e=>{throw V(n(e.node),H(e.node))},close:()=>{},read:e=>{throw V(n(e.node),H(e.node))},write:e=>{throw V(n(e.node),H(e.node))},llseek:e=>{throw V(n(e.node),H(e.node))}}};function n(t){return e}return t}function H(e){let t=e.mount;return t?.opts?.mountPath??t?.mountpoint??`<unknown mount>`}function Ce(e,t){let n=e.MOUNT_BOMB_FS;return n||(n=Se(t),e.MOUNT_BOMB_FS=n),n}function we(e,t,n=()=>{}){if(t.length===0)return;let r=Ce(e.filesystems,e);for(let i of t)try{try{e.stat(i)}catch{e.mkdirTree(i)}e.mount(r,{mountPath:i},i)}catch(e){n(`mount '${i}': bomb overlay failed: ${e instanceof Error?e.message:String(e)}`)}}function Te(e){return B(e)}async function Ee(e,t){if(t.length===0)return;let n={};for(let e of t)n[e]=Te(e);let r=JSON.stringify({prefixes:t,messages:n});e.globals.set(`__slicc_mount_data`,r);try{await e.runPythonAsync(`
12
+ import builtins as _slicc_builtins
13
+ import io as _slicc_io
14
+ import os as _slicc_os
15
+ import os.path as _slicc_osp
16
+ import errno as _slicc_errno
17
+ import json as _slicc_json
18
+
19
+ _slicc_data = _slicc_json.loads(__slicc_mount_data)
20
+ _slicc_mount_prefixes = list(_slicc_data['prefixes'])
21
+ _slicc_mount_messages = dict(_slicc_data['messages'])
22
+ del _slicc_data
23
+
24
+ def _slicc_match_mount_prefix(path):
25
+ if path is None:
26
+ return None
27
+ if isinstance(path, int):
28
+ return None
29
+ try:
30
+ s = _slicc_os.fspath(path)
31
+ except TypeError:
32
+ return None
33
+ if isinstance(s, bytes):
34
+ try:
35
+ s = s.decode('utf-8', 'surrogateescape')
36
+ except Exception:
37
+ return None
38
+ if not isinstance(s, str):
39
+ return None
40
+ try:
41
+ resolved = _slicc_osp.abspath(s)
42
+ except Exception:
43
+ return None
44
+ for prefix in _slicc_mount_prefixes:
45
+ if resolved == prefix or resolved.startswith(prefix + '/'):
46
+ return prefix
47
+ return None
48
+
49
+ def _slicc_raise_mount_guard(path, prefix):
50
+ msg = _slicc_mount_messages.get(prefix)
51
+ if not msg:
52
+ msg = "slicc: synchronous access to mounted path '" + prefix + "' is not supported; use the async slicc.fs module."
53
+ raise OSError(_slicc_errno.EIO, msg, str(path))
54
+
55
+ _slicc_orig_builtins_open = _slicc_builtins.open
56
+ _slicc_orig_io_open = _slicc_io.open
57
+ _slicc_orig_listdir = _slicc_os.listdir
58
+ _slicc_orig_scandir = _slicc_os.scandir
59
+ _slicc_orig_stat = _slicc_os.stat
60
+ _slicc_orig_lstat = _slicc_os.lstat
61
+ _slicc_orig_mkdir = _slicc_os.mkdir
62
+ _slicc_orig_remove = _slicc_os.remove
63
+ _slicc_orig_rename = _slicc_os.rename
64
+
65
+ def _slicc_guarded_builtins_open(file, *args, **kwargs):
66
+ if isinstance(file, int):
67
+ return _slicc_orig_builtins_open(file, *args, **kwargs)
68
+ prefix = _slicc_match_mount_prefix(file)
69
+ if prefix is not None:
70
+ _slicc_raise_mount_guard(file, prefix)
71
+ return _slicc_orig_builtins_open(file, *args, **kwargs)
72
+
73
+ def _slicc_guarded_io_open(file, *args, **kwargs):
74
+ if isinstance(file, int):
75
+ return _slicc_orig_io_open(file, *args, **kwargs)
76
+ prefix = _slicc_match_mount_prefix(file)
77
+ if prefix is not None:
78
+ _slicc_raise_mount_guard(file, prefix)
79
+ return _slicc_orig_io_open(file, *args, **kwargs)
80
+
81
+ def _slicc_make_path_guard(orig):
82
+ def _guarded(path, *args, **kwargs):
83
+ prefix = _slicc_match_mount_prefix(path)
84
+ if prefix is not None:
85
+ _slicc_raise_mount_guard(path, prefix)
86
+ return orig(path, *args, **kwargs)
87
+ return _guarded
88
+
89
+ def _slicc_guarded_rename(src, dst, *args, **kwargs):
90
+ for p in (src, dst):
91
+ prefix = _slicc_match_mount_prefix(p)
92
+ if prefix is not None:
93
+ _slicc_raise_mount_guard(p, prefix)
94
+ return _slicc_orig_rename(src, dst, *args, **kwargs)
95
+
96
+ _slicc_builtins.open = _slicc_guarded_builtins_open
97
+ _slicc_io.open = _slicc_guarded_io_open
98
+ _slicc_os.listdir = _slicc_make_path_guard(_slicc_orig_listdir)
99
+ _slicc_os.scandir = _slicc_make_path_guard(_slicc_orig_scandir)
100
+ _slicc_os.stat = _slicc_make_path_guard(_slicc_orig_stat)
101
+ _slicc_os.lstat = _slicc_make_path_guard(_slicc_orig_lstat)
102
+ _slicc_os.mkdir = _slicc_make_path_guard(_slicc_orig_mkdir)
103
+ _slicc_os.remove = _slicc_make_path_guard(_slicc_orig_remove)
104
+ _slicc_os.rename = _slicc_guarded_rename
105
+ `)}finally{try{e.runPython(`del __slicc_mount_data`)}catch{}}}var U=class{port;nextId=1;pending=new Map;eventSubscribers=new Map;progressWaiters=new Set;handler;disposed=!1;constructor(e){this.port=e,this.handler=e=>{let t=e.data;if(t?.type===`realm-rpc-res`){let t=e.data,n=this.pending.get(t.id);if(!n)return;this.pending.delete(t.id),typeof t.error==`string`?n.reject(Error(t.error)):n.resolve(t.result),this.notifyProgress();return}if(t?.type===`realm-event`){let t=e.data,n=this.eventSubscribers.get(t.channel);if(!n)return;for(let e of[...n])try{e(t.payload)}catch{}}},e.addEventListener(`message`,this.handler),e.start?.()}get pendingCount(){return this.pending.size+this.eventSubscriptionCount}get eventSubscriptionCount(){let e=0;for(let t of this.eventSubscribers.values())e+=t.size;return e}waitForProgress(){return this.pendingCount===0?Promise.resolve():new Promise(e=>{this.progressWaiters.add(e)})}notifyProgress(){if(this.progressWaiters.size===0)return;let e=[...this.progressWaiters];this.progressWaiters.clear();for(let t of e)t()}call(e,t,n=[]){if(this.disposed)return Promise.reject(Error(`realm-rpc: client disposed`));let r=this.nextId++,i={type:`realm-rpc-req`,id:r,channel:e,op:t,args:n};return new Promise((e,t)=>{this.pending.set(r,{resolve:e,reject:t}),this.port.postMessage(i)})}onEvent(e,t){if(this.disposed)return()=>{};let n=this.eventSubscribers.get(e);return n||(n=new Set,this.eventSubscribers.set(e,n)),n.add(t),this.notifyProgress(),()=>{let n=this.eventSubscribers.get(e);n&&(n.delete(t),n.size===0&&this.eventSubscribers.delete(e),this.notifyProgress())}}dispose(){if(this.disposed)return;this.disposed=!0,this.port.removeEventListener(`message`,this.handler);let e=Error(`realm-rpc: client disposed`);for(let t of this.pending.values())t.reject(e);this.pending.clear(),this.eventSubscribers.clear(),this.notifyProgress()}};function De(e){return{listdir(t){return e.call(`vfs`,`readDir`,[t])},async readBytes(t){let n=await e.call(`vfs`,`readFileBinary`,[t]);return n instanceof Uint8Array?n:new Uint8Array(n)},async writeBytes(t,n){await e.call(`vfs`,`writeFileBinary`,[t,n])},stat(t){return e.call(`vfs`,`stat`,[t])},exists(t){return e.call(`vfs`,`exists`,[t])},async mkdir(t){await e.call(`vfs`,`mkdir`,[t])},async remove(t){await e.call(`vfs`,`rm`,[t])}}}async function Oe(e,t){let n=De(t);e.registerJsModule(`_slicc_fs_js`,n),await e.runPythonAsync(`
106
+ import sys
107
+ import types
108
+ import js
109
+
110
+ def _build_slicc_module(_bridge):
111
+ fs_module = types.ModuleType("slicc.fs")
112
+
113
+ async def listdir(path):
114
+ result = await _bridge.listdir(path)
115
+ return [str(name) for name in result.to_py()] if hasattr(result, "to_py") else [str(name) for name in result]
116
+
117
+ async def read_bytes(path):
118
+ result = await _bridge.readBytes(path)
119
+ # Pyodide returns JS Uint8Array as memoryview; coerce to bytes.
120
+ if hasattr(result, "to_bytes"):
121
+ return result.to_bytes()
122
+ if isinstance(result, memoryview):
123
+ return bytes(result)
124
+ return bytes(result)
125
+
126
+ async def read_text(path, encoding="utf-8"):
127
+ data = await read_bytes(path)
128
+ return data.decode(encoding)
129
+
130
+ async def write_bytes(path, data):
131
+ if isinstance(data, str):
132
+ raise TypeError("write_bytes expects bytes-like; use write_text for str")
133
+ if isinstance(data, (bytes, bytearray, memoryview)):
134
+ payload = bytes(data)
135
+ else:
136
+ payload = bytes(data)
137
+ # Convert Python bytes to a real JS Uint8Array before crossing
138
+ # the realm RPC boundary. The bridge call ultimately hits
139
+ # \`port.postMessage\` (see realm-rpc.ts), which structured-
140
+ # clones its argument; a Python \`bytes\` would arrive as a
141
+ # PyProxy and trigger DataCloneError. \`js.Uint8Array.new\`
142
+ # copies the buffer into a JS typed array that clones cleanly.
143
+ await _bridge.writeBytes(path, js.Uint8Array.new(payload))
144
+
145
+ async def write_text(path, text, encoding="utf-8"):
146
+ if not isinstance(text, str):
147
+ raise TypeError("write_text expects str; use write_bytes for bytes")
148
+ await write_bytes(path, text.encode(encoding))
149
+
150
+ async def stat(path):
151
+ result = await _bridge.stat(path)
152
+ obj = result.to_py() if hasattr(result, "to_py") else result
153
+ if isinstance(obj, dict):
154
+ return {
155
+ "isDirectory": bool(obj.get("isDirectory", False)),
156
+ "isFile": bool(obj.get("isFile", False)),
157
+ "size": int(obj.get("size", 0)),
158
+ }
159
+ return {
160
+ "isDirectory": bool(getattr(obj, "isDirectory", False)),
161
+ "isFile": bool(getattr(obj, "isFile", False)),
162
+ "size": int(getattr(obj, "size", 0)),
163
+ }
164
+
165
+ async def exists(path):
166
+ result = await _bridge.exists(path)
167
+ return bool(result)
168
+
169
+ async def mkdir(path, parents=False):
170
+ # The underlying vfs.mkdir is recursive ({recursive: true} in
171
+ # realm-host.ts), matching parents=True semantics. With
172
+ # parents=False we raise FileExistsError when the target
173
+ # already exists, mirroring pathlib.Path.mkdir(parents=False).
174
+ if not parents:
175
+ try:
176
+ already = await exists(path)
177
+ except Exception:
178
+ already = False
179
+ if already:
180
+ raise FileExistsError(path)
181
+ await _bridge.mkdir(path)
182
+
183
+ async def remove(path):
184
+ await _bridge.remove(path)
185
+
186
+ async def walk(path):
187
+ results = []
188
+ async def _visit(current):
189
+ names = await listdir(current)
190
+ dirnames = []
191
+ filenames = []
192
+ for name in names:
193
+ child = current + "/" + name if current != "/" else "/" + name
194
+ try:
195
+ st = await stat(child)
196
+ except Exception:
197
+ continue
198
+ if st["isDirectory"]:
199
+ dirnames.append(name)
200
+ elif st["isFile"]:
201
+ filenames.append(name)
202
+ results.append((current, dirnames, filenames))
203
+ for d in list(dirnames):
204
+ child = current + "/" + d if current != "/" else "/" + d
205
+ await _visit(child)
206
+ await _visit(path)
207
+ return results
208
+
209
+ fs_module.listdir = listdir
210
+ fs_module.read_bytes = read_bytes
211
+ fs_module.read_text = read_text
212
+ fs_module.write_bytes = write_bytes
213
+ fs_module.write_text = write_text
214
+ fs_module.stat = stat
215
+ fs_module.exists = exists
216
+ fs_module.mkdir = mkdir
217
+ fs_module.remove = remove
218
+ fs_module.walk = walk
219
+
220
+ slicc_module = types.ModuleType("slicc")
221
+ slicc_module.fs = fs_module
222
+ sys.modules["slicc"] = slicc_module
223
+ sys.modules["slicc.fs"] = fs_module
224
+ return slicc_module
225
+
226
+ import _slicc_fs_js as _bridge
227
+ _build_slicc_module(_bridge)
228
+ del _build_slicc_module
229
+ del _bridge
230
+ `)}const W=a(`pyodide`,`314.0.6`),G=`https://cdn.jsdelivr.net/pyodide/v${W}/full/`,K=`pyodide is not installed in node_modules: run \`ipk add pyodide@${W}\` (no network fallback)`,q={asmJs:`pyodide.asm.mjs`,asmWasm:`pyodide.asm.wasm`,stdlibZip:`python_stdlib.zip`,lockJson:`pyodide-lock.json`};async function ke(e){let t;try{t=await i(`pyodide/package.json`,e.fromDir,e.reader)}catch{return null}if(t.type!==`file`)return null;let r=n(t.path).dir;for(let t of Object.values(q))if(!await e.reader.exists(`${r}/${t}`))return null;return r}async function Ae(e,t){try{let[n,r,i,a]=await Promise.all([e.call(`vfs`,`readFile`,[`${t}/${q.asmJs}`]),e.call(`vfs`,`readFileBinary`,[`${t}/${q.asmWasm}`]),e.call(`vfs`,`readFileBinary`,[`${t}/${q.stdlibZip}`]),e.call(`vfs`,`readFile`,[`${t}/${q.lockJson}`])]);return{asmJsSource:n,asmWasmBytes:r instanceof Uint8Array?r:new Uint8Array(r),stdlibBytes:i instanceof Uint8Array?i:new Uint8Array(i),lockJsonString:a}}catch{return null}}function je(e,t){let n=e+q.asmWasm,r=globalThis.fetch,i=!0,a=(e,i)=>(typeof e==`string`?e:e instanceof URL?e.href:e.url)===n?Promise.resolve(new Response(t,{headers:{"Content-Type":`application/wasm`}})):r(e,i);return globalThis.fetch=a,{restore:()=>{i&&(i=!1,globalThis.fetch===a&&(globalThis.fetch=r))}}}async function Me(e,t,n){let r=await Ae(n,t);if(!r)throw Error(K);let i=URL.createObjectURL(new Blob([r.asmJsSource],{type:`text/javascript`})),a=URL.createObjectURL(new Blob([r.stdlibBytes],{type:`application/zip`})),s=`slicc-pyodide://local/${crypto.randomUUID()}/`,c=je(s,r.asmWasmBytes);try{let t=await import(i);return await e.loadPyodide({indexURL:s,lockFileContents:r.lockJsonString,stdLibURL:a,createPyodideModule:t.default,packageBaseUrl:o(`/workspace/python_wheels/`)})}finally{c.restore(),URL.revokeObjectURL(i),URL.revokeObjectURL(a)}}async function Ne(e,t,n=()=>import(`./pyodide-65Z_RapY.js`)){let r=[],i=[],a=new U(t),o;try{let t=await n();o=e.pyodideAssetRoot?await Me(t,e.pyodideAssetRoot,a):await t.loadPyodide({indexURL:e.pyodideIndexURL})}catch(e){a.dispose();let n={type:`realm-error`,message:`loadPyodide: ${e instanceof Error?e.message:String(e)}`};t.postMessage(n);return}let s=e=>{i.push(`Warning: ${e}\n`)},c=[],l,u;try{await Pe(o,a,s,Fe(e.pyodideAssetRoot));let{mountPyLiveVfs:n}=await import(`./py-live-vfs-Dx9cFlfE.js`);l=n(o,e,t,s),l||(c=await Ue(o,e,s),await We(o,e,s)),await Ve(o,a,e,s),await Ge(o,a,s);try{o.FS.chdir(e.cwd)}catch{}Ke(o,e,r,i),u=await Ye(o,i),l?Je(l,s):await Xe(c,e,a,s)}catch(e){a.dispose();let n={type:`realm-error`,message:`${e instanceof Error?e.message:String(e)}${i.length?`\n${i.join(``)}`:``}`};t.postMessage(n);return}a.dispose();let d={type:`realm-done`,stdout:r.join(``),stderr:i.join(``),exitCode:u};t.postMessage(d)}const J=`/workspace/python_wheels`;async function Pe(e,t,n,r){await Ie(t,n,r);try{await e.loadPackage([`micropip`])}catch(e){n(`micropip preload failed: ${Z(e)}`)}}function Fe(e){return e?`${e}/${q.lockJson}`:`/workspace/node_modules/pyodide/pyodide-lock.json`}const Y=1e4,X=new WeakMap;function Ie(e,t,n){let r=X.get(e);if(r)return r;let i=Le(e,t,n);return X.set(e,i),i}async function Le(e,t,n){let r;try{if(!await e.call(`vfs`,`exists`,[n]))return;let t=await e.call(`vfs`,`readFile`,[n]),i=JSON.parse(t);for(let[e,t]of Object.entries(i.packages??{}))if(t?.file_name&&g(t.name??e)===`micropip`){r=t;break}}catch(e){t(`micropip wheel staging skipped: ${Z(e)}`);return}if(!r?.file_name||!r.sha256)return;let i=`${J}/${r.file_name}`;try{if(await e.call(`vfs`,`exists`,[i]))return;let t=await f(Re(e),{url:`${G}${r.file_name}`,sha256:r.sha256,label:`micropip wheel`,timeoutMs:Y});await e.call(`vfs`,`mkdir`,[J]),await e.call(`vfs`,`writeFileBinary`,[i,t])}catch(e){t(`micropip wheel staging failed: ${Z(e)}`)}}function Re(e){return async(t,n)=>{let r={method:n?.method??`GET`,...n?.headers?{headers:n.headers}:{},...n?.body===void 0?{}:{body:n.body}},i=await ze(e.call(`fetch`,`request`,[t,r]),n?.timeoutMs??Y,t);return{status:i.status,statusText:i.statusText,headers:i.headers,body:i.body instanceof Uint8Array?i.body:new Uint8Array(i.body),url:i.url}}}function ze(e,t,n){let r,i=new Promise((e,i)=>{r=setTimeout(()=>i(Error(`request to ${n} timed out after ${t}ms`)),t)});return Promise.race([e,i]).finally(()=>clearTimeout(r))}function Be(e){return{exists:t=>e.call(`vfs`,`exists`,[t]),readFile:t=>e.call(`vfs`,`readFile`,[t])}}async function Ve(e,t,n,r){let i=Be(t),a;try{a=await y(i,n.cwd)}catch(e){r(`manifest discovery failed: ${Z(e)}`);return}if(a===null)return;let o,s;try{let[e,t]=await Promise.all([E(i,a),D(i,a)]);o=e.dependencies,s=t}catch(e){r(`manifest read failed: ${Z(e)}`);return}let c=new Map;for(let e of s)c.set(g(e.name),e);for(let t of o){let{name:n}=v(t);if(!n)continue;let i=c.get(g(n));if(!i){r(`no integrity pin for \`${n}\`; run \`di sync\` to repair`);continue}await He(e,i,r)}}async function He(e,t,n){switch(t.source){case`pyodide-cdn`:try{await e.loadPackage([t.name])}catch(e){n(`activation of \`${t.name}\` failed: ${Z(e)}`)}return;case`pypi`:try{let n=`${J}/${t.fileName}`;await e.runPythonAsync(`import micropip; await micropip.install('emfs:${n}')`)}catch(e){n(`activation of \`${t.name}\` failed: ${Z(e)}`)}return;default:n(`unknown source \`${t.source}\` for \`${t.name}\`; skipping`)}}async function Ue(e,t,n){if(t.opfsMountDbName===void 0)return[];let r=t.pyodideMountDirs??[t.cwd,`/tmp`],i=t.mountPoints??[],a=new Set(i.map(e=>e.path));try{return(await Qe(e,r,t.opfsMountDbName,n,{skipMountPaths:a})).mounts}catch(e){return n(`VFS→Pyodide OPFS mount failed: ${Z(e)}`),[]}}async function We(e,t,n){let r=t.mountPoints??[];if(r.length!==0){try{we(e.FS,r.map(e=>e.path),n)}catch(e){n(`bomb overlay install failed: ${Z(e)}`)}try{await Ee(e,r.map(e=>e.path))}catch(e){n(`python mount guard install failed: ${Z(e)}`)}}}async function Ge(e,t,n){try{await Oe(e,t)}catch(e){n(`slicc.fs registration failed: ${Z(e)}`)}}function Ke(e,t,n,r){e.setStdout({batched:e=>n.push(e+`
231
+ `)}),e.setStderr({batched:e=>r.push(e+`
232
+ `)});let i=!1;e.setStdin({stdin:()=>i||!t.stdin?null:(i=!0,t.stdin)}),qe(e,t.env),e.globals.set(`__slicc_code`,t.code),e.globals.set(`__slicc_filename`,t.filename),e.globals.set(`__slicc_argv`,t.argv)}function qe(e,t){if(!(!t||Object.keys(t).length===0)){e.globals.set(`__slicc_env`,e.toPy(t));try{e.runPython(`import os; os.environ.update(__slicc_env)`)}finally{e.runPython(`del __slicc_env`)}}}function Je(e,t){try{e.flush()}catch(e){t(`Pyodide→VFS flush failed: ${Z(e)}`)}}async function Ye(e,t){let n;try{await e.runPythonAsync(`
233
+ import sys
234
+ import traceback
235
+
236
+ __slicc_exit_code = 0
237
+ try:
238
+ sys.argv = __slicc_argv
239
+ exec(compile(__slicc_code, __slicc_filename, "exec"), {"__name__": "__main__", "__file__": __slicc_filename})
240
+ except SystemExit as exc:
241
+ code = exc.code
242
+ if code is None:
243
+ __slicc_exit_code = 0
244
+ elif isinstance(code, int):
245
+ __slicc_exit_code = code
246
+ else:
247
+ print(code, file=sys.stderr)
248
+ __slicc_exit_code = 1
249
+ except BaseException:
250
+ traceback.print_exc()
251
+ __slicc_exit_code = 1
252
+ `);let t=e.globals.get(`__slicc_exit_code`);n=typeof t==`number`?t:Number(t??1)}catch(e){let r=e instanceof Error?e.message:String(e);t.push(`${r}\n`),n=1}try{e.runPython(`del __slicc_code, __slicc_filename, __slicc_argv, __slicc_exit_code`)}catch{}return n}async function Xe(e,t,n,r){if(t.opfsMountDbName!==void 0){try{await tt(e,n)}catch(e){r(`Pyodide→VFS consistency mark clear failed: ${e instanceof Error?e.message:String(e)}`),r(`Pyodide→VFS OPFS flush skipped: clean-boot mark could not be cleared`);return}try{await nt(e)}catch(e){r(`Pyodide→VFS OPFS flush failed: ${e instanceof Error?e.message:String(e)}`)}try{await rt(e,n)}catch(e){r(`Pyodide→kernel VFS invalidation failed: ${Z(e)}`)}}}const Ze=new Set([`dev`,`proc`,`lib`,`tmp`,`home`]);function Z(e){if(e&&typeof e==`object`){let t=e,n=typeof t.errno==`number`,r=typeof t.code==`string`;if(n||r){let e=typeof t.name==`string`&&t.name?t.name:`Error`,i=typeof t.message==`string`?t.message:``,a=[];n&&a.push(`errno ${t.errno}`),r&&a.push(t.code);let o=a.length?` (${a.join(`, `)})`:``;return i?`${e}: ${i}${o}`:`${e}${o}`}}return e instanceof Error?e.message:String(e)}function Q(e){let t=e.FS.filesystems,n=t.OPFS_SYNC_FS;return n||(n=_e(e.FS),t.OPFS_SYNC_FS=n),n}async function Qe(e,t,n,r=()=>{},i={}){let a=[],o=i.skipMountPaths??new Set,s=navigator.storage;if(!s?.getDirectory)return r(`VFS→Pyodide OPFS mount skipped: navigator.storage.getDirectory unavailable`),{mounts:a};let c;try{c=await s.getDirectory()}catch(e){return r(`VFS→Pyodide OPFS mount: getDirectory() failed: ${Z(e)}`),{mounts:a}}let l;try{l=await c.getDirectoryHandle(n,{create:!0})}catch(e){return r(`VFS→Pyodide OPFS mount: opening '${n}' failed: ${Z(e)}`),{mounts:a}}let u=Q(e);for(let n of t){if(n===`/`){await $e(e,u,l,o,a,r);continue}if(!o.has(n))try{let t=l;for(let e of n.split(`/`).filter(Boolean))t=await t.getDirectoryHandle(e,{create:!0});await $(e,u,n,t,a)}catch(e){r(`VFS→Pyodide OPFS mount '${n}' failed: ${Z(e)}`)}}return{mounts:a}}async function $e(e,t,n,r,i,a){try{let o=n;for await(let[n,s]of o){if(s.kind!==`directory`||Ze.has(n))continue;let o=`/${n}`;if(!r.has(o))try{await $(e,t,o,s,i)}catch(e){a(`VFS→Pyodide OPFS mount '${o}' failed: ${Z(e)}`)}}}catch(e){a(`VFS→Pyodide OPFS mount '/' failed: ${Z(e)}`)}}async function $(e,t,n,r,i){try{e.FS.stat(n)}catch{e.FS.mkdirTree(n)}let a=await pe(r),o=ve();await o.preload(a);let s={rootHandle:r,prewalk:a,sahProvider:o.provider},c=e.FS.mount(t,s,n),l=c?.mount??{opts:s,mountpoint:n,root:c};i.push({pyPath:n,mount:l,rootHandle:r,flushBuffers:o.flush,getDirtyPaths:o.getDirtyPaths})}function et(e){return e.some(e=>e.getDirtyPaths().length>0||P(e.mount))}async function tt(e,t){et(e)&&await t.call(`vfs`,`forgetSidecarConsistency`,[])}async function nt(e){for(let t of e)await F(t.mount),await t.flushBuffers(t.rootHandle)}async function rt(e,t){let n=[];for(let t of e)for(let e of t.getDirtyPaths())n.push(t.pyPath===`/`?`/${e}`:`${t.pyPath}/${e}`);n.length>0&&await t.call(`vfs`,`invalidatePaths`,[n])}const it=new Set([`bcrypt`,`better-sqlite3`,`canvas`,`cpu-features`,`fsevents`,`leveldown`,`libxmljs`,`libxmljs2`,`node-gyp-build`,`node-sass`,`puppeteer`,`robotjs`,`sass-embedded`,`sharp`,`snappy`,`sqlite3`,`tree-sitter`,`usb`]),at={sharp:` Use the built-in 'convert' shell command for image work.`,canvas:` Use the built-in 'convert' / OffscreenCanvas for image work.`,"better-sqlite3":` Use the built-in 'sqlite3' shell command (sql.js WASM).`,sqlite3:` Use the built-in 'sqlite3' shell command (sql.js WASM).`,bcrypt:` Use crypto.subtle.digest() with PBKDF2 / Argon2 in pure JS.`,puppeteer:` Use the built-in browser-automation shell commands.`};function ot(e,t){let n=at[t]??``;return Error(`require('${e}'): '${t}' is a Node native module (C++ bindings) — it cannot run in the browser sandbox.${n}`)}export{le as _,W as a,s as b,U as c,D as d,g as f,v as g,fe as h,G as i,y as l,de as m,ot as n,Ne as o,te as p,K as r,ke as s,it as t,E as u,ue as v,o as x,f as y};
@@ -1 +1 @@
1
- import{l as e,n as t,t as n}from"./almost-bash-shell-headless-B29ulBpN.js";import{n as r}from"./browser-DG5MjvHF.js";import{c as i}from"./sudoers-BdBYQPUn.js";import{r as a}from"./sudo-fs-C6r_MIIY.js";import{n as o}from"./jsh-discovery-CnvNKojr.js";import{o as s}from"./just-bash-compat-B-SPHuh_.js";import{n as c,r as l}from"./supervisor-gHbk5m7z.js";function u(t,n){return new Map(Object.entries({HOME:e,PATH:o,USER:`user`,SHELL:`/bin/bash`,TMPDIR:`/tmp`,PWD:t.cwd,...n,...t.env}))}function d(e,t,n,i){let a=u(t,i);return r({fs:e,cwd:t.cwd,env:a,stdin:s(``),exec:(e,r)=>n.exec(e,{env:r?.env??Object.fromEntries(a),cwd:r?.cwd??t.cwd,args:r?.args,...r?.env===void 0?{}:{replaceEnv:!0}})})}const f={requestApproval:async()=>({decision:`deny`})};async function p(e){let r=h(e.fs,e.sudo),i=new t(r),a=new n({fs:r,cwd:`/workspace`,processManager:e.processManager,processOwner:{kind:`jshd`}}),o={exec:(e,t)=>a.getBash().exec(e,{env:t?.env??a.getEnv(),cwd:t?.cwd??`/workspace`,args:t?.args,...t?.env===void 0?{}:{replaceEnv:!0}})},s=c({fs:e.fs,processManager:e.processManager,lickManager:e.lickManager,...e.realmFactory?{realmFactory:e.realmFactory}:{},buildContext:e=>m(i,e,o)}),u=(await l(e.fs)).filter(e=>e.enabled);if(u.length===0)return[];let d=[];for(let e of u)try{await s.start(e),d.push(e.name)}catch{}return d}function m(e,t,n){return d(e,t,n)}function h(e,t){return a(e,{broker:t?.broker??f,getPolicy:t?.getPolicy??i,defaultDisposition:`allow`})}export{p as restoreEnabledJshdUnits};
1
+ import{l as e,n as t,t as n}from"./almost-bash-shell-headless-D8xvUvg7.js";import{n as r}from"./browser-DG5MjvHF.js";import{c as i}from"./sudoers-BdBYQPUn.js";import{r as a}from"./sudo-fs-C6r_MIIY.js";import{n as o}from"./jsh-discovery-CnvNKojr.js";import{o as s}from"./just-bash-compat-B-SPHuh_.js";import{n as c,r as l}from"./supervisor-Dwyz3Q6J.js";function u(t,n){return new Map(Object.entries({HOME:e,PATH:o,USER:`user`,SHELL:`/bin/bash`,TMPDIR:`/tmp`,PWD:t.cwd,...n,...t.env}))}function d(e,t,n,i){let a=u(t,i);return r({fs:e,cwd:t.cwd,env:a,stdin:s(``),exec:(e,r)=>n.exec(e,{env:r?.env??Object.fromEntries(a),cwd:r?.cwd??t.cwd,args:r?.args,...r?.env===void 0?{}:{replaceEnv:!0}})})}const f={requestApproval:async()=>({decision:`deny`})};async function p(e){let r=h(e.fs,e.sudo),i=new t(r),a=new n({fs:r,cwd:`/workspace`,processManager:e.processManager,processOwner:{kind:`jshd`}}),o={exec:(e,t)=>a.getBash().exec(e,{env:t?.env??a.getEnv(),cwd:t?.cwd??`/workspace`,args:t?.args,...t?.env===void 0?{}:{replaceEnv:!0}})},s=c({fs:e.fs,processManager:e.processManager,lickManager:e.lickManager,...e.realmFactory?{realmFactory:e.realmFactory}:{},buildContext:e=>m(i,e,o)}),u=(await l(e.fs)).filter(e=>e.enabled);if(u.length===0)return[];let d=[];for(let e of u)try{await s.start(e),d.push(e.name)}catch{}return d}function m(e,t,n){return d(e,t,n)}function h(e,t){return a(e,{broker:t?.broker??f,getPolicy:t?.getPolicy??i,defaultDisposition:`allow`})}export{p as restoreEnabledJshdUnits};
@@ -0,0 +1,86 @@
1
+ import{n as e}from"./rolldown-runtime-Dd_uD5pT.js";import{r as t}from"./base64-BPBW1Gzr.js";import"./bridge-protocol-31SWTdS5.js";import{n}from"./host-command-B0EUpLfV.js";import{n as r,t as i}from"./panel-rpc-DVS1uJpt.js";import{a,i as o,n as s}from"./tool-ui-DRnUkp2g.js";import{r as c,t as l}from"./subcommand-help-CgO7wRS5.js";import{t as u}from"./approval-timeout-BQ29Z0gf.js";import{t as d}from"./tmpdir-env-ate4iNcK.js";import{n as f}from"./screencapture-media-shared-DlK1Wqh8.js";import{c as p,l as m,r as h,u as g}from"./frame-bytes-BSmP8I94.js";import{i as _,n as v,o as ee,s as te,t as ne}from"./frames-C1gdZfee.js";import{getComputerRegistry as re,installComputerRegistry as ie}from"./registry-DfuJBCKY.js";import{getComputersHost as y}from"./host-DDFasAvt.js";import{t as ae}from"./engine-CzMNXd8U.js";const oe=[`bridgeToken`,`bridge`,`tray`],se=[`cherry`,`connect`],ce=[`/join/`,`/tray/`],le=[``,`/`,`/cloud`,`/connect`];function ue(e){let t=e.replace(/\/index\.html$/,`/`);return t.length>1?t.replace(/\/$/,``):t}function de(e,t={}){let n;try{n=new URL(e)}catch{return!1}for(let e of oe)if(n.searchParams.has(e))return!0;for(let e of se)if(n.searchParams.get(e)===`1`)return!0;if(!new Set([`https://www.sliccy.ai`,`https://slicc-tray-hub-staging.minivelos.workers.dev`,...t.selfOrigins??[]]).has(n.origin))return!1;let r=ue(n.pathname);return le.includes(r)?!0:ce.some(e=>`${r}/`.startsWith(e))}function b(e={x:0,y:0}){return{x:e.x,y:e.y}}function fe(e,t){return t.x!==void 0&&t.y!==void 0&&(e.x=t.x,e.y=t.y),e}function pe(e,t){return t.x!==void 0&&t.y!==void 0?(e.x=t.x,e.y=t.y,{x:t.x,y:t.y}):{x:e.x,y:e.y}}function me(e,t){return t.map(t=>{if(t.type===`mousemove`||t.type===`click`||t.type===`button`||t.type===`scroll`){let n=pe(e,t);return{...t,x:n.x,y:n.y}}return t.type===`drag`&&fe(e,{x:t.x2,y:t.y2}),t})}const x={low:256,medium:768,high:1536};function S(e){if(!e)return x.medium;if(e in x)return x[e];let t=/^(\d+)(?:x\d+)?$/u.exec(e);if(t){let e=Number.parseInt(t[1],10);if(e>0)return e}return x.medium}function he(e,t){let n=e.width>0?e.width:t.width,r=e.height>0?e.height:t.height,i=t.width,a=t.height,o=n>0?i/n:1;return{nativeWidth:n,nativeHeight:r,shotWidth:i,shotHeight:a,scale:o>0?o:1}}function ge(e){let t=e.scale===1?`1`:e.scale.toFixed(2).replace(/0+$/u,``).replace(/\.$/u,``);return`${e.nativeWidth}x${e.nativeHeight} → ${e.shotWidth}x${e.shotHeight} (scale ${t})`}function _e(e,t){return{width:e.shotWidth,height:e.shotHeight,scale:e.scale,at:t}}function ve(e,t,n,r){return r||!n||n.scale===0?{x:e,y:t}:{x:Math.round(e/n.scale),y:Math.round(t/n.scale)}}function ye(e,t,n){let r=Number.isFinite(n)&&n>0?n:1;return r===1?{x:e,y:t}:{x:Math.round(e/r),y:Math.round(t/r)}}function C(e){return`tab:${e}`}const w={screenshot:!0,text:!1,frames:`poll`,keyboard:!0,mouse:`absolute`,scroll:!0,exec:!1,inputAllowed:!0},T={1:`left`,2:`middle`,3:`right`};function E(e){if(de(e.url))throw Error(`refusing SLICC app tab '${e.title??e.url}'`)}var be=class{browser;targetId;seq=0;title;url;size=null;pointer=b();constructor(e,t,n={title:t,url:``}){this.browser=e,this.targetId=t,this.title=n.title,this.url=n.url}describe(){return{id:C(this.targetId),kind:`tab`,title:this.title,size:this.size,state:`live`,capabilities:w,pid:null}}async screenshot(e){return await this.refreshInfo(),E({url:this.url,title:this.title}),this.browser.withTab(this.targetId,async t=>{let n=await xe(t,e);return n.native&&(this.size=n.native),this.seq+=1,{seq:this.seq,mime:n.mime,width:n.width,height:n.height,bytes:n.bytes,...n.overCap?{overCap:!0}:{}}})}async input(e){await this.refreshInfo(),E({url:this.url,title:this.title}),await this.browser.withTab(this.targetId,async t=>{let n=await De(t);for(let r of e)await D(t,r,this.pointer,n)})}async close(){}async refreshInfo(){let e=await ke(this.browser,this.targetId);e&&(this.title=e.title||this.title,this.url=e.url||this.url)}};async function xe(e,t){let n=await e.screenshot({format:`png`}),r=h(n),i=g(r)??p(r),a=r;t.maxWidth&&i&&i.width>t.maxWidth?a=h(await e.screenshot({format:`png`,maxWidth:t.maxWidth})):t.format!==`png`&&(a=h(await e.screenshot({format:`jpeg`,quality:70})));let o=g(a)??p(a)??i??{width:0,height:0};return t.format!==`png`&&!p(a)&&(a=await m(a)),{mime:p(a)?`image/jpeg`:`image/png`,bytes:a,width:o.width,height:o.height,native:i,...t.maxWidth&&o.width>t.maxWidth?{overCap:!0}:{}}}var Se=class{rpc;targetId;seq=0;title;url;size=null;pointer=b();constructor(e,t,n={title:t,url:``}){this.rpc=e,this.targetId=t,this.title=n.title,this.url=n.url}describe(){return{id:C(this.targetId),kind:`tab`,title:this.title,size:this.size,state:`live`,capabilities:w,pid:null}}async screenshot(e){let t=await this.rpc.call(`computer-tab-screenshot`,{targetId:this.targetId,maxWidth:e.maxWidth,format:e.format});return this.title=t.title,this.url=t.url,this.size=t.nativeWidth&&t.nativeHeight?{width:t.nativeWidth,height:t.nativeHeight}:{width:t.width,height:t.height},this.seq+=1,{seq:this.seq,mime:t.mime,width:t.width,height:t.height,bytes:h(t.base64),...t.overCap?{overCap:!0}:{}}}async input(e){let t=me(this.pointer,e);await this.rpc.call(`computer-tab-input`,{targetId:this.targetId,events:t})}async close(){}};async function D(e,t,n=b(),r){let i=r??await De(e);switch(t.type){case`mousemove`:{let r=O(n,t,i);await e.send(`Input.dispatchMouseEvent`,{type:`mouseMoved`,x:r.x,y:r.y});return}case`button`:await Ce(e,t,n,i);return;case`click`:await we(e,t,n,i);return;case`drag`:await Te(e,t,n,i);return;case`scroll`:{let r=O(n,t,i);await e.send(`Input.dispatchMouseEvent`,{type:`mouseWheel`,x:r.x,y:r.y,deltaX:t.dx,deltaY:t.dy});return}case`key`:await Ee(e,t);return;case`text`:await e.send(`Input.insertText`,{text:t.text});return;case`wait`:await Ae(Math.max(0,t.ms));return}}async function Ce(e,t,n,r){let i=O(n,t,r);await e.send(`Input.dispatchMouseEvent`,{type:t.down?`mousePressed`:`mouseReleased`,x:i.x,y:i.y,button:T[t.button],clickCount:1})}async function we(e,t,n,r){let i=O(n,t,r),a=Math.max(1,t.count);for(let n=1;n<=a;n++)await e.send(`Input.dispatchMouseEvent`,{type:`mousePressed`,x:i.x,y:i.y,button:T[t.button],clickCount:n}),t.holdMs&&t.holdMs>0&&await Ae(t.holdMs),await e.send(`Input.dispatchMouseEvent`,{type:`mouseReleased`,x:i.x,y:i.y,button:T[t.button],clickCount:n})}async function Te(e,t,n,r){await D(e,{type:`mousemove`,x:t.x1,y:t.y1},n,r),await D(e,{type:`button`,button:1,down:!0,x:t.x1,y:t.y1},n,r),await D(e,{type:`mousemove`,x:t.x2,y:t.y2},n,r),await D(e,{type:`button`,button:1,down:!1,x:t.x2,y:t.y2},n,r)}async function Ee(e,t){let n=ee(t.keysym);if(!n)throw Error(`unknown keysym '${t.keysym}'`);for(let r of te(n,t.down))await e.send(`Input.dispatchKeyEvent`,{type:r.type,key:r.key,code:r.code,modifiers:r.modifiers,...r.text===void 0?{}:{text:r.text}})}function O(e,t,n){let r=pe(e,t);return ye(r.x,r.y,n)}async function De(e){try{let t=await e.evaluate(`window.devicePixelRatio`);return typeof t==`number`&&Number.isFinite(t)&&t>0?t:1}catch{return 1}}function Oe(e,t){let n=e.find(e=>e.targetId===t);if(n)return n;let r=e.filter(e=>e.url===t||e.url.startsWith(t));if(r.length===1)return r[0];if(r.length>1)return{error:`ambiguous url '${t}' matches ${r.length} tabs`};let i=e.filter(e=>e.title===t);return i.length===1?i[0]:{error:`no tab matching '${t}'`}}async function ke(e,t){let n=(await e.listAllTargets()).find(e=>e.targetId===t);return n?{title:n.title,url:n.url}:null}function Ae(e){return new Promise(t=>setTimeout(t,e))}function je(e,t){for(let n of t){let t=Me(e,n);if(t)return t}return null}function Me(e,t){return t.type===`wait`?null:e.inputAllowed?t.type===`key`||t.type===`text`?e.keyboard?null:`keyboard input is not supported`:t.type===`scroll`?e.scroll?null:`scroll is not supported`:(t.type===`mousemove`||t.type===`button`||t.type===`click`||t.type===`drag`)&&e.mouse===`none`?`mouse input is not supported`:null:`input is not allowed`}const k=`computer — look at and poke a screen (xdotool grammar)
2
+
3
+ Usage:
4
+ computer [-c <id>] [--json] [--native] <verb> [args] [verb ...]
5
+
6
+ Target: -c / --computer, else $COMPUTER, else last \`computer use\`, else
7
+ the only registered computer. \`computer ls\` lists ids. -c takes an id, the
8
+ \`-n\` name (preferred — it never changes), or the live title.
9
+
10
+ Lifecycle:
11
+ ls list registered computers (NAME is the -n handle,
12
+ TITLE is what the surface currently calls itself)
13
+ add tab <targetId|url> [-n name]
14
+ register a browser tab (refuses SLICC app tabs)
15
+ add screen [-n name] share this display (needs a user gesture)
16
+ add ssh <follower> [--sim <udid>] [--display <n>] [--allow-input] [-n name]
17
+ follower desktop (or iOS Simulator on a Mac).
18
+ --allow-input needs sudo (phone can Face ID).
19
+ --display picks a screen on a native-capture Mac:
20
+ 1-based, same numbering as \`screencapture -D <n>\`,
21
+ default the follower's main display. Register one
22
+ computer per display to drive several at once.
23
+ The iOS follower itself is never a computer.
24
+ add url <http(s)://base> [-n name]
25
+ HTTP remote computer (GET /computer). Trailing
26
+ /computer is stripped. node-server --computer-demo
27
+ is the in-tree reference.
28
+ rm [id] unregister (stops a live screen share)
29
+ use <id> set the default computer
30
+ info descriptor for the current target
31
+
32
+ Look:
33
+ screenshot [--size low|medium|high|<N>] [--view] [file]
34
+ JPEG; prints WxH → wxh (scale s) and a frozen frame
35
+ text text-mode dump when the backend supports it
36
+ watch [--fps N] [--stop] live frames to the page (phase 2 UI)
37
+ record [-V|--duration SEC] [--fps N] [file]
38
+ timed clip (screen: live session; other kinds:
39
+ JPEG stills through ffmpeg -f image2pipe, max 60s,
40
+ --fps ≤10, streamed into the encoder)
41
+
42
+ Poke (xdotool; every verb ends with a frozen-frame line):
43
+ mousemove <x> <y> [--relative]
44
+ click [1|2|3] [--at x,y] [--hold MS] [--repeat N]
45
+ mousedown [1|2|3] [--at x,y]
46
+ mouseup [1|2|3] [--at x,y]
47
+ drag <x1> <y1> <x2> <y2>
48
+ scroll <dx> <dy> [--at x,y]
49
+ key <keysym> [keysym...] ctrl+alt+Delete, Return, F5, super+space
50
+ keydown <keysym>
51
+ keyup <keysym>
52
+ type <text...>
53
+ wait <ms>
54
+ exec <command...> when the backend supports it
55
+
56
+ Anthropic aliases (same verbs):
57
+ left_click right_click middle_click double_click triple_click
58
+ left_click_drag mouse_move scroll key type screenshot wait
59
+
60
+ Coordinates are screenshot-space of the last shot unless --native
61
+ (the pixel space the descriptor advertises). Tab computers convert
62
+ that native space to CSS pixels with the tab's devicePixelRatio.
63
+ Buttons: 1 left, 2 middle, 3 right. Chain verbs: computer click 1 type hello
64
+
65
+ v86 guests register as v86:<name> on \`v86 start\`. Prefer this command;
66
+ \`v86 type|key|mouse|screenshot|text\` remain as thin aliases.
67
+ `,Ne=[`-c`,`--computer`,`--size`,`--at`,`--hold`,`--repeat`,`--fps`,`-n`,`--name`,`--__resolved`,`-V`,`--duration`,`--sim`,`--display`],A=new Set([`ls`,`add`,`rm`,`use`,`info`,`screenshot`,`text`,`watch`,`record`,`mousemove`,`click`,`mousedown`,`mouseup`,`drag`,`scroll`,`key`,`keydown`,`keyup`,`type`,`wait`,`exec`]),j={left_click:`click`,right_click:`click`,middle_click:`click`,double_click:`click`,triple_click:`click`,left_click_drag:`drag`,mouse_move:`mousemove`,screenshot:`screenshot`,wait:`wait`,key:`key`,type:`type`,scroll:`scroll`},Pe=new Set([`type`,`key`,`exec`,`add`]),M=new Set([`--size`,`--at`,`--hold`,`--repeat`,`--fps`,`-n`,`--name`,`-c`,`--computer`,`--__resolved`,`-V`,`--duration`,`--sim`,`--display`]);function N(e){return A.has(e)||e in j}function Fe(e){return A.has(e)?e:j[e]??null}function Ie(e){let t=[],n,r=!1,i=!1;for(let a=0;a<e.length;a++){let o=e[a];if(o===`--`){t.push(...e.slice(a));break}if(o===`--json`){r=!0;continue}if(o===`--native`){i=!0;continue}if(o===`-c`||o===`--computer`){n=e[++a];continue}t.push(o)}return{computer:n,json:r,native:i,rest:t}}function Le(e){let t=[],n=0;for(;n<e.length;){let r=e[n];if(r===`--`){n+=1;continue}let i=Fe(r);if(!i)throw Error(`unknown verb '${r}' — see \`computer --help\``);n+=1;let{args:a,next:o}=ze(i,e,n);t.push({verb:i,alias:r,args:Re(r,i,a)}),n=o}return t}function Re(e,t,n){return t===`click`?e===`left_click`?P(n,`1`):e===`middle_click`?P(n,`2`):e===`right_click`?P(n,`3`):e===`double_click`?[...P(n,`1`),`--repeat`,`2`]:e===`triple_click`?[...P(n,`1`),`--repeat`,`3`]:n:n}function P(e,t){return e[0]===`1`||e[0]===`2`||e[0]===`3`?e:[t,...e]}function ze(e,t,n){return Pe.has(e)?Be(t,n):Ve(Ue(e),t,n)}function Be(e,t){let n=[],r=t,i=!1;for(;r<e.length;){let t=e[r];if(!i&&t===`--`){i=!0,r+=1;continue}if(!i&&N(t))break;n.push(t),r+=1}return{args:n,next:r}}function F(e){return e.startsWith(`--`)||e===`-n`||e===`-c`||e===`-V`}function I(e,t,n){let r=e[t];return n.push(r),t+=1,M.has(r)&&t<e.length&&(n.push(e[t]),t+=1),t}function Ve(e,t,n){let r=[],i=n,a=0;for(;i<t.length;){let n=t[i];if(n===`--`){i+=1;continue}if(F(n)){i=I(t,i,r);continue}if(N(n))break;if(r.push(n),a+=1,i+=1,a>=e&&e>0){i=He(t,i,r);break}}return{args:r,next:i}}function He(e,t,n){let r=t;for(;r<e.length&&F(e[r]);)r=I(e,r,n);return r}function Ue(e){switch(e){case`mousemove`:return 2;case`drag`:return 4;case`scroll`:return 2;case`click`:case`mousedown`:case`mouseup`:return 3;case`wait`:case`keydown`:case`keyup`:case`rm`:case`use`:return 1;case`screenshot`:return 1;case`record`:return 1;default:return 0}}function L(e){let t=e.indexOf(`--at`);if(t===-1)return;let n=e[t+1],r=n?/^(-?\d+),(-?\d+)$/u.exec(n):null;if(!r)throw Error(`--at requires x,y`);return{x:Number(r[1]),y:Number(r[2])}}function R(e,t){let n=e.indexOf(t);if(n===-1)return;let r=Number.parseInt(e[n+1]??``,10);if(!Number.isFinite(r))throw Error(`${t} requires a number`);return r}function z(e,t){return e.includes(t)}function B(e,t){for(let n of t){let t=e.indexOf(n);if(t!==-1)return e[t+1]}}function V(e){let t=[];for(let n=0;n<e.length;n++){let r=e[n];if(r===`--`){t.push(...e.slice(n+1));break}if(r.startsWith(`--`)||r===`-n`||r===`-c`||r===`-V`){M.has(r)&&(n+=1);continue}t.push(r)}return t}function We(e){let t=0;for(let n of e)t+=n.byteLength;let n=new Uint8Array(t),r=0;for(let t of e)n.set(t,r),r+=t.byteLength;return n}function Ge(e){return new Promise(t=>{setTimeout(t,e)})}function H(e){return Math.min(10,Math.max(1,e))}async function Ke(e,t,n){let r=e;if(typeof r.appendFile==`function`){await r.appendFile(t,n);return}let i=new Uint8Array;if(typeof r.readFile==`function`)try{let e=await r.readFile(t,{encoding:`binary`});e instanceof Uint8Array&&(i=Uint8Array.from(e))}catch{}let a=new Uint8Array(i.byteLength+n.byteLength);a.set(i,0),a.set(n,i.byteLength),await e.writeFile(t,a)}async function qe(e){let t=H(e.fps),n=Math.max(1,Math.round(1e3/t)),r=e.now??Date.now,i=e.sleep??Ge,a=r()+e.durationMs,o=0,s=0,c=0,l=0,u=!1;for(;;){let d=await e.screenshot(),f=l+d.bytes.byteLength;if(c>0&&(c>=600||f>8388608)){u=!0;break}o=d.width,s=d.height,await e.onFrame?.(d.bytes),c+=1,l=f;let p=c>=600||l>=8388608,m=r()+n>=a;if(p||m){u=p&&Math.round(c/t*1e3)<e.durationMs;break}await i(n)}return{width:o,height:s,frameCount:c,byteLength:l,durationMs:u?Math.round(c/t*1e3):e.durationMs,truncated:u}}function U(e){let t=d(e.env).replace(/\/$/u,``),n=crypto.randomUUID();return e.fs.resolvePath(e.cwd,`${t}/computer-record-${n}.mjpeg`)}async function W(e,t){let n=e;typeof n.rm==`function`&&await n.rm(t,{force:!0}).catch(()=>void 0)}function Je(e){let t=e instanceof Map?new Map(e):new Map;return t.set(ae,`wasm`),t}async function Ye(e){let{runFfmpeg:t}=await import(`./run-CTYkZrli.js`),n=!e.sourcePath,r=e.sourcePath??U(e.ctx);n&&(await e.ctx.fs.mkdir(r.slice(0,r.lastIndexOf(`/`)),{recursive:!0}),await e.ctx.fs.writeFile(r,We(e.frames)));try{let n=await t([`-y`,`-hide_banner`,`-nostdin`,`-f`,`image2pipe`,`-c:v`,`mjpeg`,`-framerate`,String(e.fps),`-i`,r,`-an`,`-vf`,`scale=trunc(iw/2)*2:trunc(ih/2)*2`,`-c:v`,`libvpx`,`-b:v`,`1M`,`-pix_fmt`,`yuv420p`,e.dest],{...e.ctx,env:Je(e.ctx.env)});if(n.exitCode!==0){let e=n.stderr.trim()||`ffmpeg failed`;throw Error(e)}return{mime:`video/webm`}}finally{n&&await W(e.ctx.fs,r)}}async function Xe(e,t){let n=await e.fs.readFile(t,{encoding:`binary`});return n instanceof Uint8Array?Uint8Array.from(n):new Uint8Array}async function Ze(e){let t=H(e.fps),n=U(e.ctx);await e.ctx.fs.mkdir(n.slice(0,n.lastIndexOf(`/`)),{recursive:!0}),await e.ctx.fs.writeFile(n,new Uint8Array);try{let r=await qe({screenshot:e.screenshot,durationMs:e.durationMs,fps:t,now:e.now,sleep:e.sleep,onFrame:t=>Ke(e.ctx.fs,n,t)}),{mime:i}=await(e.encode??Ye)({frames:[],sourcePath:n,fps:t,dest:e.dest,width:r.width,height:r.height,durationMs:r.durationMs,ctx:e.ctx}),a=new Uint8Array;try{a=await Xe(e.ctx,e.dest)}catch{}return{bytes:a,mime:i,width:r.width,height:r.height,durationMs:r.durationMs,...r.truncated?{truncated:!0}:{}}}finally{await W(e.ctx.fs,n)}}const Qe=new Set;let G;function $e(e){if(typeof e!=`object`||!e)return!1;let t=Object.getOwnPropertyDescriptor(e,`type`)?.value,n=Object.getOwnPropertyDescriptor(e,`id`)?.value;return(t===`begin`||t===`end`)&&typeof n==`string`}function et(e){e.type===`begin`?Qe.add(e.id):Qe.delete(e.id)}function tt(){if(G===void 0){if(typeof BroadcastChannel!=`function`){G=null;return}try{G=new BroadcastChannel(`slicc-screen-share-approval`)}catch{G=null;return}G.onmessage=e=>{$e(e.data)&&et(e.data)}}}function nt(e){tt(),et(e);try{G?.postMessage(e)}catch{}}function rt(e){nt({type:`begin`,id:e})}function it(e){nt({type:`end`,id:e})}const K=Symbol(`screen-share-approval-timeout`);function at(){return`
68
+ <div class="sprinkle-action-card">
69
+ <div class="sprinkle-action-card__header">
70
+ <div class="sprinkle-action-card__title-group">Share this display</div>
71
+ <span class="sprinkle-badge sprinkle-badge--notice">approval</span>
72
+ </div>
73
+ <div class="sprinkle-action-card__actions">
74
+ <button class="sprinkle-btn sprinkle-btn--secondary" data-action="deny">Deny</button>
75
+ <button class="sprinkle-btn sprinkle-btn--primary" data-action="approve" data-picker="screenshare">Share screen</button>
76
+ </div>
77
+ </div>
78
+ `}async function ot(){let e=a();if(!e)throw Error("add screen: needs a user gesture — type `computer add screen` in the panel terminal, or run it from a cone tool call so an approval card can open the picker");let t=o.generateId(),n=!1;rt(t);try{let r=s({id:t,html:at(),onAction:async(e,t)=>{if(e!==`approve`)return{denied:!0};let n=t;return n?.cancelled?{cancelled:!0}:n?.error?{error:String(n.error)}:n?.granted&&typeof n.handle==`string`?{approved:!0,handle:n.handle}:{error:`screen share returned an unexpected response`}}},e.onUpdate).catch(e=>{if(n)return K;throw e}),i,a=new Promise(e=>{i=setTimeout(()=>{n=!0,o.cancel(t,`screen share: timed out`),e(K)},12e4)}),c=await Promise.race([r,a]);if(i&&clearTimeout(i),c===K)throw Error(`add screen: timed out after 120s waiting for user approval`);let l=c;if(l.denied)throw Error(`add screen: denied by user`);if(l.cancelled)throw Error(`add screen: cancelled`);if(l.error)throw Error(`add screen: ${l.error}`);if(!l.approved||!l.handle)throw Error(`add screen: no display selected`);return{handle:l.handle}}finally{it(t)}}function q(e,t,n){let r=e.list(),i=t=>e.nameOf(t);if(t)return st(r,t,i);let a=n.get(`COMPUTER`);if(a)return st(r,a,i);let o=e.lastUsedId();return o&&e.get(o)?{id:o}:r.length===1?{id:r[0].id}:r.length===0?{error:"no computers registered — `computer add tab <id>`, `computer add screen`, `computer add ssh <follower>`, `computer add url <http(s)://base>`, or `v86 start`"}:{error:`which computer? pass -c <id> or \`computer use\`. registered: ${r.map(e=>e.id).join(`, `)}`}}function st(e,t,n){let r=e.find(e=>e.id===t);if(r)return{id:r.id};let i=e.filter(e=>n(e.id)===t);if(i.length===1)return{id:i[0].id};if(i.length>1)return ct(t,i);let a=e.filter(e=>e.id.endsWith(`:${t}`)||e.title===t||e.id===`v86:${t}`||e.id===`tab:${t}`||e.id===`screen:${t}`||e.id===`ssh:${t}`||e.id===`url:${t}`);if(a.length===1)return{id:a[0].id};if(a.length>1)return ct(t,a);let o=e.map(e=>{let t=n(e.id);return t?`${e.id} (${t})`:e.id}).join(`, `);return{error:`unknown computer '${t}'${o?` — registered: ${o}`:` — none registered`}`}}function ct(e,t){return{error:`ambiguous computer '${e}' matches ${t.map(e=>e.id).join(`, `)}`}}var lt=e({runComputer:()=>St});function J(e){return{stdout:``,stderr:`computer: ${e}\n`,exitCode:1}}function Y(e=``){return{stdout:e,stderr:``,exitCode:0}}function ut(){return globalThis.__slicc_pm??null}function dt(e){return e.browser??globalThis.__slicc_browser??null}function X(e){return e.panelRpc??globalThis.__slicc_panelRpc??r()}function ft(e){return e.sudoBroker?e.sudoBroker:globalThis.__slicc_sudo??null}function pt(e,t){let n=X(e);if(n)return{async capture(e){let r=await n.call(`tray-computer-native`,{runtimeId:t,action:`capture`,fps:e.fps,maxWidth:e.maxWidth,display:e.display,watch:e.watch},{timeoutMs:6e4});if(!r.jpeg)throw Error(`empty native screenshot from follower`);let{bytesFromBase64:i}=await import(`./frame-bytes-BSmP8I94.js`).then(e=>e.a);return{bytes:i(r.jpeg),mime:`image/jpeg`,width:r.width??0,height:r.height??0,nativeWidth:r.nativeWidth??r.width??0,nativeHeight:r.nativeHeight??r.height??0}},unwatch(){n.call(`tray-computer-native`,{runtimeId:t,action:`unwatch`}).catch(()=>{})},async input(e,r){await n.call(`tray-computer-native`,{runtimeId:t,action:`input`,events:e,display:r?.display})}}}function mt(e){return e.listFollowers?.()??n()}const ht={platform:`darwin`,tools:[],capture:null,input:`none`};async function gt(e,t,n,r,i){if(!n)return ht;try{return await i(e,t)}catch(e){let t=e instanceof Error?e.message:String(e);return r?ht:{error:t.startsWith(`add ssh:`)?t:`add ssh: ${t}`}}}async function _t(e,t,n,r,i){if(i===`none`&&!r)return J(`add ssh: --allow-input needs cliclick, xdotool, ydotool, or idb on the follower (screenshot-only otherwise)`);let a=ft(e);if(!a)return J(`add ssh: --allow-input needs sudo approval (not configured)`);let o=await a.requestApproval({kind:`command`,detail:`computer add ssh ${t.runtimeId}${n?` --sim ${n}`:``} --allow-input`,reason:`grant pointer and keyboard control of the follower desktop`});return o.decision===`deny`?J(u(`add ssh`,o)):null}async function vt(e,t,n,r){if(e.sshExec)return e.sshExec(t,n,r);let a=X(e);if(!a)throw Error(`no panel RPC in this float`);let o=r??3e4,s=await a.call(`tray-exec`,{runtimeId:t,command:n,execToken:`computer-ssh-${Date.now().toString(36)}`,timeoutMs:o},{timeoutMs:o+i});if(s.error)throw Error(s.error);return{stdout:s.stdout,stderr:s.stderr,exitCode:s.exitCode}}function yt(e,t){let n=t.filter(e=>e.exec||e.computer),r=n.find(t=>t.runtimeId===e);if(r)return r;let i=n.filter(t=>t.runtimeId.endsWith(e)||t.runtimeId.includes(e));return i.length===1?i[0]:i.length>1?{error:`add ssh: ambiguous follower '${e}'`}:{error:`add ssh: no exec-capable or computer-capable follower '${e}' — try \`host\` (an entry tagged [ssh] or [computer] is eligible; \`ssh --list\` shows exec targets only)`}}function bt(e){let t=[];return e.kind===`screen`&&t.push(`display slot`),e.kind===`ssh`&&t.push(e.capabilities.inputAllowed?`input`:`view-only`),t.length>0?` [${t.join(`, `)}]`:``}function xt(e){return e.registry?e.registry:re()??ie(e.processManager??ut())}async function St(e,t,n={}){if(e.length===0||e[0]===`--help`||e[0]===`-h`||e[0]===`help`)return Y(k);let r=Ie(e);if(r.rest.length===0)return Y(k);let i=r.rest[0];if(l(r.rest.slice(1),{valueFlags:[...Ne]}))return Y(c(`computer`,i,k,{prefix:`computer`}));let a;try{a=Le(r.rest)}catch(e){return J(e instanceof Error?e.message:String(e))}let o=xt(n),s=[],u=[];for(let e of a)try{let i=await Ct(e,r,t,n,o);if(i.exitCode!==0)return i;i.stdout&&s.push(i.stdout.replace(/\n$/u,``)),i.stderr&&u.push(i.stderr.replace(/\n$/u,``))}catch(e){return J(e instanceof Error?e.message:String(e))}let d=cn(s.filter(Boolean).join(`
79
+ `),a,o,r.computer,t,r.json);return{stdout:d?`${d}\n`:``,stderr:u.length?`${u.join(`
80
+ `)}\n`:``,exitCode:0}}async function Ct(e,t,n,r,i){switch(e.verb){case`ls`:return wt(i,t.json);case`add`:return Tt(e.args,n,r,i);case`rm`:return jt(e.args,t.computer,n,i);case`use`:return Mt(e.args,i);case`info`:return Nt(t,n,i);case`screenshot`:return Pt(e.args,t,n,i);case`text`:return Ft(t,n,i);case`watch`:return It(e.args,t,n,i,r);case`record`:return zt(e.args,t,n,i,r);case`exec`:return Ht(e.args,t,n,i);default:return Ut(e,t,n,i,r)}}function wt(e,t){let n=e.list();if(t){let t=n.map(t=>{let n=e.nameOf(t.id);return n?{...t,name:n}:t});return Y(`${JSON.stringify(t)}\n`)}if(n.length===0)return Y(`no computers registered
81
+ `);let r=[`ID KIND STATE NAME TITLE`];for(let t of n){let n=e.nameOf(t.id)??`-`;r.push(`${t.id.padEnd(20)} ${t.kind.padEnd(6)} ${t.state.padEnd(9)} ${n.padEnd(10)} ${t.title}${bt(t)}`)}return Y(`${r.join(`
82
+ `)}\n`)}async function Tt(e,t,n,r){let i=e[0];return i===`tab`?kt(e,t,n,r):i===`screen`?At(e,t,n,r):i===`ssh`?Ot(e,t,n,r):i===`url`?Dt(e,t,n,r):J(`add: unknown kind '${i??``}' — phase 3 supports \`computer add tab\`, \`computer add screen\`, \`computer add ssh\`, and \`computer add url\``)}async function Et(e){if(e.urlFetch)return e.urlFetch;let{createProxiedFetch:t}=await import(`./proxied-fetch-CZTz7e5K.js`).then(e=>e.i),{wrapUrlComputerFetch:n}=await import(`./url-B1WJZBSE.js`),r=t();return n((e,t)=>r(e,t))}async function Dt(e,t,n,r){let i=B(e,[`-n`,`--name`]),a=V(e).slice(1)[0];if(!a)return J(`add url: requires <http(s)://base>`);let{UrlComputerBackend:o,probeUrlComputer:s,normalizeComputerBase:c}=await import(`./url-B1WJZBSE.js`),l;try{l=c(a)}catch(e){return J(`add url: ${e instanceof Error?e.message:String(e)}`)}let u=await Et(n),d;try{d=await s(u,l)}catch(e){let t=e instanceof Error?e.message:String(e);return J(t.startsWith(`add url:`)?t:`add url: ${t}`)}i&&(d={...d,title:i});let f=new o(u,l,d),p=r.register(f,{name:i});return r.use(p.id),Y(`registered ${p.id} (${i??p.title})\n`)}async function Ot(e,t,n,r){let i=B(e,[`-n`,`--name`]),a=B(e,[`--sim`]),o=z(e,`--allow-input`),s=B(e,[`--display`]),c=V(e).slice(1)[0];if(!c)return J(`add ssh: requires <follower>`);let l;if(s!==void 0){if(l=Number(s),!Number.isSafeInteger(l)||l<1||l>64)return J(`add ssh: --display takes a 1-based display number, got '${s}'`);if(a)return J(`add ssh: --display and --sim are exclusive`)}let u=yt(c,mt(n));if(`error`in u)return J(u.error);if(u.floatType===`ios`)return J(`add ssh: the iOS follower itself is not a driven computer (a real iPhone is out of scope; pass --sim <udid> on a Mac follower)`);if(a&&!u.exec)return J(`add ssh: --sim needs an exec-capable Mac follower`);let{SshComputerBackend:d,probeSsh:f}=await import(`./ssh-DplyBT74.js`),p=u.computer?n.nativeComputer?.(u.runtimeId)??pt(n,u.runtimeId):void 0,m=u.exec?(e,t)=>vt(n,u.runtimeId,e,t?.timeoutMs):async()=>{throw Error(`follower has no exec capability`)},h=await gt(m,a,!!u.exec,!!p,f);if(`error`in h)return J(h.error);if(o){let e=await _t(n,u,a,!!p,h.input);if(e)return e}if(l!==void 0&&!p)return J(`add ssh: --display needs a native-capture (computer-capable) Mac follower`);let g=i??(a?`${u.runtimeId} sim ${a}`:l?`${u.runtimeId} display ${l}`:u.runtimeId),_=new d(m,{runtimeId:u.runtimeId,title:g,probe:h,inputAllowed:o,sim:a,display:l,native:p}),v=r.register(_,{name:i});return r.use(v.id),Y(`registered ${v.id} (${i??v.title})\n`)}async function kt(e,t,n,r){let i=B(e,[`-n`,`--name`]),a=V(e).slice(1)[0];if(!a)return J(`add tab: requires <targetId|url>`);let o=dt(n);if(!o)return J(`add tab: no browser API in this float`);let s=Oe(await o.listAllTargets(),a);if(`error`in s)return J(s.error);try{E(s)}catch(e){return J(e instanceof Error?e.message:String(e))}let c={title:s.title,url:s.url},l=n.browser&&!n.panelRpc?null:X(n),u=l?new Se(l,s.targetId,c):new be(o,s.targetId,c),d=r.register(u,{name:i});return r.use(d.id),Y(`registered ${d.id} (${i??d.title})\n`)}async function At(e,t,n,r){let i=B(e,[`-n`,`--name`]),o=B(e,[`--__resolved`]);if(!o){if(!a())return J("add screen: needs a user gesture — type `computer add screen` in the panel terminal, or run it from a cone tool call so an approval card can open the picker");try{o=(await ot()).handle}catch(e){return J(e instanceof Error?e.message:String(e))}}let s=X(n);if(!s)return J(`add screen: no panel RPC in this float`);let{BridgedScreenComputerBackend:c,screenComputerId:l}=await import(`./screen-C5DDwz1F.js`),u=new c(s,o,{title:i??`Display`},()=>{r.refresh(l(o))}),d=r.register(u,{name:i});return r.use(d.id),Y(`registered ${d.id} (${i??d.title})\n`)}async function jt(e,t,n,r){let i=q(r,V(e)[0]??t,$(n));return`error`in i?J(i.error):await r.unregister(i.id)?Y(`unregistered ${i.id}\n`):J(`unknown computer '${i.id}'`)}function Mt(e,t){let n=V(e)[0];if(!n)return J(`use: requires <id>`);let r=q(t,n,new Map);return`error`in r?J(r.error):(t.use(r.id),Y(`using ${r.id}\n`))}function Nt(e,t,n){let r=q(n,e.computer,$(t));if(`error`in r)return J(r.error);let i=n.getEntry(r.id);if(!i)return J(`unknown computer '${r.id}'`);let a=n.nameOf(r.id);if(e.json)return Y(`${JSON.stringify(a?{...i.descriptor,name:a}:i.descriptor)}\n`);let o=i.descriptor,s=o.size?`${o.size.width}x${o.size.height}`:`-`;return Y(`id: ${o.id}\nname: ${a??`-`}\nkind: ${o.kind}\ntitle: ${o.title}\nstate: ${o.state}\nsize: ${s}\npid: ${o.pid??`-`}\n`)}async function Pt(e,n,r,i){let a=Q(i,n.computer,r);if(`exitCode`in a)return a;let o=S(B(e,[`--size`])),s=await a.backend.screenshot({format:`jpeg`,maxWidth:o}),c=he(a.backend.describe().size??{width:s.width,height:s.height},{width:s.width,height:s.height});i.rememberShot(a.id,_e(c,Date.now()),s);let l=s.seq>0?s.seq:i.nextSeq(a.id),u=await _({fs:r.fs,cwd:r.cwd,env:r.env,name:ln(a.descriptor),seq:l,frame:s}),d=V(e)[0];if(d){let e=r.fs.resolvePath(r.cwd,d);await r.fs.writeFile(e,s.bytes)}let f=[ge(c),v(u)];return(z(e,`--view`)||z(e,`-v`))&&f.push(`<img:data:${s.mime};base64,${t(s.bytes)}>`),n.json?Y(`${JSON.stringify({id:a.id,path:u,mapping:c})}\n`):Y(`${f.join(`
83
+ `)}\n`)}async function Ft(e,t,n){let r=Q(n,e.computer,t);if(`exitCode`in r)return r;if(!r.backend.text)return J(`text: '${r.id}' has no text dump`);let i=await r.backend.text();return i===null?J(`text: unavailable for '${r.id}'`):Y(`${i}\n`)}async function It(e,t,n,r,i){let a=Q(r,t.computer,n);if(`exitCode`in a)return a;let o=Vt(i);if(!o)return J(`watch: computers host is not running`);if(z(e,`--stop`))return o.unwatch(a.id),Y(`unwatched ${a.id}\n`);let s=R(e,`--fps`)??2,c=S(B(e,[`--size`]));return o.watch(a.id,s,c),Y(`watching ${a.id} at ${s} fps\n`)}function Lt(e){return`recordClip`in e&&typeof e.recordClip==`function`}function Rt(e){let t=B(e,[`-V`,`--duration`]);if(t===void 0)return 5;let n=Number(t);if(!Number.isFinite(n)||n<=0)throw Error(`-V/--duration requires a positive number of seconds`);return n}async function zt(e,t,n,r,i){let a=Q(r,t.computer,n);if(`exitCode`in a)return a;let o,s;try{o=Rt(e),s=R(e,`--fps`)??2}catch(e){return J(e instanceof Error?e.message:String(e))}if(s<=0)return J(`--fps requires a positive number`);if(s>10)return J(`--fps exceeds 10`);let c=f(o*1e3),l=V(e)[0]??`clip.webm`,u=n.fs.resolvePath(n.cwd,l),d;try{d=Lt(a.backend)?await a.backend.recordClip(c):await Bt(a.backend,c,s,u,n,i)}catch(e){return J(`record: ${e instanceof Error?e.message:String(e)}`)}d.bytes.byteLength>0&&await n.fs.writeFile(u,d.bytes);let p=d.durationMs??c;if(t.json)return Y(`${JSON.stringify({id:a.id,path:u,durationMs:p,mime:d.mime,...d.truncated?{truncated:!0}:{}})}\n`);let m=d.truncated?` (truncated)`:``;return Y(`recorded ${p}ms ${d.width}x${d.height}${m} → ${u}\n`)}async function Bt(e,t,n,r,i,a){return Ze({screenshot:()=>e.screenshot({format:`jpeg`,maxWidth:768}),durationMs:t,fps:n,dest:r,ctx:i,encode:a.encodeRecordedFrames})}function Vt(e){if(e.watch)return{watch:e.watch,unwatch:e.unwatch??(()=>void 0)};let t=y();return t?{watch:t.watch,unwatch:t.unwatch}:null}async function Ht(e,t,n,r){let i=Q(r,t.computer,n);if(`exitCode`in i)return i;if(!i.backend.exec)return J(`exec: '${i.id}' does not support exec`);let a=e.join(` `);if(!a)return J(`exec: requires a command`);let o=await i.backend.exec(a),s=[o.stdout,o.stderr].filter(Boolean).join(`
84
+ `);return{stdout:s?`${s}\n`:``,stderr:``,exitCode:o.exitCode}}async function Ut(e,t,n,r,i){let a=Q(r,t.computer,n);if(`exitCode`in a)return a;let o=Yt(e,t.native,a.descriptor),s=je(a.descriptor.capabilities,o);if(s)return J(`${e.verb}: ${s}`);try{await a.backend.input(o)}catch(t){return J(`${e.verb}: ${t instanceof Error?t.message:String(t)}`)}return qt(a,n,r,i)}function Wt(e,t){return t.isWatching?t.isWatching(e):y()?.isWatching(e)??!1}function Gt(e,t){let n=e.descriptor.capabilities.frames===`push`;return e.backend.screenshot({format:`jpeg`,maxWidth:t,...n?{pull:!0}:{}})}async function Kt(e,t,n){if(!(e.descriptor.capabilities.frames===`push`&&Wt(e.id,n)))return Gt(e,t);let r=new AbortController,i=n.postActionTimeoutMs??5e3;try{return await Jt(e.backend.screenshot({format:`jpeg`,maxWidth:t,signal:r.signal}),i)}catch{return r.abort(),Gt(e,t)}}async function qt(e,t,n,r){let i=e.descriptor.lastShot?.width??768,a;try{a=await Kt(e,i,r)}catch(e){return{stdout:``,stderr:`computer: screenshot failed after input: ${e instanceof Error?e.message:String(e)}\n`,exitCode:0}}let o=n.nextSeq(e.id),s={...a,seq:o};n.rememberFrame(e.id,s);let c=await _({fs:t.fs,cwd:t.cwd,env:t.env,name:ln(e.descriptor),seq:o,frame:s});return Y(`${v(c)}\n`)}function Jt(e,t){return new Promise((n,r)=>{let i=setTimeout(()=>r(Error(`timed out`)),t);e.then(e=>{clearTimeout(i),n(e)},e=>{clearTimeout(i),r(e)})})}function Yt(e,t,n){let r=(e,r)=>ve(e,r,n.lastShot,t);switch(e.verb){case`mousemove`:return Xt(e.args,r);case`click`:case`mousedown`:case`mouseup`:return Zt(e.verb,e.args,r);case`drag`:return Qt(e.args,r,n.capabilities.mouse);case`scroll`:return $t(e.args,r);case`key`:case`keydown`:case`keyup`:return en(e.verb,e.args);case`type`:return tn(e.args);case`wait`:return nn(e.args);default:throw Error(`internal: ${e.verb} is not an input verb`)}}function Xt(e,t){let n=V(e),r=Number(n[0]),i=Number(n[1]);if(!Number.isFinite(r)||!Number.isFinite(i))throw Error(`mousemove: requires <x> <y>`);let a=z(e,`--relative`),o=a?{x:r,y:i}:t(r,i);return[{type:`mousemove`,x:o.x,y:o.y,relative:a}]}function Zt(e,t,n){let r=V(t),{button:i,skip:a}=rn(r),o=L(t)??on(r,a),s=o?n(o.x,o.y):void 0;if(e===`mousedown`)return[{type:`button`,button:i,down:!0,...Z(s)}];if(e===`mouseup`)return[{type:`button`,button:i,down:!1,...Z(s)}];let c=R(t,`--hold`);return[{type:`click`,button:i,count:R(t,`--repeat`)??1,...c===void 0?{}:{holdMs:c},...Z(s)}]}function Qt(e,t,n){let r=V(e).map(Number);if(r.length<4||r.some(e=>!Number.isFinite(e)))throw Error(`drag: requires <x1> <y1> <x2> <y2>`);let i=t(r[0],r[1]),a=t(r[2],r[3]);return n===`touch`?[{type:`drag`,x1:i.x,y1:i.y,x2:a.x,y2:a.y}]:[{type:`mousemove`,x:i.x,y:i.y},{type:`button`,button:1,down:!0,x:i.x,y:i.y},{type:`mousemove`,x:a.x,y:a.y},{type:`button`,button:1,down:!1,x:a.x,y:a.y}]}function $t(e,t){let n=V(e),r=Number(n[0]),i=Number(n[1]);if(!Number.isFinite(r)||!Number.isFinite(i))throw Error(`scroll: requires <dx> <dy>`);let a=L(e);return[{type:`scroll`,dx:r,dy:i,...Z(a?t(a.x,a.y):void 0)}]}function en(e,t){if(e===`key`){if(t.length===0)throw Error(`key: no keysym supplied`);return t.map(e=>({type:`key`,keysym:e}))}let n=V(t)[0];if(!n)throw Error(`${e}: no keysym supplied`);return[{type:`key`,keysym:n,down:e===`keydown`}]}function tn(e){let t=e.join(` `).replace(/\\n/gu,`
85
+ `).replace(/\\t/gu,` `);if(!t)throw Error(`type: no text supplied`);return[{type:`text`,text:t}]}function nn(e){let t=Number(V(e)[0]);if(!Number.isFinite(t))throw Error(`wait: requires <ms>`);return[{type:`wait`,ms:t}]}function rn(e){return e[0]===void 0?{button:1,skip:0}:e[0]===`left`||e[0]===`middle`||e[0]===`right`||e[0]===`1`||e[0]===`2`||e[0]===`3`?{button:an(e[0]),skip:1}:{button:1,skip:0}}function an(e){if(!e||e===`left`||e===`1`)return 1;if(e===`middle`||e===`2`)return 2;if(e===`right`||e===`3`)return 3;let t=Number.parseInt(e,10);if(t===1||t===2||t===3)return t;throw Error(`unknown button '${e}' (use 1|2|3)`)}function on(e,t){let n=Number(e[t]),r=Number(e[t+1]);if(Number.isFinite(n)&&Number.isFinite(r))return{x:n,y:r}}function Z(e){return e?{x:e.x,y:e.y}:{}}const sn=new Set([`ls`,`add`,`rm`,`use`]);function cn(e,t,n,r,i,a){if(a||!t.some(e=>!sn.has(e.verb)))return e;let o=q(n,r,$(i));if(`error`in o)return e;let s=ne(o.id);return e.split(`
86
+ `).some(e=>e.trim()===s)?e:e?`${s}\n${e}`:s}function Q(e,t,n){let r=q(e,t,$(n));if(`error`in r)return J(r.error);let i=e.getEntry(r.id);return i?{id:r.id,backend:i.backend,descriptor:i.descriptor}:J(`unknown computer '${r.id}'`)}function $(e){let t=e.env;if(t instanceof Map)return t;let n=new Map;if(t&&typeof t==`object`)for(let[e,r]of Object.entries(t))r!==void 0&&n.set(e,r);return n}function ln(e){return e.id.replace(/[/:]/gu,`_`)}export{me as n,b as r,St as runComputer,lt as t};
@@ -1,4 +1,4 @@
1
- import{t as e}from"./subcommand-flags-BZi7j78Q.js";import{r as t,t as n}from"./subcommand-help-CgO7wRS5.js";import{i as r,o as i}from"./jsh-discovery-CnvNKojr.js";import{a,i as o,r as s,s as c,t as l}from"./supervisor-gHbk5m7z.js";const u=`usage: jshd <command> [options]
1
+ import{t as e}from"./subcommand-flags-BZi7j78Q.js";import{r as t,t as n}from"./subcommand-help-CgO7wRS5.js";import{i as r,o as i}from"./jsh-discovery-CnvNKojr.js";import{a,i as o,r as s,s as c,t as l}from"./supervisor-Dwyz3Q6J.js";const u=`usage: jshd <command> [options]
2
2
 
3
3
  Durable background jsh units: one realm worker each, restored on reload
4
4
  when --enable is set. Keep-alive follows the realm (pending timers and
@@ -34,7 +34,7 @@ Notes:
34
34
  `)+`
35
35
  `)}async function A(e,t,n,r){let i=t[0];if(!i)return Y(`missing unit name`);let o=L(n);if(o)return o;let s=P(n,r);if(!s)return Y(`kernel host has not booted yet — try again in a moment`);if(e===`stop`)return await s.stop(i)?J(`jshd: stopped '${i}'\n`):await a(n.fs,i)?J(`jshd: unit '${i}' is not running\n`):Y(`unknown unit '${i}'`);if(e===`restart`){let e=await s.restart(i);return e?J(`jshd: restarted '${i}' (pid ${e.pid})\n`):Y(`unknown unit '${i}'`)}return!await a(n.fs,i)&&!s.status(i)?Y(`unknown unit '${i}'`):(await s.rm(i),J(`jshd: removed '${i}'\n`))}async function j(t,n,r){let i=e(t,{value:T,bool:[`-f`,`--follow`]});if(`error`in i)return Y(i.error);let a=i.positionals[0];if(!a)return Y(`missing unit name`);let s=i.bools.has(`-f`)||i.bools.has(`--follow`),c=i.values.get(`-n`)??i.values.get(`--lines`),l=c===void 0?void 0:Number.parseInt(c,10);if(c!==void 0&&(!Number.isFinite(l)||l<0))return Y(`-n must be a non-negative integer`);let u=await o(n.fs,a),d=l===void 0?u:H(u,l);if(!s)return J(d.endsWith(`
36
36
  `)||d.length===0?d:`${d}\n`);let f=W(n),p=G(n);return f?U({ctx:n,name:a,displayed:d,seen:u.length,signal:f,sink:p}):(p?.(d),J(p?``:d.endsWith(`
37
- `)||d.length===0?d:`${d}\n`))}async function M(e,t,n,r){let i=e[0];if(!i)return Y(`missing unit name`);let a=L(t);if(a)return a;let o=P(t,n);return(o?await o.setEnabled(i,r):await N(t,i,r))?J(`jshd: ${r?`enabled`:`disabled`} '${i}'\n`):Y(`unknown unit '${i}'`)}async function N(e,t,n){let r=await a(e.fs,t);if(!r)return null;let i={...r,enabled:n},{writeUnitRecord:o}=await import(`./supervisor-gHbk5m7z.js`).then(e=>e.o);return await o(e.fs,i),i}function P(e,t){let n=l();if(n)return n;let r=t.processManager??K();if(!r)return null;let i=q();return l({fs:e.fs,processManager:r,...i?{lickManager:i}:{},...t.realmFactory?{realmFactory:t.realmFactory}:{},buildContext:t=>F(e,t)})}function F(e,t){let n=new Map(e.env);for(let[e,r]of Object.entries(t.env))n.set(e,r);return{...e,cwd:t.cwd,env:n}}function I(e){if(typeof e!=`object`||!e)return!1;let t=e.canWrite;return typeof t==`function`&&!t.call(e,`/workspace/.jshd`)}function L(e){return I(e.fs)?Y(`not available inside a restricted scoop`):null}function R(e,t,n){let r=new Map(t.map(e=>[e.name,e]));return[...new Set([...e.map(e=>e.name),...r.keys()])].sort().map(t=>r.get(t)||z(e.find(e=>e.name===t),n))}function z(e,t){return{name:e.name,pid:null,state:`stopped`,restarts:0,uptimeMs:null,enabled:e.enabled,restart:e.restart,argv:e.argv,cwd:e.cwd,durable:t,lastExitCode:null}}function B(e){let t=e.pid===null?`-`:String(e.pid),n=V(e.uptimeMs);return[e.name.padEnd(15),t.padEnd(7),e.state.padEnd(9),String(e.restarts).padEnd(9),n.padEnd(6),String(e.enabled).padEnd(8),String(e.durable)].join(` `)}function V(e){if(e===null)return`-`;let t=Math.max(0,Math.round(e/1e3));return t<60?`${t}s`:`${Math.floor(t/60)}m${t%60}s`}function H(e,t){if(t===0)return``;let n=e.split(`
37
+ `)||d.length===0?d:`${d}\n`))}async function M(e,t,n,r){let i=e[0];if(!i)return Y(`missing unit name`);let a=L(t);if(a)return a;let o=P(t,n);return(o?await o.setEnabled(i,r):await N(t,i,r))?J(`jshd: ${r?`enabled`:`disabled`} '${i}'\n`):Y(`unknown unit '${i}'`)}async function N(e,t,n){let r=await a(e.fs,t);if(!r)return null;let i={...r,enabled:n},{writeUnitRecord:o}=await import(`./supervisor-Dwyz3Q6J.js`).then(e=>e.o);return await o(e.fs,i),i}function P(e,t){let n=l();if(n)return n;let r=t.processManager??K();if(!r)return null;let i=q();return l({fs:e.fs,processManager:r,...i?{lickManager:i}:{},...t.realmFactory?{realmFactory:t.realmFactory}:{},buildContext:t=>F(e,t)})}function F(e,t){let n=new Map(e.env);for(let[e,r]of Object.entries(t.env))n.set(e,r);return{...e,cwd:t.cwd,env:n}}function I(e){if(typeof e!=`object`||!e)return!1;let t=e.canWrite;return typeof t==`function`&&!t.call(e,`/workspace/.jshd`)}function L(e){return I(e.fs)?Y(`not available inside a restricted scoop`):null}function R(e,t,n){let r=new Map(t.map(e=>[e.name,e]));return[...new Set([...e.map(e=>e.name),...r.keys()])].sort().map(t=>r.get(t)||z(e.find(e=>e.name===t),n))}function z(e,t){return{name:e.name,pid:null,state:`stopped`,restarts:0,uptimeMs:null,enabled:e.enabled,restart:e.restart,argv:e.argv,cwd:e.cwd,durable:t,lastExitCode:null}}function B(e){let t=e.pid===null?`-`:String(e.pid),n=V(e.uptimeMs);return[e.name.padEnd(15),t.padEnd(7),e.state.padEnd(9),String(e.restarts).padEnd(9),n.padEnd(6),String(e.enabled).padEnd(8),String(e.durable)].join(` `)}function V(e){if(e===null)return`-`;let t=Math.max(0,Math.round(e/1e3));return t<60?`${t}s`:`${Math.floor(t/60)}m${t%60}s`}function H(e,t){if(t===0)return``;let n=e.split(`
38
38
  `);return n[n.length-1]===``&&n.pop(),`${n.slice(-t).join(`
39
39
  `)}${e.endsWith(`
40
40
  `)?`
@@ -1,4 +1,4 @@
1
- import"./browser-DG5MjvHF.js";import{a as e,c as t,i as n,l as r,o as i,r as a}from"./ffmpeg-wasm-B77gfnB_.js";import{r as o}from"./engine-CzMNXd8U.js";import{a as s,createIpkContextFromCtx as c,i as l,n as u,r as ee,t as d}from"./run-dNFrBZDI.js";const f={mono:1,stereo:2,"2.1":3,"3.0":3,"3.1":4,"4.0":4,quad:4,"4.1":5,"5.0":5,"5.1":6,"6.0":6,"6.1":7,"7.0":7,"7.1":8};function p(e){let t=/^(\d+):(\d{2}):(\d{2}(?:\.\d+)?)$/.exec(e.trim());if(!t)return;let n=Number(t[1]),r=Number(t[2]),i=Number(t[3]);if([n,r,i].every(Number.isFinite))return(n*3600+r*60+i).toFixed(6)}function m(e){let t=e.trim().toLowerCase();if(Object.hasOwn(f,t))return f[t];let n=/^([0-9.]+|[a-z0-9_+-]+)\(/.exec(t);if(n&&Object.hasOwn(f,n[1]))return f[n[1]];let r=/^(\d+)\s+channels?$/.exec(t);if(r)return Number(r[1])}function h(e){let t=Number(e);return Number.isFinite(t)?Number.isInteger(t)?`${t}/1`:`${Math.round(t*1e3)}/1000`:e}function g(e){let t=Number(e);if(Number.isFinite(t))return String(Math.round(t*1e3))}function _(e){let t=/^([A-Za-z0-9_]+)(.*)$/.exec(e);if(!t)return{remainder:e};let n=t[2],r,i,a=/^\s*\(([^)/]+)\)/.exec(n);a&&!a[1].includes(`/`)&&(r=a[1].trim(),n=n.slice(a[0].length));let o=/^\s*\(([A-Za-z0-9]+)\s*\/\s*0x[0-9a-fA-F]+\)/.exec(n);return o&&(i=o[1],n=n.slice(o[0].length)),{codec_name:t[1],profile:r,codec_tag_string:i,remainder:n}}function v(e,t){let n=/,\s*([A-Za-z0-9_]+)(?:\([^)]*\))?,\s*(\d+)x(\d+)/.exec(e);n&&(t.pix_fmt=n[1],t.width=Number(n[2]),t.height=Number(n[3]));let r=/\[SAR\s+(\S+)\s+DAR\s+(\S+)\]/.exec(e);r&&(t.sample_aspect_ratio=r[1],t.display_aspect_ratio=r[2]);let i=/,\s*(\d+(?:\.\d+)?)\s*kb\/s/.exec(e);i&&(t.bit_rate=g(i[1]));let a=/,\s*(\d+(?:\.\d+)?)\s*fps/.exec(e);a&&(t.r_frame_rate=h(a[1]),t.avg_frame_rate=t.r_frame_rate)}function y(e,t){let n=/,\s*(\d+)\s*Hz/.exec(e);n&&(t.sample_rate=n[1]);let r=/Hz,\s*([^,]+)/.exec(e);if(r){let e=r[1].trim();t.channel_layout=e,t.channels=m(e)}let i=/,\s*(\d+(?:\.\d+)?)\s*kb\/s/.exec(e);i&&(t.bit_rate=g(i[1]))}function b(e){let t=/^\s*Stream #(\d+):(\d+)(?:\[[^\]]*\])?(?:\([^)]*\))?:\s*(Video|Audio|Subtitle|Data|Attachment):\s*(.+)$/i.exec(e);if(!t)return null;let n=t[3].toLowerCase(),r={index:Number(t[2]),codec_type:n},{codec_name:i,profile:a,codec_tag_string:o,remainder:s}=_(t[4]);return i&&(r.codec_name=i),a&&(r.profile=a),o&&(r.codec_tag_string=o),n===`video`?v(s,r):n===`audio`&&y(s,r),r}function x(e,t){let n=/^\s*Duration:\s*([^,]+),\s*start:\s*([^,]+),\s*bitrate:\s*(\d+(?:\.\d+)?)\s*kb\/s/.exec(t);return n?(e.duration=p(n[1]),e.start_time=Number(n[2]).toFixed(6),e.bit_rate=g(n[3]),!0):!1}function S(e,t,n){let r=/^\s{2,}([A-Za-z0-9_]+)\s*:\s*(.*)$/.exec(n);return r&&!/^(Duration|Stream)\b/.test(r[1])?(t[r[1]]=r[2].trim(),`keep`):(Object.keys(t).length>0&&(e.tags=t),`end`)}function C(e,t){let n=e.split(/\r?\n/),r=null,i=[],a=!1,o;for(let e of n){let n=/^Input #(\d+),\s*(.+?),\s*from\s+'([^']*)':\s*$/.exec(e);if(n){a=!0,r={format_name:n[2].trim(),filename:n[3]||t},o=void 0;continue}if(!a||!r)continue;if(/^\s*Metadata:\s*$/.test(e)){o={};continue}if(o){if(S(r,o,e)===`keep`)continue;o=void 0}if(x(r,e))continue;let s=b(e);s&&(r.duration&&s.duration===void 0&&(s.duration=r.duration),i.push(s))}return r?{format:r,streams:i}:null}const w=new Set([`-i`,`-v`,`-loglevel`,`-of`,`-print_format`,`-show_entries`,`-select_streams`]),T=new Set([`-show_format`,`-show_streams`,`-hide_banner`,`-h`,`--help`,`-version`,`--version`]);function E(){return{stdout:`ffprobe - media probe (mediabunny, with a wasm fallback)
1
+ import"./browser-DG5MjvHF.js";import{a as e,c as t,i as n,l as r,o as i,r as a}from"./ffmpeg-wasm-B77gfnB_.js";import{r as o}from"./engine-CzMNXd8U.js";import{a as s,createIpkContextFromCtx as c,i as l,n as u,r as ee,t as d}from"./run-CTYkZrli.js";const f={mono:1,stereo:2,"2.1":3,"3.0":3,"3.1":4,"4.0":4,quad:4,"4.1":5,"5.0":5,"5.1":6,"6.0":6,"6.1":7,"7.0":7,"7.1":8};function p(e){let t=/^(\d+):(\d{2}):(\d{2}(?:\.\d+)?)$/.exec(e.trim());if(!t)return;let n=Number(t[1]),r=Number(t[2]),i=Number(t[3]);if([n,r,i].every(Number.isFinite))return(n*3600+r*60+i).toFixed(6)}function m(e){let t=e.trim().toLowerCase();if(Object.hasOwn(f,t))return f[t];let n=/^([0-9.]+|[a-z0-9_+-]+)\(/.exec(t);if(n&&Object.hasOwn(f,n[1]))return f[n[1]];let r=/^(\d+)\s+channels?$/.exec(t);if(r)return Number(r[1])}function h(e){let t=Number(e);return Number.isFinite(t)?Number.isInteger(t)?`${t}/1`:`${Math.round(t*1e3)}/1000`:e}function g(e){let t=Number(e);if(Number.isFinite(t))return String(Math.round(t*1e3))}function _(e){let t=/^([A-Za-z0-9_]+)(.*)$/.exec(e);if(!t)return{remainder:e};let n=t[2],r,i,a=/^\s*\(([^)/]+)\)/.exec(n);a&&!a[1].includes(`/`)&&(r=a[1].trim(),n=n.slice(a[0].length));let o=/^\s*\(([A-Za-z0-9]+)\s*\/\s*0x[0-9a-fA-F]+\)/.exec(n);return o&&(i=o[1],n=n.slice(o[0].length)),{codec_name:t[1],profile:r,codec_tag_string:i,remainder:n}}function v(e,t){let n=/,\s*([A-Za-z0-9_]+)(?:\([^)]*\))?,\s*(\d+)x(\d+)/.exec(e);n&&(t.pix_fmt=n[1],t.width=Number(n[2]),t.height=Number(n[3]));let r=/\[SAR\s+(\S+)\s+DAR\s+(\S+)\]/.exec(e);r&&(t.sample_aspect_ratio=r[1],t.display_aspect_ratio=r[2]);let i=/,\s*(\d+(?:\.\d+)?)\s*kb\/s/.exec(e);i&&(t.bit_rate=g(i[1]));let a=/,\s*(\d+(?:\.\d+)?)\s*fps/.exec(e);a&&(t.r_frame_rate=h(a[1]),t.avg_frame_rate=t.r_frame_rate)}function y(e,t){let n=/,\s*(\d+)\s*Hz/.exec(e);n&&(t.sample_rate=n[1]);let r=/Hz,\s*([^,]+)/.exec(e);if(r){let e=r[1].trim();t.channel_layout=e,t.channels=m(e)}let i=/,\s*(\d+(?:\.\d+)?)\s*kb\/s/.exec(e);i&&(t.bit_rate=g(i[1]))}function b(e){let t=/^\s*Stream #(\d+):(\d+)(?:\[[^\]]*\])?(?:\([^)]*\))?:\s*(Video|Audio|Subtitle|Data|Attachment):\s*(.+)$/i.exec(e);if(!t)return null;let n=t[3].toLowerCase(),r={index:Number(t[2]),codec_type:n},{codec_name:i,profile:a,codec_tag_string:o,remainder:s}=_(t[4]);return i&&(r.codec_name=i),a&&(r.profile=a),o&&(r.codec_tag_string=o),n===`video`?v(s,r):n===`audio`&&y(s,r),r}function x(e,t){let n=/^\s*Duration:\s*([^,]+),\s*start:\s*([^,]+),\s*bitrate:\s*(\d+(?:\.\d+)?)\s*kb\/s/.exec(t);return n?(e.duration=p(n[1]),e.start_time=Number(n[2]).toFixed(6),e.bit_rate=g(n[3]),!0):!1}function S(e,t,n){let r=/^\s{2,}([A-Za-z0-9_]+)\s*:\s*(.*)$/.exec(n);return r&&!/^(Duration|Stream)\b/.test(r[1])?(t[r[1]]=r[2].trim(),`keep`):(Object.keys(t).length>0&&(e.tags=t),`end`)}function C(e,t){let n=e.split(/\r?\n/),r=null,i=[],a=!1,o;for(let e of n){let n=/^Input #(\d+),\s*(.+?),\s*from\s+'([^']*)':\s*$/.exec(e);if(n){a=!0,r={format_name:n[2].trim(),filename:n[3]||t},o=void 0;continue}if(!a||!r)continue;if(/^\s*Metadata:\s*$/.test(e)){o={};continue}if(o){if(S(r,o,e)===`keep`)continue;o=void 0}if(x(r,e))continue;let s=b(e);s&&(r.duration&&s.duration===void 0&&(s.duration=r.duration),i.push(s))}return r?{format:r,streams:i}:null}const w=new Set([`-i`,`-v`,`-loglevel`,`-of`,`-print_format`,`-show_entries`,`-select_streams`]),T=new Set([`-show_format`,`-show_streams`,`-hide_banner`,`-h`,`--help`,`-version`,`--version`]);function E(){return{stdout:`ffprobe - media probe (mediabunny, with a wasm fallback)
2
2
 
3
3
  Usage:
4
4
  ffprobe [options] -i <input>
@@ -41,6 +41,6 @@ Examples:
41
41
  `,stderr:``,exitCode:0}}async function D(e){let t=o(e.env)===`mt`,i=await r(c(e),void 0,t);return i?{stdout:`ffprobe (emulated via @ffmpeg/ffmpeg — not a real ffprobe binary)\ncore: ${a(i)}\n`,stderr:``,exitCode:0}:{stdout:``,stderr:`ffprobe: ${n(t)}\n`,exitCode:1}}function O(e,t,n){let r=e[t+1];if(typeof r!=`string`||r.startsWith(`-`))throw Error(`ffprobe: ${n} requires a value`);return r}function k(e){let t=e.indexOf(`=`),n=t<0?e:e.slice(0,t),r=t<0?``:e.slice(t+1);if(n===`json`)return{kind:`json`};if(n===`csv`)return{kind:`csv`,printSection:!/(?:^|:)p=0(?::|$)/.test(r)};if(n==="default")return{kind:`default`,noWrappers:/(?:^|:)(?:nw|noprint_wrappers)=1(?::|$)/.test(r),noKey:/(?:^|:)(?:nk|nokey)=1(?::|$)/.test(r)};throw Error(`ffprobe: unsupported -of '${e}' (supported: json, csv[=p=0], default[=nw=1:nk=1])`)}function A(e){let t={};for(let n of e.split(`:`)){if(!n)continue;let e=n.indexOf(`=`);if(e<0)throw Error(`ffprobe: -show_entries section '${n}' needs keys (e.g. format=duration)`);let r=n.slice(0,e),i=n.slice(e+1).split(`,`).map(e=>e.trim()).filter(Boolean);if(r===`format`)t.format=new Set(i);else if(r===`stream`)t.stream=new Set(i);else throw Error(`ffprobe: unsupported -show_entries section '${r}' (supported: format, stream)`)}return t}function j(e,t,n){let r=t[n];if(r===`-i`)return e.inputPath=O(t,n,`-i`),n+1;if(r===`-show_format`)return e.showFormat=!0,e.structured=!0,n;if(r===`-show_streams`)return e.showStreams=!0,e.structured=!0,n;if(r===`-show_entries`)return e.showEntries=A(O(t,n,`-show_entries`)),e.structured=!0,n+1;if(r===`-select_streams`)return e.selectStreams=O(t,n,`-select_streams`),n+1;if(r===`-of`||r===`-print_format`)return e.outputFormat=k(O(t,n,r)),e.structured=!0,n+1;if(r===`-v`||r===`-loglevel`){let i=O(t,n,r).toLowerCase();return e.quiet=[`quiet`,`panic`,`fatal`,`error`,`warning`].includes(i),n+1}if(r===`-hide_banner`)return n;if(T.has(r)||w.has(r))throw Error(`ffprobe: internal parse gap for '${r}'`);if(r.startsWith(`-`))throw Error(`ffprobe: unsupported option '${r}' (this is an emulated probe — see --help)`);if(e.inputPath!==null)throw Error(`ffprobe: unexpected argument '${r}'`);return e.inputPath=r,n}function M(e){let t={inputPath:null,showFormat:!1,showStreams:!1,showEntries:null,selectStreams:null,outputFormat:{kind:`default`,noWrappers:!1,noKey:!1},quiet:!1,structured:!1};for(let n=0;n<e.length;n++)n=j(t,e,n);return!t.showFormat&&!t.showStreams&&!t.showEntries&&(t.showFormat=!0,t.showStreams=!0),t}function N(e,t){if(!t)return e;let n=/^([va])(?::(\d+))?$/i.exec(t.trim());if(!n)throw Error(`ffprobe: unsupported -select_streams '${t}' (supported: v, a, v:N, a:N)`);let r=n[1].toLowerCase()===`v`?`video`:`audio`,i=e.filter(e=>e.codec_type===r);if(n[2]===void 0)return i;let a=i[Number(n[2])];return a?[a]:[]}const P=[`filename`,`format_name`,`duration`,`start_time`,`bit_rate`],F=[`index`,`codec_type`,`codec_name`,`codec_tag_string`,`profile`,`width`,`height`,`pix_fmt`,`sample_aspect_ratio`,`display_aspect_ratio`,`r_frame_rate`,`avg_frame_rate`,`sample_rate`,`channels`,`channel_layout`,`bit_rate`,`duration`];function I(e,t){let n={};for(let r of P){if(t&&!t.has(r))continue;let i=e[r];i!==void 0&&(n[r]=i)}return n}function L(e,t){let n={};for(let r of F){if(t&&!t.has(r))continue;let i=e[r];i!==void 0&&(n[r]=i)}return n}function R(e,t){let n=N(e.streams,t.selectStreams),r={};return t.showEntries?(t.showEntries.format&&(r.format=I(e.format,t.showEntries.format)),t.showEntries.stream&&(r.streams=n.map(e=>L(e,t.showEntries?.stream))),r):(t.showFormat&&(r.format=I(e.format)),t.showStreams&&(r.streams=n.map(e=>L(e))),r)}function z(e,t){let n=[],r=(e,r)=>{t.noWrappers||n.push(`[${e}]`);for(let[e,i]of Object.entries(r))i!==void 0&&n.push(t.noKey?String(i):`${e}=${i}`);t.noWrappers||n.push(`[/${e}]`)};if(e.format&&r(`FORMAT`,e.format),e.streams)for(let t of e.streams)r(`STREAM`,t);return`${n.join(`
42
42
  `)}\n`}function B(e){return/[",\n\r]/.test(e)?`"${e.replace(/"/g,`""`)}"`:e}function V(e,t){let n=[],r=(e,r)=>{let i=Object.values(r).filter(e=>e!==void 0).map(e=>B(String(e)));i.length!==0&&(t.printSection&&i.unshift(e),n.push(i.join(`,`)))};if(e.format&&r(`format`,e.format),e.streams)for(let t of e.streams)r(`stream`,t);return`${n.join(`
43
43
  `)}\n`}function H(e){let t=e.codec_name??`?`;if(e.codec_type===`video`){let n=e.width&&e.height?`, ${e.width}x${e.height}`:``,r=e.r_frame_rate?`, ${e.r_frame_rate} fps`:``;return` Stream #0:${e.index}: Video: ${t}${n}${r}`}if(e.codec_type===`audio`){let n=e.sample_rate?`, ${e.sample_rate} Hz`:``,r=e.channel_layout?`, ${e.channel_layout}`:``,i=e.channels===void 0?``:` (${e.channels} ch)`;return` Stream #0:${e.index}: Audio: ${t}${n}${r}${i}`}return` Stream #0:${e.index}: ${e.codec_type}: ${t}`}function U(e){let t=e.format,n=[`Input #0, ${t.format_name??`unknown`}, from '${t.filename??``}':`];if(t.duration!==void 0||t.bit_rate!==void 0){let e=t.duration??`N/A`,r=t.bit_rate?`${Math.round(Number(t.bit_rate)/1e3)} kb/s`:`N/A`;n.push(` Duration: ${e} s, bitrate: ${r}`)}for(let t of e.streams)n.push(H(t));return`${n.join(`
44
- `)}\n`}function W(e,t){if(!t.structured)return U(e);let n=R(e,t);return t.outputFormat.kind===`json`?`${JSON.stringify(n,null,4)}\n`:t.outputFormat.kind===`csv`?V(n,t.outputFormat):z(n,t.outputFormat)}let G=Promise.resolve();function K(e){let t=G.then(e,e);return G=t.then(()=>void 0,()=>void 0),t}let q=0;function J(e){let t=e.split(`/`).pop()||`input.bin`,n=/\.([A-Za-z0-9]{1,8})$/.exec(t),r=n?`.${n[1].toLowerCase()}`:`.bin`;return q=q+1>>>0,`__probe_${q}_${Date.now()}${r}`}async function Y(t){let n=``;try{return{ffmpeg:await e({onProgress:e=>{n+=`${e}\n`},ipk:c(t),preferMt:o(t.env)===`mt`}),loadLog:n}}catch(e){return{stdout:``,stderr:`ffprobe: failed to load wasm: ${e instanceof Error?e.message:String(e)}\n`,exitCode:1}}}async function X(e,n,r){try{await e.exec([`-hide_banner`,`-i`,n])}catch(n){if(i(n))return t(e),{stdout:``,stderr:`ffprobe: wasm core faulted (${n instanceof Error?n.message:String(n)}); recycled shared instance\n`,exitCode:1};r.text+=`${n instanceof Error?n.message:String(n)}\n`}return null}function Z(e,t,n){e.format.filename=t.inputPath??e.format.filename;try{return{stdout:W(e,t),stderr:t.quiet?``:n,exitCode:0}}catch(e){return{stdout:``,stderr:`ffprobe: ${e instanceof Error?e.message:String(e)}\n`,exitCode:1}}}async function Q(e,t,n){let{ffmpegEngineFromEnv:r}=await import(`./engine-CzMNXd8U.js`).then(e=>e.n),i=r(n.env);if(i===`wasm`)return null;let{probeViaMediabunny:a}=await import(`./bunny-probe-Dk-taSwq.js`),o=await a(t,e.inputPath??``);return o?Z(o,e,``):i===`mediabunny`?{stdout:``,stderr:`ffprobe: FFMPEG_ENGINE=mediabunny: input is not a container mediabunny reads
44
+ `)}\n`}function W(e,t){if(!t.structured)return U(e);let n=R(e,t);return t.outputFormat.kind===`json`?`${JSON.stringify(n,null,4)}\n`:t.outputFormat.kind===`csv`?V(n,t.outputFormat):z(n,t.outputFormat)}let G=Promise.resolve();function K(e){let t=G.then(e,e);return G=t.then(()=>void 0,()=>void 0),t}let q=0;function J(e){let t=e.split(`/`).pop()||`input.bin`,n=/\.([A-Za-z0-9]{1,8})$/.exec(t),r=n?`.${n[1].toLowerCase()}`:`.bin`;return q=q+1>>>0,`__probe_${q}_${Date.now()}${r}`}async function Y(t){let n=``;try{return{ffmpeg:await e({onProgress:e=>{n+=`${e}\n`},ipk:c(t),preferMt:o(t.env)===`mt`}),loadLog:n}}catch(e){return{stdout:``,stderr:`ffprobe: failed to load wasm: ${e instanceof Error?e.message:String(e)}\n`,exitCode:1}}}async function X(e,n,r){try{await e.exec([`-hide_banner`,`-i`,n])}catch(n){if(i(n))return t(e),{stdout:``,stderr:`ffprobe: wasm core faulted (${n instanceof Error?n.message:String(n)}); recycled shared instance\n`,exitCode:1};r.text+=`${n instanceof Error?n.message:String(n)}\n`}return null}function Z(e,t,n){e.format.filename=t.inputPath??e.format.filename;try{return{stdout:W(e,t),stderr:t.quiet?``:n,exitCode:0}}catch(e){return{stdout:``,stderr:`ffprobe: ${e instanceof Error?e.message:String(e)}\n`,exitCode:1}}}async function Q(e,t,n){let{ffmpegEngineFromEnv:r}=await import(`./engine-CzMNXd8U.js`).then(e=>e.n),i=r(n.env);if(i===`wasm`)return null;let{probeViaMediabunny:a}=await import(`./bunny-probe-DwyMiB71.js`),o=await a(t,e.inputPath??``);return o?Z(o,e,``):i===`mediabunny`?{stdout:``,stderr:`ffprobe: FFMPEG_ENGINE=mediabunny: input is not a container mediabunny reads
45
45
  `,exitCode:1}:null}async function $(e,t){if(!e.inputPath)return{stdout:``,stderr:`ffprobe: at least one input file must be specified
46
46
  `,exitCode:1};let n=t.fs.resolvePath(t.cwd,e.inputPath);if(!await t.fs.exists(n))return{stdout:``,stderr:`ffprobe: input file not found: ${e.inputPath}\n`,exitCode:1};let r=await s(t.fs,n);return await Q(e,r,t)||K(()=>te(e,r,t))}async function te(e,n,r){let a=u(),o=J(e.inputPath??``),s=ee(a,o),c=await Y(r);if(`exitCode`in c)return c;let{ffmpeg:f,loadLog:p}=c,m={text:``},h=e=>{m.text+=`${e.message}\n`};f.on(`log`,h);let g=!1;try{await d(f,a,[{name:o,data:n}]);let t=await X(f,s,m);if(t)return g=!0,t;let r=C(m.text,e.inputPath??``);return r?Z(r,e,p):{stdout:``,stderr:`ffprobe: could not parse media info from ffmpeg log\n${e.quiet?``:m.text||p}`,exitCode:1}}catch(e){return i(e)&&(g=!0,t(f)),{stdout:``,stderr:`ffprobe: ${e instanceof Error?e.message:String(e)}\n`,exitCode:1}}finally{try{f.off(`log`,h)}catch{}if(!g)try{await l(f,a)}catch{}}}async function ne(e,t){if(e.length===0||e.includes(`--help`)||e.includes(`-h`))return E();if(e.includes(`-version`)||e.includes(`--version`))return D(t);let n;try{n=M(e)}catch(e){return{stdout:``,stderr:`${e instanceof Error?e.message:String(e)}\n`,exitCode:1}}return $(n,t)}export{ne as runFfprobe};
@@ -92,7 +92,7 @@ Examples:
92
92
  --authorize-url 'https://auth.x.ai/oauth2/auth?...' \\
93
93
  --redirect-pattern 'http://127.0.0.1:56121/*'
94
94
  curl -H "Authorization: Bearer $(oauth-token github)" https://api.github.com/user
95
- `}async function d(n,r){let i=await import(`./account-store-LwLxI7v1.js`).then(e=>e.t),a=await import(`./providers-B0rCH1pp.js`).then(e=>e.r);if(t(n,{valueFlags:c}))return{stdout:u(),stderr:``,exitCode:0};let o=e(n,{value:c,bool:l});if(`error`in o)return H(`oauth-token: ${o.error}`);if(o.bools.has(`--list`))return U(i.getAccounts,a.getRegisteredProviderIds,a.getRegisteredProviderConfig,i.getOAuthAccountInfo);if(o.bools.has(`--check`))return T(o.positionals);if(o.bools.has(`--expire`))return O(o.positionals);if(o.bools.has(`--renew`))return k(o.positionals);if(o.values.has(`--from-file`)||o.bools.has(`--intercept`))return L(o,n,r);let s=f(o);if(!s.ok)return s.result;let d=o.bools.has(`--force-login`),m=p(o,i,a);if(!m.ok)return m.result;let _=h(m.value,a.getRegisteredProviderConfig);if(!_.ok)return _.result;if(!d){let e=await g(m.value,_.value,i.getOAuthAccountInfo,i.ensureOAuthMaskReplica,s.value);if(e?.ok)return e.value;if(e)return e.result}return b(m.value,_.value,s.value,i.getOAuthAccountInfo,i.ensureOAuthMaskReplica)}function f(e){if(!e.values.has(`--scope`))return{ok:!0,value:void 0};let t=e.values.get(`--scope`)?.trim();return!t||t.startsWith(`-`)?{ok:!1,result:H(`oauth-token: --scope requires a value`)}:{ok:!0,value:t}}function p(e,t,n){if(e.values.has(`--provider`)){let t=e.values.get(`--provider`);return t?{ok:!0,value:t}:{ok:!1,result:H(`oauth-token: --provider requires a value`)}}if(e.positionals.length>0)return{ok:!0,value:e.positionals[0]};let r=t.getSelectedProvider();if(m(n.getRegisteredProviderConfig(r)))return{ok:!0,value:r};let i=n.getRegisteredProviderIds().find(e=>m(n.getRegisteredProviderConfig(e)));return i?{ok:!0,value:i}:{ok:!1,result:H(`oauth-token: no OAuth providers configured`)}}function m(e){return!!(e?.isOAuth&&(e.onOAuthLogin||e.onOAuthLoginIntercepted))}function h(e,t){let n=t(e);return n?m(n)?{ok:!0,value:n}:{ok:!1,result:H(`oauth-token: provider "${e}" is not an OAuth provider`)}:{ok:!1,result:H(`oauth-token: unknown provider "${e}"`)}}async function g(e,t,n,r,i){let a=n(e);return a&&!a.expired?_(e,a,i,r):!a?.expired||!t.onSilentRenew||!await C(t.onSilentRenew)?null:_(e,n(e),i,r)}async function _(e,t,n,r){if(n&&!s(t?.scopes,n))return null;let i=v(t?.maskedValue,t?.token);if(i)return{ok:!0,value:i};if(!t?.token)return null;let a=await r(e)??{},o=v(a.maskedValue,t.token);return o?{ok:!0,value:o}:{ok:!1,result:y(e,a.error)}}function v(e,t){return!e||t&&e===t?null:{stdout:`${e}\n`,stderr:``,exitCode:0}}function y(e,t){return H(`oauth-token: token held for ${e} but no masked replica${t?` (${t})`:``}`)}async function b(e,t,n,r,i){try{let a=await x(e,t,n);return a.error?a.error:S(e,r,i,a.succeeded)}catch(t){let n=t instanceof Error?t.message:String(t);return t instanceof Error&&t.name===`OAuthLaunchError`?(console.error(`[oauth-token] Provider ${e}: login could not be shown:`,n),H(`oauth-token: ${n}`)):(console.error(`[oauth-token] Provider ${e}: login failed:`,n),H(`oauth-token: login failed: ${n}`))}}async function x(e,t,n){let r=n?{scopes:n}:void 0,i=!1,a=()=>{i=!0};if(t.onOAuthLoginIntercepted){let{createInterceptingOAuthLauncherForCurrentRuntime:n}=await import(`./oauth-service-Gh6Z-BhZ.js`),o=await n();return o?(await t.onOAuthLoginIntercepted(o,a,r),{error:null,succeeded:i}):{error:H(`oauth-token: provider "${e}" needs the controlled-browser interceptor, but no CDP transport is available in this runtime.`),succeeded:!1}}if(t.onOAuthLogin){let{createOAuthLauncher:e}=await import(`./oauth-service-Gh6Z-BhZ.js`);return await t.onOAuthLogin(e(),a,r),{error:null,succeeded:i}}return{error:H(`oauth-token: provider "${e}" has no OAuth login hook`),succeeded:!1}}async function S(e,t,n,r){if(!r)return console.error(`[oauth-token] Provider ${e}: interactive login was not completed`),H(`oauth-token: interactive login was not completed (cancelled, timed out, or no one could approve it)`);let i=t(e);if(i?.token&&!i.expired){let t=v(i.maskedValue,i.token);if(t)return t;let r=await n(e)??{};return v(r.maskedValue,i.token)||y(e,r.error)}return i?.token?H(`oauth-token: login completed but the saved token is already expired`):(console.error(`[oauth-token] Provider ${e}: login completed but no token was saved`),H(`oauth-token: login completed but no token was saved`))}async function C(e){try{return await e()!==null}catch{return!1}}function w(e,t,n,r,i){let a=e[0];if(a)return a;let o=n();return r(o)?.[t]?o:i().find(e=>r(e)?.[t])}async function T(e){let{getSelectedProvider:t,getOAuthAccountInfo:n}=await import(`./account-store-LwLxI7v1.js`).then(e=>e.t),{getRegisteredProviderConfig:r,getRegisteredProviderIds:i}=await import(`./providers-B0rCH1pp.js`).then(e=>e.r),a=w(e,`onValidateToken`,t,r,i);if(!a)return H(`oauth-token --check: no provider supports an upstream token check`);let o=r(a);if(!o)return H(`oauth-token --check: unknown provider "${a}"`);if(!o.onValidateToken)return H(`oauth-token --check: provider "${a}" cannot be checked upstream (no onValidateToken hook); only locally stored state is known.`);let s=n(a),c=[`oauth-token --check ${a}`,` stored token: ${F(s)}`];if(!s)return c.push(` upstream check: skipped — nothing to check`,...M(a)),{stdout:c.join(`
95
+ `}async function d(n,r){let i=await import(`./account-store-_Ksq0LeF.js`).then(e=>e.t),a=await import(`./providers-CLabs7-N.js`).then(e=>e.r);if(t(n,{valueFlags:c}))return{stdout:u(),stderr:``,exitCode:0};let o=e(n,{value:c,bool:l});if(`error`in o)return H(`oauth-token: ${o.error}`);if(o.bools.has(`--list`))return U(i.getAccounts,a.getRegisteredProviderIds,a.getRegisteredProviderConfig,i.getOAuthAccountInfo);if(o.bools.has(`--check`))return T(o.positionals);if(o.bools.has(`--expire`))return O(o.positionals);if(o.bools.has(`--renew`))return k(o.positionals);if(o.values.has(`--from-file`)||o.bools.has(`--intercept`))return L(o,n,r);let s=f(o);if(!s.ok)return s.result;let d=o.bools.has(`--force-login`),m=p(o,i,a);if(!m.ok)return m.result;let _=h(m.value,a.getRegisteredProviderConfig);if(!_.ok)return _.result;if(!d){let e=await g(m.value,_.value,i.getOAuthAccountInfo,i.ensureOAuthMaskReplica,s.value);if(e?.ok)return e.value;if(e)return e.result}return b(m.value,_.value,s.value,i.getOAuthAccountInfo,i.ensureOAuthMaskReplica)}function f(e){if(!e.values.has(`--scope`))return{ok:!0,value:void 0};let t=e.values.get(`--scope`)?.trim();return!t||t.startsWith(`-`)?{ok:!1,result:H(`oauth-token: --scope requires a value`)}:{ok:!0,value:t}}function p(e,t,n){if(e.values.has(`--provider`)){let t=e.values.get(`--provider`);return t?{ok:!0,value:t}:{ok:!1,result:H(`oauth-token: --provider requires a value`)}}if(e.positionals.length>0)return{ok:!0,value:e.positionals[0]};let r=t.getSelectedProvider();if(m(n.getRegisteredProviderConfig(r)))return{ok:!0,value:r};let i=n.getRegisteredProviderIds().find(e=>m(n.getRegisteredProviderConfig(e)));return i?{ok:!0,value:i}:{ok:!1,result:H(`oauth-token: no OAuth providers configured`)}}function m(e){return!!(e?.isOAuth&&(e.onOAuthLogin||e.onOAuthLoginIntercepted))}function h(e,t){let n=t(e);return n?m(n)?{ok:!0,value:n}:{ok:!1,result:H(`oauth-token: provider "${e}" is not an OAuth provider`)}:{ok:!1,result:H(`oauth-token: unknown provider "${e}"`)}}async function g(e,t,n,r,i){let a=n(e);return a&&!a.expired?_(e,a,i,r):!a?.expired||!t.onSilentRenew||!await C(t.onSilentRenew)?null:_(e,n(e),i,r)}async function _(e,t,n,r){if(n&&!s(t?.scopes,n))return null;let i=v(t?.maskedValue,t?.token);if(i)return{ok:!0,value:i};if(!t?.token)return null;let a=await r(e)??{},o=v(a.maskedValue,t.token);return o?{ok:!0,value:o}:{ok:!1,result:y(e,a.error)}}function v(e,t){return!e||t&&e===t?null:{stdout:`${e}\n`,stderr:``,exitCode:0}}function y(e,t){return H(`oauth-token: token held for ${e} but no masked replica${t?` (${t})`:``}`)}async function b(e,t,n,r,i){try{let a=await x(e,t,n);return a.error?a.error:S(e,r,i,a.succeeded)}catch(t){let n=t instanceof Error?t.message:String(t);return t instanceof Error&&t.name===`OAuthLaunchError`?(console.error(`[oauth-token] Provider ${e}: login could not be shown:`,n),H(`oauth-token: ${n}`)):(console.error(`[oauth-token] Provider ${e}: login failed:`,n),H(`oauth-token: login failed: ${n}`))}}async function x(e,t,n){let r=n?{scopes:n}:void 0,i=!1,a=()=>{i=!0};if(t.onOAuthLoginIntercepted){let{createInterceptingOAuthLauncherForCurrentRuntime:n}=await import(`./oauth-service-Gh6Z-BhZ.js`),o=await n();return o?(await t.onOAuthLoginIntercepted(o,a,r),{error:null,succeeded:i}):{error:H(`oauth-token: provider "${e}" needs the controlled-browser interceptor, but no CDP transport is available in this runtime.`),succeeded:!1}}if(t.onOAuthLogin){let{createOAuthLauncher:e}=await import(`./oauth-service-Gh6Z-BhZ.js`);return await t.onOAuthLogin(e(),a,r),{error:null,succeeded:i}}return{error:H(`oauth-token: provider "${e}" has no OAuth login hook`),succeeded:!1}}async function S(e,t,n,r){if(!r)return console.error(`[oauth-token] Provider ${e}: interactive login was not completed`),H(`oauth-token: interactive login was not completed (cancelled, timed out, or no one could approve it)`);let i=t(e);if(i?.token&&!i.expired){let t=v(i.maskedValue,i.token);if(t)return t;let r=await n(e)??{};return v(r.maskedValue,i.token)||y(e,r.error)}return i?.token?H(`oauth-token: login completed but the saved token is already expired`):(console.error(`[oauth-token] Provider ${e}: login completed but no token was saved`),H(`oauth-token: login completed but no token was saved`))}async function C(e){try{return await e()!==null}catch{return!1}}function w(e,t,n,r,i){let a=e[0];if(a)return a;let o=n();return r(o)?.[t]?o:i().find(e=>r(e)?.[t])}async function T(e){let{getSelectedProvider:t,getOAuthAccountInfo:n}=await import(`./account-store-_Ksq0LeF.js`).then(e=>e.t),{getRegisteredProviderConfig:r,getRegisteredProviderIds:i}=await import(`./providers-CLabs7-N.js`).then(e=>e.r),a=w(e,`onValidateToken`,t,r,i);if(!a)return H(`oauth-token --check: no provider supports an upstream token check`);let o=r(a);if(!o)return H(`oauth-token --check: unknown provider "${a}"`);if(!o.onValidateToken)return H(`oauth-token --check: provider "${a}" cannot be checked upstream (no onValidateToken hook); only locally stored state is known.`);let s=n(a),c=[`oauth-token --check ${a}`,` stored token: ${F(s)}`];if(!s)return c.push(` upstream check: skipped — nothing to check`,...M(a)),{stdout:c.join(`
96
96
  `)+`
97
97
  `,stderr:``,exitCode:3};let l=await j(o);if(l?.status===`accepted`){let e=l.userName?` (as ${l.userName})`:``;return c.push(` upstream check: ACCEPTED${e} — the provider honoured the token`),{stdout:c.join(`
98
98
  `)+`
@@ -100,7 +100,7 @@ Examples:
100
100
  `)+`
101
101
  `,stderr:``,exitCode:e}}return c.push(` upstream check: UNKNOWN — the check itself could not run${D(l?.detail)}`,` This says nothing about the token. Retry when the provider is reachable.`),{stdout:c.join(`
102
102
  `)+`
103
- `,stderr:``,exitCode:1}}function E(e,t,n){let r=` upstream check: REJECTED — the provider refused the token${D(n)}`;return t?[r,` A stored refresh token may still be able to replace it — silent renewal`,` has not been tried yet.`,``,` → Next: oauth-token ${e} --renew`,` If that is declined too: oauth-token ${e} --force-login (needs a human).`]:[r,` This provider has no silent renewal, so nothing automated is left.`,...M(e)]}function D(e){return e?` (${e})`:``}async function O(e){let{getAccounts:t,getSelectedProvider:n,saveOAuthAccount:r}=await import(`./account-store-LwLxI7v1.js`).then(e=>e.t),{getRegisteredProviderConfig:i,getRegisteredProviderIds:a}=await import(`./providers-B0rCH1pp.js`).then(e=>e.r),o=w(e,`onSilentRenew`,n,i,a);if(!o)return H(`oauth-token --expire: no provider supports silent renewal`);let s=i(o);if(!s)return H(`oauth-token --expire: unknown provider "${o}"`);if(!s.onSilentRenew)return H(`oauth-token --expire: provider "${o}" has no onSilentRenew hook`);let c=t().find(e=>e.providerId===o);if(!c?.accessToken)return H(`oauth-token --expire: no stored OAuth account for "${o}"`);try{await r({...c,accessToken:c.accessToken,tokenExpiresAt:Date.now()-1e3})}catch(e){return H(`oauth-token --expire: failed to update "${o}": ${e instanceof Error?e.message:String(e)}`)}return{stdout:`oauth-token ${o}: stored token marked expired; next network op will trigger silent renewal.\n`,stderr:``,exitCode:0}}async function k(e){let{getSelectedProvider:t,getOAuthAccountInfo:n}=await import(`./account-store-LwLxI7v1.js`).then(e=>e.t),{getRegisteredProviderConfig:r,getRegisteredProviderIds:i}=await import(`./providers-B0rCH1pp.js`).then(e=>e.r),a=w(e,`onSilentRenew`,t,r,i);if(!a)return H(`oauth-token --renew: no provider supports silent renewal`);let o=r(a);if(!o)return H(`oauth-token --renew: unknown provider "${a}"`);if(!o.onSilentRenew)return H(`oauth-token --renew: provider "${a}" has no onSilentRenew hook`);let s=n(a),c=s?.token,l=[`oauth-token --renew ${a}`];l.push(` stored token: ${F(s)}`);let u=null,d=null;try{u=await o.onSilentRenew()}catch(e){d=e instanceof Error?e.message:String(e)}if(u){let e=n(a),t=!!(c&&e?.token&&c!==e.token);return l.push(` silent renewal: SUCCESS${t?` — token refreshed`:` (token unchanged)`}`),l.push(` renewed token: ${F(e)}`),{stdout:l.join(`
103
+ `,stderr:``,exitCode:1}}function E(e,t,n){let r=` upstream check: REJECTED — the provider refused the token${D(n)}`;return t?[r,` A stored refresh token may still be able to replace it — silent renewal`,` has not been tried yet.`,``,` → Next: oauth-token ${e} --renew`,` If that is declined too: oauth-token ${e} --force-login (needs a human).`]:[r,` This provider has no silent renewal, so nothing automated is left.`,...M(e)]}function D(e){return e?` (${e})`:``}async function O(e){let{getAccounts:t,getSelectedProvider:n,saveOAuthAccount:r}=await import(`./account-store-_Ksq0LeF.js`).then(e=>e.t),{getRegisteredProviderConfig:i,getRegisteredProviderIds:a}=await import(`./providers-CLabs7-N.js`).then(e=>e.r),o=w(e,`onSilentRenew`,n,i,a);if(!o)return H(`oauth-token --expire: no provider supports silent renewal`);let s=i(o);if(!s)return H(`oauth-token --expire: unknown provider "${o}"`);if(!s.onSilentRenew)return H(`oauth-token --expire: provider "${o}" has no onSilentRenew hook`);let c=t().find(e=>e.providerId===o);if(!c?.accessToken)return H(`oauth-token --expire: no stored OAuth account for "${o}"`);try{await r({...c,accessToken:c.accessToken,tokenExpiresAt:Date.now()-1e3})}catch(e){return H(`oauth-token --expire: failed to update "${o}": ${e instanceof Error?e.message:String(e)}`)}return{stdout:`oauth-token ${o}: stored token marked expired; next network op will trigger silent renewal.\n`,stderr:``,exitCode:0}}async function k(e){let{getSelectedProvider:t,getOAuthAccountInfo:n}=await import(`./account-store-_Ksq0LeF.js`).then(e=>e.t),{getRegisteredProviderConfig:r,getRegisteredProviderIds:i}=await import(`./providers-CLabs7-N.js`).then(e=>e.r),a=w(e,`onSilentRenew`,t,r,i);if(!a)return H(`oauth-token --renew: no provider supports silent renewal`);let o=r(a);if(!o)return H(`oauth-token --renew: unknown provider "${a}"`);if(!o.onSilentRenew)return H(`oauth-token --renew: provider "${a}" has no onSilentRenew hook`);let s=n(a),c=s?.token,l=[`oauth-token --renew ${a}`];l.push(` stored token: ${F(s)}`);let u=null,d=null;try{u=await o.onSilentRenew()}catch(e){d=e instanceof Error?e.message:String(e)}if(u){let e=n(a),t=!!(c&&e?.token&&c!==e.token);return l.push(` silent renewal: SUCCESS${t?` — token refreshed`:` (token unchanged)`}`),l.push(` renewed token: ${F(e)}`),{stdout:l.join(`
104
104
  `)+`
105
105
  `,stderr:``,exitCode:0}}if(d)return l.push(` silent renewal: ERROR — ${d}`,...P(a)),{stdout:l.join(`
106
106
  `)+`