sliccy 4.28.2 → 4.29.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 (235) hide show
  1. package/README.md +17 -16
  2. package/dist/node-server/bridge-security.d.ts +26 -0
  3. package/dist/node-server/bridge-security.js +41 -2
  4. package/dist/node-server/chrome-launch.d.ts +62 -1
  5. package/dist/node-server/chrome-launch.js +168 -2
  6. package/dist/node-server/electron-controller.d.ts +115 -5
  7. package/dist/node-server/electron-controller.js +167 -28
  8. package/dist/node-server/electron-main.js +37 -2
  9. package/dist/node-server/electron-runtime.d.ts +0 -2
  10. package/dist/node-server/electron-runtime.js +63 -68
  11. package/dist/node-server/fetch-proxy-headers.d.ts +25 -0
  12. package/dist/node-server/fetch-proxy-headers.js +36 -0
  13. package/dist/node-server/index.js +46 -11
  14. package/dist/node-server/routes/fetch-proxy.js +12 -12
  15. package/dist/ui/assets/account-store-lwRLg8qZ.js +38 -0
  16. package/dist/ui/assets/account-store-o8Dx0iny.js +99 -0
  17. package/dist/ui/assets/adobe-oauth-state-DJ7nvXJJ.js +1 -0
  18. package/dist/ui/assets/adobe-oauth-state-fjk_YXgL.js +1 -0
  19. package/dist/ui/assets/adobe-t0y7yh0d.js +2 -0
  20. package/dist/ui/assets/adobe-w6Q7iSKn.js +1 -0
  21. package/dist/ui/assets/{agent-message-to-chat-DQErB0Zj.js → agent-message-to-chat-yezUzugT.js} +1 -1
  22. package/dist/ui/assets/{anthropic-BaI_sJYa.js → anthropic-DwYAPtk5.js} +1 -1
  23. package/dist/ui/assets/{apps-BAXGsVHu.js → apps-D-6_Des4.js} +1 -1
  24. package/dist/ui/assets/{azure-openai-CKd81QhZ.js → azure-openai-BUQWXp4U.js} +1 -1
  25. package/dist/ui/assets/{azure-openai-DTsNmcxo.js → azure-openai-Cza179on.js} +1 -1
  26. package/dist/ui/assets/{azure-openai-responses-CMjHELHX.js → azure-openai-responses-Bnxym5u-.js} +1 -1
  27. package/dist/ui/assets/backend-local-mrUgrni5.js +9 -0
  28. package/dist/ui/assets/{bedrock-camp-DS1dgU6g.js → bedrock-camp-C1lmRgcD.js} +2 -2
  29. package/dist/ui/assets/bsh-watchdog-aV3rA0w_.js +60 -0
  30. package/dist/ui/assets/cdp-bridge-CUqQUcaF.js +1 -0
  31. package/dist/ui/assets/{cdp-D4JkCTey.js → cdp-z9uzg44m.js} +5 -5
  32. package/dist/ui/assets/composer-speech-BJF-32Qm.js +1 -0
  33. package/dist/ui/assets/{connect-surface-CyQMJFj3.js → connect-surface-v46dKJYB.js} +1 -1
  34. package/dist/ui/assets/dip-Iosy_HJh.js +1 -0
  35. package/dist/ui/assets/{dist-CVvNIY9j.js → dist-BHeXHQU_.js} +1 -1
  36. package/dist/ui/assets/{dist-Ciobg3J4.js → dist-Fdgn9mju.js} +2 -2
  37. package/dist/ui/assets/ensure-speech-assets-CILvdvdL.js +1 -0
  38. package/dist/ui/assets/{es-DjQZltrp.js → es-Z-wNZ0C3.js} +4 -4
  39. package/dist/ui/assets/esp8266-CL1TORn3.js +1 -0
  40. package/dist/ui/assets/{esptool-operations-SV6FPHJC.js → esptool-operations-CYdcX9Mk.js} +2 -2
  41. package/dist/ui/assets/extension-bridge-transport-DYOF2OYC.js +1 -0
  42. package/dist/ui/assets/fetch-body-D2PwksUW.js +1 -0
  43. package/dist/ui/assets/fetch-body-DDu_AU5I.js +1 -0
  44. package/dist/ui/assets/{fs-Bv2avR3Y.js → fs-CruOlxoS.js} +2 -2
  45. package/dist/ui/assets/{fs-B-yB8nmS.js → fs-crZm8xnS.js} +1 -1
  46. package/dist/ui/assets/github-CQtjJB1r.js +2 -0
  47. package/dist/ui/assets/github-FUziE_96.js +1 -0
  48. package/dist/ui/assets/{github-copilot--B7IUER8.js → github-copilot-DOj1kxaL.js} +1 -1
  49. package/dist/ui/assets/{github-copilot-CFeOxiAY.js → github-copilot-yTNPvKEy.js} +1 -1
  50. package/dist/ui/assets/{google-yB8wbiw4.js → google-CSaY-DQE.js} +1 -1
  51. package/dist/ui/assets/{google-shared-CeGHiQ17.js → google-shared-RiqqHuiz.js} +1 -1
  52. package/dist/ui/assets/{google-vertex-Dbruz2uo.js → google-vertex-CBHKHWKe.js} +1 -1
  53. package/dist/ui/assets/hear-COc8-jz9.js +1 -0
  54. package/dist/ui/assets/hear-Ca-dJ63I.js +1 -0
  55. package/dist/ui/assets/hid-picker-DUJBI46p.js +1 -0
  56. package/dist/ui/assets/{intercepted-oauth-tLpKagkf.js → intercepted-oauth-E9BfBX02.js} +1 -1
  57. package/dist/ui/assets/js-realm-worker-BIJifCVd.js +47 -0
  58. package/dist/ui/assets/{json-parse-BIGBjpLL.js → json-parse-CWht3lea.js} +1 -1
  59. package/dist/ui/assets/kernel-worker-CFGgP28u.js +10060 -0
  60. package/dist/ui/assets/{kokoro-IuvgZkZk.js → kokoro-B5jJ2WUJ.js} +2 -2
  61. package/dist/ui/assets/{kokoro-pZaPWf_-.js → kokoro-BdpwC7DT.js} +2 -2
  62. package/dist/ui/assets/kokoro-engine-io4cnyoV.js +1 -0
  63. package/dist/ui/assets/{lick-ws-bridge-CbVQgXpI.js → lick-ws-bridge-s5Y2i_Ua.js} +1 -1
  64. package/dist/ui/assets/{local-llm-FEU-X2iM.js → local-llm-CKo8wJkz.js} +1 -1
  65. package/dist/ui/assets/magick-wasm-oRIuPV7a.js +43 -0
  66. package/dist/ui/assets/main-CY_go8Ex.js +24 -0
  67. package/dist/ui/assets/{main-cherry-B1mI8ArD.js → main-cherry-BRV9Q0tu.js} +1 -1
  68. package/dist/ui/assets/{mistral-CJVvXrOL.js → mistral-BTNTllXI.js} +1 -1
  69. package/dist/ui/assets/mount-DlwSk_tU.js +1 -0
  70. package/dist/ui/assets/mount-bridge-client-DDnAgZEL.js +2 -0
  71. package/dist/ui/assets/mount-id-_7_PCY9F.js +1 -0
  72. package/dist/ui/assets/mount-pc-SiJqJ.js +2 -0
  73. package/dist/ui/assets/mount-picker-popup-Hrvzr69c.js +1 -0
  74. package/dist/ui/assets/{mount-table-store-CQJEV6Ij.js → mount-table-store-ggb440m4.js} +1 -1
  75. package/dist/ui/assets/new-session-CfjGoE_n.js +2 -0
  76. package/dist/ui/assets/oauth-bootstrap-Le_gIjYT.js +2 -0
  77. package/dist/ui/assets/oauth-service-D4iuqFv6.js +1 -0
  78. package/dist/ui/assets/oauth-service-YGl8VFS-.js +1 -0
  79. package/dist/ui/assets/{openai-codex-BpHxok9y.js → openai-codex-CU65yKca.js} +1 -1
  80. package/dist/ui/assets/{openai-codex-DIIqvcoZ.js → openai-codex-Dx5taSaF.js} +1 -1
  81. package/dist/ui/assets/{openai-codex-responses-CLrAtex4.js → openai-codex-responses-7JN1dUxK.js} +1 -1
  82. package/dist/ui/assets/{openai-completions-CyC3I8Ls.js → openai-completions-YNL_qr9N.js} +1 -1
  83. package/dist/ui/assets/{openai-responses-D3BggRn6.js → openai-responses-nczmKECx.js} +1 -1
  84. package/dist/ui/assets/{openai-responses-shared-GJLWYx-P.js → openai-responses-shared-9YVaeX5D.js} +1 -1
  85. package/dist/ui/assets/panel-responder-BKgfV-nl.js +1 -0
  86. package/dist/ui/assets/{panel-rpc-Ck8CVyMh.js → panel-rpc-D0J5pskz.js} +1 -1
  87. package/dist/ui/assets/panel-rpc-handlers-BFGsncpn.js +2 -0
  88. package/dist/ui/assets/{picker-approval-tzbkMw-e.js → picker-approval-Dc390nC7.js} +1 -1
  89. package/dist/ui/assets/picker-popup-CpulHQsi.js +1 -0
  90. package/dist/ui/assets/preview-vfs-responder-CSDC7Oy2.js +1 -0
  91. package/dist/ui/assets/provider-Lb9gUmQt.js +2 -0
  92. package/dist/ui/assets/provider-store-access-COfmBqcb.js +1 -0
  93. package/dist/ui/assets/provider-store-access-CjPYCH1J.js +1 -0
  94. package/dist/ui/assets/{provider-UGTRh0sb.js → provider-vMORCKxQ.js} +1 -1
  95. package/dist/ui/assets/{providers-C-thqKYx.js → providers-CkeJGhLV.js} +1 -1
  96. package/dist/ui/assets/proxied-fetch-CKDBmEMl.js +2 -0
  97. package/dist/ui/assets/proxied-fetch-CM0jk_Mr.js +1 -0
  98. package/dist/ui/assets/py-realm-worker-hOFi8vjM.js +242 -0
  99. package/dist/ui/assets/{pyodide-BvA4c-59.js → pyodide-CqQhZelL.js} +2 -2
  100. package/dist/ui/assets/{quick-llm-pCxnbK4A.js → quick-llm-CksvHcNV.js} +1 -1
  101. package/dist/ui/assets/{remote-cache-BffIqHgi.js → remote-cache-BL6NRenp.js} +1 -1
  102. package/dist/ui/assets/remote-terminal-view-Qv9yhXQm.js +5 -0
  103. package/dist/ui/assets/remote-vfs-client-Z2qM01yP.js +1 -0
  104. package/dist/ui/assets/secret-env-DncfFSea.js +1 -0
  105. package/dist/ui/assets/secret-topology-bwXIzzAK.js +1 -0
  106. package/dist/ui/assets/secrets-bridge-client-BSipj-5f.js +2 -0
  107. package/dist/ui/assets/serial-picker-B6s4NeaB.js +1 -0
  108. package/dist/ui/assets/session-freezer-1tkfzApv.js +1 -0
  109. package/dist/ui/assets/shared-Bn9ltvMZ.js +1 -0
  110. package/dist/ui/assets/speak-Bri-_DZL.js +1 -0
  111. package/dist/ui/assets/speak-D9WnbzxD.js +2 -0
  112. package/dist/ui/assets/speech-assets-bridge-B8NqCAE8.js +1 -0
  113. package/dist/ui/assets/speech-assets-bridge-BUDIvdid.js +1 -0
  114. package/dist/ui/assets/{sprinkle-bridge-DrAUCEC_.js → sprinkle-bridge-Du2dCM8G.js} +1 -1
  115. package/dist/ui/assets/{sprinkle-manager-C3_2AgeR.js → sprinkle-manager-BhhaIwAz.js} +1 -1
  116. package/dist/ui/assets/{sql-wasm-Cu5Uk_6k.js → sql-wasm-BWbkWL23.js} +1 -1
  117. package/dist/ui/assets/{store-DSwnBJEJ.js → store-iS53cbT5.js} +1 -1
  118. package/dist/ui/assets/sudo-DH2Ru5S3.js +5 -0
  119. package/dist/ui/assets/tool-ui-DfXu6quJ.js +1 -0
  120. package/dist/ui/assets/tool-ui-t6ocn6AG.js +1 -0
  121. package/dist/ui/assets/transformers-env-2Uj9Fgd2.js +1 -0
  122. package/dist/ui/assets/transformers-env-CgaV7qpU.js +1 -0
  123. package/dist/ui/assets/transformers.web-BxHOGVSB.js +45 -0
  124. package/dist/ui/assets/transformers.web-CuUo4MLm.js +39 -0
  125. package/dist/ui/assets/{tray-leave-runtime-Dk3OSbMO.js → tray-leave-runtime-ND08HLeb.js} +1 -1
  126. package/dist/ui/assets/{upgrade-detection-Dcc69AtK.js → upgrade-detection-Y3TdGYus.js} +1 -1
  127. package/dist/ui/assets/usb-picker-D_K0weAY.js +1 -0
  128. package/dist/ui/assets/{voice-reply-UcYXGV0I.js → voice-reply-DfKSbOma.js} +1 -1
  129. package/dist/ui/assets/wc-attach-BvytbCpS.js +13 -0
  130. package/dist/ui/assets/{wc-detached-CJFrvQ5w.js → wc-detached-Bw0mLsiP.js} +1 -1
  131. package/dist/ui/assets/wc-extension-DS-jtOJw.js +2 -0
  132. package/dist/ui/assets/wc-live-B3kXelNl.js +253 -0
  133. package/dist/ui/assets/wc-nav-tMI3vvSL.js +2 -0
  134. package/dist/ui/assets/wc-onboarding-Dm8BUVRJ.js +2 -0
  135. package/dist/ui/assets/wc-permissions-mVh0SOdZ.js +3 -0
  136. package/dist/ui/assets/wc-permissions-providers-BufEXbhX.js +2 -0
  137. package/dist/ui/assets/wc-permissions-registry-CR1rTd2H.js +1 -0
  138. package/dist/ui/assets/wc-permissions-registry-Dx-BRiKK.js +1 -0
  139. package/dist/ui/assets/wc-placeholder-DEo1-1V5.js +4 -0
  140. package/dist/ui/assets/wc-settings-D3QCZnur.js +24 -0
  141. package/dist/ui/assets/{wc-shell-BGaEWRGh.js → wc-shell-DgOdmKyR.js} +603 -101
  142. package/dist/ui/assets/wc-sprinkles-D5si03_4.js +2 -0
  143. package/dist/ui/assets/wc-tray-lTqtwMFb.js +5 -0
  144. package/dist/ui/assets/whisper-engine-Emfsg6Pq.js +1 -0
  145. package/dist/ui/assets/whisper-session-Dt-B3KmT.js +2 -0
  146. package/dist/ui/assets/worker-D1KsWRGg.js +1 -1
  147. package/dist/ui/assets/writable-vfs-client-BKZGifKZ.js +1 -0
  148. package/dist/ui/assets/{xai-grok-BX1SWx3y.js → xai-grok-D4a_2yZf.js} +1 -1
  149. package/dist/ui/assets/{xai-grok-CggP425A.js → xai-grok-Dpq_7ZV8.js} +1 -1
  150. package/dist/ui/electron-overlay-entry.css +37 -0
  151. package/dist/ui/electron-overlay-entry.js +5853 -222
  152. package/dist/ui/index.html +7 -3
  153. package/dist/ui/llm-proxy-sw.js +1 -1
  154. package/dist/ui/packages/webapp/index.html +7 -3
  155. package/dist/ui/preview-sw.js +1 -1
  156. package/package.json +6 -1
  157. package/dist/ui/assets/__vite-browser-external-CM3Eme-n.js +0 -1
  158. package/dist/ui/assets/account-store-Dha2nLml.js +0 -38
  159. package/dist/ui/assets/account-store-DmjUSua_.js +0 -99
  160. package/dist/ui/assets/adobe-CpNl5eLk.js +0 -2
  161. package/dist/ui/assets/adobe-CtI7bDCt.js +0 -1
  162. package/dist/ui/assets/backend-local-CMfz45hs.js +0 -9
  163. package/dist/ui/assets/biome_wasm-DEjrJMqV.js +0 -1
  164. package/dist/ui/assets/bsh-watchdog-B27e-Og-.js +0 -74
  165. package/dist/ui/assets/cdn-url-builder-Cq7LLgru.js +0 -1
  166. package/dist/ui/assets/chunk-CMxvf4Kt.js +0 -1
  167. package/dist/ui/assets/common-ewBM5he1.js +0 -1
  168. package/dist/ui/assets/composer-speech-DYshRh0w.js +0 -1
  169. package/dist/ui/assets/dip-De30SVSa.js +0 -1
  170. package/dist/ui/assets/dist-DElqKLgF.js +0 -43
  171. package/dist/ui/assets/esp32-BTVUAltJ.js +0 -1
  172. package/dist/ui/assets/esp32c2-Cvhq9547.js +0 -1
  173. package/dist/ui/assets/esp32c3-D9lOBWYZ.js +0 -1
  174. package/dist/ui/assets/esp32c5-D2poFXyG.js +0 -1
  175. package/dist/ui/assets/esp32c6-Ct3LxBMw.js +0 -1
  176. package/dist/ui/assets/esp32c61-BsudQf3e.js +0 -1
  177. package/dist/ui/assets/esp32h2-CPO25efF.js +0 -1
  178. package/dist/ui/assets/esp32p4-GHiT8voO.js +0 -1
  179. package/dist/ui/assets/esp32s2-DrH4e7iJ.js +0 -1
  180. package/dist/ui/assets/esp32s3-BHbeScNz.js +0 -1
  181. package/dist/ui/assets/esp8266-DNz2CP4r.js +0 -1
  182. package/dist/ui/assets/github-DRvbws57.js +0 -2
  183. package/dist/ui/assets/github-DcwUCUyU.js +0 -1
  184. package/dist/ui/assets/hear-20YdcW5b.js +0 -1
  185. package/dist/ui/assets/hear-BOsXTls8.js +0 -1
  186. package/dist/ui/assets/js-realm-worker-BWFis6jC.js +0 -5
  187. package/dist/ui/assets/kernel-worker-DuaByjq4.js +0 -9820
  188. package/dist/ui/assets/kokoro-engine-CHIq9iyX.js +0 -2
  189. package/dist/ui/assets/kokoro-engine-CjyxHaAM.js +0 -1
  190. package/dist/ui/assets/magick-wasm-BvNy9LFP.js +0 -1
  191. package/dist/ui/assets/main-D-3iO2Pb.js +0 -24
  192. package/dist/ui/assets/mount-B60ugIMY.js +0 -1
  193. package/dist/ui/assets/mount-TPowGzXN.js +0 -2
  194. package/dist/ui/assets/mount-id-DtHfwjbZ.js +0 -1
  195. package/dist/ui/assets/mount-picker-popup-BORxgnGu.js +0 -1
  196. package/dist/ui/assets/new-session-BjrjaQDu.js +0 -2
  197. package/dist/ui/assets/nodejs-BQ9Oov1A.js +0 -1
  198. package/dist/ui/assets/oauth-bootstrap-D15vXH8k.js +0 -2
  199. package/dist/ui/assets/oauth-service-CoJ-pYVD.js +0 -1
  200. package/dist/ui/assets/oauth-service-D49nt7eJ.js +0 -1
  201. package/dist/ui/assets/panel-rpc-handlers-Ca3yEyOL.js +0 -2
  202. package/dist/ui/assets/preview-vfs-responder-dyQBWIl5.js +0 -1
  203. package/dist/ui/assets/provider-CT4MGofi.js +0 -2
  204. package/dist/ui/assets/provider-store-access-BHHITTJF.js +0 -1
  205. package/dist/ui/assets/provider-store-access-BSS9maA7.js +0 -1
  206. package/dist/ui/assets/proxied-fetch-BBO8HwcV.js +0 -1
  207. package/dist/ui/assets/py-realm-worker-BnG_DxBd.js +0 -242
  208. package/dist/ui/assets/remote-terminal-view-CSqiig2G.js +0 -6
  209. package/dist/ui/assets/remote-vfs-client-BwJhhtIV.js +0 -1
  210. package/dist/ui/assets/secret-env-DcfTe28K.js +0 -1
  211. package/dist/ui/assets/session-freezer-NFd-CALu.js +0 -1
  212. package/dist/ui/assets/setup-sudo-KPDfIsQ7.js +0 -1
  213. package/dist/ui/assets/shared-B7TdM-Ik.js +0 -1
  214. package/dist/ui/assets/speak-D511iTBd.js +0 -1
  215. package/dist/ui/assets/speak-EKtIqp6j.js +0 -1
  216. package/dist/ui/assets/sudo-B4yfntyh.js +0 -4
  217. package/dist/ui/assets/tool-ui-N76-EdVc.js +0 -1
  218. package/dist/ui/assets/tool-ui-YOPqzMmL.js +0 -1
  219. package/dist/ui/assets/transformers-env-6vj5CcH9.js +0 -1
  220. package/dist/ui/assets/transformers-env-O5Vtz_xj.js +0 -1
  221. package/dist/ui/assets/transformers.web-C9_H_wuQ.js +0 -37
  222. package/dist/ui/assets/transformers.web-DJfCkvxA.js +0 -43
  223. package/dist/ui/assets/typescript-qBO0Z4wm.js +0 -448
  224. package/dist/ui/assets/wc-attach-B62W7N_T.js +0 -13
  225. package/dist/ui/assets/wc-extension-C1CIBnT2.js +0 -2
  226. package/dist/ui/assets/wc-live-B3Dxlxlf.js +0 -253
  227. package/dist/ui/assets/wc-nav-DWMYNnDA.js +0 -2
  228. package/dist/ui/assets/wc-onboarding-DpKk5u_V.js +0 -2
  229. package/dist/ui/assets/wc-placeholder-CGPP_IEm.js +0 -4
  230. package/dist/ui/assets/wc-settings-DjqUSzpO.js +0 -24
  231. package/dist/ui/assets/wc-sprinkles-B5_aCIM5.js +0 -2
  232. package/dist/ui/assets/wc-tray-kVPhrwG1.js +0 -5
  233. package/dist/ui/assets/web-BMWiUYJ-.js +0 -1
  234. package/dist/ui/assets/whisper-session-D89gZWHf.js +0 -2
  235. package/dist/ui/assets/writable-vfs-client-DMYsajEE.js +0 -1
@@ -1,242 +0,0 @@
1
- function e(e,t){if(typeof t!=`string`||!/^\d+\.\d+\.\d+(?:-[0-9A-Za-z.-]+)?$/.test(t))throw Error(`${e} must use an exact semver version in package.json`);return t}const t={EBADF:8,EEXIST:20,EINVAL:28,EIO:29,EISDIR:31,ENOENT:44,ENOTDIR:54,ENOTEMPTY:55,EPERM:63},n=16877;async function r(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 i(e,t){return e===``?t:`${e}/${t}`}function a(e,n){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;u(t.mount,async()=>{if(t.opfs.size>r)return;let n=await h(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(n,r){let i=n.opfs.children?.get(r);if(!i)throw new e.ErrnoError(t.ENOENT);return i},mknod(r,i,a,o){if(r.opfs.children?.has(i))throw new e.ErrnoError(t.EEXIST);let s=n.createNode(r,i,a,o);return r.opfs.children?.set(i,s),e.isDir(a)?u(r.mount,async()=>{let e=await(await m(r)).getDirectoryHandle(i,{create:!0});s.opfs.dirHandle=e}):e.isFile(a)&&u(r.mount,async()=>{let e=await(await m(r)).getFileHandle(i,{create:!0});s.opfs.fileHandle=e}),s},rename(n,r,a){let o=n.parent,s=n.name;if(!(s===a&&o===r)){if(r.opfs.children?.has(a))throw new e.ErrnoError(t.EEXIST);o.opfs.children?.delete(s),r.opfs.children?.set(a,n),n.name=a,n.parent=r,g(n,i(r.opfs.relPath,a)),e.isFile(n.mode)?u(n.mount,()=>_(n,o,s,r,a)):e.isDir(n.mode)&&u(n.mount,()=>v(n,o,s,r,a))}},unlink(n,r){let i=n.opfs.children?.get(r);if(!i)throw new e.ErrnoError(t.ENOENT);if(e.isDir(i.mode))throw new e.ErrnoError(t.EISDIR);n.opfs.children?.delete(r),e.isFile(i.mode)&&u(n.mount,async()=>{try{n.mount.opts.sahProvider.release(i.opfs.relPath)}catch{}await(await m(n)).removeEntry(r)})},rmdir(n,r){let i=n.opfs.children?.get(r);if(!i)throw new e.ErrnoError(t.ENOENT);if(!e.isDir(i.mode))throw new e.ErrnoError(t.ENOTDIR);if((i.opfs.children?.size??0)>0)throw new e.ErrnoError(t.ENOTEMPTY);n.opfs.children?.delete(r),u(n.mount,async()=>{await(await m(n)).removeEntry(r)})},readdir(n){if(!e.isDir(n.mode))throw new e.ErrnoError(t.ENOTDIR);let r=[`.`,`..`];for(let e of n.opfs.children?.keys()??[])r.push(e);return r},symlink(r,i,a){if(r.opfs.children?.has(i))throw new e.ErrnoError(t.EEXIST);let o=n.createNode(r,i,41471,0);return o.opfs.linkTarget=a,r.opfs.children?.set(i,o),o},readlink(n){if(!e.isLink(n.mode))throw new e.ErrnoError(t.EINVAL);return n.opfs.linkTarget??``}}}function o(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(n,r,i,a,o){let s=n.sah;if(!s)throw new e.ErrnoError(t.EBADF);let c=new Uint8Array(r.buffer,r.byteOffset+i,a);return s.read(c,{at:o})},write(n,r,i,a,o){let s=n.sah;if(!s)throw new e.ErrnoError(t.EBADF);let c=new Uint8Array(r.buffer,r.byteOffset+i,a),l=s.write(c,{at:o}),u=Math.max(n.node.opfs.size,o+l);return n.node.opfs.size=u,n.node.opfs.mtime=Date.now(),n.node.timestamp=n.node.opfs.mtime,l},llseek(n,r,i){let a=r;if(i===1)a=n.position+r;else if(i===2){let e=n.sah;a=(e?e.getSize():n.node.opfs.size)+r}if(a<0)throw new e.ErrnoError(t.EINVAL);return n.position=a,a}}}function s(e,r,i,a){for(let[o,s]of a.entries){if(o===``)continue;let a=o.split(`/`),c=i;for(let n=0;n<a.length-1;n++){let r=a[n],i=c.opfs.children?.get(r);if(!i)throw new e.ErrnoError(t.EIO);c=i}let l=a[a.length-1];if(s.kind===`directory`){let e=r.createNode(c,l,n,0);e.opfs.dirHandle=s.dirHandle,e.opfs.children=new Map,c.opfs.children?.set(l,e)}else{let e=r.createNode(c,l,33188,0);e.opfs.fileHandle=s.fileHandle,e.opfs.size=s.size,e.opfs.mtime=s.mtime,e.timestamp=s.mtime,c.opfs.children?.set(l,e)}}}function c(e){let r={mount(i){let{prewalk:a}=i.opts,o=a.entries.get(``);if(o?.kind!==`directory`)throw new e.ErrnoError(t.EINVAL);let c=r.createNode(null,`/`,n,0);return c.mount=i,c.opfs.dirHandle=o.dirHandle,c.opfs.children=new Map,s(e,r,c,a),c},createNode(n,a,o,s=0){if(!e.isDir(o)&&!e.isFile(o)&&!e.isLink(o))throw new e.ErrnoError(t.EINVAL);let c=n===null?``:i(n.opfs?.relPath??``,a),l=e.createNode(n,a,o,s);return l.node_ops=r.node_ops,l.stream_ops=r.stream_ops,l.timestamp=Date.now(),n!==null&&(l.mount=n.mount),l.opfs={relPath:c,size:0,mtime:l.timestamp},e.isDir(o)&&(l.opfs.children=new Map),l},node_ops:void 0,stream_ops:void 0};return r.node_ops=a(e,r),r.stream_ops=o(e),r}const l=new WeakMap;function u(e,t){let n=(l.get(e)??Promise.resolve()).then(t,t);l.set(e,n),e.opts.flush||(e.opts.flush=()=>l.get(e)??Promise.resolve())}async function d(e){await(l.get(e)??Promise.resolve())}var f=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 p(){let e=new Map,t=new Set,n=new Set;return{provider:{acquire(r,i){if(n.has(r))throw Error(`OPFS SAH lease conflict: ${r}`);n.add(r);let a=e.get(r);return a||(a={data:new Uint8Array,dirty:!0},e.set(r,a),t.add(r)),new f(a,()=>{n.delete(r),a.dirty&&t.add(r)})},release(e){n.delete(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 m(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 h(e){if(e.opfs.fileHandle)return e.opfs.fileHandle;let t=await(await m(e.parent)).getFileHandle(e.name,{create:!0});return e.opfs.fileHandle=t,t}function g(e,t){if(e.opfs.relPath=t,e.opfs.children)for(let[n,r]of e.opfs.children)g(r,i(t,n))}async function _(e,t,n,r,i){let a=await m(t),o=await m(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 v(e,t,n,r,i){let a=await m(t),o=await m(r),s=await a.getDirectoryHandle(n),c=await o.getDirectoryHandle(i,{create:!0});await y(s,c),await a.removeEntry(n,{recursive:!0}),e.opfs.dirHandle=c}async function y(e,t){let n=e;for await(let[e,r]of n)if(r.kind===`directory`)await y(r,await t.getDirectoryHandle(e,{create:!0}));else{let n=await r.getFile(),i=new Uint8Array(await n.arrayBuffer()),a=await(await t.getFileHandle(e,{create:!0})).createWritable();await a.write(i),await a.close()}}function b(e){return`slicc: synchronous access to mounted path '${e}' is not supported. Use the async slicc.fs module (e.g. \`await slicc.fs.read_text('${e}')\` or \`await slicc.fs.listdir('${e}')\`), or copy the file into the VFS first (\`await slicc.fs.read_bytes('${e}/<file>')\` then write it under /tmp).`}function x(e,n){let r=new e.ErrnoError(t.EIO);return r.message=b(n),r}function S(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 x(n(e),C(e))},setattr:e=>{throw x(n(e),C(e))},lookup:e=>{throw x(n(e),C(e))},mknod:e=>{throw x(n(e),C(e))},rename:e=>{throw x(n(e),C(e))},unlink:e=>{throw x(n(e),C(e))},rmdir:e=>{throw x(n(e),C(e))},readdir:e=>{throw x(n(e),C(e))},symlink:e=>{throw x(n(e),C(e))},readlink:e=>{throw x(n(e),C(e))}},stream_ops:{open:e=>{throw x(n(e.node),C(e.node))},close:()=>{},read:e=>{throw x(n(e.node),C(e.node))},write:e=>{throw x(n(e.node),C(e.node))},llseek:e=>{throw x(n(e.node),C(e.node))}}};function n(t){return e}return t}function C(e){let t=e.mount;return t?.opts?.mountPath??t?.mountpoint??`<unknown mount>`}function w(e,t){let n=e.MOUNT_BOMB_FS;return n||(n=S(t),e.MOUNT_BOMB_FS=n),n}function T(e,t,n=()=>{}){if(t.length===0)return;let r=w(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 E(e){return b(e)}async function D(e,t){if(t.length===0)return;let n={};for(let e of t)n[e]=E(e);let r=JSON.stringify({prefixes:t,messages:n});e.globals.set(`__slicc_mount_data`,r);try{await e.runPythonAsync(`
2
- import builtins as _slicc_builtins
3
- import io as _slicc_io
4
- import os as _slicc_os
5
- import os.path as _slicc_osp
6
- import errno as _slicc_errno
7
- import json as _slicc_json
8
-
9
- _slicc_data = _slicc_json.loads(__slicc_mount_data)
10
- _slicc_mount_prefixes = list(_slicc_data['prefixes'])
11
- _slicc_mount_messages = dict(_slicc_data['messages'])
12
- del _slicc_data
13
-
14
- def _slicc_match_mount_prefix(path):
15
- if path is None:
16
- return None
17
- if isinstance(path, int):
18
- return None
19
- try:
20
- s = _slicc_os.fspath(path)
21
- except TypeError:
22
- return None
23
- if isinstance(s, bytes):
24
- try:
25
- s = s.decode('utf-8', 'surrogateescape')
26
- except Exception:
27
- return None
28
- if not isinstance(s, str):
29
- return None
30
- try:
31
- resolved = _slicc_osp.abspath(s)
32
- except Exception:
33
- return None
34
- for prefix in _slicc_mount_prefixes:
35
- if resolved == prefix or resolved.startswith(prefix + '/'):
36
- return prefix
37
- return None
38
-
39
- def _slicc_raise_mount_guard(path, prefix):
40
- msg = _slicc_mount_messages.get(prefix)
41
- if not msg:
42
- msg = "slicc: synchronous access to mounted path '" + prefix + "' is not supported; use the async slicc.fs module."
43
- raise OSError(_slicc_errno.EIO, msg, str(path))
44
-
45
- _slicc_orig_builtins_open = _slicc_builtins.open
46
- _slicc_orig_io_open = _slicc_io.open
47
- _slicc_orig_listdir = _slicc_os.listdir
48
- _slicc_orig_scandir = _slicc_os.scandir
49
- _slicc_orig_stat = _slicc_os.stat
50
- _slicc_orig_lstat = _slicc_os.lstat
51
- _slicc_orig_mkdir = _slicc_os.mkdir
52
- _slicc_orig_remove = _slicc_os.remove
53
- _slicc_orig_rename = _slicc_os.rename
54
-
55
- def _slicc_guarded_builtins_open(file, *args, **kwargs):
56
- if isinstance(file, int):
57
- return _slicc_orig_builtins_open(file, *args, **kwargs)
58
- prefix = _slicc_match_mount_prefix(file)
59
- if prefix is not None:
60
- _slicc_raise_mount_guard(file, prefix)
61
- return _slicc_orig_builtins_open(file, *args, **kwargs)
62
-
63
- def _slicc_guarded_io_open(file, *args, **kwargs):
64
- if isinstance(file, int):
65
- return _slicc_orig_io_open(file, *args, **kwargs)
66
- prefix = _slicc_match_mount_prefix(file)
67
- if prefix is not None:
68
- _slicc_raise_mount_guard(file, prefix)
69
- return _slicc_orig_io_open(file, *args, **kwargs)
70
-
71
- def _slicc_make_path_guard(orig):
72
- def _guarded(path, *args, **kwargs):
73
- prefix = _slicc_match_mount_prefix(path)
74
- if prefix is not None:
75
- _slicc_raise_mount_guard(path, prefix)
76
- return orig(path, *args, **kwargs)
77
- return _guarded
78
-
79
- def _slicc_guarded_rename(src, dst, *args, **kwargs):
80
- for p in (src, dst):
81
- prefix = _slicc_match_mount_prefix(p)
82
- if prefix is not None:
83
- _slicc_raise_mount_guard(p, prefix)
84
- return _slicc_orig_rename(src, dst, *args, **kwargs)
85
-
86
- _slicc_builtins.open = _slicc_guarded_builtins_open
87
- _slicc_io.open = _slicc_guarded_io_open
88
- _slicc_os.listdir = _slicc_make_path_guard(_slicc_orig_listdir)
89
- _slicc_os.scandir = _slicc_make_path_guard(_slicc_orig_scandir)
90
- _slicc_os.stat = _slicc_make_path_guard(_slicc_orig_stat)
91
- _slicc_os.lstat = _slicc_make_path_guard(_slicc_orig_lstat)
92
- _slicc_os.mkdir = _slicc_make_path_guard(_slicc_orig_mkdir)
93
- _slicc_os.remove = _slicc_make_path_guard(_slicc_orig_remove)
94
- _slicc_os.rename = _slicc_guarded_rename
95
- `)}finally{try{e.runPython(`del __slicc_mount_data`)}catch{}}}var O=class{port;nextId=1;pending=new Map;eventSubscribers=new Map;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);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?.()}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),()=>{let n=this.eventSubscribers.get(e);n&&(n.delete(t),n.size===0&&this.eventSubscribers.delete(e))}}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()}};function k(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 A(e,t){let n=k(t);e.registerJsModule(`_slicc_fs_js`,n),await e.runPythonAsync(`
96
- import sys
97
- import types
98
- import js
99
-
100
- def _build_slicc_module(_bridge):
101
- fs_module = types.ModuleType("slicc.fs")
102
-
103
- async def listdir(path):
104
- result = await _bridge.listdir(path)
105
- return [str(name) for name in result.to_py()] if hasattr(result, "to_py") else [str(name) for name in result]
106
-
107
- async def read_bytes(path):
108
- result = await _bridge.readBytes(path)
109
- # Pyodide returns JS Uint8Array as memoryview; coerce to bytes.
110
- if hasattr(result, "to_bytes"):
111
- return result.to_bytes()
112
- if isinstance(result, memoryview):
113
- return bytes(result)
114
- return bytes(result)
115
-
116
- async def read_text(path, encoding="utf-8"):
117
- data = await read_bytes(path)
118
- return data.decode(encoding)
119
-
120
- async def write_bytes(path, data):
121
- if isinstance(data, str):
122
- raise TypeError("write_bytes expects bytes-like; use write_text for str")
123
- if isinstance(data, (bytes, bytearray, memoryview)):
124
- payload = bytes(data)
125
- else:
126
- payload = bytes(data)
127
- # Convert Python bytes to a real JS Uint8Array before crossing
128
- # the realm RPC boundary. The bridge call ultimately hits
129
- # \`port.postMessage\` (see realm-rpc.ts), which structured-
130
- # clones its argument; a Python \`bytes\` would arrive as a
131
- # PyProxy and trigger DataCloneError. \`js.Uint8Array.new\`
132
- # copies the buffer into a JS typed array that clones cleanly.
133
- await _bridge.writeBytes(path, js.Uint8Array.new(payload))
134
-
135
- async def write_text(path, text, encoding="utf-8"):
136
- if not isinstance(text, str):
137
- raise TypeError("write_text expects str; use write_bytes for bytes")
138
- await write_bytes(path, text.encode(encoding))
139
-
140
- async def stat(path):
141
- result = await _bridge.stat(path)
142
- obj = result.to_py() if hasattr(result, "to_py") else result
143
- if isinstance(obj, dict):
144
- return {
145
- "isDirectory": bool(obj.get("isDirectory", False)),
146
- "isFile": bool(obj.get("isFile", False)),
147
- "size": int(obj.get("size", 0)),
148
- }
149
- return {
150
- "isDirectory": bool(getattr(obj, "isDirectory", False)),
151
- "isFile": bool(getattr(obj, "isFile", False)),
152
- "size": int(getattr(obj, "size", 0)),
153
- }
154
-
155
- async def exists(path):
156
- result = await _bridge.exists(path)
157
- return bool(result)
158
-
159
- async def mkdir(path, parents=False):
160
- # The underlying vfs.mkdir is recursive ({recursive: true} in
161
- # realm-host.ts), matching parents=True semantics. With
162
- # parents=False we raise FileExistsError when the target
163
- # already exists, mirroring pathlib.Path.mkdir(parents=False).
164
- if not parents:
165
- try:
166
- already = await exists(path)
167
- except Exception:
168
- already = False
169
- if already:
170
- raise FileExistsError(path)
171
- await _bridge.mkdir(path)
172
-
173
- async def remove(path):
174
- await _bridge.remove(path)
175
-
176
- async def walk(path):
177
- results = []
178
- async def _visit(current):
179
- names = await listdir(current)
180
- dirnames = []
181
- filenames = []
182
- for name in names:
183
- child = current + "/" + name if current != "/" else "/" + name
184
- try:
185
- st = await stat(child)
186
- except Exception:
187
- continue
188
- if st["isDirectory"]:
189
- dirnames.append(name)
190
- elif st["isFile"]:
191
- filenames.append(name)
192
- results.append((current, dirnames, filenames))
193
- for d in list(dirnames):
194
- child = current + "/" + d if current != "/" else "/" + d
195
- await _visit(child)
196
- await _visit(path)
197
- return results
198
-
199
- fs_module.listdir = listdir
200
- fs_module.read_bytes = read_bytes
201
- fs_module.read_text = read_text
202
- fs_module.write_bytes = write_bytes
203
- fs_module.write_text = write_text
204
- fs_module.stat = stat
205
- fs_module.exists = exists
206
- fs_module.mkdir = mkdir
207
- fs_module.remove = remove
208
- fs_module.walk = walk
209
-
210
- slicc_module = types.ModuleType("slicc")
211
- slicc_module.fs = fs_module
212
- sys.modules["slicc"] = slicc_module
213
- sys.modules["slicc.fs"] = fs_module
214
- return slicc_module
215
-
216
- import _slicc_fs_js as _bridge
217
- _build_slicc_module(_bridge)
218
- del _build_slicc_module
219
- del _bridge
220
- `)}`${e(`pyodide`,`0.29.4`)}`;async function j(e,t,n=()=>import(`./pyodide-M7UA50Oh.js`)){let r=[],i=[],a=new O(t),o;try{o=await(await n()).loadPyodide({indexURL:e.pyodideIndexURL,fullStdLib:!1})}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=await M(o,e,s);await N(o,e,s),await P(o,a,s);try{o.FS.chdir(e.cwd)}catch{}F(o,e,r,i);let l=await I(o,i);await L(c,e,a,s),a.dispose();let u={type:`realm-done`,stdout:r.join(``),stderr:i.join(``),exitCode:l};t.postMessage(u)}async function M(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 V(e,r,t.opfsMountDbName,n,{skipMountPaths:a})).mounts}catch(e){return n(`VFS→Pyodide OPFS mount failed: ${z(e)}`),[]}}async function N(e,t,n){let r=t.mountPoints??[];if(r.length!==0){try{T(e.FS,r.map(e=>e.path),n)}catch(e){n(`bomb overlay install failed: ${z(e)}`)}try{await D(e,r.map(e=>e.path))}catch(e){n(`python mount guard install failed: ${z(e)}`)}}}async function P(e,t,n){try{await A(e,t)}catch(e){n(`slicc.fs registration failed: ${z(e)}`)}}function F(e,t,n,r){e.setStdout({batched:e=>n.push(e+`
221
- `)}),e.setStderr({batched:e=>r.push(e+`
222
- `)});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 I(e,t){let n;try{await e.runPythonAsync(`
223
- import sys
224
- import traceback
225
-
226
- __slicc_exit_code = 0
227
- try:
228
- sys.argv = __slicc_argv
229
- exec(compile(__slicc_code, __slicc_filename, "exec"), {"__name__": "__main__", "__file__": __slicc_filename})
230
- except SystemExit as exc:
231
- code = exc.code
232
- if code is None:
233
- __slicc_exit_code = 0
234
- elif isinstance(code, int):
235
- __slicc_exit_code = code
236
- else:
237
- print(code, file=sys.stderr)
238
- __slicc_exit_code = 1
239
- except BaseException:
240
- traceback.print_exc()
241
- __slicc_exit_code = 1
242
- `);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 L(e,t,n,r){if(t.opfsMountDbName!==void 0){try{await W(e)}catch(e){r(`Pyodide→VFS OPFS flush failed: ${e instanceof Error?e.message:String(e)}`)}try{await G(e,n)}catch(e){r(`Pyodide→kernel VFS invalidation failed: ${z(e)}`)}}}const R=new Set([`dev`,`proc`,`lib`,`tmp`,`home`]);function z(e){if(e&&typeof e==`object`){let t=e,n=typeof t.errno==`number`,r=typeof t.code==`string`;if(n||r){let e=typeof t.name==`string`&&t.name?t.name:`Error`,i=typeof t.message==`string`?t.message:``,a=[];n&&a.push(`errno ${t.errno}`),r&&a.push(t.code);let o=a.length?` (${a.join(`, `)})`:``;return i?`${e}: ${i}${o}`:`${e}${o}`}}return e instanceof Error?e.message:String(e)}function B(e){let t=e.FS.filesystems,n=t.OPFS_SYNC_FS;return n||(n=c(e.FS),t.OPFS_SYNC_FS=n),n}async function V(e,t,n,r=()=>{},i={}){let a=[],o=i.skipMountPaths??new Set,s=navigator.storage;if(!s?.getDirectory)return r(`VFS→Pyodide OPFS mount skipped: navigator.storage.getDirectory unavailable`),{mounts:a};let c;try{c=await s.getDirectory()}catch(e){return r(`VFS→Pyodide OPFS mount: getDirectory() failed: ${z(e)}`),{mounts:a}}let l;try{l=await c.getDirectoryHandle(n,{create:!0})}catch(e){return r(`VFS→Pyodide OPFS mount: opening '${n}' failed: ${z(e)}`),{mounts:a}}let u=B(e);for(let n of t){if(n===`/`){await H(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 U(e,u,n,t,a)}catch(e){r(`VFS→Pyodide OPFS mount '${n}' failed: ${z(e)}`)}}return{mounts:a}}async function H(e,t,n,r,i,a){try{let o=n;for await(let[n,s]of o){if(s.kind!==`directory`||R.has(n))continue;let o=`/${n}`;if(!r.has(o))try{await U(e,t,o,s,i)}catch(e){a(`VFS→Pyodide OPFS mount '${o}' failed: ${z(e)}`)}}}catch(e){a(`VFS→Pyodide OPFS mount '/' failed: ${z(e)}`)}}async function U(e,t,n,i,a){try{e.FS.stat(n)}catch{e.FS.mkdirTree(n)}let o=await r(i),s=p();await s.preload(o);let c={rootHandle:i,prewalk:o,sahProvider:s.provider},l=e.FS.mount(t,c,n),u=l?.mount??{opts:c,mountpoint:n,root:l};a.push({pyPath:n,mount:u,rootHandle:i,flushBuffers:s.flush,getDirtyPaths:s.getDirtyPaths})}async function W(e){for(let t of e)await d(t.mount),await t.flushBuffers(t.rootHandle)}async function G(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 K={postMessage:(e,t)=>t?self.postMessage(e,t):self.postMessage(e),addEventListener:(e,t)=>self.addEventListener(e,t),removeEventListener:(e,t)=>self.removeEventListener(e,t)};self.addEventListener(`message`,e=>{if(e.data?.type!==`realm-init`)return;let t=e.data;t.kind===`py`&&j(t,K).catch(e=>{let t={type:`realm-error`,message:e instanceof Error?e.message:String(e)};self.postMessage(t)})});
@@ -1,6 +0,0 @@
1
- const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/xterm-BmfB5bmM.css"])))=>i.map(i=>d[i]);
2
- import{t as e}from"./preload-helper-zJ_50EbN.js";import"./tool-ui-YOPqzMmL.js";import"./picker-approval-tzbkMw-e.js";import{a as t}from"./mount-picker-popup-BORxgnGu.js";import{n,r,t as i}from"./hid-device-registry-D2LsJCRr.js";import"./browser-ukv9lM61.js";import{a,i as o,n as s}from"./serial-port-registry-Bc4wlwED.js";import{i as c,r as l,t as u}from"./usb-device-registry-BP58Vi0S.js";import{TerminalSessionClient as d}from"./terminal-session-client-CbAduNfC.js";new TextDecoder(`utf-8`,{fatal:!1}),new TextEncoder;var f=new Set([`--vid`,`--pid`,`--baud`,`--data-bits`,`--stop-bits`,`--parity`,`--flow-control`,`--buffer-size`,`--bytes`,`--until`,`--timeout-ms`,`--dtr`,`--rts`,`--break`,`--__resolved`]);function p(e){let t=[],n=new Map,r=new Set;for(let i=0;i<e.length;i++){let a=e[i];a.startsWith(`-`)?f.has(a)?n.set(a,e[++i]??``):r.add(a):t.push(a)}return{positionals:t,flags:n,bools:r}}function m(e,t){let n=/^0x/i.test(e)?parseInt(e,16):parseInt(e,10);if(!Number.isFinite(n)||Number.isNaN(n))throw Error(`invalid ${t}: '${e}'`);return n}function h(e){let t={};return e.has(`--vid`)&&(t.usbVendorId=m(e.get(`--vid`),`vid`)),e.has(`--pid`)&&(t.usbProductId=m(e.get(`--pid`),`pid`)),Object.keys(t).length>0?[t]:[]}`${s}${s}`;var g=new Set([`--port`,`--baud`,`--vid`,`--pid`]),_=115200;function v(e){let t=[],n=new Map,r=new Set;for(let i=0;i<e.length;i++){let a=e[i];a.startsWith(`-`)?g.has(a)?n.set(a,e[++i]??``):r.add(a):t.push(a)}return{positionals:t,flags:n,bools:r}}`${_}`;var y=new Set([`--vid`,`--pid`,`--usage-page`,`--usage`,`--__resolved`,`--timeout`]);function b(e){let t=[],n=new Map,r=new Set;for(let i=0;i<e.length;i++){let a=e[i];a.startsWith(`-`)?y.has(a)?n.set(a,e[++i]??``):r.add(a):t.push(a)}return{positionals:t,flags:n,bools:r}}function x(e,t){let n=/^0x/i.test(e)?parseInt(e,16):parseInt(e,10);if(!Number.isFinite(n)||Number.isNaN(n))throw Error(`invalid ${t}: '${e}'`);return n}function S(e){let t={};return e.has(`--vid`)&&(t.vendorId=x(e.get(`--vid`),`vid`)),e.has(`--pid`)&&(t.productId=x(e.get(`--pid`),`pid`)),e.has(`--usage-page`)&&(t.usagePage=x(e.get(`--usage-page`),`usage-page`)),e.has(`--usage`)&&(t.usage=x(e.get(`--usage`),`usage`)),Object.keys(t).length>0?[t]:[]}`${i}`;var C=new Set([`--vid`,`--pid`,`--class`,`--subclass`,`--protocol`,`--serial`,`--request-type`,`--recipient`,`--request`,`--value`,`--index`,`--__resolved`]);function w(e){let t=[],n=new Map,r=new Set;for(let i=0;i<e.length;i++){let a=e[i];a.startsWith(`-`)?C.has(a)?n.set(a,e[++i]??``):r.add(a):t.push(a)}return{positionals:t,flags:n,bools:r}}function T(e,t){let n=/^0x/i.test(e)?parseInt(e,16):parseInt(e,10);if(!Number.isFinite(n)||Number.isNaN(n))throw Error(`invalid ${t}: '${e}'`);return n}function E(e){let t={};return e.has(`--vid`)&&(t.vendorId=T(e.get(`--vid`),`vid`)),e.has(`--pid`)&&(t.productId=T(e.get(`--pid`),`pid`)),e.has(`--class`)&&(t.classCode=T(e.get(`--class`),`class`)),e.has(`--subclass`)&&(t.subclassCode=T(e.get(`--subclass`),`subclass`)),e.has(`--protocol`)&&(t.protocolCode=T(e.get(`--protocol`),`protocol`)),e.has(`--serial`)&&(t.serialNumber=e.get(`--serial`)),Object.keys(t).length>0?[t]:[]}`${u}`;var D={background:`#141414`,foreground:`#f2f2f2`,cursor:`#3562ff`,cursorAccent:`#141414`,selectionBackground:`#3562ff40`,selectionForeground:`#ffffff`,black:`#1a1a1a`,red:`#e34850`,green:`#2d9d78`,yellow:`#e68619`,blue:`#3562ff`,magenta:`#a962e8`,cyan:`#2db9be`,white:`#f2f2f2`,brightBlack:`#5a5a5a`,brightRed:`#e34850`,brightGreen:`#2d9d78`,brightYellow:`#e68619`,brightBlue:`#4a75ff`,brightMagenta:`#a962e8`,brightCyan:`#2db9be`,brightWhite:`#ffffff`},O={background:`#f0f0f0`,foreground:`#1a1a1a`,cursor:`#2b54db`,cursorAccent:`#f0f0f0`,selectionBackground:`#2b54db30`,selectionForeground:`#000000`,black:`#1a1a1a`,red:`#d73220`,green:`#268e6c`,yellow:`#d17a00`,blue:`#2b54db`,magenta:`#8839ef`,cyan:`#1a9088`,white:`#e8e8e8`,brightBlack:`#6e6e6e`,brightRed:`#d73220`,brightGreen:`#268e6c`,brightYellow:`#d17a00`,brightBlue:`#1e44c4`,brightMagenta:`#8839ef`,brightCyan:`#1a9088`,brightWhite:`#ffffff`},k=`\x1B[34m/\x1B[0m \x1B[90m$\x1B[0m `,A=4,j=class{options;client;terminal=null;fitAddon=null;terminalHost=null;previewHost=null;previewUrls=[];hasPreview=!1;previewStateListener=null;resizeObserver=null;themeObserver=null;currentLine=``;cursorPos=0;history=[];historyIndex=-1;isExecuting=!1;execInFlight=null;suppressOutput=!1;tabBusy=!1;constructor(e){this.options=e;let t=e.sid??`panel-terminal-${Date.now()}`;this.client=new d({client:e.client,sid:t,onEvent:e=>this.handleEvent(e)})}async mount(t){let{Terminal:n}=await e(async()=>{let{Terminal:e}=await import(`./xterm-DooSxjI5.js`);return{Terminal:e}},[]),{FitAddon:r}=await e(async()=>{let{FitAddon:e}=await import(`./addon-fit-DthTIhi3.js`);return{FitAddon:e}},[]);await e(()=>Promise.resolve({}),__vite__mapDeps([0]));let i=!document.documentElement.classList.contains(`theme-light`);this.terminal=new n({cursorBlink:!0,fontSize:11,fontFamily:`'Source Code Pro', 'JetBrains Mono', 'Fira Code', 'Cascadia Code', monospace`,theme:i?D:O,convertEol:!0}),this.themeObserver=new MutationObserver(()=>{if(!this.terminal)return;let e=document.documentElement.classList.contains(`theme-light`);this.terminal.options.theme=e?O:D}),this.themeObserver.observe(document.documentElement,{attributes:!0,attributeFilter:[`class`]}),this.fitAddon=new r,this.terminal.loadAddon(this.fitAddon),t.replaceChildren(),this.terminalHost=document.createElement(`div`),this.terminalHost.className=`terminal-panel__terminal-host`,t.appendChild(this.terminalHost),this.previewHost=document.createElement(`div`),this.previewHost.className=`terminal-panel__preview`,t.appendChild(this.previewHost),this.terminal.open(this.terminalHost),this.fitAddon.fit(),this.resizeObserver=new ResizeObserver(()=>this.refit()),this.resizeObserver.observe(this.terminalHost),this.terminal.writeln(`\x1B[1mslicc\x1B[0m \x1B[90mshell (kernel)\x1B[0m`),this.terminal.writeln(`\x1B[90mType "help" for available commands.\x1B[0m
3
- `),await this.client.open({cwd:this.options.cwd,env:this.options.env}),this.showPrompt(),this.setupInputHandler()}refit(){this.fitAddon?.fit()}clearTerminal(){this.terminal?.clear()}async executeCommandInTerminal(e){let t=e.trim();return t?this.terminal?this.isExecuting||this.currentLine.length>0?{stdout:``,stderr:`terminal is busy; finish current input first
4
- `,exitCode:1}:(this.history[this.history.length-1]!==t&&this.history.push(t),this.historyIndex=-1,this.terminal.write(t),this.terminal.writeln(``),this.runRemote(t)):this.client.exec(t):{stdout:``,stderr:``,exitCode:0}}setPreviewStateListener(e){this.previewStateListener=e,e?.(this.hasPreview)}dispose(){this.clearMediaPreview(),this.themeObserver?.disconnect(),this.themeObserver=null,this.resizeObserver?.disconnect(),this.resizeObserver=null,this.terminal?.dispose(),this.terminal=null,this.fitAddon=null,this.terminalHost=null,this.previewHost=null,this.client.close(),this.client.dispose()}renderMediaPreview(e){if(!this.previewHost)return;let t=Uint8Array.from(atob(e.data),e=>e.charCodeAt(0)),n=URL.createObjectURL(new Blob([t],{type:e.mediaType}));this.previewUrls.push(n);let r=document.createElement(`div`);r.className=`terminal-panel__preview-item`;let i=document.createElement(`div`);i.className=`terminal-panel__preview-label`;let a=e.path.split(`/`).pop()??e.path;if(i.textContent=`${a} · ${e.mediaType}`,r.appendChild(i),e.mediaType.startsWith(`video/`)){let e=document.createElement(`video`);e.className=`terminal-panel__preview-media`,e.controls=!0,e.autoplay=!0,e.loop=!0,e.muted=!0,e.playsInline=!0,e.src=n,e.addEventListener(`loadedmetadata`,()=>this.refit(),{once:!0}),r.appendChild(e)}else{let e=document.createElement(`img`);e.className=`terminal-panel__preview-media`,e.alt=a,e.src=n,e.addEventListener(`load`,()=>this.refit(),{once:!0}),r.appendChild(e)}this.previewHost.appendChild(r),this.previewHost.classList.add(`terminal-panel__preview--visible`),this.hasPreview=!0,this.previewStateListener?.(!0)}clearMediaPreview(){for(let e of this.previewUrls)URL.revokeObjectURL(e);this.previewUrls=[],this.previewHost&&(this.previewHost.replaceChildren(),this.previewHost.classList.remove(`terminal-panel__preview--visible`)),this.hasPreview=!1,this.previewStateListener?.(!1)}showPrompt(){this.terminal?.write(k)}setupInputHandler(){this.terminal&&this.terminal.onData(e=>{if(this.isExecuting){(e===``||e.length===1&&e.charCodeAt(0)===3)&&(this.client.signal(`SIGINT`),this.terminal?.writeln(`^C`));return}if(e.startsWith(`\x1B[`)||e.startsWith(`\x1BO`)){switch(e){case`\x1B[A`:this.handleHistoryUp();return;case`\x1B[B`:this.handleHistoryDown();return;case`\x1B[C`:this.handleArrowRight();return;case`\x1B[D`:this.handleArrowLeft();return;case`\x1B[H`:case`\x1BOH`:case`\x1B[1~`:this.handleHome();return;case`\x1B[F`:case`\x1BOF`:case`\x1B[4~`:this.handleEnd();return;case`\x1B[3~`:this.handleDelete();return}return}for(let t of e)switch(t){case`\r`:this.handleEnter();break;case``:this.handleBackspace();break;case``:this.terminal?.writeln(`^C`),this.currentLine=``,this.cursorPos=0,this.showPrompt();break;case` `:this.handleTab();break;default:t>=` `&&this.insertChar(t)}})}insertChar(e){if(!this.terminal)return;let t=this.currentLine.slice(this.cursorPos);this.currentLine=this.currentLine.slice(0,this.cursorPos)+e+t,this.cursorPos++,this.terminal.write(e),t.length>0&&(this.terminal.write(t),this.terminal.write(`\x1b[${t.length}D`))}handleBackspace(){if(!this.terminal||this.cursorPos<=0)return;let e=this.currentLine.slice(this.cursorPos);this.currentLine=this.currentLine.slice(0,this.cursorPos-1)+e,this.cursorPos--,this.terminal.write(`\b\x1B[K`),e.length>0&&(this.terminal.write(e),this.terminal.write(`\x1b[${e.length}D`))}handleDelete(){if(!this.terminal||this.cursorPos>=this.currentLine.length)return;let e=this.currentLine.slice(this.cursorPos+1);this.currentLine=this.currentLine.slice(0,this.cursorPos)+e,this.terminal.write(`\x1B[K`),e.length>0&&(this.terminal.write(e),this.terminal.write(`\x1b[${e.length}D`))}handleArrowLeft(){this.cursorPos<=0||(this.cursorPos--,this.terminal?.write(`\x1B[D`))}handleArrowRight(){this.cursorPos>=this.currentLine.length||(this.cursorPos++,this.terminal?.write(`\x1B[C`))}handleHome(){this.cursorPos!==0&&(this.terminal?.write(`\x1b[${this.cursorPos}D`),this.cursorPos=0)}handleEnd(){let e=this.currentLine.length-this.cursorPos;e<=0||(this.terminal?.write(`\x1b[${e}C`),this.cursorPos=this.currentLine.length)}handleHistoryUp(){if(this.history.length===0)return;let e=this.historyIndex===-1?this.history.length-1:Math.max(0,this.historyIndex-1);this.historyIndex=e,this.replaceLine(this.history[e])}handleHistoryDown(){if(this.historyIndex===-1)return;let e=this.historyIndex+1;e>=this.history.length?(this.historyIndex=-1,this.replaceLine(``)):(this.historyIndex=e,this.replaceLine(this.history[e]))}async handleTab(){if(!this.terminal||this.tabBusy)return;this.tabBusy=!0;let e=this.isExecuting;this.isExecuting=!0;try{let{currentWord:e,isFirstWord:t,compgenCmd:n}=B(this.currentLine.slice(0,this.cursorPos));this.suppressOutput=!0;let r=``;try{r=(await this.client.exec(n)).stdout}finally{this.suppressOutput=!1}let i=r.split(`
5
- `).filter(Boolean);if(i.length===0)return;if(i.length===1){let n=i[0],r=n.slice(e.length);r&&this.insertText(r);let a=` `;if(!t){this.suppressOutput=!0;try{(await this.client.exec(V(n))).stdout.trim()===n&&(a=`/`)}finally{this.suppressOutput=!1}}this.insertText(a);return}let a=H(i).slice(e.length);if(a){this.insertText(a);return}this.terminal.writeln(``),this.terminal.writeln(i.map(e=>e.split(`/`).pop()??e).join(` `)),this.showPrompt(),this.terminal.write(this.currentLine);let o=this.currentLine.length-this.cursorPos;o>0&&this.terminal.write(`\x1b[${o}D`)}catch(e){console.warn(`[RemoteTerminal] Tab completion failed:`,e instanceof Error?e.message:String(e))}finally{this.tabBusy=!1,this.isExecuting=e}}insertText(e){if(!this.terminal||e.length===0)return;let t=this.currentLine.slice(this.cursorPos);this.currentLine=this.currentLine.slice(0,this.cursorPos)+e+this.currentLine.slice(this.cursorPos),this.cursorPos+=e.length,this.terminal.write(e),t.length>0&&(this.terminal.write(t),this.terminal.write(`\x1b[${t.length}D`))}replaceLine(e){if(!this.terminal)return;let t=this.currentLine.length-this.cursorPos;t>0&&this.terminal.write(`\x1b[${t}C`),this.terminal.write(`\r`),this.terminal.write(`\x1b[${A+this.currentLine.length}D`),this.terminal.write(`\x1B[K`),this.showPrompt(),this.terminal.write(e),this.currentLine=e,this.cursorPos=e.length}handleEnter(){if(!this.terminal)return;let e=this.currentLine.trim();if(this.terminal.writeln(``),this.currentLine=``,this.cursorPos=0,this.historyIndex=-1,!e){this.showPrompt();return}this.history[this.history.length-1]!==e&&this.history.push(e);let t=M(e);if(t){this.runRemoteWithLocalPicker(e,t);return}let n=P(e);if(n){this.runRemoteWithUsbPicker(n);return}let r=F(e);if(r){this.runRemoteWithHidPicker(r);return}let i=L(e);if(i){this.runRemoteWithSerialPicker(i);return}let a=R(e);if(a){this.runRemoteWithEsptoolPicker(e,a);return}this.runRemote(e)}async runRemoteWithUsbPicker(e){this.isExecuting=!0;try{let t=l();if(!t){this.terminal?.writeln(`usb: WebUSB is not available in this browser`);return}let n;try{let r=await t.requestDevice({filters:e});n=c().register(r)}catch(e){let t=e instanceof Error?e.name:``;if(t===`NotFoundError`||t===`AbortError`){this.terminal?.writeln(`usb: cancelled`);return}this.terminal?.writeln(`usb: ${e instanceof Error?e.message:String(e)}`);return}await this.runRemoteImpl(`usb request --__resolved ${n}`)}finally{this.isExecuting=!1,this.showPrompt()}}async runRemoteWithHidPicker(e){this.isExecuting=!0;try{let t=n();if(!t){this.terminal?.writeln(`hid: WebHID is not available in this browser`);return}let i;try{let n=await t.requestDevice({filters:e});if(n.length===0){this.terminal?.writeln(`hid: cancelled`);return}let a=r();i=n.map(e=>a.register(e))}catch(e){let t=e instanceof Error?e.name:``;if(t===`NotFoundError`||t===`AbortError`){this.terminal?.writeln(`hid: cancelled`);return}this.terminal?.writeln(`hid: ${e instanceof Error?e.message:String(e)}`);return}let a=I(e[0]);await this.runRemoteImpl(`hid request --__resolved ${i.join(`,`)}${a}`)}finally{this.isExecuting=!1,this.showPrompt()}}async runRemoteWithSerialPicker(e){this.isExecuting=!0;try{let t=o();if(!t){this.terminal?.writeln(`serial: Web Serial is not available in this browser`);return}let n;try{let r=await t.requestPort(e.length?{filters:e}:{});n=a().register(r)}catch(e){let t=e instanceof Error?e.name:``;if(t===`NotFoundError`||t===`AbortError`){this.terminal?.writeln(`serial: cancelled`);return}this.terminal?.writeln(`serial: ${e instanceof Error?e.message:String(e)}`);return}await this.runRemoteImpl(`serial request --__resolved ${n}`)}finally{this.isExecuting=!1,this.showPrompt()}}async runRemoteWithEsptoolPicker(e,t){this.isExecuting=!0;try{let n=o();if(!n){this.terminal?.writeln(`esptool: Web Serial is not available in this browser`);return}let r;try{let e=await n.requestPort(t.length?{filters:t}:{});r=a().register(e)}catch(e){let t=e instanceof Error?e.name:``;if(t===`NotFoundError`||t===`AbortError`){this.terminal?.writeln(`esptool: cancelled`);return}this.terminal?.writeln(`esptool: ${e instanceof Error?e.message:String(e)}`);return}await this.runRemoteImpl(`${e.trim()} --port ${r}`)}finally{this.isExecuting=!1,this.showPrompt()}}async runRemoteWithLocalPicker(e,n){this.isExecuting=!0;try{let r=window;if(typeof r.showDirectoryPicker!=`function`){this.terminal?.writeln(`mount: File System Access API not available
6
- `);return}let i;try{i=await r.showDirectoryPicker({mode:`readwrite`})}catch(e){if(e instanceof Error&&e.name===`AbortError`){this.terminal?.writeln(`mount: cancelled`);return}let t=e instanceof Error?e.message:String(e);this.terminal?.writeln(`mount: ${t}`);return}try{await t(N(n),i)}catch(e){let t=e instanceof Error?e.message:String(e);this.terminal?.writeln(`mount: failed to stash handle: ${t}`);return}await this.runRemoteImpl(e)}finally{this.isExecuting=!1,this.showPrompt()}}async runRemote(e){this.isExecuting=!0,this.clearMediaPreview();try{return await this.runRemoteImpl(e)}finally{this.isExecuting=!1,this.execInFlight=null,this.showPrompt()}}async runRemoteImpl(e){let t=this.client.exec(e);this.execInFlight=t;try{return await t}finally{this.execInFlight=null}}handleEvent(e){if(this.terminal)switch(e.type){case`terminal-output`:if(this.suppressOutput)return;e.stream===`stderr`?this.terminal.write(`\x1b[31m${e.data}\x1b[0m`):this.terminal.write(e.data);return;case`terminal-exit`:return;case`terminal-cleared`:this.terminal.clear();return;case`terminal-status`:e.state===`error`&&this.terminal.writeln(`\x1b[31mterminal session error: ${e.error??`unknown`}\x1b[0m`);return;case`terminal-media-preview`:this.renderMediaPreview(e);return}}};function M(e){let t=e.trim();if(!t.startsWith(`mount`))return null;let n=t.split(/\s+/);if(n[0]!==`mount`||n.includes(`--source`)||n.includes(`--help`)||n.includes(`-h`))return null;let r=n.slice(1).find(e=>!e.startsWith(`-`));return!r||[`list`,`unmount`,`refresh`,`recover`].includes(r)||!r.startsWith(`/`)?null:r}function N(e){return`pendingMount:term:${e}`}function P(e){let t=e.trim().split(/\s+/);if(t[0]!==`usb`||t[1]!==`request`||t.includes(`--__resolved`)||t.includes(`--help`)||t.includes(`-h`))return null;let{flags:n}=w(t.slice(2));return E(n)}function F(e){let t=e.trim().split(/\s+/);if(t[0]!==`hid`||t[1]!==`request`||t.includes(`--__resolved`)||t.includes(`--help`)||t.includes(`-h`))return null;let{flags:n}=b(t.slice(2));return S(n)}function I(e){if(!e)return``;let t=[];return e.usagePage!==void 0&&t.push(`--usage-page 0x${e.usagePage.toString(16)}`),e.usage!==void 0&&t.push(`--usage 0x${e.usage.toString(16)}`),t.length>0?` ${t.join(` `)}`:``}function L(e){let t=e.trim().split(/\s+/);if(t[0]!==`serial`||t[1]!==`request`||t.includes(`--__resolved`)||t.includes(`--help`)||t.includes(`-h`))return null;let{flags:n}=p(t.slice(2));return h(n)}function R(e){let t=e.trim().split(/\s+/);if(t[0]!==`esptool`||t.includes(`--port`)||t.includes(`--help`)||t.includes(`-h`))return null;let{positionals:n,flags:r}=v(t.slice(1));return n.length===0?null:h(r)}function z(e){return e.length===0?`''`:`'${e.replace(/'/g,`'\\''`)}'`}function B(e){let t=e.split(/\s+/),n=t[t.length-1]??``,r=t.length<=1||t.length===2&&t[0]===``,i=z(n);return{currentWord:n,isFirstWord:r,compgenCmd:r?`compgen -A command -- ${i}`:`compgen -f -- ${i}`}}function V(e){return`compgen -d -- ${z(e)}`}function H(e){if(e.length===0)return``;let t=e[0];for(let n of e){for(;t.length>0&&!n.startsWith(t);)t=t.slice(0,-1);if(t.length===0)break}return t}export{j as RemoteTerminalView};
@@ -1 +0,0 @@
1
- import{t as e}from"./types-idfTVsM8.js";function t(e){return new r(e)}var n=3e4,r=class{transport;log;genId;requestTimeoutMs;pending=new Map;unsubscribe=null;counter=0;constructor(e){this.transport=e.transport,this.log=e.logger??console,this.requestTimeoutMs=e.requestTimeoutMs??n,this.genId=e.generateRequestId??(()=>{this.counter=this.counter+1>>>0;let e=Math.random().toString(36).slice(2,8);return`vfs-${this.counter.toString(36)}-${e}`}),this.unsubscribe=this.transport.onMessage(e=>{if(!i(e)||e.source!==`offscreen`)return;let t=e.payload;a(t)&&this.handleResult(t)})}readDir(e){let t=this.genId(),n={type:`vfs-read-dir`,requestId:t,path:e};return this.request(t,`vfs-read-dir-result`,e,n)}readFile(e,t){let n=this.genId(),r={type:`vfs-read-file`,requestId:n,path:e,encoding:t?.encoding??`utf-8`};return this.request(n,`vfs-read-file-result`,e,r)}stat(e){let t=this.genId(),n={type:`vfs-stat`,requestId:t,path:e};return this.request(t,`vfs-stat-result`,e,n)}dispose(){this.unsubscribe?.(),this.unsubscribe=null;for(let[,t]of this.pending)t.timer!==null&&clearTimeout(t.timer),t.reject(new e(`EBADF`,`RemoteVfsClient disposed`,t.path));this.pending.clear()}request(t,n,r,i){return new Promise((a,o)=>{let s=null;this.requestTimeoutMs>0&&(s=setTimeout(()=>{this.pending.delete(t)&&o(new e(`EIO`,`vfs-rpc request timed out after ${this.requestTimeoutMs}ms (${n})`,r))},this.requestTimeoutMs)),this.pending.set(t,{resolve:a,reject:o,expect:n,path:r,timer:s});try{this.transport.send(i)}catch(e){this.pending.delete(t),s!==null&&clearTimeout(s),o(e)}})}handleResult(t){let n=this.pending.get(t.requestId);if(!n){this.log.debug?.(`[remote-vfs-client] drop unmatched response`,{type:t.type,requestId:t.requestId});return}if(n.timer!==null&&clearTimeout(n.timer),n.expect!==t.type){this.pending.delete(t.requestId),n.reject(new e(`EIO`,`vfs-rpc response type mismatch (got ${t.type})`,n.path));return}if(this.pending.delete(t.requestId),t.ok===!1){n.reject(o(t.error.code,t.error.message,t.error.path??n.path));return}switch(t.type){case`vfs-read-dir-result`:n.resolve(t.entries);return;case`vfs-read-file-result`:n.resolve(t.data);return;case`vfs-stat-result`:n.resolve(t.stats);return}}};function i(e){return typeof e==`object`&&!!e&&`source`in e&&`payload`in e}function a(e){if(typeof e.requestId!=`string`)return!1;let t=e.type;return t===`vfs-read-dir-result`||t===`vfs-read-file-result`||t===`vfs-stat-result`}function o(t,n,r){return new e([`ENOENT`,`EEXIST`,`ENOTDIR`,`EISDIR`,`ENOTEMPTY`,`EINVAL`,`EACCES`,`ELOOP`,`EBUSY`,`EFBIG`,`EBADF`,`EIO`].includes(t)?t:`EIO`,n,r)}export{t as createRemoteVfsClient};
@@ -1 +0,0 @@
1
- import{t as e}from"./logger-DDBAeTLF.js";var t=e(`secret-env`);function n(e){return/^[A-Za-z_][A-Za-z0-9_]*$/.test(e)}function r(e){let t={},r;for(let i of e)!i?.name||!i?.maskedValue||(i.name===`oauth.github.token`&&(r=i.maskedValue),n(i.name)&&(t[i.name]=i.maskedValue));return r&&(t.GITHUB_TOKEN===void 0&&(t.GITHUB_TOKEN=r),t.GH_TOKEN===void 0&&(t.GH_TOKEN=r)),t}async function i(){if(typeof chrome<`u`&&chrome?.runtime?.id)return new Promise(e=>{chrome.runtime.sendMessage({type:`secrets.list-masked-entries`},n=>{let i=r(n?.entries??[]);Object.keys(i).length>0&&t.info(`Loaded masked secrets into shell env from SW`,{count:Object.keys(i).length}),e(i)})});try{let e=await fetch(`/api/secrets/masked`);if(!e.ok)return t.warn(`Failed to fetch masked secrets`,{status:e.status}),{};let n=await e.json();if(!Array.isArray(n)||n.length===0)return{};let i=r(n);return Object.keys(i).length>0&&t.info(`Loaded masked secrets into shell env`,{count:Object.keys(i).length}),i}catch(e){return t.debug(`Could not fetch masked secrets (server may be unavailable)`,{error:e instanceof Error?e.message:String(e)}),{}}}export{i as fetchSecretEnvVars};
@@ -1 +0,0 @@
1
- import{u as e}from"./wc-live-B3Dxlxlf.js";export{e as readSessionsIndex};
@@ -1 +0,0 @@
1
- import{_ as e,g as t}from"./wc-live-B3Dxlxlf.js";export{t as setupSudoExtension,e as setupSudoStandalone};
@@ -1 +0,0 @@
1
- function e(e){let t=typeof chrome<`u`&&!!chrome?.runtime?.id,n=`/preview${e}`;return t?chrome.runtime.getURL(n):`${typeof window<`u`&&window.location?.origin?window.location.origin:`http://localhost:5710`}${n}`}function t(){return typeof process<`u`&&!!process.versions?.node}export{e as n,t};
@@ -1 +0,0 @@
1
- import{t as e}from"./logger-DDBAeTLF.js";import{t}from"./kokoro-engine-CHIq9iyX.js";var n=e(`speech:speak`),r=2e4;function i(e,t){return e.voice?t.ready&&t.voiceIds.includes(e.voice)?`kokoro`:`webspeech`:e.lang&&!e.lang.toLowerCase().startsWith(`en`)?`webspeech`:t.ready?`kokoro`:`webspeech`}var a=48;function o(e){let t=e;return t=t.replace(/```[\s\S]*?```/g,` `),t=t.replace(/~~~[\s\S]*?~~~/g,` `),t=t.replace(/(?:```|~~~)[\s\S]*$/,` `),t=t.replace(/!\[([^\]]*)\]\([^)]*\)/g,`$1`),t=t.replace(/\[([^\]]+)\]\([^)]*\)/g,`$1`),t=t.replace(/`([^`]*)`/g,(e,t)=>t.length>a?` `:t),t=t.replace(/<[^>\n]+>/g,` `),t=t.replace(/^[ \t]{0,3}#{1,6}[ \t]+/gm,``),t=t.replace(/^[ \t]*>[ \t]?/gm,``),t=t.replace(/^[ \t]*(?:[-*+]|\d+[.)])[ \t]+/gm,``),t=t.replace(/[*_~]{1,3}([^*_~]+)[*_~]{1,3}/g,`$1`),t=t.replace(/\s+/g,` `).trim(),t.length>r&&(t=`${t.slice(0,r).replace(/\s+\S*$/,``)}…`),t}function s(){return t()?.voices()??[]}var c=null;function l(){return(!c||c.state===`closed`)&&(c=new AudioContext),c}async function u(e,t,n=1){let r=l();r.state===`suspended`&&await r.resume();let i=r.createBuffer(1,e.length,t);i.copyToChannel(new Float32Array(e),0);let a=r.createBufferSource();a.buffer=i;let o=r.createGain();o.gain.value=n,a.connect(o),o.connect(r.destination),await new Promise(e=>{a.onended=()=>e(),a.start()})}function d(e){return typeof speechSynthesis>`u`?Promise.reject(Error(`speechSynthesis is unavailable in this realm`)):new Promise((t,n)=>{let r=new SpeechSynthesisUtterance(e.text);if(e.lang!==void 0&&(r.lang=e.lang),e.rate!==void 0&&(r.rate=e.rate),e.pitch!==void 0&&(r.pitch=e.pitch),e.volume!==void 0&&(r.volume=e.volume),e.voice){let t=speechSynthesis.getVoices().find(t=>t.name===e.voice);t&&(r.voice=t)}r.onend=()=>t(),r.onerror=e=>n(Error(`speak: ${e.error||`utterance failed`}`)),speechSynthesis.speak(r)})}async function f(e){let r=t();if(i(e,{ready:r!==null,voiceIds:r?.voices().map(e=>e.id)??[]})===`kokoro`&&r){let t=0;try{let n=r.synthesizeStream(e.text,{...e.voice?{voice:e.voice}:{},...e.rate?{speed:e.rate}:{}});for await(let r of n)await u(r.audio,r.sampleRate,e.volume),t++;return{engine:`kokoro`}}catch(e){if(t>0)return n.warn(`kokoro stream failed mid-playback; stopping`,e),{engine:`kokoro`};n.warn(`kokoro synthesis failed; falling back to webspeech`,e)}}return await d(e),{engine:`webspeech`}}export{s as kokoroVoicesIfReady,f as speak,o as speechTextFromMarkdown};
@@ -1 +0,0 @@
1
- import{t as e}from"./logger-LESFN7Hj.js";import{kokoroIfReady as t}from"./kokoro-engine-CjyxHaAM.js";const n=e(`speech:speak`);function r(e,t){return e.voice?t.ready&&t.voiceIds.includes(e.voice)?`kokoro`:`webspeech`:e.lang&&!e.lang.toLowerCase().startsWith(`en`)?`webspeech`:t.ready?`kokoro`:`webspeech`}function i(){return t()?.voices()??[]}let a=null;function o(){return(!a||a.state===`closed`)&&(a=new AudioContext),a}async function s(e,t,n=1){let r=o();r.state===`suspended`&&await r.resume();let i=r.createBuffer(1,e.length,t);i.copyToChannel(new Float32Array(e),0);let a=r.createBufferSource();a.buffer=i;let s=r.createGain();s.gain.value=n,a.connect(s),s.connect(r.destination),await new Promise(e=>{a.onended=()=>e(),a.start()})}function c(e){return typeof speechSynthesis>`u`?Promise.reject(Error(`speechSynthesis is unavailable in this realm`)):new Promise((t,n)=>{let r=new SpeechSynthesisUtterance(e.text);if(e.lang!==void 0&&(r.lang=e.lang),e.rate!==void 0&&(r.rate=e.rate),e.pitch!==void 0&&(r.pitch=e.pitch),e.volume!==void 0&&(r.volume=e.volume),e.voice){let t=speechSynthesis.getVoices().find(t=>t.name===e.voice);t&&(r.voice=t)}r.onend=()=>t(),r.onerror=e=>n(Error(`speak: ${e.error||`utterance failed`}`)),speechSynthesis.speak(r)})}async function l(e){let i=t();if(r(e,{ready:i!==null,voiceIds:i?.voices().map(e=>e.id)??[]})===`kokoro`&&i){let t=0;try{let n=i.synthesizeStream(e.text,{...e.voice?{voice:e.voice}:{},...e.rate?{speed:e.rate}:{}});for await(let r of n)await s(r.audio,r.sampleRate,e.volume),t++;return{engine:`kokoro`}}catch(e){if(t>0)return n.warn(`kokoro stream failed mid-playback; stopping`,e),{engine:`kokoro`};n.warn(`kokoro synthesis failed; falling back to webspeech`,e)}}return await c(e),{engine:`webspeech`}}export{i as kokoroVoicesIfReady,l as speak};
@@ -1,4 +0,0 @@
1
- import{t as e}from"./logger-DDBAeTLF.js";import{t}from"./quick-llm-pCxnbK4A.js";var n=e(`sudo-suggest`),r=[`You generalize a single shell command into a minimal glob pattern for an`,`allow-list rule. Output ONLY the pattern on one line — no prose, no quotes,`,`no backticks. Keep the leading command/sub-command verbatim and replace only`,`the volatile tail (args, paths, refs) with a single trailing "*".`,`Examples:`,` git push origin main -> git push*`,` rm -rf build/cache -> rm -rf*`,` npm install left-pad -> npm install*`].join(`
2
- `),i=[`You generalize a single filesystem path into a minimal glob pattern for an`,`allow-list rule. Output ONLY the pattern on one line — no prose, no quotes,`,`no backticks. Keep the meaningful directory prefix and replace the volatile`,`leaf (and below) with "**". Examples:`,` /workspace/.git/config -> /workspace/.git/**`,` /shared/secrets/openai.key -> /shared/secrets/**`,` /workspace/src/app/main.ts -> /workspace/src/**`].join(`
3
- `);async function a(e,a){if(e.suggestedPattern&&e.suggestedPattern.trim().length>0)return e.suggestedPattern.trim();let s=e.detail.trim(),c=e.kind===`command`?r:i,l=null;try{l=await t({prompt:s,system:c,maxTokens:40,temperature:0,signal:a})}catch(e){n.debug(`suggestPattern: quickLabel threw`,{error:e instanceof Error?e.message:String(e)}),l=null}return o(l)||s}function o(e){if(!e)return null;let t=(e.split(`
4
- `,1)[0]?.trim()??``).replace(/^`+/,``).replace(/`+$/,``).replace(/^["']/,``).replace(/["']$/,``).trim();return t.length===0?null:t}var s=`sudo-request`,c=e(`sudo-ext`);function l(e={}){let t=e.suggest??a;return{async requestApproval(e){let n;try{n=await t(e)}catch{n=e.detail}return u({...e,suggestedPattern:n})}}}function u(e){return new Promise(t=>{let n=globalThis.chrome?.runtime;if(!n||typeof n.sendMessage!=`function`){c.warn(`chrome.runtime.sendMessage unavailable — denying`),t({decision:`deny`});return}let r=r=>{let i=n.lastError;if(i){c.warn(`sudo relay lastError — denying`,{error:i.message}),t({decision:`deny`});return}if(!r||typeof r!=`object`){c.warn(`sudo relay empty response — denying`),t({decision:`deny`});return}let a=r;if(!a.ok||!a.decision){c.warn(`sudo relay error response — denying`,{error:a.error}),t({decision:`deny`});return}t(d(a.decision,e.suggestedPattern??e.detail))};try{n.sendMessage({source:`offscreen`,payload:{type:s,request:e}},r)}catch(e){c.warn(`sudo relay threw — denying`,{error:e instanceof Error?e.message:String(e)}),t({decision:`deny`})}})}function d(e,t){return e.decision===`allow`?{decision:`allow`}:e.decision===`always`?{decision:`always`,pattern:typeof e.pattern==`string`&&e.pattern.trim().length>0?e.pattern.trim():t}:{decision:`deny`}}var f=e(`sudo-http`);function p(e={}){let t=e.fetchImpl??globalThis.fetch.bind(globalThis),n=e.path??`/api/sudo-approve`,r=e.suggest??a;return{async requestApproval(e){let i;try{i=await r(e)}catch{i=e.detail}try{let r=await t(n,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({kind:e.kind,detail:e.detail,suggestedPattern:i})});return r.ok?m(await r.json(),i):(f.warn(`sudo endpoint returned non-OK status — denying`,{status:r.status}),{decision:`deny`})}catch(e){return f.warn(`sudo endpoint request failed — denying`,{error:e instanceof Error?e.message:String(e)}),{decision:`deny`}}}}}function m(e,t){if(!e||typeof e!=`object`)return{decision:`deny`};let n=e.decision;if(n===`allow`)return{decision:`allow`};if(n===`always`){let n=e.pattern;return{decision:`always`,pattern:typeof n==`string`&&n.trim().length>0?n.trim():t}}return{decision:`deny`}}var h=e(`sudo-panel`);function g(e,t={}){let n=t.confirm??(e=>globalThis.confirm(e)),r=t.prompt??((e,t)=>globalThis.prompt(e,t));if(!n(`Approve ${e.kind}:\n\n${e.detail}\n\nOK = allow · Cancel = deny`))return{decision:`deny`};let i=e.suggestedPattern?.trim()||e.detail.trim();if(!n(`Always allow actions matching:\n\n${i}\n\nOK = always · Cancel = just this once`))return{decision:`allow`};let a=r(`Edit the "Always" allow pattern:`,i);return{decision:`always`,pattern:a&&a.trim().length>0?a.trim():i}}function _(e={}){let t=globalThis.chrome?.runtime?.onMessage;return!t||typeof t.addListener!=`function`?!1:(t.addListener((t,n,r)=>{if(!v(t))return;let i=t.payload.request;try{r({ok:!0,decision:g(i,e)})}catch(e){h.warn(`panel responder threw — denying`,{error:e instanceof Error?e.message:String(e)}),r({ok:!1,decision:{decision:`deny`},error:`panel responder error`})}return!1}),!0)}function v(e){if(!e||typeof e!=`object`)return!1;let t=e;if(t.source!==`offscreen`)return!1;let n=t.payload;if(!n||n.type!==`sudo-request`)return!1;let r=n.request;return!!r&&typeof r.kind==`string`&&typeof r.detail==`string`}var y=e(`sudo`),b=`__slicc_sudo`;function x(){return typeof chrome<`u`&&!!chrome?.runtime?.id}function S(){return x()?l():p()}function C(e=S()){let t={requestApproval:t=>e.requestApproval(t)};return globalThis[b]=t,y.info(`sudo broker test hook published on globalThis.__slicc_sudo`),t}export{_ as installPanelSudoResponder,C as installSudoTestHook};
@@ -1 +0,0 @@
1
- import{t as e}from"./logger-LESFN7Hj.js";const t=e(`tool-ui`),n=new class{pending=new Map;idCounter=0;generateId(){return`tool-ui-${++this.idCounter}-${Date.now().toString(36)}`}register(e,n,r,i){this.pending.set(e,{request:n,resolve:r,reject:i}),t.info(`Tool UI registered`,{id:e})}async handleAction(e,n){let r=this.pending.get(e);if(!r){t.warn(`Action for unknown tool UI`,{id:e,action:n.action});return}t.info(`Tool UI action`,{id:e,action:n.action});try{let e;e=r.request.onAction?await r.request.onAction(n.action,n.data):n,r.resolve(e)}catch(e){r.reject(e instanceof Error?e:Error(String(e)))}finally{this.pending.delete(e)}}cancel(e,n=`cancelled`){let r=this.pending.get(e);r&&(r.reject(Error(n)),this.pending.delete(e),t.info(`Tool UI cancelled`,{id:e,reason:n}))}cancelAll(e=`cancelled`){let n=this.pending.size;for(let[t,n]of this.pending)n.reject(Error(e));this.pending.clear(),n>0&&t.info(`All tool UIs cancelled`,{reason:e,count:n})}isPending(e){return this.pending.has(e)}getPendingIds(){return[...this.pending.keys()]}};async function r(e,r){let i=e.id??n.generateId(),a,o,s=new Promise((e,t)=>{a=e,o=t});return n.register(i,e,a,o),r?r({content:[{type:`tool_ui`,requestId:i,html:e.html}]}):t.warn(`showToolUI called without onUpdate callback — UI may not render`),s.finally(()=>{r&&r({content:[{type:`tool_ui_done`,requestId:i}]})})}const i=[];function a(e){return i.push(e),e}function o(e){let t=i.lastIndexOf(e);t!==-1&&i.splice(t,1)}function s(){return i.length>0?i[i.length-1]:null}async function c(e){let n=s();return n?r(e,n.onUpdate):(t.warn(`showToolUIFromContext called without execution context`),null)}export{c as a,r as i,o as n,n as o,a as r,s as t};
@@ -1 +0,0 @@
1
- import{t as e}from"./logger-DDBAeTLF.js";var t=e(`tool-ui`),n=new class{pending=new Map;idCounter=0;generateId(){return`tool-ui-${++this.idCounter}-${Date.now().toString(36)}`}register(e,n,r,i){this.pending.set(e,{request:n,resolve:r,reject:i}),t.info(`Tool UI registered`,{id:e})}async handleAction(e,n){let r=this.pending.get(e);if(!r){t.warn(`Action for unknown tool UI`,{id:e,action:n.action});return}t.info(`Tool UI action`,{id:e,action:n.action});try{let e;e=r.request.onAction?await r.request.onAction(n.action,n.data):n,r.resolve(e)}catch(e){r.reject(e instanceof Error?e:Error(String(e)))}finally{this.pending.delete(e)}}cancel(e,n=`cancelled`){let r=this.pending.get(e);r&&(r.reject(Error(n)),this.pending.delete(e),t.info(`Tool UI cancelled`,{id:e,reason:n}))}cancelAll(e=`cancelled`){let n=this.pending.size;for(let[t,n]of this.pending)n.reject(Error(e));this.pending.clear(),n>0&&t.info(`All tool UIs cancelled`,{reason:e,count:n})}isPending(e){return this.pending.has(e)}getPendingIds(){return[...this.pending.keys()]}};async function r(e,r){let i=e.id??n.generateId(),a,o,s=new Promise((e,t)=>{a=e,o=t});return n.register(i,e,a,o),r?r({content:[{type:`tool_ui`,requestId:i,html:e.html}]}):t.warn(`showToolUI called without onUpdate callback — UI may not render`),s.finally(()=>{r&&r({content:[{type:`tool_ui_done`,requestId:i}]})})}export{n,r as t};
@@ -1 +0,0 @@
1
- import{t as e}from"./cdn-url-builder-Cq7LLgru.js";var t=1e3;function n(e=()=>Date.now()){let n=new Map,r=null,i=0,a=()=>{let e=0,t=0;for(let r of n.values())e+=r.loaded,t+=r.total;return{loaded:e,total:t}};return{update(t,o,s){n.set(t,{loaded:Math.max(0,o),total:Math.max(n.get(t)?.total??0,s,o)}),r===null&&(r=e(),i=a().loaded)},complete(e){let t=n.get(e);t&&(t.loaded=t.total)},snapshot(){let{loaded:n,total:o}=a(),s=null;if(r!==null&&o>0&&n<o){let a=e()-r,c=n-i;if(a>=t&&c>0){let e=c/a;s=(o-n)/e/1e3}}return o>0&&n>=o&&(s=0),{loaded:n,total:o,etaSeconds:s}}}}var r=`1.26.0-dev.20260416-b7804b056c`;function i(t){let n=t.backends?.onnx?.wasm;n&&(n.wasmPaths=e(`onnxruntime-web`,r,`dist/`).toString())}export{n,i as t};
@@ -1 +0,0 @@
1
- import{s as e}from"./kernel-worker-DuaByjq4.js";function t(e=()=>Date.now()){let t=new Map,n=null,r=0,i=()=>{let e=0,n=0;for(let r of t.values())e+=r.loaded,n+=r.total;return{loaded:e,total:n}};return{update(a,o,s){t.set(a,{loaded:Math.max(0,o),total:Math.max(t.get(a)?.total??0,s,o)}),n===null&&(n=e(),r=i().loaded)},complete(e){let n=t.get(e);n&&(n.loaded=n.total)},snapshot(){let{loaded:t,total:a}=i(),o=null;if(n!==null&&a>0&&t<a){let i=e()-n,s=t-r;if(i>=1e3&&s>0){let e=s/i;o=(a-t)/e/1e3}}return a>0&&t>=a&&(o=0),{loaded:t,total:a,etaSeconds:o}}}}function n(t){let n=t.backends?.onnx?.wasm;n&&(n.wasmPaths=e(`onnxruntime-web`,`1.26.0-dev.20260416-b7804b056c`,`dist/`).toString())}export{t as n,n as t};