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