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
@@ -0,0 +1,242 @@
1
+ const e=new Set([`fs`,`path`,`crypto`,`process`,`buffer`,`assert`,`assert/strict`,`util`]),t=new Set(`assert.assert/strict.async_hooks.buffer.child_process.cluster.console.constants.crypto.dgram.diagnostics_channel.dns.dns/promises.domain.events.fs.fs/promises.http.http2.https.inspector.inspector/promises.module.net.os.path.path/posix.path/win32.perf_hooks.process.punycode.querystring.readline.readline/promises.repl.stream.stream/consumers.stream/promises.stream/web.string_decoder.sys.timers.timers/promises.tls.trace_events.tty.url.util.util/types.v8.vm.wasi.worker_threads.zlib`.split(`.`));new Set([...t].filter(t=>!e.has(t))),new TextDecoder,[`unpkg`,`com`].join(`.`),[`cdn`,`jsdelivr`,`net`].join(`.`),[`registry`,`npmjs`,`org`].join(`.`);function n(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 r={EBADF:8,EEXIST:20,EINVAL:28,EIO:29,EISDIR:31,ENOENT:44,ENOTDIR:54,ENOTEMPTY:55,EPERM:63},i=16877;async function a(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 o(e,t){return e===``?t:`${e}/${t}`}function s(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;f(t.mount,async()=>{if(t.opfs.size>r)return;let n=await _(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 i=t.opfs.children?.get(n);if(!i)throw new e.ErrnoError(r.ENOENT);return i},mknod(n,i,a,o){if(n.opfs.children?.has(i))throw new e.ErrnoError(r.EEXIST);let s=t.createNode(n,i,a,o);return n.opfs.children?.set(i,s),e.isDir(a)?f(n.mount,async()=>{let e=await(await g(n)).getDirectoryHandle(i,{create:!0});s.opfs.dirHandle=e}):e.isFile(a)&&f(n.mount,async()=>{let e=await(await g(n)).getFileHandle(i,{create:!0});s.opfs.fileHandle=e}),s},rename(t,n,i){let a=t.parent,s=t.name;if(!(s===i&&a===n)){if(n.opfs.children?.has(i))throw new e.ErrnoError(r.EEXIST);a.opfs.children?.delete(s),n.opfs.children?.set(i,t),t.name=i,t.parent=n,v(t,o(n.opfs.relPath,i)),e.isFile(t.mode)?f(t.mount,()=>y(t,a,s,n,i)):e.isDir(t.mode)&&f(t.mount,()=>b(t,a,s,n,i))}},unlink(t,n){let i=t.opfs.children?.get(n);if(!i)throw new e.ErrnoError(r.ENOENT);if(e.isDir(i.mode))throw new e.ErrnoError(r.EISDIR);t.opfs.children?.delete(n),e.isFile(i.mode)&&f(t.mount,async()=>{try{t.mount.opts.sahProvider.release(i.opfs.relPath)}catch{}await(await g(t)).removeEntry(n)})},rmdir(t,n){let i=t.opfs.children?.get(n);if(!i)throw new e.ErrnoError(r.ENOENT);if(!e.isDir(i.mode))throw new e.ErrnoError(r.ENOTDIR);if((i.opfs.children?.size??0)>0)throw new e.ErrnoError(r.ENOTEMPTY);t.opfs.children?.delete(n),f(t.mount,async()=>{await(await g(t)).removeEntry(n)})},readdir(t){if(!e.isDir(t.mode))throw new e.ErrnoError(r.ENOTDIR);let n=[`.`,`..`];for(let e of t.opfs.children?.keys()??[])n.push(e);return n},symlink(n,i,a){if(n.opfs.children?.has(i))throw new e.ErrnoError(r.EEXIST);let o=t.createNode(n,i,41471,0);return o.opfs.linkTarget=a,n.opfs.children?.set(i,o),o},readlink(t){if(!e.isLink(t.mode))throw new e.ErrnoError(r.EINVAL);return t.opfs.linkTarget??``}}}function c(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,i,a,o){let s=t.sah;if(!s)throw new e.ErrnoError(r.EBADF);let c=new Uint8Array(n.buffer,n.byteOffset+i,a);return s.read(c,{at:o})},write(t,n,i,a,o){let s=t.sah;if(!s)throw new e.ErrnoError(r.EBADF);let c=new Uint8Array(n.buffer,n.byteOffset+i,a),l=s.write(c,{at:o}),u=Math.max(t.node.opfs.size,o+l);return t.node.opfs.size=u,t.node.opfs.mtime=Date.now(),t.node.timestamp=t.node.opfs.mtime,l},llseek(t,n,i){let a=n;if(i===1)a=t.position+n;else if(i===2){let e=t.sah;a=(e?e.getSize():t.node.opfs.size)+n}if(a<0)throw new e.ErrnoError(r.EINVAL);return t.position=a,a}}}function l(e,t,n,a){for(let[o,s]of a.entries){if(o===``)continue;let a=o.split(`/`),c=n;for(let t=0;t<a.length-1;t++){let n=a[t],i=c.opfs.children?.get(n);if(!i)throw new e.ErrnoError(r.EIO);c=i}let l=a[a.length-1];if(s.kind===`directory`){let e=t.createNode(c,l,i,0);e.opfs.dirHandle=s.dirHandle,e.opfs.children=new Map,c.opfs.children?.set(l,e)}else{let e=t.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 u(e){let t={mount(n){let{prewalk:a}=n.opts,o=a.entries.get(``);if(o?.kind!==`directory`)throw new e.ErrnoError(r.EINVAL);let s=t.createNode(null,`/`,i,0);return s.mount=n,s.opfs.dirHandle=o.dirHandle,s.opfs.children=new Map,l(e,t,s,a),s},createNode(n,i,a,s=0){if(!e.isDir(a)&&!e.isFile(a)&&!e.isLink(a))throw new e.ErrnoError(r.EINVAL);let c=n===null?``:o(n.opfs?.relPath??``,i),l=e.createNode(n,i,a,s);return l.node_ops=t.node_ops,l.stream_ops=t.stream_ops,l.timestamp=Date.now(),n!==null&&(l.mount=n.mount),l.opfs={relPath:c,size:0,mtime:l.timestamp},e.isDir(a)&&(l.opfs.children=new Map),l},node_ops:void 0,stream_ops:void 0};return t.node_ops=s(e,t),t.stream_ops=c(e),t}const d=new WeakMap;function f(e,t){let n=(d.get(e)??Promise.resolve()).then(t,t);d.set(e,n),e.opts.flush||(e.opts.flush=()=>d.get(e)??Promise.resolve())}async function p(e){await(d.get(e)??Promise.resolve())}var m=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 h(){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 m(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 g(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 _(e){if(e.opfs.fileHandle)return e.opfs.fileHandle;let t=await(await g(e.parent)).getFileHandle(e.name,{create:!0});return e.opfs.fileHandle=t,t}function v(e,t){if(e.opfs.relPath=t,e.opfs.children)for(let[n,r]of e.opfs.children)v(r,o(t,n))}async function y(e,t,n,r,i){let a=await g(t),o=await g(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 b(e,t,n,r,i){let a=await g(t),o=await g(r),s=await a.getDirectoryHandle(n),c=await o.getDirectoryHandle(i,{create:!0});await x(s,c),await a.removeEntry(n,{recursive:!0}),e.opfs.dirHandle=c}async function x(e,t){let n=e;for await(let[e,r]of n)if(r.kind===`directory`)await x(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 S(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 C(e,t){let n=new e.ErrnoError(r.EIO);return n.message=S(t),n}function w(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 C(n(e),T(e))},setattr:e=>{throw C(n(e),T(e))},lookup:e=>{throw C(n(e),T(e))},mknod:e=>{throw C(n(e),T(e))},rename:e=>{throw C(n(e),T(e))},unlink:e=>{throw C(n(e),T(e))},rmdir:e=>{throw C(n(e),T(e))},readdir:e=>{throw C(n(e),T(e))},symlink:e=>{throw C(n(e),T(e))},readlink:e=>{throw C(n(e),T(e))}},stream_ops:{open:e=>{throw C(n(e.node),T(e.node))},close:()=>{},read:e=>{throw C(n(e.node),T(e.node))},write:e=>{throw C(n(e.node),T(e.node))},llseek:e=>{throw C(n(e.node),T(e.node))}}};function n(t){return e}return t}function T(e){let t=e.mount;return t?.opts?.mountPath??t?.mountpoint??`<unknown mount>`}function E(e,t){let n=e.MOUNT_BOMB_FS;return n||(n=w(t),e.MOUNT_BOMB_FS=n),n}function D(e,t,n=()=>{}){if(t.length===0)return;let r=E(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 O(e){return S(e)}async function k(e,t){if(t.length===0)return;let n={};for(let e of t)n[e]=O(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 A=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?.()}get pendingCount(){return this.pending.size}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 j(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 M(e,t){let n=j(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
+ `)}const N=n(`pyodide`,`0.29.4`);`${N}`;const P=`pyodide is not installed in node_modules: run \`ipk add pyodide@${N}\` (no network fallback)`,F={asmJs:`pyodide.asm.js`,asmWasm:`pyodide.asm.wasm`,stdlibZip:`python_stdlib.zip`,lockJson:`pyodide-lock.json`};async function I(e,t){try{let[n,r,i,a]=await Promise.all([e.call(`vfs`,`readFile`,[`${t}/${F.asmJs}`]),e.call(`vfs`,`readFileBinary`,[`${t}/${F.asmWasm}`]),e.call(`vfs`,`readFileBinary`,[`${t}/${F.stdlibZip}`]),e.call(`vfs`,`readFile`,[`${t}/${F.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 L(e,t){let n=e+F.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 R(e,t,n){let r=await I(n,t);if(!r)throw Error(P);let i=URL.createObjectURL(new Blob([r.asmJsSource],{type:`text/javascript`})),a=URL.createObjectURL(new Blob([r.stdlibBytes],{type:`application/zip`})),o=`slicc-pyodide://local/${crypto.randomUUID()}/`,s=L(o,r.asmWasmBytes);try{return await import(i),await e.loadPyodide({indexURL:o,lockFileContents:r.lockJsonString,stdLibURL:a,fullStdLib:!1})}finally{s.restore(),URL.revokeObjectURL(i),URL.revokeObjectURL(a)}}async function z(e,t,n=()=>import(`./pyodide-M7UA50Oh.js`)){let r=[],i=[],a=new A(t),o;try{let t=await n();o=e.pyodideAssetRoot?await R(t,e.pyodideAssetRoot,a):await t.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 B(o,e,s);await V(o,e,s),await H(o,a,s);try{o.FS.chdir(e.cwd)}catch{}U(o,e,r,i);let l=await W(o,i);await G(c,e,a,s),a.dispose();let u={type:`realm-done`,stdout:r.join(``),stderr:i.join(``),exitCode:l};t.postMessage(u)}async function B(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 Y(e,r,t.opfsMountDbName,n,{skipMountPaths:a})).mounts}catch(e){return n(`VFS→Pyodide OPFS mount failed: ${q(e)}`),[]}}async function V(e,t,n){let r=t.mountPoints??[];if(r.length!==0){try{D(e.FS,r.map(e=>e.path),n)}catch(e){n(`bomb overlay install failed: ${q(e)}`)}try{await k(e,r.map(e=>e.path))}catch(e){n(`python mount guard install failed: ${q(e)}`)}}}async function H(e,t,n){try{await M(e,t)}catch(e){n(`slicc.fs registration failed: ${q(e)}`)}}function U(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 W(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 G(e,t,n,r){if(t.opfsMountDbName!==void 0){try{await Q(e)}catch(e){r(`Pyodide→VFS OPFS flush failed: ${e instanceof Error?e.message:String(e)}`)}try{await $(e,n)}catch(e){r(`Pyodide→kernel VFS invalidation failed: ${q(e)}`)}}}const K=new Set([`dev`,`proc`,`lib`,`tmp`,`home`]);function q(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 J(e){let t=e.FS.filesystems,n=t.OPFS_SYNC_FS;return n||(n=u(e.FS),t.OPFS_SYNC_FS=n),n}async function Y(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: ${q(e)}`),{mounts:a}}let l;try{l=await c.getDirectoryHandle(n,{create:!0})}catch(e){return r(`VFS→Pyodide OPFS mount: opening '${n}' failed: ${q(e)}`),{mounts:a}}let u=J(e);for(let n of t){if(n===`/`){await X(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 Z(e,u,n,t,a)}catch(e){r(`VFS→Pyodide OPFS mount '${n}' failed: ${q(e)}`)}}return{mounts:a}}async function X(e,t,n,r,i,a){try{let o=n;for await(let[n,s]of o){if(s.kind!==`directory`||K.has(n))continue;let o=`/${n}`;if(!r.has(o))try{await Z(e,t,o,s,i)}catch(e){a(`VFS→Pyodide OPFS mount '${o}' failed: ${q(e)}`)}}}catch(e){a(`VFS→Pyodide OPFS mount '/' failed: ${q(e)}`)}}async function Z(e,t,n,r,i){try{e.FS.stat(n)}catch{e.FS.mkdirTree(n)}let o=await a(r),s=h();await s.preload(o);let c={rootHandle:r,prewalk:o,sahProvider:s.provider},l=e.FS.mount(t,c,n),u=l?.mount??{opts:c,mountpoint:n,root:l};i.push({pyPath:n,mount:u,rootHandle:r,flushBuffers:s.flush,getDirtyPaths:s.getDirtyPaths})}async function Q(e){for(let t of e)await p(t.mount),await t.flushBuffers(t.rootHandle)}async function $(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 ee={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`&&z(t,ee).catch(e=>{let t={type:`realm-error`,message:e instanceof Error?e.message:String(e)};self.postMessage(t)})});
@@ -1,3 +1,3 @@
1
- import{i as e,o as t}from"./chunk-CMxvf4Kt.js";var n=Object.defineProperty,r=(e,t)=>n(e,`name`,{value:t,configurable:!0}),i=(t=>typeof e<`u`?e:typeof Proxy<`u`?new Proxy(t,{get:(t,n)=>(typeof e<`u`?e:t)[n]}):t)(function(t){if(typeof e<`u`)return e.apply(this,arguments);throw Error(`Dynamic require of "`+t+`" is not supported`)}),a=(()=>{for(var e=new Uint8Array(128),t=0;t<64;t++)e[t<26?t+65:t<52?t+71:t<62?t-4:t*4-205]=t;return t=>{for(var n=t.length,r=new Uint8Array((n-(t[n-1]==`=`)-(t[n-2]==`=`))*3/4|0),i=0,a=0;i<n;){var o=e[t.charCodeAt(i++)],s=e[t.charCodeAt(i++)],c=e[t.charCodeAt(i++)],l=e[t.charCodeAt(i++)];r[a++]=o<<2|s>>4,r[a++]=s<<4|c>>2,r[a++]=c<<6|l}return r}})();function o(e){return!isNaN(parseFloat(e))&&isFinite(e)}r(o,`_isNumber`);function s(e){return e.charAt(0).toUpperCase()+e.substring(1)}r(s,`_capitalize`);function c(e){return function(){return this[e]}}r(c,`_getter`);var l=[`isConstructor`,`isEval`,`isNative`,`isToplevel`],u=[`columnNumber`,`lineNumber`],d=[`fileName`,`functionName`,`source`],f=l.concat(u,d,[`args`],[`evalOrigin`]);function p(e){if(e)for(var t=0;t<f.length;t++)e[f[t]]!==void 0&&this[`set`+s(f[t])](e[f[t]])}for(r(p,`StackFrame`),p.prototype={getArgs:r(function(){return this.args},`getArgs`),setArgs:r(function(e){if(Object.prototype.toString.call(e)!==`[object Array]`)throw TypeError(`Args must be an Array`);this.args=e},`setArgs`),getEvalOrigin:r(function(){return this.evalOrigin},`getEvalOrigin`),setEvalOrigin:r(function(e){if(e instanceof p)this.evalOrigin=e;else if(e instanceof Object)this.evalOrigin=new p(e);else throw TypeError(`Eval Origin must be an Object or StackFrame`)},`setEvalOrigin`),toString:r(function(){var e=this.getFileName()||``,t=this.getLineNumber()||``,n=this.getColumnNumber()||``,r=this.getFunctionName()||``;return this.getIsEval()?e?`[eval] (`+e+`:`+t+`:`+n+`)`:`[eval]:`+t+`:`+n:r?r+` (`+e+`:`+t+`:`+n+`)`:e+`:`+t+`:`+n},`toString`)},p.fromString=r(function(e){var t=e.indexOf(`(`),n=e.lastIndexOf(`)`),r=e.substring(0,t),i=e.substring(t+1,n).split(`,`),a=e.substring(n+1);if(a.indexOf(`@`)===0)var o=/@(.+?)(?::(\d+))?(?::(\d+))?$/.exec(a,``),s=o[1],c=o[2],l=o[3];return new p({functionName:r,args:i||void 0,fileName:s,lineNumber:c||void 0,columnNumber:l||void 0})},`StackFrame$$fromString`),m=0;m<l.length;m++)p.prototype[`get`+s(l[m])]=c(l[m]),p.prototype[`set`+s(l[m])]=function(e){return function(t){this[e]=!!t}}(l[m]);var m;for(h=0;h<u.length;h++)p.prototype[`get`+s(u[h])]=c(u[h]),p.prototype[`set`+s(u[h])]=function(e){return function(t){if(!o(t))throw TypeError(e+` must be a Number`);this[e]=Number(t)}}(u[h]);var h;for(g=0;g<d.length;g++)p.prototype[`get`+s(d[g])]=c(d[g]),p.prototype[`set`+s(d[g])]=function(e){return function(t){this[e]=String(t)}}(d[g]);var g,_=p;function v(){var e=/^\s*at .*(\S+:\d+|\(native\))/m,t=/^(eval@)?(\[native code])?$/;return{parse:r(function(t){if(t.stack&&t.stack.match(e))return this.parseV8OrIE(t);if(t.stack)return this.parseFFOrSafari(t);throw Error(`Cannot parse given Error object`)},`ErrorStackParser$$parse`),extractLocation:r(function(e){if(e.indexOf(`:`)===-1)return[e];var t=/(.+?)(?::(\d+))?(?::(\d+))?$/.exec(e.replace(/[()]/g,``));return[t[1],t[2]||void 0,t[3]||void 0]},`ErrorStackParser$$extractLocation`),parseV8OrIE:r(function(t){return t.stack.split(`
1
+ import{i as e,r as t}from"./chunk-aKtaBQYM.js";var n=Object.defineProperty,r=(e,t)=>n(e,`name`,{value:t,configurable:!0}),i=(e=>typeof t<`u`?t:typeof Proxy<`u`?new Proxy(e,{get:(e,n)=>(typeof t<`u`?t:e)[n]}):e)(function(e){if(typeof t<`u`)return t.apply(this,arguments);throw Error(`Dynamic require of "`+e+`" is not supported`)}),a=(()=>{for(var e=new Uint8Array(128),t=0;t<64;t++)e[t<26?t+65:t<52?t+71:t<62?t-4:t*4-205]=t;return t=>{for(var n=t.length,r=new Uint8Array((n-(t[n-1]==`=`)-(t[n-2]==`=`))*3/4|0),i=0,a=0;i<n;){var o=e[t.charCodeAt(i++)],s=e[t.charCodeAt(i++)],c=e[t.charCodeAt(i++)],l=e[t.charCodeAt(i++)];r[a++]=o<<2|s>>4,r[a++]=s<<4|c>>2,r[a++]=c<<6|l}return r}})();function o(e){return!isNaN(parseFloat(e))&&isFinite(e)}r(o,`_isNumber`);function s(e){return e.charAt(0).toUpperCase()+e.substring(1)}r(s,`_capitalize`);function c(e){return function(){return this[e]}}r(c,`_getter`);var l=[`isConstructor`,`isEval`,`isNative`,`isToplevel`],u=[`columnNumber`,`lineNumber`],d=[`fileName`,`functionName`,`source`],f=l.concat(u,d,[`args`],[`evalOrigin`]);function p(e){if(e)for(var t=0;t<f.length;t++)e[f[t]]!==void 0&&this[`set`+s(f[t])](e[f[t]])}for(r(p,`StackFrame`),p.prototype={getArgs:r(function(){return this.args},`getArgs`),setArgs:r(function(e){if(Object.prototype.toString.call(e)!==`[object Array]`)throw TypeError(`Args must be an Array`);this.args=e},`setArgs`),getEvalOrigin:r(function(){return this.evalOrigin},`getEvalOrigin`),setEvalOrigin:r(function(e){if(e instanceof p)this.evalOrigin=e;else if(e instanceof Object)this.evalOrigin=new p(e);else throw TypeError(`Eval Origin must be an Object or StackFrame`)},`setEvalOrigin`),toString:r(function(){var e=this.getFileName()||``,t=this.getLineNumber()||``,n=this.getColumnNumber()||``,r=this.getFunctionName()||``;return this.getIsEval()?e?`[eval] (`+e+`:`+t+`:`+n+`)`:`[eval]:`+t+`:`+n:r?r+` (`+e+`:`+t+`:`+n+`)`:e+`:`+t+`:`+n},`toString`)},p.fromString=r(function(e){var t=e.indexOf(`(`),n=e.lastIndexOf(`)`),r=e.substring(0,t),i=e.substring(t+1,n).split(`,`),a=e.substring(n+1);if(a.indexOf(`@`)===0)var o=/@(.+?)(?::(\d+))?(?::(\d+))?$/.exec(a,``),s=o[1],c=o[2],l=o[3];return new p({functionName:r,args:i||void 0,fileName:s,lineNumber:c||void 0,columnNumber:l||void 0})},`StackFrame$$fromString`),m=0;m<l.length;m++)p.prototype[`get`+s(l[m])]=c(l[m]),p.prototype[`set`+s(l[m])]=function(e){return function(t){this[e]=!!t}}(l[m]);var m;for(h=0;h<u.length;h++)p.prototype[`get`+s(u[h])]=c(u[h]),p.prototype[`set`+s(u[h])]=function(e){return function(t){if(!o(t))throw TypeError(e+` must be a Number`);this[e]=Number(t)}}(u[h]);var h;for(g=0;g<d.length;g++)p.prototype[`get`+s(d[g])]=c(d[g]),p.prototype[`set`+s(d[g])]=function(e){return function(t){this[e]=String(t)}}(d[g]);var g,_=p;function v(){var e=/^\s*at .*(\S+:\d+|\(native\))/m,t=/^(eval@)?(\[native code])?$/;return{parse:r(function(t){if(t.stack&&t.stack.match(e))return this.parseV8OrIE(t);if(t.stack)return this.parseFFOrSafari(t);throw Error(`Cannot parse given Error object`)},`ErrorStackParser$$parse`),extractLocation:r(function(e){if(e.indexOf(`:`)===-1)return[e];var t=/(.+?)(?::(\d+))?(?::(\d+))?$/.exec(e.replace(/[()]/g,``));return[t[1],t[2]||void 0,t[3]||void 0]},`ErrorStackParser$$extractLocation`),parseV8OrIE:r(function(t){return t.stack.split(`
2
2
  `).filter(function(t){return!!t.match(e)},this).map(function(e){e.indexOf(`(eval `)>-1&&(e=e.replace(/eval code/g,`eval`).replace(/(\(eval at [^()]*)|(,.*$)/g,``));var t=e.replace(/^\s+/,``).replace(/\(eval code/g,`(`).replace(/^.*?\s+/,``),n=t.match(/ (\(.+\)$)/);t=n?t.replace(n[0],``):t;var r=this.extractLocation(n?n[1]:t);return new _({functionName:n&&t||void 0,fileName:[`eval`,`<anonymous>`].indexOf(r[0])>-1?void 0:r[0],lineNumber:r[1],columnNumber:r[2],source:e})},this)},`ErrorStackParser$$parseV8OrIE`),parseFFOrSafari:r(function(e){return e.stack.split(`
3
- `).filter(function(e){return!e.match(t)},this).map(function(e){if(e.indexOf(` > eval`)>-1&&(e=e.replace(/ line (\d+)(?: > eval line \d+)* > eval:\d+:\d+/g,`:$1`)),e.indexOf(`@`)===-1&&e.indexOf(`:`)===-1)return new _({functionName:e});var t=/((.*".+"[^@]*)?[^@]*)(?:@)/,n=e.match(t),r=n&&n[1]?n[1]:void 0,i=this.extractLocation(e.replace(t,``));return new _({functionName:r,fileName:i[0],lineNumber:i[1],columnNumber:i[2],source:e})},this)},`ErrorStackParser$$parseFFOrSafari`)}}r(v,`ErrorStackParser`);var ee=new v;function y(){return typeof API<`u`&&API!==globalThis.API?API.runtimeEnv:x({IN_BUN:typeof Bun<`u`,IN_DENO:typeof Deno<`u`,IN_NODE:typeof process==`object`&&typeof process.versions==`object`&&typeof process.versions.node==`string`&&!process.browser,IN_SAFARI:typeof navigator==`object`&&typeof navigator.userAgent==`string`&&navigator.userAgent.indexOf(`Chrome`)===-1&&navigator.userAgent.indexOf(`Safari`)>-1,IN_SHELL:typeof read==`function`&&typeof load==`function`})}r(y,`getGlobalRuntimeEnv`);var b=y();function x(e){let t=e.IN_NODE&&typeof module<`u`&&module.exports&&typeof i==`function`&&typeof __dirname==`string`,n=e.IN_NODE&&!t,r=!e.IN_NODE&&!e.IN_DENO&&!e.IN_BUN,a=r&&typeof window<`u`&&typeof window.document<`u`&&typeof document.createElement==`function`&&`sessionStorage`in window&&typeof globalThis.importScripts!=`function`,o=r&&typeof globalThis.WorkerGlobalScope<`u`&&typeof globalThis.self<`u`&&globalThis.self instanceof globalThis.WorkerGlobalScope;return{...e,IN_BROWSER:r,IN_BROWSER_MAIN_THREAD:a,IN_BROWSER_WEB_WORKER:o,IN_NODE_COMMONJS:t,IN_NODE_ESM:n}}r(x,`calculateDerivedFlags`);var S,C,te,ne,w;async function T(){if(!b.IN_NODE||(S=(await import(`./__vite-browser-external-CM3Eme-n.js`).then(e=>t(e.t(),1))).default,ne=await import(`./__vite-browser-external-CM3Eme-n.js`).then(e=>t(e.t(),1)),w=await import(`./__vite-browser-external-CM3Eme-n.js`).then(e=>t(e.t(),1)),te=(await import(`./__vite-browser-external-CM3Eme-n.js`).then(e=>t(e.t(),1))).default,C=await import(`./__vite-browser-external-CM3Eme-n.js`).then(e=>t(e.t(),1)),k=C.sep,typeof i<`u`))return;let e={fs:ne,crypto:await import(`./__vite-browser-external-CM3Eme-n.js`).then(e=>t(e.t(),1)),ws:await import(`./__vite-browser-external-CM3Eme-n.js`).then(e=>t(e.t(),1)),child_process:await import(`./__vite-browser-external-CM3Eme-n.js`).then(e=>t(e.t(),1))};globalThis.require=function(t){return e[t]}}r(T,`initNodeModules`);function E(e,t){return C.resolve(t||`.`,e)}r(E,`node_resolvePath`);function D(e,t){return t===void 0&&(t=location),new URL(e,t).toString()}r(D,`browser_resolvePath`);var O=b.IN_NODE?E:b.IN_SHELL?r(e=>e,`resolvePath`):D,k;b.IN_NODE||(k=`/`);function A(e,t){return e.startsWith(`file://`)&&(e=e.slice(7)),e.includes(`://`)?{response:fetch(e)}:{binary:w.readFile(e).then(e=>new Uint8Array(e.buffer,e.byteOffset,e.byteLength))}}r(A,`node_getBinaryResponse`);function j(e,t){if(e.startsWith(`file://`)&&(e=e.slice(7)),e.includes(`://`))throw Error(`Shell cannot fetch urls`);return{binary:Promise.resolve(new Uint8Array(readbuffer(e)))}}r(j,`shell_getBinaryResponse`);function M(e,t){let n=new URL(e,location);return{response:fetch(n,t?{integrity:t}:{})}}r(M,`browser_getBinaryResponse`);var N=b.IN_NODE?A:b.IN_SHELL?j:M;async function P(e,t){let{response:n,binary:r}=N(e,t);if(r)return r;let i=await n;if(!i.ok)throw Error(`Failed to load '${e}': request failed.`);return new Uint8Array(await i.arrayBuffer())}r(P,`loadBinaryFile`);var F;if(b.IN_BROWSER_MAIN_THREAD)F=r(async e=>await import(e),`loadScript`);else if(b.IN_BROWSER_WEB_WORKER)F=r(async e=>{try{globalThis.importScripts(e)}catch(t){if(t instanceof TypeError)await import(e);else throw t}},`loadScript`);else if(b.IN_NODE)F=I;else if(b.IN_SHELL)F=load;else throw Error(`Cannot determine runtime environment`);async function I(e){e.startsWith(`file://`)&&(e=e.slice(7)),e.includes(`://`)?te.runInThisContext(await(await fetch(e)).text()):await import(S.pathToFileURL(e).href)}r(I,`nodeLoadScript`);async function L(e){if(b.IN_NODE){await T();let t=await w.readFile(e,{encoding:`utf8`});return JSON.parse(t)}else if(b.IN_SHELL){let t=read(e);return JSON.parse(t)}else return await(await fetch(e)).json()}r(L,`loadLockFile`);async function R(){if(b.IN_NODE_COMMONJS)return __dirname;let e;try{throw Error()}catch(t){e=t}let n=ee.parse(e)[0].fileName;if(b.IN_NODE&&!n.startsWith(`file://`)&&(n=`file://${n}`),b.IN_NODE_ESM){let e=await import(`./__vite-browser-external-CM3Eme-n.js`).then(e=>t(e.t(),1));return(await import(`./__vite-browser-external-CM3Eme-n.js`).then(e=>t(e.t(),1))).fileURLToPath(e.dirname(n))}let r=n.lastIndexOf(k);if(r===-1)throw Error(`Could not extract indexURL path from pyodide module location. Please pass the indexURL explicitly to loadPyodide.`);return n.slice(0,r)}r(R,`calculateDirname`);function z(e){return e.substring(0,e.lastIndexOf(`/`)+1)||globalThis.location?.toString()||`.`}r(z,`calculateInstallBaseUrl`);function B(e){let t=e.FS,n=e.FS.filesystems.MEMFS,i=e.PATH,a={DIR_MODE:16895,FILE_MODE:33279,mount:r(function(e){if(!e.opts.fileSystemHandle)throw Error(`opts.fileSystemHandle is required`);return n.mount.apply(null,arguments)},`mount`),syncfs:r(async(e,t,n)=>{try{let r=a.getLocalSet(e),i=await a.getRemoteSet(e),o=t?i:r,s=t?r:i;await a.reconcile(e,o,s),n(null)}catch(e){n(e)}},`syncfs`),getLocalSet:r(e=>{let n=Object.create(null);function a(e){return e!==`.`&&e!==`..`}r(a,`isRealDir`);function o(e){return t=>i.join2(e,t)}r(o,`toAbsolute`);let s=t.readdir(e.mountpoint).filter(a).map(o(e.mountpoint));for(;s.length;){let e=s.pop(),r=t.stat(e);t.isDir(r.mode)&&s.push.apply(s,t.readdir(e).filter(a).map(o(e))),n[e]={timestamp:r.mtime,mode:r.mode}}return{type:`local`,entries:n}},`getLocalSet`),getRemoteSet:r(async e=>{let t=Object.create(null),n=await re(e.opts.fileSystemHandle);for(let[r,o]of n)r!==`.`&&(t[i.join2(e.mountpoint,r)]={timestamp:o.kind===`file`?new Date((await o.getFile()).lastModified):new Date,mode:o.kind===`file`?a.FILE_MODE:a.DIR_MODE});return{type:`remote`,entries:t,handles:n}},`getRemoteSet`),loadLocalEntry:r(e=>{let r=t.lookupPath(e,{}).node,i=t.stat(e);if(t.isDir(i.mode))return{timestamp:i.mtime,mode:i.mode};if(t.isFile(i.mode))return r.contents=n.getFileDataAsTypedArray(r),{timestamp:i.mtime,mode:i.mode,contents:r.contents};throw Error(`node type not supported`)},`loadLocalEntry`),storeLocalEntry:r((e,n)=>{if(t.isDir(n.mode))t.mkdirTree(e,n.mode);else if(t.isFile(n.mode))t.writeFile(e,n.contents,{canOwn:!0});else throw Error(`node type not supported`);t.chmod(e,n.mode),t.utime(e,n.timestamp,n.timestamp)},`storeLocalEntry`),removeLocalEntry:r(e=>{var n=t.stat(e);t.isDir(n.mode)?t.rmdir(e):t.isFile(n.mode)&&t.unlink(e)},`removeLocalEntry`),loadRemoteEntry:r(async e=>{if(e.kind===`file`){let t=await e.getFile();return{contents:new Uint8Array(await t.arrayBuffer()),mode:a.FILE_MODE,timestamp:new Date(t.lastModified)}}else{if(e.kind===`directory`)return{mode:a.DIR_MODE,timestamp:new Date};throw Error(`unknown kind: `+e.kind)}},`loadRemoteEntry`),storeRemoteEntry:r(async(e,n,r)=>{let a=e.get(i.dirname(n)),o=t.isFile(r.mode)?await a.getFileHandle(i.basename(n),{create:!0}):await a.getDirectoryHandle(i.basename(n),{create:!0});if(o.kind===`file`){let e=await o.createWritable();await e.write(r.contents),await e.close()}e.set(n,o)},`storeRemoteEntry`),removeRemoteEntry:r(async(e,t)=>{await e.get(i.dirname(t)).removeEntry(i.basename(t)),e.delete(t)},`removeRemoteEntry`),reconcile:r(async(e,n,r)=>{let o=0,s=[];Object.keys(n.entries).forEach(function(e){let i=n.entries[e],a=r.entries[e];(!a||t.isFile(i.mode)&&i.timestamp.getTime()>a.timestamp.getTime())&&(s.push(e),o++)}),s.sort();let c=[];if(Object.keys(r.entries).forEach(function(e){n.entries[e]||(c.push(e),o++)}),c.sort().reverse(),!o)return;let l=n.type===`remote`?n.handles:r.handles;for(let t of s){let n=i.normalize(t.replace(e.mountpoint,`/`)).substring(1);if(r.type===`local`){let e=l.get(n),r=await a.loadRemoteEntry(e);a.storeLocalEntry(t,r)}else{let e=a.loadLocalEntry(t);await a.storeRemoteEntry(l,n,e)}}for(let t of c)if(r.type===`local`)a.removeLocalEntry(t);else{let n=i.normalize(t.replace(e.mountpoint,`/`)).substring(1);await a.removeRemoteEntry(l,n)}},`reconcile`)};e.FS.filesystems.NATIVEFS_ASYNC=a}r(B,`initializeNativeFS`);var re=r(async e=>{let t=[];async function n(e){for await(let r of e.values())t.push(r),r.kind===`directory`&&await n(r)}r(n,`collect`),await n(e);let i=new Map;i.set(`.`,e);for(let n of t){let t=(await e.resolve(n)).join(`/`);i.set(t,n)}return i},`getFsHandles`),ie=a(`AGFzbQEAAAABDANfAGAAAW9gAW8BfwMDAgECByECD2NyZWF0ZV9zZW50aW5lbAAAC2lzX3NlbnRpbmVsAAEKEwIHAPsBAPsbCwkAIAD7GvsUAAs=`),ae=async function(){if(!(globalThis.navigator&&(/iPad|iPhone|iPod/.test(navigator.userAgent)||navigator.platform===`MacIntel`&&typeof navigator.maxTouchPoints<`u`&&navigator.maxTouchPoints>1)))try{let e=await WebAssembly.compile(ie);return await WebAssembly.instantiate(e)}catch(e){if(e instanceof WebAssembly.CompileError)return;throw e}}();async function V(){let e=await ae;if(e)return e.exports;let t=Symbol(`error marker`);return{create_sentinel:r(()=>t,`create_sentinel`),is_sentinel:r(e=>e===t,`is_sentinel`)}}r(V,`getSentinelImport`);function H(e){let t={config:e,runtimeEnv:b},n={noImageDecoding:!0,noAudioDecoding:!0,noWasmDecoding:!1,preRun:J(e),print:e.stdout,printErr:e.stderr,onExit(e){n.exitCode=e},thisProgram:e._sysExecutable,arguments:e.args,API:t,locateFile:r(t=>e.indexURL+t,`locateFile`),instantiateWasm:Y(e.indexURL)};return n}r(H,`createSettings`);function U(e){return function(t){try{t.FS.mkdirTree(e)}catch(t){console.error(`Error occurred while making a home directory '${e}':`),console.error(t),console.error(`Using '/' for a home directory instead`),e=`/`}t.FS.chdir(e)}}r(U,`createHomeDirectory`);function W(e){return function(t){Object.assign(t.ENV,e)}}r(W,`setEnvironment`);function G(e){return e?[async t=>{t.addRunDependency(`fsInitHook`);try{await e(t.FS,{sitePackages:t.API.sitePackages})}finally{t.removeRunDependency(`fsInitHook`)}}]:[]}r(G,`callFsInitHook`);function K(e){let t=e.HEAPU32[e._Py_Version>>>2];return[t>>>24&255,t>>>16&255,t>>>8&255]}r(K,`computeVersionTuple`);function q(e){let t=P(e);return async e=>{e.API.pyVersionTuple=K(e);let[n,r]=e.API.pyVersionTuple;e.FS.mkdirTree(`/lib`),e.API.sitePackages=`/lib/python${n}.${r}/site-packages`,e.FS.mkdirTree(e.API.sitePackages),e.addRunDependency(`install-stdlib`);try{let i=await t;e.FS.writeFile(`/lib/python${n}${r}.zip`,i)}catch(e){console.error(`Error occurred while installing the standard library:`),console.error(e)}finally{e.removeRunDependency(`install-stdlib`)}}}r(q,`installStdlib`);function J(e){let t;return t=e.stdLibURL==null?e.indexURL+`python_stdlib.zip`:e.stdLibURL,[q(t),U(e.env.HOME),W(e.env),B,...G(e.fsInit)]}r(J,`getFileSystemInitializationFuncs`);function Y(e){if(typeof WasmOffsetConverter<`u`)return;let{binary:t,response:n}=N(e+`pyodide.asm.wasm`),r=V();return function(e,i){return async function(){e.sentinel=await r;try{let r;r=n?await WebAssembly.instantiateStreaming(n,e):await WebAssembly.instantiate(await t,e);let{instance:a,module:o}=r;i(a,o)}catch(e){console.warn(`wasm instantiation failed!`),console.warn(e)}}(),{}}}r(Y,`getInstantiateWasmFunc`);var oe=`0.29.4`;function X(e){return e===void 0||e.endsWith(`/`)?e:e+`/`}r(X,`withTrailingSlash`);var Z=oe;async function Q(e={}){if(await T(),e.lockFileContents&&e.lockFileURL)throw Error(`Can't pass both lockFileContents and lockFileURL`);let t=e.indexURL||await R();if(t=X(O(t)),e.packageBaseUrl=X(e.packageBaseUrl),e.cdnUrl=X(e.packageBaseUrl??`https://cdn.jsdelivr.net/pyodide/v0.29.4/full/`),!e.lockFileContents){let n=e.lockFileURL??t+`pyodide-lock.json`;e.lockFileContents=L(n),e.packageBaseUrl??=z(n)}e.indexURL=t,e.packageCacheDir&&=X(O(e.packageCacheDir));let n={fullStdLib:!1,jsglobals:globalThis,stdin:globalThis.prompt?()=>globalThis.prompt():void 0,args:[],env:{},packages:[],packageCacheDir:e.packageBaseUrl,enableRunUntilComplete:!0,checkAPIVersion:!0,BUILD_ID:`9ad695efc6a269d9e0a764721c629a728308ddb40e060fe4513bb5c162585079`},r=Object.assign(n,e);return r.env.HOME??=`/home/pyodide`,r.env.PYTHONINSPECT??=`1`,r}r(Q,`initializeConfiguration`);function $(e){let t=H(e),n=t.API;return n.lockFilePromise=Promise.resolve(e.lockFileContents),t}r($,`createEmscriptenSettings`);async function se(e){if(typeof _createPyodideModule!=`function`){let t=`${e.indexURL}pyodide.asm.js`;await F(t)}}r(se,`loadWasmScript`);async function ce(e,t){if(!e._loadSnapshot)return;let n=await e._loadSnapshot,r=ArrayBuffer.isView(n)?n:new Uint8Array(n);return t.noInitialRun=!0,t.INITIAL_MEMORY=r.length,r}r(ce,`prepareSnapshot`);async function le(e){let t=await _createPyodideModule(e);if(e.exitCode!==void 0)throw new t.ExitStatus(e.exitCode);return t}r(le,`createPyodideModule`);function ue(e,t){let n=e.API;if(t.pyproxyToStringRepr&&n.setPyProxyToStringMethod(!0),t.convertNullToNone&&n.setCompatNullToNone(!0),t.toJsLiteralMap&&n.setCompatToJsLiteralMap(!0),n.version!==`0.29.4`&&t.checkAPIVersion)throw Error(`Pyodide version does not match: '${Z}' <==> '${n.version}'. If you updated the Pyodide version, make sure you also updated the 'indexURL' parameter passed to loadPyodide.`);e.locateFile=e=>{throw e.endsWith(`.so`)?Error(`Failed to find dynamic library "${e}"`):Error(`Unexpected call to locateFile("${e}")`)}}r(ue,`configureAPI`);function de(e,t,n){let r=e.API,i;return t&&(i=r.restoreSnapshot(t)),r.finalizeBootstrap(i,n._snapshotDeserializer)}r(de,`bootstrapPyodide`);async function fe(e,t){let n=e._api;return n.sys.path.insert(0,``),n._pyodide.set_excepthook(),await n.packageIndexReady,n.initializeStreams(t.stdin,t.stdout,t.stderr),e}r(fe,`finalizeSetup`);async function pe(e={}){let t=await Q(e),n=$(t);await se(t);let r=await ce(t,n),i=await le(n);return ue(i,t),await fe(de(i,r,t),t)}r(pe,`loadPyodide`);export{pe as loadPyodide,Z as version};
3
+ `).filter(function(e){return!e.match(t)},this).map(function(e){if(e.indexOf(` > eval`)>-1&&(e=e.replace(/ line (\d+)(?: > eval line \d+)* > eval:\d+:\d+/g,`:$1`)),e.indexOf(`@`)===-1&&e.indexOf(`:`)===-1)return new _({functionName:e});var t=/((.*".+"[^@]*)?[^@]*)(?:@)/,n=e.match(t),r=n&&n[1]?n[1]:void 0,i=this.extractLocation(e.replace(t,``));return new _({functionName:r,fileName:i[0],lineNumber:i[1],columnNumber:i[2],source:e})},this)},`ErrorStackParser$$parseFFOrSafari`)}}r(v,`ErrorStackParser`);var ee=new v;function y(){return typeof API<`u`&&API!==globalThis.API?API.runtimeEnv:x({IN_BUN:typeof Bun<`u`,IN_DENO:typeof Deno<`u`,IN_NODE:typeof process==`object`&&typeof process.versions==`object`&&typeof process.versions.node==`string`&&!process.browser,IN_SAFARI:typeof navigator==`object`&&typeof navigator.userAgent==`string`&&navigator.userAgent.indexOf(`Chrome`)===-1&&navigator.userAgent.indexOf(`Safari`)>-1,IN_SHELL:typeof read==`function`&&typeof load==`function`})}r(y,`getGlobalRuntimeEnv`);var b=y();function x(e){let t=e.IN_NODE&&typeof module<`u`&&module.exports&&typeof i==`function`&&typeof __dirname==`string`,n=e.IN_NODE&&!t,r=!e.IN_NODE&&!e.IN_DENO&&!e.IN_BUN,a=r&&typeof window<`u`&&typeof window.document<`u`&&typeof document.createElement==`function`&&`sessionStorage`in window&&typeof globalThis.importScripts!=`function`,o=r&&typeof globalThis.WorkerGlobalScope<`u`&&typeof globalThis.self<`u`&&globalThis.self instanceof globalThis.WorkerGlobalScope;return{...e,IN_BROWSER:r,IN_BROWSER_MAIN_THREAD:a,IN_BROWSER_WEB_WORKER:o,IN_NODE_COMMONJS:t,IN_NODE_ESM:n}}r(x,`calculateDerivedFlags`);var S,C,te,ne,w;async function T(){if(!b.IN_NODE||(S=(await import(`./__vite-browser-external-C7iut881.js`).then(t=>e(t.t(),1))).default,ne=await import(`./__vite-browser-external-C7iut881.js`).then(t=>e(t.t(),1)),w=await import(`./__vite-browser-external-C7iut881.js`).then(t=>e(t.t(),1)),te=(await import(`./__vite-browser-external-C7iut881.js`).then(t=>e(t.t(),1))).default,C=await import(`./__vite-browser-external-C7iut881.js`).then(t=>e(t.t(),1)),k=C.sep,typeof i<`u`))return;let t={fs:ne,crypto:await import(`./__vite-browser-external-C7iut881.js`).then(t=>e(t.t(),1)),ws:await import(`./__vite-browser-external-C7iut881.js`).then(t=>e(t.t(),1)),child_process:await import(`./__vite-browser-external-C7iut881.js`).then(t=>e(t.t(),1))};globalThis.require=function(e){return t[e]}}r(T,`initNodeModules`);function E(e,t){return C.resolve(t||`.`,e)}r(E,`node_resolvePath`);function D(e,t){return t===void 0&&(t=location),new URL(e,t).toString()}r(D,`browser_resolvePath`);var O=b.IN_NODE?E:b.IN_SHELL?r(e=>e,`resolvePath`):D,k;b.IN_NODE||(k=`/`);function A(e,t){return e.startsWith(`file://`)&&(e=e.slice(7)),e.includes(`://`)?{response:fetch(e)}:{binary:w.readFile(e).then(e=>new Uint8Array(e.buffer,e.byteOffset,e.byteLength))}}r(A,`node_getBinaryResponse`);function j(e,t){if(e.startsWith(`file://`)&&(e=e.slice(7)),e.includes(`://`))throw Error(`Shell cannot fetch urls`);return{binary:Promise.resolve(new Uint8Array(readbuffer(e)))}}r(j,`shell_getBinaryResponse`);function M(e,t){let n=new URL(e,location);return{response:fetch(n,t?{integrity:t}:{})}}r(M,`browser_getBinaryResponse`);var N=b.IN_NODE?A:b.IN_SHELL?j:M;async function P(e,t){let{response:n,binary:r}=N(e,t);if(r)return r;let i=await n;if(!i.ok)throw Error(`Failed to load '${e}': request failed.`);return new Uint8Array(await i.arrayBuffer())}r(P,`loadBinaryFile`);var F;if(b.IN_BROWSER_MAIN_THREAD)F=r(async e=>await import(e),`loadScript`);else if(b.IN_BROWSER_WEB_WORKER)F=r(async e=>{try{globalThis.importScripts(e)}catch(t){if(t instanceof TypeError)await import(e);else throw t}},`loadScript`);else if(b.IN_NODE)F=I;else if(b.IN_SHELL)F=load;else throw Error(`Cannot determine runtime environment`);async function I(e){e.startsWith(`file://`)&&(e=e.slice(7)),e.includes(`://`)?te.runInThisContext(await(await fetch(e)).text()):await import(S.pathToFileURL(e).href)}r(I,`nodeLoadScript`);async function L(e){if(b.IN_NODE){await T();let t=await w.readFile(e,{encoding:`utf8`});return JSON.parse(t)}else if(b.IN_SHELL){let t=read(e);return JSON.parse(t)}else return await(await fetch(e)).json()}r(L,`loadLockFile`);async function R(){if(b.IN_NODE_COMMONJS)return __dirname;let t;try{throw Error()}catch(e){t=e}let n=ee.parse(t)[0].fileName;if(b.IN_NODE&&!n.startsWith(`file://`)&&(n=`file://${n}`),b.IN_NODE_ESM){let t=await import(`./__vite-browser-external-C7iut881.js`).then(t=>e(t.t(),1));return(await import(`./__vite-browser-external-C7iut881.js`).then(t=>e(t.t(),1))).fileURLToPath(t.dirname(n))}let r=n.lastIndexOf(k);if(r===-1)throw Error(`Could not extract indexURL path from pyodide module location. Please pass the indexURL explicitly to loadPyodide.`);return n.slice(0,r)}r(R,`calculateDirname`);function z(e){return e.substring(0,e.lastIndexOf(`/`)+1)||globalThis.location?.toString()||`.`}r(z,`calculateInstallBaseUrl`);function B(e){let t=e.FS,n=e.FS.filesystems.MEMFS,i=e.PATH,a={DIR_MODE:16895,FILE_MODE:33279,mount:r(function(e){if(!e.opts.fileSystemHandle)throw Error(`opts.fileSystemHandle is required`);return n.mount.apply(null,arguments)},`mount`),syncfs:r(async(e,t,n)=>{try{let r=a.getLocalSet(e),i=await a.getRemoteSet(e),o=t?i:r,s=t?r:i;await a.reconcile(e,o,s),n(null)}catch(e){n(e)}},`syncfs`),getLocalSet:r(e=>{let n=Object.create(null);function a(e){return e!==`.`&&e!==`..`}r(a,`isRealDir`);function o(e){return t=>i.join2(e,t)}r(o,`toAbsolute`);let s=t.readdir(e.mountpoint).filter(a).map(o(e.mountpoint));for(;s.length;){let e=s.pop(),r=t.stat(e);t.isDir(r.mode)&&s.push.apply(s,t.readdir(e).filter(a).map(o(e))),n[e]={timestamp:r.mtime,mode:r.mode}}return{type:`local`,entries:n}},`getLocalSet`),getRemoteSet:r(async e=>{let t=Object.create(null),n=await re(e.opts.fileSystemHandle);for(let[r,o]of n)r!==`.`&&(t[i.join2(e.mountpoint,r)]={timestamp:o.kind===`file`?new Date((await o.getFile()).lastModified):new Date,mode:o.kind===`file`?a.FILE_MODE:a.DIR_MODE});return{type:`remote`,entries:t,handles:n}},`getRemoteSet`),loadLocalEntry:r(e=>{let r=t.lookupPath(e,{}).node,i=t.stat(e);if(t.isDir(i.mode))return{timestamp:i.mtime,mode:i.mode};if(t.isFile(i.mode))return r.contents=n.getFileDataAsTypedArray(r),{timestamp:i.mtime,mode:i.mode,contents:r.contents};throw Error(`node type not supported`)},`loadLocalEntry`),storeLocalEntry:r((e,n)=>{if(t.isDir(n.mode))t.mkdirTree(e,n.mode);else if(t.isFile(n.mode))t.writeFile(e,n.contents,{canOwn:!0});else throw Error(`node type not supported`);t.chmod(e,n.mode),t.utime(e,n.timestamp,n.timestamp)},`storeLocalEntry`),removeLocalEntry:r(e=>{var n=t.stat(e);t.isDir(n.mode)?t.rmdir(e):t.isFile(n.mode)&&t.unlink(e)},`removeLocalEntry`),loadRemoteEntry:r(async e=>{if(e.kind===`file`){let t=await e.getFile();return{contents:new Uint8Array(await t.arrayBuffer()),mode:a.FILE_MODE,timestamp:new Date(t.lastModified)}}else{if(e.kind===`directory`)return{mode:a.DIR_MODE,timestamp:new Date};throw Error(`unknown kind: `+e.kind)}},`loadRemoteEntry`),storeRemoteEntry:r(async(e,n,r)=>{let a=e.get(i.dirname(n)),o=t.isFile(r.mode)?await a.getFileHandle(i.basename(n),{create:!0}):await a.getDirectoryHandle(i.basename(n),{create:!0});if(o.kind===`file`){let e=await o.createWritable();await e.write(r.contents),await e.close()}e.set(n,o)},`storeRemoteEntry`),removeRemoteEntry:r(async(e,t)=>{await e.get(i.dirname(t)).removeEntry(i.basename(t)),e.delete(t)},`removeRemoteEntry`),reconcile:r(async(e,n,r)=>{let o=0,s=[];Object.keys(n.entries).forEach(function(e){let i=n.entries[e],a=r.entries[e];(!a||t.isFile(i.mode)&&i.timestamp.getTime()>a.timestamp.getTime())&&(s.push(e),o++)}),s.sort();let c=[];if(Object.keys(r.entries).forEach(function(e){n.entries[e]||(c.push(e),o++)}),c.sort().reverse(),!o)return;let l=n.type===`remote`?n.handles:r.handles;for(let t of s){let n=i.normalize(t.replace(e.mountpoint,`/`)).substring(1);if(r.type===`local`){let e=l.get(n),r=await a.loadRemoteEntry(e);a.storeLocalEntry(t,r)}else{let e=a.loadLocalEntry(t);await a.storeRemoteEntry(l,n,e)}}for(let t of c)if(r.type===`local`)a.removeLocalEntry(t);else{let n=i.normalize(t.replace(e.mountpoint,`/`)).substring(1);await a.removeRemoteEntry(l,n)}},`reconcile`)};e.FS.filesystems.NATIVEFS_ASYNC=a}r(B,`initializeNativeFS`);var re=r(async e=>{let t=[];async function n(e){for await(let r of e.values())t.push(r),r.kind===`directory`&&await n(r)}r(n,`collect`),await n(e);let i=new Map;i.set(`.`,e);for(let n of t){let t=(await e.resolve(n)).join(`/`);i.set(t,n)}return i},`getFsHandles`),ie=a(`AGFzbQEAAAABDANfAGAAAW9gAW8BfwMDAgECByECD2NyZWF0ZV9zZW50aW5lbAAAC2lzX3NlbnRpbmVsAAEKEwIHAPsBAPsbCwkAIAD7GvsUAAs=`),ae=async function(){if(!(globalThis.navigator&&(/iPad|iPhone|iPod/.test(navigator.userAgent)||navigator.platform===`MacIntel`&&typeof navigator.maxTouchPoints<`u`&&navigator.maxTouchPoints>1)))try{let e=await WebAssembly.compile(ie);return await WebAssembly.instantiate(e)}catch(e){if(e instanceof WebAssembly.CompileError)return;throw e}}();async function V(){let e=await ae;if(e)return e.exports;let t=Symbol(`error marker`);return{create_sentinel:r(()=>t,`create_sentinel`),is_sentinel:r(e=>e===t,`is_sentinel`)}}r(V,`getSentinelImport`);function H(e){let t={config:e,runtimeEnv:b},n={noImageDecoding:!0,noAudioDecoding:!0,noWasmDecoding:!1,preRun:J(e),print:e.stdout,printErr:e.stderr,onExit(e){n.exitCode=e},thisProgram:e._sysExecutable,arguments:e.args,API:t,locateFile:r(t=>e.indexURL+t,`locateFile`),instantiateWasm:Y(e.indexURL)};return n}r(H,`createSettings`);function U(e){return function(t){try{t.FS.mkdirTree(e)}catch(t){console.error(`Error occurred while making a home directory '${e}':`),console.error(t),console.error(`Using '/' for a home directory instead`),e=`/`}t.FS.chdir(e)}}r(U,`createHomeDirectory`);function W(e){return function(t){Object.assign(t.ENV,e)}}r(W,`setEnvironment`);function G(e){return e?[async t=>{t.addRunDependency(`fsInitHook`);try{await e(t.FS,{sitePackages:t.API.sitePackages})}finally{t.removeRunDependency(`fsInitHook`)}}]:[]}r(G,`callFsInitHook`);function K(e){let t=e.HEAPU32[e._Py_Version>>>2];return[t>>>24&255,t>>>16&255,t>>>8&255]}r(K,`computeVersionTuple`);function q(e){let t=P(e);return async e=>{e.API.pyVersionTuple=K(e);let[n,r]=e.API.pyVersionTuple;e.FS.mkdirTree(`/lib`),e.API.sitePackages=`/lib/python${n}.${r}/site-packages`,e.FS.mkdirTree(e.API.sitePackages),e.addRunDependency(`install-stdlib`);try{let i=await t;e.FS.writeFile(`/lib/python${n}${r}.zip`,i)}catch(e){console.error(`Error occurred while installing the standard library:`),console.error(e)}finally{e.removeRunDependency(`install-stdlib`)}}}r(q,`installStdlib`);function J(e){let t;return t=e.stdLibURL==null?e.indexURL+`python_stdlib.zip`:e.stdLibURL,[q(t),U(e.env.HOME),W(e.env),B,...G(e.fsInit)]}r(J,`getFileSystemInitializationFuncs`);function Y(e){if(typeof WasmOffsetConverter<`u`)return;let{binary:t,response:n}=N(e+`pyodide.asm.wasm`),r=V();return function(e,i){return async function(){e.sentinel=await r;try{let r;r=n?await WebAssembly.instantiateStreaming(n,e):await WebAssembly.instantiate(await t,e);let{instance:a,module:o}=r;i(a,o)}catch(e){console.warn(`wasm instantiation failed!`),console.warn(e)}}(),{}}}r(Y,`getInstantiateWasmFunc`);var oe=`0.29.4`;function X(e){return e===void 0||e.endsWith(`/`)?e:e+`/`}r(X,`withTrailingSlash`);var Z=oe;async function Q(e={}){if(await T(),e.lockFileContents&&e.lockFileURL)throw Error(`Can't pass both lockFileContents and lockFileURL`);let t=e.indexURL||await R();if(t=X(O(t)),e.packageBaseUrl=X(e.packageBaseUrl),e.cdnUrl=X(e.packageBaseUrl??`https://cdn.jsdelivr.net/pyodide/v0.29.4/full/`),!e.lockFileContents){let n=e.lockFileURL??t+`pyodide-lock.json`;e.lockFileContents=L(n),e.packageBaseUrl??=z(n)}e.indexURL=t,e.packageCacheDir&&=X(O(e.packageCacheDir));let n={fullStdLib:!1,jsglobals:globalThis,stdin:globalThis.prompt?()=>globalThis.prompt():void 0,args:[],env:{},packages:[],packageCacheDir:e.packageBaseUrl,enableRunUntilComplete:!0,checkAPIVersion:!0,BUILD_ID:`9ad695efc6a269d9e0a764721c629a728308ddb40e060fe4513bb5c162585079`},r=Object.assign(n,e);return r.env.HOME??=`/home/pyodide`,r.env.PYTHONINSPECT??=`1`,r}r(Q,`initializeConfiguration`);function $(e){let t=H(e),n=t.API;return n.lockFilePromise=Promise.resolve(e.lockFileContents),t}r($,`createEmscriptenSettings`);async function se(e){if(typeof _createPyodideModule!=`function`){let t=`${e.indexURL}pyodide.asm.js`;await F(t)}}r(se,`loadWasmScript`);async function ce(e,t){if(!e._loadSnapshot)return;let n=await e._loadSnapshot,r=ArrayBuffer.isView(n)?n:new Uint8Array(n);return t.noInitialRun=!0,t.INITIAL_MEMORY=r.length,r}r(ce,`prepareSnapshot`);async function le(e){let t=await _createPyodideModule(e);if(e.exitCode!==void 0)throw new t.ExitStatus(e.exitCode);return t}r(le,`createPyodideModule`);function ue(e,t){let n=e.API;if(t.pyproxyToStringRepr&&n.setPyProxyToStringMethod(!0),t.convertNullToNone&&n.setCompatNullToNone(!0),t.toJsLiteralMap&&n.setCompatToJsLiteralMap(!0),n.version!==`0.29.4`&&t.checkAPIVersion)throw Error(`Pyodide version does not match: '${Z}' <==> '${n.version}'. If you updated the Pyodide version, make sure you also updated the 'indexURL' parameter passed to loadPyodide.`);e.locateFile=e=>{throw e.endsWith(`.so`)?Error(`Failed to find dynamic library "${e}"`):Error(`Unexpected call to locateFile("${e}")`)}}r(ue,`configureAPI`);function de(e,t,n){let r=e.API,i;return t&&(i=r.restoreSnapshot(t)),r.finalizeBootstrap(i,n._snapshotDeserializer)}r(de,`bootstrapPyodide`);async function fe(e,t){let n=e._api;return n.sys.path.insert(0,``),n._pyodide.set_excepthook(),await n.packageIndexReady,n.initializeStreams(t.stdin,t.stdout,t.stderr),e}r(fe,`finalizeSetup`);async function pe(e={}){let t=await Q(e),n=$(t);await se(t);let r=await ce(t,n),i=await le(n);return ue(i,t),await fe(de(i,r,t),t)}r(pe,`loadPyodide`);export{pe as loadPyodide,Z as version};
@@ -1 +1 @@
1
- import{n as e}from"./chunk-aKtaBQYM.js";import{t}from"./dist-BmWy99kl.js";import{D as n,E as r,m as i,w as a}from"./account-store-Dha2nLml.js";import{t as o}from"./logger-DDBAeTLF.js";import"./main-D-3iO2Pb.js";import{t as s}from"./llm-session-id-DVmZ9C2t.js";import{r as c,t as l}from"./icons-BU6llBsN.js";var u=e({lucideIconNames:()=>h,pickLucideIcon:()=>g,quickLabel:()=>f}),d=o(`quick-llm`);async function f(e){let a=i();if(!a)return d.debug(`No API key for active provider — skipping`),null;let o=n(),s=r(),c;if(c=e.modelId?b(o,e.modelId)??b(o,s):_(o,s),!c)return d.debug(`No model available for provider`,{providerId:o}),null;let l={role:`user`,content:e.prompt,timestamp:Date.now()},u={};c.provider===`adobe`&&(u[`X-Session-Id`]=S());try{let n=(await t(c,{systemPrompt:e.system,messages:[l]},{apiKey:a,maxTokens:e.maxTokens??60,temperature:e.temperature??.3,signal:e.signal,headers:Object.keys(u).length>0?u:void 0})).content.filter(e=>e.type===`text`).map(e=>e.text).join(``).trim();return n.length>0?n:null}catch(e){return d.debug(`Quick label call failed`,{error:e instanceof Error?e.message:String(e)}),null}}var p=null;function m(e){return e.replace(/([A-Z]+)([A-Z][a-z])/g,`$1-$2`).replace(/([a-z0-9])([A-Z])/g,`$1-$2`).replace(/([A-Za-z])(\d)/g,`$1-$2`).toLowerCase()}function h(){return p||=Object.keys(c).map(m).sort(),p}async function g(e){let t=h(),n=await(e.labelFn??f)({system:`You pick ONE icon for a UI element. Respond with exactly one icon name from the provided list — lowercase, no quotes, no punctuation, nothing else.`,prompt:`Pick the single most fitting icon for: ${e.subject}\n\nValid icon names:\n${t.join(` `)}`,maxTokens:16,temperature:.2,signal:e.signal});if(!n)return null;let r=n.trim().toLowerCase().replace(/[^a-z0-9-]/g,``);return l(r)?r:null}function _(e,t){let n=a(e);if(n.length===0)return;let r=n.find(e=>e.id===t)??n[0],i=y(r.id),o=n.filter(e=>v(e,r,i));return o.length===0?r:(o.sort((e,t)=>(e.cost?.input??0)-(t.cost?.input??0)),o[0])}function v(e,t,n){if(e.id===t.id)return!1;let r=t.cost?.input??1/0;if((e.cost?.input??1/0)>=r)return!1;let i=e.id.toLowerCase();switch(n){case`claude`:return i.includes(`haiku`);case`gpt`:return/(^|-)mini(-|$)|(^|-)nano(-|$)/.test(i);case`gemini`:return i.includes(`flash`);case`grok`:return/(^|-)mini(-|$)|(^|-)fast(-|$)/.test(i);case`unknown`:return!0}}function y(e){let t=e.toLowerCase();return t.includes(`claude`)?`claude`:t.includes(`gemini`)?`gemini`:t.includes(`grok`)?`grok`:/^(gpt|o\d)/.test(t)?`gpt`:`unknown`}function b(e,t){return a(e).find(e=>e.id===t)}var x=`ui-quick-llm`;function S(){return s(x)}export{u as n,f as t};
1
+ import{n as e}from"./chunk-aKtaBQYM.js";import{t}from"./dist-BmWy99kl.js";import{D as n,E as r,m as i,w as a}from"./account-store-lwRLg8qZ.js";import{t as o}from"./logger-DDBAeTLF.js";import"./main-CY_go8Ex.js";import{t as s}from"./llm-session-id-DVmZ9C2t.js";import{r as c,t as l}from"./icons-BU6llBsN.js";var u=e({lucideIconNames:()=>h,pickLucideIcon:()=>g,quickLabel:()=>f}),d=o(`quick-llm`);async function f(e){let a=i();if(!a)return d.debug(`No API key for active provider — skipping`),null;let o=n(),s=r(),c;if(c=e.modelId?b(o,e.modelId)??b(o,s):_(o,s),!c)return d.debug(`No model available for provider`,{providerId:o}),null;let l={role:`user`,content:e.prompt,timestamp:Date.now()},u={};c.provider===`adobe`&&(u[`X-Session-Id`]=S());try{let n=(await t(c,{systemPrompt:e.system,messages:[l]},{apiKey:a,maxTokens:e.maxTokens??60,temperature:e.temperature??.3,signal:e.signal,headers:Object.keys(u).length>0?u:void 0})).content.filter(e=>e.type===`text`).map(e=>e.text).join(``).trim();return n.length>0?n:null}catch(e){return d.debug(`Quick label call failed`,{error:e instanceof Error?e.message:String(e)}),null}}var p=null;function m(e){return e.replace(/([A-Z]+)([A-Z][a-z])/g,`$1-$2`).replace(/([a-z0-9])([A-Z])/g,`$1-$2`).replace(/([A-Za-z])(\d)/g,`$1-$2`).toLowerCase()}function h(){return p||=Object.keys(c).map(m).sort(),p}async function g(e){let t=h(),n=await(e.labelFn??f)({system:`You pick ONE icon for a UI element. Respond with exactly one icon name from the provided list — lowercase, no quotes, no punctuation, nothing else.`,prompt:`Pick the single most fitting icon for: ${e.subject}\n\nValid icon names:\n${t.join(` `)}`,maxTokens:16,temperature:.2,signal:e.signal});if(!n)return null;let r=n.trim().toLowerCase().replace(/[^a-z0-9-]/g,``);return l(r)?r:null}function _(e,t){let n=a(e);if(n.length===0)return;let r=n.find(e=>e.id===t)??n[0],i=y(r.id),o=n.filter(e=>v(e,r,i));return o.length===0?r:(o.sort((e,t)=>(e.cost?.input??0)-(t.cost?.input??0)),o[0])}function v(e,t,n){if(e.id===t.id)return!1;let r=t.cost?.input??1/0;if((e.cost?.input??1/0)>=r)return!1;let i=e.id.toLowerCase();switch(n){case`claude`:return i.includes(`haiku`);case`gpt`:return/(^|-)mini(-|$)|(^|-)nano(-|$)/.test(i);case`gemini`:return i.includes(`flash`);case`grok`:return/(^|-)mini(-|$)|(^|-)fast(-|$)/.test(i);case`unknown`:return!0}}function y(e){let t=e.toLowerCase();return t.includes(`claude`)?`claude`:t.includes(`gemini`)?`gemini`:t.includes(`grok`)?`grok`:/^(gpt|o\d)/.test(t)?`gpt`:`unknown`}function b(e,t){return a(e).find(e=>e.id===t)}var x=`ui-quick-llm`;function S(){return s(x)}export{u as n,f as t};
@@ -1 +1 @@
1
- import{r as e}from"./chunk-CMxvf4Kt.js";var t=e({RemoteMountCache:()=>i});const n=`listings`,r=`bodies`;var i=class{mountId;ttlMs;dbName;dbPromise=null;constructor(e){this.mountId=e.mountId,this.ttlMs=e.ttlMs,this.dbName=e.dbName??`slicc-mount-cache`}isStale(e,t){return Date.now()-e>=(t??this.ttlMs)}async openDb(){return this.dbPromise||=new Promise((e,t)=>{let i=indexedDB.open(this.dbName,1);i.onupgradeneeded=()=>{let e=i.result;e.objectStoreNames.contains(n)||e.createObjectStore(n),e.objectStoreNames.contains(r)||e.createObjectStore(r)},i.onsuccess=()=>{let t=i.result;t.onversionchange=()=>{t.close(),this.dbPromise=null},t.onclose=()=>{this.dbPromise=null},e(t)},i.onerror=()=>t(i.error)}),this.dbPromise}key(e){return`${this.mountId}::${e}`}async getListing(e){let t=await this.openDb();return new Promise((r,i)=>{let a=t.transaction(n,`readonly`).objectStore(n).get(this.key(e));a.onsuccess=()=>r(a.result??null),a.onerror=()=>i(a.error)})}async putListing(e,t){let r=await this.openDb();return new Promise((i,a)=>{let o=r.transaction(n,`readwrite`),s={entries:t,cachedAt:Date.now()};o.objectStore(n).put(s,this.key(e)),o.oncomplete=()=>i(),o.onerror=()=>a(o.error)})}async invalidateListing(e){let t=await this.openDb();return new Promise((r,i)=>{let a=t.transaction(n,`readwrite`);a.objectStore(n).delete(this.key(e)),a.oncomplete=()=>r(),a.onerror=()=>i(a.error)})}async getBody(e){let t=await this.openDb();return new Promise((n,i)=>{let a=t.transaction(r,`readonly`).objectStore(r).get(this.key(e));a.onsuccess=()=>n(a.result??null),a.onerror=()=>i(a.error)})}async putBody(e,t,n){let i=await this.openDb(),a={body:t,etag:n,size:t.byteLength,cachedAt:Date.now()};try{await this.txPut(i,r,this.key(e),a)}catch(t){if(t instanceof DOMException&&t.name===`QuotaExceededError`){await this.evictLru(.25);try{await this.txPut(i,r,this.key(e),a)}catch{}return}throw t}}async invalidateBody(e){let t=await this.openDb();return new Promise((n,i)=>{let a=t.transaction(r,`readwrite`);a.objectStore(r).delete(this.key(e)),a.oncomplete=()=>n(),a.onerror=()=>i(a.error)})}async clearMount(){let e=await this.openDb(),t=`${this.mountId}::`,i=n=>new Promise((r,i)=>{let a=e.transaction(n,`readwrite`),o=a.objectStore(n),s=o.getAllKeys();s.onsuccess=()=>{for(let e of s.result)typeof e==`string`&&e.startsWith(t)&&o.delete(e)},a.oncomplete=()=>r(),a.onerror=()=>i(a.error)});await Promise.all([i(n),i(r)])}txPut(e,t,n,r){return new Promise((i,a)=>{let o=e.transaction(t,`readwrite`);o.objectStore(t).put(r,n),o.oncomplete=()=>i(),o.onerror=()=>a(o.error)})}async evictLru(e){let t=await this.openDb(),n=`${this.mountId}::`,i=await new Promise((e,i)=>{let a=t.transaction(r,`readonly`).objectStore(r),o=[],s=a.openCursor();s.onsuccess=()=>{let t=s.result;if(!t){e(o);return}if(typeof t.key==`string`&&t.key.startsWith(n)){let e=t.value;o.push({key:t.key,cachedAt:e.cachedAt})}t.continue()},s.onerror=()=>i(s.error)});i.sort((e,t)=>e.cachedAt-t.cachedAt);let a=Math.max(1,Math.ceil(i.length*e)),o=i.slice(0,a);await new Promise((e,n)=>{let i=t.transaction(r,`readwrite`),a=i.objectStore(r);for(let{key:e}of o)a.delete(e);i.oncomplete=()=>e(),i.onerror=()=>n(i.error)})}};export{t as n,i as t};
1
+ import{n as e}from"./chunk-aKtaBQYM.js";var t=e({RemoteMountCache:()=>i});const n=`listings`,r=`bodies`;var i=class{mountId;ttlMs;dbName;dbPromise=null;constructor(e){this.mountId=e.mountId,this.ttlMs=e.ttlMs,this.dbName=e.dbName??`slicc-mount-cache`}isStale(e,t){return Date.now()-e>=(t??this.ttlMs)}async openDb(){return this.dbPromise||=new Promise((e,t)=>{let i=indexedDB.open(this.dbName,1);i.onupgradeneeded=()=>{let e=i.result;e.objectStoreNames.contains(n)||e.createObjectStore(n),e.objectStoreNames.contains(r)||e.createObjectStore(r)},i.onsuccess=()=>{let t=i.result;t.onversionchange=()=>{t.close(),this.dbPromise=null},t.onclose=()=>{this.dbPromise=null},e(t)},i.onerror=()=>t(i.error)}),this.dbPromise}key(e){return`${this.mountId}::${e}`}async getListing(e){let t=await this.openDb();return new Promise((r,i)=>{let a=t.transaction(n,`readonly`).objectStore(n).get(this.key(e));a.onsuccess=()=>r(a.result??null),a.onerror=()=>i(a.error)})}async putListing(e,t){let r=await this.openDb();return new Promise((i,a)=>{let o=r.transaction(n,`readwrite`),s={entries:t,cachedAt:Date.now()};o.objectStore(n).put(s,this.key(e)),o.oncomplete=()=>i(),o.onerror=()=>a(o.error)})}async invalidateListing(e){let t=await this.openDb();return new Promise((r,i)=>{let a=t.transaction(n,`readwrite`);a.objectStore(n).delete(this.key(e)),a.oncomplete=()=>r(),a.onerror=()=>i(a.error)})}async getBody(e){let t=await this.openDb();return new Promise((n,i)=>{let a=t.transaction(r,`readonly`).objectStore(r).get(this.key(e));a.onsuccess=()=>n(a.result??null),a.onerror=()=>i(a.error)})}async putBody(e,t,n){let i=await this.openDb(),a={body:t,etag:n,size:t.byteLength,cachedAt:Date.now()};try{await this.txPut(i,r,this.key(e),a)}catch(t){if(t instanceof DOMException&&t.name===`QuotaExceededError`){await this.evictLru(.25);try{await this.txPut(i,r,this.key(e),a)}catch{}return}throw t}}async invalidateBody(e){let t=await this.openDb();return new Promise((n,i)=>{let a=t.transaction(r,`readwrite`);a.objectStore(r).delete(this.key(e)),a.oncomplete=()=>n(),a.onerror=()=>i(a.error)})}async clearMount(){let e=await this.openDb(),t=`${this.mountId}::`,i=n=>new Promise((r,i)=>{let a=e.transaction(n,`readwrite`),o=a.objectStore(n),s=o.getAllKeys();s.onsuccess=()=>{for(let e of s.result)typeof e==`string`&&e.startsWith(t)&&o.delete(e)},a.oncomplete=()=>r(),a.onerror=()=>i(a.error)});await Promise.all([i(n),i(r)])}txPut(e,t,n,r){return new Promise((i,a)=>{let o=e.transaction(t,`readwrite`);o.objectStore(t).put(r,n),o.oncomplete=()=>i(),o.onerror=()=>a(o.error)})}async evictLru(e){let t=await this.openDb(),n=`${this.mountId}::`,i=await new Promise((e,i)=>{let a=t.transaction(r,`readonly`).objectStore(r),o=[],s=a.openCursor();s.onsuccess=()=>{let t=s.result;if(!t){e(o);return}if(typeof t.key==`string`&&t.key.startsWith(n)){let e=t.value;o.push({key:t.key,cachedAt:e.cachedAt})}t.continue()},s.onerror=()=>i(s.error)});i.sort((e,t)=>e.cachedAt-t.cachedAt);let a=Math.max(1,Math.ceil(i.length*e)),o=i.slice(0,a);await new Promise((e,n)=>{let i=t.transaction(r,`readwrite`),a=i.objectStore(r);for(let{key:e}of o)a.delete(e);i.oncomplete=()=>e(),i.onerror=()=>n(i.error)})}};export{t as n,i as t};
@@ -0,0 +1,5 @@
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-DfXu6quJ.js";import{t}from"./wc-permissions-registry-CR1rTd2H.js";import"./picker-approval-Dc390nC7.js";import{a as n}from"./mount-picker-popup-Hrvzr69c.js";import{r,t as i}from"./hid-device-registry-D2LsJCRr.js";import"./browser-ukv9lM61.js";import{a,n as o}from"./serial-port-registry-Bc4wlwED.js";import"./serial-picker-B6s4NeaB.js";import"./hid-picker-DUJBI46p.js";import{i as s,t as c}from"./usb-device-registry-BP58Vi0S.js";import"./usb-picker-D_K0weAY.js";import{TerminalSessionClient as l}from"./terminal-session-client-CbAduNfC.js";new TextDecoder(`utf-8`,{fatal:!1}),new TextEncoder;var u=new Set([`--vid`,`--pid`,`--baud`,`--data-bits`,`--stop-bits`,`--parity`,`--flow-control`,`--buffer-size`,`--bytes`,`--until`,`--timeout-ms`,`--dtr`,`--rts`,`--break`,`--__resolved`]);function d(e){let t=[],n=new Map,r=new Set;for(let i=0;i<e.length;i++){let a=e[i];a.startsWith(`-`)?u.has(a)?n.set(a,e[++i]??``):r.add(a):t.push(a)}return{positionals:t,flags:n,bools:r}}function f(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 p(e){let t={};return e.has(`--vid`)&&(t.usbVendorId=f(e.get(`--vid`),`vid`)),e.has(`--pid`)&&(t.usbProductId=f(e.get(`--pid`),`pid`)),Object.keys(t).length>0?[t]:[]}`${o}${o}`;var m=new Set([`--port`,`--baud`,`--vid`,`--pid`]),h=115200;function g(e){let t=[],n=new Map,r=new Set;for(let i=0;i<e.length;i++){let a=e[i];a.startsWith(`-`)?m.has(a)?n.set(a,e[++i]??``):r.add(a):t.push(a)}return{positionals:t,flags:n,bools:r}}`${h}`;var _=new Set([`--vid`,`--pid`,`--usage-page`,`--usage`,`--__resolved`,`--timeout`]);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(`-`)?_.has(a)?n.set(a,e[++i]??``):r.add(a):t.push(a)}return{positionals:t,flags:n,bools:r}}function y(e,t){let n=/^0x/i.test(e)?parseInt(e,16):parseInt(e,10);if(!Number.isFinite(n)||Number.isNaN(n))throw Error(`invalid ${t}: '${e}'`);return n}function b(e){let t={};return e.has(`--vid`)&&(t.vendorId=y(e.get(`--vid`),`vid`)),e.has(`--pid`)&&(t.productId=y(e.get(`--pid`),`pid`)),e.has(`--usage-page`)&&(t.usagePage=y(e.get(`--usage-page`),`usage-page`)),e.has(`--usage`)&&(t.usage=y(e.get(`--usage`),`usage`)),Object.keys(t).length>0?[t]:[]}`${i}`;var x=new Set([`--vid`,`--pid`,`--class`,`--subclass`,`--protocol`,`--serial`,`--request-type`,`--recipient`,`--request`,`--value`,`--index`,`--__resolved`]);function S(e){let t=[],n=new Map,r=new Set;for(let i=0;i<e.length;i++){let a=e[i];a.startsWith(`-`)?x.has(a)?n.set(a,e[++i]??``):r.add(a):t.push(a)}return{positionals:t,flags:n,bools:r}}function C(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 w(e){let t={};return e.has(`--vid`)&&(t.vendorId=C(e.get(`--vid`),`vid`)),e.has(`--pid`)&&(t.productId=C(e.get(`--pid`),`pid`)),e.has(`--class`)&&(t.classCode=C(e.get(`--class`),`class`)),e.has(`--subclass`)&&(t.subclassCode=C(e.get(`--subclass`),`subclass`)),e.has(`--protocol`)&&(t.protocolCode=C(e.get(`--protocol`),`protocol`)),e.has(`--serial`)&&(t.serialNumber=e.get(`--serial`)),Object.keys(t).length>0?[t]:[]}`${c}`;var T={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`},E={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`},D=`\x1B[34m/\x1B[0m \x1B[90m$\x1B[0m `,O=4,k=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 l({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?T:E,convertEol:!0}),this.themeObserver=new MutationObserver(()=>{if(!this.terminal)return;let e=document.documentElement.classList.contains(`theme-light`);this.terminal.options.theme=e?E:T}),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(D)}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}=R(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(z(n))).stdout.trim()===n&&(a=`/`)}finally{this.suppressOutput=!1}}this.insertText(a);return}let a=B(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[${O+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=A(e);if(t){this.runRemoteWithLocalPicker(e,t);return}let n=M(e);if(n){this.runRemoteWithUsbPicker(n);return}let r=N(e);if(r){this.runRemoteWithHidPicker(r);return}let i=F(e);if(i){this.runRemoteWithSerialPicker(i);return}let a=I(e);if(a){this.runRemoteWithEsptoolPicker(e,a);return}this.runRemote(e)}async requestPermission(e,n){let r=t();if(!r)return{ok:!1,reason:`unavailable`,message:`permission surface not mounted`};let i={current:null},a=t=>{let n=t.detail;n.kind===e&&(i.current=n)};r.addEventListener(`slicc-permission-deny`,a);try{let t=await r.request(e,n);if(t)return{ok:!0,grant:t};let a=i.current;return{ok:!1,reason:a?.reason??`error`,...a?.message?{message:a.message}:{}}}finally{r.removeEventListener(`slicc-permission-deny`,a)}}writePickerDenial(e,t,n){if(this.terminal){if(t.reason===`cancelled`){this.terminal.writeln(`${e}: cancelled`);return}if(t.reason===`unavailable`){this.terminal.writeln(`${e}: ${n}`);return}this.terminal.writeln(`${e}: ${t.message??`unknown error`}`)}}async runRemoteWithUsbPicker(e){this.isExecuting=!0;try{let t=await this.requestPermission(`usb`,{filters:e});if(!t.ok){this.writePickerDenial(`usb`,t,`WebUSB is not available in this browser`);return}let n=t.grant,r=s().register(n.device);await this.runRemoteImpl(`usb request --__resolved ${r}`)}finally{this.isExecuting=!1,this.showPrompt()}}async runRemoteWithHidPicker(e){this.isExecuting=!0;try{let t=await this.requestPermission(`hid`,{filters:e});if(!t.ok){this.writePickerDenial(`hid`,t,`WebHID is not available in this browser`);return}let n=t.grant,i=r(),a=n.devices.map(e=>i.register(e)),o=P(e[0]);await this.runRemoteImpl(`hid request --__resolved ${a.join(`,`)}${o}`)}finally{this.isExecuting=!1,this.showPrompt()}}async runRemoteWithSerialPicker(e){this.isExecuting=!0;try{let t=await this.requestPermission(`serial`,e.length?{filters:e}:void 0);if(!t.ok){this.writePickerDenial(`serial`,t,`Web Serial is not available in this browser`);return}let n=t.grant,r=a().register(n.port);await this.runRemoteImpl(`serial request --__resolved ${r}`)}finally{this.isExecuting=!1,this.showPrompt()}}async runRemoteWithEsptoolPicker(e,t){this.isExecuting=!0;try{let n=await this.requestPermission(`serial`,t.length?{filters:t}:void 0);if(!n.ok){this.writePickerDenial(`esptool`,n,`Web Serial is not available in this browser`);return}let r=n.grant,i=a().register(r.port);await this.runRemoteImpl(`${e.trim()} --port ${i}`)}finally{this.isExecuting=!1,this.showPrompt()}}async runRemoteWithLocalPicker(e,t){this.isExecuting=!0;try{let r=await this.requestPermission(`filesystem`);if(!r.ok){this.writePickerDenial(`mount`,r,`File System Access API not available`);return}let i=r.grant;try{await n(j(t),i.handle)}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 A(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 j(e){return`pendingMount:term:${e}`}function M(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}=S(t.slice(2));return w(n)}function N(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}=v(t.slice(2));return b(n)}function P(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 F(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}=d(t.slice(2));return p(n)}function I(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}=g(t.slice(1));return n.length===0?null:p(r)}function L(e){return e.length===0?`''`:`'${e.replace(/'/g,`'\\''`)}'`}function R(e){let t=e.split(/\s+/),n=t[t.length-1]??``,r=t.length<=1||t.length===2&&t[0]===``,i=L(n);return{currentWord:n,isFirstWord:r,compgenCmd:r?`compgen -A command -- ${i}`:`compgen -f -- ${i}`}}function z(e){return`compgen -d -- ${L(e)}`}function B(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{k as RemoteTerminalView,j as localMountIdbKey};
@@ -0,0 +1 @@
1
+ import{t as e}from"./types-idfTVsM8.js";function t(e){return new i(e)}var n=3e4,r=`vfs-r-`,i=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`${r}${this.counter.toString(36)}-${e}`}),this.unsubscribe=this.transport.onMessage(e=>{if(!a(e)||e.source!==`offscreen`)return;let t=e.payload;o(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){t.requestId.startsWith(r)&&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(s(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 a(e){return typeof e==`object`&&!!e&&`source`in e&&`payload`in e}function o(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 s(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};
@@ -0,0 +1 @@
1
+ import{t as e}from"./logger-DDBAeTLF.js";import{a as t,t as n}from"./proxied-fetch-CKDBmEMl.js";import{t as r}from"./secret-topology-bwXIzzAK.js";import{t as i}from"./secrets-bridge-client-BSipj-5f.js";var a=e(`secret-env`);function o(e){return/^[A-Za-z_][A-Za-z0-9_]*$/.test(e)}function s(e){let t={},n;for(let r of e)!r?.name||!r?.maskedValue||(r.name===`oauth.github.token`&&(n=r.maskedValue),o(r.name)&&(t[r.name]=r.maskedValue));return n&&(t.GITHUB_TOKEN===void 0&&(t.GITHUB_TOKEN=n),t.GH_TOKEN===void 0&&(t.GH_TOKEN=n)),t}async function c(){let e=r();if(e===`extension-direct`)return new Promise(e=>{chrome.runtime.sendMessage({type:`secrets.list-masked-entries`},t=>{let n=s(t?.entries??[]);Object.keys(n).length>0&&a.info(`Loaded masked secrets into shell env from SW`,{count:Object.keys(n).length}),e(n)})});if(e===`extension-delegate`)try{let e=s((await i(`secrets.list-masked-entries`))?.entries??[]);return Object.keys(e).length>0&&a.info(`Loaded masked secrets into shell env from bridge`,{count:Object.keys(e).length}),e}catch(e){return a.debug(`Bridge list-masked-entries failed`,{error:e instanceof Error?e.message:String(e)}),{}}if(e===`connect`)return{};try{let e=await fetch(t(`/api/secrets/masked`),{headers:n()});if(!e.ok)return a.warn(`Failed to fetch masked secrets`,{status:e.status}),{};let r=await e.json();if(!Array.isArray(r)||r.length===0)return{};let i=s(r);return Object.keys(i).length>0&&a.info(`Loaded masked secrets into shell env`,{count:Object.keys(i).length}),i}catch(e){return a.debug(`Could not fetch masked secrets (server may be unavailable)`,{error:e instanceof Error?e.message:String(e)}),{}}}export{c as fetchSecretEnvVars};
@@ -0,0 +1 @@
1
+ import{n as e}from"./proxied-fetch-CKDBmEMl.js";function t(){return typeof chrome<`u`&&chrome?.runtime?.id?`extension-direct`:e()?`extension-delegate`:globalThis.__slicc_connect_mode?`connect`:`node-rest`}export{t};
@@ -0,0 +1,2 @@
1
+ const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/panel-rpc-DqT2FG7c.js","assets/chunk-aKtaBQYM.js"])))=>i.map(i=>d[i]);
2
+ import{n as e}from"./chunk-aKtaBQYM.js";import{t}from"./preload-helper-zJ_50EbN.js";import{t as n}from"./logger-DDBAeTLF.js";import{n as r}from"./proxied-fetch-CKDBmEMl.js";var i=e({callSecretsBridge:()=>p}),a=n(`secrets-bridge`),o=1e4,s=null,c=1,l=new Map;function u(e){let t=e;if(typeof t?.id!=`number`)return;let n=l.get(t.id);n&&(l.delete(t.id),clearTimeout(n.timer),n.resolve(t.response))}function d(){s=null;for(let[,e]of l)clearTimeout(e.timer),e.reject(Error(`secrets.crud port disconnected`));l.clear(),a.debug(`secrets.crud port disconnected; pending cleared, will reconnect`)}function f(){if(s)return s;let e=r();if(!e)return a.warn(`cannot open secrets.crud port: no extension delegate id`),null;if(typeof chrome>`u`||typeof chrome?.runtime?.connect!=`function`)return a.warn(`cannot open secrets.crud port: chrome.runtime.connect unavailable`),null;let t=chrome.runtime.connect,n=t(e,{name:`secrets.crud`});return n.onMessage.addListener(u),n.onDisconnect.addListener(d),s=n,n}function p(e,t){return typeof chrome>`u`&&r()?h(e,t):m(e,t)}function m(e,t){return new Promise((n,r)=>{let i=f();if(!i){n(void 0);return}let u=c++,d=setTimeout(()=>{l.delete(u)&&(a.warn(`secrets.crud call timed out`,{type:e}),n(void 0))},o);l.set(u,{resolve:n,reject:r,timer:d});try{i.postMessage({id:u,type:e,...t})}catch(e){l.delete(u),clearTimeout(d),s=null,r(e instanceof Error?e:Error(String(e)))}})}async function h(e,n){let{getPanelRpcClient:r}=await t(async()=>{let{getPanelRpcClient:e}=await import(`./panel-rpc-DqT2FG7c.js`).then(e=>e.i);return{getPanelRpcClient:e}},__vite__mapDeps([0,1])),i=r();if(!i){a.warn(`cannot bridge secrets call: panel-RPC client unavailable in worker realm`,{type:e});return}let{response:s}=await i.call(`secrets-bridge`,{type:e,payload:n},{timeoutMs:o});return s}export{i as n,p as t};
@@ -0,0 +1 @@
1
+ import{n as e}from"./chunk-aKtaBQYM.js";import{n as t,t as n}from"./picker-popup-CpulHQsi.js";var r=e({canOpenSerialPickerPopup:()=>a,openSerialPickerPopup:()=>o}),i=6e4;function a(){return n()}function o(e){return new Promise(n=>{let r=!1,a=e=>{r||(r=!0,clearTimeout(o),n(e))},o=setTimeout(()=>a({cancelled:!0}),i);t(`serial-port`,e??[],void 0,{timeoutMs:i}).then(e=>{let t=e;t.cancelled?a({cancelled:!0}):typeof t.error==`string`?a({error:t.error}):t.granted&&t.info?a({granted:!0,info:t.info}):a({error:`serial picker returned an unexpected response`})}).catch(e=>{a({error:e instanceof Error?e.message:`Failed to open serial picker`})})})}export{r as t};
@@ -0,0 +1 @@
1
+ import{u as e}from"./wc-live-B3kXelNl.js";export{e as readSessionsIndex};
@@ -0,0 +1 @@
1
+ import{t as e}from"./mime-types-ugOWOUZ9.js";import"./fetch-body-D2PwksUW.js";import{i as t,t as n}from"./path-utils-DU6QhF_k.js";var r=new Set([`fs`,`path`,`crypto`,`process`,`buffer`,`assert`,`assert/strict`,`util`]),i=new Set(`assert.assert/strict.async_hooks.buffer.child_process.cluster.console.constants.crypto.dgram.diagnostics_channel.dns.dns/promises.domain.events.fs.fs/promises.http.http2.https.inspector.inspector/promises.module.net.os.path.path/posix.path/win32.perf_hooks.process.punycode.querystring.readline.readline/promises.repl.stream.stream/consumers.stream/promises.stream/web.string_decoder.sys.timers.timers/promises.tls.trace_events.tty.url.util.util/types.v8.vm.wasi.worker_threads.zlib`.split(`.`));new Set([...i].filter(e=>!r.has(e))),[`unpkg`,`com`].join(`.`),[`cdn`,`jsdelivr`,`net`].join(`.`),[`registry`,`npmjs`,`org`].join(`.`);var a=`sliccy:`,o=`node:`,s=[`.js`,`.cjs`,`.mjs`,`.json`],c=[`index.js`,`index.cjs`,`index.mjs`,`index.json`],l=[`node`,`require`,`default`];function u(e){return t(e).dir}function d(e){return e===`.`||e===`..`||e.startsWith(`./`)||e.startsWith(`../`)||e.startsWith(`/`)}function f(e){if(e.startsWith(`@`)){let t=e.split(`/`);return{name:t.slice(0,2).join(`/`),subpath:t.slice(2).join(`/`)}}let t=e.indexOf(`/`);return t===-1?{name:e,subpath:``}:{name:e.slice(0,t),subpath:e.slice(t+1)}}async function p(e,t){return await e.exists(t)?!await e.isDirectory(t):!1}async function m(e,t){if(await p(e,t))return t;for(let n of s){let r=t+n;if(await p(e,r))return r}return null}async function h(e,t){for(let r of c){let i=n(t,r);if(await p(e,i))return i}return null}async function g(e,t,n,r){return await m(e,t)||(await e.isDirectory(t)?S(e,t,n,r):null)}async function _(e,t){let r=n(t,`package.json`);if(!await p(e,r))return null;let i;try{i=await e.readFile(r)}catch{return null}if(!i.trim())return null;try{return JSON.parse(i)}catch(e){let t=e instanceof Error?e.message:String(e);throw Error(`Invalid package.json at '${r}': ${t}`)}}function v(e,t){if(typeof e==`string`)return e;if(typeof e!=`object`||!e)return null;if(Array.isArray(e)){for(let n of e){let e=v(n,t);if(e)return e}return null}let n=e;for(let e of t)if(Object.hasOwn(n,e)){let r=v(n[e],t);if(r)return r}return null}function y(e){return!e||typeof e!=`object`||Array.isArray(e)?!1:Object.keys(e).some(e=>e===`.`||e.startsWith(`./`))}function b(e){return y(e)?e[`.`]:e}async function x(e,t,r,i,a,o){let s=n(t,r),c=s===t,l=c?await h(e,t):await g(e,s,i,a);if(l)return l;if(c)return null;throw Error(`Cannot find module: ${o} '${r}' missing in '${t}'`)}async function S(e,t,n,r=new Set){if(r.has(t))return h(e,t);r.add(t);let i=await _(e,t);if(i){if(i.exports!==void 0){let a=v(b(i.exports),n);if(a)return x(e,t,a,n,r,`exports entry`)}let a=typeof i.main==`string`&&i.main||typeof i.module==`string`&&i.module||``;if(a)return x(e,t,a,n,r,`main entry`)}return h(e,t)}async function C(e,t,r,i){if(r===``)return S(e,t,i);let a=await _(e,t);if(a?.exports!==void 0&&y(a.exports)){let o=a.exports[`./${r}`];if(o!==void 0){let a=v(o,i);if(a){let o=await g(e,n(t,a),i);if(o)return o;throw Error(`Cannot find module: exports entry './${r}' missing in '${t}'`)}}}return g(e,n(t,r),i)}async function w(e,t,r){let i=t||`/`;for(;;){let t=n(i,`node_modules`,r);if(await e.isDirectory(t))return t;if(i===`/`||i===``)break;i=u(i)}return null}async function T(e,t){let r=t||`/`;for(;;){if(await p(e,n(r,`package.json`)))return r;if(r===`/`||r===``)break;r=u(r)}return null}function E(e){return[`browser`,e.includes(`import`)?`import`:`require`,`default`]}function D(e,t){if(Object.hasOwn(t,e))return{field:t[e],star:``};for(let n of Object.keys(t)){let r=n.indexOf(`*`);if(r===-1||n.indexOf(`*`,r+1)!==-1)continue;let i=n.slice(0,r),a=n.slice(r+1);if(e.length<i.length+a.length||!e.startsWith(i)||a&&!e.endsWith(a))continue;let o=e.slice(i.length,e.length-a.length);return{field:t[n],star:o}}return null}async function O(e,t,r,i){let a=await T(r,t);if(!a)return null;let o=(await _(r,a))?.imports;if(!o||typeof o!=`object`||Array.isArray(o))return null;let s=D(e,o);if(!s)return null;let c=E(i),l=v(s.field,c);return l?g(r,n(a,s.star?l.replace(/\*/g,s.star):l),c):null}var k=/(?:^|[;\n}])\s*import\b(?!\s*[(.])/,A=/(?:^|[;\n}])\s*export\b/,j=/\bimport\s*\.\s*meta\b/;function M(e){return k.test(e)||A.test(e)||j.test(e)}async function N(e,t){if(t.endsWith(`.json`))return`json`;if(t.endsWith(`.mjs`))return`esm`;if(t.endsWith(`.cjs`))return`cjs`;let n=u(t);for(;;){let t=null;try{t=await _(e,n)}catch{t=null}if(t){if(t.type===`module`)return`esm`;if(t.type!==void 0&&t.type!==null)return`cjs`;break}if(n===`/`||n===``)break;n=u(n)}let r;try{r=await e.readFile(t)}catch{return`cjs`}return M(r)?`esm`:`cjs`}async function P(e,t,r,s={}){let c=s.conditions??l;if(e.startsWith(a)){let t=e.slice(7);if(t===``)throw Error(`Cannot resolve 'sliccy:': empty sliccy: module name`);return{type:`sliccy`,specifier:e,name:t}}if(e.startsWith(o))return{type:`builtin`,specifier:e,name:e.slice(5)};if(i.has(e))return{type:`builtin`,specifier:e,name:e};if(e.startsWith(`#`)){if(e===`#`||e.startsWith(`#/`))throw Error(`Cannot find module '${e}'`);let n=await O(e,t,r,c);if(!n)throw Error(`Cannot find module '${e}'`);return{type:`file`,path:n,moduleKind:await N(r,n)}}if(d(e)){let i=await g(r,e.startsWith(`/`)?e:n(t,e),c);if(!i)throw Error(`Cannot find module '${e}'`);return{type:`file`,path:i,moduleKind:await N(r,i)}}let{name:u,subpath:p}=f(e),m=await w(r,t,u);if(!m)throw Error(`Cannot find module '${e}' (run: ipk install ${u})`);let h=await C(r,m,p,c);if(!h)throw Error(`Cannot find module '${e}'`);return{type:`file`,path:h,moduleKind:await N(r,h)}}function F(t){return e(t)}function I(e){let t=typeof chrome<`u`&&!!chrome?.runtime?.id,n=`/preview${e}`;if(t)return chrome.runtime.getURL(n);let r=`http://localhost:5710`;return typeof window<`u`&&window.location?.origin?r=window.location.origin:typeof self<`u`&&self.location?.origin&&(r=self.location.origin),`${r}${n}`}function L(){return typeof process<`u`&&!!process.versions?.node}export{P as i,L as n,I as r,F as t};
@@ -0,0 +1 @@
1
+ import{t as e}from"./logger-LESFN7Hj.js";import{callEnsureSpeechAssets as t}from"./speech-assets-bridge-BUDIvdid.js";import{a as n,i as r,n as i,r as a}from"./kokoro-engine-io4cnyoV.js";const o=e(`speech:speak`);function s(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 c(){return r()?.voices()??[]}const l=()=>typeof chrome<`u`&&!!chrome?.runtime?.id;function u(){let e=a();return{state:n(),...e?{loaded:e.loaded,total:e.total,etaSeconds:e.etaSeconds}:{}}}async function d(){try{l()||await t({instanceId:void 0})}catch(e){o.warn(`kokoro asset staging failed; trying already-present weights`,e)}try{await i()}catch(e){o.warn(`kokoro warmup load failed`,e)}}function f(){return d(),u()}let p=null;function m(){return(!p||p.state===`closed`)&&(p=new AudioContext),p}async function h(e,t,n=1){let r=m();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 g(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 _(e){let t=r();if(s(e,{ready:t!==null,voiceIds:t?.voices().map(e=>e.id)??[]})===`kokoro`&&t){let n=0;try{let r=t.synthesizeStream(e.text,{...e.voice?{voice:e.voice}:{},...e.rate?{speed:e.rate}:{}});for await(let t of r)await h(t.audio,t.sampleRate,e.volume),n++;return{engine:`kokoro`}}catch(e){if(n>0)return o.warn(`kokoro stream failed mid-playback; stopping`,e),{engine:`kokoro`};o.warn(`kokoro synthesis failed; falling back to webspeech`,e)}}return await g(e),{engine:`webspeech`}}export{u as kokoroStatus,c as kokoroVoicesIfReady,f as kokoroWarmup,_ as speak};
@@ -0,0 +1,2 @@
1
+ const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/transformers.web-CuUo4MLm.js","assets/chunk-aKtaBQYM.js","assets/preload-helper-zJ_50EbN.js","assets/kokoro-B5jJ2WUJ.js","assets/__vite-browser-external-C7iut881.js"])))=>i.map(i=>d[i]);
2
+ import{t as e}from"./preload-helper-zJ_50EbN.js";import{t}from"./logger-DDBAeTLF.js";import{t as n}from"./speech-assets-bridge-B8NqCAE8.js";import{n as r,r as i,t as a}from"./transformers-env-CgaV7qpU.js";var o=t(`speech:kokoro`),s=`onnx-community/Kokoro-82M-v1.0-ONNX`;function c(e){return Object.entries(e).map(([e,t])=>({id:e,name:t.name||e,lang:t.language===`en-gb`||e.startsWith(`b`)?`en-GB`:`en-US`,...t.gender?{gender:t.gender}:{}}))}var l=`style_text_to_speech_2`,u=`StyleTextToSpeech2Model`;function d(e){return e?.model_type===l&&(!Array.isArray(e.architectures)||e.architectures.length===0)&&(e.architectures=[u]),e}var f=Symbol.for(`slicc.kokoro.style-tts2-arch-shim`);function p(e){let t=e?.AutoConfig,n=t?.from_pretrained;if(!t||typeof n!=`function`){o.debug(`style_text_to_speech_2 shim skipped: AutoConfig.from_pretrained unavailable`);return}if(n[f])return;let r=async(...e)=>{let r=await n.apply(t,e),i=r?.model_type===l&&(!Array.isArray(r.architectures)||r.architectures.length===0);return d(r),i&&o.debug(`style_text_to_speech_2 architectures injected for "${String(e[0])}": [${u}]`),r};r[f]=!0,t.from_pretrained=r,o.debug(`style_text_to_speech_2 architecture shim installed on AutoConfig.from_pretrained`)}var m=null,h=`idle`,g=null,_=null;function v(){return h}function y(){return g}function b(){return _}function x(e){return m||=(h=`loading`,S(e).then(e=>(h=`ready`,_=e,e),e=>{throw h=`failed`,m=null,o.error(`kokoro load failed`,e),e})),m}async function S(t){let n=await e(()=>import(`./transformers.web-CuUo4MLm.js`),__vite__mapDeps([0,1,2]));r(n.env),p(n),await a(s);let{KokoroTTS:l,TextSplitterStream:u}=await e(async()=>{let{KokoroTTS:e,TextSplitterStream:t}=await import(`./kokoro-B5jJ2WUJ.js`);return{KokoroTTS:e,TextSplitterStream:t}},__vite__mapDeps([3,1,0,2,4])),d=i(),f=typeof navigator<`u`&&`gpu`in navigator,m=await l.from_pretrained(s,{device:f?`webgpu`:`wasm`,dtype:f?`fp32`:`q8`,progress_callback:e=>{if(e?.file){if(e.status===`progress`)d.update(e.file,e.loaded??0,e.total??0);else if(e.status===`done`)d.complete(e.file);else return;g=d.snapshot(),t?.(g)}}});o.info(`kokoro ready`,{model:s,device:f?`webgpu`:`wasm`});let h=c(m.voices);return{async synthesize(e,t){let n=await m.generate(e,{...t?.voice?{voice:t.voice}:{},...t?.speed?{speed:t.speed}:{}});return{audio:n.audio,sampleRate:n.sampling_rate}},async*synthesizeStream(e,t){let n={...t?.voice?{voice:t.voice}:{},...t?.speed?{speed:t.speed}:{}},r=new u;if(t?.splitPattern){let n=e.split(t.splitPattern).map(e=>e.trim()).filter(e=>e.length>0);r.push(...n)}else r.push(e);r.close();for await(let e of m.stream(r,n))yield{audio:e.audio.audio,sampleRate:e.audio.sampling_rate}},voices:()=>h}}var C=t(`speech:speak`),w=2e4;function T(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 E=48;function D(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>E?` `: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>w&&(t=`${t.slice(0,w).replace(/\s+\S*$/,``)}…`),t}function O(){return b()?.voices()??[]}var k=()=>typeof chrome<`u`&&!!chrome?.runtime?.id,A;function j(e){A=e}function M(){let e=y();return{state:v(),...e?{loaded:e.loaded,total:e.total,etaSeconds:e.etaSeconds}:{}}}async function N(){try{k()||await n({instanceId:A})}catch(e){C.warn(`kokoro asset staging failed; trying already-present weights`,e)}try{await x()}catch(e){C.warn(`kokoro warmup load failed`,e)}}function P(){return N(),M()}var F=null;function I(){return(!F||F.state===`closed`)&&(F=new AudioContext),F}async function L(e,t,n=1){let r=I();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 R(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 z(e){let t=b();if(T(e,{ready:t!==null,voiceIds:t?.voices().map(e=>e.id)??[]})===`kokoro`&&t){let n=0;try{let r=t.synthesizeStream(e.text,{...e.voice?{voice:e.voice}:{},...e.rate?{speed:e.rate}:{}});for await(let t of r)await L(t.audio,t.sampleRate,e.volume),n++;return{engine:`kokoro`}}catch(e){if(n>0)return C.warn(`kokoro stream failed mid-playback; stopping`,e),{engine:`kokoro`};C.warn(`kokoro synthesis failed; falling back to webspeech`,e)}}return await R(e),{engine:`webspeech`}}export{M as kokoroStatus,O as kokoroVoicesIfReady,P as kokoroWarmup,j as setSpeakAssetsInstanceId,z as speak,D as speechTextFromMarkdown};
@@ -0,0 +1 @@
1
+ var e=`slicc-speech-assets`,t=12e4;function n(t){return t?`${e}:${t}`:e}function r(){return typeof crypto<`u`&&typeof crypto.randomUUID==`function`?`spa-${crypto.randomUUID()}`:`spa-${Date.now().toString(36)}-${Math.random().toString(36).slice(2,12)}`}function i(e){if(typeof BroadcastChannel!=`function`)return Promise.reject(Error(`speech-assets: BroadcastChannel is unavailable`));let i=new BroadcastChannel(n(e.instanceId)),a=r(),o=e.idleTimeoutMs??t;return new Promise((t,n)=>{let r=!1,s,c=()=>{r=!0,clearTimeout(s),i.removeEventListener(`message`,u);try{i.close()}catch{}},l=()=>{clearTimeout(s),s=setTimeout(()=>{r||(c(),n(Error(`speech-assets: no progress for ${o}ms (worker unreachable?)`)))},o)},u=i=>{let o=i.data;if(!(!o||o.id!==a||r)){if(o.type===`speech-assets-progress`){l(),e.onProgress?.(o.progress);return}o.type===`speech-assets-response`&&(c(),typeof o.error==`string`?n(Error(o.error)):t())}};i.addEventListener(`message`,u),l(),i.postMessage({type:`speech-assets-request`,id:a})})}export{i as t};
@@ -0,0 +1 @@
1
+ const e=`slicc-speech-assets`;function t(t){return t?`${e}:${t}`:e}function n(){return typeof crypto<`u`&&typeof crypto.randomUUID==`function`?`spa-${crypto.randomUUID()}`:`spa-${Date.now().toString(36)}-${Math.random().toString(36).slice(2,12)}`}function r(e){if(typeof BroadcastChannel!=`function`)return()=>{};let n=new BroadcastChannel(t(e.instanceId)),r=e=>{try{n.postMessage(e)}catch(e){console.warn(`speech-assets: failed to post message:`,e instanceof Error?e.message:String(e))}},i=async t=>{let n=t.data;if(n?.type!==`speech-assets-request`)return;let{id:i}=n;try{await e.ensure(e=>r({type:`speech-assets-progress`,id:i,progress:e})),r({type:`speech-assets-response`,id:i})}catch(e){r({type:`speech-assets-response`,id:i,error:e instanceof Error?e.message:String(e)})}};return n.addEventListener(`message`,i),()=>{n.removeEventListener(`message`,i);try{n.close()}catch{}}}function i(e){if(typeof BroadcastChannel!=`function`)return Promise.reject(Error(`speech-assets: BroadcastChannel is unavailable`));let r=new BroadcastChannel(t(e.instanceId)),i=n(),a=e.idleTimeoutMs??12e4;return new Promise((t,n)=>{let o=!1,s,c=()=>{o=!0,clearTimeout(s),r.removeEventListener(`message`,u);try{r.close()}catch{}},l=()=>{clearTimeout(s),s=setTimeout(()=>{o||(c(),n(Error(`speech-assets: no progress for ${a}ms (worker unreachable?)`)))},a)},u=r=>{let a=r.data;if(!(!a||a.id!==i||o)){if(a.type===`speech-assets-progress`){l(),e.onProgress?.(a.progress);return}a.type===`speech-assets-response`&&(c(),typeof a.error==`string`?n(Error(a.error)):t())}};r.addEventListener(`message`,u),l(),r.postMessage({type:`speech-assets-request`,id:i})})}export{i as callEnsureSpeechAssets,r as installSpeechAssetsResponder};
@@ -1,2 +1,2 @@
1
- import{n as e,r as t}from"./hid-device-registry-D2LsJCRr.js";import{a as n,i as r}from"./serial-port-registry-Bc4wlwED.js";import{C as i,D as a,E as o,S as s,_ as c,a as l,g as u,h as d,k as f,l as p,m,n as h,o as g,s as _,w as v,x as y,y as b}from"./usb-operations-CkcrNzZw.js";import{i as x,r as S}from"./usb-device-registry-BP58Vi0S.js";import{n as C}from"./shared-B7TdM-Ik.js";var w=`SLICCJSH`;function T(e){return e.length===0?`''`:`'${e.replace(/'/g,`'\\''`)}'`}function E(e,t){return`var REQ=${JSON.stringify({op:e,args:t})};var P=${JSON.stringify(w)};function emit(o){process.stdout.write(P+JSON.stringify(o));}try{var op=REQ.op,a=REQ.args||[],out;if(op==='fetch'){var r=await fetch(a[0],a[1]||undefined);var h={};r.headers.forEach(function(v,k){h[k]=v;});var u=new Uint8Array(await r.arrayBuffer());var bin="",C=0x8000;for(var i=0;i<u.length;i+=C){bin+=String.fromCharCode.apply(null,u.subarray(i,i+C));}out={ok:r.ok,status:r.status,statusText:r.statusText,url:r.url,headers:h,bodyBase64:btoa(bin)};}else if(op==='http'){var c=http.client(a[0]||{});var res=await c[a[1]](a[2],Object.assign({},a[3]||{},{raw:true}));out={status:res.status,headers:res.headers,body:res.body};}else if(op==='browser'){var m=a[0];if(typeof browser[m]!=="function")throw new Error("browser."+m+" is not available over the sprinkle bridge");out=await browser[m].apply(browser,a.slice(1));}else if(op==='spawn'){out=await exec.spawn(a[0]);}else if(op==='fetchToFile'){out=await fs.fetchToFile(a[0],a[1]);}else{throw new Error("unknown jsh op: "+op);}emit({ok:true,value:out});}catch(e){emit({ok:false,error:(e&&e.message)?e.message:String(e)});}`}function D(e,t){return`node -e ${T(E(e,t))}`}function O(e){let t=e.stdout.lastIndexOf(w);if(t===-1){let t=e.stderr.trim()||e.stdout.trim()||`exit code ${e.exitCode}`;throw Error(`jsh bridge: no result (${t})`)}let n;try{n=JSON.parse(e.stdout.slice(t+10))}catch{throw Error(`jsh bridge: malformed result`)}if(!n.ok)throw Error(n.error||`jsh bridge error`);return n.value}async function k(e,t,n){return O(await e(D(t,n)))}function A(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 j(e){let t=atob(e),n=new Uint8Array(t.length);for(let e=0;e<t.length;e++)n[e]=t.charCodeAt(e);return n}function M(e){if(e instanceof Uint8Array)return e;if(e instanceof ArrayBuffer)return new Uint8Array(e);if(ArrayBuffer.isView(e)){let t=e;return new Uint8Array(t.buffer,t.byteOffset,t.byteLength)}if(Array.isArray(e))return new Uint8Array(e);throw Error(`expected Uint8Array, ArrayBuffer, or number[]`)}var N=new Set([101,103,204,205,304]);function P(e){let t=j(e.bodyBase64),n=N.has(e.status)?null:t,r=new Headers(e.headers),i;try{return i=new Response(n,{status:e.status,statusText:e.statusText,headers:r}),Object.defineProperty(i,"url",{value:e.url,configurable:!0}),i}catch{i=new Response(n,{headers:r});let t=e.status>=200&&e.status<300;return Object.defineProperty(i,"status",{value:e.status,configurable:!0}),Object.defineProperty(i,"statusText",{value:e.statusText,configurable:!0}),Object.defineProperty(i,"ok",{value:t,configurable:!0}),Object.defineProperty(i,"url",{value:e.url,configurable:!0}),i}}function F(e){return e.length===0?`''`:`'${e.replace(/'/g,`'\\''`)}'`}var I=class{listeners=new Map;lickHandler;fs;closeHandler;minimizeHandler;stopConeHandler;attachImageHandler;captureScreenHandler;execHandler;hidSubs=new Map;iframePusher;constructor(e,t,n,r,i,a,o,s,c){this.fs=e,this.lickHandler=t,this.closeHandler=n,this.minimizeHandler=r,this.stopConeHandler=i,this.attachImageHandler=a,this.captureScreenHandler=o,this.execHandler=s,this.iframePusher=c}setIframePusher(e){this.iframePusher=e}async hidOp(n,r,i){let a=t();switch(r){case`list`:{let t=e();if(!t)throw Error(`WebHID is unavailable in this browser`);return u(a,t)}case`request`:{let t=e();if(!t)throw Error(`WebHID is unavailable in this browser`);return b(a,t,i[0]??[])}case`info`:return d(a,i[0]);case`open`:{let e=i[0];return await c(a,e),await this.attachHidInputReports(n,e),{ok:!0}}case`close`:{let e=i[0];return await this.detachHidInputReports(n,e),await m(a,e),{ok:!0}}case`sendReport`:{let e=i[0],t=i[1],n=M(i[2]);return await y(a,e,t,n.buffer.slice(n.byteOffset,n.byteOffset+n.byteLength)),{ok:!0}}default:throw Error(`hid: unknown op '${r}'`)}}async serialOp(e,t,s){let c=n();switch(t){case`list`:{let e=r();if(!e)throw Error(`Web Serial is unavailable in this browser`);return o(c,e)}case`request`:{let e=r();if(!e)throw Error(`Web Serial is unavailable in this browser`);return f(c,e,s[0]??[])}case`info`:return v(c,s[0]);case`open`:{let e=s[0];return await a(c,e,s[1]??{baudRate:9600}),{ok:!0}}case`close`:{let e=s[0];return await i(c,e),{ok:!0}}default:throw Error(`serial: unknown op '${t}'`)}}async usbOp(e,t,n){let r=x();switch(t){case`list`:{let e=S();if(!e)throw Error(`WebUSB is unavailable in this browser`);return g(r,e)}case`request`:{let e=S();if(!e)throw Error(`WebUSB is unavailable in this browser`);return p(r,e,n[0]??[])}case`info`:return l(r,n[0]);case`open`:return await _(r,n[0]),{ok:!0};case`close`:return await h(r,n[0]),{ok:!0};default:throw Error(`usb: unknown op '${t}'`)}}async deviceOp(e,t,n,r){if(t===`hid`)return this.hidOp(e,n,r);if(t===`serial`)return this.serialOp(e,n,r);if(t===`usb`)return this.usbOp(e,n,r);throw Error(`unknown device channel '${t}'`)}async attachHidInputReports(e,n){let r=this.hidSubs.get(e);if(r||(r=new Map,this.hidSubs.set(e,r)),r.has(n))return;let i=await s(t(),n,t=>{let r=t.bytes instanceof Uint8Array?t.bytes:new Uint8Array(t.bytes);this.deliverHidInputReport(e,{handle:n,reportId:t.reportId,data:r})});r.set(n,i)}async detachHidInputReports(e,t){let n=this.hidSubs.get(e);if(!n)return;let r=n.get(t);if(r){n.delete(t);try{await Promise.resolve(r())}catch{}}n.size===0&&this.hidSubs.delete(e)}deliverHidInputReport(e,t){let n=this.listeners.get(`${e}:hid:inputreport`);if(n)for(let e of n){let r=n;setTimeout(()=>{if(r.has(e))try{e(t)}catch{}},0)}try{this.iframePusher?.(e,`hid:inputreport`,t)}catch{}}async runExec(e){if(!this.execHandler)return{stdout:``,stderr:`exec: shell bridge not available
1
+ import{n as e,r as t}from"./hid-device-registry-D2LsJCRr.js";import{a as n,i as r}from"./serial-port-registry-Bc4wlwED.js";import{C as i,D as a,E as o,S as s,_ as c,a as l,g as u,h as d,k as f,l as p,m,n as h,o as g,s as _,w as v,x as y,y as b}from"./usb-operations-CkcrNzZw.js";import{i as x,r as S}from"./usb-device-registry-BP58Vi0S.js";import{r as C}from"./shared-Bn9ltvMZ.js";var w=`SLICCJSH`;function T(e){return e.length===0?`''`:`'${e.replace(/'/g,`'\\''`)}'`}function E(e,t){return`var REQ=${JSON.stringify({op:e,args:t})};var P=${JSON.stringify(w)};function emit(o){process.stdout.write(P+JSON.stringify(o));}try{var op=REQ.op,a=REQ.args||[],out;if(op==='fetch'){var r=await fetch(a[0],a[1]||undefined);var h={};r.headers.forEach(function(v,k){h[k]=v;});var u=new Uint8Array(await r.arrayBuffer());var bin="",C=0x8000;for(var i=0;i<u.length;i+=C){bin+=String.fromCharCode.apply(null,u.subarray(i,i+C));}out={ok:r.ok,status:r.status,statusText:r.statusText,url:r.url,headers:h,bodyBase64:btoa(bin)};}else if(op==='http'){var c=http.client(a[0]||{});var res=await c[a[1]](a[2],Object.assign({},a[3]||{},{raw:true}));out={status:res.status,headers:res.headers,body:res.body};}else if(op==='browser'){var m=a[0];if(typeof browser[m]!=="function")throw new Error("browser."+m+" is not available over the sprinkle bridge");out=await browser[m].apply(browser,a.slice(1));}else if(op==='spawn'){out=await exec.spawn(a[0]);}else if(op==='fetchToFile'){out=await fs.fetchToFile(a[0],a[1]);}else{throw new Error("unknown jsh op: "+op);}emit({ok:true,value:out});}catch(e){emit({ok:false,error:(e&&e.message)?e.message:String(e)});}`}function D(e,t){return`node -e ${T(E(e,t))}`}function O(e){let t=e.stdout.lastIndexOf(w);if(t===-1){let t=e.stderr.trim()||e.stdout.trim()||`exit code ${e.exitCode}`;throw Error(`jsh bridge: no result (${t})`)}let n;try{n=JSON.parse(e.stdout.slice(t+10))}catch{throw Error(`jsh bridge: malformed result`)}if(!n.ok)throw Error(n.error||`jsh bridge error`);return n.value}async function k(e,t,n){return O(await e(D(t,n)))}function A(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 j(e){let t=atob(e),n=new Uint8Array(t.length);for(let e=0;e<t.length;e++)n[e]=t.charCodeAt(e);return n}function M(e){if(e instanceof Uint8Array)return e;if(e instanceof ArrayBuffer)return new Uint8Array(e);if(ArrayBuffer.isView(e)){let t=e;return new Uint8Array(t.buffer,t.byteOffset,t.byteLength)}if(Array.isArray(e))return new Uint8Array(e);throw Error(`expected Uint8Array, ArrayBuffer, or number[]`)}var N=new Set([101,103,204,205,304]);function P(e){let t=j(e.bodyBase64),n=N.has(e.status)?null:t,r=new Headers(e.headers),i;try{return i=new Response(n,{status:e.status,statusText:e.statusText,headers:r}),Object.defineProperty(i,"url",{value:e.url,configurable:!0}),i}catch{i=new Response(n,{headers:r});let t=e.status>=200&&e.status<300;return Object.defineProperty(i,"status",{value:e.status,configurable:!0}),Object.defineProperty(i,"statusText",{value:e.statusText,configurable:!0}),Object.defineProperty(i,"ok",{value:t,configurable:!0}),Object.defineProperty(i,"url",{value:e.url,configurable:!0}),i}}function F(e){return e.length===0?`''`:`'${e.replace(/'/g,`'\\''`)}'`}var I=class{listeners=new Map;lickHandler;fs;closeHandler;minimizeHandler;stopConeHandler;attachImageHandler;captureScreenHandler;execHandler;hidSubs=new Map;iframePusher;constructor(e,t,n,r,i,a,o,s,c){this.fs=e,this.lickHandler=t,this.closeHandler=n,this.minimizeHandler=r,this.stopConeHandler=i,this.attachImageHandler=a,this.captureScreenHandler=o,this.execHandler=s,this.iframePusher=c}setIframePusher(e){this.iframePusher=e}async hidOp(n,r,i){let a=t();switch(r){case`list`:{let t=e();if(!t)throw Error(`WebHID is unavailable in this browser`);return u(a,t)}case`request`:{let t=e();if(!t)throw Error(`WebHID is unavailable in this browser`);return b(a,t,i[0]??[])}case`info`:return d(a,i[0]);case`open`:{let e=i[0];return await c(a,e),await this.attachHidInputReports(n,e),{ok:!0}}case`close`:{let e=i[0];return await this.detachHidInputReports(n,e),await m(a,e),{ok:!0}}case`sendReport`:{let e=i[0],t=i[1],n=M(i[2]);return await y(a,e,t,n.buffer.slice(n.byteOffset,n.byteOffset+n.byteLength)),{ok:!0}}default:throw Error(`hid: unknown op '${r}'`)}}async serialOp(e,t,s){let c=n();switch(t){case`list`:{let e=r();if(!e)throw Error(`Web Serial is unavailable in this browser`);return o(c,e)}case`request`:{let e=r();if(!e)throw Error(`Web Serial is unavailable in this browser`);return f(c,e,s[0]??[])}case`info`:return v(c,s[0]);case`open`:{let e=s[0];return await a(c,e,s[1]??{baudRate:9600}),{ok:!0}}case`close`:{let e=s[0];return await i(c,e),{ok:!0}}default:throw Error(`serial: unknown op '${t}'`)}}async usbOp(e,t,n){let r=x();switch(t){case`list`:{let e=S();if(!e)throw Error(`WebUSB is unavailable in this browser`);return g(r,e)}case`request`:{let e=S();if(!e)throw Error(`WebUSB is unavailable in this browser`);return p(r,e,n[0]??[])}case`info`:return l(r,n[0]);case`open`:return await _(r,n[0]),{ok:!0};case`close`:return await h(r,n[0]),{ok:!0};default:throw Error(`usb: unknown op '${t}'`)}}async deviceOp(e,t,n,r){if(t===`hid`)return this.hidOp(e,n,r);if(t===`serial`)return this.serialOp(e,n,r);if(t===`usb`)return this.usbOp(e,n,r);throw Error(`unknown device channel '${t}'`)}async attachHidInputReports(e,n){let r=this.hidSubs.get(e);if(r||(r=new Map,this.hidSubs.set(e,r)),r.has(n))return;let i=await s(t(),n,t=>{let r=t.bytes instanceof Uint8Array?t.bytes:new Uint8Array(t.bytes);this.deliverHidInputReport(e,{handle:n,reportId:t.reportId,data:r})});r.set(n,i)}async detachHidInputReports(e,t){let n=this.hidSubs.get(e);if(!n)return;let r=n.get(t);if(r){n.delete(t);try{await Promise.resolve(r())}catch{}}n.size===0&&this.hidSubs.delete(e)}deliverHidInputReport(e,t){let n=this.listeners.get(`${e}:hid:inputreport`);if(n)for(let e of n){let r=n;setTimeout(()=>{if(r.has(e))try{e(t)}catch{}},0)}try{this.iframePusher?.(e,`hid:inputreport`,t)}catch{}}async runExec(e){if(!this.execHandler)return{stdout:``,stderr:`exec: shell bridge not available
2
2
  `,exitCode:127};try{return await this.execHandler(e)}catch(e){return{stdout:``,stderr:`exec: ${e instanceof Error?e.message:String(e)}\n`,exitCode:1}}}async jshDispatch(e,t){if(e===`readFileBinary`)return{base64:A(await this.fs.readFile(t[0],{encoding:`binary`}))};if(e===`writeFileBinary`)return await this.fs.writeFile(t[0],j(t[1])),!0;let n=await k(e=>this.runExec(e),e,t);return e===`fetch`?P(n):n}createAPI(e){let t={name:e,lick:t=>{let n=typeof t==`string`?t:t.action,r=typeof t==`string`?void 0:t.data,i={type:`sprinkle`,sprinkleName:e,targetScoop:z(e),timestamp:new Date().toISOString(),body:{action:n,data:r}};this.lickHandler(i)},on:(t,n)=>{let r=`${e}:${t}`,i=this.listeners.get(r);i||(i=new Set,this.listeners.set(r,i)),i.add(n)},off:(t,n)=>{let r=`${e}:${t}`;this.listeners.get(r)?.delete(n)},readFile:async e=>await this.fs.readFile(e,{encoding:`utf-8`}),writeFile:async(e,t)=>{await this.fs.writeFile(e,t)},readDir:async e=>(await this.fs.readDir(e)).map(e=>({name:e.name,type:e.type})),exists:async e=>this.fs.exists(e),stat:async e=>{let t=await this.fs.stat(e);return{type:t.type,size:t.size}},mkdir:async e=>{await this.fs.mkdir(e,{recursive:!0})},rm:async e=>{await this.fs.rm(e)},screenshot:async e=>{let n=t._container;if(!n)return``;let r=e?n.querySelector(e):n;if(!r)throw Error(`Element not found: `+(e||`container`));let i=r.getBoundingClientRect(),a=Math.ceil(i.width),o=Math.ceil(i.height);if(a===0||o===0)throw Error(`Element has zero dimensions`);let s=document.createElement(`canvas`),c=window.devicePixelRatio||1;s.width=a*c,s.height=o*c;let l=s.getContext(`2d`);l.scale(c,c);let u=r.cloneNode(!0),d=`<svg xmlns="http://www.w3.org/2000/svg" width="${a}" height="${o}"><foreignObject width="100%" height="100%">${new XMLSerializer().serializeToString(u)}</foreignObject></svg>`;return new Promise((e,t)=>{let n=new Image;n.onload=()=>{l.drawImage(n,0,0),e(s.toDataURL(`image/png`))},n.onerror=()=>t(Error(`Screenshot rendering failed`)),n.src=`data:image/svg+xml;charset=utf-8,`+encodeURIComponent(d)})},setState:t=>{try{localStorage.setItem(`slicc-sprinkle-state:${e}`,JSON.stringify(t))}catch{}},getState:()=>{try{let t=localStorage.getItem(`slicc-sprinkle-state:${e}`);return t?JSON.parse(t):null}catch{return null}},open:e=>{let t=/^https?:|^chrome-extension:/.test(e)?e:C(e);window.open(t,`_blank`)},close:()=>this.closeHandler(e),minimize:()=>this.minimizeHandler(e),stopCone:()=>this.stopConeHandler(),attachImage:(e,t,n)=>this.attachImageHandler(e,t,n),captureScreen:()=>this.captureScreenHandler(),exec:Object.assign(e=>this.runExec(e),{spawn:e=>this.jshDispatch(`spawn`,[e])}),fetch:(e,t)=>this.jshDispatch(`fetch`,[e,t??null]),http:{client:e=>{let t=t=>(n,r)=>this.jshDispatch(`http`,[e,t,n,r??null]);return{get:t(`get`),post:t(`post`),put:t(`put`),patch:t(`patch`),delete:t(`delete`)}}},browser:{findTab:e=>this.jshDispatch(`browser`,[`findTab`,e]),ensureTab:(e,t)=>this.jshDispatch(`browser`,[`ensureTab`,e,t??{}]),eval:(e,t)=>this.jshDispatch(`browser`,[`eval`,e,t]),evalAsync:(e,t)=>this.jshDispatch(`browser`,[`evalAsync`,e,t]),cookie:(e,t)=>this.jshDispatch(`browser`,[`cookie`,e,t]),localStorage:(e,t)=>this.jshDispatch(`browser`,[`localStorage`,e,t]),fetch:(e,t,n)=>this.jshDispatch(`browser`,[`fetch`,e,t,n??{}])},hid:{list:()=>this.hidOp(e,`list`,[]),request:t=>this.hidOp(e,`request`,[t??[]]),open:async t=>{await this.hidOp(e,`open`,[t])},close:async t=>{await this.hidOp(e,`close`,[t])},sendReport:async(t,n,r)=>{await this.hidOp(e,`sendReport`,[t,n,r])},on:(t,n)=>{if(t!==`inputreport`)return;let r=`${e}:hid:inputreport`,i=this.listeners.get(r);i||(i=new Set,this.listeners.set(r,i)),i.add(n)},off:(t,n)=>{t===`inputreport`&&this.listeners.get(`${e}:hid:inputreport`)?.delete(n)}},serial:{list:()=>this.serialOp(e,`list`,[]),request:t=>this.serialOp(e,`request`,[t??[]]),open:async(t,n)=>{await this.serialOp(e,`open`,[t,n])},close:async t=>{await this.serialOp(e,`close`,[t])}},usb:{list:()=>this.usbOp(e,`list`,[]),request:t=>this.usbOp(e,`request`,[t??[]]),open:async t=>{await this.usbOp(e,`open`,[t])},close:async t=>{await this.usbOp(e,`close`,[t])}},readFileBinary:async e=>j((await this.jshDispatch(`readFileBinary`,[e])).base64),writeFileBinary:async(e,t)=>{await this.jshDispatch(`writeFileBinary`,[e,A(t)])},fetchToFile:(e,t)=>this.jshDispatch(`fetchToFile`,[e,t]),_jsh:(e,t)=>this.jshDispatch(e,t),_device:(t,n,r)=>this.deviceOp(e,t,n,r),agent:async(e,t)=>{let n=t?.cwd??`.`,r=t?.allowedCommands??`*`,i=[`agent`];t?.model&&i.push(`--model`,F(t.model)),t?.thinking&&i.push(`--thinking`,F(t.thinking)),t?.readOnly&&i.push(`--read-only`,F(t.readOnly)),i.push(F(n),F(r),F(e));let a=await this.runExec(i.join(` `));return{stdout:a.stdout||a.stderr,exitCode:a.exitCode}}};return t}pushUpdate(e,t){let n=`${e}:update`,r=this.listeners.get(n);if(r)for(let e of r){let n=r;setTimeout(()=>{if(n.has(e))try{e(t)}catch{}},0)}}removeSprinkle(e){for(let t of this.listeners.keys())t.startsWith(`${e}:`)&&this.listeners.delete(t);let t=this.hidSubs.get(e);if(t){for(let e of t.values())try{Promise.resolve(e()).catch(()=>{})}catch{}this.hidSubs.delete(e)}}},L=`slicc-sprinkle-routes`;function R(){try{let e=localStorage.getItem(L);return e?JSON.parse(e):{}}catch{return{}}}function z(e){return R()[e]}export{k as n,I as t};