sliccy 5.19.2 → 5.20.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 (87) hide show
  1. package/dist/ui/assets/__vite-browser-external-BXIFVS_m.js +1 -0
  2. package/dist/ui/assets/{account-store-BmxI91dA.js → account-store-BcSycxbc.js} +2 -2
  3. package/dist/ui/assets/{account-store-C29Q2_1P.js → account-store-DW6iW9iB.js} +1 -1
  4. package/dist/ui/assets/{adobe-S_N8RmpS.js → adobe-Br0Ja7Gs.js} +1 -1
  5. package/dist/ui/assets/{adobe-3z76LuuB.js → adobe-Z8GfJZNM.js} +1 -1
  6. package/dist/ui/assets/{adobe-oauth-state-29kzXy6A.js → adobe-oauth-state-BDetyX7s.js} +1 -1
  7. package/dist/ui/assets/{agent-message-to-chat-MTcmAlDv.js → agent-message-to-chat-BTNDVg0T.js} +1 -1
  8. package/dist/ui/assets/{apps-BTbhV_WH.js → apps-BG6_XrX1.js} +1 -1
  9. package/dist/ui/assets/{azure-openai-BYC93D7I.js → azure-openai-CcEaijCE.js} +1 -1
  10. package/dist/ui/assets/{azure-openai-DNZwRlzV.js → azure-openai-tF-mnQdH.js} +1 -1
  11. package/dist/ui/assets/{connect-surface-nOvU-mzS.js → connect-surface-CTYqOLeq.js} +1 -1
  12. package/dist/ui/assets/dip-Ctf6phXp.js +1 -0
  13. package/dist/ui/assets/{dist-BafxlePp.js → dist-C6Qm47PL.js} +1 -1
  14. package/dist/ui/assets/{dist-DEa2AyxC.js → dist-ilEkxLip.js} +1 -1
  15. package/dist/ui/assets/{ensure-speech-assets-B9nEbwAU.js → ensure-speech-assets-BDz63X1e.js} +1 -1
  16. package/dist/ui/assets/esp8266-Dip6PaRZ.js +1 -0
  17. package/dist/ui/assets/{esptool-operations-DOLHZ3lh.js → esptool-operations-CPcOtBiB.js} +2 -2
  18. package/dist/ui/assets/{fs-GCp_miGo.js → fs-DbLSBgrZ.js} +1 -1
  19. package/dist/ui/assets/{fs-BXbkZdm4.js → fs-DcZIOhoO.js} +2 -2
  20. package/dist/ui/assets/{github-C_4arGR0.js → github-BzKzkG3E.js} +1 -1
  21. package/dist/ui/assets/{github-Bz1ni-OU.js → github-CXss2hVj.js} +2 -2
  22. package/dist/ui/assets/{github-copilot-Dfmfbira.js → github-copilot-BNt1sOpn.js} +1 -1
  23. package/dist/ui/assets/{github-copilot-CgjQ3oCm.js → github-copilot-B_VwFjgU.js} +1 -1
  24. package/dist/ui/assets/{hear-WZ7KsFPa.js → hear-qmyN_TI6.js} +1 -1
  25. package/dist/ui/assets/{kernel-worker-DfBOBrG4.js → kernel-worker-DRvGOqpl.js} +816 -790
  26. package/dist/ui/assets/{kokoro-engine-CZdBdTQm.js → kokoro-engine-D55VqYz2.js} +1 -1
  27. package/dist/ui/assets/{lick-ws-bridge-DvKspKHX.js → lick-ws-bridge-OUe2lv5x.js} +1 -1
  28. package/dist/ui/assets/{lick-ws-bridge-Cu7dpa8i.js → lick-ws-bridge-ch4l1RN0.js} +1 -1
  29. package/dist/ui/assets/{local-llm-BQ8OSWey.js → local-llm-Bu7XdX-8.js} +1 -1
  30. package/dist/ui/assets/{main-BwuI7fRl.js → main-Cmvs-4b3.js} +4 -4
  31. package/dist/ui/assets/{mount-DtlHau7q.js → mount-Dugwl_G8.js} +1 -1
  32. package/dist/ui/assets/{mount-B_Fai0cB.js → mount-awie1rkj.js} +2 -2
  33. package/dist/ui/assets/{new-session-xEsEQMaP.js → new-session-B8DDDliN.js} +2 -2
  34. package/dist/ui/assets/{oauth-bootstrap-u1jC7Drj.js → oauth-bootstrap-Btw1wnpp.js} +2 -2
  35. package/dist/ui/assets/{openai-codex-B7hWdu3I.js → openai-codex-DpsqbdWi.js} +1 -1
  36. package/dist/ui/assets/{openai-codex-TQ8snEf1.js → openai-codex-Rh4T6H6N.js} +1 -1
  37. package/dist/ui/assets/{page-follower-tray-Dv2c9MjS.js → page-follower-tray-MKfvq2UU.js} +1 -1
  38. package/dist/ui/assets/{panel-rpc-handlers-sRKKwsAQ.js → panel-rpc-handlers-BbynP3ze.js} +2 -2
  39. package/dist/ui/assets/{provider-Cw7y1s3Y.js → provider-ByecteLA.js} +2 -2
  40. package/dist/ui/assets/{provider-toCTMFh6.js → provider-C5NbfXV8.js} +1 -1
  41. package/dist/ui/assets/provider-store-access-CIXaM1mT.js +1 -0
  42. package/dist/ui/assets/provider-store-access-DShcDXEP.js +1 -0
  43. package/dist/ui/assets/{providers-K4HcOMJ-.js → providers-C62sFch1.js} +1 -1
  44. package/dist/ui/assets/{providers-DDWD7k0v.js → providers-DdXvCdOY.js} +2 -2
  45. package/dist/ui/assets/py-realm-worker-M50pZEAO.js +244 -0
  46. package/dist/ui/assets/pyodide-CPgzyJWn.js +3 -0
  47. package/dist/ui/assets/pyodide-CY7aNvge.js +3 -0
  48. package/dist/ui/assets/{quick-llm-AORy1zgk.js → quick-llm-BpD0afu9.js} +1 -1
  49. package/dist/ui/assets/session-freezer-BWrnpCKi.js +1 -0
  50. package/dist/ui/assets/{speak-DzOzO6t_.js → speak-BKvofAdv.js} +1 -1
  51. package/dist/ui/assets/{sprinkle-manager-BHP5wWBw.js → sprinkle-manager-DTMfl-8d.js} +1 -1
  52. package/dist/ui/assets/{store-BU91i2F0.js → store-B1opGpoU.js} +1 -1
  53. package/dist/ui/assets/{sudo-D3Ls3Dkb.js → sudo-DUBeKEp5.js} +1 -1
  54. package/dist/ui/assets/{transformers-env-CcquuulE.js → transformers-env-CBrLOjgc.js} +1 -1
  55. package/dist/ui/assets/{tray-leader-Wknn0eO7.js → tray-leader-CxCeXLrs.js} +1 -1
  56. package/dist/ui/assets/{tray-leave-runtime-D5R9x5pb.js → tray-leave-runtime-C9Xd-K2T.js} +1 -1
  57. package/dist/ui/assets/{upgrade-detection-DPNjw--9.js → upgrade-detection-DXvKThLg.js} +1 -1
  58. package/dist/ui/assets/{voice-reply-BU4Ra94P.js → voice-reply-GoJBsykV.js} +1 -1
  59. package/dist/ui/assets/{wc-attach-DzZX7Bvl.js → wc-attach-BGBVAYe2.js} +2 -2
  60. package/dist/ui/assets/{wc-detached-BH_F26OY.js → wc-detached-ItX-R0IR.js} +1 -1
  61. package/dist/ui/assets/{wc-extension-BJpxZWmM.js → wc-extension-CQ58ZdmG.js} +2 -2
  62. package/dist/ui/assets/{wc-follower-Osw_cypJ.js → wc-follower-0S4vw_pW.js} +2 -2
  63. package/dist/ui/assets/{wc-live-C0Qhb3-a.js → wc-live-CXSudFHs.js} +5 -5
  64. package/dist/ui/assets/{wc-nav-CsdChxu5.js → wc-nav-C8BwJGKu.js} +2 -2
  65. package/dist/ui/assets/{wc-onboarding-NGf5gmhr.js → wc-onboarding-DWTOlhtm.js} +2 -2
  66. package/dist/ui/assets/{wc-placeholder-CHAA0tTq.js → wc-placeholder-Bmev8Pr0.js} +3 -3
  67. package/dist/ui/assets/{wc-settings-8GO2gzZ3.js → wc-settings-Dd9as02P.js} +2 -2
  68. package/dist/ui/assets/{wc-shell-CcQ2DALv.js → wc-shell-Cizp69uj.js} +78 -84
  69. package/dist/ui/assets/{wc-sprinkles-BJhExykW.js → wc-sprinkles-DuT_Z4Wm.js} +2 -2
  70. package/dist/ui/assets/{wc-tray-CLJNNdrx.js → wc-tray-DgcABRek.js} +2 -2
  71. package/dist/ui/assets/{whisper-engine-C-8IWV1j.js → whisper-engine-DU-d00q8.js} +1 -1
  72. package/dist/ui/assets/{xai-grok-DfeZ-LOu.js → xai-grok-Bo2MbOzF.js} +1 -1
  73. package/dist/ui/assets/{xai-grok-BPdOb0AZ.js → xai-grok-CT2UxaTl.js} +1 -1
  74. package/dist/ui/index.html +3 -3
  75. package/dist/ui/packages/webapp/index.html +3 -3
  76. package/package.json +2 -2
  77. package/dist/ui/assets/__vite-browser-external-ccPY92C6.js +0 -1
  78. package/dist/ui/assets/dip-BgeReDuU.js +0 -1
  79. package/dist/ui/assets/esp8266-BN31NBrB.js +0 -1
  80. package/dist/ui/assets/provider-store-access-BHi8qJ_0.js +0 -1
  81. package/dist/ui/assets/provider-store-access-BTHab7Ze.js +0 -1
  82. package/dist/ui/assets/py-realm-worker-hOFi8vjM.js +0 -242
  83. package/dist/ui/assets/pyodide-CqQhZelL.js +0 -3
  84. package/dist/ui/assets/pyodide-M7UA50Oh.js +0 -3
  85. package/dist/ui/assets/session-freezer-M1gjbtjP.js +0 -1
  86. package/dist/ui/assets/voice-input-BwyW3uqq.js +0 -1
  87. package/dist/ui/assets/wc-voice-erm0EtRv.js +0 -1
@@ -0,0 +1,244 @@
1
+ function e(e){if(!e||e===`/`)return`/`;e.startsWith(`/`)||(e=`/`+e);let t=e.split(`/`),n=[];for(let e of t)e===``||e===`.`||(e===`..`?n.pop():n.push(e));return`/`+n.join(`/`)}function t(t){let n=e(t);if(n===`/`)return{dir:`/`,base:``};let r=n.lastIndexOf(`/`);return{dir:r===0?`/`:n.slice(0,r),base:n.slice(r+1)}}function n(...t){return e(t.join(`/`))}new TextDecoder;function r(e){if(typeof e!=`string`)return e;let t=new Uint8Array(e.length);for(let n=0;n<e.length;n++)t[n]=e.charCodeAt(n)&255;return t}async function i(e){let t=await crypto.subtle.digest(`SHA-256`,e);return Array.from(new Uint8Array(t)).map(e=>e.toString(16).padStart(2,`0`)).join(``)}function a(e){try{return new URL(e).protocol===`https:`}catch{return!1}}function o(e){return new Promise(t=>setTimeout(t,e))}async function s(e,t,n){let i;try{i=await e(t.url,{method:`GET`,headers:{Accept:`application/octet-stream`},timeoutMs:n})}catch(e){let n=e instanceof Error?e.message:String(e);return{ok:!1,retriable:!0,error:Error(`${t.label}: network error (${n})`)}}if(i.status>=500&&i.status<600)return{ok:!1,retriable:!0,error:Error(`${t.label}: server error HTTP ${i.status}`)};if(i.status<200||i.status>=300){let e=i.statusText?` ${i.statusText}`:``;return{ok:!1,retriable:!1,error:Error(`${t.label}: HTTP ${i.status}${e}`)}}let a=r(i.body);return!(a instanceof Uint8Array)||a.length===0?{ok:!1,retriable:!1,error:Error(`${t.label}: response body was empty`)}:{ok:!0,bytes:a}}async function c(e,t,n){let r;for(let i=1;i<=3;i++){let a=await s(e,t,n);if(a.ok)return a.bytes;if(r=a.error,!a.retriable||i===3)throw a.error;await o(250*i)}throw r??Error(`${t.label}: download failed`)}async function l(e,t){let n=await i(e);if(n!==t.sha256.toLowerCase())throw Error(`${t.label}: sha256 mismatch (expected ${t.sha256.toLowerCase()}, got ${n})`)}async function u(e,t){if(!a(t.url))throw Error(`${t.label}: refused to fetch non-https URL '${t.url}'`);let n=await c(e,t,t.timeoutMs??6e4);return await l(n,t),n}const d=`pyproject.toml`;function f(e){return e.trim().toLowerCase().replace(/[-_.]+/g,`-`)}function p(e){let t=e.indexOf(`==`);return t===-1?{name:e.trim(),version:``}:{name:e.slice(0,t).trim(),version:e.slice(t+2).trim()}}async function ee(e,r){let i=r?.startsWith(`/`)?r:`/workspace`;for(;;){if(await e.exists(n(i,d)))return i;if(i===`/`)return null;i=t(i).dir}}function m(e){let t=!1,n=!1;for(let r=0;r<e.length;r++){let i=e[r];if(i===`'`&&!n)t=!t;else if(i===`"`&&!t)n=!n;else if(i===`#`&&!t&&!n)return e.slice(0,r)}return e}function h(e){let t=e.trim();return t.startsWith(`"`)&&t.endsWith(`"`)||t.startsWith(`'`)&&t.endsWith(`'`)?t.slice(1,-1):null}function te(e,t,n){let r=n,i=t;for(;!r.includes(`]`)&&i+1<e.length;)i+=1,r+=`\n${m(e[i])}`;let a=[];for(let e of r.matchAll(/["']([^"']*)["']/g))e[1].trim()&&a.push(e[1].trim());return{items:a,lastIndex:i}}function ne(e){let t=e.split(`
2
+ `),n=``,r=`workspace`,i=`0.1.0`,a=[];for(let e=0;e<t.length;e++){let o=m(t[e]).trim();if(!o)continue;if(o.startsWith(`[`)){n=o;continue}if(n!==`[project]`)continue;let s=o.indexOf(`=`);if(s===-1)continue;let c=o.slice(0,s).trim(),l=o.slice(s+1).trim();if(c===`name`)r=h(l)??r;else if(c===`version`)i=h(l)??i;else if(c===`dependencies`){let n=te(t,e,l);a=n.items,e=n.lastIndex}}return{name:r,version:i,dependencies:a}}const g={name:`name`,version:`version`,source:`source`,file_name:`fileName`,sha256:`sha256`};function _(e,t){t.name&&t.version&&t.source&&t.fileName&&t.sha256&&e.push(t)}function v(e){let t=[],n=null;for(let r of e.split(`
3
+ `)){let e=m(r).trim();if(!e)continue;if(e===`[[package]]`){n&&_(t,n),n={};continue}if(e.startsWith(`[`)){n&&_(t,n),n=null;continue}if(!n)continue;let i=e.indexOf(`=`);if(i===-1)continue;let a=g[e.slice(0,i).trim()];if(!a)continue;let o=h(e.slice(i+1).trim());o!==null&&(a===`source`?n.source=o:n[a]=o)}return n&&_(t,n),t}async function y(e,t){let r=n(t,d);if(!await e.exists(r))return{name:`workspace`,version:`0.1.0`,dependencies:[]};let i=await e.readFile(r);return{...ne(i),raw:i}}async function b(e,t){let r=n(t,`uv.lock`);return await e.exists(r)?v(await e.readFile(r)):[]}const x=new Set([`fs`,`path`,`crypto`,`process`,`buffer`,`assert`,`assert/strict`,`util`]),S=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([...S].filter(e=>!x.has(e))),[`unpkg`,`com`].join(`.`),[`cdn`,`jsdelivr`,`net`].join(`.`),[`registry`,`npmjs`,`org`].join(`.`);function C(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}function re(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}`}const w={EBADF:8,EEXIST:20,EINVAL:28,EIO:29,EISDIR:31,ENOENT:44,ENOTDIR:54,ENOTEMPTY:55,EPERM:63},T=16877;async function ie(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 E(e,t){return e===``?t:`${e}/${t}`}function ae(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;O(t.mount,async()=>{if(t.opfs.size>r)return;let n=await N(t),i=t.mount.opts.sahProvider.acquire(t.opfs.relPath,n);try{i.truncate(e),i.flush()}finally{i.close(),t.mount.opts.sahProvider.release(t.opfs.relPath)}})}if(n.mtime!==void 0){let e=n.mtime.getTime();t.opfs.mtime=e,t.timestamp=e}},lookup(t,n){let r=t.opfs.children?.get(n);if(!r)throw new e.ErrnoError(w.ENOENT);return r},mknod(n,r,i,a){if(n.opfs.children?.has(r))throw new e.ErrnoError(w.EEXIST);let o=t.createNode(n,r,i,a);return n.opfs.children?.set(r,o),e.isDir(i)?O(n.mount,async()=>{let e=await(await M(n)).getDirectoryHandle(r,{create:!0});o.opfs.dirHandle=e}):e.isFile(i)&&O(n.mount,async()=>{let e=await(await M(n)).getFileHandle(r,{create:!0});o.opfs.fileHandle=e}),o},rename(t,n,r){let i=t.parent,a=t.name;if(!(a===r&&i===n)){if(n.opfs.children?.has(r))throw new e.ErrnoError(w.EEXIST);i.opfs.children?.delete(a),n.opfs.children?.set(r,t),t.name=r,t.parent=n,P(t,E(n.opfs.relPath,r)),e.isFile(t.mode)?O(t.mount,()=>F(t,i,a,n,r)):e.isDir(t.mode)&&O(t.mount,()=>I(t,i,a,n,r))}},unlink(t,n){let r=t.opfs.children?.get(n);if(!r)throw new e.ErrnoError(w.ENOENT);if(e.isDir(r.mode))throw new e.ErrnoError(w.EISDIR);t.opfs.children?.delete(n),e.isFile(r.mode)&&O(t.mount,async()=>{try{t.mount.opts.sahProvider.release(r.opfs.relPath)}catch{}await(await M(t)).removeEntry(n)})},rmdir(t,n){let r=t.opfs.children?.get(n);if(!r)throw new e.ErrnoError(w.ENOENT);if(!e.isDir(r.mode))throw new e.ErrnoError(w.ENOTDIR);if((r.opfs.children?.size??0)>0)throw new e.ErrnoError(w.ENOTEMPTY);t.opfs.children?.delete(n),O(t.mount,async()=>{await(await M(t)).removeEntry(n)})},readdir(t){if(!e.isDir(t.mode))throw new e.ErrnoError(w.ENOTDIR);let n=[`.`,`..`];for(let e of t.opfs.children?.keys()??[])n.push(e);return n},symlink(n,r,i){if(n.opfs.children?.has(r))throw new e.ErrnoError(w.EEXIST);let a=t.createNode(n,r,41471,0);return a.opfs.linkTarget=i,n.opfs.children?.set(r,a),a},readlink(t){if(!e.isLink(t.mode))throw new e.ErrnoError(w.EINVAL);return t.opfs.linkTarget??``}}}function oe(e){return{open(t){let n=t.node;if(e.isDir(n.mode)||!e.isFile(n.mode))return;let r=n.mount.opts.sahProvider.acquire(n.opfs.relPath,n.opfs.fileHandle);t.sah=r,t.flags!==void 0&&t.flags&512?(r.truncate(0),n.opfs.size=0):n.opfs.size=r.getSize()},close(e){let t=e.sah;if(t)try{t.flush()}finally{t.close(),e.node.mount.opts.sahProvider.release(e.node.opfs.relPath),e.sah=void 0}},read(t,n,r,i,a){let o=t.sah;if(!o)throw new e.ErrnoError(w.EBADF);let s=new Uint8Array(n.buffer,n.byteOffset+r,i);return o.read(s,{at:a})},write(t,n,r,i,a){let o=t.sah;if(!o)throw new e.ErrnoError(w.EBADF);let s=new Uint8Array(n.buffer,n.byteOffset+r,i),c=o.write(s,{at:a}),l=Math.max(t.node.opfs.size,a+c);return t.node.opfs.size=l,t.node.opfs.mtime=Date.now(),t.node.timestamp=t.node.opfs.mtime,c},llseek(t,n,r){let i=n;if(r===1)i=t.position+n;else if(r===2){let e=t.sah;i=(e?e.getSize():t.node.opfs.size)+n}if(i<0)throw new e.ErrnoError(w.EINVAL);return t.position=i,i}}}function se(e,t,n,r){for(let[i,a]of r.entries){if(i===``)continue;let r=i.split(`/`),o=n;for(let t=0;t<r.length-1;t++){let n=r[t],i=o.opfs.children?.get(n);if(!i)throw new e.ErrnoError(w.EIO);o=i}let s=r[r.length-1];if(a.kind===`directory`){let e=t.createNode(o,s,T,0);e.opfs.dirHandle=a.dirHandle,e.opfs.children=new Map,o.opfs.children?.set(s,e)}else{let e=t.createNode(o,s,33188,0);e.opfs.fileHandle=a.fileHandle,e.opfs.size=a.size,e.opfs.mtime=a.mtime,e.timestamp=a.mtime,o.opfs.children?.set(s,e)}}}function ce(e){let t={mount(n){let{prewalk:r}=n.opts,i=r.entries.get(``);if(i?.kind!==`directory`)throw new e.ErrnoError(w.EINVAL);let a=t.createNode(null,`/`,T,0);return a.mount=n,a.opfs.dirHandle=i.dirHandle,a.opfs.children=new Map,se(e,t,a,r),a},createNode(n,r,i,a=0){if(!e.isDir(i)&&!e.isFile(i)&&!e.isLink(i))throw new e.ErrnoError(w.EINVAL);let o=n===null?``:E(n.opfs?.relPath??``,r),s=e.createNode(n,r,i,a);return s.node_ops=t.node_ops,s.stream_ops=t.stream_ops,s.timestamp=Date.now(),n!==null&&(s.mount=n.mount),s.opfs={relPath:o,size:0,mtime:s.timestamp},e.isDir(i)&&(s.opfs.children=new Map),s},node_ops:void 0,stream_ops:void 0};return t.node_ops=ae(e,t),t.stream_ops=oe(e),t}const D=new WeakMap;function O(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 k(e){await(D.get(e)??Promise.resolve())}var A=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 j(){let e=new Map,t=new Set;return{provider:{acquire(n,r){let i=e.get(n);return i||(i={data:new Uint8Array,dirty:!0},e.set(n,i),t.add(n)),new A(i,()=>{i.dirty&&t.add(n)})},release(e){}},async preload(t){for(let[n,r]of t.entries){if(r.kind!==`file`)continue;let t=await r.fileHandle.getFile(),i=new Uint8Array(await t.arrayBuffer());e.set(n,{data:i,dirty:!1})}},async flush(t){for(let[n,r]of e){if(!r.dirty)continue;let e=n.split(`/`),i=t;for(let t of e.slice(0,-1))i=await i.getDirectoryHandle(t,{create:!0});let a=await(await i.getFileHandle(e[e.length-1],{create:!0})).createWritable(),o=new ArrayBuffer(r.data.byteLength);new Uint8Array(o).set(r.data),await a.write(o),await a.close(),r.dirty=!1}},getDirtyPaths(){return[...t]}}}async function 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 N(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 P(e,t){if(e.opfs.relPath=t,e.opfs.children)for(let[n,r]of e.opfs.children)P(r,E(t,n))}async function F(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 I(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 L(s,c),await a.removeEntry(n,{recursive:!0}),e.opfs.dirHandle=c}async function L(e,t){let n=e;for await(let[e,r]of n)if(r.kind===`directory`)await L(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 R(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 z(e,t){let n=new e.ErrnoError(w.EIO);return n.message=R(t),n}function B(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 z(n(e),V(e))},setattr:e=>{throw z(n(e),V(e))},lookup:e=>{throw z(n(e),V(e))},mknod:e=>{throw z(n(e),V(e))},rename:e=>{throw z(n(e),V(e))},unlink:e=>{throw z(n(e),V(e))},rmdir:e=>{throw z(n(e),V(e))},readdir:e=>{throw z(n(e),V(e))},symlink:e=>{throw z(n(e),V(e))},readlink:e=>{throw z(n(e),V(e))}},stream_ops:{open:e=>{throw z(n(e.node),V(e.node))},close:()=>{},read:e=>{throw z(n(e.node),V(e.node))},write:e=>{throw z(n(e.node),V(e.node))},llseek:e=>{throw z(n(e.node),V(e.node))}}};function n(t){return e}return t}function V(e){let t=e.mount;return t?.opts?.mountPath??t?.mountpoint??`<unknown mount>`}function H(e,t){let n=e.MOUNT_BOMB_FS;return n||(n=B(t),e.MOUNT_BOMB_FS=n),n}function U(e,t,n=()=>{}){if(t.length===0)return;let r=H(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 W(e){return R(e)}async function G(e,t){if(t.length===0)return;let n={};for(let e of t)n[e]=W(e);let r=JSON.stringify({prefixes:t,messages:n});e.globals.set(`__slicc_mount_data`,r);try{await e.runPythonAsync(`
4
+ import builtins as _slicc_builtins
5
+ import io as _slicc_io
6
+ import os as _slicc_os
7
+ import os.path as _slicc_osp
8
+ import errno as _slicc_errno
9
+ import json as _slicc_json
10
+
11
+ _slicc_data = _slicc_json.loads(__slicc_mount_data)
12
+ _slicc_mount_prefixes = list(_slicc_data['prefixes'])
13
+ _slicc_mount_messages = dict(_slicc_data['messages'])
14
+ del _slicc_data
15
+
16
+ def _slicc_match_mount_prefix(path):
17
+ if path is None:
18
+ return None
19
+ if isinstance(path, int):
20
+ return None
21
+ try:
22
+ s = _slicc_os.fspath(path)
23
+ except TypeError:
24
+ return None
25
+ if isinstance(s, bytes):
26
+ try:
27
+ s = s.decode('utf-8', 'surrogateescape')
28
+ except Exception:
29
+ return None
30
+ if not isinstance(s, str):
31
+ return None
32
+ try:
33
+ resolved = _slicc_osp.abspath(s)
34
+ except Exception:
35
+ return None
36
+ for prefix in _slicc_mount_prefixes:
37
+ if resolved == prefix or resolved.startswith(prefix + '/'):
38
+ return prefix
39
+ return None
40
+
41
+ def _slicc_raise_mount_guard(path, prefix):
42
+ msg = _slicc_mount_messages.get(prefix)
43
+ if not msg:
44
+ msg = "slicc: synchronous access to mounted path '" + prefix + "' is not supported; use the async slicc.fs module."
45
+ raise OSError(_slicc_errno.EIO, msg, str(path))
46
+
47
+ _slicc_orig_builtins_open = _slicc_builtins.open
48
+ _slicc_orig_io_open = _slicc_io.open
49
+ _slicc_orig_listdir = _slicc_os.listdir
50
+ _slicc_orig_scandir = _slicc_os.scandir
51
+ _slicc_orig_stat = _slicc_os.stat
52
+ _slicc_orig_lstat = _slicc_os.lstat
53
+ _slicc_orig_mkdir = _slicc_os.mkdir
54
+ _slicc_orig_remove = _slicc_os.remove
55
+ _slicc_orig_rename = _slicc_os.rename
56
+
57
+ def _slicc_guarded_builtins_open(file, *args, **kwargs):
58
+ if isinstance(file, int):
59
+ return _slicc_orig_builtins_open(file, *args, **kwargs)
60
+ prefix = _slicc_match_mount_prefix(file)
61
+ if prefix is not None:
62
+ _slicc_raise_mount_guard(file, prefix)
63
+ return _slicc_orig_builtins_open(file, *args, **kwargs)
64
+
65
+ def _slicc_guarded_io_open(file, *args, **kwargs):
66
+ if isinstance(file, int):
67
+ return _slicc_orig_io_open(file, *args, **kwargs)
68
+ prefix = _slicc_match_mount_prefix(file)
69
+ if prefix is not None:
70
+ _slicc_raise_mount_guard(file, prefix)
71
+ return _slicc_orig_io_open(file, *args, **kwargs)
72
+
73
+ def _slicc_make_path_guard(orig):
74
+ def _guarded(path, *args, **kwargs):
75
+ prefix = _slicc_match_mount_prefix(path)
76
+ if prefix is not None:
77
+ _slicc_raise_mount_guard(path, prefix)
78
+ return orig(path, *args, **kwargs)
79
+ return _guarded
80
+
81
+ def _slicc_guarded_rename(src, dst, *args, **kwargs):
82
+ for p in (src, dst):
83
+ prefix = _slicc_match_mount_prefix(p)
84
+ if prefix is not None:
85
+ _slicc_raise_mount_guard(p, prefix)
86
+ return _slicc_orig_rename(src, dst, *args, **kwargs)
87
+
88
+ _slicc_builtins.open = _slicc_guarded_builtins_open
89
+ _slicc_io.open = _slicc_guarded_io_open
90
+ _slicc_os.listdir = _slicc_make_path_guard(_slicc_orig_listdir)
91
+ _slicc_os.scandir = _slicc_make_path_guard(_slicc_orig_scandir)
92
+ _slicc_os.stat = _slicc_make_path_guard(_slicc_orig_stat)
93
+ _slicc_os.lstat = _slicc_make_path_guard(_slicc_orig_lstat)
94
+ _slicc_os.mkdir = _slicc_make_path_guard(_slicc_orig_mkdir)
95
+ _slicc_os.remove = _slicc_make_path_guard(_slicc_orig_remove)
96
+ _slicc_os.rename = _slicc_guarded_rename
97
+ `)}finally{try{e.runPython(`del __slicc_mount_data`)}catch{}}}var le=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 ue(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 de(e,t){let n=ue(t);e.registerJsModule(`_slicc_fs_js`,n),await e.runPythonAsync(`
98
+ import sys
99
+ import types
100
+ import js
101
+
102
+ def _build_slicc_module(_bridge):
103
+ fs_module = types.ModuleType("slicc.fs")
104
+
105
+ async def listdir(path):
106
+ result = await _bridge.listdir(path)
107
+ return [str(name) for name in result.to_py()] if hasattr(result, "to_py") else [str(name) for name in result]
108
+
109
+ async def read_bytes(path):
110
+ result = await _bridge.readBytes(path)
111
+ # Pyodide returns JS Uint8Array as memoryview; coerce to bytes.
112
+ if hasattr(result, "to_bytes"):
113
+ return result.to_bytes()
114
+ if isinstance(result, memoryview):
115
+ return bytes(result)
116
+ return bytes(result)
117
+
118
+ async def read_text(path, encoding="utf-8"):
119
+ data = await read_bytes(path)
120
+ return data.decode(encoding)
121
+
122
+ async def write_bytes(path, data):
123
+ if isinstance(data, str):
124
+ raise TypeError("write_bytes expects bytes-like; use write_text for str")
125
+ if isinstance(data, (bytes, bytearray, memoryview)):
126
+ payload = bytes(data)
127
+ else:
128
+ payload = bytes(data)
129
+ # Convert Python bytes to a real JS Uint8Array before crossing
130
+ # the realm RPC boundary. The bridge call ultimately hits
131
+ # \`port.postMessage\` (see realm-rpc.ts), which structured-
132
+ # clones its argument; a Python \`bytes\` would arrive as a
133
+ # PyProxy and trigger DataCloneError. \`js.Uint8Array.new\`
134
+ # copies the buffer into a JS typed array that clones cleanly.
135
+ await _bridge.writeBytes(path, js.Uint8Array.new(payload))
136
+
137
+ async def write_text(path, text, encoding="utf-8"):
138
+ if not isinstance(text, str):
139
+ raise TypeError("write_text expects str; use write_bytes for bytes")
140
+ await write_bytes(path, text.encode(encoding))
141
+
142
+ async def stat(path):
143
+ result = await _bridge.stat(path)
144
+ obj = result.to_py() if hasattr(result, "to_py") else result
145
+ if isinstance(obj, dict):
146
+ return {
147
+ "isDirectory": bool(obj.get("isDirectory", False)),
148
+ "isFile": bool(obj.get("isFile", False)),
149
+ "size": int(obj.get("size", 0)),
150
+ }
151
+ return {
152
+ "isDirectory": bool(getattr(obj, "isDirectory", False)),
153
+ "isFile": bool(getattr(obj, "isFile", False)),
154
+ "size": int(getattr(obj, "size", 0)),
155
+ }
156
+
157
+ async def exists(path):
158
+ result = await _bridge.exists(path)
159
+ return bool(result)
160
+
161
+ async def mkdir(path, parents=False):
162
+ # The underlying vfs.mkdir is recursive ({recursive: true} in
163
+ # realm-host.ts), matching parents=True semantics. With
164
+ # parents=False we raise FileExistsError when the target
165
+ # already exists, mirroring pathlib.Path.mkdir(parents=False).
166
+ if not parents:
167
+ try:
168
+ already = await exists(path)
169
+ except Exception:
170
+ already = False
171
+ if already:
172
+ raise FileExistsError(path)
173
+ await _bridge.mkdir(path)
174
+
175
+ async def remove(path):
176
+ await _bridge.remove(path)
177
+
178
+ async def walk(path):
179
+ results = []
180
+ async def _visit(current):
181
+ names = await listdir(current)
182
+ dirnames = []
183
+ filenames = []
184
+ for name in names:
185
+ child = current + "/" + name if current != "/" else "/" + name
186
+ try:
187
+ st = await stat(child)
188
+ except Exception:
189
+ continue
190
+ if st["isDirectory"]:
191
+ dirnames.append(name)
192
+ elif st["isFile"]:
193
+ filenames.append(name)
194
+ results.append((current, dirnames, filenames))
195
+ for d in list(dirnames):
196
+ child = current + "/" + d if current != "/" else "/" + d
197
+ await _visit(child)
198
+ await _visit(path)
199
+ return results
200
+
201
+ fs_module.listdir = listdir
202
+ fs_module.read_bytes = read_bytes
203
+ fs_module.read_text = read_text
204
+ fs_module.write_bytes = write_bytes
205
+ fs_module.write_text = write_text
206
+ fs_module.stat = stat
207
+ fs_module.exists = exists
208
+ fs_module.mkdir = mkdir
209
+ fs_module.remove = remove
210
+ fs_module.walk = walk
211
+
212
+ slicc_module = types.ModuleType("slicc")
213
+ slicc_module.fs = fs_module
214
+ sys.modules["slicc"] = slicc_module
215
+ sys.modules["slicc.fs"] = fs_module
216
+ return slicc_module
217
+
218
+ import _slicc_fs_js as _bridge
219
+ _build_slicc_module(_bridge)
220
+ del _build_slicc_module
221
+ del _bridge
222
+ `)}const K=C(`pyodide`,`314.0.0`),fe=`https://cdn.jsdelivr.net/pyodide/v${K}/full/`,pe=`pyodide is not installed in node_modules: run \`ipk add pyodide@${K}\` (no network fallback)`,q={asmJs:`pyodide.asm.mjs`,asmWasm:`pyodide.asm.wasm`,stdlibZip:`python_stdlib.zip`,lockJson:`pyodide-lock.json`};async function me(e,t){try{let[n,r,i,a]=await Promise.all([e.call(`vfs`,`readFile`,[`${t}/${q.asmJs}`]),e.call(`vfs`,`readFileBinary`,[`${t}/${q.asmWasm}`]),e.call(`vfs`,`readFileBinary`,[`${t}/${q.stdlibZip}`]),e.call(`vfs`,`readFile`,[`${t}/${q.lockJson}`])]);return{asmJsSource:n,asmWasmBytes:r instanceof Uint8Array?r:new Uint8Array(r),stdlibBytes:i instanceof Uint8Array?i:new Uint8Array(i),lockJsonString:a}}catch{return null}}function he(e,t){let n=e+q.asmWasm,r=globalThis.fetch,i=!0,a=(e,i)=>(typeof e==`string`?e:e instanceof URL?e.href:e.url)===n?Promise.resolve(new Response(t,{headers:{"Content-Type":`application/wasm`}})):r(e,i);return globalThis.fetch=a,{restore:()=>{i&&(i=!1,globalThis.fetch===a&&(globalThis.fetch=r))}}}async function ge(e,t,n){let r=await me(n,t);if(!r)throw Error(pe);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=he(o,r.asmWasmBytes);try{let t=await import(i);return await e.loadPyodide({indexURL:o,lockFileContents:r.lockJsonString,stdLibURL:a,createPyodideModule:t.default,packageBaseUrl:re(`/workspace/python_wheels/`)})}finally{s.restore(),URL.revokeObjectURL(i),URL.revokeObjectURL(a)}}async function _e(e,t,n=()=>import(`./pyodide-CY7aNvge.js`)){let r=[],i=[],a=new le(t),o;try{let t=await n();o=e.pyodideAssetRoot?await ge(t,e.pyodideAssetRoot,a):await t.loadPyodide({indexURL:e.pyodideIndexURL})}catch(e){a.dispose();let n={type:`realm-error`,message:`loadPyodide: ${e instanceof Error?e.message:String(e)}`};t.postMessage(n);return}let s=e=>{i.push(`Warning: ${e}\n`)},c=[],l;try{await ve(o,a,s,ye(e.pyodideAssetRoot)),c=await De(o,e,s),await Oe(o,e,s),await Te(o,a,e,s),await ke(o,a,s);try{o.FS.chdir(e.cwd)}catch{}Z(o,e,r,i),l=await Ae(o,i),await je(c,e,a,s)}catch(e){a.dispose();let n={type:`realm-error`,message:`${e instanceof Error?e.message:String(e)}${i.length?`\n${i.join(``)}`:``}`};t.postMessage(n);return}a.dispose();let u={type:`realm-done`,stdout:r.join(``),stderr:i.join(``),exitCode:l};t.postMessage(u)}const J=`/workspace/python_wheels`;async function ve(e,t,n,r){await be(t,n,r);try{await e.loadPackage([`micropip`])}catch(e){n(`micropip preload failed: ${Q(e)}`)}}function ye(e){return e?`${e}/${q.lockJson}`:`/workspace/node_modules/pyodide/pyodide-lock.json`}const Y=1e4,X=new WeakMap;function be(e,t,n){let r=X.get(e);if(r)return r;let i=xe(e,t,n);return X.set(e,i),i}async function xe(e,t,n){let r;try{if(!await e.call(`vfs`,`exists`,[n]))return;let t=await e.call(`vfs`,`readFile`,[n]),i=JSON.parse(t);for(let[e,t]of Object.entries(i.packages??{}))if(t?.file_name&&f(t.name??e)===`micropip`){r=t;break}}catch(e){t(`micropip wheel staging skipped: ${Q(e)}`);return}if(!r?.file_name||!r.sha256)return;let i=`${J}/${r.file_name}`;try{if(await e.call(`vfs`,`exists`,[i]))return;let t=await u(Se(e),{url:`${fe}${r.file_name}`,sha256:r.sha256,label:`micropip wheel`,timeoutMs:Y});await e.call(`vfs`,`mkdir`,[J]),await e.call(`vfs`,`writeFileBinary`,[i,t])}catch(e){t(`micropip wheel staging failed: ${Q(e)}`)}}function Se(e){return async(t,n)=>{let r={method:n?.method??`GET`,...n?.headers?{headers:n.headers}:{},...n?.body===void 0?{}:{body:n.body}},i=await Ce(e.call(`fetch`,`request`,[t,r]),n?.timeoutMs??Y,t);return{status:i.status,statusText:i.statusText,headers:i.headers,body:i.body instanceof Uint8Array?i.body:new Uint8Array(i.body),url:i.url}}}function Ce(e,t,n){let r,i=new Promise((e,i)=>{r=setTimeout(()=>i(Error(`request to ${n} timed out after ${t}ms`)),t)});return Promise.race([e,i]).finally(()=>clearTimeout(r))}function we(e){return{exists:t=>e.call(`vfs`,`exists`,[t]),readFile:t=>e.call(`vfs`,`readFile`,[t])}}async function Te(e,t,n,r){let i=we(t),a;try{a=await ee(i,n.cwd)}catch(e){r(`manifest discovery failed: ${Q(e)}`);return}if(a===null)return;let o,s;try{let[e,t]=await Promise.all([y(i,a),b(i,a)]);o=e.dependencies,s=t}catch(e){r(`manifest read failed: ${Q(e)}`);return}let c=new Map;for(let e of s)c.set(f(e.name),e);for(let t of o){let{name:n}=p(t);if(!n)continue;let i=c.get(f(n));if(!i){r(`no integrity pin for \`${n}\`; run \`di sync\` to repair`);continue}await Ee(e,i,r)}}async function Ee(e,t,n){switch(t.source){case`pyodide-cdn`:try{await e.loadPackage([t.name])}catch(e){n(`activation of \`${t.name}\` failed: ${Q(e)}`)}return;case`pypi`:try{let n=`${J}/${t.fileName}`;await e.runPythonAsync(`import micropip; await micropip.install('emfs:${n}')`)}catch(e){n(`activation of \`${t.name}\` failed: ${Q(e)}`)}return;default:n(`unknown source \`${t.source}\` for \`${t.name}\`; skipping`)}}async function De(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 Pe(e,r,t.opfsMountDbName,n,{skipMountPaths:a})).mounts}catch(e){return n(`VFS→Pyodide OPFS mount failed: ${Q(e)}`),[]}}async function Oe(e,t,n){let r=t.mountPoints??[];if(r.length!==0){try{U(e.FS,r.map(e=>e.path),n)}catch(e){n(`bomb overlay install failed: ${Q(e)}`)}try{await G(e,r.map(e=>e.path))}catch(e){n(`python mount guard install failed: ${Q(e)}`)}}}async function ke(e,t,n){try{await de(e,t)}catch(e){n(`slicc.fs registration failed: ${Q(e)}`)}}function Z(e,t,n,r){e.setStdout({batched:e=>n.push(e+`
223
+ `)}),e.setStderr({batched:e=>r.push(e+`
224
+ `)});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 Ae(e,t){let n;try{await e.runPythonAsync(`
225
+ import sys
226
+ import traceback
227
+
228
+ __slicc_exit_code = 0
229
+ try:
230
+ sys.argv = __slicc_argv
231
+ exec(compile(__slicc_code, __slicc_filename, "exec"), {"__name__": "__main__", "__file__": __slicc_filename})
232
+ except SystemExit as exc:
233
+ code = exc.code
234
+ if code is None:
235
+ __slicc_exit_code = 0
236
+ elif isinstance(code, int):
237
+ __slicc_exit_code = code
238
+ else:
239
+ print(code, file=sys.stderr)
240
+ __slicc_exit_code = 1
241
+ except BaseException:
242
+ traceback.print_exc()
243
+ __slicc_exit_code = 1
244
+ `);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 je(e,t,n,r){if(t.opfsMountDbName!==void 0){try{await Ie(e)}catch(e){r(`Pyodide→VFS OPFS flush failed: ${e instanceof Error?e.message:String(e)}`)}try{await Le(e,n)}catch(e){r(`Pyodide→kernel VFS invalidation failed: ${Q(e)}`)}}}const Me=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 Ne(e){let t=e.FS.filesystems,n=t.OPFS_SYNC_FS;return n||(n=ce(e.FS),t.OPFS_SYNC_FS=n),n}async function Pe(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=Ne(e);for(let n of t){if(n===`/`){await Fe(e,u,l,o,a,r);continue}if(!o.has(n))try{let t=l;for(let e of n.split(`/`).filter(Boolean))t=await t.getDirectoryHandle(e,{create:!0});await $(e,u,n,t,a)}catch(e){r(`VFS→Pyodide OPFS mount '${n}' failed: ${Q(e)}`)}}return{mounts:a}}async function Fe(e,t,n,r,i,a){try{let o=n;for await(let[n,s]of o){if(s.kind!==`directory`||Me.has(n))continue;let o=`/${n}`;if(!r.has(o))try{await $(e,t,o,s,i)}catch(e){a(`VFS→Pyodide OPFS mount '${o}' failed: ${Q(e)}`)}}}catch(e){a(`VFS→Pyodide OPFS mount '/' failed: ${Q(e)}`)}}async function $(e,t,n,r,i){try{e.FS.stat(n)}catch{e.FS.mkdirTree(n)}let a=await ie(r),o=j();await o.preload(a);let s={rootHandle:r,prewalk:a,sahProvider:o.provider},c=e.FS.mount(t,s,n),l=c?.mount??{opts:s,mountpoint:n,root:c};i.push({pyPath:n,mount:l,rootHandle:r,flushBuffers:o.flush,getDirtyPaths:o.getDirtyPaths})}async function Ie(e){for(let t of e)await k(t.mount),await t.flushBuffers(t.rootHandle)}async function Le(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 Re={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`&&_e(t,Re).catch(e=>{let t={type:`realm-error`,message:e instanceof Error?e.message:String(e)};self.postMessage(t)})});
@@ -0,0 +1,3 @@
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
+ `).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`,IN_WORKERD:typeof navigator==`object`&&navigator.userAgent?.includes(`Cloudflare-Workers`)})}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;if(o&&S())throw Error(`Classic web workers are not supported`);let s={...e,IN_BROWSER:r,IN_BROWSER_MAIN_THREAD:a,IN_BROWSER_WEB_WORKER:o,IN_NODE_COMMONJS:t,IN_NODE_ESM:n};if(!(s.IN_BROWSER_MAIN_THREAD||s.IN_BROWSER_WEB_WORKER||s.IN_NODE||s.IN_SHELL||s.IN_WORKERD))throw Error(`Cannot determine runtime environment: ${JSON.stringify(s)}`);return s}r(x,`calculateDerivedFlags`);function S(){try{return globalThis.importScripts(`data:text/javascript,`),!0}catch{return!1}}r(S,`isClassicWorker`);var C,w,T,E;async function D(){if(!b.IN_NODE||(C=(await import(`./__vite-browser-external-C7iut881.js`).then(t=>e(t.t(),1))).default,T=await import(`./__vite-browser-external-C7iut881.js`).then(t=>e(t.t(),1)),E=await import(`./__vite-browser-external-C7iut881.js`).then(t=>e(t.t(),1)),(await import(`./__vite-browser-external-C7iut881.js`).then(t=>e(t.t(),1))).default,w=await import(`./__vite-browser-external-C7iut881.js`).then(t=>e(t.t(),1)),j=w.sep,typeof i<`u`))return;let t={fs:T,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(D,`initNodeModules`);function O(e,t){return w.resolve(t||`.`,e)}r(O,`node_resolvePath`);function k(e,t){return t===void 0&&(t=location),new URL(e,t).toString()}r(k,`browser_resolvePath`);var A=b.IN_NODE?O:b.IN_SHELL?r(e=>e,`resolvePath`):k,j;b.IN_NODE||(j=`/`);function M(e,t){return e.startsWith(`file://`)&&(e=e.slice(7)),e.includes(`://`)?{response:fetch(e)}:{binary:E.readFile(e).then(e=>new Uint8Array(e.buffer,e.byteOffset,e.byteLength))}}r(M,`node_getBinaryResponse`);function N(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(N,`shell_getBinaryResponse`);function P(e,t){let n=new URL(e,location);return{response:fetch(n,t?{integrity:t}:{})}}r(P,`browser_getBinaryResponse`);var F=b.IN_NODE?M:b.IN_SHELL?N:P;async function I(e,t){let{response:n,binary:r}=F(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(I,`loadBinaryFile`);var te=b.IN_NODE?L:r(async e=>await import(e),`loadScript`);async function L(e){return e.startsWith(`file://`)&&(e=e.slice(7)),e.includes(`://`)?await import(e):await import(C.pathToFileURL(e).href)}r(L,`nodeLoadScript`);async function R(e){if(b.IN_NODE){await D();let t=await E.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(R,`loadLockFile`);async function z(){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(j);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(z,`calculateDirname`);function B(e){return e.substring(0,e.lastIndexOf(`/`)+1)||globalThis.location?.toString()||`.`}r(B,`calculateInstallBaseUrl`);function ne(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(ne,`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(`AGFzbQEAAAABDANfAGAAAW9gAW8BfwMDAgECBygCE0pzdl9HZXRFcnJvcl9pbXBvcnQAAA5Kc3ZFcnJvcl9DaGVjawABChMCBwD7AQD7GwsJACAA+xr7FAAL`),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{Jsv_GetError_import:r(()=>t,`Jsv_GetError_import`),JsvError_Check:r(e=>e===t,`JsvError_Check`)}}r(V,`getJsvErrorImport`);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=I(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),ne,...G(e.fsInit)]}r(J,`getFileSystemInitializationFuncs`);function Y(e){if(typeof WasmOffsetConverter<`u`)return;let{binary:t,response:n}=F(e+`pyodide.asm.wasm`),r=V();return function(e,i){return async function(){let{Jsv_GetError_import:a,JsvError_Check:o}=await r;e.env.Jsv_GetError_import=a,e.env.JsvError_Check=o;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=`314.0.0`;function X(e){return e===void 0||e.endsWith(`/`)?e:e+`/`}r(X,`withTrailingSlash`);var Z=oe;async function Q(e={}){if(await D(),e.lockFileContents&&e.lockFileURL)throw Error(`Can't pass both lockFileContents and lockFileURL`);let t=e.indexURL||await z();if(t=X(A(t)),e.packageBaseUrl=X(e.packageBaseUrl),e.cdnUrl=X(e.packageBaseUrl??`https://cdn.jsdelivr.net/pyodide/v314.0.0/full/`),!e.lockFileContents){let n=e.lockFileURL??t+`pyodide-lock.json`;e.lockFileContents=R(n),e.packageBaseUrl??=B(n)}e.indexURL=t,e.packageCacheDir&&=X(A(e.packageCacheDir));let n={jsglobals:globalThis,stdin:globalThis.prompt?()=>globalThis.prompt():void 0,args:[],env:{},packages:[],packageCacheDir:e.packageBaseUrl,enableRunUntilComplete:!0,checkAPIVersion:!0,BUILD_ID:`2ff9f3fe6c88624a7e283d5651688da7f6169834ab51663b07be67c0bd43e53e`},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){return e.createPyodideModule?e.createPyodideModule:(await te(`${e.indexURL}pyodide.asm.mjs`)).default}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,t){let n=await e(t);if(t.exitCode!==void 0)throw new n.ExitStatus(t.exitCode);return n}r(le,`instantiatePyodideModule`);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!==`314.0.0`&&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),r=await se(t),i=await ce(t,n),a=await le(r,n);return ue(a,t),await fe(de(a,i,t),t)}r(pe,`loadPyodide`);export{pe as loadPyodide,Z as version};
@@ -0,0 +1,3 @@
1
+ var e=Object.create,t=Object.defineProperty,n=Object.getOwnPropertyDescriptor,r=Object.getOwnPropertyNames,i=Object.getPrototypeOf,a=Object.prototype.hasOwnProperty,o=(e,t)=>()=>(t||(e((t={exports:{}}).exports,t),e=null),t.exports),s=(e,i,o,s)=>{if(i&&typeof i==`object`||typeof i==`function`)for(var c=r(i),l=0,ee=c.length,u;l<ee;l++)u=c[l],!a.call(e,u)&&u!==o&&t(e,u,{get:(e=>i[e]).bind(null,u),enumerable:!(s=n(i,u))||s.enumerable});return e},c=(n,r,a)=>(a=n==null?{}:e(i(n)),s(r||!n||!n.__esModule?t(a,`default`,{value:n,enumerable:!0}):a,n)),l=(e=>typeof require<`u`?require:typeof Proxy<`u`?new Proxy(e,{get:(e,t)=>(typeof require<`u`?require:e)[t]}):e)(function(e){if(typeof require<`u`)return require.apply(this,arguments);throw Error('Calling `require` for "'+e+"\" in an environment that doesn't expose the `require` function. See https://rolldown.rs/in-depth/bundling-cjs#require-external-modules for more details.")}),ee=Object.defineProperty,u=(e,t)=>ee(e,`name`,{value:t,configurable:!0}),d=(e=>typeof l<`u`?l:typeof Proxy<`u`?new Proxy(e,{get:(e,t)=>(typeof l<`u`?l:e)[t]}):e)(function(e){if(typeof l<`u`)return l.apply(this,arguments);throw Error(`Dynamic require of "`+e+`" is not supported`)}),te=(()=>{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 f(e){return!isNaN(parseFloat(e))&&isFinite(e)}u(f,`_isNumber`);function p(e){return e.charAt(0).toUpperCase()+e.substring(1)}u(p,`_capitalize`);function m(e){return function(){return this[e]}}u(m,`_getter`);var h=[`isConstructor`,`isEval`,`isNative`,`isToplevel`],g=[`columnNumber`,`lineNumber`],_=[`fileName`,`functionName`,`source`],v=h.concat(g,_,[`args`],[`evalOrigin`]);function y(e){if(e)for(var t=0;t<v.length;t++)e[v[t]]!==void 0&&this[`set`+p(v[t])](e[v[t]])}for(u(y,`StackFrame`),y.prototype={getArgs:u(function(){return this.args},`getArgs`),setArgs:u(function(e){if(Object.prototype.toString.call(e)!==`[object Array]`)throw TypeError(`Args must be an Array`);this.args=e},`setArgs`),getEvalOrigin:u(function(){return this.evalOrigin},`getEvalOrigin`),setEvalOrigin:u(function(e){if(e instanceof y)this.evalOrigin=e;else if(e instanceof Object)this.evalOrigin=new y(e);else throw TypeError(`Eval Origin must be an Object or StackFrame`)},`setEvalOrigin`),toString:u(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`)},y.fromString=u(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 y({functionName:r,args:i||void 0,fileName:s,lineNumber:c||void 0,columnNumber:l||void 0})},`StackFrame$$fromString`),b=0;b<h.length;b++)y.prototype[`get`+p(h[b])]=m(h[b]),y.prototype[`set`+p(h[b])]=function(e){return function(t){this[e]=!!t}}(h[b]);var b;for(x=0;x<g.length;x++)y.prototype[`get`+p(g[x])]=m(g[x]),y.prototype[`set`+p(g[x])]=function(e){return function(t){if(!f(t))throw TypeError(e+` must be a Number`);this[e]=Number(t)}}(g[x]);var x;for(S=0;S<_.length;S++)y.prototype[`get`+p(_[S])]=m(_[S]),y.prototype[`set`+p(_[S])]=function(e){return function(t){this[e]=String(t)}}(_[S]);var S,C=y;function w(){var e=/^\s*at .*(\S+:\d+|\(native\))/m,t=/^(eval@)?(\[native code])?$/;return{parse:u(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:u(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:u(function(t){return t.stack.split(`
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 C({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:u(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 C({functionName:e});var t=/((.*".+"[^@]*)?[^@]*)(?:@)/,n=e.match(t),r=n&&n[1]?n[1]:void 0,i=this.extractLocation(e.replace(t,``));return new C({functionName:r,fileName:i[0],lineNumber:i[1],columnNumber:i[2],source:e})},this)},`ErrorStackParser$$parseFFOrSafari`)}}u(w,`ErrorStackParser`);var ne=new w;function T(){return typeof API<`u`&&API!==globalThis.API?API.runtimeEnv:D({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`,IN_WORKERD:typeof navigator==`object`&&navigator.userAgent?.includes(`Cloudflare-Workers`)})}u(T,`getGlobalRuntimeEnv`);var E=T();function D(e){let t=e.IN_NODE&&typeof module<`u`&&module.exports&&typeof d==`function`&&typeof __dirname==`string`,n=e.IN_NODE&&!t,r=!e.IN_NODE&&!e.IN_DENO&&!e.IN_BUN,i=r&&typeof window<`u`&&typeof window.document<`u`&&typeof document.createElement==`function`&&`sessionStorage`in window&&typeof globalThis.importScripts!=`function`,a=r&&typeof globalThis.WorkerGlobalScope<`u`&&typeof globalThis.self<`u`&&globalThis.self instanceof globalThis.WorkerGlobalScope;if(a&&O())throw Error(`Classic web workers are not supported`);let o={...e,IN_BROWSER:r,IN_BROWSER_MAIN_THREAD:i,IN_BROWSER_WEB_WORKER:a,IN_NODE_COMMONJS:t,IN_NODE_ESM:n};if(!(o.IN_BROWSER_MAIN_THREAD||o.IN_BROWSER_WEB_WORKER||o.IN_NODE||o.IN_SHELL||o.IN_WORKERD))throw Error(`Cannot determine runtime environment: ${JSON.stringify(o)}`);return o}u(D,`calculateDerivedFlags`);function O(){try{return globalThis.importScripts(`data:text/javascript,`),!0}catch{return!1}}u(O,`isClassicWorker`);var k,A,j,M;async function N(){if(!E.IN_NODE||(k=(await import(`./__vite-browser-external-BXIFVS_m.js`).then(e=>c(e.default,1))).default,j=await import(`./__vite-browser-external-BXIFVS_m.js`).then(e=>c(e.default,1)),M=await import(`./__vite-browser-external-BXIFVS_m.js`).then(e=>c(e.default,1)),(await import(`./__vite-browser-external-BXIFVS_m.js`).then(e=>c(e.default,1))).default,A=await import(`./__vite-browser-external-BXIFVS_m.js`).then(e=>c(e.default,1)),L=A.sep,typeof d<`u`))return;let e={fs:j,crypto:await import(`./__vite-browser-external-BXIFVS_m.js`).then(e=>c(e.default,1)),ws:await import(`./__vite-browser-external-BXIFVS_m.js`).then(e=>c(e.default,1)),child_process:await import(`./__vite-browser-external-BXIFVS_m.js`).then(e=>c(e.default,1))};globalThis.require=function(t){return e[t]}}u(N,`initNodeModules`);function P(e,t){return A.resolve(t||`.`,e)}u(P,`node_resolvePath`);function F(e,t){return t===void 0&&(t=location),new URL(e,t).toString()}u(F,`browser_resolvePath`);var I=E.IN_NODE?P:E.IN_SHELL?u(e=>e,`resolvePath`):F,L;E.IN_NODE||(L=`/`);function R(e,t){return e.startsWith(`file://`)&&(e=e.slice(7)),e.includes(`://`)?{response:fetch(e)}:{binary:M.readFile(e).then(e=>new Uint8Array(e.buffer,e.byteOffset,e.byteLength))}}u(R,`node_getBinaryResponse`);function z(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)))}}u(z,`shell_getBinaryResponse`);function B(e,t){let n=new URL(e,location);return{response:fetch(n,t?{integrity:t}:{})}}u(B,`browser_getBinaryResponse`);var V=E.IN_NODE?R:E.IN_SHELL?z:B;async function H(e,t){let{response:n,binary:r}=V(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())}u(H,`loadBinaryFile`);var re=E.IN_NODE?U:u(async e=>await import(e),`loadScript`);async function U(e){return e.startsWith(`file://`)&&(e=e.slice(7)),e.includes(`://`)?await import(e):await import(k.pathToFileURL(e).href)}u(U,`nodeLoadScript`);async function W(e){if(E.IN_NODE){await N();let t=await M.readFile(e,{encoding:`utf8`});return JSON.parse(t)}else if(E.IN_SHELL){let t=read(e);return JSON.parse(t)}else return await(await fetch(e)).json()}u(W,`loadLockFile`);async function G(){if(E.IN_NODE_COMMONJS)return __dirname;let e;try{throw Error()}catch(t){e=t}let t=ne.parse(e)[0].fileName;if(E.IN_NODE&&!t.startsWith(`file://`)&&(t=`file://${t}`),E.IN_NODE_ESM){let e=await import(`./__vite-browser-external-BXIFVS_m.js`).then(e=>c(e.default,1));return(await import(`./__vite-browser-external-BXIFVS_m.js`).then(e=>c(e.default,1))).fileURLToPath(e.dirname(t))}let n=t.lastIndexOf(L);if(n===-1)throw Error(`Could not extract indexURL path from pyodide module location. Please pass the indexURL explicitly to loadPyodide.`);return t.slice(0,n)}u(G,`calculateDirname`);function K(e){return e.substring(0,e.lastIndexOf(`/`)+1)||globalThis.location?.toString()||`.`}u(K,`calculateInstallBaseUrl`);function q(e){let t=e.FS,n=e.FS.filesystems.MEMFS,r=e.PATH,i={DIR_MODE:16895,FILE_MODE:33279,mount:u(function(e){if(!e.opts.fileSystemHandle)throw Error(`opts.fileSystemHandle is required`);return n.mount.apply(null,arguments)},`mount`),syncfs:u(async(e,t,n)=>{try{let r=i.getLocalSet(e),a=await i.getRemoteSet(e),o=t?a:r,s=t?r:a;await i.reconcile(e,o,s),n(null)}catch(e){n(e)}},`syncfs`),getLocalSet:u(e=>{let n=Object.create(null);function i(e){return e!==`.`&&e!==`..`}u(i,`isRealDir`);function a(e){return t=>r.join2(e,t)}u(a,`toAbsolute`);let o=t.readdir(e.mountpoint).filter(i).map(a(e.mountpoint));for(;o.length;){let e=o.pop(),r=t.stat(e);t.isDir(r.mode)&&o.push.apply(o,t.readdir(e).filter(i).map(a(e))),n[e]={timestamp:r.mtime,mode:r.mode}}return{type:`local`,entries:n}},`getLocalSet`),getRemoteSet:u(async e=>{let t=Object.create(null),n=await ie(e.opts.fileSystemHandle);for(let[a,o]of n)a!==`.`&&(t[r.join2(e.mountpoint,a)]={timestamp:o.kind===`file`?new Date((await o.getFile()).lastModified):new Date,mode:o.kind===`file`?i.FILE_MODE:i.DIR_MODE});return{type:`remote`,entries:t,handles:n}},`getRemoteSet`),loadLocalEntry:u(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:u((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:u(e=>{var n=t.stat(e);t.isDir(n.mode)?t.rmdir(e):t.isFile(n.mode)&&t.unlink(e)},`removeLocalEntry`),loadRemoteEntry:u(async e=>{if(e.kind===`file`){let t=await e.getFile();return{contents:new Uint8Array(await t.arrayBuffer()),mode:i.FILE_MODE,timestamp:new Date(t.lastModified)}}else{if(e.kind===`directory`)return{mode:i.DIR_MODE,timestamp:new Date};throw Error(`unknown kind: `+e.kind)}},`loadRemoteEntry`),storeRemoteEntry:u(async(e,n,i)=>{let a=e.get(r.dirname(n)),o=t.isFile(i.mode)?await a.getFileHandle(r.basename(n),{create:!0}):await a.getDirectoryHandle(r.basename(n),{create:!0});if(o.kind===`file`){let e=await o.createWritable();await e.write(i.contents),await e.close()}e.set(n,o)},`storeRemoteEntry`),removeRemoteEntry:u(async(e,t)=>{await e.get(r.dirname(t)).removeEntry(r.basename(t)),e.delete(t)},`removeRemoteEntry`),reconcile:u(async(e,n,a)=>{let o=0,s=[];Object.keys(n.entries).forEach(function(e){let r=n.entries[e],i=a.entries[e];(!i||t.isFile(r.mode)&&r.timestamp.getTime()>i.timestamp.getTime())&&(s.push(e),o++)}),s.sort();let c=[];if(Object.keys(a.entries).forEach(function(e){n.entries[e]||(c.push(e),o++)}),c.sort().reverse(),!o)return;let l=n.type===`remote`?n.handles:a.handles;for(let t of s){let n=r.normalize(t.replace(e.mountpoint,`/`)).substring(1);if(a.type===`local`){let e=l.get(n),r=await i.loadRemoteEntry(e);i.storeLocalEntry(t,r)}else{let e=i.loadLocalEntry(t);await i.storeRemoteEntry(l,n,e)}}for(let t of c)if(a.type===`local`)i.removeLocalEntry(t);else{let n=r.normalize(t.replace(e.mountpoint,`/`)).substring(1);await i.removeRemoteEntry(l,n)}},`reconcile`)};e.FS.filesystems.NATIVEFS_ASYNC=i}u(q,`initializeNativeFS`);var ie=u(async e=>{let t=[];async function n(e){for await(let r of e.values())t.push(r),r.kind===`directory`&&await n(r)}u(n,`collect`),await n(e);let r=new Map;r.set(`.`,e);for(let n of t){let t=(await e.resolve(n)).join(`/`);r.set(t,n)}return r},`getFsHandles`),ae=te(`AGFzbQEAAAABDANfAGAAAW9gAW8BfwMDAgECBygCE0pzdl9HZXRFcnJvcl9pbXBvcnQAAA5Kc3ZFcnJvcl9DaGVjawABChMCBwD7AQD7GwsJACAA+xr7FAAL`),oe=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(ae);return await WebAssembly.instantiate(e)}catch(e){if(e instanceof WebAssembly.CompileError)return;throw e}}();async function se(){let e=await oe;if(e)return e.exports;let t=Symbol(`error marker`);return{Jsv_GetError_import:u(()=>t,`Jsv_GetError_import`),JsvError_Check:u(e=>e===t,`JsvError_Check`)}}u(se,`getJsvErrorImport`);function J(e){let t={config:e,runtimeEnv:E},n={noImageDecoding:!0,noAudioDecoding:!0,noWasmDecoding:!1,preRun:le(e),print:e.stdout,printErr:e.stderr,onExit(e){n.exitCode=e},thisProgram:e._sysExecutable,arguments:e.args,API:t,locateFile:u(t=>e.indexURL+t,`locateFile`),instantiateWasm:ue(e.indexURL)};return n}u(J,`createSettings`);function Y(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)}}u(Y,`createHomeDirectory`);function X(e){return function(t){Object.assign(t.ENV,e)}}u(X,`setEnvironment`);function Z(e){return e?[async t=>{t.addRunDependency(`fsInitHook`);try{await e(t.FS,{sitePackages:t.API.sitePackages})}finally{t.removeRunDependency(`fsInitHook`)}}]:[]}u(Z,`callFsInitHook`);function Q(e){let t=e.HEAPU32[e._Py_Version>>>2];return[t>>>24&255,t>>>16&255,t>>>8&255]}u(Q,`computeVersionTuple`);function ce(e){let t=H(e);return async e=>{e.API.pyVersionTuple=Q(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`)}}}u(ce,`installStdlib`);function le(e){let t;return t=e.stdLibURL==null?e.indexURL+`python_stdlib.zip`:e.stdLibURL,[ce(t),Y(e.env.HOME),X(e.env),q,...Z(e.fsInit)]}u(le,`getFileSystemInitializationFuncs`);function ue(e){if(typeof WasmOffsetConverter<`u`)return;let{binary:t,response:n}=V(e+`pyodide.asm.wasm`),r=se();return function(e,i){return async function(){let{Jsv_GetError_import:a,JsvError_Check:o}=await r;e.env.Jsv_GetError_import=a,e.env.JsvError_Check=o;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)}}(),{}}}u(ue,`getInstantiateWasmFunc`);var de=`314.0.0`;function $(e){return e===void 0||e.endsWith(`/`)?e:e+`/`}u($,`withTrailingSlash`);var fe=de;async function pe(e={}){if(await N(),e.lockFileContents&&e.lockFileURL)throw Error(`Can't pass both lockFileContents and lockFileURL`);let t=e.indexURL||await G();if(t=$(I(t)),e.packageBaseUrl=$(e.packageBaseUrl),e.cdnUrl=$(e.packageBaseUrl??`https://cdn.jsdelivr.net/pyodide/v314.0.0/full/`),!e.lockFileContents){let n=e.lockFileURL??t+`pyodide-lock.json`;e.lockFileContents=W(n),e.packageBaseUrl??=K(n)}e.indexURL=t,e.packageCacheDir&&=$(I(e.packageCacheDir));let n={jsglobals:globalThis,stdin:globalThis.prompt?()=>globalThis.prompt():void 0,args:[],env:{},packages:[],packageCacheDir:e.packageBaseUrl,enableRunUntilComplete:!0,checkAPIVersion:!0,BUILD_ID:`2ff9f3fe6c88624a7e283d5651688da7f6169834ab51663b07be67c0bd43e53e`},r=Object.assign(n,e);return r.env.HOME??=`/home/pyodide`,r.env.PYTHONINSPECT??=`1`,r}u(pe,`initializeConfiguration`);function me(e){let t=J(e),n=t.API;return n.lockFilePromise=Promise.resolve(e.lockFileContents),t}u(me,`createEmscriptenSettings`);async function he(e){return e.createPyodideModule?e.createPyodideModule:(await re(`${e.indexURL}pyodide.asm.mjs`)).default}u(he,`loadWasmScript`);async function ge(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}u(ge,`prepareSnapshot`);async function _e(e,t){let n=await e(t);if(t.exitCode!==void 0)throw new n.ExitStatus(t.exitCode);return n}u(_e,`instantiatePyodideModule`);function ve(e,t){let n=e.API;if(t.pyproxyToStringRepr&&n.setPyProxyToStringMethod(!0),t.convertNullToNone&&n.setCompatNullToNone(!0),t.toJsLiteralMap&&n.setCompatToJsLiteralMap(!0),n.version!==`314.0.0`&&t.checkAPIVersion)throw Error(`Pyodide version does not match: '${fe}' <==> '${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}")`)}}u(ve,`configureAPI`);function ye(e,t,n){let r=e.API,i;return t&&(i=r.restoreSnapshot(t)),r.finalizeBootstrap(i,n._snapshotDeserializer)}u(ye,`bootstrapPyodide`);async function be(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}u(be,`finalizeSetup`);async function xe(e={}){let t=await pe(e),n=me(t),r=await he(t),i=await ge(t,n),a=await _e(r,n);return ve(a,t),await be(ye(a,i,t),t)}u(xe,`loadPyodide`);export{xe as loadPyodide,o as t,fe 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-C29Q2_1P.js";import{t as o}from"./logger-DDBAeTLF.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-DW6iW9iB.js";import{t as o}from"./logger-DDBAeTLF.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};
@@ -0,0 +1 @@
1
+ import{c as e}from"./wc-live-CXSudFHs.js";export{e as readSessionsIndex};
@@ -1 +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-CZdBdTQm.js";function o(e,t,n){for(let r=0;r<n.length;r++)e.setUint8(t+r,n.charCodeAt(r))}function s(e){let t=Math.max(-1,Math.min(1,e));return Math.round(t<0?t*32768:t*32767)}function c(e){if(e.length===0)throw Error(`wav-encode: at least one PCM chunk is required`);let t=e[0].sampleRate;if(!Number.isFinite(t)||t<=0)throw Error(`wav-encode: invalid sample rate ${t}`);let n=0;for(let r of e){if(r.sampleRate!==t)throw Error(`wav-encode: mixed sample rates (${r.sampleRate} vs ${t}) — resample upstream`);n+=r.audio.length}let r=n*1*2,i=new ArrayBuffer(44+r),a=new DataView(i);o(a,0,`RIFF`),a.setUint32(4,36+r,!0),o(a,8,`WAVE`),o(a,12,`fmt `),a.setUint32(16,16,!0),a.setUint16(20,1,!0),a.setUint16(22,1,!0),a.setUint32(24,t,!0),a.setUint32(28,t*1*2,!0),a.setUint16(32,2,!0),a.setUint16(34,16,!0),o(a,36,`data`),a.setUint32(40,r,!0);let c=44;for(let t of e)for(let e=0;e<t.audio.length;e++)a.setInt16(c,s(t.audio[e]),!0),c+=2;return new Uint8Array(i)}const l=e(`speech:speak`);function u(e){return e.toLowerCase().startsWith(`en`)}function d(e,t){if(!t.ready)return`webspeech`;let n=e=>e.onDevice&&(u(e.lang)||t.nonEnglishOnDevice);if(e.voice){let r=t.voices.find(t=>t.id===e.voice);return r&&n(r)?`kokoro`:`webspeech`}let r=(e.lang?e.lang.split(`-`)[0]:`en`).toLowerCase();return t.voices.some(e=>e.lang.split(`-`)[0].toLowerCase()===r&&n(e))?`kokoro`:`webspeech`}function f(e,t){if(!e||u(e))return;let n=e.split(`-`)[0].toLowerCase();return t.find(e=>e.onDevice&&e.lang.split(`-`)[0].toLowerCase()===n)?.id}const p=()=>typeof chrome<`u`&&!!chrome?.runtime?.id;function m(e){return e.onDevice&&(u(e.lang)||!p())}function h(){return r()?.voices().map(e=>({...e,onDevice:m(e)}))??[]}async function g(){if(typeof speechSynthesis>`u`)return[];let e=speechSynthesis.getVoices();return e.length>0||typeof speechSynthesis.addEventListener!=`function`?e:new Promise(e=>{let t=()=>{clearTimeout(r),speechSynthesis.removeEventListener(`voiceschanged`,n),e(speechSynthesis.getVoices())},n=()=>t(),r=setTimeout(t,2e3);speechSynthesis.addEventListener(`voiceschanged`,n)})}function _(){let e=a();return{state:n(),...e?{loaded:e.loaded,total:e.total,etaSeconds:e.etaSeconds}:{}}}async function v(){try{p()||await t({instanceId:void 0})}catch(e){l.warn(`kokoro asset staging failed; trying already-present weights`,e)}try{await i()}catch(e){l.warn(`kokoro warmup load failed`,e)}}function y(){return v(),_()}let b=null;function x(){return(!b||b.state===`closed`)&&(b=new AudioContext),b}async function S(e,t,n=1){let r=x();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()})}async function C(e){if(typeof speechSynthesis>`u`)throw Error(`speechSynthesis is unavailable in this realm`);let t=await g();return new Promise((n,r)=>{let i=new SpeechSynthesisUtterance(e.text);if(e.lang!==void 0&&(i.lang=e.lang),e.rate!==void 0&&(i.rate=e.rate),e.pitch!==void 0&&(i.pitch=e.pitch),e.volume!==void 0&&(i.volume=e.volume),e.voice){let n=t.find(t=>t.name===e.voice);n&&(i.voice=n)}else if(e.lang){let n=e.lang.split(`-`)[0].toLowerCase(),r=t.find(e=>e.lang.split(`-`)[0].toLowerCase()===n);r&&(i.voice=r)}i.onend=()=>n(),i.onerror=e=>r(Error(`speak: ${e.error||`utterance failed`}`)),speechSynthesis.speak(i)})}async function w(e){let t=r(),n=t?.voices()??[];if(d(e,{ready:t!==null,voices:n,nonEnglishOnDevice:!p()})===`kokoro`&&t){let r=e.voice??f(e.lang,n),i=0;try{let n=t.synthesizeStream(e.text,{...r?{voice:r}:{},...e.rate?{speed:e.rate}:{}});for await(let t of n)await S(t.audio,t.sampleRate,e.volume),i++;return{engine:`kokoro`}}catch(e){if(i>0)return l.warn(`kokoro stream failed mid-playback; stopping`,e),{engine:`kokoro`};l.warn(`kokoro synthesis failed; falling back to webspeech`,e)}}return await C(e),{engine:`webspeech`}}async function T(e){let t=r();if(!t)throw Error(`on-device voice not ready — run say --warmup and retry once it reports ready`);if(e.lang&&!e.lang.toLowerCase().startsWith(`en`))throw Error(`-o writes WAV via the on-device voice, which is English-only (got ${e.lang})`);if(e.voice&&!t.voices().map(e=>e.id).includes(e.voice))throw Error(`-o writes WAV via the on-device voice; "${e.voice}" is a Web Speech voice. Pick a kokoro voice (e.g. af_heart) or omit -v.`);let n=[],i=t.synthesizeStream(e.text,{...e.voice?{voice:e.voice}:{},...e.rate?{speed:e.rate}:{}});for await(let e of i)n.push({audio:e.audio,sampleRate:e.sampleRate});if(n.length===0)throw Error(`kokoro produced no audio (text is empty after sentence split?)`);return c(n)}export{_ as kokoroStatus,h as kokoroVoicesIfReady,y as kokoroWarmup,w as speak,T as synthesizeToWav};
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-D55VqYz2.js";function o(e,t,n){for(let r=0;r<n.length;r++)e.setUint8(t+r,n.charCodeAt(r))}function s(e){let t=Math.max(-1,Math.min(1,e));return Math.round(t<0?t*32768:t*32767)}function c(e){if(e.length===0)throw Error(`wav-encode: at least one PCM chunk is required`);let t=e[0].sampleRate;if(!Number.isFinite(t)||t<=0)throw Error(`wav-encode: invalid sample rate ${t}`);let n=0;for(let r of e){if(r.sampleRate!==t)throw Error(`wav-encode: mixed sample rates (${r.sampleRate} vs ${t}) — resample upstream`);n+=r.audio.length}let r=n*1*2,i=new ArrayBuffer(44+r),a=new DataView(i);o(a,0,`RIFF`),a.setUint32(4,36+r,!0),o(a,8,`WAVE`),o(a,12,`fmt `),a.setUint32(16,16,!0),a.setUint16(20,1,!0),a.setUint16(22,1,!0),a.setUint32(24,t,!0),a.setUint32(28,t*1*2,!0),a.setUint16(32,2,!0),a.setUint16(34,16,!0),o(a,36,`data`),a.setUint32(40,r,!0);let c=44;for(let t of e)for(let e=0;e<t.audio.length;e++)a.setInt16(c,s(t.audio[e]),!0),c+=2;return new Uint8Array(i)}const l=e(`speech:speak`);function u(e){return e.toLowerCase().startsWith(`en`)}function d(e,t){if(!t.ready)return`webspeech`;let n=e=>e.onDevice&&(u(e.lang)||t.nonEnglishOnDevice);if(e.voice){let r=t.voices.find(t=>t.id===e.voice);return r&&n(r)?`kokoro`:`webspeech`}let r=(e.lang?e.lang.split(`-`)[0]:`en`).toLowerCase();return t.voices.some(e=>e.lang.split(`-`)[0].toLowerCase()===r&&n(e))?`kokoro`:`webspeech`}function f(e,t){if(!e||u(e))return;let n=e.split(`-`)[0].toLowerCase();return t.find(e=>e.onDevice&&e.lang.split(`-`)[0].toLowerCase()===n)?.id}const p=()=>typeof chrome<`u`&&!!chrome?.runtime?.id;function m(e){return e.onDevice&&(u(e.lang)||!p())}function h(){return r()?.voices().map(e=>({...e,onDevice:m(e)}))??[]}async function g(){if(typeof speechSynthesis>`u`)return[];let e=speechSynthesis.getVoices();return e.length>0||typeof speechSynthesis.addEventListener!=`function`?e:new Promise(e=>{let t=()=>{clearTimeout(r),speechSynthesis.removeEventListener(`voiceschanged`,n),e(speechSynthesis.getVoices())},n=()=>t(),r=setTimeout(t,2e3);speechSynthesis.addEventListener(`voiceschanged`,n)})}function _(){let e=a();return{state:n(),...e?{loaded:e.loaded,total:e.total,etaSeconds:e.etaSeconds}:{}}}async function v(){try{p()||await t({instanceId:void 0})}catch(e){l.warn(`kokoro asset staging failed; trying already-present weights`,e)}try{await i()}catch(e){l.warn(`kokoro warmup load failed`,e)}}function y(){return v(),_()}let b=null;function x(){return(!b||b.state===`closed`)&&(b=new AudioContext),b}async function S(e,t,n=1){let r=x();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()})}async function C(e){if(typeof speechSynthesis>`u`)throw Error(`speechSynthesis is unavailable in this realm`);let t=await g();return new Promise((n,r)=>{let i=new SpeechSynthesisUtterance(e.text);if(e.lang!==void 0&&(i.lang=e.lang),e.rate!==void 0&&(i.rate=e.rate),e.pitch!==void 0&&(i.pitch=e.pitch),e.volume!==void 0&&(i.volume=e.volume),e.voice){let n=t.find(t=>t.name===e.voice);n&&(i.voice=n)}else if(e.lang){let n=e.lang.split(`-`)[0].toLowerCase(),r=t.find(e=>e.lang.split(`-`)[0].toLowerCase()===n);r&&(i.voice=r)}i.onend=()=>n(),i.onerror=e=>r(Error(`speak: ${e.error||`utterance failed`}`)),speechSynthesis.speak(i)})}async function w(e){let t=r(),n=t?.voices()??[];if(d(e,{ready:t!==null,voices:n,nonEnglishOnDevice:!p()})===`kokoro`&&t){let r=e.voice??f(e.lang,n),i=0;try{let n=t.synthesizeStream(e.text,{...r?{voice:r}:{},...e.rate?{speed:e.rate}:{}});for await(let t of n)await S(t.audio,t.sampleRate,e.volume),i++;return{engine:`kokoro`}}catch(e){if(i>0)return l.warn(`kokoro stream failed mid-playback; stopping`,e),{engine:`kokoro`};l.warn(`kokoro synthesis failed; falling back to webspeech`,e)}}return await C(e),{engine:`webspeech`}}async function T(e){let t=r();if(!t)throw Error(`on-device voice not ready — run say --warmup and retry once it reports ready`);if(e.lang&&!e.lang.toLowerCase().startsWith(`en`))throw Error(`-o writes WAV via the on-device voice, which is English-only (got ${e.lang})`);if(e.voice&&!t.voices().map(e=>e.id).includes(e.voice))throw Error(`-o writes WAV via the on-device voice; "${e.voice}" is a Web Speech voice. Pick a kokoro voice (e.g. af_heart) or omit -v.`);let n=[],i=t.synthesizeStream(e.text,{...e.voice?{voice:e.voice}:{},...e.rate?{speed:e.rate}:{}});for await(let e of i)n.push({audio:e.audio,sampleRate:e.sampleRate});if(n.length===0)throw Error(`kokoro produced no audio (text is empty after sentence split?)`);return c(n)}export{_ as kokoroStatus,h as kokoroVoicesIfReady,y as kokoroWarmup,w as speak,T as synthesizeToWav};
@@ -1 +1 @@
1
- import{t as e}from"./logger-DDBAeTLF.js";import{n as t,t as n}from"./panel-rpc-DqT2FG7c.js";import{s as r}from"./main-BwuI7fRl.js";import{t as i}from"./sprinkle-bridge-BB1Ge79t.js";import{t as a}from"./sprinkle-renderer-GiRRbdBx.js";var o=[`/shared/sprinkles`],s=new Set([`welcome`,`connect-llm`]);async function c(e){let t=new Map;for(let n of o)await e.exists(n)&&await l(e,n,t);return await l(e,`/`,t),t}async function l(e,t,n){for await(let r of e.walk(t)){if(!r.endsWith(`.shtml`))continue;let t=u(r);if(!s.has(t)&&!n.has(t)){let i;try{i=await e.readFile(r,{encoding:`utf-8`})??``}catch{i=``}n.set(t,{name:t,path:r,title:d(i,t),autoOpen:f(i),icon:p(i)})}}}function u(e){let t=e.split(`/`).pop()??e;return t.endsWith(`.shtml`)?t.slice(0,-6):t}function d(e,t){let n=e.match(/data-sprinkle-title=["']([^"']+)["']/);if(n)return n[1];let r=e.match(/<title>([^<]+)<\/title>/i);return r?r[1].trim():t}function f(e){return/data-sprinkle-autoopen\b/.test(e)}function p(e){let t=/<link\b/gi,n;for(;(n=t.exec(e))!==null;){let t=n.index+n[0].length,r=m(e,t);if(r<0)continue;let i=e.slice(t,r);if(!/\brel\s*=\s*("|')\s*(?:shortcut\s+)?icon\s*\1/i.test(i))continue;let a=h(i,`href`);if(a!==void 0)return a.trim()}let r=h(e,`data-sprinkle-icon`);if(r!==void 0)return r.trim()}function m(e,t){let n=!1,r=!1;for(let i=t;i<e.length;i++){let t=e.charCodeAt(i);if(n)t===34&&(n=!1);else if(r)t===39&&(r=!1);else if(t===34)n=!0;else if(t===39)r=!0;else if(t===62)return i}return-1}function h(e,t){let n=RegExp(`\\b${t}\\s*=\\s*(?:"([^"]*)"|'([^']*)')`,`i`),r=e.match(n);if(r)return r[1]??r[2]??void 0}var g=e(`sprinkle-manager`),_=`slicc-open-sprinkles`,v=`sprinkles`;function y(){try{if(typeof window>`u`||!window.location)return null;let e=new URLSearchParams(window.location.search).get(v);return e===null?null:e===``?[]:e.split(`,`).map(e=>e.trim()).filter(e=>e.length>0)}catch{return null}}function b(e){try{if(typeof window>`u`||!window.location||typeof history>`u`||typeof history.replaceState!=`function`)return;let t=new URL(window.location.href);e.length===0?t.searchParams.delete(v):t.searchParams.set(v,e.join(`,`));let n=t.pathname+t.search+t.hash;history.replaceState(history.state??null,``,n)}catch{}}var x=`slicc-known-sprinkles`;function S(e){try{let t=new Set(e),n=C().filter(e=>t.has(e));localStorage.setItem(x,JSON.stringify(n))}catch{}}function C(){try{let e=localStorage.getItem(x);if(!e)return[];let t=JSON.parse(e);return Array.isArray(t)?t.filter(e=>typeof e==`string`):[]}catch{return[]}}var w=`slicc-autoopened-once`,T=[`/workspace`,`/shared`,`/scoops`],E=250,D=class{fs;bridge;callbacks;availableSprinkles=new Map;watcherUnsub;openSprinkles=new Map;attentionOnly=new Set;inflightRefresh=null;lastRefreshAt=0;autoOpenBehavior;onSendToSprinkle;onSprinkleReloaded;registeredSprinkles=new Set;inlineSprinkles;changeListeners=new Set;changeNotifyScheduled=!1;urlWriteScheduled=!1;constructor(e,r,a,o,s={}){this.fs=e;let c=async()=>{let e=`image/png`,r=t(),i=n();if(!r&&!i)throw Error(`Screen capture unavailable in this environment`);if(r&&!navigator.mediaDevices?.getDisplayMedia)throw Error(`Screen capture not supported in this browser`);let a,o,s;if(r){let t=await navigator.mediaDevices.getDisplayMedia({video:!0,audio:!1});try{let n=document.createElement(`video`);n.srcObject=t,n.muted=!0,n.playsInline=!0,await new Promise((e,t)=>{n.onloadedmetadata=()=>n.play().then(()=>e()).catch(t),n.onerror=()=>t(Error(`Failed to load video stream`))}),await new Promise(e=>setTimeout(e,100)),o=n.videoWidth,s=n.videoHeight;let r=document.createElement(`canvas`);r.width=o,r.height=s;let i=r.getContext(`2d`);if(!i)throw Error(`Failed to get canvas context`);i.drawImage(n,0,0,o,s),a=await(await new Promise((t,n)=>{r.toBlob(e=>e?t(e):n(Error(`Failed to create image blob`)),e,1)})).arrayBuffer()}finally{for(let e of t.getTracks())e.stop()}}else{let t=await i.call(`screencapture`,{mimeType:e,quality:1},{timeoutMs:5*6e4});a=t.bytes,o=t.width,s=t.height}let c=new Uint8Array(a),l=[],u=8192;for(let e=0;e<c.length;e+=u)l.push(String.fromCharCode(...c.subarray(e,e+u)));return{base64:btoa(l.join(``)),width:o,height:s,mimeType:e}};this.bridge=new i(e,r,e=>this.close(e),e=>this.minimize(e),o,s.onAttachImage??(()=>{}),c,s.execHandler,(e,t,n)=>{this.openSprinkles.get(e)?.renderer.pushDeviceEvent(t,n)}),this.callbacks=a,this.autoOpenBehavior=s.autoOpenBehavior??`activate`,this.onSendToSprinkle=s.onSendToSprinkle,this.onSprinkleReloaded=s.onSprinkleReloaded,this.inlineSprinkles=s.inlineSprinkles??new Set}setSendToSprinkleHook(e){this.onSendToSprinkle&&!e&&g.error(`SprinkleManager broadcast hook detached`),this.onSendToSprinkle=e}setReloadHook(e){this.onSprinkleReloaded=e}async reload(e){let t=this.openSprinkles.get(e);if(!t){g.info(`Cannot reload closed sprinkle`,{name:e});return}let n=this.availableSprinkles.get(e);if(n||=(await this.refresh(),this.availableSprinkles.get(e)),!n){g.warn(`Sprinkle not found during reload`,{name:e});return}let r=await this.fs.readFile(n.path,{encoding:`utf-8`});if(r==null){g.warn(`Failed to read sprinkle content during reload`,{name:e});return}let i=typeof r==`string`?r:new TextDecoder(`utf-8`).decode(r);t.renderer?.dispose(),this.bridge.removeSprinkle(e);let o=this.bridge.createAPI(e),s=new a(t.container,o);if(await s.render(i,e),!this.openSprinkles.has(e)){s.dispose();return}if(t.renderer=s,g.info(`Sprinkle reloaded`,{name:e}),this.notifyChange(),this.onSprinkleReloaded)try{this.onSprinkleReloaded(e)}catch(t){g.error(`onSprinkleReloaded hook threw`,{name:e,error:t instanceof Error?t.message:String(t)})}}async restoreOpenSprinkles(){try{let e=y();if(e!==null){await this.reopenInBackground(e);return}let t=localStorage.getItem(_);t?await this.restoreFromLegacyStorage(t):await this.autoOpenFirstRun()}catch{}await this.surfaceUnseenSprinkles()}async reopenInBackground(e){for(let t of e)try{await this.open(t,void 0,{background:!0})}catch{g.warn(`Failed to restore sprinkle`,{name:t})}}async restoreFromLegacyStorage(e){try{await this.reopenInBackground(JSON.parse(e))}finally{try{localStorage.removeItem(_)}catch{}}}async autoOpenFirstRun(){let e=this.autoOpenBehavior===`attention`,t=this.loadAutoOpenedOnce(),n=new Set;for(let r of this.availableSprinkles.values())if(!(!r.autoOpen||t.has(r.name)))try{await this.open(r.name,void 0,{attention:e}),n.add(r.name)}catch{g.warn(`Failed to auto-open sprinkle`,{name:r.name})}n.size>0&&this.persistAutoOpenedOnce(n)}async surfaceUnseenSprinkles(){let e=this.loadKnownSprinkles(),t=this.loadAutoOpenedOnce(),n=this.autoOpenBehavior===`attention`,r=new Set;for(let i of this.availableSprinkles.values())if(!e.has(i.name)&&!this.openSprinkles.has(i.name)&&!(i.autoOpen&&t.has(i.name)))try{await this.open(i.name,void 0,{attention:i.autoOpen?n:!0}),i.autoOpen&&r.add(i.name),g.info(`Surfaced previously-unseen sprinkle`,{name:i.name})}catch{g.warn(`Failed to surface unseen sprinkle`,{name:i.name})}this.persistKnownSprinkles(new Set(this.availableSprinkles.keys())),r.size>0&&this.persistAutoOpenedOnce(r)}loadKnownSprinkles(){return new Set(C())}persistKnownSprinkles(e){try{let t=new Set([...this.loadKnownSprinkles(),...e]);localStorage.setItem(x,JSON.stringify([...t]))}catch{}}loadAutoOpenedOnce(){try{let e=localStorage.getItem(w);if(!e)return new Set;let t=JSON.parse(e);return Array.isArray(t)?new Set(t.filter(e=>typeof e==`string`)):new Set}catch{return new Set}}persistAutoOpenedOnce(e){try{let t=new Set([...this.loadAutoOpenedOnce(),...e]);localStorage.setItem(w,JSON.stringify([...t]))}catch{}}persistOpenSprinkles(){try{let e=[...this.openSprinkles.keys()].filter(e=>!this.attentionOnly.has(e));localStorage.setItem(_,JSON.stringify(e))}catch{}this.schedulePersistOpenSprinklesToUrl()}schedulePersistOpenSprinklesToUrl(){this.urlWriteScheduled||(this.urlWriteScheduled=!0,queueMicrotask(()=>{this.urlWriteScheduled=!1,b([...this.openSprinkles.keys()].filter(e=>!this.attentionOnly.has(e)))}))}async openNewAutoOpenSprinkles(){if(this.inflightRefresh)return this.inflightRefresh;if(!(Date.now()-this.lastRefreshAt<E))return this.inflightRefresh=this.runOpenNewAutoOpenSprinkles().finally(()=>{this.lastRefreshAt=Date.now(),this.inflightRefresh=null}),this.inflightRefresh}async runOpenNewAutoOpenSprinkles(){let e=new Set(this.availableSprinkles.keys());await this.refresh();let t=this.autoOpenBehavior===`attention`,n=this.loadAutoOpenedOnce(),r=new Set,i=!1;for(let a of this.availableSprinkles.values())if(!this.openSprinkles.has(a.name)&&!e.has(a.name))if(i=!0,a.autoOpen){if(n.has(a.name)){g.info(`Skipped one-shot auto-open for previously-consumed sprinkle`,{name:a.name});continue}try{await this.open(a.name,void 0,{attention:t}),r.add(a.name),g.info(`Auto-opened new sprinkle after install`,{name:a.name,attention:t})}catch{g.warn(`Failed to auto-open new sprinkle`,{name:a.name})}}else try{await this.open(a.name,void 0,{attention:!0}),g.info(`Surfaced newly-installed sprinkle in rail`,{name:a.name})}catch{g.warn(`Failed to surface newly-installed sprinkle`,{name:a.name})}i&&this.persistKnownSprinkles(new Set(this.availableSprinkles.keys())),r.size>0&&this.persistAutoOpenedOnce(r)}async refresh(){this.availableSprinkles=await c(this.fs),g.info(`Discovered sprinkles`,{count:this.availableSprinkles.size}),this.syncRegisteredIcons(),this.notifyChange()}syncRegisteredIcons(){if(!this.callbacks.registerSprinkle)return;let e=new Set;for(let t of this.availableSprinkles.values())this.inlineSprinkles.has(t.name)||e.add(t.name);for(let t of this.availableSprinkles.values())if(e.has(t.name)&&!this.registeredSprinkles.has(t.name))try{this.callbacks.registerSprinkle(t.name,t.title,{icon:t.icon}),this.registeredSprinkles.add(t.name)}catch(e){g.warn(`registerSprinkle callback threw`,{name:t.name,error:e instanceof Error?e.message:String(e)})}for(let t of[...this.registeredSprinkles])if(!e.has(t)){this.openSprinkles.has(t)&&this.close(t);try{this.callbacks.unregisterSprinkle?.(t)}catch(e){g.warn(`unregisterSprinkle callback threw`,{name:t,error:e instanceof Error?e.message:String(e)})}this.registeredSprinkles.delete(t)}}onChange(e){return this.changeListeners.add(e),()=>{this.changeListeners.delete(e)}}notifyChange(){this.changeNotifyScheduled||(this.changeNotifyScheduled=!0,queueMicrotask(()=>{this.changeNotifyScheduled=!1;for(let e of this.changeListeners)try{e()}catch(e){g.error(`SprinkleManager.onChange handler threw`,{error:e instanceof Error?e.message:String(e)})}}))}async open(e,t,n={}){if(this.openSprinkles.has(e)){g.info(`Sprinkle already open`,{name:e});return}let i=this.availableSprinkles.get(e);if(i||=(await this.refresh(),this.availableSprinkles.get(e)),!i)throw Error(`Sprinkle not found: ${e}`);let o=await this.fs.readFile(i.path,{encoding:`utf-8`});if(o==null)throw Error(`Failed to read sprinkle content: ${i.path} (file may be corrupted or missing)`);let s=typeof o==`string`?o:new TextDecoder(`utf-8`).decode(o),c=document.createElement(`div`);c.className=`sprinkle-panel`,c.style.cssText=`width: 100%; height: 100%; display: flex; flex-direction: column; overflow-y: auto;`,c.dataset.sprinkle=e,this.openSprinkles.set(e,{renderer:null,container:c}),n.attention?this.attentionOnly.add(e):this.attentionOnly.delete(e),this.callbacks.addSprinkle(e,i.title,c,t,{...n,icon:i.icon});let l=new a(c,this.bridge.createAPI(e));await l.render(s,e),this.openSprinkles.get(e).renderer=l,this.persistOpenSprinkles(),r(e),g.info(`Sprinkle opened`,{name:e,title:i.title}),this.notifyChange()}markActivated(e){this.attentionOnly.has(e)&&(this.attentionOnly.delete(e),this.persistOpenSprinkles(),g.info(`Sprinkle promoted from attention to user-opened`,{name:e}),this.notifyChange())}async activate(e,t){if(this.attentionOnly.has(e)){this.markActivated(e);return}if(!this.openSprinkles.has(e))try{await this.open(e,t)}catch(t){g.warn(`Failed to open sprinkle from rail-icon click`,{name:e,error:t instanceof Error?t.message:String(t)})}}close(e){let t=this.openSprinkles.get(e);t&&(t.renderer?.dispose(),t.container.remove(),this.bridge.removeSprinkle(e),this.openSprinkles.delete(e),this.attentionOnly.delete(e),this.callbacks.closeSprinkleContent?this.callbacks.closeSprinkleContent(e):this.callbacks.removeSprinkle(e),this.persistOpenSprinkles(),g.info(`Sprinkle closed`,{name:e}),this.notifyChange())}minimize(e){this.openSprinkles.has(e)&&(this.callbacks.minimizeSprinkle(e),g.info(`Sprinkle minimized`,{name:e}))}available(){return Array.from(this.availableSprinkles.values())}opened(){return Array.from(this.openSprinkles.keys())}setupWatcher(e){let t=null,n=new Map,r=e=>{let r=!1;for(let t of e){let e=this.findOpenSprinkleByPath(t.path);if(e){let t=n.get(e);t&&clearTimeout(t),n.set(e,setTimeout(()=>{n.delete(e),this.reload(e).catch(t=>{g.warn(`Sprinkle reload on watcher event failed`,{name:e,error:t instanceof Error?t.message:String(t)})})},300))}else r=!0}r&&!t&&(t=setTimeout(()=>{t=null,this.openNewAutoOpenSprinkles().catch(e=>{g.warn(`Sprinkle refresh on watcher event failed`,{error:e instanceof Error?e.message:String(e)})})},150))},i=T.map(t=>e.watch(t,e=>e.endsWith(`.shtml`),r));this.watcherUnsub=()=>{for(let e of i)e();t&&=(clearTimeout(t),null);for(let e of n.values())clearTimeout(e);n.clear()}}findOpenSprinkleByPath(e){for(let[t]of this.openSprinkles){let n=this.availableSprinkles.get(t);if(n&&n.path===e)return t}return null}dispose(){this.watcherUnsub?.()}sendToSprinkle(e,t){let n=this.openSprinkles.get(e);if(!n){g.warn(`Cannot send to closed sprinkle`,{name:e});return}if(this.bridge.pushUpdate(e,t),n.renderer.pushUpdate(t),this.onSendToSprinkle)try{this.onSendToSprinkle(e,t)}catch(t){g.error(`onSendToSprinkle hook threw`,{name:e,error:t instanceof Error?t.message:String(t)})}}};export{D as SprinkleManager,S as pruneKnownSprinkleNames,C as readKnownSprinkleNames};
1
+ import{t as e}from"./logger-DDBAeTLF.js";import{n as t,t as n}from"./panel-rpc-DqT2FG7c.js";import{s as r}from"./main-Cmvs-4b3.js";import{t as i}from"./sprinkle-bridge-BB1Ge79t.js";import{t as a}from"./sprinkle-renderer-GiRRbdBx.js";var o=[`/shared/sprinkles`],s=new Set([`welcome`,`connect-llm`]);async function c(e){let t=new Map;for(let n of o)await e.exists(n)&&await l(e,n,t);return await l(e,`/`,t),t}async function l(e,t,n){for await(let r of e.walk(t)){if(!r.endsWith(`.shtml`))continue;let t=u(r);if(!s.has(t)&&!n.has(t)){let i;try{i=await e.readFile(r,{encoding:`utf-8`})??``}catch{i=``}n.set(t,{name:t,path:r,title:d(i,t),autoOpen:f(i),icon:p(i)})}}}function u(e){let t=e.split(`/`).pop()??e;return t.endsWith(`.shtml`)?t.slice(0,-6):t}function d(e,t){let n=e.match(/data-sprinkle-title=["']([^"']+)["']/);if(n)return n[1];let r=e.match(/<title>([^<]+)<\/title>/i);return r?r[1].trim():t}function f(e){return/data-sprinkle-autoopen\b/.test(e)}function p(e){let t=/<link\b/gi,n;for(;(n=t.exec(e))!==null;){let t=n.index+n[0].length,r=m(e,t);if(r<0)continue;let i=e.slice(t,r);if(!/\brel\s*=\s*("|')\s*(?:shortcut\s+)?icon\s*\1/i.test(i))continue;let a=h(i,`href`);if(a!==void 0)return a.trim()}let r=h(e,`data-sprinkle-icon`);if(r!==void 0)return r.trim()}function m(e,t){let n=!1,r=!1;for(let i=t;i<e.length;i++){let t=e.charCodeAt(i);if(n)t===34&&(n=!1);else if(r)t===39&&(r=!1);else if(t===34)n=!0;else if(t===39)r=!0;else if(t===62)return i}return-1}function h(e,t){let n=RegExp(`\\b${t}\\s*=\\s*(?:"([^"]*)"|'([^']*)')`,`i`),r=e.match(n);if(r)return r[1]??r[2]??void 0}var g=e(`sprinkle-manager`),_=`slicc-open-sprinkles`,v=`sprinkles`;function y(){try{if(typeof window>`u`||!window.location)return null;let e=new URLSearchParams(window.location.search).get(v);return e===null?null:e===``?[]:e.split(`,`).map(e=>e.trim()).filter(e=>e.length>0)}catch{return null}}function b(e){try{if(typeof window>`u`||!window.location||typeof history>`u`||typeof history.replaceState!=`function`)return;let t=new URL(window.location.href);e.length===0?t.searchParams.delete(v):t.searchParams.set(v,e.join(`,`));let n=t.pathname+t.search+t.hash;history.replaceState(history.state??null,``,n)}catch{}}var x=`slicc-known-sprinkles`;function S(e){try{let t=new Set(e),n=C().filter(e=>t.has(e));localStorage.setItem(x,JSON.stringify(n))}catch{}}function C(){try{let e=localStorage.getItem(x);if(!e)return[];let t=JSON.parse(e);return Array.isArray(t)?t.filter(e=>typeof e==`string`):[]}catch{return[]}}var w=`slicc-autoopened-once`,T=[`/workspace`,`/shared`,`/scoops`],E=250,D=class{fs;bridge;callbacks;availableSprinkles=new Map;watcherUnsub;openSprinkles=new Map;attentionOnly=new Set;inflightRefresh=null;lastRefreshAt=0;autoOpenBehavior;onSendToSprinkle;onSprinkleReloaded;registeredSprinkles=new Set;inlineSprinkles;changeListeners=new Set;changeNotifyScheduled=!1;urlWriteScheduled=!1;constructor(e,r,a,o,s={}){this.fs=e;let c=async()=>{let e=`image/png`,r=t(),i=n();if(!r&&!i)throw Error(`Screen capture unavailable in this environment`);if(r&&!navigator.mediaDevices?.getDisplayMedia)throw Error(`Screen capture not supported in this browser`);let a,o,s;if(r){let t=await navigator.mediaDevices.getDisplayMedia({video:!0,audio:!1});try{let n=document.createElement(`video`);n.srcObject=t,n.muted=!0,n.playsInline=!0,await new Promise((e,t)=>{n.onloadedmetadata=()=>n.play().then(()=>e()).catch(t),n.onerror=()=>t(Error(`Failed to load video stream`))}),await new Promise(e=>setTimeout(e,100)),o=n.videoWidth,s=n.videoHeight;let r=document.createElement(`canvas`);r.width=o,r.height=s;let i=r.getContext(`2d`);if(!i)throw Error(`Failed to get canvas context`);i.drawImage(n,0,0,o,s),a=await(await new Promise((t,n)=>{r.toBlob(e=>e?t(e):n(Error(`Failed to create image blob`)),e,1)})).arrayBuffer()}finally{for(let e of t.getTracks())e.stop()}}else{let t=await i.call(`screencapture`,{mimeType:e,quality:1},{timeoutMs:5*6e4});a=t.bytes,o=t.width,s=t.height}let c=new Uint8Array(a),l=[],u=8192;for(let e=0;e<c.length;e+=u)l.push(String.fromCharCode(...c.subarray(e,e+u)));return{base64:btoa(l.join(``)),width:o,height:s,mimeType:e}};this.bridge=new i(e,r,e=>this.close(e),e=>this.minimize(e),o,s.onAttachImage??(()=>{}),c,s.execHandler,(e,t,n)=>{this.openSprinkles.get(e)?.renderer.pushDeviceEvent(t,n)}),this.callbacks=a,this.autoOpenBehavior=s.autoOpenBehavior??`activate`,this.onSendToSprinkle=s.onSendToSprinkle,this.onSprinkleReloaded=s.onSprinkleReloaded,this.inlineSprinkles=s.inlineSprinkles??new Set}setSendToSprinkleHook(e){this.onSendToSprinkle&&!e&&g.error(`SprinkleManager broadcast hook detached`),this.onSendToSprinkle=e}setReloadHook(e){this.onSprinkleReloaded=e}async reload(e){let t=this.openSprinkles.get(e);if(!t){g.info(`Cannot reload closed sprinkle`,{name:e});return}let n=this.availableSprinkles.get(e);if(n||=(await this.refresh(),this.availableSprinkles.get(e)),!n){g.warn(`Sprinkle not found during reload`,{name:e});return}let r=await this.fs.readFile(n.path,{encoding:`utf-8`});if(r==null){g.warn(`Failed to read sprinkle content during reload`,{name:e});return}let i=typeof r==`string`?r:new TextDecoder(`utf-8`).decode(r);t.renderer?.dispose(),this.bridge.removeSprinkle(e);let o=this.bridge.createAPI(e),s=new a(t.container,o);if(await s.render(i,e),!this.openSprinkles.has(e)){s.dispose();return}if(t.renderer=s,g.info(`Sprinkle reloaded`,{name:e}),this.notifyChange(),this.onSprinkleReloaded)try{this.onSprinkleReloaded(e)}catch(t){g.error(`onSprinkleReloaded hook threw`,{name:e,error:t instanceof Error?t.message:String(t)})}}async restoreOpenSprinkles(){try{let e=y();if(e!==null){await this.reopenInBackground(e);return}let t=localStorage.getItem(_);t?await this.restoreFromLegacyStorage(t):await this.autoOpenFirstRun()}catch{}await this.surfaceUnseenSprinkles()}async reopenInBackground(e){for(let t of e)try{await this.open(t,void 0,{background:!0})}catch{g.warn(`Failed to restore sprinkle`,{name:t})}}async restoreFromLegacyStorage(e){try{await this.reopenInBackground(JSON.parse(e))}finally{try{localStorage.removeItem(_)}catch{}}}async autoOpenFirstRun(){let e=this.autoOpenBehavior===`attention`,t=this.loadAutoOpenedOnce(),n=new Set;for(let r of this.availableSprinkles.values())if(!(!r.autoOpen||t.has(r.name)))try{await this.open(r.name,void 0,{attention:e}),n.add(r.name)}catch{g.warn(`Failed to auto-open sprinkle`,{name:r.name})}n.size>0&&this.persistAutoOpenedOnce(n)}async surfaceUnseenSprinkles(){let e=this.loadKnownSprinkles(),t=this.loadAutoOpenedOnce(),n=this.autoOpenBehavior===`attention`,r=new Set;for(let i of this.availableSprinkles.values())if(!e.has(i.name)&&!this.openSprinkles.has(i.name)&&!(i.autoOpen&&t.has(i.name)))try{await this.open(i.name,void 0,{attention:i.autoOpen?n:!0}),i.autoOpen&&r.add(i.name),g.info(`Surfaced previously-unseen sprinkle`,{name:i.name})}catch{g.warn(`Failed to surface unseen sprinkle`,{name:i.name})}this.persistKnownSprinkles(new Set(this.availableSprinkles.keys())),r.size>0&&this.persistAutoOpenedOnce(r)}loadKnownSprinkles(){return new Set(C())}persistKnownSprinkles(e){try{let t=new Set([...this.loadKnownSprinkles(),...e]);localStorage.setItem(x,JSON.stringify([...t]))}catch{}}loadAutoOpenedOnce(){try{let e=localStorage.getItem(w);if(!e)return new Set;let t=JSON.parse(e);return Array.isArray(t)?new Set(t.filter(e=>typeof e==`string`)):new Set}catch{return new Set}}persistAutoOpenedOnce(e){try{let t=new Set([...this.loadAutoOpenedOnce(),...e]);localStorage.setItem(w,JSON.stringify([...t]))}catch{}}persistOpenSprinkles(){try{let e=[...this.openSprinkles.keys()].filter(e=>!this.attentionOnly.has(e));localStorage.setItem(_,JSON.stringify(e))}catch{}this.schedulePersistOpenSprinklesToUrl()}schedulePersistOpenSprinklesToUrl(){this.urlWriteScheduled||(this.urlWriteScheduled=!0,queueMicrotask(()=>{this.urlWriteScheduled=!1,b([...this.openSprinkles.keys()].filter(e=>!this.attentionOnly.has(e)))}))}async openNewAutoOpenSprinkles(){if(this.inflightRefresh)return this.inflightRefresh;if(!(Date.now()-this.lastRefreshAt<E))return this.inflightRefresh=this.runOpenNewAutoOpenSprinkles().finally(()=>{this.lastRefreshAt=Date.now(),this.inflightRefresh=null}),this.inflightRefresh}async runOpenNewAutoOpenSprinkles(){let e=new Set(this.availableSprinkles.keys());await this.refresh();let t=this.autoOpenBehavior===`attention`,n=this.loadAutoOpenedOnce(),r=new Set,i=!1;for(let a of this.availableSprinkles.values())if(!this.openSprinkles.has(a.name)&&!e.has(a.name))if(i=!0,a.autoOpen){if(n.has(a.name)){g.info(`Skipped one-shot auto-open for previously-consumed sprinkle`,{name:a.name});continue}try{await this.open(a.name,void 0,{attention:t}),r.add(a.name),g.info(`Auto-opened new sprinkle after install`,{name:a.name,attention:t})}catch{g.warn(`Failed to auto-open new sprinkle`,{name:a.name})}}else try{await this.open(a.name,void 0,{attention:!0}),g.info(`Surfaced newly-installed sprinkle in rail`,{name:a.name})}catch{g.warn(`Failed to surface newly-installed sprinkle`,{name:a.name})}i&&this.persistKnownSprinkles(new Set(this.availableSprinkles.keys())),r.size>0&&this.persistAutoOpenedOnce(r)}async refresh(){this.availableSprinkles=await c(this.fs),g.info(`Discovered sprinkles`,{count:this.availableSprinkles.size}),this.syncRegisteredIcons(),this.notifyChange()}syncRegisteredIcons(){if(!this.callbacks.registerSprinkle)return;let e=new Set;for(let t of this.availableSprinkles.values())this.inlineSprinkles.has(t.name)||e.add(t.name);for(let t of this.availableSprinkles.values())if(e.has(t.name)&&!this.registeredSprinkles.has(t.name))try{this.callbacks.registerSprinkle(t.name,t.title,{icon:t.icon}),this.registeredSprinkles.add(t.name)}catch(e){g.warn(`registerSprinkle callback threw`,{name:t.name,error:e instanceof Error?e.message:String(e)})}for(let t of[...this.registeredSprinkles])if(!e.has(t)){this.openSprinkles.has(t)&&this.close(t);try{this.callbacks.unregisterSprinkle?.(t)}catch(e){g.warn(`unregisterSprinkle callback threw`,{name:t,error:e instanceof Error?e.message:String(e)})}this.registeredSprinkles.delete(t)}}onChange(e){return this.changeListeners.add(e),()=>{this.changeListeners.delete(e)}}notifyChange(){this.changeNotifyScheduled||(this.changeNotifyScheduled=!0,queueMicrotask(()=>{this.changeNotifyScheduled=!1;for(let e of this.changeListeners)try{e()}catch(e){g.error(`SprinkleManager.onChange handler threw`,{error:e instanceof Error?e.message:String(e)})}}))}async open(e,t,n={}){if(this.openSprinkles.has(e)){g.info(`Sprinkle already open`,{name:e});return}let i=this.availableSprinkles.get(e);if(i||=(await this.refresh(),this.availableSprinkles.get(e)),!i)throw Error(`Sprinkle not found: ${e}`);let o=await this.fs.readFile(i.path,{encoding:`utf-8`});if(o==null)throw Error(`Failed to read sprinkle content: ${i.path} (file may be corrupted or missing)`);let s=typeof o==`string`?o:new TextDecoder(`utf-8`).decode(o),c=document.createElement(`div`);c.className=`sprinkle-panel`,c.style.cssText=`width: 100%; height: 100%; display: flex; flex-direction: column; overflow-y: auto;`,c.dataset.sprinkle=e,this.openSprinkles.set(e,{renderer:null,container:c}),n.attention?this.attentionOnly.add(e):this.attentionOnly.delete(e),this.callbacks.addSprinkle(e,i.title,c,t,{...n,icon:i.icon});let l=new a(c,this.bridge.createAPI(e));await l.render(s,e),this.openSprinkles.get(e).renderer=l,this.persistOpenSprinkles(),r(e),g.info(`Sprinkle opened`,{name:e,title:i.title}),this.notifyChange()}markActivated(e){this.attentionOnly.has(e)&&(this.attentionOnly.delete(e),this.persistOpenSprinkles(),g.info(`Sprinkle promoted from attention to user-opened`,{name:e}),this.notifyChange())}async activate(e,t){if(this.attentionOnly.has(e)){this.markActivated(e);return}if(!this.openSprinkles.has(e))try{await this.open(e,t)}catch(t){g.warn(`Failed to open sprinkle from rail-icon click`,{name:e,error:t instanceof Error?t.message:String(t)})}}close(e){let t=this.openSprinkles.get(e);t&&(t.renderer?.dispose(),t.container.remove(),this.bridge.removeSprinkle(e),this.openSprinkles.delete(e),this.attentionOnly.delete(e),this.callbacks.closeSprinkleContent?this.callbacks.closeSprinkleContent(e):this.callbacks.removeSprinkle(e),this.persistOpenSprinkles(),g.info(`Sprinkle closed`,{name:e}),this.notifyChange())}minimize(e){this.openSprinkles.has(e)&&(this.callbacks.minimizeSprinkle(e),g.info(`Sprinkle minimized`,{name:e}))}available(){return Array.from(this.availableSprinkles.values())}opened(){return Array.from(this.openSprinkles.keys())}setupWatcher(e){let t=null,n=new Map,r=e=>{let r=!1;for(let t of e){let e=this.findOpenSprinkleByPath(t.path);if(e){let t=n.get(e);t&&clearTimeout(t),n.set(e,setTimeout(()=>{n.delete(e),this.reload(e).catch(t=>{g.warn(`Sprinkle reload on watcher event failed`,{name:e,error:t instanceof Error?t.message:String(t)})})},300))}else r=!0}r&&!t&&(t=setTimeout(()=>{t=null,this.openNewAutoOpenSprinkles().catch(e=>{g.warn(`Sprinkle refresh on watcher event failed`,{error:e instanceof Error?e.message:String(e)})})},150))},i=T.map(t=>e.watch(t,e=>e.endsWith(`.shtml`),r));this.watcherUnsub=()=>{for(let e of i)e();t&&=(clearTimeout(t),null);for(let e of n.values())clearTimeout(e);n.clear()}}findOpenSprinkleByPath(e){for(let[t]of this.openSprinkles){let n=this.availableSprinkles.get(t);if(n&&n.path===e)return t}return null}dispose(){this.watcherUnsub?.()}sendToSprinkle(e,t){let n=this.openSprinkles.get(e);if(!n){g.warn(`Cannot send to closed sprinkle`,{name:e});return}if(this.bridge.pushUpdate(e,t),n.renderer.pushUpdate(t),this.onSendToSprinkle)try{this.onSendToSprinkle(e,t)}catch(t){g.error(`onSendToSprinkle hook threw`,{name:e,error:t instanceof Error?t.message:String(t)})}}};export{D as SprinkleManager,S as pruneKnownSprinkleNames,C as readKnownSprinkleNames};
@@ -1 +1 @@
1
- import{n as e}from"./chunk-aKtaBQYM.js";import{t}from"./logger-LESFN7Hj.js";import{t as n}from"./types-idfTVsM8.js";import{h as r}from"./kernel-worker-DfBOBrG4.js";var i=e({MCP_STORE_PATH:()=>o,deleteServer:()=>_,getServer:()=>h,listServers:()=>v,readMcpAuthEntries:()=>b,readMcpAuthEntry:()=>y,readServersFile:()=>p,setServer:()=>g,writeServersFile:()=>m});const a=t(`mcp-store`),o=`/workspace/.mcp/servers.json`;let s=null,c=null;async function l(){return s||=await import(`./fs-GCp_miGo.js`).then(e=>e.t),s}async function u(e){if(e)return e;if(c&&c.dbName===`slicc-fs-global`)return c.instance;let{VirtualFS:t}=await l(),n=await t.create({dbName:r});return c={instance:n,dbName:r},n}function d(){return{version:1,servers:{}}}function f(e){if(!e||typeof e!=`object`)return d();let t=e,n=typeof t.version==`number`?t.version:1,r={};if(t.servers&&typeof t.servers==`object`)for(let[e,n]of Object.entries(t.servers)){if(!n||typeof n!=`object`)continue;let t=n;typeof t.url==`string`&&(r[e]=t)}return{version:n,servers:r}}async function p(e){try{let t=await(await u(e)).readFile(o,{encoding:`utf-8`});try{return f(JSON.parse(t))}catch(e){return a.warn(`servers.json is not valid JSON; treating as empty`,{error:e instanceof Error?e.message:String(e)}),d()}}catch(e){return e instanceof n&&e.code===`ENOENT`||a.warn(`Failed to read servers.json`,{error:e instanceof Error?e.message:String(e)}),d()}}async function m(e,t){let n=await u(t);await n.mkdir(`/workspace/.mcp`,{recursive:!0});let r={version:e.version||1,servers:e.servers??{}};await n.writeFile(o,JSON.stringify(r,null,2))}async function h(e,t){return(await p(t)).servers[e]??null}async function g(e,t,n){let r=await p(n),i={...r.servers[e],...t};return r.servers[e]=i,await m(r,n),i}async function _(e,t){let n=await p(t);return e in n.servers?(delete n.servers[e],await m(n,t),!0):!1}async function v(e){return(await p(e)).servers}async function y(e){let t=await h(e);return!t?.url||!t.auth?.clientId?null:{name:e,serverUrl:t.url,auth:t.auth}}async function b(){let e=await v(),t=[];for(let[n,r]of Object.entries(e))!r?.url||!r.auth?.clientId||t.push({name:n,serverUrl:r.url,auth:r.auth});return t}export{y as n,i as r,b as t};
1
+ import{n as e}from"./chunk-aKtaBQYM.js";import{t}from"./logger-LESFN7Hj.js";import{t as n}from"./types-idfTVsM8.js";import{h as r}from"./kernel-worker-DRvGOqpl.js";var i=e({MCP_STORE_PATH:()=>o,deleteServer:()=>_,getServer:()=>h,listServers:()=>v,readMcpAuthEntries:()=>b,readMcpAuthEntry:()=>y,readServersFile:()=>p,setServer:()=>g,writeServersFile:()=>m});const a=t(`mcp-store`),o=`/workspace/.mcp/servers.json`;let s=null,c=null;async function l(){return s||=await import(`./fs-DbLSBgrZ.js`).then(e=>e.t),s}async function u(e){if(e)return e;if(c&&c.dbName===`slicc-fs-global`)return c.instance;let{VirtualFS:t}=await l(),n=await t.create({dbName:r});return c={instance:n,dbName:r},n}function d(){return{version:1,servers:{}}}function f(e){if(!e||typeof e!=`object`)return d();let t=e,n=typeof t.version==`number`?t.version:1,r={};if(t.servers&&typeof t.servers==`object`)for(let[e,n]of Object.entries(t.servers)){if(!n||typeof n!=`object`)continue;let t=n;typeof t.url==`string`&&(r[e]=t)}return{version:n,servers:r}}async function p(e){try{let t=await(await u(e)).readFile(o,{encoding:`utf-8`});try{return f(JSON.parse(t))}catch(e){return a.warn(`servers.json is not valid JSON; treating as empty`,{error:e instanceof Error?e.message:String(e)}),d()}}catch(e){return e instanceof n&&e.code===`ENOENT`||a.warn(`Failed to read servers.json`,{error:e instanceof Error?e.message:String(e)}),d()}}async function m(e,t){let n=await u(t);await n.mkdir(`/workspace/.mcp`,{recursive:!0});let r={version:e.version||1,servers:e.servers??{}};await n.writeFile(o,JSON.stringify(r,null,2))}async function h(e,t){return(await p(t)).servers[e]??null}async function g(e,t,n){let r=await p(n),i={...r.servers[e],...t};return r.servers[e]=i,await m(r,n),i}async function _(e,t){let n=await p(t);return e in n.servers?(delete n.servers[e],await m(n,t),!0):!1}async function v(e){return(await p(e)).servers}async function y(e){let t=await h(e);return!t?.url||!t.auth?.clientId?null:{name:e,serverUrl:t.url,auth:t.auth}}async function b(){let e=await v(),t=[];for(let[n,r]of Object.entries(e))!r?.url||!r.auth?.clientId||t.push({name:n,serverUrl:r.url,auth:r.auth});return t}export{y as n,i as r,b as t};
@@ -1,5 +1,5 @@
1
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{t as e}from"./preload-helper-zJ_50EbN.js";import{t}from"./logger-DDBAeTLF.js";import{a as n,n as r,t as i}from"./proxied-fetch-B5vr_AP8.js";import{t as a}from"./quick-llm-AORy1zgk.js";import{installPanelSudoResponder as o,n as s}from"./panel-responder-BKgfV-nl.js";var c=t(`sudo-suggest`),l=[`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
+ import{t as e}from"./preload-helper-zJ_50EbN.js";import{t}from"./logger-DDBAeTLF.js";import{a as n,n as r,t as i}from"./proxied-fetch-B5vr_AP8.js";import{t as a}from"./quick-llm-BpD0afu9.js";import{installPanelSudoResponder as o,n as s}from"./panel-responder-BKgfV-nl.js";var c=t(`sudo-suggest`),l=[`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(`
3
3
  `),u=[`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(`
4
4
  `);async function d(e,t){if(e.suggestedPattern&&e.suggestedPattern.trim().length>0)return e.suggestedPattern.trim();let n=e.detail.trim(),r=e.kind===`command`?l:u,i=null;try{i=await a({prompt:n,system:r,maxTokens:40,temperature:0,signal:t})}catch(e){c.debug(`suggestPattern: quickLabel threw`,{error:e instanceof Error?e.message:String(e)}),i=null}return f(i)||n}function f(e){if(!e)return null;let t=(e.split(`
5
5
  `,1)[0]?.trim()??``).replace(/^`+/,``).replace(/`+$/,``).replace(/^["']/,``).replace(/["']$/,``).trim();return t.length===0?null:t}var p=t(`sudo-ext`);function m(e={}){let t=e.suggest??d;return{async requestApproval(e){let n;try{n=await t(e)}catch{n=e.detail}return h({...e,suggestedPattern:n})}}}function h(e){return new Promise(t=>{let n=globalThis.chrome?.runtime;if(!n||typeof n.sendMessage!=`function`){p.warn(`chrome.runtime.sendMessage unavailable — denying`),t({decision:`deny`});return}let r=r=>{let i=n.lastError;if(i){p.warn(`sudo relay lastError — denying`,{error:i.message}),t({decision:`deny`});return}if(!r||typeof r!=`object`){p.warn(`sudo relay empty response — denying`),t({decision:`deny`});return}let a=r;if(!a.ok||!a.decision){p.warn(`sudo relay error response — denying`,{error:a.error}),t({decision:`deny`});return}t(g(a.decision,e.suggestedPattern??e.detail))};try{n.sendMessage({source:`offscreen`,payload:{type:s,request:e}},r)}catch(e){p.warn(`sudo relay threw — denying`,{error:e instanceof Error?e.message:String(e)}),t({decision:`deny`})}})}function g(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 _=t(`sudo-http`);function v(e={}){let t=e.fetchImpl??globalThis.fetch.bind(globalThis),r=e.path??`/api/sudo-approve`,a=e.suggest??d;return{async requestApproval(e){let o;try{o=await a(e)}catch{o=e.detail}try{let a=await t(n(r),{method:`POST`,headers:i({"Content-Type":`application/json`}),body:JSON.stringify({kind:e.kind,detail:e.detail,suggestedPattern:o})});return a.ok?y(await a.json(),o):(_.warn(`sudo endpoint returned non-OK status — denying`,{status:a.status}),{decision:`deny`})}catch(e){return _.warn(`sudo endpoint request failed — denying`,{error:e instanceof Error?e.message:String(e)}),{decision:`deny`}}}}}function y(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 b=t(`sudo-panel-rpc`),x=6e5;function S(t={}){let n=t.suggest??d,r=t.timeoutMs??x,i=t.getClient??(async()=>{let{getPanelRpcClient:t}=await e(async()=>{let{getPanelRpcClient:e}=await import(`./panel-rpc-DqT2FG7c.js`).then(e=>e.i);return{getPanelRpcClient:e}},__vite__mapDeps([0,1]));return t()});return{async requestApproval(e){let t;try{t=await n(e)}catch{t=e.detail}let a={...e,suggestedPattern:t},o;try{o=await i()}catch(e){return b.warn(`panel-RPC client lookup threw — denying`,{error:e instanceof Error?e.message:String(e)}),{decision:`deny`}}if(!o)return b.warn(`panel-RPC client unavailable in worker realm — denying`),{decision:`deny`};try{let{decision:e}=await o.call(`sudo-request`,{request:a},{timeoutMs:r});return C(e,t)}catch(e){return b.warn(`sudo panel-RPC relay failed — denying`,{error:e instanceof Error?e.message:String(e)}),{decision:`deny`}}}}}function C(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 w=t(`sudo`),T=`__slicc_sudo`;function E(){return typeof chrome<`u`&&!!chrome?.runtime?.id}function D(){return typeof chrome>`u`&&r()!==null}function O(){return E()?m():D()?S():v()}function k(e=O()){let t={requestApproval:t=>e.requestApproval(t)};return globalThis[T]=t,w.info(`sudo broker test hook published on globalThis.__slicc_sudo`),t}export{o as installPanelSudoResponder,k as installSudoTestHook};
@@ -1 +1 @@
1
- import{o as e,t}from"./proxied-fetch-I4cndszg.js";import{f as n,p as r}from"./kernel-worker-DfBOBrG4.js";function i(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}}}}const a=Symbol.for(`slicc.transformers-env.fetch-wrapped`),o=()=>typeof chrome<`u`&&!!chrome?.runtime?.id,s=`/workspace/node_modules/onnxruntime-web/dist/`,c=`/workspace/models/`;function l(e){return typeof e==`string`?e:e instanceof URL?e.toString():e.url}function u(e){let t=l(e);return t.startsWith(`http://`)||t.startsWith(`https://`)}function d(){return globalThis.location?.origin??null}function f(e){let t=d();if(!t)return!1;try{return new URL(l(e)).origin===t}catch{return!1}}async function p(n,r){let i=l(n),a={};r?.headers&&new Headers(r.headers).forEach((e,t)=>{a[t]=e});let o=t({...a,"X-Target-URL":i}),s=(r?.method??`GET`).toUpperCase(),c={method:s,headers:o,cache:`no-store`};return r?.body&&s!==`GET`&&s!==`HEAD`&&(c.body=r.body),fetch(e(`/api/fetch-proxy`),c)}const m=[`ort-wasm-simd-threaded.jsep.mjs`,`https://${["cdn","jsdelivr","net"].join(".")}/npm/onnxruntime-web@1.26.0-dev.20260416-b7804b056c/dist/ort-wasm-simd-threaded.jsep.wasm`,`ort-wasm-simd-threaded.mjs`,`https://${["cdn","jsdelivr","net"].join(".")}/npm/onnxruntime-web@1.26.0-dev.20260416-b7804b056c/dist/ort.wasm`,`ort-wasm-simd-threaded.asyncify.mjs`,`https://${["cdn","jsdelivr","net"].join(".")}/npm/onnxruntime-web@1.26.0-dev.20260416-b7804b056c/dist/ort-wasm-simd-threaded.asyncify.wasm`],h=Symbol.for(`slicc.transformers-env.vfs-enoent`);function g(e){if(typeof BroadcastChannel>`u`)return Promise.reject(Error(`Cannot read VFS path ${e}: BroadcastChannel unavailable in this realm`));let t=new BroadcastChannel(`preview-vfs`),n=`tfx-${Date.now()}-${Math.random().toString(36).slice(2)}`;return new Promise((r,i)=>{let a=e=>{t.removeEventListener(`message`,s),t.close(),e()},o=setTimeout(()=>{let t=Error(`ENOENT: ${e} (preview-vfs responder timed out)`);t[h]=!0,a(()=>i(t))},3e4),s=t=>{let s=t.data;if(s?.type!==`preview-vfs-response`||s.id!==n)return;if(clearTimeout(o),typeof s.error==`string`){let e=Error(s.error);s.error.includes(`ENOENT`)&&(e[h]=!0),a(()=>i(e));return}let c=s.content;if(c instanceof Uint8Array){a(()=>r(c));return}if(typeof c==`string`){a(()=>r(new TextEncoder().encode(c)));return}a(()=>i(Error(`Unexpected empty preview-vfs response for ${e}`)))};t.addEventListener(`message`,s),t.postMessage({type:`preview-vfs-read`,id:n,path:e,asText:!1})})}function _(e){return!!e?.[h]}function v(e){let t=new ArrayBuffer(e.byteLength),n=new Uint8Array(t);return n.set(e),n}function y(e,t){return!t||!e.startsWith(t)?null:`${c}${e.slice(t.length).split(`?`)[0].split(`#`)[0]}`}async function b(e,t){let r;try{r=await g(e)}catch(t){if(_(t))return new Response(`Not found: ${e}`,{status:404,headers:{"Content-Type":`text/plain`}});throw t}let i=n(e);return(t?.headers?new Headers(t.headers).get(`range`):null)===`bytes=0-0`?new Response(null,{status:206,headers:{"Content-Type":i,"Content-Length":String(r.byteLength),"Content-Range":`bytes 0-0/${r.byteLength}`}}):new Response(v(r),{status:200,headers:{"Content-Type":i,"Content-Length":String(r.byteLength)}})}let x=null;async function S(){if(typeof URL>`u`||typeof URL.createObjectURL!=`function`)throw Error(`onnxruntime-web blob URLs require URL.createObjectURL (browser realm only)`);let e={};if(await Promise.all(m.map(async t=>{try{let r=await g(`${s}${t}`),i=new Blob([v(r)],{type:n(t)});e[t]=URL.createObjectURL(i)}catch(e){if(!_(e))throw e}})),Object.keys(e).length===0)throw Error("onnxruntime-web is not installed — run `ipk add onnxruntime-web` to stage the wasm runtime in /workspace/node_modules/.");return e}function C(){return x||=S(),x}function w(e){let t=e.backends?.onnx?.wasm;if(t&&(t.wasmPaths=r(s)),e.allowRemoteModels=!1,e.allowLocalModels=!0,e.localModelPath=r(c),o())return;e.allowRemoteModels=!0,e.remoteHost=e.localModelPath,e.remotePathTemplate=`{model}/`,t&&C().then(e=>{t.wasmPaths=e},()=>{});let n=e.fetch;if(n?.[a])return;let i=n,d=e.localModelPath,m=async(e,t)=>{let n=y(l(e),d);return n===null?!u(e)||f(e)?i?i(e,t):fetch(e,t):p(e,t):b(n,t)};m[a]=!0,e.fetch=m}async function T(e){let t=`weights for ${e} are missing — run \`hf download ${e}\` to fetch them into /workspace/models/.`;try{await g(`${c}${e}/config.json`)}catch(e){if(_(e))throw Error(t);let n=e instanceof Error?e.message:String(e);throw Error(`${t} (probe failed: ${n})`)}}export{C as a,w as i,m as n,i as o,T as r,s as t};
1
+ import{o as e,t}from"./proxied-fetch-I4cndszg.js";import{f as n,p as r}from"./kernel-worker-DRvGOqpl.js";function i(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}}}}const a=Symbol.for(`slicc.transformers-env.fetch-wrapped`),o=()=>typeof chrome<`u`&&!!chrome?.runtime?.id,s=`/workspace/node_modules/onnxruntime-web/dist/`,c=`/workspace/models/`;function l(e){return typeof e==`string`?e:e instanceof URL?e.toString():e.url}function u(e){let t=l(e);return t.startsWith(`http://`)||t.startsWith(`https://`)}function d(){return globalThis.location?.origin??null}function f(e){let t=d();if(!t)return!1;try{return new URL(l(e)).origin===t}catch{return!1}}async function p(n,r){let i=l(n),a={};r?.headers&&new Headers(r.headers).forEach((e,t)=>{a[t]=e});let o=t({...a,"X-Target-URL":i}),s=(r?.method??`GET`).toUpperCase(),c={method:s,headers:o,cache:`no-store`};return r?.body&&s!==`GET`&&s!==`HEAD`&&(c.body=r.body),fetch(e(`/api/fetch-proxy`),c)}const m=[`ort-wasm-simd-threaded.jsep.mjs`,`https://${["cdn","jsdelivr","net"].join(".")}/npm/onnxruntime-web@1.26.0-dev.20260416-b7804b056c/dist/ort-wasm-simd-threaded.jsep.wasm`,`ort-wasm-simd-threaded.mjs`,`https://${["cdn","jsdelivr","net"].join(".")}/npm/onnxruntime-web@1.26.0-dev.20260416-b7804b056c/dist/ort.wasm`,`ort-wasm-simd-threaded.asyncify.mjs`,`https://${["cdn","jsdelivr","net"].join(".")}/npm/onnxruntime-web@1.26.0-dev.20260416-b7804b056c/dist/ort-wasm-simd-threaded.asyncify.wasm`],h=Symbol.for(`slicc.transformers-env.vfs-enoent`);function g(e){if(typeof BroadcastChannel>`u`)return Promise.reject(Error(`Cannot read VFS path ${e}: BroadcastChannel unavailable in this realm`));let t=new BroadcastChannel(`preview-vfs`),n=`tfx-${Date.now()}-${Math.random().toString(36).slice(2)}`;return new Promise((r,i)=>{let a=e=>{t.removeEventListener(`message`,s),t.close(),e()},o=setTimeout(()=>{let t=Error(`ENOENT: ${e} (preview-vfs responder timed out)`);t[h]=!0,a(()=>i(t))},3e4),s=t=>{let s=t.data;if(s?.type!==`preview-vfs-response`||s.id!==n)return;if(clearTimeout(o),typeof s.error==`string`){let e=Error(s.error);s.error.includes(`ENOENT`)&&(e[h]=!0),a(()=>i(e));return}let c=s.content;if(c instanceof Uint8Array){a(()=>r(c));return}if(typeof c==`string`){a(()=>r(new TextEncoder().encode(c)));return}a(()=>i(Error(`Unexpected empty preview-vfs response for ${e}`)))};t.addEventListener(`message`,s),t.postMessage({type:`preview-vfs-read`,id:n,path:e,asText:!1})})}function _(e){return!!e?.[h]}function v(e){let t=new ArrayBuffer(e.byteLength),n=new Uint8Array(t);return n.set(e),n}function y(e,t){return!t||!e.startsWith(t)?null:`${c}${e.slice(t.length).split(`?`)[0].split(`#`)[0]}`}async function b(e,t){let r;try{r=await g(e)}catch(t){if(_(t))return new Response(`Not found: ${e}`,{status:404,headers:{"Content-Type":`text/plain`}});throw t}let i=n(e);return(t?.headers?new Headers(t.headers).get(`range`):null)===`bytes=0-0`?new Response(null,{status:206,headers:{"Content-Type":i,"Content-Length":String(r.byteLength),"Content-Range":`bytes 0-0/${r.byteLength}`}}):new Response(v(r),{status:200,headers:{"Content-Type":i,"Content-Length":String(r.byteLength)}})}let x=null;async function S(){if(typeof URL>`u`||typeof URL.createObjectURL!=`function`)throw Error(`onnxruntime-web blob URLs require URL.createObjectURL (browser realm only)`);let e={};if(await Promise.all(m.map(async t=>{try{let r=await g(`${s}${t}`),i=new Blob([v(r)],{type:n(t)});e[t]=URL.createObjectURL(i)}catch(e){if(!_(e))throw e}})),Object.keys(e).length===0)throw Error("onnxruntime-web is not installed — run `ipk add onnxruntime-web` to stage the wasm runtime in /workspace/node_modules/.");return e}function C(){return x||=S(),x}function w(e){let t=e.backends?.onnx?.wasm;if(t&&(t.wasmPaths=r(s)),e.allowRemoteModels=!1,e.allowLocalModels=!0,e.localModelPath=r(c),o())return;e.allowRemoteModels=!0,e.remoteHost=e.localModelPath,e.remotePathTemplate=`{model}/`,t&&C().then(e=>{t.wasmPaths=e},()=>{});let n=e.fetch;if(n?.[a])return;let i=n,d=e.localModelPath,m=async(e,t)=>{let n=y(l(e),d);return n===null?!u(e)||f(e)?i?i(e,t):fetch(e,t):p(e,t):b(n,t)};m[a]=!0,e.fetch=m}async function T(e){let t=`weights for ${e} are missing — run \`hf download ${e}\` to fetch them into /workspace/models/.`;try{await g(`${c}${e}/config.json`)}catch(e){if(_(e))throw Error(t);let n=e instanceof Error?e.message:String(e);throw Error(`${t} (probe failed: ${n})`)}}export{C as a,w as i,m as n,i as o,T as r,s as t};