sliccy 6.178.2 → 6.179.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (185) hide show
  1. package/dist/ui/.vite/manifest.json +191 -182
  2. package/dist/ui/assets/SKILL-B26KJxxL.js +1 -0
  3. package/dist/ui/assets/__vite-browser-external-CVereMU8.js +1 -0
  4. package/dist/ui/assets/account-store-Bbb4tBjB.js +2 -0
  5. package/dist/ui/assets/account-store-DORXRt2J.js +1 -0
  6. package/dist/ui/assets/{adobe-BHZ-TF7E.js → adobe-CcJb_1io.js} +1 -1
  7. package/dist/ui/assets/{adobe-Cqd5wrqM.js → adobe-Dxc6H5uX.js} +1 -1
  8. package/dist/ui/assets/{agent-panels-DXCdmUkc.js → agent-panels-DukhfWpj.js} +1 -1
  9. package/dist/ui/assets/{almost-bash-shell-headless-B29ulBpN.js → almost-bash-shell-headless-2tBN0e_f.js} +231 -231
  10. package/dist/ui/assets/{apply-layout-BiYaZGTe.js → apply-layout-CnYIzvao.js} +1 -1
  11. package/dist/ui/assets/{apps-BYK0eeEc.js → apps-6FOwbeg0.js} +1 -1
  12. package/dist/ui/assets/{azure-openai-DwxTKwka.js → azure-openai-Bcul1Ufv.js} +1 -1
  13. package/dist/ui/assets/{azure-openai-BgA0OxNa.js → azure-openai-NsEky3Bh.js} +1 -1
  14. package/dist/ui/assets/{backend-hostfs-CeXHlroV.js → backend-hostfs-BJv18aU0.js} +1 -1
  15. package/dist/ui/assets/bedrock-camp-BQ02i7Bk.js +1 -0
  16. package/dist/ui/assets/bedrock-camp-CMYc0nQP.js +1 -0
  17. package/dist/ui/assets/bedrock-camp-extra-models-B0WH9IRx.js +1 -0
  18. package/dist/ui/assets/bedrock-camp-extra-models-WTCIjj5a.js +1 -0
  19. package/dist/ui/assets/{bunny-probe-Dk-taSwq.js → bunny-probe-DwyMiB71.js} +1 -1
  20. package/dist/ui/assets/{bunny-run-CmnXF3U5.js → bunny-run-COGwXgvg.js} +1 -1
  21. package/dist/ui/assets/{cdp-wm8vfA8s.js → cdp-Ck5NGIgv.js} +4 -4
  22. package/dist/ui/assets/{cerebras-wuHzITPY.js → cerebras-B2ofXAjg.js} +1 -1
  23. package/dist/ui/assets/{cerebras-BPlfZv3L.js → cerebras-DzROLFaR.js} +1 -1
  24. package/dist/ui/assets/{composer-speech-DI9SI2lY.js → composer-speech-ArgvCsJw.js} +1 -1
  25. package/dist/ui/assets/{connect-surface-zTa8OfFh.js → connect-surface-DVI8l1Gj.js} +1 -1
  26. package/dist/ui/assets/{directed-approval-DmDgVpiX.js → directed-approval-D5B0YPqE.js} +1 -1
  27. package/dist/ui/assets/{ensure-speech-assets-42E6KJDv.js → ensure-speech-assets-Bt69TLMK.js} +1 -1
  28. package/dist/ui/assets/{fast-path-DiV4YcEb.js → fast-path-CG_eXz0M.js} +1 -1
  29. package/dist/ui/assets/{frozen-archive-writer-C97kBlYw.js → frozen-archive-writer-DRM5RlgX.js} +1 -1
  30. package/dist/ui/assets/{fs-DmgjBIs9.js → fs-Bdm5h1uM.js} +1 -1
  31. package/dist/ui/assets/{fs-BKmepe3Q.js → fs-Ce8P6WrG.js} +2 -2
  32. package/dist/ui/assets/{gelatiere-store-D1l9WE1j.js → gelatiere-store-BZg-43KO.js} +1 -1
  33. package/dist/ui/assets/{gelatiere-unit-jlm5b-JJ.js → gelatiere-unit-BX9sZFKS.js} +1 -1
  34. package/dist/ui/assets/{github-C8jjATg2.js → github-8zos8s_U.js} +2 -2
  35. package/dist/ui/assets/{github-BB3M-XW1.js → github-CCjvDIfP.js} +1 -1
  36. package/dist/ui/assets/{github-auth-CkC7qTEg.js → github-auth-A-2czSUQ.js} +1 -1
  37. package/dist/ui/assets/{github-copilot-DuwasHAz.js → github-copilot-BptMXI0N.js} +1 -1
  38. package/dist/ui/assets/{github-copilot-D7QRCTDD.js → github-copilot-CKr_YmDA.js} +1 -1
  39. package/dist/ui/assets/{github-install-DT3Wys59.js → github-install-fthN4iEm.js} +1 -1
  40. package/dist/ui/assets/{github-zip-CX3GXBmW.js → github-zip-DwYtMYDx.js} +1 -1
  41. package/dist/ui/assets/{hear-pJ--prvx.js → hear-4csSE4tf.js} +1 -1
  42. package/dist/ui/assets/{help-gOzjZhgS.js → help-CW93-CFs.js} +1 -1
  43. package/dist/ui/assets/{installer-DeqzzcvC.js → installer-DMXLmwMy.js} +1 -1
  44. package/dist/ui/assets/{js-realm-worker-QT2JnICz.js → js-realm-worker-C2CFKG9d.js} +9 -9
  45. package/dist/ui/assets/{jsh-executor-BBZWMBxV.js → jsh-executor-sKhz-2wo.js} +3 -3
  46. package/dist/ui/assets/{kernel-worker-B23YxkDH.js → kernel-worker-DPGsdtHG.js} +11 -11
  47. package/dist/ui/assets/{lick-ws-bridge-CpcUjLS6.js → lick-ws-bridge-QLNp37XL.js} +1 -1
  48. package/dist/ui/assets/{lick-ws-bridge-DsoQWD5s.js → lick-ws-bridge-sNe1yusQ.js} +1 -1
  49. package/dist/ui/assets/{live-session-curation-BWfx-Nu1.js → live-session-curation-BeMkfXGh.js} +1 -1
  50. package/dist/ui/assets/{live-session-snapshot-BSNfthJ2.js → live-session-snapshot-Bm0Bb5YU.js} +1 -1
  51. package/dist/ui/assets/{local-llm-vzP-uq7M.js → local-llm-BP0eQCgl.js} +1 -1
  52. package/dist/ui/assets/{local-llm-DGFPI_4T.js → local-llm-DY70xAff.js} +1 -1
  53. package/dist/ui/assets/main-B0cbvPwD.js +22 -0
  54. package/dist/ui/assets/{main-cherry-Bbjw_90k.js → main-cherry-Cs8W2ySf.js} +1 -1
  55. package/dist/ui/assets/{memory-curation-seam-BufuSUCj.js → memory-curation-seam-BHFcRLuu.js} +1 -1
  56. package/dist/ui/assets/{memory-health-DdSqq7yP.js → memory-health-JgHshbO8.js} +1 -1
  57. package/dist/ui/assets/memory-v2-flag-DZrdHcA-.js +1 -0
  58. package/dist/ui/assets/{memory-write-execute-BygymnF0.js → memory-write-execute-Bw7kTO2u.js} +1 -1
  59. package/dist/ui/assets/{mount-DlogHA7u.js → mount-B70Cfm-W.js} +3 -3
  60. package/dist/ui/assets/{mount-_sTSuvKx.js → mount-CT7VaoKY.js} +1 -1
  61. package/dist/ui/assets/new-session-Crr2-msq.js +2 -0
  62. package/dist/ui/assets/oauth-bootstrap-CZzvOYOg.js +2 -0
  63. package/dist/ui/assets/{onboarding-orchestrator-CbnB67nZ.js → onboarding-orchestrator-CXxroXfS.js} +1 -1
  64. package/dist/ui/assets/{openai-codex-SI0nWQNS.js → openai-codex-Bv9btlww.js} +1 -1
  65. package/dist/ui/assets/{openai-codex-BtwVt-12.js → openai-codex-DCsbLgXd.js} +1 -1
  66. package/dist/ui/assets/{openrouter-BFlMjaCH.js → openrouter-CnnttWgn.js} +1 -1
  67. package/dist/ui/assets/{openrouter-BruOnSfT.js → openrouter-Crgs_QCq.js} +1 -1
  68. package/dist/ui/assets/{openrouter-free-B2pceWVg.js → openrouter-free-CgIoPuxn.js} +1 -1
  69. package/dist/ui/assets/{openrouter-free-DPQDCfqQ.js → openrouter-free-DRkmaxB3.js} +1 -1
  70. package/dist/ui/assets/{openrouter-oauth-BLskezr8.js → openrouter-oauth-CxTickkD.js} +1 -1
  71. package/dist/ui/assets/{openrouter-oauth-C4kwBIwS.js → openrouter-oauth-pI7Aub_Z.js} +1 -1
  72. package/dist/ui/assets/{opfs-mount-8s9WP18b.js → opfs-mount-mco_YXZ2.js} +1 -1
  73. package/dist/ui/assets/panel-rpc-handlers-DlWD1u2Q.js +2 -0
  74. package/dist/ui/assets/{panelize-shell-Dg_58ImI.js → panelize-shell-C6AGU1O_.js} +1 -1
  75. package/dist/ui/assets/{pi-edit-execution-C9GYKunH.js → pi-edit-execution-yVaqL9lZ.js} +1 -1
  76. package/dist/ui/assets/{provider-DEcfbBkM.js → provider-BLg5uchT.js} +1 -1
  77. package/dist/ui/assets/{provider-B_fhkXn7.js → provider-DGvW9aTF.js} +2 -2
  78. package/dist/ui/assets/{provider-settings-BLtjMrT0.js → provider-settings-CeFsisH4.js} +1 -1
  79. package/dist/ui/assets/provider-store-access-BaHh7m4I.js +1 -0
  80. package/dist/ui/assets/provider-store-access-CnoMGfWY.js +1 -0
  81. package/dist/ui/assets/providers-2pihfuXe.js +2 -0
  82. package/dist/ui/assets/providers-BNhTu4Az.js +1 -0
  83. package/dist/ui/assets/py-live-vfs-DaPSes0l.js +168 -0
  84. package/dist/ui/assets/py-live-vfs-Dx9cFlfE.js +168 -0
  85. package/dist/ui/assets/{py-realm-worker-A1ICPvEl.js → py-realm-worker-CYwLJW9I.js} +3 -3
  86. package/dist/ui/assets/{pyodide-DGH4V3SQ.js → pyodide-DKNrUBio.js} +2 -2
  87. package/dist/ui/assets/{quick-llm-B8uh7EVu.js → quick-llm-DcsNLbYv.js} +1 -1
  88. package/dist/ui/assets/realm-inprocess-BgV7BI1t.js +30 -0
  89. package/dist/ui/assets/{recovery-screen-M8szzZB2.js → recovery-screen-xvnzvjnh.js} +1 -1
  90. package/dist/ui/assets/{remote-terminal-view-6ygd42Fb.js → remote-terminal-view-C_QEoDZe.js} +1 -1
  91. package/dist/ui/assets/require-guards-Du29-pl4.js +252 -0
  92. package/dist/ui/assets/{restore-Qq5h6a38.js → restore-90cAJcB-.js} +1 -1
  93. package/dist/ui/assets/{run-C0wVagJ5.js → run-BjdOwTMK.js} +2 -2
  94. package/dist/ui/assets/{run-DK8nktud.js → run-BoSrXXY1.js} +2 -2
  95. package/dist/ui/assets/{run-CPDsfLJJ.js → run-Bx5g1SW-.js} +2 -2
  96. package/dist/ui/assets/{run-C3rYy-Lu.js → run-C-9fbuPf.js} +1 -1
  97. package/dist/ui/assets/{run-dNFrBZDI.js → run-CTYkZrli.js} +1 -1
  98. package/dist/ui/assets/{run-DUzzkV29.js → run-DMneLV98.js} +3 -3
  99. package/dist/ui/assets/{run--H9dud5r.js → run-Di77_0CW.js} +2 -2
  100. package/dist/ui/assets/{run-Bk0pGJJa.js → run-R7EnlHqn.js} +1 -1
  101. package/dist/ui/assets/{run-_QNErIec.js → run-u5sZdtZc.js} +2 -2
  102. package/dist/ui/assets/{session-command-memory-CAl1-crq.js → session-command-memory-BIW04ime.js} +2 -2
  103. package/dist/ui/assets/{session-jsonl-B-4fihPX.js → session-jsonl-BT6N86_D.js} +1 -1
  104. package/dist/ui/assets/{session-jsonl-lB9-7rZS.js → session-jsonl-DRpBHMbZ.js} +1 -1
  105. package/dist/ui/assets/{session-search-index-Bn4FhmPW.js → session-search-index-CRSNfFPt.js} +1 -1
  106. package/dist/ui/assets/{setup-feature-flags-remote-opNg3JWs.js → setup-feature-flags-remote-DLPlEBtl.js} +1 -1
  107. package/dist/ui/assets/{signed-fetch-YC2zrriw.js → signed-fetch-Cv-pIQgJ.js} +1 -1
  108. package/dist/ui/assets/{silent-renew-backoff-Bak0vwwf.js → silent-renew-backoff-BL0l9czs.js} +1 -1
  109. package/dist/ui/assets/slicc-version-wzJMaTOt.js +1 -0
  110. package/dist/ui/assets/{snapshot-features-BqGUjBWl.js → snapshot-features-DN8885R6.js} +1 -1
  111. package/dist/ui/assets/{snapshot-6br_5p-f.js → snapshot-h1IyuVIH.js} +1 -1
  112. package/dist/ui/assets/{soundscape-DRViCPly.js → soundscape-qJ4gJF6y.js} +1 -1
  113. package/dist/ui/assets/{speak-DRv_vLqY.js → speak-CUSuBAiN.js} +1 -1
  114. package/dist/ui/assets/{sprinkle-manager-DeJrE3Hq.js → sprinkle-manager-CK0KfQ0E.js} +1 -1
  115. package/dist/ui/assets/{sprinkle-renderer-DYUy10CO.js → sprinkle-renderer-C0-nYSNx.js} +1 -1
  116. package/dist/ui/assets/{src-CmTUvI8R.js → src-BfoZU01X.js} +74 -74
  117. package/dist/ui/assets/{ssh-D1zj1EXl.js → ssh-D9CT02gL.js} +1 -1
  118. package/dist/ui/assets/{state-BpyjzTIG.js → state-DCSstoTF.js} +1 -1
  119. package/dist/ui/assets/{store-DQkIRnav.js → store-COcJ0rh9.js} +1 -1
  120. package/dist/ui/assets/{store-DwUewAuZ.js → store-DrLyzt3v.js} +1 -1
  121. package/dist/ui/assets/{sudo-DIegVBwT.js → sudo-BLsv33L7.js} +1 -1
  122. package/dist/ui/assets/{supervisor-gHbk5m7z.js → supervisor-DC1z_etC.js} +1 -1
  123. package/dist/ui/assets/{sync-dialog-CH4PBcVu.js → sync-dialog-B9Na5xYc.js} +1 -1
  124. package/dist/ui/assets/sync-exec-xhr-bridge-BjD_IfJF.js +1 -0
  125. package/dist/ui/assets/sync-sab-wire-CkrsRVrw.js +1 -0
  126. package/dist/ui/assets/tab-8LaHojfd.js +1 -0
  127. package/dist/ui/assets/{transformers-env-9M9En1_O.js → transformers-env-DbQSH9Ln.js} +1 -1
  128. package/dist/ui/assets/{tray-leader-Bd293BI8.js → tray-leader-DyfRH9_x.js} +1 -1
  129. package/dist/ui/assets/{tray-leave-runtime-wLd1uBMu.js → tray-leave-runtime-BRVkq1j8.js} +1 -1
  130. package/dist/ui/assets/{tray-sidecar-C35X7Jht.js → tray-sidecar-BdSKCDRU.js} +1 -1
  131. package/dist/ui/assets/{upgrade-detection-Tp8fDJAG.js → upgrade-detection-DOttGbYy.js} +1 -1
  132. package/dist/ui/assets/{upskill-lick-skip-Cr0VVPGj.js → upskill-lick-skip-4EAgxZBZ.js} +1 -1
  133. package/dist/ui/assets/{voice-reply-wJfABSIn.js → voice-reply-BMbj-krb.js} +1 -1
  134. package/dist/ui/assets/wc-attach-BYh78RZQ.js +13 -0
  135. package/dist/ui/assets/{wc-browser-BJemxWhg.js → wc-browser-D_SlpGFj.js} +1 -1
  136. package/dist/ui/assets/{wc-computers-Cr14YnOg.js → wc-computers-DguwFFgg.js} +1 -1
  137. package/dist/ui/assets/{wc-detached-DQ_ZTSZ-.js → wc-detached-BwCNIFnT.js} +1 -1
  138. package/dist/ui/assets/{wc-extension-C8pgLDqO.js → wc-extension-B3EwzUfS.js} +2 -2
  139. package/dist/ui/assets/wc-follower-CmPddVGO.js +17 -0
  140. package/dist/ui/assets/{wc-follower-oauth-BU-XAftl.js → wc-follower-oauth-D9PaxsNc.js} +1 -1
  141. package/dist/ui/assets/{wc-gelatiere-BiyouLW3.js → wc-gelatiere-BIfd8LAx.js} +1 -1
  142. package/dist/ui/assets/{wc-live-CaopRwn0.js → wc-live-Dq-_FAPU.js} +6 -6
  143. package/dist/ui/assets/wc-nav-hfv762PR.js +2 -0
  144. package/dist/ui/assets/{wc-onboarding-FjrDOv_u.js → wc-onboarding-BAO8Xa0p.js} +2 -2
  145. package/dist/ui/assets/{wc-permissions-C63-jLbY.js → wc-permissions-BWZQsa4a.js} +2 -2
  146. package/dist/ui/assets/{wc-placeholder-Bdbmjijc.js → wc-placeholder-BJLM84yS.js} +3 -3
  147. package/dist/ui/assets/{wc-secret-request-C9iCWgBV.js → wc-secret-request-DMdnDVOi.js} +1 -1
  148. package/dist/ui/assets/{wc-settings-1ZJgN4Wk.js → wc-settings-Cwj7tYnH.js} +3 -3
  149. package/dist/ui/assets/{wc-shell-CrMn8BW0.js → wc-shell-Cn2tEDM7.js} +4 -4
  150. package/dist/ui/assets/{wc-shortcut-config-JXEU24sg.js → wc-shortcut-config-C5cwDbE-.js} +1 -1
  151. package/dist/ui/assets/{wc-sprinkles-CBaPR_V8.js → wc-sprinkles-Bme5XF35.js} +2 -2
  152. package/dist/ui/assets/{wc-transcript-export-eyG-SwVe.js → wc-transcript-export-D5m4sap2.js} +2 -2
  153. package/dist/ui/assets/{wc-tray-dSLNIDh9.js → wc-tray-kqJoJtNf.js} +4 -4
  154. package/dist/ui/assets/welcome-detection-CQJa6RP3.js +1 -0
  155. package/dist/ui/assets/whisper-session-DhEBOCZj.js +2 -0
  156. package/dist/ui/assets/{xai-grok-C2oyJ5tt.js → xai-grok-DVO4KVhh.js} +1 -1
  157. package/dist/ui/assets/{xai-grok-G4GFCgrM.js → xai-grok-UADpK8FU.js} +1 -1
  158. package/dist/ui/index.html +4 -3
  159. package/dist/ui/llm-proxy-sw.js +1 -1
  160. package/dist/ui/packages/webapp/index.html +4 -3
  161. package/package.json +1 -1
  162. package/dist/ui/assets/SKILL-CJrjPuRt.js +0 -1
  163. package/dist/ui/assets/__vite-browser-external-C7Grxh8D.js +0 -1
  164. package/dist/ui/assets/account-store-LwLxI7v1.js +0 -1
  165. package/dist/ui/assets/account-store-SI8RQbm0.js +0 -2
  166. package/dist/ui/assets/bedrock-camp-D-jmLdEX.js +0 -1
  167. package/dist/ui/assets/bedrock-camp-DmVFQWfL.js +0 -1
  168. package/dist/ui/assets/main-DFTTAllP.js +0 -22
  169. package/dist/ui/assets/memory-v2-flag-uChv9nwr.js +0 -1
  170. package/dist/ui/assets/new-session-C914zfKa.js +0 -2
  171. package/dist/ui/assets/oauth-bootstrap-B7cPXMSk.js +0 -2
  172. package/dist/ui/assets/panel-rpc-handlers-BuMdGle_.js +0 -2
  173. package/dist/ui/assets/provider-store-access-C0w1Xcs2.js +0 -1
  174. package/dist/ui/assets/provider-store-access-YjQKD2es.js +0 -1
  175. package/dist/ui/assets/providers-B0rCH1pp.js +0 -1
  176. package/dist/ui/assets/providers-B9p2VR5L.js +0 -2
  177. package/dist/ui/assets/realm-inprocess-qhbZWW6z.js +0 -30
  178. package/dist/ui/assets/slicc-version-D1Js64gw.js +0 -1
  179. package/dist/ui/assets/sync-sab-wire-CN1_ni9J.js +0 -252
  180. package/dist/ui/assets/tab-0xwFvGm5.js +0 -1
  181. package/dist/ui/assets/wc-attach-CtVWDKPk.js +0 -13
  182. package/dist/ui/assets/wc-follower-nosCeVKN.js +0 -17
  183. package/dist/ui/assets/wc-nav-Wn2qDNiX.js +0 -2
  184. package/dist/ui/assets/welcome-detection-DuFRP38Z.js +0 -1
  185. package/dist/ui/assets/whisper-session-DrDhzSqp.js +0 -2
@@ -1,252 +0,0 @@
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 ee(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 te(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 d(e,t){if(!c(t.url))throw Error(`${t.label}: refused to fetch non-https URL '${t.url}'`);let n=await ee(e,t,t.timeoutMs??6e4);return await te(n,t),n}const f=`pyproject.toml`,p=`uv.lock`,m=`/workspace`;function h(e){return e.trim().toLowerCase().replace(/[-_.]+/g,`-`)}function g(e){let t=e.indexOf(`==`);return(t===-1?e:e.slice(0,t)).trim()}function _(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 v(e,t){let i=t?.startsWith(`/`)?t:m;for(;;){if(await e.exists(r(i,f)))return i;if(i===`/`)return null;i=n(i).dir}}async function ne(e,t){return await v(e,t)??m}function y(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 b(e){let t=e.trim();return t.startsWith(`"`)&&t.endsWith(`"`)||t.startsWith(`'`)&&t.endsWith(`'`)?t.slice(1,-1):null}function re(e,t,n){let r=n,i=t;for(;!r.includes(`]`)&&i+1<e.length;)i+=1,r+=`\n${y(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 ie(e){let t=e.split(`
2
- `),n=``,r=`workspace`,i=`0.1.0`,a=[];for(let e=0;e<t.length;e++){let o=y(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=b(l)??r;else if(c===`version`)i=b(l)??i;else if(c===`dependencies`){let n=re(t,e,l);a=n.items,e=n.lastIndex}}return{name:r,version:i,dependencies:a}}function x(e){return e.length===0?`dependencies = []`:`dependencies = [\n${e.map(e=>` "${e}",`).join(`
3
- `)}\n]`}function ae(e){let t=x(e.dependencies);return`[project]\nname = "${e.name}"\nversion = "${e.version}"\n${t}\n`}function oe(e,t){let n=y(e[t]),r=t;for(;!n.includes(`]`)&&r+1<e.length;)r+=1,n+=`\n${y(e[r])}`;return r}function se(e){let t={depsStart:-1,depsEnd:-1,projectHeaderIndex:-1,projectSectionEnd:-1},n=``;for(let r=0;r<e.length;r++){let i=y(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=oe(e,r))}return t}function ce(e,t){let n=x(t.dependencies).split(`
4
- `),r=e.split(`
5
- `),{depsStart:i,depsEnd:a,projectHeaderIndex:o,projectSectionEnd:s}=se(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${ae(t)}`}const le={name:`name`,version:`version`,source:`source`,file_name:`fileName`,sha256:`sha256`};function S(e,t){t.name&&t.version&&t.source&&t.fileName&&t.sha256&&e.push(t)}function ue(e){let t=[],n=null;for(let r of e.split(`
10
- `)){let e=y(r).trim();if(!e)continue;if(e===`[[package]]`){n&&S(t,n),n={};continue}if(e.startsWith(`[`)){n&&S(t,n),n=null;continue}if(!n)continue;let i=e.indexOf(`=`);if(i===-1)continue;let a=le[e.slice(0,i).trim()];if(!a)continue;let o=b(e.slice(i+1).trim());o!==null&&(a===`source`?n.source=o:n[a]=o)}return n&&S(t,n),t}function de(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 fe(e,t,n){let r=h(t),i=e.filter(e=>h(g(e))!==r);return i.push(`${t}==${n}`),i.sort((e,t)=>h(g(e)).localeCompare(h(g(t)))),i}function pe(e,t){let n=h(t.name),r=e.filter(e=>h(e.name)!==n);return r.push(t),r.sort((e,t)=>h(e.name).localeCompare(h(t.name))),r}async function C(e,t){let n=r(t,f);if(!await e.exists(n))return{name:`workspace`,version:`0.1.0`,dependencies:[]};let i=await e.readFile(n);return{...ie(i),raw:i}}async function me(e,t,n){await e.mkdir(t,{recursive:!0});let i=n.raw===void 0?ae(n):ce(n.raw,n);await e.writeFile(r(t,f),i)}async function w(e,t){let n=r(t,p);return await e.exists(n)?ue(await e.readFile(n)):[]}async function he(e,t,n){await e.mkdir(t,{recursive:!0}),await e.writeFile(r(t,p),de(n))}const T={EBADF:8,EEXIST:20,EINVAL:28,EIO:29,EISDIR:31,ENOENT:44,ENOTDIR:54,ENOTEMPTY:55,EPERM:63},E=16877;async function ge(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 D(e,t){return e===``?t:`${e}/${t}`}function _e(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;A(t.mount,async()=>{if(t.opfs.size>r)return;let n=await Te(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(T.ENOENT);return r},mknod(n,r,i,a){if(n.opfs.children?.has(r))throw new e.ErrnoError(T.EEXIST);let o=t.createNode(n,r,i,a);return n.opfs.children?.set(r,o),e.isDir(i)?A(n.mount,async()=>{let e=await(await j(n)).getDirectoryHandle(r,{create:!0});o.opfs.dirHandle=e}):e.isFile(i)&&A(n.mount,async()=>{let e=await(await j(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(T.EEXIST);i.opfs.children?.delete(a),n.opfs.children?.set(r,t),t.name=r,t.parent=n,M(t,D(n.opfs.relPath,r)),e.isFile(t.mode)?A(t.mount,()=>Ee(t,i,a,n,r)):e.isDir(t.mode)&&A(t.mount,()=>De(t,i,a,n,r))}},unlink(t,n){let r=t.opfs.children?.get(n);if(!r)throw new e.ErrnoError(T.ENOENT);if(e.isDir(r.mode))throw new e.ErrnoError(T.EISDIR);t.opfs.children?.delete(n),e.isFile(r.mode)&&A(t.mount,async()=>{try{t.mount.opts.sahProvider.release(r.opfs.relPath)}catch{}await(await j(t)).removeEntry(n)})},rmdir(t,n){let r=t.opfs.children?.get(n);if(!r)throw new e.ErrnoError(T.ENOENT);if(!e.isDir(r.mode))throw new e.ErrnoError(T.ENOTDIR);if((r.opfs.children?.size??0)>0)throw new e.ErrnoError(T.ENOTEMPTY);t.opfs.children?.delete(n),A(t.mount,async()=>{await(await j(t)).removeEntry(n)})},readdir(t){if(!e.isDir(t.mode))throw new e.ErrnoError(T.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(T.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(T.EINVAL);return t.opfs.linkTarget??``}}}function ve(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(T.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(T.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(T.EINVAL);return t.position=i,i}}}function ye(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(T.EIO);o=i}let s=r[r.length-1];if(a.kind===`directory`){let e=t.createNode(o,s,E,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 be(e){let t={mount(n){let{prewalk:r}=n.opts,i=r.entries.get(``);if(i?.kind!==`directory`)throw new e.ErrnoError(T.EINVAL);let a=t.createNode(null,`/`,E,0);return a.mount=n,a.opfs.dirHandle=i.dirHandle,a.opfs.children=new Map,ye(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(T.EINVAL);let o=n===null?``:D(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=_e(e,t),t.stream_ops=ve(e),t}const O=new WeakMap,k=new WeakMap;function A(e,t){k.set(e,!0);let n=(O.get(e)??Promise.resolve()).then(t,t);O.set(e,n),e.opts.flush||(e.opts.flush=()=>O.get(e)??Promise.resolve())}function xe(e){return k.get(e)===!0}async function Se(e){let t=O.get(e);for(;t;){let n=t;await n;let r=O.get(e);if(r===n){k.set(e,!1);return}t=r}}var Ce=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 we(){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 Ce(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 j(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 Te(e){if(e.opfs.fileHandle)return e.opfs.fileHandle;let t=await(await j(e.parent)).getFileHandle(e.name,{create:!0});return e.opfs.fileHandle=t,t}function M(e,t){if(e.opfs.relPath=t,e.opfs.children)for(let[n,r]of e.opfs.children)M(r,D(t,n))}async function Ee(e,t,n,r,i){let a=await j(t),o=await j(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 De(e,t,n,r,i){let a=await j(t),o=await j(r),s=await a.getDirectoryHandle(n),c=await o.getDirectoryHandle(i,{create:!0});await N(s,c),await a.removeEntry(n,{recursive:!0}),e.opfs.dirHandle=c}async function N(e,t){let n=e;for await(let[e,r]of n)if(r.kind===`directory`)await N(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 P(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 F(e,t){let n=new e.ErrnoError(T.EIO);return n.message=P(t),n}function Oe(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 F(n(e),I(e))},setattr:e=>{throw F(n(e),I(e))},lookup:e=>{throw F(n(e),I(e))},mknod:e=>{throw F(n(e),I(e))},rename:e=>{throw F(n(e),I(e))},unlink:e=>{throw F(n(e),I(e))},rmdir:e=>{throw F(n(e),I(e))},readdir:e=>{throw F(n(e),I(e))},symlink:e=>{throw F(n(e),I(e))},readlink:e=>{throw F(n(e),I(e))}},stream_ops:{open:e=>{throw F(n(e.node),I(e.node))},close:()=>{},read:e=>{throw F(n(e.node),I(e.node))},write:e=>{throw F(n(e.node),I(e.node))},llseek:e=>{throw F(n(e.node),I(e.node))}}};function n(t){return e}return t}function I(e){let t=e.mount;return t?.opts?.mountPath??t?.mountpoint??`<unknown mount>`}function ke(e,t){let n=e.MOUNT_BOMB_FS;return n||(n=Oe(t),e.MOUNT_BOMB_FS=n),n}function Ae(e,t,n=()=>{}){if(t.length===0)return;let r=ke(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 je(e){return P(e)}async function Me(e,t){if(t.length===0)return;let n={};for(let e of t)n[e]=je(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 L=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 Ne(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 Pe(e,t){let n=Ne(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 R=a(`pyodide`,`314.0.6`),z=`https://cdn.jsdelivr.net/pyodide/v${R}/full/`,B=`pyodide is not installed in node_modules: run \`ipk add pyodide@${R}\` (no network fallback)`,V={asmJs:`pyodide.asm.mjs`,asmWasm:`pyodide.asm.wasm`,stdlibZip:`python_stdlib.zip`,lockJson:`pyodide-lock.json`};async function Fe(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(V))if(!await e.reader.exists(`${r}/${t}`))return null;return r}async function Ie(e,t){try{let[n,r,i,a]=await Promise.all([e.call(`vfs`,`readFile`,[`${t}/${V.asmJs}`]),e.call(`vfs`,`readFileBinary`,[`${t}/${V.asmWasm}`]),e.call(`vfs`,`readFileBinary`,[`${t}/${V.stdlibZip}`]),e.call(`vfs`,`readFile`,[`${t}/${V.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 Le(e,t){let n=e+V.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 Re(e,t,n){let r=await Ie(n,t);if(!r)throw Error(B);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=Le(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 ze(e,t,n=()=>import(`./pyodide-65Z_RapY.js`)){let r=[],i=[],a=new L(t),o;try{let t=await n();o=e.pyodideAssetRoot?await Re(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;try{await Be(o,a,s,Ve(e.pyodideAssetRoot)),c=await Ye(o,e,s),await Xe(o,e,s),await qe(o,a,e,s),await Ze(o,a,s);try{o.FS.chdir(e.cwd)}catch{}Qe(o,e,r,i),l=await $e(o,i),await et(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 u={type:`realm-done`,stdout:r.join(``),stderr:i.join(``),exitCode:l};t.postMessage(u)}const H=`/workspace/python_wheels`;async function Be(e,t,n,r){await He(t,n,r);try{await e.loadPackage([`micropip`])}catch(e){n(`micropip preload failed: ${G(e)}`)}}function Ve(e){return e?`${e}/${V.lockJson}`:`/workspace/node_modules/pyodide/pyodide-lock.json`}const U=1e4,W=new WeakMap;function He(e,t,n){let r=W.get(e);if(r)return r;let i=Ue(e,t,n);return W.set(e,i),i}async function Ue(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&&h(t.name??e)===`micropip`){r=t;break}}catch(e){t(`micropip wheel staging skipped: ${G(e)}`);return}if(!r?.file_name||!r.sha256)return;let i=`${H}/${r.file_name}`;try{if(await e.call(`vfs`,`exists`,[i]))return;let t=await d(We(e),{url:`${z}${r.file_name}`,sha256:r.sha256,label:`micropip wheel`,timeoutMs:U});await e.call(`vfs`,`mkdir`,[H]),await e.call(`vfs`,`writeFileBinary`,[i,t])}catch(e){t(`micropip wheel staging failed: ${G(e)}`)}}function We(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 Ge(e.call(`fetch`,`request`,[t,r]),n?.timeoutMs??U,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 Ge(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 Ke(e){return{exists:t=>e.call(`vfs`,`exists`,[t]),readFile:t=>e.call(`vfs`,`readFile`,[t])}}async function qe(e,t,n,r){let i=Ke(t),a;try{a=await v(i,n.cwd)}catch(e){r(`manifest discovery failed: ${G(e)}`);return}if(a===null)return;let o,s;try{let[e,t]=await Promise.all([C(i,a),w(i,a)]);o=e.dependencies,s=t}catch(e){r(`manifest read failed: ${G(e)}`);return}let c=new Map;for(let e of s)c.set(h(e.name),e);for(let t of o){let{name:n}=_(t);if(!n)continue;let i=c.get(h(n));if(!i){r(`no integrity pin for \`${n}\`; run \`di sync\` to repair`);continue}await Je(e,i,r)}}async function Je(e,t,n){switch(t.source){case`pyodide-cdn`:try{await e.loadPackage([t.name])}catch(e){n(`activation of \`${t.name}\` failed: ${G(e)}`)}return;case`pypi`:try{let n=`${H}/${t.fileName}`;await e.runPythonAsync(`import micropip; await micropip.install('emfs:${n}')`)}catch(e){n(`activation of \`${t.name}\` failed: ${G(e)}`)}return;default:n(`unknown source \`${t.source}\` for \`${t.name}\`; skipping`)}}async function Ye(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 rt(e,r,t.opfsMountDbName,n,{skipMountPaths:a})).mounts}catch(e){return n(`VFS→Pyodide OPFS mount failed: ${G(e)}`),[]}}async function Xe(e,t,n){let r=t.mountPoints??[];if(r.length!==0){try{Ae(e.FS,r.map(e=>e.path),n)}catch(e){n(`bomb overlay install failed: ${G(e)}`)}try{await Me(e,r.map(e=>e.path))}catch(e){n(`python mount guard install failed: ${G(e)}`)}}}async function Ze(e,t,n){try{await Pe(e,t)}catch(e){n(`slicc.fs registration failed: ${G(e)}`)}}function Qe(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)}),e.globals.set(`__slicc_code`,t.code),e.globals.set(`__slicc_filename`,t.filename),e.globals.set(`__slicc_argv`,t.argv)}async function $e(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 et(e,t,n,r){if(t.opfsMountDbName!==void 0){try{await ot(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 st(e)}catch(e){r(`Pyodide→VFS OPFS flush failed: ${e instanceof Error?e.message:String(e)}`)}try{await ct(e,n)}catch(e){r(`Pyodide→kernel VFS invalidation failed: ${G(e)}`)}}}const tt=new Set([`dev`,`proc`,`lib`,`tmp`,`home`]);function G(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 nt(e){let t=e.FS.filesystems,n=t.OPFS_SYNC_FS;return n||(n=be(e.FS),t.OPFS_SYNC_FS=n),n}async function rt(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: ${G(e)}`),{mounts:a}}let l;try{l=await c.getDirectoryHandle(n,{create:!0})}catch(e){return r(`VFS→Pyodide OPFS mount: opening '${n}' failed: ${G(e)}`),{mounts:a}}let u=nt(e);for(let n of t){if(n===`/`){await it(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 K(e,u,n,t,a)}catch(e){r(`VFS→Pyodide OPFS mount '${n}' failed: ${G(e)}`)}}return{mounts:a}}async function it(e,t,n,r,i,a){try{let o=n;for await(let[n,s]of o){if(s.kind!==`directory`||tt.has(n))continue;let o=`/${n}`;if(!r.has(o))try{await K(e,t,o,s,i)}catch(e){a(`VFS→Pyodide OPFS mount '${o}' failed: ${G(e)}`)}}}catch(e){a(`VFS→Pyodide OPFS mount '/' failed: ${G(e)}`)}}async function K(e,t,n,r,i){try{e.FS.stat(n)}catch{e.FS.mkdirTree(n)}let a=await ge(r),o=we();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 at(e){return e.some(e=>e.getDirtyPaths().length>0||xe(e.mount))}async function ot(e,t){at(e)&&await t.call(`vfs`,`forgetSidecarConsistency`,[])}async function st(e){for(let t of e)await Se(t.mount),await t.flushBuffers(t.rootHandle)}async function ct(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 lt=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`]),ut={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 dt(e,t){let n=ut[t]??``;return Error(`require('${e}'): '${t}' is a Node native module (C++ bindings) — it cannot run in the browser sandbox.${n}`)}const q=new Map,J=new Map;function ft(e){let t=crypto.randomUUID();return q.set(t,e),t}function Y(e){return q.get(e)??null}function pt(e,t){if(!q.has(e))return t.abort(),()=>{};let n=J.get(e);return n||(n=new Set,J.set(e,n)),n.add(t),()=>{let n=J.get(e);n&&(n.delete(t),n.size===0&&J.delete(e))}}function mt(e){q.delete(e);let t=J.get(e);if(t){J.delete(e);for(let e of t)e.signal.aborted||e.abort()}}function X(e){let t=e instanceof Error?e.message:String(e),n=e?.code;return typeof n==`string`&&/^E[A-Z]+$/.test(n)?{ok:!1,errno:n,message:t}:{ok:!1,errno:`EIO`,message:t}}async function ht(e){let t=Y(e.token);if(!t)return{ok:!1,errno:`EACCES`,message:`sync-fs: unknown or revoked token`};let{fs:n,cwd:r}=t;try{let t=n.resolvePath(r,e.path);switch(e.op){case`read`:return{ok:!0,kind:`bytes`,bytes:await n.readFileBuffer(t)};case`write`:return await n.writeFile(t,e.body??new Uint8Array),{ok:!0,kind:`void`};case`exists`:return{ok:!0,kind:`json`,json:await n.exists(t)};case`stat`:{let e=await n.stat(t);return{ok:!0,kind:`json`,json:{isDirectory:e.isDirectory,isFile:e.isFile,isSymbolicLink:e.isSymbolicLink,size:e.size}}}case`lstat`:{let e=await n.lstat(t);return{ok:!0,kind:`json`,json:{isDirectory:e.isDirectory,isFile:e.isFile,isSymbolicLink:e.isSymbolicLink??!1,size:e.size}}}case`readdir`:return{ok:!0,kind:`json`,json:await n.readdir(t)};case`mkdir`:return await n.mkdir(t,{recursive:!0}),{ok:!0,kind:`void`};case`rm`:return await n.rm(t,{recursive:!0}),{ok:!0,kind:`void`};case`rename`:{let i=n.resolvePath(r,e.arg2??``),{renameViaFs:a}=await import(`./rename-via-fs-ckVY1Ljv.js`);return await a(n,t,i),{ok:!0,kind:`void`}}default:return{ok:!1,errno:`EINVAL`,message:`sync-fs: unknown op '${e.op}'`}}}catch(e){return X(e)}}function gt(e){return`slicc-sync-fs-`+e}const _t=`/__slicc/fs-sync`,vt=`/__slicc/exec-sync`,yt=`x-slicc-fs-token`,bt=`x-slicc-fs-errno`,xt=`x-slicc-fs`,St=`sync-fs-req`,Ct=`sync-fs-ack`,wt=`sync-fs-res`,Tt=25e3,Et=12e4,Z=6e5,Dt=5e3,Q=`exec`;function Ot(e){return e.channel===Q}function kt(e){let{command:t}=e;if(Array.isArray(t)){if(t.length===0||!t.every(e=>typeof e==`string`))return{errno:`EINVAL`,message:`sync-exec: argv must be a non-empty string[]`};let[e,...n]=t;return{cmd:e,args:n}}return typeof t!=`string`||t.length===0?{errno:`EINVAL`,message:`sync-exec: command must be a non-empty string`}:e.args===void 0?{cmd:t}:!Array.isArray(e.args)||!e.args.every(e=>typeof e==`string`)?{errno:`EINVAL`,message:`sync-exec: args must be a string[]`}:{cmd:t,args:e.args}}async function $(e,t,n){if(n===void 0)return{cwd:t};if(typeof n!=`string`)return{errno:`EINVAL`,message:`sync-exec: cwd must be a string`};if(n.length===0)return{errno:`ENOENT`,message:`sync-exec: cwd is empty`};let r=e.resolvePath(t,n);try{if(!(await e.stat(r)).isDirectory)return{errno:`ENOTDIR`,message:`sync-exec: cwd is not a directory: ${r}`}}catch(e){let t=e?.code;return t===`EACCES`||t===`EPERM`?{errno:t,message:`sync-exec: cwd not accessible: ${r}`}:{errno:`ENOENT`,message:`sync-exec: cwd does not exist: ${r}`}}return{cwd:r}}function At(e){if(e===void 0)return;if(typeof e!=`object`||!e||Array.isArray(e))return{errno:`EINVAL`,message:`sync-exec: env must be an object`};let t={};for(let[n,r]of Object.entries(e))if(r!==void 0){if(typeof r!=`string`)return{errno:`EINVAL`,message:`sync-exec: env[${n}] must be a string`};t[n]=r}return{ok:!0,env:t}}function jt(e,t){return Math.min(typeof e!=`number`||!Number.isFinite(e)||e<=0?t:e,Z)}async function Mt(e){let t=Y(e.token);if(!t)return{ok:!1,errno:`EACCES`,message:`sync-exec: unknown or revoked token`};if(!t.exec)return{ok:!1,errno:`ENOSYS`,message:`sync-exec: exec is not available`};let n=kt(e);if(`errno`in n)return{ok:!1,errno:n.errno,message:n.message};let r=await $(t.fs,t.cwd,e.cwd);if(`errno`in r)return{ok:!1,errno:r.errno,message:r.message};let i=At(e.env);if(i!==void 0&&`errno`in i)return{ok:!1,errno:i.errno,message:i.message};let a=new AbortController,o=!1,s=setTimeout(()=>{o=!0,a.abort()},jt(e.timeoutMs,Z)),c=pt(e.token,a);try{let o=await t.exec(n.cmd,{cwd:r.cwd,signal:a.signal,...n.args===void 0?{}:{args:n.args},...e.stdin===void 0?{}:{stdin:e.stdin},...i===void 0?{}:{env:i.env,replaceEnv:!0}});return{ok:!0,kind:`json`,json:{stdout:o.stdout,stderr:o.stderr,exitCode:o.exitCode}}}catch(e){return o?{ok:!1,errno:`ETIMEDOUT`,message:`sync-exec: timed out — ${e instanceof Error?e.message:String(e)}`}:a.signal.aborted?{ok:!1,errno:`ECANCELED`,message:`sync-exec: realm disposed`}:X(e)}finally{clearTimeout(s),c()}}const Nt=1048576,Pt=`sync-sab-req`,Ft=`sync-sab-next`,It=new TextEncoder,Lt=new TextDecoder;function Rt(e){if(!e.ok)return{status:4,payload:It.encode(JSON.stringify({errno:e.errno,message:e.message}))};switch(e.kind){case`bytes`:return{status:1,payload:e.bytes};case`json`:return{status:2,payload:It.encode(JSON.stringify(e.json))};default:return{status:3,payload:new Uint8Array}}}function zt(e,t){switch(e){case 1:return{ok:!0,kind:`bytes`,bytes:t};case 3:return{ok:!0,kind:`void`};case 2:try{return{ok:!0,kind:`json`,json:JSON.parse(Lt.decode(t))}}catch{return{ok:!1,errno:`EIO`,message:`sync-sab: malformed json payload`}}case 4:try{let e=JSON.parse(Lt.decode(t)),n=typeof e.errno==`string`&&/^E[A-Z]+$/.test(e.errno)?e.errno:`EIO`;return{ok:!1,errno:n,message:String(e.message??n)}}catch{return{ok:!1,errno:`EIO`,message:`sync-sab: malformed errno payload`}}default:return{ok:!1,errno:`EIO`,message:`sync-sab: unknown status ${e}`}}}function Bt(e){if(e.byteLength<4160)throw Error(`sync-sab: buffer too small (${e.byteLength} < 4160)`);return{header:new Int32Array(e,0,16),window:new Uint8Array(e,64)}}function Vt(){if(typeof SharedArrayBuffer>`u`||typeof Atomics>`u`)return!1;let e=globalThis.crossOriginIsolated;return e===void 0||e===!0}export{mt as A,C as B,wt as C,ht as D,gt as E,R as F,he as G,h as H,ze as I,pe as J,_ as K,Fe as L,dt as M,B as N,ft as O,z as P,L as R,St as S,yt as T,ne as U,w as V,me as W,s as X,d as Y,o as Z,Dt as _,Rt as a,xt as b,Q as c,Ot as d,At as f,vt as g,Z as h,zt as i,lt as j,Y as k,jt as l,Et as m,Ft as n,Vt as o,$ as p,fe as q,Pt as r,Bt as s,Nt as t,Mt as u,Ct as v,_t as w,Tt as x,bt as y,v as z};
@@ -1 +0,0 @@
1
- import{t as e}from"./slicc-app-url-BKHBBuTR.js";import{a as t,i as n,n as r}from"./scale-D09IlqOK.js";var i=Uint8Array.of(255,216,255,192,0,11,8,0,1,0,1,1,1,17,0,255,217),a=new Set([192,193,194,195,197,198,199,201,202,203,205,206,207]);function o(e){return e===1||e===216||e>=208&&e<=215}function s(e){if(e.length<4||e[0]!==255||e[1]!==216)return null;let t=2;for(;t+3<e.length;){if(e[t]!==255)return null;let n=e[t+1];for(;n===255&&t+2<e.length;)t+=1,n=e[t+1];if(o(n)){t+=2;continue}if(n===217||n===218)return null;let r=e[t+2]<<8|e[t+3];if(r<2)return null;if(a.has(n)){if(t+8>=e.length)return null;let n=e[t+5]<<8|e[t+6],r=e[t+7]<<8|e[t+8];return r>0&&n>0?{width:r,height:n}:null}t+=2+r}return null}function c(e){if(e.length<24||e[0]!==137||e[1]!==80||e[2]!==78||e[3]!==71)return null;let t=e[16]<<24|e[17]<<16|e[18]<<8|e[19],n=e[20]<<24|e[21]<<16|e[22]<<8|e[23];return t>0&&n>0?{width:t,height:n}:null}async function l(e,t=.7){if(s(e))return e;if(typeof OffscreenCanvas>`u`||typeof createImageBitmap>`u`)return i.slice();let n=new Blob([new Uint8Array(e)],{type:`image/png`}),r=await createImageBitmap(n),a=new OffscreenCanvas(r.width,r.height),o=a.getContext(`2d`);if(!o)throw Error(`could not acquire 2d canvas context`);o.drawImage(r,0,0),r.close();let c=await a.convertToBlob({type:`image/jpeg`,quality:t});return new Uint8Array(await c.arrayBuffer())}function u(e){let t=e.indexOf(`,`),n=t>=0?e.slice(t+1):e,r=atob(n),i=new Uint8Array(r.length);for(let e=0;e<r.length;e++)i[e]=r.charCodeAt(e);return i}function d(e){let t=``,n=32768;for(let r=0;r<e.length;r+=n)t+=String.fromCharCode(...e.subarray(r,r+n));return btoa(t)}function f(e={x:0,y:0}){return{x:e.x,y:e.y}}function p(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}}var m={1:`left`,2:`middle`,3:`right`};function h(t){if(e(t.url))throw Error(`refusing SLICC app tab '${t.title??t.url}'`)}async function g(e,t){let n=u(await e.screenshot({format:`png`})),r=c(n)??s(n),i=n;t.maxWidth&&r&&r.width>t.maxWidth?i=u(await e.screenshot({format:`png`,maxWidth:t.maxWidth})):t.format!==`png`&&(i=u(await e.screenshot({format:`jpeg`,quality:70})));let a=c(i)??s(i)??r??{width:0,height:0};return t.format!==`png`&&!s(i)&&(i=await l(i)),{mime:s(i)?`image/jpeg`:`image/png`,bytes:i,width:a.width,height:a.height,native:r}}async function _(e,t,n=f(),r){let i=r??await T(e);switch(t.type){case`mousemove`:{let r=w(n,t,i);await e.send(`Input.dispatchMouseEvent`,{type:`mouseMoved`,x:r.x,y:r.y});return}case`button`:await v(e,t,n,i);return;case`click`:await y(e,t,n,i);return;case`drag`:await b(e,t,n,i);return;case`scroll`:{let r=w(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 x(e,t);return;case`text`:await e.send(`Input.insertText`,{text:t.text});return;case`wait`:await D(Math.max(0,t.ms));return}}async function v(e,t,n,r){let i=w(n,t,r);await e.send(`Input.dispatchMouseEvent`,{type:t.down?`mousePressed`:`mouseReleased`,x:i.x,y:i.y,button:m[t.button],clickCount:1})}async function y(e,t,n,r){let i=w(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:m[t.button],clickCount:n}),t.holdMs&&t.holdMs>0&&await D(t.holdMs),await e.send(`Input.dispatchMouseEvent`,{type:`mouseReleased`,x:i.x,y:i.y,button:m[t.button],clickCount:n})}async function b(e,t,n,r){await _(e,{type:`mousemove`,x:t.x1,y:t.y1},n,r),await _(e,{type:`button`,button:1,down:!0,x:t.x1,y:t.y1},n,r),await _(e,{type:`mousemove`,x:t.x2,y:t.y2},n,r),await _(e,{type:`button`,button:1,down:!1,x:t.x2,y:t.y2},n,r)}async function x(e,r){let i=n(r.keysym);if(!i)throw Error(`unknown keysym '${r.keysym}'`);for(let n of t(i,r.down))await e.send(`Input.dispatchKeyEvent`,{type:n.type,key:n.key,code:n.code,modifiers:n.modifiers,...n.text===void 0?{}:{text:n.text}})}async function S(e,t,n){let r=await E(e,t)??{title:t,url:``};return h(r),e.withTab(t,async e=>{let t=await g(e,{format:n.format===`png`?`png`:`jpeg`,maxWidth:n.maxWidth});return{mime:t.mime,base64:d(t.bytes),width:t.width,height:t.height,...t.native?{nativeWidth:t.native.width,nativeHeight:t.native.height}:{},title:r.title,url:r.url}})}async function C(e,t,n){h(await E(e,t)??{title:t,url:``});let r=f();await e.withTab(t,async e=>{let t=await T(e);for(let i of n)await _(e,i,r,t)})}function w(e,t,n){let i=p(e,t);return r(i.x,i.y,n)}async function T(e){try{let t=await e.evaluate(`window.devicePixelRatio`);return typeof t==`number`&&Number.isFinite(t)&&t>0?t:1}catch{return 1}}async function E(e,t){let n=(await e.listAllTargets()).find(e=>e.targetId===t);return n?{title:n.title,url:n.url}:null}function D(e){return new Promise(t=>setTimeout(t,e))}export{C as inputTab,S as screenshotTab};
@@ -1,13 +0,0 @@
1
- const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/wc-shell-CrMn8BW0.js","assets/rolldown-runtime-Dd_uD5pT.js","assets/preload-helper-Czpn1I53.js","assets/logger-DDBAeTLF.js","assets/mime-types-D0xZwlMO.js","assets/base64-ELzoYfwP.js","assets/bridge-protocol-C52CnDIj.js","assets/account-store-SI8RQbm0.js","assets/core-zz8rWM4c.js","assets/compat-qQM4gjF_.js","assets/models-BSkXF4T6.js","assets/diagnostics-DN_idNHx.js","assets/provider-env-CTOcDKrQ.js","assets/__vite-browser-external-5eBdwsFd.js","assets/openrouter.models-B-zmcypy.js","assets/libesm-BypnjKEL.js","assets/proxied-fetch-W1rZTqEQ.js","assets/fetch-body-1l9I58Vk.js","assets/api-endpoint-DuEQRZ4g.js","assets/runtime-env-Dlaokqg1.js","assets/secret-topology-fyLSbV8r.js","assets/float-topology-U8FF9pgZ.js","assets/secrets-bridge-client-9RRVsrGm.js","assets/port-bridge-client-BYQawsDH.js","assets/image-markers-q8JQTtid.js","assets/tool-ui-eSQ1g2I1.js","assets/providers-B9p2VR5L.js","assets/panel-rpc-B3MSVImO.js","assets/bedrock-camp-compat-BeCSBUrZ.js","assets/claude-model-version-DZmbk9E2.js","assets/telemetry-CKoAhRMv.js","assets/types-D8gIX-W-.js","assets/same-file-identity-DuEcSmPX.js","assets/icons-jrIi5FYk.js","assets/wc-shell-WkeczD9x.css","assets/wc-secret-request-C9iCWgBV.js","assets/secret-request-registry-DrOMKR1H.js"])))=>i.map(i=>d[i]);
2
- import{t as e}from"./preload-helper-Czpn1I53.js";import{r as t,t as n}from"./base64-ELzoYfwP.js";import{t as r}from"./permissions-surface-registry-CilCRwhh.js";var i=8,a=2e3,o=[`/workspace`,`/shared`,`/tmp`],s=8,c=new Set([`node_modules`,`.git`]),l=1e4,u=/\.(png|jpe?g|gif|webp|svg|avif)$/i,d=4194304,f=262144;function p(){return`att-${Date.now()}-${Math.random().toString(36).slice(2,8)}`}function m(e){return{png:`image/png`,jpg:`image/jpeg`,jpeg:`image/jpeg`,gif:`image/gif`,webp:`image/webp`,svg:`image/svg+xml`,avif:`image/avif`,md:`text/markdown`,json:`application/json`}[e.toLowerCase().split(`.`).pop()??``]??`text/plain`}function h(e,n){let r={id:p(),name:e,size:n.length};if(u.test(e))return n.length>d?{...r,mimeType:m(e),kind:`image`,error:`image too large to inline`}:{...r,mimeType:m(e),kind:`image`,data:t(n)};let i={...r,mimeType:m(e),kind:`file`};return n.length>f?{...i,error:`file too large to inline`}:i}async function g(e){let t=new Uint8Array(await e.arrayBuffer()),n=h(e.name,t);return e.type?{...n,mimeType:e.type}:n}function _(e,t){let n=t.match(/^data:(image\/[^;]+);base64,(.+)$/);return n?{id:p(),name:e,mimeType:n[1],size:Math.floor(n[2].length*3/4),kind:`image`,data:n[2]}:null}var v=`/tmp/upload`,y=1568;async function b(e,t,n){await e.mkdir(v,{recursive:!0}).catch(()=>void 0);let r=`${v}/${Date.now()}-${t.replace(/[^A-Za-z0-9._-]+/g,`_`)}`;return await e.writeFile(r,n),r}async function x(e,t=y){let n=new Image;n.src=e;try{await n.decode()}catch{return e}let r=Math.min(1,t/Math.max(n.naturalWidth,n.naturalHeight,1));if(r>=1)return e;let i=document.createElement(`canvas`);return i.width=Math.round(n.naturalWidth*r),i.height=Math.round(n.naturalHeight*r),i.getContext(`2d`)?.drawImage(n,0,0,i.width,i.height),i.toDataURL(`image/jpeg`,.85)}async function S(e,t,r){let i=_(e,t);if(!i)return null;let a;return r&&i.data&&(a=await b(r,e,n(i.data)).catch(()=>void 0)),{..._(e,await x(t).catch(()=>t))??i,name:e,path:a}}async function C(e,t,n){if(!n)return null;let r=new Uint8Array(await t.arrayBuffer()),i=await b(n,e,r).catch(()=>void 0);return i?{id:p(),name:e,mimeType:t.type||`video/webm`,size:r.length,kind:`file`,path:i}:null}async function w(e){let t=[],n=o.map(e=>({dir:e,depth:0}));for(;n.length>0&&t.length<a;){let{dir:r,depth:i}=n.shift(),o;try{o=await e.readDir(r)}catch{continue}for(let e of o){let o=`${r}/${e.name}`;if(e.type===`directory`)i<s&&!c.has(e.name)&&n.push({dir:o,depth:i+1});else if(t.push(o),t.length>=a)break}}return t}function T(e){let t=null;return async n=>{let r=await e.openReader();(!t||Date.now()-t.at>l)&&(t={at:Date.now(),paths:await w(r)});let a=e=>n===``||e.toLowerCase().includes(n),o=t.paths.filter(e=>a(e)).slice(0,i).map(e=>({id:e,label:e.split(`/`).pop()??e,sub:e.slice(0,e.lastIndexOf(`/`))})),s=[];try{s=(await r.readDir(`/workspace/skills`)).filter(e=>e.type===`directory`&&a(e.name)).slice(0,i).map(e=>({id:e.name,label:e.name}))}catch{}let c=(await e.listConversations().catch(()=>[])).filter(e=>a(e.label)).slice(0,i);return[{kind:`file`,label:`Files`,icon:`file`,entries:o},{kind:`skill`,label:`Skills`,icon:`sparkles`,entries:s},{kind:`conversation`,label:`Conversations`,icon:`message-square`,entries:c}]}}var E=`slicc-wc-attach-style`,D=`
3
- .wcatt{display:flex;flex-wrap:wrap;gap:6px;padding:8px 10px 0;font-family:var(--ui);}
4
- .wcatt:empty{display:none;}
5
- .wcatt__chip{display:inline-flex;align-items:center;gap:6px;font-size:11px;color:var(--ink);
6
- background:var(--ghost);border:1px solid var(--line);border-radius:14px;padding:3px 8px;max-width:220px;}
7
- .wcatt__thumb{width:28px;height:28px;object-fit:cover;border-radius:8px;cursor:zoom-in;
8
- border:1px solid var(--line);flex:0 0 auto;}
9
- .wcatt__name{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;}
10
- .wcatt__x{appearance:none;background:none;border:none;cursor:pointer;color:var(--txt-3);
11
- font:inherit;padding:0;line-height:1;}
12
- .wcatt__x:hover{color:var(--ink);}
13
- `,O=class{#e;#t=[];constructor(e){if(!document.getElementById(E)){let e=document.createElement(`style`);e.id=E,e.textContent=D,document.head.appendChild(e)}this.#e=document.createElement(`div`),this.#e.className=`wcatt`,e.prepend(this.#e)}get items(){return this.#t}add(e){this.#t.push(e),this.#n()}take(){let e=this.#t;return this.#t=[],this.#n(),e}#n(){this.#e.replaceChildren(...this.#t.map(e=>this.#r(e)))}#r(t){let n=document.createElement(`span`);if(n.className=`wcatt__chip`,t.kind===`image`&&t.data){let r=document.createElement(`img`);r.className=`wcatt__thumb`,r.src=`data:${t.mimeType};base64,${t.data}`,r.alt=t.name,r.addEventListener(`click`,()=>{e(async()=>{let{SliccImagePreview:e}=await import(`./wc-shell-CrMn8BW0.js`).then(e=>e.j);return{SliccImagePreview:e}},__vite__mapDeps([0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34])).then(({SliccImagePreview:e})=>e.show(r.src,r))}),n.append(r)}let r=document.createElement(`span`);r.className=`wcatt__name`,r.textContent=t.name;let i=document.createElement(`button`);return i.type=`button`,i.className=`wcatt__x`,i.setAttribute(`aria-label`,`Remove ${t.name}`),i.textContent=`×`,i.addEventListener(`click`,()=>{this.#t=this.#t.filter(e=>e.id!==t.id),this.#n()}),n.append(r,i),n}};async function k(e){let t=document.createElement(`video`);t.srcObject=e,t.muted=!0;try{await t.play(),await new Promise(e=>requestAnimationFrame(()=>e(null)));let e=document.createElement(`canvas`);return e.width=t.videoWidth,e.height=t.videoHeight,e.width===0||e.height===0?null:(e.getContext(`2d`)?.drawImage(t,0,0),e.toDataURL(`image/png`))}finally{for(let t of e.getTracks())t.stop();t.srcObject=null}}async function A(){let e=r();if(e){let t=await e.request(`screenshare`,{constraints:{video:!0}});if(!t)return null;let n=t.stream;return k(n)}return k(await navigator.mediaDevices.getDisplayMedia({video:!0}))}async function j(e,t){let n=r();if(!n)return null;let i=await n.prompt({kinds:e,description:t,skipIfGranted:!0});for(let e of i.grants)if(e.kind===`camera`||e.kind===`microphone`||e.kind===`screenshare`)for(let t of e.stream.getTracks())t.stop();return i.status===`granted`}var M=`slicc_camera_device`,N=`slicc_microphone_device`,P=[`position:absolute`,`left:50%`,`right:auto`,`transform:translateX(-50%)`,`bottom:56px`,`width:calc(100% - 32px)`,`max-width:680px`,`z-index:3`].join(`;`);async function F(e,t){if(await j([`camera`,`microphone`],`Slicc is requesting access to your camera and microphone to capture a photo or video for this conversation.`)===!1)return null;let n=document.createElement(`slicc-composer-capture`),r=localStorage.getItem(M);r&&n.setAttribute(`preferred-device`,r);let i=localStorage.getItem(N);i&&n.setAttribute(`preferred-audio-device`,i),n.style.cssText=P,n.hidden=!0,n.addEventListener(`slicc-capture-device-change`,e=>{let t=e.detail;if(!t?.deviceId)return;let n=t.kind===`microphone`?N:M;localStorage.setItem(n,t.deviceId)}),e.append(n);try{return await n.open(t)}finally{n.remove()}}async function I(e,t,n){if(!e.dataUrl)return;let r=`photo-${Date.now()}.png`,i=await t.openWriter?.().catch(()=>null)??null,a=await S(r,e.dataUrl,i);a&&n.add(a)}async function L(e,t,n){if(!e.blob)return;let r=/webm/i.test(e.mimeType)?`webm`:`bin`,i=`video-${Date.now()}.${r}`,a=await t.openWriter?.().catch(()=>null)??null,o=await C(i,e.blob,a);o&&n.add(o)}async function R(e,t,n){if(e.mode===`photo`){if(!t.composer){let e=await z();if(!e)return;let r=await S(`photo-${Date.now()}.png`,e,await t.openWriter?.().catch(()=>null)??null);r&&n.add(r);return}let e=await F(t.composer,`photo`);if(!e)return;e.kind===`image`?await I(e,t,n):e.kind===`video`&&await L(e,t,n);return}let r=await A();if(!r)return;let i=await S(`screenshot-${Date.now()}.png`,r,await t.openWriter?.().catch(()=>null)??null);i&&n.add(i)}async function z(){if(await j([`camera`],`Slicc is requesting access to your camera to capture a photo for this conversation.`)===!1)return null;let e=document.createElement(`slicc-camera-dialog`),t=localStorage.getItem(M);t&&e.setAttribute(`preferred-device`,t),e.addEventListener(`slicc-camera-device-change`,e=>{let t=e.detail?.deviceId;t&&localStorage.setItem(M,t)}),document.body.append(e);try{return await e.open()}finally{e.remove()}}async function B(e,t,n){let r=await n.openWriter?.().catch(()=>null)??null,i=r?await b(r,e.name,t).catch(()=>void 0):void 0;return i?{...e,error:void 0,path:i}:e.kind===`image`?e:{...e,error:`could not be saved to the virtual filesystem`}}async function V(e,t,n){let r=await(await t()).readFile(e,{encoding:`binary`});return typeof r==`string`?(n.error(`VFS image pick returned text, not bytes — skipping the inline copy`,e),null):r}async function H(e,t,n){let r=0;try{r=(await(await n()).stat(e)).size}catch{}return{id:p(),name:t,mimeType:m(t),size:r,kind:`file`,path:e}}async function U(e,t,n,r){let i=e.split(`/`).pop()??e;if(u.test(i)){let a=await V(e,t,r);if(a){let t=h(i,a);n.add({...t,error:void 0,path:e});return}}n.add(await H(e,i,t))}function W(e,t){let n=t.value??t.getAttribute(`value`)??``,r=n&&!n.endsWith(` `)?` `:``;t.setAttribute(`value`,`${n}${r}${e}`)}function G(e,t){W(`Use the "${e}" skill: `,t)}async function K(t){let{requestSecretFromUser:n}=await e(async()=>{let{requestSecretFromUser:e}=await import(`./wc-secret-request-C9iCWgBV.js`);return{requestSecretFromUser:e}},__vite__mapDeps([35,3,0,1,2,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,36])),r=await n();if(!r.stored)return;let i=r.domains.join(`, `),a=r.persisted?`saved`:`this session only`;W(r.maskedValue?`I stored the secret ${r.name} (masked value ${r.maskedValue}, scope: ${i}, ${a}). Use the masked value — SLICC swaps in the real one at the network boundary. `:`I stored the secret ${r.name} (scope: ${i}, ${a}). Run \`secret get ${r.name}\` for its masked value. `,t.inputCard)}function q(e){return e?.name===`NotAllowedError`}async function J(e,t,n){if(e.kind===`upload`&&e.file instanceof File){let r=new Uint8Array(await e.file.arrayBuffer());n.add(await B(await g(e.file),r,t))}else e.kind===`capture`?await R(e,t,n):e.kind===`file`&&typeof e.id==`string`&&t.openReader?await U(e.id,t.openReader,n,t.log):e.kind===`secret`?await K(t):e.kind===`skill`&&typeof e.label==`string`?G(e.label,t.inputCard):e.kind===`conversation`&&typeof e.id==`string`&&t.freezer.dispatchEvent(new CustomEvent(`freezer-card-select`,{bubbles:!0,composed:!0,detail:{slug:e.id}}))}function Y(e){let{inputCard:t,log:n}=e,r=new O(t),i=t.querySelector(`slicc-add-menu`);return i&&(e.openReader?i.provider=T({openReader:e.openReader,listConversations:e.listConversations??(async()=>[])}):i.results=[],i.setAttribute(`global-drop`,``),e.noCamera&&i.setAttribute(`no-camera`,``),e.secretEntry&&i.setAttribute(`secret-action`,``)),t.addEventListener(`slicc-add`,t=>{let i=t.detail;i&&J(i,e,r).catch(e=>{q(e)||n.error(`WC add-menu action failed`,e)})}),t.addEventListener(`paste`,t=>{let i=t.clipboardData?.items;if(i)for(let a of Array.from(i)){if(!a.type.startsWith(`image/`))continue;let i=a.getAsFile();if(!i)continue;t.preventDefault();let o=(i.type.split(`/`)[1]||`png`).replace(/[^a-z0-9]/gi,``)||`png`,s=i.name?i:new File([i],`pasted-image.${o}`,{type:i.type});J({kind:`upload`,name:s.name,size:s.size,file:s},e,r).catch(e=>n.error(`Paste image failed`,e))}}),r}export{Y as wireWcAttach};
@@ -1,17 +0,0 @@
1
- const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/wc-shell-CrMn8BW0.js","assets/rolldown-runtime-Dd_uD5pT.js","assets/preload-helper-Czpn1I53.js","assets/logger-DDBAeTLF.js","assets/mime-types-D0xZwlMO.js","assets/base64-ELzoYfwP.js","assets/bridge-protocol-C52CnDIj.js","assets/account-store-SI8RQbm0.js","assets/core-zz8rWM4c.js","assets/compat-qQM4gjF_.js","assets/models-BSkXF4T6.js","assets/diagnostics-DN_idNHx.js","assets/provider-env-CTOcDKrQ.js","assets/__vite-browser-external-5eBdwsFd.js","assets/openrouter.models-B-zmcypy.js","assets/libesm-BypnjKEL.js","assets/proxied-fetch-W1rZTqEQ.js","assets/fetch-body-1l9I58Vk.js","assets/api-endpoint-DuEQRZ4g.js","assets/runtime-env-Dlaokqg1.js","assets/secret-topology-fyLSbV8r.js","assets/float-topology-U8FF9pgZ.js","assets/secrets-bridge-client-9RRVsrGm.js","assets/port-bridge-client-BYQawsDH.js","assets/image-markers-q8JQTtid.js","assets/tool-ui-eSQ1g2I1.js","assets/providers-B9p2VR5L.js","assets/panel-rpc-B3MSVImO.js","assets/bedrock-camp-compat-BeCSBUrZ.js","assets/claude-model-version-DZmbk9E2.js","assets/telemetry-CKoAhRMv.js","assets/types-D8gIX-W-.js","assets/same-file-identity-DuEcSmPX.js","assets/icons-jrIi5FYk.js","assets/wc-shell-WkeczD9x.css","assets/panelize-shell-Dg_58ImI.js","assets/virtual-device-paths-D45tpPP6.js","assets/layout-apply-registry-Cw730jao.js","assets/wc-live-CaopRwn0.js","assets/sprinkle-renderer-DYUy10CO.js","assets/hid-device-registry-B2R-0rNt.js","assets/serial-port-registry-CCqklAEr.js","assets/hid-operations-C97SZtrY.js","assets/usb-device-registry--JwKRTYp.js","assets/usb-operations-v1mGAdRY.js","assets/shared-mBEktoxE.js","assets/theme-CwPIBqJE.js","assets/theme-engine-ZV7CeqWw.js","assets/slugify-BYJ6QVAt.js","assets/transcript-export-DP-r8eDz.js","assets/session-jsonl-lB9-7rZS.js","assets/tray-follower-status-BAjnN7Ar.js","assets/main-DFTTAllP.js","assets/modulepreload-polyfill-P2Xu9kJm.js","assets/clipboard-eqmn97SP.js","assets/src-BWaKqLvQ.js","assets/provider-budget-LCzMPlKv.js","assets/permissions-surface-registry-CilCRwhh.js","assets/browser-DGwroBSO.js","assets/tray-leader-Bd293BI8.js","assets/record-CCQFJXn_.js","assets/descriptor-DzbI9z_9.js","assets/types-CFfBWsH5.js","assets/wc-unit-context-CS4hSDi7.js","assets/legacy-styles-B3nS5QUo.js","assets/follower-navigate-watcher-B9be6j6U.js","assets/navigation-watcher-CPcnZL9l.js","assets/discovery-preference-pvxthSOH.js","assets/wc-transcript-export-eyG-SwVe.js","assets/export-spool-CuNzzI8a.js"])))=>i.map(i=>d[i]);
2
- import{t as e}from"./preload-helper-Czpn1I53.js";import{t}from"./logger-DDBAeTLF.js";import{n}from"./transcript-export-DP-r8eDz.js";import{a as r,c as i,n as a,t as o,v as s,y as c}from"./wc-follower-oauth-BU-XAftl.js";import{a as ee,t as te}from"./tray-follower-status-BAjnN7Ar.js";import{C as ne,D as l,E as u,N as d,j as f,s as re,w as p,x as ie}from"./main-DFTTAllP.js";import{m as ae,r as oe,x as se}from"./wc-live-CaopRwn0.js";import{n as ce}from"./theme-engine-ZV7CeqWw.js";import{o as le,p as ue,s as de}from"./wc-unit-context-CS4hSDi7.js";import{WcSprinkleZone as fe}from"./wc-sprinkles-CBaPR_V8.js";import{wireWcAttach as pe}from"./wc-attach-CtVWDKPk.js";import{installLeaderPermissionsSurface as me}from"./wc-permissions-C63-jLbY.js";var m=t(`follower-switch-out`);function he(e,t){t.stopFollower();try{t.storage.removeItem(u),e.workerBaseUrl===null?t.storage.removeItem(l):t.storage.setItem(l,e.workerBaseUrl)}catch(e){m.error(`follower switch-out: storage write failed — state may revert on reload`,{error:e instanceof Error?e.message:String(e)})}try{let e=t.getHref(),n=p(e);n!==e&&t.replaceHref(n)}catch(e){m.error(`follower switch-out: URL normalize failed — may re-enter follower on reload`,{error:e instanceof Error?e.message:String(e)})}t.reload()}var h=6;function ge(e){let{refs:t,getSync:n,getTargets:r,hasCdpBrowser:i,log:a}=e;if(t.overlaySurfaces.has(`browser`))return{overlay:document.createElement(`slicc-tab-overlay`),refresh:()=>{}};let o=document.createElement(`slicc-tab-overlay`);o.setAttribute(`heading`,`Browser · tabs in this tray`),o.setAttribute(`no-peek`,``),document.body.append(o);let s=()=>{o.tabs=r().map(e=>({id:e.targetId,title:e.title||e.url||e.targetId,url:e.url}))};return t.overlaySurfaces.add(`browser`),t.dock.addEventListener(`slicc-dock-select`,e=>{e.detail?.id===`browser`&&(s(),o.show(),t.dock.collapse?.())}),o.addEventListener(`tab-activate`,t=>{let r=t.detail.id,s=n(),c=s?.getLeaderProtocolVersion()??0;if(!(s&&i()&&c>=h)){let t=o.tabs.find(e=>e.id===r)?.url;if(!t){a.warn(`WC follower browser: no URL for tab`,{id:r});return}e.window.open(t,`_blank`,`noopener`)||a.warn(`WC follower browser: window.open was blocked`,{id:r}),o.hide();return}s.requestTabTeleport(r).then(e=>{a.info(`WC follower browser: leader teleported a tab here`,{source:r,targetId:e}),o.hide()}).catch(e=>{a.error(`WC follower browser: tab teleport failed`,e)})}),{overlay:o,refresh:s}}var g=new Set([`oauth-attempt`,`connect-attempt`,`device-code-decision`]);function _e(e){return g.has(e)}var _=`slicc-signin-redirect-style`,v=`wc-signin-redirect`,y=`${v}--welcome`,b=`
3
- .${v}{display:flex;gap:10px;align-items:flex-start;margin:10px 12px;padding:12px 14px;
4
- border:1px solid var(--line);border-radius:12px;background:var(--ghost);color:var(--ink);
5
- font-family:var(--ui);font-size:13px;line-height:1.4;}
6
- .${v}__body{flex:1;min-width:0;}
7
- .${v}__title{font-weight:600;margin-bottom:2px;}
8
- .${v}__sub{color:var(--txt-2);}
9
- .${v}__open{appearance:none;border:1px solid var(--line);border-radius:8px;cursor:pointer;
10
- background:var(--canvas);color:var(--ink);font:inherit;font-weight:600;padding:6px 12px;white-space:nowrap;}
11
- .${v}__open:hover{background:var(--ghost);}
12
- .${v}__x{appearance:none;background:none;border:none;cursor:pointer;color:var(--txt-3);
13
- font:inherit;font-size:16px;line-height:1;padding:0 2px;}
14
- .${v}__x:hover{color:var(--ink);}
15
- `;function x(e){if(e.getElementById(_))return;let t=e.createElement(`style`);t.id=_,t.textContent=b,e.head.appendChild(t)}function S(e,t){x(e);let n=e.createElement(`div`);n.className=v,n.setAttribute(`role`,`status`);let r=e.createElement(`div`);r.className=`${v}__body`;let i=e.createElement(`div`);i.className=`${v}__title`,i.textContent=t.title;let a=e.createElement(`div`);a.className=`${v}__sub`,a.textContent=t.sub,r.append(i,a);let o=e.createElement(`button`);if(o.type=`button`,o.className=`${v}__open`,o.textContent=t.buttonLabel,o.addEventListener(`click`,()=>t.onOpenTab()),n.append(r,o),t.dismissible){let t=e.createElement(`button`);t.type=`button`,t.className=`${v}__x`,t.setAttribute(`aria-label`,`Dismiss`),t.textContent=`×`,t.addEventListener(`click`,()=>n.remove()),n.append(t)}return n}function ve(e,t){let n=e.ownerDocument;t.onOpenTab();let r=e.querySelector(`.${v}`);if(r)return r.scrollIntoView?.({block:`nearest`}),r;let i=S(n,{title:`Sign in from the SLICC tab`,sub:`The side panel can't complete a provider login — we've switched you to the main SLICC tab. Finish signing in there (Settings › Providers), then come back.`,buttonLabel:`Open SLICC tab`,onOpenTab:t.onOpenTab,dismissible:!0});return e.append(i),i.scrollIntoView?.({block:`nearest`}),i}function ye(e,t){let n=S(e,{title:`Set up SLICC in the main tab`,sub:`SLICC needs a model connected before it can help. Open the main SLICC tab to finish setup and sign in, then come back to the side panel.`,buttonLabel:`Open SLICC tab`,onOpenTab:t.onOpenTab,dismissible:!1});return n.classList.add(y),n}var C=t(`wc-follower`),be=`/shared/sprinkles/welcome/`,xe=`/shared/sprinkles/suggestions/`;function Se(e){return e===void 0||e===`active`?{kind:`active`}:e.trim()===``?null:{kind:`frozen`,sessionId:e}}function Ce(e,t){for(;e.firstChild;)e.removeChild(e.firstChild);let n=document.createElement(`div`);n.style.cssText=`padding:2rem;text-align:center;font-family:system-ui;`;let r=document.createElement(`h1`);r.style.color=`var(--s2-negative, #e34850)`,r.textContent=`Could not start follower`;let i=document.createElement(`p`);i.style.color=`var(--s2-content-tertiary, #717171)`,i.textContent=t,n.append(r,i),e.appendChild(n)}function we(e,t,n,r,i){let a=e=>{let t=document.createElement(`div`);return t.className=`wcui-placeholder`,t.textContent=e,t};i.files?(e.style.display=`none`,e.parentElement?.append(a(`Files live on the leader. A follower mirrors the leader's chat, sprinkles, and browser tabs - not its filesystem.`))):e.closest(`slicc-surface`)?.remove(),i.terminal?t.append(a(`The shell runs on the leader. A follower has no local terminal - drive the session through chat.`)):t.closest(`slicc-surface`)?.remove(),i.memory?n.append(a(`Memory lives on the leader. A follower has no local memory store.`)):n.closest(`slicc-surface`)?.remove(),i.monitor?(r.style.display=`none`,r.parentElement?.append(a(`Monitor reads the leader's kernel state. A follower has no local kernel.`))):r.closest(`slicc-surface`)?.remove()}var w={terminal:!0,files:!0,memory:!0,browser:!0,modelPicker:!0,history:!0,nav:!0,monitor:!0,showTimestamps:!0};function Te(e){let t=[];for(let[n,r]of[[`terminal`,`term`],[`files`,`files`],[`memory`,`memory`],[`browser`,`browser`],[`monitor`,`monitor`]])e[n]||t.push(`slicc-dock-item[data-t="${r}"]`);if(e.modelPicker||t.push(`slicc-composer-meta`),e.history||t.push(`slicc-freezer`),e.nav||t.push(`slicc-nav`),!e.terminal&&!e.files&&!e.memory&&!e.browser&&!e.monitor&&t.push(`slicc-dock .div`,`slicc-dock .grow`),t.length||!e.history){let n=document.createElement(`style`),r=t.length?`${t.join(`,
16
- `)}{display:none!important;}`:``;e.history||(r+=`
17
- .wcui-appcol{padding-left:0!important;}`),n.textContent=r,document.head.append(n)}}function T(e,t){return e&&!t}async function E(t,n,r){let[{parseLayoutDocument:i},{panelizeShell:a}]=await Promise.all([e(()=>import(`./wc-shell-CrMn8BW0.js`).then(e=>e.R),__vite__mapDeps([0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34])),e(()=>import(`./panelize-shell-Dg_58ImI.js`),__vite__mapDeps([35,3,0,1,2,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,36,37]))]),o=i(n);if(`error`in o){r.warn(`follower: host-pushed layout failed validation — keeping the default`,{error:o.error});return}a(t.refs,o),r.info(`follower: applied host-pushed layout document`,{id:o.id,locked:o.locked===!0})}async function Ee(e,t,n){if(n&&t.cherryTransport?.flags)try{let e=JSON.parse(t.cherryTransport.flags);e&&typeof e==`object`&&!Array.isArray(e)&&f(e)}catch(e){C.warn(`follower: host-pushed flags were not valid JSON — ignoring`,e)}let r=d(`panel-layouts`);if(e.refs.dockTree.tilesMovable=r,n&&t.cherryTransport?.layout)try{let n=JSON.parse(t.cherryTransport.layout);n&&typeof n==`object`&&`base`in n?r?await E(e,n,C):C.warn(`follower: ignoring host-pushed layout — the panel-layouts flag is off`):e.refs.dockTree.setTree(n)}catch(e){C.warn(`follower: host-pushed layout was not valid JSON — keeping the default`,e)}}async function D(t,l,u){let f=u===`cherry`,p=f&&new URLSearchParams(window.location.search).get(`ui-only`)===`1`,m=window.location.ancestorOrigins?.[0],h=f&&(m?.startsWith(`chrome-extension://`)??!1),g;try{g=await re({runtimeMode:u,envBaseUrl:null,window,log:l})}catch(e){let n=e instanceof Error?e.message:String(e);C.error(`follower prelude failed`,{runtimeMode:u,error:n}),Ce(t,n);return}let _=f?g.cherryJoinUrl:ie(window.location.href,window.localStorage);if(!_){C.error(`follower mount with no join URL - falling back to live boot`);let{bootLeaderFloat:n}=await e(async()=>{let{bootLeaderFloat:e}=await import(`./wc-live-CaopRwn0.js`).then(e=>e.n);return{bootLeaderFloat:e}},__vite__mapDeps([38,1,8,9,10,11,2,12,13,14,15,3,16,5,17,18,19,20,21,22,23,24,25,0,4,6,7,26,27,28,29,30,31,32,33,34,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63]));return n(t,l,`standalone`)}let v=f?`cherry`:h?`extension`:`standalone`,b,x,S,E=new Set,D=null,O=null,k=()=>g.cherryTransport?.emitSliccEventToHost(`slicc.open-leader-tab`),A=()=>{h&&ve(b.refs.thread,{onOpenTab:k})},De=e=>{let t=e.querySelectorAll(`img[src^="${be}"]`);return t.length!==0&&(t.forEach((t,n)=>{n===0&&!j?t.replaceWith(ye(e.ownerDocument,{onOpenTab:k})):t.remove()}),!0)},j=!1,Oe=e=>{let t=e.querySelectorAll(`img[src^="${xe}"]`);if(t.length!==0){for(let e of t)e.remove();j=!0;for(let e of b.refs.thread.querySelectorAll(`.${y}`))e.remove()}},M=(await oe(t,l,{floatKind:v,connect:async t=>{b=t,f&&g.cherryTransport?.theme&&ce(g.cherryTransport.theme),await Ee(b,g,f);let n=f&&g.cherryTransport?.effortLevel;n?localStorage.setItem(`slicc_locked_effort_level`,n):localStorage.removeItem(`slicc_locked_effort_level`),x=f&&g.cherryTransport?{...w,...g.cherryTransport.features}:w,we(b.refs.fileTree,b.refs.termSurface,b.refs.memoryHost,b.refs.monitor,x),Te(x),e(async()=>{let{applyTimestampVisibility:e,initTimestampPreference:t}=await import(`./wc-shell-CrMn8BW0.js`).then(e=>e.X);return{applyTimestampVisibility:e,initTimestampPreference:t}},__vite__mapDeps([0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34])).then(({applyTimestampVisibility:e,initTimestampPreference:t})=>{x.showTimestamps?t():e(!1)}),e(async()=>{let{loadDipStyles:e,loadSprinkleStyles:t}=await import(`./legacy-styles-B3nS5QUo.js`);return{loadDipStyles:e,loadSprinkleStyles:t}},__vite__mapDeps([64,2])).then(({loadDipStyles:e,loadSprinkleStyles:t})=>Promise.all([e(),t()])).catch(()=>void 0),S=new a({getSync:()=>J?.currentSync??null});let r=se({getSync:()=>J?.currentSync??null,onAgentEvent:e=>(E.add(e),()=>E.delete(e)),onAgentError:e=>{C.warn(`follower send failed`,{error:e}),M.controller.addAssistantMessage(`_That message was not sent to the leader — ${e}_`)}}),i={...r,sendSprinkleLick:(e,t,n)=>{r.sendSprinkleLick(e,t,n);let i=t?.action;typeof i==`string`&&_e(i)&&A()},addressableUnitId:()=>B(),onMessageRendered:e=>{Oe(e),h&&De(e)},onSelectionApplied:()=>{U(V,H),O?.onShownUnitChanged()},onSnapshotRendered:e=>{M.controller.setProcessing(e.some(e=>e.isStreaming))},ownsModelPill:!0,takeAttachments:()=>W.take()};return{client:S,host:i}}})).chat,N=M.controller;if(h)for(let e of[`slicc-error-open-settings`,`slicc-error-login`,`slicc-error-change-model`])b.refs.thread.addEventListener(e,()=>A());let P=`Connecting to leader…`,F=`Ask the leader, or describe a change…`,I=null,L=()=>b.getSelected()?.id??I,R=e=>e&&e.length>0?e:null,z=!1,B=()=>z?R(L()??S.selectedUnitId):null,ke=()=>{let e=b.getSelected();return e?ue(e):!1},V=!1,H=P,U=(e,t)=>{V=e,H=t;let n=e&&B()!==null;b.refs.inputCard.setAttribute(`placeholder`,e&&!n?P:t),n&&!ke()?b.refs.inputCard.removeAttribute(`disabled`):b.refs.inputCard.setAttribute(`disabled`,``)};U(!1,P),ee(e=>{try{window.localStorage.setItem(s,JSON.stringify(e))}catch{}});try{window.localStorage.setItem(s,JSON.stringify(te()))}catch{}p||b.refs.composer.setAttribute(`ptt`,``);let W=pe({inputCard:b.refs.inputCard,freezer:b.refs.freezer,composer:b.refs.composer,noCamera:p,log:C}),G=new fe(b.refs).callbacks(),K=e=>{if(I=e,!e)return;let t=S.currentUnits().find(t=>t.id===e);if(!t){b.watchUnit(e),U(V,H);return}if(b.getSelected()?.id!==t.id){b.selectScoop(t);return}U(V,H)},q=()=>{z=!1,S.resetSelection()};b.refs.switcher.connection=`disconnected`;let J,Y=null,Ae=()=>(Y||=me({runtimeMode:u})?.element??null,Y),X=[],je=ge({refs:b.refs,getSync:()=>J.currentSync,getTargets:()=>X,hasCdpBrowser:()=>T(g.hasLocalCdpSurface,p),window,log:C});O=ae({composerMeta:b.refs.composerMeta,getUnits:()=>S.currentUnits(),setModel:(e,t)=>{S.setModel(e,t).catch(()=>void 0)},getSync:()=>J.currentSync,getSelectedScoopJid:()=>L(),modelPickerEnabled:x.modelPicker,getLockedEffortLevel:()=>localStorage.getItem(`slicc_locked_effort_level`)}),S.subscribeList(()=>O?.onShownUnitChanged()),J=r(S.wrapOptions({joinUrl:_,runtime:f?c:`slicc-standalone`,advertisesCdpTargets:T(g.hasLocalCdpSurface,p),onTargetsUpdated:e=>{X=e,je.refresh()},...f||p?{}:{onOAuthPopupRequest:(e,t)=>o(e,t,{getPermissionsSurface:Ae,window})},browserAPI:g.browser,onSnapshot:(e,t)=>{z=!0,K(R(t))},onUserMessage:(e,t,n,r)=>N.addUserMessage(e,r),onBiscottoMessageState:(e,t)=>{switch(t){case`pending`:N.addAssistantMessage(`_Sent for review — waiting for the host._`);break;case`rejected`:N.addAssistantMessage(`_The host did not forward that message._`);break;case`unanswered`:N.addAssistantMessage(`_No one reviewed that message in time, so it was not forwarded._`)}},onStatus:(e,t)=>{i(t,L())&&N.setProcessing(e===`processing`)},setChatAgent:e=>{D?.(),D=e.onEvent(e=>{for(let t of E)t(e)})},onSudoApprovalRequest:async t=>{let{openSudoApprovalDialog:n}=await e(async()=>{let{openSudoApprovalDialog:e}=await import(`./wc-sudo-approval-C51zuN6a.js`);return{openSudoApprovalDialog:e}},[]),r=f?g.cherryTransport?.hostOrigin:void 0;return{decision:(await n({kind:t.kind,detail:t.detail,...t.suggestedPattern?{suggestedPattern:t.suggestedPattern}:{},...t.reason?{reason:t.reason}:{}},{allowAlways:!1,signal:t.signal,expiresAt:t.expiresAt,requester:t.requester??t.scoopName??(r?`via ${r}`:void 0)})).decision,attestation:`none`}},onConnectionChange:e=>{b.refs.switcher.connection=e?`connected`:`disconnected`,e||q(),U(e,e?F:P),e||O?.reset(),f&&g.cherryTransport?.emitSliccEventToHost(e?`slicc.follower.ready`:`slicc.follower.disconnected`)},getSelectedScoopJid:()=>L(),onLeaderStalled:e=>{U(!e,e?`The leader is busy — hang on…`:F)},onGaveUp:e=>{C.error(`follower gave up reaching the leader`,{error:e}),b.refs.switcher.connection=`disconnected`,q(),U(!1,`Couldn't reach the leader. Reload to retry.`),O?.reset(),f&&g.cherryTransport?.emitSliccEventToHost(`slicc.follower.disconnected`)},...f?{}:{onJoinUrlChanged:e=>{C.info(`follower joinUrl superseded, persisting replacement`,{newJoinUrl:e}),ne(window.localStorage,e)}},addSprinkle:G.addSprinkle,removeSprinkle:G.removeSprinkle,onOpen:e=>{/^https?:\/\//.test(e)?window.open(e,`_blank`,`noopener`):C.warn(`follower sprinkle open() of a local path is unavailable`,{path:e})},onSelectScoop:e=>le(S.currentUnits(),e,b.getSelected()?.id,e=>b.selectScoop(e)),onSelectedScoop:()=>de(S.currentUnits(),b.getSelected()?.id),onScoopsList:(e,t)=>{z=!0;let n=L();!n||!e.some(e=>e.jid===n)?K(R(t)):K(n),b.wiring.refreshScoops?.()},onModelsList:e=>O?.onModelsList(e),onModelState:e=>O?.onModelState(e),...f?{onCherrySliccEvent:(e,t)=>g.cherryTransport?.emitSliccEventToHost(e,t)}:{}}));for(let e of[`save`,`skip`,`erase`])b.refs.freezer.addEventListener(`new-chat-${e}`,()=>{S.forgetLocalSends(),J.currentSync?.requestNewSession(e)});d(`agentic-memory`)&&b.refs.freezer.querySelector(`slicc-freezer-new`)?.setAttribute(`no-skip`,``),b.refs.switcher.addEventListener(`slicc-scoop-select`,e=>{let t=e.detail?.key;t&&(I=t)}),f&&g.cherryTransport&&(g.cherryTransport.onHostEvent=(e,t)=>J.currentSync?.sendCherryHostEvent(e,t),g.cherryTransport.onExportRequest=(e,t,r,i)=>{let a=J.currentSync;if(!a)return Promise.reject(new n(`transfer-aborted`));let o=Se(t);return o?a.requestTranscriptExport(o,r,i):Promise.reject(new n(`session-not-found`))});let Z=null;if(!f){let{startFollowerNavigateWatcher:t}=await e(async()=>{let{startFollowerNavigateWatcher:e}=await import(`./follower-navigate-watcher-B9be6j6U.js`);return{startFollowerNavigateWatcher:e}},__vite__mapDeps([65,3,16,1,2,5,17,18,19,66,6,67]));Z=t(g.realCdpTransport,()=>J.currentSync)}let Q=!1,$=()=>{b.refs.avatarMenu.items=[{kind:`separator`},...h?[{id:`focus-leader-tab`,label:`Bring leader to front`,icon:`external-link`}]:[],{id:`export-transcript`,label:Q?`Exporting…`:`Export transcript`,icon:`download`,disabled:Q||void 0},{id:`tray-stop`,label:`Disconnect from leader`,icon:`unplug`,danger:!0}]};$(),b.refs.avatarMenu.addEventListener(`slicc-avatar-action`,t=>{let n=t.detail?.id;if(n===`focus-leader-tab`){g.cherryTransport?.emitSliccEventToHost(`slicc.focus-leader-tab`);return}if(n===`tray-stop`){window.dispatchEvent(new CustomEvent(`slicc:tray-leave`,{detail:{workerBaseUrl:null}}));return}if(n===`export-transcript`&&!Q){Q=!0,$();let t=J.currentSync;if(!t){Q=!1,$();return}let n=new AbortController;t.requestTranscriptExport({kind:`active`},n.signal).then(async t=>{let{downloadTranscriptBlob:n}=await e(async()=>{let{downloadTranscriptBlob:e}=await import(`./wc-transcript-export-eyG-SwVe.js`);return{downloadTranscriptBlob:e}},__vite__mapDeps([68,2,49,69,55,1]));await n(t,`slicc-transcript-${new Date().toISOString().slice(0,10)}.zip`)}).catch(e=>{C.error(`follower transcript export failed`,{error:String(e)})}).finally(()=>{Q=!1,$()})}}),window.addEventListener(`slicc:tray-leave`,e=>{he({workerBaseUrl:(e.detail??{}).workerBaseUrl??null},{storage:window.localStorage,stopFollower:()=>{Z?.(),J.stop()},getHref:()=>window.location.href,replaceHref:e=>window.history.replaceState(null,``,e),reload:()=>window.location.reload()})}),C.info(`follower mounted`,{runtimeMode:u,isCherry:f})}export{D as bootFollowerFloat};
@@ -1,2 +0,0 @@
1
- const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/main-DFTTAllP.js","assets/rolldown-runtime-Dd_uD5pT.js","assets/modulepreload-polyfill-P2Xu9kJm.js","assets/core-zz8rWM4c.js","assets/compat-qQM4gjF_.js","assets/models-BSkXF4T6.js","assets/diagnostics-DN_idNHx.js","assets/preload-helper-Czpn1I53.js","assets/provider-env-CTOcDKrQ.js","assets/__vite-browser-external-5eBdwsFd.js","assets/openrouter.models-B-zmcypy.js","assets/libesm-BypnjKEL.js","assets/logger-DDBAeTLF.js","assets/proxied-fetch-W1rZTqEQ.js","assets/base64-ELzoYfwP.js","assets/fetch-body-1l9I58Vk.js","assets/api-endpoint-DuEQRZ4g.js","assets/runtime-env-Dlaokqg1.js","assets/secret-topology-fyLSbV8r.js","assets/float-topology-U8FF9pgZ.js","assets/secrets-bridge-client-9RRVsrGm.js","assets/port-bridge-client-BYQawsDH.js","assets/image-markers-q8JQTtid.js","assets/tool-ui-eSQ1g2I1.js","assets/bridge-protocol-C52CnDIj.js","assets/account-store-SI8RQbm0.js","assets/providers-B9p2VR5L.js","assets/panel-rpc-B3MSVImO.js","assets/bedrock-camp-compat-BeCSBUrZ.js","assets/claude-model-version-DZmbk9E2.js","assets/telemetry-CKoAhRMv.js","assets/tray-follower-status-BAjnN7Ar.js","assets/clipboard-eqmn97SP.js","assets/wc-detached-DQ_ZTSZ-.js","assets/wc-settings-1ZJgN4Wk.js","assets/wc-shell-CrMn8BW0.js","assets/mime-types-D0xZwlMO.js","assets/types-D8gIX-W-.js","assets/same-file-identity-DuEcSmPX.js","assets/icons-jrIi5FYk.js","assets/wc-shell-WkeczD9x.css","assets/slugify-BYJ6QVAt.js","assets/theme-engine-ZV7CeqWw.js","assets/theme-CwPIBqJE.js","assets/discovery-preference-pvxthSOH.js","assets/legacy-styles-B3nS5QUo.js","assets/sync-dialog-CH4PBcVu.js","assets/wc-live-CaopRwn0.js","assets/sprinkle-renderer-DYUy10CO.js","assets/hid-device-registry-B2R-0rNt.js","assets/serial-port-registry-CCqklAEr.js","assets/hid-operations-C97SZtrY.js","assets/usb-device-registry--JwKRTYp.js","assets/usb-operations-v1mGAdRY.js","assets/shared-mBEktoxE.js","assets/transcript-export-DP-r8eDz.js","assets/session-jsonl-lB9-7rZS.js","assets/src-BWaKqLvQ.js","assets/provider-budget-LCzMPlKv.js","assets/permissions-surface-registry-CilCRwhh.js","assets/browser-DGwroBSO.js","assets/tray-leader-Bd293BI8.js","assets/record-CCQFJXn_.js","assets/descriptor-DzbI9z_9.js","assets/types-CFfBWsH5.js","assets/wc-unit-context-CS4hSDi7.js"])))=>i.map(i=>d[i]);
2
- import{t as e}from"./preload-helper-Czpn1I53.js";import{n as t}from"./runtime-env-Dlaokqg1.js";import{t as n}from"./tray-follower-status-BAjnN7Ar.js";import{n as r}from"./clipboard-eqmn97SP.js";import{N as i,S as a,g as o,o as s}from"./main-DFTTAllP.js";import{r as c}from"./tray-leader-Bd293BI8.js";import{o as l}from"./record-CCQFJXn_.js";import{_ as u,c as d,s as f,v as p}from"./wc-live-CaopRwn0.js";import{a as m}from"./wc-unit-context-CS4hSDi7.js";function h(e){let t=e.find(e=>e.userAvatar&&e.userName)??e.find(e=>e.userName);return t?.userName?{name:t.userName,avatarUrl:t.userAvatar,provider:t.providerId}:null}function g(e){return e.flatMap(e=>e.models.map(t=>({name:t.name??t.id,provider:e.providerName,id:`${e.providerId}:${t.id}`})))}function _(e,t,n){try{let r=t();e.setAttribute(`model`,r.name??r.id),n&&(e.selectedModelId=n())}catch{}}function v(e,t){let n=[{id:`settings`,label:`Account settings…`,icon:`settings`},{id:`theme`,label:`Theme settings…`,icon:`palette`},...t?[{id:`shortcuts`,label:`Keyboard mode`,icon:`keyboard`}]:[],{id:`export-transcript`,label:`Export transcript`,icon:`download`,disabled:e||void 0}];return i(`experimental-settings`)&&n.push({id:`experimental-settings`,label:`Experimental features…`,icon:`flask-conical`}),n}function y(e,t){return()=>{e.models=g(t()),p()}}function b(e,t,n){return()=>_(e,t,()=>{let e=t();return`${n()}:${e.id}`})}function x(e,t,n){return()=>{let r=h(t()),i=e.avatarMenu.querySelector(`slicc-avatar`),a=e.inputCard.querySelector(`slicc-send-button`);if(r){i?.removeAttribute(`initials`),i?.setAttribute(`name`,r.name),r.avatarUrl&&(i?.setAttribute(`src`,r.avatarUrl),a?.setAttribute(`src`,r.avatarUrl)),e.avatarMenu.user={name:r.name,provider:r.provider};return}i?.removeAttribute(`name`),i?.removeAttribute(`src`),i?.removeAttribute(`initials`),a?.removeAttribute(`src`),e.avatarMenu.user={name:`SLICC`,provider:n?`extension`:`standalone`}}}async function S(r){let{refs:i,client:a,log:o,onExportTranscript:l}=r,{getAllAvailableModels:u,getAccounts:d,getSelectedProvider:f,resolveCurrentModel:p}=await e(async()=>{let{getAllAvailableModels:e,getAccounts:t,getSelectedProvider:n,resolveCurrentModel:r}=await import(`./main-DFTTAllP.js`).then(e=>e.i);return{getAllAvailableModels:e,getAccounts:t,getSelectedProvider:n,resolveCurrentModel:r}},__vite__mapDeps([0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32])),m=y(i.composerMeta,u),h=b(i.composerMeta,p,f);m();let g=null;await N(i,a,r.workUnits,r.getUnits,()=>{let e=g;g=null,e!=null&&i.thread?.dispatchEvent(new CustomEvent(`slicc-error-retry`,{detail:{messageId:e},bubbles:!0,composed:!0}))});let _=t(),S=x(i,d,_);S();let O=()=>{if(_)return[];let e=s(c(),n()),t=[{kind:`separator`}];return e.kind===`leader-offer`?t.push({id:`tray-enable`,label:e.label,icon:`radio`}):e.kind===`leader-copy`?(t.push({id:`tray-copy`,label:`Copy tray join URL`,icon:`link`}),t.push({id:`tray-stop`,label:`Stop multi-browser sync`,icon:`square`,danger:!0})):e.kind===`leader-pending`?(t.push({kind:`caption`,label:e.caption}),t.push({id:`tray-stop`,label:`Stop multi-browser sync`,icon:`square`,danger:!0})):(t.push({kind:`caption`,label:e.caption}),t.push({id:`tray-stop`,label:`Disconnect from leader`,icon:`unplug`,danger:!0})),t},P=new URLSearchParams(window.location.search).has(`detached`),I=()=>_&&!P?[{id:`popout`,label:`Pop out into a tab`,icon:`external-link`}]:[],L=!1,R=()=>{i.avatarMenu.items=[...v(L,!!r.shortcuts),...I(),...O()]};R(),i.avatarMenu.addEventListener(`slicc-avatar-menu-toggle`,e=>{e.detail?.open&&R()});let z=C(o,m,S,()=>a.updateModel());r.shortcuts?.setAction(`accounts`,z);let B=w(o,T(r)),V=E(o);D(i,o),i.avatarMenu.addEventListener(`slicc-avatar-action`,t=>{let n=t.detail?.id;if(n&&k(n,o)){R();return}if(n===`popout`){e(async()=>{let{requestDetachedPopout:e}=await import(`./wc-detached-DQ_ZTSZ-.js`);return{requestDetachedPopout:e}},__vite__mapDeps([33,0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32])).then(({requestDetachedPopout:e})=>e()).catch(e=>o.error(`detached popout request failed`,e));return}n===`shortcuts`&&r.shortcuts?.showHelp(),n===`settings`&&z(),n===`theme`&&B(),n===`experimental-settings`&&V(),n===`export-transcript`&&l&&(L=!0,R(),l().finally(()=>{L=!1,R()}))}),i.composerMeta.addEventListener(`add-ai`,z),A(i,z),j({refs:i,log:o,openSettings:z,setPendingReplayMessageId:e=>{g=e}}),await M({refs:i,log:o,openSettings:z,refreshModels:m,applyIdentity:S,client:a}),await F({refreshModels:m,refreshModelPill:h,applyIdentity:S,client:a})}function C(t,n,r,i){return()=>{e(async()=>{let{showWcSettings:e}=await import(`./wc-settings-1ZJgN4Wk.js`);return{showWcSettings:e}},__vite__mapDeps([34,7,35,1,12,36,14,24,25,3,4,5,6,8,9,10,11,13,15,16,17,18,19,20,21,22,23,26,27,28,29,30,37,38,39,40,41,0,2,31,32,42,43,44])).then(({showWcSettings:e})=>e(t)).then(()=>{n(),r(),i()}).catch(e=>t.error(`WC settings dialog failed`,e))}}function w(t,n){return()=>{e(async()=>{let{showThemeSettings:e}=await import(`./wc-settings-1ZJgN4Wk.js`);return{showThemeSettings:e}},__vite__mapDeps([34,7,35,1,12,36,14,24,25,3,4,5,6,8,9,10,11,13,15,16,17,18,19,20,21,22,23,26,27,28,29,30,37,38,39,40,41,0,2,31,32,42,43,44])).then(({showThemeSettings:e})=>e(t,n?{getTrigger:n.getTrigger,setTrigger:n.setTrigger,persistTrigger:n.persistTrigger}:void 0)).catch(e=>t.error(`Theme settings dialog failed`,e))}}function T(e){let t=e.shortcuts;if(t)return{getTrigger:()=>t.trigger(),setTrigger:e=>t.setTrigger(e),persistTrigger:e.persistKeyboardTrigger}}function E(t){return()=>{e(async()=>{let{showExperimentalSettings:e}=await import(`./wc-settings-1ZJgN4Wk.js`);return{showExperimentalSettings:e}},__vite__mapDeps([34,7,35,1,12,36,14,24,25,3,4,5,6,8,9,10,11,13,15,16,17,18,19,20,21,22,23,26,27,28,29,30,37,38,39,40,41,0,2,31,32,42,43,44])).then(({showExperimentalSettings:e})=>e(t)).catch(e=>t.error(`Experimental settings dialog failed`,e))}}function D(e,t){e.floatbar.addEventListener(`slicc-followers-click`,()=>{O(t,{copy:!1,initialTab:`status`})})}function O(t,n){let i=c().session?.joinUrl;i&&(n.copy&&r(i).catch(()=>void 0),e(async()=>{let{loadLegacyDialogStyles:e}=await import(`./legacy-styles-B3nS5QUo.js`);return{loadLegacyDialogStyles:e}},__vite__mapDeps([45,7])).then(({loadLegacyDialogStyles:e})=>e()).then(async()=>{let{showSyncEnabledDialog:t}=await e(async()=>{let{showSyncEnabledDialog:e}=await import(`./sync-dialog-CH4PBcVu.js`);return{showSyncEnabledDialog:e}},__vite__mapDeps([46,24,32,1,39,47,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,35,36,25,26,27,28,29,30,37,38,40,48,49,50,51,52,53,54,43,42,41,55,56,31,0,2,57,58,59,60,61,62,63,64,65]));t({joinUrl:i,copied:n.copy,initialTab:n.initialTab,followers:f(),onReset:d()??null})}).catch(e=>t.error(`sync dialog failed`,e)))}function k(e,t){return e===`tray-enable`?(a({locationHref:window.location.href,storage:window.localStorage,envBaseUrl:null,defaultWorkerBaseUrl:o}).then(e=>{if(!e)return t.error(`tray enable: no worker base URL resolvable`);window.dispatchEvent(new CustomEvent(`slicc:tray-leave`,{detail:{workerBaseUrl:e}}))}),!0):e===`tray-copy`?(O(t,{copy:!0}),!0):e===`tray-stop`&&(window.dispatchEvent(new CustomEvent(`slicc:tray-leave`,{detail:{workerBaseUrl:null}})),!0)}function A(e,t){e.thread?.addEventListener(`slicc-error-open-settings`,t),window.addEventListener(`slicc:open-settings-from-panel`,()=>t())}function j(e){let{refs:t,log:n,openSettings:r,setPendingReplayMessageId:i}=e;t.thread?.addEventListener(`slicc-error-change-model`,e=>{i(e.detail?.messageId??null);let a=t.composerMeta,o=a.models;if(Array.isArray(o)&&o.length===0){r();return}try{a.openMenu?.()}catch(e){n.error(`opening composer model picker failed`,e)}})}async function M(t){let{refs:n,log:r,openSettings:i,refreshModels:a,applyIdentity:o,client:s}=t,{getSelectedProvider:c,getProviderConfig:l,reloginOAuthAccount:u}=await e(async()=>{let{getSelectedProvider:e,getProviderConfig:t,reloginOAuthAccount:n}=await import(`./main-DFTTAllP.js`).then(e=>e.i);return{getSelectedProvider:e,getProviderConfig:t,reloginOAuthAccount:n}},__vite__mapDeps([0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32]));n.thread?.addEventListener(`slicc-error-login`,()=>{let e=c(),t=e?l(e):null;if(!t||!t.onOAuthLogin&&!t.onOAuthLoginIntercepted){i();return}u(t,()=>{a(),o(),s.updateModel()}).catch(e=>r.error(`re-login from error card failed`,e))})}async function N(t,n,r,i,a){let{resolveModelById:o,resolveCurrentModel:s,setSelectedModelId:c}=await e(async()=>{let{resolveModelById:e,resolveCurrentModel:t,setSelectedModelId:n}=await import(`./main-DFTTAllP.js`).then(e=>e.i);return{resolveModelById:e,resolveCurrentModel:t,setSelectedModelId:n}},__vite__mapDeps([0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32])),l=e=>{let t=e.indexOf(`:`);return t>0?e.slice(t+1):e},u=e=>{try{let n=e?o(l(e)):s();t.composerMeta.toggleAttribute(`no-thinking`,n.reasoning!==!0)}catch{}};u(),t.composerMeta.addEventListener(`model-change`,e=>{let t=e.detail,o=t?.id;o&&t?.source!==`follower`&&(c(o),u(o),P(n,r,i(),o),a?.())})}async function P(e,t,n,r,i=u){let a=l(r);if(!a)return!1;let o=e.selectedScoopJid,s=m(n,o?{id:o}:null);if(!s)return!1;let c=await t.setModel(s.id,a);return c&&i(),c===!0}async function F(t){let{refreshModels:n,refreshModelPill:r,applyIdentity:i,client:a}=t,{getAccounts:o,getProviderConfig:s}=await e(async()=>{let{getAccounts:e,getProviderConfig:t}=await import(`./main-DFTTAllP.js`).then(e=>e.i);return{getAccounts:e,getProviderConfig:t}},__vite__mapDeps([0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32]));window.addEventListener(`slicc:accounts-changed`,()=>{n(),r(),i(),a.updateModel();for(let e of o()){let t=s(e.providerId)?.refreshModels;t&&t().then(()=>{n(),r(),a.updateModel()}).catch(()=>void 0)}})}export{S as wireWcNav};
@@ -1 +0,0 @@
1
- import{n as e}from"./wc-onboarding-FjrDOv_u.js";export{e as hasOnboardingFinalLickInHistory};
@@ -1,2 +0,0 @@
1
- const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/speak-DRv_vLqY.js","assets/preload-helper-Czpn1I53.js","assets/logger-DDBAeTLF.js","assets/runtime-env-Dlaokqg1.js","assets/speech-assets-bridge-CFYafE89.js","assets/transformers-env-9M9En1_O.js","assets/wc-shell-CrMn8BW0.js","assets/rolldown-runtime-Dd_uD5pT.js","assets/mime-types-D0xZwlMO.js","assets/base64-ELzoYfwP.js","assets/bridge-protocol-C52CnDIj.js","assets/account-store-SI8RQbm0.js","assets/core-zz8rWM4c.js","assets/compat-qQM4gjF_.js","assets/models-BSkXF4T6.js","assets/diagnostics-DN_idNHx.js","assets/provider-env-CTOcDKrQ.js","assets/__vite-browser-external-5eBdwsFd.js","assets/openrouter.models-B-zmcypy.js","assets/libesm-BypnjKEL.js","assets/proxied-fetch-W1rZTqEQ.js","assets/fetch-body-1l9I58Vk.js","assets/api-endpoint-DuEQRZ4g.js","assets/secret-topology-fyLSbV8r.js","assets/float-topology-U8FF9pgZ.js","assets/secrets-bridge-client-9RRVsrGm.js","assets/port-bridge-client-BYQawsDH.js","assets/image-markers-q8JQTtid.js","assets/tool-ui-eSQ1g2I1.js","assets/providers-B9p2VR5L.js","assets/panel-rpc-B3MSVImO.js","assets/bedrock-camp-compat-BeCSBUrZ.js","assets/claude-model-version-DZmbk9E2.js","assets/telemetry-CKoAhRMv.js","assets/types-D8gIX-W-.js","assets/same-file-identity-DuEcSmPX.js","assets/icons-jrIi5FYk.js","assets/wc-shell-WkeczD9x.css","assets/shared-mBEktoxE.js","assets/transformers.web-BBJR2ai3.js"])))=>i.map(i=>d[i]);
2
- import{t as e}from"./preload-helper-Czpn1I53.js";import{t}from"./logger-DDBAeTLF.js";import{a as n,n as r,o as i,r as a,t as o}from"./transformers-env-9M9En1_O.js";var s=t(`speech:whisper`),c=null,l=`idle`,u=null,d=new Set;function f(){return l}function p(){return u}function m(e){return e&&d.add(e),c||=(l=`loading`,g().then(e=>(l=`ready`,h(),e),e=>{throw l=`failed`,c=null,s.error(`whisper load failed`,e),e})),c}function h(){e(async()=>{let{kokoroWarmup:e}=await import(`./speak-DRv_vLqY.js`);return{kokoroWarmup:e}},__vite__mapDeps([0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38])).then(({kokoroWarmup:e})=>e()).catch(e=>s.warn(`kokoro warmup (chained after whisper) failed`,e))}async function g(){let{pipeline:t,env:c}=await e(async()=>{let{pipeline:e,env:t}=await import(`./transformers.web-BBJR2ai3.js`);return{pipeline:e,env:t}},__vite__mapDeps([39,7,1]));r(c),await o(n),await a();let l=i(),f=e=>{if(e?.file){if(e.status===`progress`)l.update(e.file,e.loaded??0,e.total??0);else if(e.status===`done`)l.complete(e.file);else return;u=l.snapshot();for(let e of d)e(u)}},p=async e=>await t(`automatic-speech-recognition`,n,{device:e,dtype:e===`webgpu`?`fp32`:`q8`,progress_callback:f}),m=typeof navigator<`u`&&`gpu`in navigator,h;if(m)try{h=await p(`webgpu`)}catch(e){s.warn(`whisper webgpu init failed; retrying on wasm`,e),h=await p(`wasm`)}else h=await p(`wasm`);return s.info(`whisper ready`,{model:n,device:m?`webgpu`:`wasm`}),{async transcribe(e,t){let n=performance.now(),r=await h(e,{chunk_length_s:30,task:`transcribe`,...t?.language?{language:t.language}:{}}),i=Array.isArray(r)?r.map(e=>e.text??``).join(` `):r.text??``;return s.info(`whisper transcribe`,{elapsedMs:Math.round(performance.now()-n),audioSeconds:Math.round(e.length/160)/100,numThreads:c.backends?.onnx?.wasm?.numThreads,device:m?`webgpu`:`wasm`}),i.trim()}}}var _=16e3;async function v(e){if(typeof AudioContext>`u`||typeof OfflineAudioContext>`u`)throw Error(`audio decoding requires a window/page realm (AudioContext unavailable)`);let t=new AudioContext,n;try{n=await t.decodeAudioData(e.slice(0))}finally{await t.close().catch(()=>{})}let r=Math.max(1,Math.ceil(n.duration*_)),i=new OfflineAudioContext(1,r,_),a=i.createBufferSource();return a.buffer=n,a.connect(i.destination),a.start(),(await i.startRendering()).getChannelData(0).slice(0)}var y=t(`speech:whisper-session`),b=2e3,x=500,S=5e3,C=3e4,w=(e,t,n)=>new Promise((r,i)=>{let a=setTimeout(()=>i(Error(`${n} timed out after ${t}ms`)),t);e.then(e=>{clearTimeout(a),r(e)},e=>{clearTimeout(a),i(e)})});function T(e){return e?.split(`-`)[0]?.toLowerCase()||void 0}async function E(e,t){let n;if(t.stream)n=t.stream;else{if(!navigator.mediaDevices?.getUserMedia)throw Error(`microphone capture unavailable in this realm`);n=await navigator.mediaDevices.getUserMedia({audio:t.deviceId&&t.deviceId!=="default"?{deviceId:{exact:t.deviceId}}:!0})}let r=new MediaRecorder(n),i=[],a=T(t.lang),o=!1,s=!1;r.ondataavailable=e=>{e.data.size>0&&i.push(e.data)};let c=async()=>{if(i.length===0)return``;let t=await v(await new Blob(i,{type:r.mimeType||`audio/webm`}).arrayBuffer());return e.transcribe(t,{language:a})},l=Promise.resolve(``),u=()=>{let e=l.catch(()=>``).then(()=>c());return l=e.catch(()=>``),e},d=setInterval(()=>{o||s||i.length===0||(o=!0,u().then(e=>{!s&&e&&t.onPartial?.(e)}).catch(e=>{y.warn(`partial transcription failed`,e)}).finally(()=>{o=!1}))},b),f=()=>{if(clearInterval(d),r.state!==`inactive`)try{r.stop()}catch{}for(let e of n.getTracks())e.stop()},p=()=>new Promise(e=>{if(r.state===`inactive`){e();return}r.onstop=()=>e();try{r.stop()}catch{e()}});return r.start(x),{async stop(){if(s)return``;s=!0,clearInterval(d);try{await w(p(),S,`recorder flush`);for(let e of n.getTracks())e.stop();return await w(u(),C,`transcription`)}catch(e){for(let e of n.getTracks())e.stop();let r=e instanceof Error?e.message:String(e);return t.onError?.(`transcription failed: ${r}`),``}},cancel(){s||(s=!0,f())}}}export{p as a,m as i,T as n,f as o,v as r,E as t};