web-python-kernel
Advanced tools
+27
-2
@@ -257,2 +257,22 @@ <!DOCTYPE html> | ||
| select.secondary { | ||
| padding: 6px 16px; | ||
| background: #3e3e42; | ||
| color: #cccccc; | ||
| border: 1px solid #505053; | ||
| border-radius: 4px; | ||
| font-size: 13px; | ||
| cursor: pointer; | ||
| transition: background 0.2s; | ||
| } | ||
| select.secondary:hover:not(:disabled) { | ||
| background: #505053; | ||
| } | ||
| select.secondary:disabled { | ||
| opacity: 0.5; | ||
| cursor: not-allowed; | ||
| } | ||
| #kernelSelect { | ||
@@ -313,3 +333,3 @@ background: #2d2d30; | ||
| <div class="editor-actions"> | ||
| <select id="kernelSelect" style="min-width: 150px;"> | ||
| <select id="kernelSelect" style="min-width: 150px;" aria-label="Select kernel"> | ||
| <option value="">No Kernel</option> | ||
@@ -320,2 +340,7 @@ </select> | ||
| <button id="interruptBtn" class="danger" disabled>■ Interrupt</button> | ||
| <select id="mountFolderSelect" class="secondary" style="width: 150px;" disabled title="Mount a local folder to /mnt" aria-label="Mount folder options"> | ||
| <option value="">📁 Mount</option> | ||
| <option value="read">📁 Mount (Read-only)</option> | ||
| <option value="readwrite">📁 Mount (Read/Write)</option> | ||
| </select> | ||
| <button id="restartBtn" class="secondary" disabled>↻ Restart</button> | ||
@@ -325,3 +350,3 @@ <button id="deleteKernelBtn" class="danger" disabled title="Delete selected kernel">🗑</button> | ||
| </div> | ||
| <textarea id="codeEditor"># Welcome to Web Python Kernel! | ||
| <textarea id="codeEditor" aria-label="Python code editor"># Welcome to Web Python Kernel! | ||
| import numpy as np | ||
@@ -328,0 +353,0 @@ import matplotlib.pyplot as plt |
| /*! For license information please see kernel.worker.min.js.LICENSE.txt */ | ||
| var e={590:(e,t,r)=>{r.d(t,{LV:()=>d,p:()=>p});const n=Symbol("Comlink.proxy"),o=Symbol("Comlink.endpoint"),s=Symbol("Comlink.releaseProxy"),i=Symbol("Comlink.finalizer"),a=Symbol("Comlink.thrown"),l=e=>"object"==typeof e&&null!==e||"function"==typeof e,c=new Map([["proxy",{canHandle:e=>l(e)&&e[n],serialize(e){const{port1:t,port2:r}=new MessageChannel;return p(e,t),[r,[r]]},deserialize:e=>(e.start(),d(e))}],["throw",{canHandle:e=>l(e)&&a in e,serialize({value:e}){let t;return t=e instanceof Error?{isError:!0,value:{message:e.message,name:e.name,stack:e.stack}}:{isError:!1,value:e},[t,[]]},deserialize(e){if(e.isError)throw Object.assign(new Error(e.value.message),e.value);throw e.value}}]]);function p(e,t=globalThis,r=["*"]){t.addEventListener("message",function o(s){if(!s||!s.data)return;if(!function(e,t){for(const r of e){if(t===r||"*"===r)return!0;if(r instanceof RegExp&&r.test(t))return!0}return!1}(r,s.origin))return void console.warn(`Invalid origin '${s.origin}' for comlink proxy`);const{id:l,type:c,path:d}=Object.assign({path:[]},s.data),m=(s.data.argumentList||[]).map(w);let h;try{const t=d.slice(0,-1).reduce((e,t)=>e[t],e),r=d.reduce((e,t)=>e[t],e);switch(c){case"GET":h=r;break;case"SET":t[d.slice(-1)[0]]=w(s.data.value),h=!0;break;case"APPLY":h=r.apply(t,m);break;case"CONSTRUCT":h=function(e){return Object.assign(e,{[n]:!0})}(new r(...m));break;case"ENDPOINT":{const{port1:t,port2:r}=new MessageChannel;p(e,r),h=function(e,t){return R.set(e,t),e}(t,[t])}break;case"RELEASE":h=void 0;break;default:return}}catch(e){h={value:e,[a]:0}}Promise.resolve(h).catch(e=>({value:e,[a]:0})).then(r=>{const[n,s]=_(r);t.postMessage(Object.assign(Object.assign({},n),{id:l}),s),"RELEASE"===c&&(t.removeEventListener("message",o),u(t),i in e&&"function"==typeof e[i]&&e[i]())}).catch(e=>{const[r,n]=_({value:new TypeError("Unserializable return value"),[a]:0});t.postMessage(Object.assign(Object.assign({},r),{id:l}),n)})}),t.start&&t.start()}function u(e){(function(e){return"MessagePort"===e.constructor.name})(e)&&e.close()}function d(e,t){const r=new Map;return e.addEventListener("message",function(e){const{data:t}=e;if(!t||!t.id)return;const n=r.get(t.id);if(n)try{n(t)}finally{r.delete(t.id)}}),g(e,r,[],t)}function m(e){if(e)throw new Error("Proxy has been released and is not useable")}function h(e){return b(e,new Map,{type:"RELEASE"}).then(()=>{u(e)})}const y=new WeakMap,f="FinalizationRegistry"in globalThis&&new FinalizationRegistry(e=>{const t=(y.get(e)||0)-1;y.set(e,t),0===t&&h(e)});function g(e,t,r=[],n=function(){}){let i=!1;const a=new Proxy(n,{get(n,o){if(m(i),o===s)return()=>{!function(e){f&&f.unregister(e)}(a),h(e),t.clear(),i=!0};if("then"===o){if(0===r.length)return{then:()=>a};const n=b(e,t,{type:"GET",path:r.map(e=>e.toString())}).then(w);return n.then.bind(n)}return g(e,t,[...r,o])},set(n,o,s){m(i);const[a,l]=_(s);return b(e,t,{type:"SET",path:[...r,o].map(e=>e.toString()),value:a},l).then(w)},apply(n,s,a){m(i);const l=r[r.length-1];if(l===o)return b(e,t,{type:"ENDPOINT"}).then(w);if("bind"===l)return g(e,t,r.slice(0,-1));const[c,p]=E(a);return b(e,t,{type:"APPLY",path:r.map(e=>e.toString()),argumentList:c},p).then(w)},construct(n,o){m(i);const[s,a]=E(o);return b(e,t,{type:"CONSTRUCT",path:r.map(e=>e.toString()),argumentList:s},a).then(w)}});return function(e,t){const r=(y.get(t)||0)+1;y.set(t,r),f&&f.register(e,t,e)}(a,e),a}function E(e){const t=e.map(_);return[t.map(e=>e[0]),(r=t.map(e=>e[1]),Array.prototype.concat.apply([],r))];var r}const R=new WeakMap;function _(e){for(const[t,r]of c)if(r.canHandle(e)){const[n,o]=r.serialize(e);return[{type:"HANDLER",name:t,value:n},o]}return[{type:"RAW",value:e},R.get(e)||[]]}function w(e){switch(e.type){case"HANDLER":return c.get(e.name).deserialize(e.value);case"RAW":return e.value}}function b(e,t,r,n){return new Promise(o=>{const s=new Array(4).fill(0).map(()=>Math.floor(Math.random()*Number.MAX_SAFE_INTEGER).toString(16)).join("-");t.set(s,o),e.start&&e.start(),e.postMessage(Object.assign({id:s},r),n)})}},637:(e,t,r)=>{r.d(t,{MB:()=>p});const n="https://cdn.jsdelivr.net/pyodide/v0.28.0/full/pyodide.js";let o=!1,s=null;var i,a,l=r(696);r(590),function(e){e.MAIN_THREAD="main_thread",e.WORKER="worker"}(i||(i={})),function(e){e.PYTHON="python"}(a||(a={}));class c{constructor(){this.events={}}on(e,t){this.events[e]||(this.events[e]=[]),this.events[e].push(t)}off(e,t){if(!this.events[e])return;const r=this.events[e].indexOf(t);r>-1&&this.events[e].splice(r,1)}emit(e,...t){this.events[e]&&this.events[e].forEach(e=>e(...t))}setMaxListeners(e){}}class p extends c{constructor(){super(),this.initialized=!1,this.initPromise=null,this.filesystemOptions={enabled:!1,root:".",mountPoint:"/home/pyodide"},this._resolveInputReply=null,this._parent_header={},this.executionCount=0,this._status="unknown",this._interruptBuffer=null,this._interruptSupported=!1,this.environmentVariables={},super.setMaxListeners(20),this.kernelId=`kernel_${Math.random().toString(36).substring(2)}_${Date.now()}`}async getStatus(){return this._status}async initialize(e){if(!this.initialized)return this.initPromise||(e?.filesystem&&(this.filesystemOptions={...this.filesystemOptions,...e.filesystem}),e?.env&&(this.environmentVariables={...e.env}),e?.lockFileURL&&(this.lockFileURL=e.lockFileURL),this.initPromise=this._initializeInternal()),this.initPromise}async _initializeInternal(){const e=Date.now();console.log("🚀 Starting optimized kernel initialization...");try{const t=Date.now(),r={};this.lockFileURL&&(r.lockFileURL=this.lockFileURL,console.log(`🔒 Using lockFileURL: ${this.lockFileURL}`)),this.pyodide=await async function(e={}){return s||(s=(async()=>{try{"undefined"!=typeof importScripts?await new Promise((e,t)=>{try{if("undefined"==typeof importScripts)return void t(new Error("importScripts is not available - not in a worker context"));if(void 0!==globalThis.loadPyodide)return void e();importScripts(n),e()}catch(e){t(new Error(`Failed to import Pyodide in worker: ${e}`))}}):await new Promise((e,t)=>{if(void 0!==globalThis.loadPyodide)return void e();const r=document.createElement("script");r.src=n,r.onload=()=>e(),r.onerror=()=>t(new Error(`Failed to load Pyodide from ${n}`)),document.head.appendChild(r)});const t=globalThis.loadPyodide;if(!t)throw new Error("loadPyodide function not found after script load");const r={indexURL:"https://cdn.jsdelivr.net/pyodide/v0.28.0/full/",...e},s=await t(r);return o=!0,console.log("✅ Pyodide loaded successfully from CDN"),s}catch(e){throw s=null,e}})(),s)}(r);const i=Date.now()-t;if(console.log(`✅ Pyodide loaded in ${i}ms`),this.lockFileURL){console.log("🚀 Using lock file - skipping package installation");const[,]=await Promise.all([this.filesystemOptions.enabled?this.mountFilesystem():Promise.resolve(),this.setEnvironmentVariables()]);await this.initGlobals()}else{const[,,]=await Promise.all([this.filesystemOptions.enabled?this.mountFilesystem():Promise.resolve(),this.initPackageManager(),this.setEnvironmentVariables()]);await this.initKernel(),await this.initGlobals()}const a=Date.now()-e;console.log(`🎯 KERNEL INITIALIZATION COMPLETE in ${a}ms`),console.log(`⚡ Performance: Pyodide(${i}ms) + Setup(${a-i}ms)`),this.initialized=!0,this._status="active",console.log("🟢 Kernel is now ACTIVE and ready for execution!")}catch(e){throw console.error("❌ Kernel initialization failed:",e),this._status="unknown",e}}async mountFilesystem(){try{console.log(`Mounting filesystem from ${this.filesystemOptions.root} to ${this.filesystemOptions.mountPoint}`),await this.pyodide.FS.mount(this.pyodide.FS.filesystems.NODEFS,{root:this.filesystemOptions.root||"."},this.filesystemOptions.mountPoint||"/home/pyodide"),console.log("Filesystem mounted successfully");try{const e=this.pyodide.FS.readdir(this.filesystemOptions.mountPoint||"/home/pyodide");console.log(`Files in ${this.filesystemOptions.mountPoint} directory: ${e.join(", ")}`)}catch(e){console.error(`Error listing mounted directory: ${e}`)}}catch(e){throw console.error("Error mounting filesystem:",e),e}}async initPackageManager(){const e=Date.now();console.log("⚡ Initializing optimized package manager...");try{let t;console.log("📦 Loading micropip, packaging..."),await this.pyodide.loadPackage(["micropip","packaging"]),console.log("✅ Loaded micropip, packaging"),t="undefined"!=typeof window&&window.location?new URL(".",window.location.href).href:"undefined"!=typeof self&&self.location?new URL(".",self.location.href).href:"/";const r=new URL("pypi/all.json",t).href,n=[new URL("pypi/piplite-0.6.0a5-py3-none-any.whl",t).href,new URL("pypi/pyodide_kernel-0.6.0a5-py3-none-any.whl",t).href,new URL("pypi/ipykernel-6.9.2-py3-none-any.whl",t).href,new URL("pypi/widgetsnbextension-3.6.999-py3-none-any.whl",t).href,new URL("pypi/widgetsnbextension-4.0.999-py3-none-any.whl",t).href];console.log(`🚀 Installing ${n.length} wheel packages in parallel...`);const o=n.map(async(e,t)=>{const r=Date.now();try{await this.pyodide.runPythonAsync(`\nimport micropip\nawait micropip.install('${e}', keep_going=True)\nprint(f"✅ Wheel ${t+1}/${n.length} installed")\n`);const o=Date.now()-r;return console.log(`⚡ Wheel ${t+1} installed in ${o}ms`),{index:t,success:!0,time:o}}catch(e){const n=Date.now()-r;return console.warn(`⚠️ Wheel ${t+1} failed after ${n}ms:`,e),{index:t,success:!1,time:n,error:e}}}),s=await Promise.all(o),i=s.filter(e=>e.success),a=s.filter(e=>!e.success);console.log(`📊 Wheels: ${i.length}/${n.length} successful`),a.length>0&&console.warn(`⚠️ Failed wheels: ${a.map(e=>e.index+1).join(", ")}`);try{await this.pyodide.runPythonAsync(`\ntry:\n import piplite.piplite\n import json\n\n # Load package index for faster lookups\n try:\n piplite.piplite.PIPLITE_URL = "${r}"\n # Pre-load package index for faster installation\n print("📋 Package index configured")\n except Exception as e:\n print(f"⚠️ Package index setup warning: {e}")\n\n # Configure piplite for optimal performance\n piplite.piplite.REPODATA_INFO = {}\n print("⚡ Piplite optimized for performance")\nexcept ImportError:\n print("⚠️ Piplite not available, continuing without it")\nexcept Exception as e:\n print(f"⚠️ Piplite setup failed: {e}")\n`)}catch(e){console.warn("⚠️ Piplite configuration failed, continuing without it:",e)}const l=Date.now()-e;console.log(`🎯 Package manager initialized in ${l}ms`)}catch(e){throw console.error("❌ Package manager initialization failed:",e),e}}async initKernel(){const e=Date.now();console.log("🚀 Initializing kernel packages with maximum optimization...");const t=[{name:"pure-eval",priority:1,source:"pyodide"},{name:"stack-data",priority:1,source:"pyodide"},{name:"pygments",priority:1,source:"pyodide"},{name:"ssl",priority:1,source:"pyodide"},{name:"sqlite3",priority:1,source:"pyodide"},{name:"prompt_toolkit",priority:1,source:"pyodide"},{name:"jedi",priority:1,source:"pyodide"},{name:"ipython",priority:1,source:"pyodide"},{name:"comm",priority:2,source:"pip"},{name:"hypha-rpc",priority:2,source:"pip"},{name:"nbformat",priority:2,source:"pip"},{name:"ipykernel",priority:3,source:"pip"},{name:"pyodide_kernel",priority:3,source:"pip"}];try{console.log(`📦 Installing ${t.length} packages with intelligent optimization...`),await this.installPackagesWithIntelligentOptimization(t),console.log("📥 Importing pyodide_kernel...");const r=Date.now();await this.pyodide.runPythonAsync("import pyodide_kernel");const n=Date.now()-r;console.log(`✅ pyodide_kernel imported in ${n}ms`);const o=Date.now()-e;console.log(`🎯 Kernel packages initialized in ${o}ms`)}catch(e){throw console.error("❌ Kernel package initialization failed:",e),e}}async installPackagesWithIntelligentOptimization(e){console.log(`⚡ Starting intelligent parallel installation of ${e.length} packages...`);const t=e.map(async e=>{const t=Date.now();try{if(console.log(`🔄 Installing ${e.name} (priority: ${e.priority}, preferred: ${e.source})...`),"pyodide"!==e.source){await this.installViaPipWithOptimizations(e.name);const r=Date.now()-t;return console.log(`✅ ${e.name} installed via pip (${r}ms)`),{package:e.name,method:"pip",duration:r,success:!0,priority:e.priority}}try{await this.pyodide.loadPackage([e.name]);const r=Date.now()-t;return console.log(`✅ ${e.name} loaded from Pyodide CDN (${r}ms)`),{package:e.name,method:"pyodide",duration:r,success:!0,priority:e.priority}}catch(r){console.log(`📦 ${e.name} not available on CDN, trying pip...`),await this.installViaPipWithOptimizations(e.name);const n=Date.now()-t;return console.log(`✅ ${e.name} installed via pip fallback (${n}ms)`),{package:e.name,method:"pip-fallback",duration:n,success:!0,priority:e.priority}}}catch(r){const n=Date.now()-t;return console.warn(`❌ Failed to install ${e.name} after ${n}ms:`,r),{package:e.name,method:"failed",duration:n,success:!1,priority:e.priority,error:r}}}),r=await Promise.all(t);this.analyzeInstallationResults(r)}async installViaPipWithOptimizations(e){await this.pyodide.runPythonAsync(`\ntry:\n # Import piplite first\n import piplite\n # Use optimized pip installation with caching\n await piplite.install('${e}', keep_going=True, deps=True)\n print("✅ Successfully installed ${e} via optimized pip")\nexcept Exception as e:\n print("⚠️ Warning: Failed to install ${e}:", str(e))\n # Try alternative installation method\n try:\n import micropip\n await micropip.install('${e}', keep_going=True)\n print("✅ Successfully installed ${e} via micropip fallback")\n except Exception as e2:\n print("❌ Both pip methods failed for ${e}:", str(e2))\n raise e2\n`)}analyzeInstallationResults(e){const t=e.filter(e=>e.success),r=e.filter(e=>!e.success),n=t.filter(e=>"pyodide"===e.method),o=t.filter(e=>"pip"===e.method),s=t.filter(e=>"pip-fallback"===e.method),i=Math.max(...e.map(e=>e.duration)),a=e.reduce((e,t)=>e+t.duration,0)/e.length,l=e.reduce((e,t)=>e+t.duration,0);console.log("🎯 INTELLIGENT INSTALLATION COMPLETE!"),console.log(`📊 Results: ${t.length}/${e.length} successful`),console.log(`⚡ Pyodide CDN: ${n.length} packages`),console.log(`📦 Direct pip: ${o.length} packages`),console.log(`🔄 Pip fallback: ${s.length} packages`),console.log(`❌ Failed: ${r.length} packages`),console.log(`⏱️ Total time: ${i}ms (vs ~${l}ms sequential)`),console.log(`🚀 Speed improvement: ~${Math.round(l/i)}x faster`),console.log(`📈 Average per package: ${Math.round(a)}ms`),r.length>0&&(console.warn(`⚠️ Failed packages: ${r.map(e=>e.package).join(", ")}`),r.forEach(e=>{console.warn(` - ${e.package}: ${e.error?.message||"Unknown error"}`)}));const c=Math.min(...t.map(e=>e.duration)),p=Math.max(...t.map(e=>e.duration));console.log(`📊 Performance range: ${c}ms (fastest) to ${p}ms (slowest)`)}async initGlobals(){console.log("Initializing globals...");const{globals:e}=this.pyodide;this._kernel=e.get("pyodide_kernel").kernel_instance.copy(),this._stdout_stream=e.get("pyodide_kernel").stdout_stream.copy(),this._stderr_stream=e.get("pyodide_kernel").stderr_stream.copy(),this._interpreter=this._kernel.interpreter.copy(),this._interpreter.send_comm=this.sendComm.bind(this),this.setupCallbacks()}setupCallbacks(){const e=(e,t)=>{const r={name:this.formatResult(e),text:this.formatResult(t)};this._sendMessage({parentHeader:this.formatResult(this._parent_header).header,bundle:r,type:"stream"})};this._stdout_stream.publish_stream_callback=e,this._stderr_stream.publish_stream_callback=e,this._interpreter.display_pub.clear_output_callback=e=>{const t={wait:this.formatResult(e)};this._sendMessage({parentHeader:this.formatResult(this._parent_header).header,bundle:t,type:"clear_output"})},this._interpreter.display_pub.display_data_callback=(e,t,r)=>{const n={data:this.formatResult(e),metadata:this.formatResult(t),transient:this.formatResult(r)};this._sendMessage({parentHeader:this.formatResult(this._parent_header).header,bundle:n,type:"display_data"})},this._interpreter.display_pub.update_display_data_callback=(e,t,r)=>{const n={data:this.formatResult(e),metadata:this.formatResult(t),transient:this.formatResult(r)};this._sendMessage({parentHeader:this.formatResult(this._parent_header).header,bundle:n,type:"update_display_data"})},this._interpreter.displayhook.publish_execution_result=(e,t,r)=>{const n={execution_count:e,data:this.formatResult(t),metadata:this.formatResult(r)};this._sendMessage({parentHeader:this.formatResult(this._parent_header).header,bundle:n,type:"execute_result"})},this._interpreter.input=this.input.bind(this),this._interpreter.getpass=this.getpass.bind(this)}_sendMessage(e){this._processMessage(e)}_processMessage(e){if(!e.type)return;let t;switch(e.type){case"stream":{const r=e.bundle??{name:"stdout",text:""};super.emit(l.z.STREAM,r),t=r;break}case"input_request":{const r=e.content??{prompt:"",password:!1};super.emit(l.z.INPUT_REQUEST,r),t=r;break}case"display_data":{const r=e.bundle??{data:{},metadata:{},transient:{}};super.emit(l.z.DISPLAY_DATA,r),t=r;break}case"update_display_data":{const r=e.bundle??{data:{},metadata:{},transient:{}};super.emit(l.z.UPDATE_DISPLAY_DATA,r),t=r;break}case"clear_output":{const r=e.bundle??{wait:!1};super.emit(l.z.CLEAR_OUTPUT,r),t=r;break}case"execute_result":{const r=e.bundle??{execution_count:this.executionCount,data:{},metadata:{}};super.emit(l.z.EXECUTE_RESULT,r),t=r;break}case"execute_error":{const r=e.bundle??{ename:"",evalue:"",traceback:[]};super.emit(l.z.EXECUTE_ERROR,r),t=r;break}case"comm_open":case"comm_msg":case"comm_close":{const r=e.content??{};super.emit(e.type,r,e.metadata,e.buffers),t={content:r,metadata:e.metadata,buffers:e.buffers};break}}t&&super.emit(l.z.ALL,{type:e.type,data:t})}isInitialized(){return this.initialized}async setup(e){await this.initialize(),this._parent_header=this.pyodide.toPy(e||{})}async execute(e,t={}){const r=[];try{for await(const n of this.executeStream(e,t))r.push(n);const n={outputs:[],data:{},metadata:{},execution_count:this.executionCount};for(const e of r)if("stream"===e.type)n.stdout||(n.stdout=""),n.stderr||(n.stderr=""),"stdout"===e.data.name?n.stdout+=e.data.text:"stderr"===e.data.name&&(n.stderr+=e.data.text),n.outputs.push(e.data);else if("display_data"===e.type||"execute_result"===e.type)e.data.data&&Object.assign(n.data,e.data.data),e.data.metadata&&Object.assign(n.metadata,e.data.metadata),n.outputs.push(e.data);else{if("execute_error"===e.type||"error"===e.type){const t=e.data;return{success:!1,error:new Error(`${t.ename}: ${t.evalue}`),ename:t.ename,evalue:t.evalue,traceback:t.traceback,outputs:n.outputs}}n.outputs.push(e)}return n.success=!0,n}catch(e){return console.error("[KERNEL] Execute error:",e),{success:!1,error:e instanceof Error?e:new Error(String(e))}}}formatResult(e){if(!(e instanceof this.pyodide.ffi.PyProxy))return e;try{const t=e.toJs();return this.mapToObject(t)}catch(e){return console.error("Error formatting result:",e),{status:"error",error:String(e)}}}mapToObject(e){const t=e instanceof Array?[]:{};return e.forEach((e,r)=>{t[r]=e instanceof Map||e instanceof Array?this.mapToObject(e):e}),t}async inputReply(e){this._resolveInputReply&&(this._resolveInputReply(e),this._resolveInputReply=null)}async sendInputRequest(e,t){const r={prompt:e,password:t};this._sendMessage({type:"input_request",content:r,parentHeader:this.formatResult(this._parent_header).header})}async getpass(e){e=void 0===e?"":e,await this.sendInputRequest(e,!0);const t=new Promise(e=>{this._resolveInputReply=e});return(await t).value}async input(e){e=void 0===e?"":e,await this.sendInputRequest(e,!1);const t=new Promise(e=>{this._resolveInputReply=e});return(await t).value}async sendComm(e,t,r,n,o){this._sendMessage({type:e,content:this.formatResult(t),metadata:this.formatResult(r),ident:this.formatResult(n),buffers:this.formatResult(o),parentHeader:this.formatResult(this._parent_header).header})}async complete(e,t,r={}){await this.setup(r);const n=this._kernel.complete(e,t);return this.formatResult(n)}async inspect(e,t,r,n={}){await this.setup(n);const o=this._kernel.inspect(e,t,r);return this.formatResult(o)}async isComplete(e,t={}){await this.setup(t);const r=this._kernel.is_complete(e);return this.formatResult(r)}async commInfo(e,t={}){await this.setup(t);const r=this._kernel.comm_info(e);return{comms:this.formatResult(r),status:"ok"}}async commOpen(e,t={}){await this.setup(t);const r=this._kernel.comm_manager.comm_open(this.pyodide.toPy(null),this.pyodide.toPy(null),this.pyodide.toPy(e));return this.formatResult(r)}async commMsg(e,t={}){await this.setup(t);const r=this._kernel.comm_manager.comm_msg(this.pyodide.toPy(null),this.pyodide.toPy(null),this.pyodide.toPy(e));return this.formatResult(r)}async commClose(e,t={}){await this.setup(t);const r=this._kernel.comm_manager.comm_close(this.pyodide.toPy(null),this.pyodide.toPy(null),this.pyodide.toPy(e));return this.formatResult(r)}async*executeStream(e,t={}){this.initialized||await this.initialize();try{this._status="busy",super.emit(l.z.KERNEL_BUSY,{}),await this.setup(t);const r="\n# Kernel isolation - reset commonly conflicting variables to prevent cross-kernel state sharing\nfor _var in ['x', 'value', 'result', 'a', 'b', 'c', 'data', 'temp']:\n if _var in globals():\n del globals()[_var]\ndel _var\n";this.pyodide.runPython(r);const n=[];let o=!1,s=null,i=null;const a=e=>{n.push(e)};super.on(l.z.ALL,a);try{for(this._kernel.run(e).then(e=>{console.log("[KERNEL] Python execution finished"),s=this.formatResult(e),setTimeout(()=>{o=!0},100)}).catch(e=>{console.error("[KERNEL] Python execution error:",e),i=e instanceof Error?e:new Error(String(e)),setTimeout(()=>{o=!0},100)});!o||n.length>0;)if(n.length>0){const e=n.shift();yield e}else o||await new Promise(e=>setTimeout(e,10));if(this._status="active",super.emit(l.z.KERNEL_IDLE,{}),i)return{success:!1,error:i,result:s};if(s&&"error"===s.status){const e=`${s.ename||"Error"}: ${s.evalue||"Unknown error"}`;return{success:!1,error:new Error(e),result:s}}return{success:!0,result:s}}finally{super.off(l.z.ALL,a)}}catch(e){return console.error("[KERNEL] ExecuteStream error:",e),this._status="active",super.emit(l.z.KERNEL_IDLE,{}),{success:!1,error:e instanceof Error?e:new Error(String(e))}}}async interrupt(){if(!this.initialized||!this.pyodide)return console.warn("[KERNEL] Cannot interrupt: kernel not initialized"),!1;console.log("[KERNEL] Attempting to interrupt execution...");try{if(this._interruptBuffer&&this._interruptSupported&&(console.log("[KERNEL] Using interrupt buffer method"),this._interruptBuffer[0]=2,await new Promise(e=>setTimeout(e,100)),0===this._interruptBuffer[0]))return console.log("[KERNEL] Interrupt processed successfully via buffer"),!0;try{return console.log("[KERNEL] Attempting Python-level interrupt"),await this.pyodide.runPythonAsync("\nimport sys\nimport _thread\n# Try to interrupt the main thread\n_thread.interrupt_main()\n"),console.log("[KERNEL] Python interrupt signal sent"),!0}catch(e){console.log("[KERNEL] Python interrupt attempt failed:",e)}return this._interpreter&&"function"==typeof this._interpreter.interrupt?(console.log("[KERNEL] Using interpreter interrupt method"),this._interpreter.interrupt(),!0):(console.log("[KERNEL] Sending interrupt messages for UI feedback"),this._sendMessage({type:"stream",bundle:{name:"stderr",text:"KeyboardInterrupt: Execution interrupted by user\n"}}),this._sendMessage({type:"execute_error",bundle:{ename:"KeyboardInterrupt",evalue:"Execution interrupted by user",traceback:["KeyboardInterrupt: Execution interrupted by user"]}}),!1)}catch(e){return console.error("[KERNEL] Error during interrupt:",e),!1}}setInterruptBuffer(e){this._interruptBuffer=e;try{this.pyodide&&"function"==typeof this.pyodide.setInterruptBuffer?(this.pyodide.setInterruptBuffer(e),this._interruptSupported=!0):(console.warn("[KERNEL] pyodide.setInterruptBuffer not available, interrupt support limited"),this._interruptSupported=!1)}catch(e){console.error("[KERNEL] Error setting interrupt buffer:",e),this._interruptSupported=!1}}async setEnvironmentVariables(){if(0===Object.keys(this.environmentVariables).length)return;const e=Date.now();console.log(`🌍 Setting ${Object.keys(this.environmentVariables).length} environment variables...`);try{for(const[e,t]of Object.entries(this.environmentVariables)){let r;r=null==t?"":String(t),await this.pyodide.runPythonAsync(`\nimport os\nos.environ[${JSON.stringify(e)}] = ${JSON.stringify(r)}\n`)}const t=Date.now()-e;console.log(`⚡ Environment variables set in ${t}ms`)}catch(e){throw console.error("❌ Failed to set environment variables:",e),e}}}},696:(e,t,r)=>{var n;r.d(t,{z:()=>n}),function(e){e.STREAM="stream",e.DISPLAY_DATA="display_data",e.UPDATE_DISPLAY_DATA="update_display_data",e.EXECUTE_RESULT="execute_result",e.EXECUTE_ERROR="execute_error",e.EXECUTE_REQUEST="execute_request",e.INPUT_REQUEST="input_request",e.CLEAR_OUTPUT="clear_output",e.COMM_OPEN="comm_open",e.COMM_MSG="comm_msg",e.COMM_CLOSE="comm_close",e.KERNEL_READY="kernel_ready",e.KERNEL_BUSY="kernel_busy",e.KERNEL_IDLE="kernel_idle",e.ALL="*",e.EXECUTION_STALLED="execution_stalled",e.KERNEL_UNRECOVERABLE="kernel_unrecoverable",e.EXECUTION_INTERRUPTED="execution_interrupted",e.KERNEL_RESTARTED="kernel_restarted",e.KERNEL_TERMINATED="kernel_terminated"}(n||(n={}))}},t={};function r(n){var o=t[n];if(void 0!==o)return o.exports;var s=t[n]={exports:{}};return e[n](s,s.exports,r),s.exports}r.d=(e,t)=>{for(var n in t)r.o(t,n)&&!r.o(e,n)&&Object.defineProperty(e,n,{enumerable:!0,get:t[n]})},r.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t);var n=r(590),o=r(696);const s=new(r(637).MB);let i=null,a={},l=new Map,c=null;function p(e){return e&&"object"==typeof e&&("KeyboardInterrupt"===e.type||e.message&&e.message.includes("KeyboardInterrupt"))}function u(){i?Object.values(o.z).forEach(e=>{const t=t=>{i&&i.postMessage({type:e,data:t})};l.set(e,t),s.on(e,t)}):console.error("[WORKER] Cannot set up event forwarding: no event port available")}self.addEventListener("error",e=>{console.error("[WORKER] Global error caught:",e.error),e.preventDefault()}),self.addEventListener("unhandledrejection",e=>{p(e.reason)?(console.log("[WORKER] KeyboardInterrupt caught in unhandled rejection handler - this is expected during interrupts"),i&&i.postMessage({type:o.z.EXECUTE_ERROR,data:{ename:"KeyboardInterrupt",evalue:"Execution interrupted by user",traceback:["KeyboardInterrupt: Execution interrupted by user"]}})):console.error("[WORKER] Unhandled promise rejection:",e.reason),e.preventDefault()}),self.addEventListener("message",e=>{if("SET_EVENT_PORT"===e.data?.type&&e.data?.port)!function(){if(l.size>0){for(const[e,t]of l.entries())s.off(e,t);l.clear()}i&&(i.close(),i=null)}(),i=e.data.port,s.isInitialized()&&u();else if("INITIALIZE_KERNEL"===e.data?.type)a=e.data.options||{},async function(e){try{await s.initialize(e),c&&"function"==typeof s.setInterruptBuffer&&s.setInterruptBuffer(c),u(),i&&i.postMessage({type:"KERNEL_INITIALIZED",data:{success:!0}})}catch(e){throw console.error("Kernel initialization failed:",e),e}}(a).catch(e=>{console.error("[WORKER] Error initializing kernel in worker:",e),i&&i.postMessage({type:o.z.EXECUTE_ERROR,data:{ename:"WorkerInitError",evalue:`Failed to initialize kernel: ${e.message}`,traceback:[e.stack||""]}})});else if("SET_INTERRUPT_BUFFER"===e.data?.type){c=e.data.buffer,s.isInitialized()&&c&&"function"==typeof s.setInterruptBuffer?(s.setInterruptBuffer(c),console.log("[WORKER] Interrupt buffer set in pyodide kernel")):c&&console.log("[WORKER] Interrupt buffer stored, will be set when kernel initializes");const t={type:"INTERRUPT_BUFFER_SET",data:{success:!0}};i&&i.postMessage(t),self.postMessage(t)}else if("INTERRUPT_KERNEL"===e.data?.type)if(c){c[0]=2;const e={type:"INTERRUPT_TRIGGERED",data:{success:!0,method:"buffer"}};i&&i.postMessage(e),self.postMessage(e)}else if(console.log("[WORKER] No interrupt buffer available, trying kernel.interrupt()"),"function"==typeof s.interrupt)s.interrupt().then(e=>{const t={type:"INTERRUPT_TRIGGERED",data:{success:e,method:"kernel"}};i&&i.postMessage(t),self.postMessage(t)}).catch(e=>{console.error("[WORKER] Error during kernel interrupt:",e);const t={type:"INTERRUPT_TRIGGERED",data:{success:!1,error:e.message,method:"kernel"}};i&&i.postMessage(t),self.postMessage(t)});else{console.warn("[WORKER] No interrupt method available");const e={type:"INTERRUPT_TRIGGERED",data:{success:!1,error:"No interrupt method available",method:"none"}};i&&i.postMessage(e),self.postMessage(e)}}),self.addEventListener("beforeunload",async()=>{try{i&&i.postMessage({type:"WORKER_TERMINATING",data:{message:"Worker is shutting down"}})}catch(e){console.error("Error during worker cleanup:",e)}});const d={initialize:async e=>{try{return void await s.initialize(e)}catch(e){throw console.error("[WORKER] Initialize error:",e),e}},execute:async(e,t)=>{try{return await s.execute(e,t)}catch(e){return console.error("[WORKER] Execute error:",e),p(e)?(console.log("[WORKER] KeyboardInterrupt caught in execute method"),{success:!1,error:new Error("KeyboardInterrupt: Execution interrupted by user"),result:{payload:[],status:"error",ename:"KeyboardInterrupt",evalue:"Execution interrupted by user",traceback:["KeyboardInterrupt: Execution interrupted by user"]}}):{success:!1,error:e instanceof Error?e:new Error(String(e)),result:{payload:[],status:"error",ename:e instanceof Error?e.constructor.name:"Error",evalue:e instanceof Error?e.message:String(e),traceback:e instanceof Error&&e.stack?e.stack.split("\n"):[String(e)]}}}},isInitialized:()=>{try{return s.isInitialized()}catch(e){return console.error("[WORKER] IsInitialized error:",e),!1}},inputReply:async e=>{try{await s.inputReply(e)}catch(e){throw console.error("[WORKER] InputReply error:",e),e}},getStatus:async()=>{try{return await s.getStatus()}catch(e){return console.error("[WORKER] getStatus error:",e),"unknown"}},interrupt:async()=>{try{return"function"==typeof s.interrupt?await s.interrupt():(console.warn("[WORKER] Kernel does not support interrupt method"),!1)}catch(e){return console.error("[WORKER] Interrupt error:",e),!1}},setInterruptBuffer:e=>{try{return"function"==typeof s.setInterruptBuffer?(s.setInterruptBuffer(e),!0):(console.warn("[WORKER] Kernel does not support setInterruptBuffer method"),!1)}catch(e){return console.error("[WORKER] setInterruptBuffer error:",e),!1}},complete:async(e,t,r)=>{try{return"function"==typeof s.complete?await s.complete(e,t,r):(console.warn("[WORKER] Kernel does not support complete method"),{status:"error",error:"Completion not supported"})}catch(e){return console.error("[WORKER] Complete error:",e),{status:"error",error:String(e)}}},inspect:async(e,t,r,n)=>{try{return"function"==typeof s.inspect?await s.inspect(e,t,r,n):(console.warn("[WORKER] Kernel does not support inspect method"),{status:"error",error:"Inspection not supported"})}catch(e){return console.error("[WORKER] Inspect error:",e),{status:"error",error:String(e)}}},isComplete:async(e,t)=>{try{return"function"==typeof s.isComplete?await s.isComplete(e,t):(console.warn("[WORKER] Kernel does not support isComplete method"),{status:"unknown"})}catch(e){return console.error("[WORKER] IsComplete error:",e),{status:"error",error:String(e)}}},commInfo:async(e,t)=>{try{return"function"==typeof s.commInfo?await s.commInfo(e,t):(console.warn("[WORKER] Kernel does not support commInfo method"),{comms:{},status:"ok"})}catch(e){return console.error("[WORKER] CommInfo error:",e),{comms:{},status:"error",error:String(e)}}},commOpen:async(e,t)=>{try{return"function"==typeof s.commOpen?await s.commOpen(e,t):void console.warn("[WORKER] Kernel does not support commOpen method")}catch(e){return void console.error("[WORKER] CommOpen error:",e)}},commMsg:async(e,t)=>{try{return"function"==typeof s.commMsg?await s.commMsg(e,t):void console.warn("[WORKER] Kernel does not support commMsg method")}catch(e){return void console.error("[WORKER] CommMsg error:",e)}},commClose:async(e,t)=>{try{return"function"==typeof s.commClose?await s.commClose(e,t):void console.warn("[WORKER] Kernel does not support commClose method")}catch(e){return void console.error("[WORKER] CommClose error:",e)}}};try{n.p(d)}catch(e){console.error("Error exposing proxy:",e)} | ||
| var e={590:(e,t,r)=>{r.d(t,{BX:()=>R,LV:()=>d,p:()=>u});const n=Symbol("Comlink.proxy"),s=Symbol("Comlink.endpoint"),o=Symbol("Comlink.releaseProxy"),i=Symbol("Comlink.finalizer"),a=Symbol("Comlink.thrown"),c=e=>"object"==typeof e&&null!==e||"function"==typeof e,l=new Map([["proxy",{canHandle:e=>c(e)&&e[n],serialize(e){const{port1:t,port2:r}=new MessageChannel;return u(e,t),[r,[r]]},deserialize:e=>(e.start(),d(e))}],["throw",{canHandle:e=>c(e)&&a in e,serialize({value:e}){let t;return t=e instanceof Error?{isError:!0,value:{message:e.message,name:e.name,stack:e.stack}}:{isError:!1,value:e},[t,[]]},deserialize(e){if(e.isError)throw Object.assign(new Error(e.value.message),e.value);throw e.value}}]]);function u(e,t=globalThis,r=["*"]){t.addEventListener("message",function n(s){if(!s||!s.data)return;if(!function(e,t){for(const r of e){if(t===r||"*"===r)return!0;if(r instanceof RegExp&&r.test(t))return!0}return!1}(r,s.origin))return void console.warn(`Invalid origin '${s.origin}' for comlink proxy`);const{id:o,type:c,path:l}=Object.assign({path:[]},s.data),d=(s.data.argumentList||[]).map(b);let m;try{const t=l.slice(0,-1).reduce((e,t)=>e[t],e),r=l.reduce((e,t)=>e[t],e);switch(c){case"GET":m=r;break;case"SET":t[l.slice(-1)[0]]=b(s.data.value),m=!0;break;case"APPLY":m=r.apply(t,d);break;case"CONSTRUCT":m=R(new r(...d));break;case"ENDPOINT":{const{port1:t,port2:r}=new MessageChannel;u(e,r),m=function(e,t){return w.set(e,t),e}(t,[t])}break;case"RELEASE":m=void 0;break;default:return}}catch(e){m={value:e,[a]:0}}Promise.resolve(m).catch(e=>({value:e,[a]:0})).then(r=>{const[s,a]=_(r);t.postMessage(Object.assign(Object.assign({},s),{id:o}),a),"RELEASE"===c&&(t.removeEventListener("message",n),p(t),i in e&&"function"==typeof e[i]&&e[i]())}).catch(e=>{const[r,n]=_({value:new TypeError("Unserializable return value"),[a]:0});t.postMessage(Object.assign(Object.assign({},r),{id:o}),n)})}),t.start&&t.start()}function p(e){(function(e){return"MessagePort"===e.constructor.name})(e)&&e.close()}function d(e,t){const r=new Map;return e.addEventListener("message",function(e){const{data:t}=e;if(!t||!t.id)return;const n=r.get(t.id);if(n)try{n(t)}finally{r.delete(t.id)}}),g(e,r,[],t)}function m(e){if(e)throw new Error("Proxy has been released and is not useable")}function y(e){return k(e,new Map,{type:"RELEASE"}).then(()=>{p(e)})}const h=new WeakMap,f="FinalizationRegistry"in globalThis&&new FinalizationRegistry(e=>{const t=(h.get(e)||0)-1;h.set(e,t),0===t&&y(e)});function g(e,t,r=[],n=function(){}){let i=!1;const a=new Proxy(n,{get(n,s){if(m(i),s===o)return()=>{!function(e){f&&f.unregister(e)}(a),y(e),t.clear(),i=!0};if("then"===s){if(0===r.length)return{then:()=>a};const n=k(e,t,{type:"GET",path:r.map(e=>e.toString())}).then(b);return n.then.bind(n)}return g(e,t,[...r,s])},set(n,s,o){m(i);const[a,c]=_(o);return k(e,t,{type:"SET",path:[...r,s].map(e=>e.toString()),value:a},c).then(b)},apply(n,o,a){m(i);const c=r[r.length-1];if(c===s)return k(e,t,{type:"ENDPOINT"}).then(b);if("bind"===c)return g(e,t,r.slice(0,-1));const[l,u]=E(a);return k(e,t,{type:"APPLY",path:r.map(e=>e.toString()),argumentList:l},u).then(b)},construct(n,s){m(i);const[o,a]=E(s);return k(e,t,{type:"CONSTRUCT",path:r.map(e=>e.toString()),argumentList:o},a).then(b)}});return function(e,t){const r=(h.get(t)||0)+1;h.set(t,r),f&&f.register(e,t,e)}(a,e),a}function E(e){const t=e.map(_);return[t.map(e=>e[0]),(r=t.map(e=>e[1]),Array.prototype.concat.apply([],r))];var r}const w=new WeakMap;function R(e){return Object.assign(e,{[n]:!0})}function _(e){for(const[t,r]of l)if(r.canHandle(e)){const[n,s]=r.serialize(e);return[{type:"HANDLER",name:t,value:n},s]}return[{type:"RAW",value:e},w.get(e)||[]]}function b(e){switch(e.type){case"HANDLER":return l.get(e.name).deserialize(e.value);case"RAW":return e.value}}function k(e,t,r,n){return new Promise(s=>{const o=new Array(4).fill(0).map(()=>Math.floor(Math.random()*Number.MAX_SAFE_INTEGER).toString(16)).join("-");t.set(o,s),e.start&&e.start(),e.postMessage(Object.assign({id:o},r),n)})}},637:(e,t,r)=>{r.d(t,{MB:()=>u});const n="https://cdn.jsdelivr.net/pyodide/v0.28.0/full/pyodide.js";let s=!1,o=null;var i,a,c=r(696);r(590),function(e){e.MAIN_THREAD="main_thread",e.WORKER="worker"}(i||(i={})),function(e){e.PYTHON="python"}(a||(a={}));class l{constructor(){this.events={}}on(e,t){this.events[e]||(this.events[e]=[]),this.events[e].push(t)}off(e,t){if(!this.events[e])return;const r=this.events[e].indexOf(t);r>-1&&this.events[e].splice(r,1)}emit(e,...t){this.events[e]&&this.events[e].forEach(e=>e(...t))}setMaxListeners(e){}}class u extends l{constructor(){super(),this.initialized=!1,this.initPromise=null,this.filesystemOptions={enabled:!1,root:".",mountPoint:"/home/pyodide"},this._resolveInputReply=null,this._parent_header={},this.executionCount=0,this._status="unknown",this._interruptBuffer=null,this._interruptSupported=!1,this.environmentVariables={},this.nativeFsHandles=new Map,this.autoSyncFs=!1,super.setMaxListeners(20),this.kernelId=`kernel_${Math.random().toString(36).substring(2)}_${Date.now()}`}async getStatus(){return this._status}async initialize(e){if(!this.initialized)return this.initPromise||(e?.filesystem&&(this.filesystemOptions={...this.filesystemOptions,...e.filesystem}),e?.env&&(this.environmentVariables={...e.env}),e?.lockFileURL&&(this.lockFileURL=e.lockFileURL),void 0!==e?.autoSyncFs&&(this.autoSyncFs=e.autoSyncFs),this.initPromise=this._initializeInternal()),this.initPromise}async _initializeInternal(){const e=Date.now();console.log("🚀 Starting optimized kernel initialization...");try{const t=Date.now(),r={};this.lockFileURL&&(r.lockFileURL=this.lockFileURL,console.log(`🔒 Using lockFileURL: ${this.lockFileURL}`)),this.pyodide=await async function(e={}){return o||(o=(async()=>{try{"undefined"!=typeof importScripts?await new Promise((e,t)=>{try{if("undefined"==typeof importScripts)return void t(new Error("importScripts is not available - not in a worker context"));if(void 0!==globalThis.loadPyodide)return void e();importScripts(n),e()}catch(e){t(new Error(`Failed to import Pyodide in worker: ${e}`))}}):await new Promise((e,t)=>{if(void 0!==globalThis.loadPyodide)return void e();const r=document.createElement("script");r.src=n,r.onload=()=>e(),r.onerror=()=>t(new Error(`Failed to load Pyodide from ${n}`)),document.head.appendChild(r)});const t=globalThis.loadPyodide;if(!t)throw new Error("loadPyodide function not found after script load");const r={indexURL:"https://cdn.jsdelivr.net/pyodide/v0.28.0/full/",...e},o=await t(r);return s=!0,console.log("✅ Pyodide loaded successfully from CDN"),o}catch(e){throw o=null,e}})(),o)}(r);const i=Date.now()-t;if(console.log(`✅ Pyodide loaded in ${i}ms`),this.lockFileURL){console.log("🚀 Using lock file - skipping package installation");const[,]=await Promise.all([this.filesystemOptions.enabled?this.mountFilesystem():Promise.resolve(),this.setEnvironmentVariables()]);await this.initGlobals()}else{const[,,]=await Promise.all([this.filesystemOptions.enabled?this.mountFilesystem():Promise.resolve(),this.initPackageManager(),this.setEnvironmentVariables()]);await this.initKernel(),await this.initGlobals()}const a=Date.now()-e;console.log(`🎯 KERNEL INITIALIZATION COMPLETE in ${a}ms`),console.log(`⚡ Performance: Pyodide(${i}ms) + Setup(${a-i}ms)`),this.initialized=!0,this._status="active",console.log("🟢 Kernel is now ACTIVE and ready for execution!")}catch(e){throw console.error("❌ Kernel initialization failed:",e),this._status="unknown",e}}async mountFilesystem(){try{console.log(`Mounting filesystem from ${this.filesystemOptions.root} to ${this.filesystemOptions.mountPoint}`),await this.pyodide.FS.mount(this.pyodide.FS.filesystems.NODEFS,{root:this.filesystemOptions.root||"."},this.filesystemOptions.mountPoint||"/home/pyodide"),console.log("Filesystem mounted successfully");try{const e=this.pyodide.FS.readdir(this.filesystemOptions.mountPoint||"/home/pyodide");console.log(`Files in ${this.filesystemOptions.mountPoint} directory: ${e.join(", ")}`)}catch(e){console.error(`Error listing mounted directory: ${e}`)}}catch(e){throw console.error("Error mounting filesystem:",e),e}}async initPackageManager(){const e=Date.now();console.log("⚡ Initializing optimized package manager...");try{let t;console.log("📦 Loading micropip, packaging..."),await this.pyodide.loadPackage(["micropip","packaging"]),console.log("✅ Loaded micropip, packaging"),t="undefined"!=typeof window&&window.location?new URL(".",window.location.href).href:"undefined"!=typeof self&&self.location?new URL(".",self.location.href).href:"/";const r=new URL("pypi/all.json",t).href,n=[new URL("pypi/piplite-0.6.0a5-py3-none-any.whl",t).href,new URL("pypi/pyodide_kernel-0.6.0a5-py3-none-any.whl",t).href,new URL("pypi/ipykernel-6.9.2-py3-none-any.whl",t).href,new URL("pypi/widgetsnbextension-3.6.999-py3-none-any.whl",t).href,new URL("pypi/widgetsnbextension-4.0.999-py3-none-any.whl",t).href];console.log(`🚀 Installing ${n.length} wheel packages in parallel...`);const s=n.map(async(e,t)=>{const r=Date.now();try{await this.pyodide.runPythonAsync(`\nimport micropip\nawait micropip.install('${e}', keep_going=True)\nprint(f"✅ Wheel ${t+1}/${n.length} installed")\n`);const s=Date.now()-r;return console.log(`⚡ Wheel ${t+1} installed in ${s}ms`),{index:t,success:!0,time:s}}catch(e){const n=Date.now()-r;return console.warn(`⚠️ Wheel ${t+1} failed after ${n}ms:`,e),{index:t,success:!1,time:n,error:e}}}),o=await Promise.all(s),i=o.filter(e=>e.success),a=o.filter(e=>!e.success);console.log(`📊 Wheels: ${i.length}/${n.length} successful`),a.length>0&&console.warn(`⚠️ Failed wheels: ${a.map(e=>e.index+1).join(", ")}`);try{await this.pyodide.runPythonAsync(`\ntry:\n import piplite.piplite\n import json\n\n # Load package index for faster lookups\n try:\n piplite.piplite.PIPLITE_URL = "${r}"\n # Pre-load package index for faster installation\n print("📋 Package index configured")\n except Exception as e:\n print(f"⚠️ Package index setup warning: {e}")\n\n # Configure piplite for optimal performance\n piplite.piplite.REPODATA_INFO = {}\n print("⚡ Piplite optimized for performance")\nexcept ImportError:\n print("⚠️ Piplite not available, continuing without it")\nexcept Exception as e:\n print(f"⚠️ Piplite setup failed: {e}")\n`)}catch(e){console.warn("⚠️ Piplite configuration failed, continuing without it:",e)}const c=Date.now()-e;console.log(`🎯 Package manager initialized in ${c}ms`)}catch(e){throw console.error("❌ Package manager initialization failed:",e),e}}async initKernel(){const e=Date.now();console.log("🚀 Initializing kernel packages with maximum optimization...");const t=[{name:"pure-eval",priority:1,source:"pyodide"},{name:"stack-data",priority:1,source:"pyodide"},{name:"pygments",priority:1,source:"pyodide"},{name:"ssl",priority:1,source:"pyodide"},{name:"sqlite3",priority:1,source:"pyodide"},{name:"prompt_toolkit",priority:1,source:"pyodide"},{name:"jedi",priority:1,source:"pyodide"},{name:"ipython",priority:1,source:"pyodide"},{name:"comm",priority:2,source:"pip"},{name:"hypha-rpc",priority:2,source:"pip"},{name:"nbformat",priority:2,source:"pip"},{name:"ipykernel",priority:3,source:"pip"},{name:"pyodide_kernel",priority:3,source:"pip"}];try{console.log(`📦 Installing ${t.length} packages with intelligent optimization...`),await this.installPackagesWithIntelligentOptimization(t),console.log("📥 Importing pyodide_kernel...");const r=Date.now();await this.pyodide.runPythonAsync("import pyodide_kernel");const n=Date.now()-r;console.log(`✅ pyodide_kernel imported in ${n}ms`);const s=Date.now()-e;console.log(`🎯 Kernel packages initialized in ${s}ms`)}catch(e){throw console.error("❌ Kernel package initialization failed:",e),e}}async installPackagesWithIntelligentOptimization(e){console.log(`⚡ Starting intelligent parallel installation of ${e.length} packages...`);const t=e.map(async e=>{const t=Date.now();try{if(console.log(`🔄 Installing ${e.name} (priority: ${e.priority}, preferred: ${e.source})...`),"pyodide"!==e.source){await this.installViaPipWithOptimizations(e.name);const r=Date.now()-t;return console.log(`✅ ${e.name} installed via pip (${r}ms)`),{package:e.name,method:"pip",duration:r,success:!0,priority:e.priority}}try{await this.pyodide.loadPackage([e.name]);const r=Date.now()-t;return console.log(`✅ ${e.name} loaded from Pyodide CDN (${r}ms)`),{package:e.name,method:"pyodide",duration:r,success:!0,priority:e.priority}}catch(r){console.log(`📦 ${e.name} not available on CDN, trying pip...`),await this.installViaPipWithOptimizations(e.name);const n=Date.now()-t;return console.log(`✅ ${e.name} installed via pip fallback (${n}ms)`),{package:e.name,method:"pip-fallback",duration:n,success:!0,priority:e.priority}}}catch(r){const n=Date.now()-t;return console.warn(`❌ Failed to install ${e.name} after ${n}ms:`,r),{package:e.name,method:"failed",duration:n,success:!1,priority:e.priority,error:r}}}),r=await Promise.all(t);this.analyzeInstallationResults(r)}async installViaPipWithOptimizations(e){await this.pyodide.runPythonAsync(`\ntry:\n # Import piplite first\n import piplite\n # Use optimized pip installation with caching\n await piplite.install('${e}', keep_going=True, deps=True)\n print("✅ Successfully installed ${e} via optimized pip")\nexcept Exception as e:\n print("⚠️ Warning: Failed to install ${e}:", str(e))\n # Try alternative installation method\n try:\n import micropip\n await micropip.install('${e}', keep_going=True)\n print("✅ Successfully installed ${e} via micropip fallback")\n except Exception as e2:\n print("❌ Both pip methods failed for ${e}:", str(e2))\n raise e2\n`)}analyzeInstallationResults(e){const t=e.filter(e=>e.success),r=e.filter(e=>!e.success),n=t.filter(e=>"pyodide"===e.method),s=t.filter(e=>"pip"===e.method),o=t.filter(e=>"pip-fallback"===e.method),i=Math.max(...e.map(e=>e.duration)),a=e.reduce((e,t)=>e+t.duration,0)/e.length,c=e.reduce((e,t)=>e+t.duration,0);console.log("🎯 INTELLIGENT INSTALLATION COMPLETE!"),console.log(`📊 Results: ${t.length}/${e.length} successful`),console.log(`⚡ Pyodide CDN: ${n.length} packages`),console.log(`📦 Direct pip: ${s.length} packages`),console.log(`🔄 Pip fallback: ${o.length} packages`),console.log(`❌ Failed: ${r.length} packages`),console.log(`⏱️ Total time: ${i}ms (vs ~${c}ms sequential)`),console.log(`🚀 Speed improvement: ~${Math.round(c/i)}x faster`),console.log(`📈 Average per package: ${Math.round(a)}ms`),r.length>0&&(console.warn(`⚠️ Failed packages: ${r.map(e=>e.package).join(", ")}`),r.forEach(e=>{console.warn(` - ${e.package}: ${e.error?.message||"Unknown error"}`)}));const l=Math.min(...t.map(e=>e.duration)),u=Math.max(...t.map(e=>e.duration));console.log(`📊 Performance range: ${l}ms (fastest) to ${u}ms (slowest)`)}async initGlobals(){console.log("Initializing globals...");const{globals:e}=this.pyodide;this._kernel=e.get("pyodide_kernel").kernel_instance.copy(),this._stdout_stream=e.get("pyodide_kernel").stdout_stream.copy(),this._stderr_stream=e.get("pyodide_kernel").stderr_stream.copy(),this._interpreter=this._kernel.interpreter.copy(),this._interpreter.send_comm=this.sendComm.bind(this),this.setupCallbacks()}setupCallbacks(){const e=(e,t)=>{const r={name:this.formatResult(e),text:this.formatResult(t)};this._sendMessage({parentHeader:this.formatResult(this._parent_header).header,bundle:r,type:"stream"})};this._stdout_stream.publish_stream_callback=e,this._stderr_stream.publish_stream_callback=e,this._interpreter.display_pub.clear_output_callback=e=>{const t={wait:this.formatResult(e)};this._sendMessage({parentHeader:this.formatResult(this._parent_header).header,bundle:t,type:"clear_output"})},this._interpreter.display_pub.display_data_callback=(e,t,r)=>{const n={data:this.formatResult(e),metadata:this.formatResult(t),transient:this.formatResult(r)};this._sendMessage({parentHeader:this.formatResult(this._parent_header).header,bundle:n,type:"display_data"})},this._interpreter.display_pub.update_display_data_callback=(e,t,r)=>{const n={data:this.formatResult(e),metadata:this.formatResult(t),transient:this.formatResult(r)};this._sendMessage({parentHeader:this.formatResult(this._parent_header).header,bundle:n,type:"update_display_data"})},this._interpreter.displayhook.publish_execution_result=(e,t,r)=>{const n={execution_count:e,data:this.formatResult(t),metadata:this.formatResult(r)};this._sendMessage({parentHeader:this.formatResult(this._parent_header).header,bundle:n,type:"execute_result"})},this._interpreter.input=this.input.bind(this),this._interpreter.getpass=this.getpass.bind(this)}_sendMessage(e){this._processMessage(e)}_processMessage(e){if(!e.type)return;let t;switch(e.type){case"stream":{const r=e.bundle??{name:"stdout",text:""};super.emit(c.z.STREAM,r),t=r;break}case"input_request":{const r=e.content??{prompt:"",password:!1};super.emit(c.z.INPUT_REQUEST,r),t=r;break}case"display_data":{const r=e.bundle??{data:{},metadata:{},transient:{}};super.emit(c.z.DISPLAY_DATA,r),t=r;break}case"update_display_data":{const r=e.bundle??{data:{},metadata:{},transient:{}};super.emit(c.z.UPDATE_DISPLAY_DATA,r),t=r;break}case"clear_output":{const r=e.bundle??{wait:!1};super.emit(c.z.CLEAR_OUTPUT,r),t=r;break}case"execute_result":{const r=e.bundle??{execution_count:this.executionCount,data:{},metadata:{}};super.emit(c.z.EXECUTE_RESULT,r),t=r;break}case"execute_error":{const r=e.bundle??{ename:"",evalue:"",traceback:[]};super.emit(c.z.EXECUTE_ERROR,r),t=r;break}case"comm_open":case"comm_msg":case"comm_close":{const r=e.content??{};super.emit(e.type,r,e.metadata,e.buffers),t={content:r,metadata:e.metadata,buffers:e.buffers};break}}t&&super.emit(c.z.ALL,{type:e.type,data:t})}isInitialized(){return this.initialized}async setup(e){await this.initialize(),this._parent_header=this.pyodide.toPy(e||{})}async execute(e,t={}){const r=[];try{for await(const n of this.executeStream(e,t))r.push(n);const n={outputs:[],data:{},metadata:{},execution_count:this.executionCount};for(const e of r)if("stream"===e.type)n.stdout||(n.stdout=""),n.stderr||(n.stderr=""),"stdout"===e.data.name?n.stdout+=e.data.text:"stderr"===e.data.name&&(n.stderr+=e.data.text),n.outputs.push(e.data);else if("display_data"===e.type||"execute_result"===e.type)e.data.data&&Object.assign(n.data,e.data.data),e.data.metadata&&Object.assign(n.metadata,e.data.metadata),n.outputs.push(e.data);else{if("execute_error"===e.type||"error"===e.type){const t=e.data;return{success:!1,error:new Error(`${t.ename}: ${t.evalue}`),ename:t.ename,evalue:t.evalue,traceback:t.traceback,outputs:n.outputs}}n.outputs.push(e)}return n.success=!0,this.autoSyncFs&&await this.syncAllNativeFs(),n}catch(e){return console.error("[KERNEL] Execute error:",e),{success:!1,error:e instanceof Error?e:new Error(String(e))}}}formatResult(e){if(!(e instanceof this.pyodide.ffi.PyProxy))return e;try{const t=e.toJs();return this.mapToObject(t)}catch(e){return console.error("Error formatting result:",e),{status:"error",error:String(e)}}}mapToObject(e){const t=e instanceof Array?[]:{};return e.forEach((e,r)=>{t[r]=e instanceof Map||e instanceof Array?this.mapToObject(e):e}),t}async inputReply(e){this._resolveInputReply&&(this._resolveInputReply(e),this._resolveInputReply=null)}async sendInputRequest(e,t){const r={prompt:e,password:t};this._sendMessage({type:"input_request",content:r,parentHeader:this.formatResult(this._parent_header).header})}async getpass(e){e=void 0===e?"":e,await this.sendInputRequest(e,!0);const t=new Promise(e=>{this._resolveInputReply=e});return(await t).value}async input(e){e=void 0===e?"":e,await this.sendInputRequest(e,!1);const t=new Promise(e=>{this._resolveInputReply=e});return(await t).value}async sendComm(e,t,r,n,s){this._sendMessage({type:e,content:this.formatResult(t),metadata:this.formatResult(r),ident:this.formatResult(n),buffers:this.formatResult(s),parentHeader:this.formatResult(this._parent_header).header})}async complete(e,t,r={}){await this.setup(r);const n=this._kernel.complete(e,t);return this.formatResult(n)}async inspect(e,t,r,n={}){await this.setup(n);const s=this._kernel.inspect(e,t,r);return this.formatResult(s)}async isComplete(e,t={}){await this.setup(t);const r=this._kernel.is_complete(e);return this.formatResult(r)}async commInfo(e,t={}){await this.setup(t);const r=this._kernel.comm_info(e);return{comms:this.formatResult(r),status:"ok"}}async commOpen(e,t={}){await this.setup(t);const r=this._kernel.comm_manager.comm_open(this.pyodide.toPy(null),this.pyodide.toPy(null),this.pyodide.toPy(e));return this.formatResult(r)}async commMsg(e,t={}){await this.setup(t);const r=this._kernel.comm_manager.comm_msg(this.pyodide.toPy(null),this.pyodide.toPy(null),this.pyodide.toPy(e));return this.formatResult(r)}async commClose(e,t={}){await this.setup(t);const r=this._kernel.comm_manager.comm_close(this.pyodide.toPy(null),this.pyodide.toPy(null),this.pyodide.toPy(e));return this.formatResult(r)}async*executeStream(e,t={}){this.initialized||await this.initialize();try{this._status="busy",super.emit(c.z.KERNEL_BUSY,{}),await this.setup(t);const r=[];let n=!1,s=null,o=null;const i=e=>{r.push(e)};super.on(c.z.ALL,i);try{for(this._kernel.run(e).then(e=>{console.log("[KERNEL] Python execution finished"),s=this.formatResult(e),s&&"error"===s.status&&(console.log("[KERNEL] Execution completed with error status, emitting execute_error event"),this._sendMessage({parentHeader:this.formatResult(this._parent_header).header,bundle:{ename:s.ename||"Error",evalue:s.evalue||"Unknown error",traceback:s.traceback||[]},type:"execute_error"})),setTimeout(()=>{n=!0},100)}).catch(e=>{console.error("[KERNEL] Python execution error:",e),o=e instanceof Error?e:new Error(String(e)),setTimeout(()=>{n=!0},100)});!n||r.length>0;)if(r.length>0){const e=r.shift();yield e}else n||await new Promise(e=>setTimeout(e,10));if(this._status="active",super.emit(c.z.KERNEL_IDLE,{}),o)return{success:!1,error:o,result:s};if(s&&"error"===s.status){const e=`${s.ename||"Error"}: ${s.evalue||"Unknown error"}`;return{success:!1,error:new Error(e),result:s}}return this.autoSyncFs&&await this.syncAllNativeFs(),{success:!0,result:s}}finally{super.off(c.z.ALL,i)}}catch(e){return console.error("[KERNEL] ExecuteStream error:",e),this._status="active",super.emit(c.z.KERNEL_IDLE,{}),{success:!1,error:e instanceof Error?e:new Error(String(e))}}}async interrupt(){if(!this.initialized||!this.pyodide)return console.warn("[KERNEL] Cannot interrupt: kernel not initialized"),!1;console.log("[KERNEL] Attempting to interrupt execution...");try{if(this._interruptBuffer&&this._interruptSupported&&(console.log("[KERNEL] Using interrupt buffer method"),this._interruptBuffer[0]=2,await new Promise(e=>setTimeout(e,100)),0===this._interruptBuffer[0]))return console.log("[KERNEL] Interrupt processed successfully via buffer"),!0;try{return console.log("[KERNEL] Attempting Python-level interrupt"),await this.pyodide.runPythonAsync("\nimport sys\nimport _thread\n# Try to interrupt the main thread\n_thread.interrupt_main()\n"),console.log("[KERNEL] Python interrupt signal sent"),!0}catch(e){console.log("[KERNEL] Python interrupt attempt failed:",e)}return this._interpreter&&"function"==typeof this._interpreter.interrupt?(console.log("[KERNEL] Using interpreter interrupt method"),this._interpreter.interrupt(),!0):(console.log("[KERNEL] Sending interrupt messages for UI feedback"),this._sendMessage({type:"stream",bundle:{name:"stderr",text:"KeyboardInterrupt: Execution interrupted by user\n"}}),this._sendMessage({type:"execute_error",bundle:{ename:"KeyboardInterrupt",evalue:"Execution interrupted by user",traceback:["KeyboardInterrupt: Execution interrupted by user"]}}),!1)}catch(e){return console.error("[KERNEL] Error during interrupt:",e),!1}}setInterruptBuffer(e){this._interruptBuffer=e;try{this.pyodide&&"function"==typeof this.pyodide.setInterruptBuffer?(this.pyodide.setInterruptBuffer(e),this._interruptSupported=!0):(console.warn("[KERNEL] pyodide.setInterruptBuffer not available, interrupt support limited"),this._interruptSupported=!1)}catch(e){console.error("[KERNEL] Error setting interrupt buffer:",e),this._interruptSupported=!1}}async verifyPermission(e,t){const r={};if("readwrite"===t&&(r.mode="readwrite"),console.log(`[KERNEL] Verifying ${t} permission for file handle...`),"function"!=typeof e.queryPermission)return console.warn("[KERNEL] queryPermission not supported, assuming permission granted"),!0;try{const n=await e.queryPermission(r);if(console.log("[KERNEL] Query result:",n),"granted"===n)return console.log(`[KERNEL] Permission already granted for ${t} access`),!0;if("function"==typeof e.requestPermission){console.log(`[KERNEL] Requesting ${t} permission from user...`);try{const n=await e.requestPermission(r);if(console.log("[KERNEL] Request result:",n),"granted"===n)return console.log(`[KERNEL] Permission granted for ${t} access`),!0}catch(e){console.log("[KERNEL] Permission request failed or was dismissed:",e)}}return console.log(`[KERNEL] ${t} permission not granted`),!1}catch(e){return console.error("[KERNEL] Error checking permission:",e),console.warn("[KERNEL] Permission check failed, assuming granted as fallback"),!0}}async mountFS(e,t,r="read"){if(!this.initialized||!this.pyodide)throw new Error("Kernel must be initialized before mounting filesystem");if("function"!=typeof this.pyodide.mountNativeFS)throw new Error("pyodide.mountNativeFS is not available. Make sure you're using Pyodide 0.23.0 or later.");let n=t;if(!n){if("undefined"!=typeof WorkerGlobalScope&&self instanceof WorkerGlobalScope)throw new Error("Cannot show directory picker in worker context. Please provide a dirHandle parameter.");if("undefined"==typeof window||!("showDirectoryPicker"in window))throw new Error("showDirectoryPicker is not supported in this browser. Please provide a dirHandle parameter.");try{n=await window.showDirectoryPicker({mode:"readwrite"})}catch(e){throw new Error(`Failed to show directory picker: ${e instanceof Error?e.message:String(e)}`)}}if(!n)throw new Error("No directory handle available");if(console.log(`[KERNEL] Verifying ${r} permissions before mounting...`),!await this.verifyPermission(n,r))throw"readwrite"===r?new Error("Failed to obtain write permission for directory. The browser may only be offering read permission. Try mounting with permission: 'read' if you only need to read files, or ensure the browser supports write access to this directory."):new Error(`Failed to obtain ${r} permission for directory.`);const s=r;try{console.log(`[KERNEL] Mounting native filesystem at ${e} with ${s} permission`);try{if(this.pyodide.FS.analyzePath(e).exists){console.log(`[KERNEL] Path ${e} exists, checking if it's a mount point`);try{await this.pyodide.FS.unmount(e),console.log(`[KERNEL] Successfully unmounted existing filesystem at ${e}`)}catch(e){console.log(`[KERNEL] Unmount failed (this is normal if not mounted): ${e}`)}try{this.pyodide.FS.rmdir(e),console.log(`[KERNEL] Removed existing directory at ${e}`)}catch(e){console.log(`[KERNEL] Could not remove directory (this is normal): ${e}`)}}}catch(e){console.log(`[KERNEL] Path analysis failed (path probably doesn't exist): ${e}`)}const t=e.substring(0,e.lastIndexOf("/"))||"/";try{"/"===t||this.pyodide.FS.analyzePath(t).exists||(this.pyodide.FS.mkdir(t),console.log(`[KERNEL] Created parent directory ${t}`))}catch(e){console.log(`[KERNEL] Parent directory handling: ${e}`)}const r=await this.pyodide.mountNativeFS(e,n);console.log(`[KERNEL] Successfully mounted native filesystem at ${e} with ${s} permission`);const o={syncfs:async()=>{if("read"===s)throw new Error(`Cannot sync read-only filesystem at ${e}. Use upgradeFilesystemPermission() to request write access.`);try{await r.syncfs(),console.log(`[KERNEL] Synced changes to native filesystem at ${e}`)}catch(e){throw new Error(`Failed to sync filesystem: ${e instanceof Error?e.message:String(e)}`)}},dirHandle:n,permission:s,nativefs:r};return this.nativeFsHandles.set(e,o),{syncfs:o.syncfs}}catch(e){throw new Error(`Failed to mount native filesystem: ${e instanceof Error?e.message:String(e)}`)}}async syncAllNativeFs(){if(0===this.nativeFsHandles.size)return;const e=[];for(const[t,r]of this.nativeFsHandles.entries())if("read"!==r.permission)try{await r.syncfs(),e.push({mountPath:t,success:!0}),console.log(`[KERNEL] Successfully synced filesystem at ${t}`)}catch(n){const s=n instanceof Error?n.message:String(n);if(s.includes("not allowed by the user agent")||s.includes("getFileHandle")||s.includes("permission")){console.warn(`[KERNEL] Permission error syncing ${t}, attempting recovery...`);try{if(await this.verifyPermission(r.dirHandle,r.permission)){console.log(`[KERNEL] Permission recovered for ${t}, attempting remount...`);const n=await this.pyodide.mountNativeFS(t,r.dirHandle);r.nativefs=n,r.syncfs=async()=>{try{await n.syncfs(),console.log(`[KERNEL] Synced changes to native filesystem at ${t}`)}catch(e){throw new Error(`Failed to sync filesystem: ${e instanceof Error?e.message:String(e)}`)}},await r.syncfs(),e.push({mountPath:t,success:!0}),console.log(`[KERNEL] Successfully recovered and synced filesystem at ${t}`)}else e.push({mountPath:t,success:!1,error:"Permission denied by user"}),console.warn(`[KERNEL] User denied permission for ${t}, skipping sync`)}catch(r){const n=r instanceof Error?r.message:String(r);e.push({mountPath:t,success:!1,error:`Recovery failed: ${n}`}),console.error(`[KERNEL] Failed to recover permissions for ${t}:`,r)}}else e.push({mountPath:t,success:!1,error:s}),console.error(`[KERNEL] Non-permission error syncing ${t}:`,n)}else e.push({mountPath:t,success:!0,skipped:!0}),console.log(`[KERNEL] Skipping sync for read-only filesystem at ${t}`);const t=e.filter(e=>e.success&&!e.skipped).length,r=e.filter(e=>e.skipped).length,n=e.filter(e=>!e.success);if(t>0||r>0){const n=[];t>0&&n.push(`${t} synced`),r>0&&n.push(`${r} read-only skipped`),console.log(`[KERNEL] Auto-sync completed: ${n.join(", ")} (${e.length} total filesystems)`)}n.length>0&&console.warn("[KERNEL] Auto-sync issues:",n.map(e=>`${e.mountPath}: ${e.error}`))}getMountedFilesystems(){const e=[];for(const[t,r]of this.nativeFsHandles.entries())e.push({mountPath:t,permission:r.permission,canSync:"readwrite"===r.permission});return e}async syncFilesystem(e){const t=this.nativeFsHandles.get(e);if(!t)return{success:!1,error:`No filesystem mounted at ${e}`};if("read"===t.permission)return{success:!1,error:`Cannot sync read-only filesystem at ${e}. Mount with 'readwrite' permission to enable syncing.`};try{return await t.syncfs(),{success:!0}}catch(r){const n=r instanceof Error?r.message:String(r);if(n.includes("not allowed by the user agent")||n.includes("getFileHandle")||n.includes("permission")){console.log(`[KERNEL] Permission error syncing ${e}, attempting recovery...`);try{if(await this.verifyPermission(t.dirHandle,t.permission)){const r=await this.pyodide.mountNativeFS(e,t.dirHandle);return t.nativefs=r,t.syncfs=async()=>{try{await r.syncfs(),console.log(`[KERNEL] Synced changes to native filesystem at ${e}`)}catch(e){throw new Error(`Failed to sync filesystem: ${e instanceof Error?e.message:String(e)}`)}},await t.syncfs(),{success:!0}}return{success:!1,error:"Permission denied by user"}}catch(e){return{success:!1,error:`Recovery failed: ${e instanceof Error?e.message:String(e)}`}}}return{success:!1,error:n}}}async upgradeFilesystemPermission(e){const t=this.nativeFsHandles.get(e);if(!t)return{success:!1,error:`No filesystem mounted at ${e}`};if("readwrite"===t.permission)return{success:!0,error:`Filesystem at ${e} already has readwrite permission`};try{if(console.log(`[KERNEL] Attempting to upgrade ${e} to readwrite permission...`),!await this.verifyPermission(t.dirHandle,"readwrite"))return{success:!1,error:"User denied write permission or browser does not support write access to this directory"};const r=await this.pyodide.mountNativeFS(e,t.dirHandle);return t.permission="readwrite",t.nativefs=r,t.syncfs=async()=>{try{await r.syncfs(),console.log(`[KERNEL] Synced changes to native filesystem at ${e}`)}catch(e){throw new Error(`Failed to sync filesystem: ${e instanceof Error?e.message:String(e)}`)}},console.log(`[KERNEL] Successfully upgraded ${e} to readwrite permission`),{success:!0}}catch(e){return{success:!1,error:`Failed to upgrade permission: ${e instanceof Error?e.message:String(e)}`}}}async setEnvironmentVariables(){if(0===Object.keys(this.environmentVariables).length)return;const e=Date.now();console.log(`🌍 Setting ${Object.keys(this.environmentVariables).length} environment variables...`);try{for(const[e,t]of Object.entries(this.environmentVariables)){let r;r=null==t?"":String(t),await this.pyodide.runPythonAsync(`\nimport os\nos.environ[${JSON.stringify(e)}] = ${JSON.stringify(r)}\n`)}const t=Date.now()-e;console.log(`⚡ Environment variables set in ${t}ms`)}catch(e){throw console.error("❌ Failed to set environment variables:",e),e}}}},696:(e,t,r)=>{var n;r.d(t,{z:()=>n}),function(e){e.STREAM="stream",e.DISPLAY_DATA="display_data",e.UPDATE_DISPLAY_DATA="update_display_data",e.EXECUTE_RESULT="execute_result",e.EXECUTE_ERROR="execute_error",e.EXECUTE_REQUEST="execute_request",e.INPUT_REQUEST="input_request",e.CLEAR_OUTPUT="clear_output",e.COMM_OPEN="comm_open",e.COMM_MSG="comm_msg",e.COMM_CLOSE="comm_close",e.KERNEL_READY="kernel_ready",e.KERNEL_BUSY="kernel_busy",e.KERNEL_IDLE="kernel_idle",e.ALL="*",e.EXECUTION_STALLED="execution_stalled",e.KERNEL_UNRECOVERABLE="kernel_unrecoverable",e.EXECUTION_INTERRUPTED="execution_interrupted",e.KERNEL_RESTARTED="kernel_restarted",e.KERNEL_TERMINATED="kernel_terminated"}(n||(n={}))}},t={};function r(n){var s=t[n];if(void 0!==s)return s.exports;var o=t[n]={exports:{}};return e[n](o,o.exports,r),o.exports}r.d=(e,t)=>{for(var n in t)r.o(t,n)&&!r.o(e,n)&&Object.defineProperty(e,n,{enumerable:!0,get:t[n]})},r.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t);var n=r(590),s=r(696);const o=new(r(637).MB);let i=null,a={},c=new Map,l=null;function u(e){return e&&"object"==typeof e&&("KeyboardInterrupt"===e.type||e.message&&e.message.includes("KeyboardInterrupt"))}function p(){i?Object.values(s.z).forEach(e=>{const t=t=>{i&&i.postMessage({type:e,data:t})};c.set(e,t),o.on(e,t)}):console.error("[WORKER] Cannot set up event forwarding: no event port available")}self.addEventListener("error",e=>{console.error("[WORKER] Global error caught:",e.error),e.preventDefault()}),self.addEventListener("unhandledrejection",e=>{u(e.reason)?(console.log("[WORKER] KeyboardInterrupt caught in unhandled rejection handler - this is expected during interrupts"),i&&i.postMessage({type:s.z.EXECUTE_ERROR,data:{ename:"KeyboardInterrupt",evalue:"Execution interrupted by user",traceback:["KeyboardInterrupt: Execution interrupted by user"]}})):console.error("[WORKER] Unhandled promise rejection:",e.reason),e.preventDefault()}),self.addEventListener("message",e=>{if("SET_EVENT_PORT"===e.data?.type&&e.data?.port)!function(){if(c.size>0){for(const[e,t]of c.entries())o.off(e,t);c.clear()}i&&(i.close(),i=null)}(),i=e.data.port,o.isInitialized()&&p();else if("INITIALIZE_KERNEL"===e.data?.type)a=e.data.options||{},async function(e){try{await o.initialize(e),l&&"function"==typeof o.setInterruptBuffer&&o.setInterruptBuffer(l),p(),i&&i.postMessage({type:"KERNEL_INITIALIZED",data:{success:!0}})}catch(e){throw console.error("Kernel initialization failed:",e),e}}(a).catch(e=>{console.error("[WORKER] Error initializing kernel in worker:",e),i&&i.postMessage({type:s.z.EXECUTE_ERROR,data:{ename:"WorkerInitError",evalue:`Failed to initialize kernel: ${e.message}`,traceback:[e.stack||""]}})});else if("SET_INTERRUPT_BUFFER"===e.data?.type){l=e.data.buffer,o.isInitialized()&&l&&"function"==typeof o.setInterruptBuffer?(o.setInterruptBuffer(l),console.log("[WORKER] Interrupt buffer set in pyodide kernel")):l&&console.log("[WORKER] Interrupt buffer stored, will be set when kernel initializes");const t={type:"INTERRUPT_BUFFER_SET",data:{success:!0}};i&&i.postMessage(t),self.postMessage(t)}else if("INTERRUPT_KERNEL"===e.data?.type)if(l){l[0]=2;const e={type:"INTERRUPT_TRIGGERED",data:{success:!0,method:"buffer"}};i&&i.postMessage(e),self.postMessage(e)}else if(console.log("[WORKER] No interrupt buffer available, trying kernel.interrupt()"),"function"==typeof o.interrupt)o.interrupt().then(e=>{const t={type:"INTERRUPT_TRIGGERED",data:{success:e,method:"kernel"}};i&&i.postMessage(t),self.postMessage(t)}).catch(e=>{console.error("[WORKER] Error during kernel interrupt:",e);const t={type:"INTERRUPT_TRIGGERED",data:{success:!1,error:e.message,method:"kernel"}};i&&i.postMessage(t),self.postMessage(t)});else{console.warn("[WORKER] No interrupt method available");const e={type:"INTERRUPT_TRIGGERED",data:{success:!1,error:"No interrupt method available",method:"none"}};i&&i.postMessage(e),self.postMessage(e)}}),self.addEventListener("beforeunload",async()=>{try{i&&i.postMessage({type:"WORKER_TERMINATING",data:{message:"Worker is shutting down"}})}catch(e){console.error("Error during worker cleanup:",e)}});const d={initialize:async e=>{try{return void await o.initialize(e)}catch(e){throw console.error("[WORKER] Initialize error:",e),e}},execute:async(e,t)=>{try{return await o.execute(e,t)}catch(e){return console.error("[WORKER] Execute error:",e),u(e)?(console.log("[WORKER] KeyboardInterrupt caught in execute method"),{success:!1,error:new Error("KeyboardInterrupt: Execution interrupted by user"),result:{payload:[],status:"error",ename:"KeyboardInterrupt",evalue:"Execution interrupted by user",traceback:["KeyboardInterrupt: Execution interrupted by user"]}}):{success:!1,error:e instanceof Error?e:new Error(String(e)),result:{payload:[],status:"error",ename:e instanceof Error?e.constructor.name:"Error",evalue:e instanceof Error?e.message:String(e),traceback:e instanceof Error&&e.stack?e.stack.split("\n"):[String(e)]}}}},isInitialized:()=>{try{return o.isInitialized()}catch(e){return console.error("[WORKER] IsInitialized error:",e),!1}},inputReply:async e=>{try{await o.inputReply(e)}catch(e){throw console.error("[WORKER] InputReply error:",e),e}},getStatus:async()=>{try{return await o.getStatus()}catch(e){return console.error("[WORKER] getStatus error:",e),"unknown"}},interrupt:async()=>{try{return"function"==typeof o.interrupt?await o.interrupt():(console.warn("[WORKER] Kernel does not support interrupt method"),!1)}catch(e){return console.error("[WORKER] Interrupt error:",e),!1}},setInterruptBuffer:e=>{try{return"function"==typeof o.setInterruptBuffer?(o.setInterruptBuffer(e),!0):(console.warn("[WORKER] Kernel does not support setInterruptBuffer method"),!1)}catch(e){return console.error("[WORKER] setInterruptBuffer error:",e),!1}},complete:async(e,t,r)=>{try{return"function"==typeof o.complete?await o.complete(e,t,r):(console.warn("[WORKER] Kernel does not support complete method"),{status:"error",error:"Completion not supported"})}catch(e){return console.error("[WORKER] Complete error:",e),{status:"error",error:String(e)}}},inspect:async(e,t,r,n)=>{try{return"function"==typeof o.inspect?await o.inspect(e,t,r,n):(console.warn("[WORKER] Kernel does not support inspect method"),{status:"error",error:"Inspection not supported"})}catch(e){return console.error("[WORKER] Inspect error:",e),{status:"error",error:String(e)}}},isComplete:async(e,t)=>{try{return"function"==typeof o.isComplete?await o.isComplete(e,t):(console.warn("[WORKER] Kernel does not support isComplete method"),{status:"unknown"})}catch(e){return console.error("[WORKER] IsComplete error:",e),{status:"error",error:String(e)}}},mountFS:async(e,t,r)=>{try{if("function"==typeof o.mountFS){if(!t)throw new Error("Cannot show directory picker in worker context. Please provide a dirHandle parameter when calling mountFS on a worker kernel.");const s=await o.mountFS(e,t,r);return n.BX(s)}throw console.warn("[WORKER] Kernel does not support mountFS method"),new Error("mountFS is not supported by this kernel")}catch(e){throw console.error("[WORKER] MountFS error:",e),e}},commInfo:async(e,t)=>{try{return"function"==typeof o.commInfo?await o.commInfo(e,t):(console.warn("[WORKER] Kernel does not support commInfo method"),{comms:{},status:"ok"})}catch(e){return console.error("[WORKER] CommInfo error:",e),{comms:{},status:"error",error:String(e)}}},commOpen:async(e,t)=>{try{return"function"==typeof o.commOpen?await o.commOpen(e,t):void console.warn("[WORKER] Kernel does not support commOpen method")}catch(e){return void console.error("[WORKER] CommOpen error:",e)}},commMsg:async(e,t)=>{try{return"function"==typeof o.commMsg?await o.commMsg(e,t):void console.warn("[WORKER] Kernel does not support commMsg method")}catch(e){return void console.error("[WORKER] CommMsg error:",e)}},commClose:async(e,t)=>{try{return"function"==typeof o.commClose?await o.commClose(e,t):void console.warn("[WORKER] Kernel does not support commClose method")}catch(e){return void console.error("[WORKER] CommClose error:",e)}}};try{n.p(d)}catch(e){console.error("Error exposing proxy:",e)} | ||
| //# sourceMappingURL=kernel.worker.min.js.map |
+62
-2
@@ -142,3 +142,3 @@ <!DOCTYPE html> | ||
| </button> | ||
| <button | ||
| <button | ||
| id="interruptBtn" | ||
@@ -150,3 +150,11 @@ class="bg-red-600 hover:bg-red-700 text-white font-medium py-2 px-4 rounded-lg transition-colors duration-200 disabled:opacity-50 disabled:cursor-not-allowed" | ||
| </button> | ||
| <button | ||
| <button | ||
| id="mountFolderBtn" | ||
| class="bg-purple-600 hover:bg-purple-700 text-white font-medium py-2 px-4 rounded-lg transition-colors duration-200 disabled:opacity-50 disabled:cursor-not-allowed" | ||
| disabled | ||
| title="Mount a local folder to /mnt" | ||
| > | ||
| 📁 Mount Folder | ||
| </button> | ||
| <button | ||
| id="clearBtn" | ||
@@ -867,2 +875,3 @@ class="bg-gray-600 hover:bg-gray-700 text-white font-medium py-2 px-4 rounded-lg transition-colors duration-200" | ||
| this.enableButton('interruptBtn'); | ||
| this.enableButton('mountFolderBtn'); | ||
| this.addOutput('✓ Web-python-kernel ready with streaming support!', 'result'); | ||
@@ -1132,2 +1141,53 @@ | ||
| document.getElementById('mountFolderBtn').addEventListener('click', async () => { | ||
| // Check if the File System Access API is supported | ||
| if (!('showDirectoryPicker' in window)) { | ||
| alert('❌ File System Access API is not supported in this browser.\n\nThis feature requires a Chromium-based browser (Chrome, Edge, Opera).\n\nFirefox and Safari do not support this API yet.'); | ||
| return; | ||
| } | ||
| try { | ||
| const dirHandle = await window.showDirectoryPicker({ | ||
| mode: 'readwrite', | ||
| }); | ||
| // Get the kernel instance | ||
| if (!kernelManager.kernelManager || !kernelManager.currentKernelId) { | ||
| alert('❌ Kernel is not initialized.'); | ||
| return; | ||
| } | ||
| const kernel = kernelManager.kernelManager.getKernel(kernelManager.currentKernelId); | ||
| if (!kernel || !kernel.kernel.mountFS) { | ||
| alert('❌ Kernel does not support mountFS.'); | ||
| return; | ||
| } | ||
| kernelManager.addOutput('📁 Mounting directory...', 'result'); | ||
| const nativefs = await kernel.kernel.mountFS('/mnt', dirHandle, 'readwrite'); | ||
| kernelManager.addOutput('✅ Successfully mounted directory to /mnt', 'result'); | ||
| kernelManager.addOutput('💡 You can now access files in the mounted directory from Python:', 'result'); | ||
| kernelManager.addOutput(' import os; print(os.listdir("/mnt"))', 'stdout'); | ||
| kernelManager.addOutput(' with open("/mnt/file.txt", "w") as f: f.write("Hello!")', 'stdout'); | ||
| kernelManager.addOutput('⚠️ Remember to sync changes: await nativefs.syncfs()', 'result'); | ||
| // Store the nativefs handle for later use | ||
| if (!window._mountedFs) { | ||
| window._mountedFs = {}; | ||
| } | ||
| window._mountedFs['/mnt'] = nativefs; | ||
| } catch (error) { | ||
| console.error('Mount folder error:', error); | ||
| if (error.name === 'AbortError') { | ||
| kernelManager.addOutput('ℹ️ Directory selection cancelled', 'result'); | ||
| } else { | ||
| kernelManager.addOutput(`❌ Failed to mount directory: ${error.message}`, 'stderr'); | ||
| } | ||
| } | ||
| }); | ||
| document.getElementById('clearBtn').addEventListener('click', () => { | ||
@@ -1134,0 +1194,0 @@ editor.setValue(''); |
+55
-1
@@ -10,3 +10,3 @@ declare class EventEmitter { | ||
| export { KernelEvents } from "./types"; | ||
| export type { IKernel, IKernelOptions, IFilesystemMountOptions, IKernelExecuteOptions, IMessage, IEventData, IEventEmitter } from "./types"; | ||
| export type { IKernel, IKernelOptions, IFilesystemMountOptions, IKernelExecuteOptions, IMessage, IEventData, IEventEmitter, INativeFSHandle } from "./types"; | ||
| export { KernelMode, KernelLanguage } from "./manager"; | ||
@@ -30,2 +30,4 @@ export declare class Kernel extends EventEmitter implements IKernel { | ||
| private environmentVariables; | ||
| private nativeFsHandles; | ||
| private autoSyncFs; | ||
| private readonly kernelId; | ||
@@ -185,2 +187,54 @@ constructor(); | ||
| /** | ||
| * Verify and request permission for a file system handle | ||
| * @private | ||
| */ | ||
| private verifyPermission; | ||
| /** | ||
| * Mount a native file system directory into the Pyodide filesystem | ||
| * @param mountPath The path where the directory should be mounted in the Python filesystem | ||
| * @param dirHandle Optional FileSystemDirectoryHandle. If null/undefined, shows directory picker | ||
| * @param permission Permission mode: | ||
| * - 'read': Read-only access, no syncing capabilities, auto-sync will be skipped (default) | ||
| * - 'readwrite': Full read/write access with syncing capabilities | ||
| * @returns Promise resolving to a handle with syncfs() method for syncing changes | ||
| * @note syncfs() will throw an error if called on a read-only mounted filesystem | ||
| * @note Many browsers only offer read permission initially. Explicitly request 'readwrite' if you need write access. | ||
| */ | ||
| mountFS(mountPath: string, dirHandle?: FileSystemDirectoryHandle | null, permission?: 'read' | 'readwrite'): Promise<{ | ||
| syncfs: () => Promise<void>; | ||
| }>; | ||
| /** | ||
| * Sync all mounted native filesystems with permission recovery | ||
| * Only syncs filesystems mounted with 'readwrite' permission | ||
| * @private | ||
| */ | ||
| private syncAllNativeFs; | ||
| /** | ||
| * Get information about mounted native filesystems and their permission status | ||
| * @returns Array of mounted filesystem information | ||
| */ | ||
| getMountedFilesystems(): Array<{ | ||
| mountPath: string; | ||
| permission: 'read' | 'readwrite'; | ||
| canSync: boolean; | ||
| }>; | ||
| /** | ||
| * Manually sync a specific mounted filesystem | ||
| * @param mountPath The path of the mounted filesystem to sync | ||
| * @returns Promise resolving to success status | ||
| */ | ||
| syncFilesystem(mountPath: string): Promise<{ | ||
| success: boolean; | ||
| error?: string; | ||
| }>; | ||
| /** | ||
| * Upgrade a mounted filesystem from read-only to read-write permission | ||
| * @param mountPath The path of the mounted filesystem to upgrade | ||
| * @returns Promise resolving to success status | ||
| */ | ||
| upgradeFilesystemPermission(mountPath: string): Promise<{ | ||
| success: boolean; | ||
| error?: string; | ||
| }>; | ||
| /** | ||
| * Set environment variables with performance optimization | ||
@@ -187,0 +241,0 @@ * OPTIMIZED: Parallel variable setting and validation with proper escaping and edge case handling |
@@ -1,1 +0,1 @@ | ||
| {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"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"} | ||
| {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"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"} |
@@ -42,3 +42,3 @@ declare class EventEmitter { | ||
| worker?: Worker; | ||
| created: Date; | ||
| created: string; | ||
| options: IManagerKernelOptions; | ||
@@ -68,2 +68,3 @@ isFromPool?: boolean; | ||
| lockFileURL?: string; | ||
| autoSyncFs?: boolean; | ||
| inactivityTimeout?: number; | ||
@@ -318,3 +319,3 @@ maxExecutionTime?: number; | ||
| status: "active" | "busy" | "unknown"; | ||
| created: Date; | ||
| created: string; | ||
| namespace?: string; | ||
@@ -321,0 +322,0 @@ deno?: { |
@@ -1,1 +0,1 @@ | ||
| {"version":3,"file":"manager.d.ts","sourceRoot":"","sources":["../../src/manager.ts"],"names":[],"mappings":"AAMA,cAAM,YAAY;IAChB,OAAO,CAAC,MAAM,CAAqC;IAEnD,EAAE,CAAC,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,QAAQ;IAOxC,GAAG,CAAC,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,QAAQ;IAQzC,cAAc,CAAC,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,QAAQ;IAIpD,IAAI,CAAC,SAAS,EAAE,MAAM,EAAE,GAAG,IAAI,EAAE,GAAG,EAAE;IAKtC,eAAe,CAAC,CAAC,EAAE,MAAM;CAG1B;AACD,OAAO,EAAE,YAAY,EAAE,OAAO,EAAkB,uBAAuB,EAAE,MAAM,SAAS,CAAC;AAIzF,OAAO,EAAE,YAAY,EAAE,CAAC;AAGxB,oBAAY,UAAU;IACpB,WAAW,gBAAgB;IAC3B,MAAM,WAAW;CAClB;AAGD,oBAAY,cAAc;IACxB,MAAM,WAAW;CAClB;AAYD,MAAM,WAAW,iBAAiB;IAChC,OAAO,EAAE,OAAO,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,OAAO,CAAC;IACpB,cAAc,EAAE,KAAK,CAAC;QACpB,IAAI,EAAE,UAAU,CAAC;QACjB,QAAQ,EAAE,cAAc,CAAC;KAC1B,CAAC,CAAC;CACJ;AAGD,MAAM,WAAW,qBAAqB;IACpC,IAAI,CAAC,EAAE,iBAAiB,CAAC;IACzB,kBAAkB,CAAC,EAAE,KAAK,CAAC;QACzB,IAAI,EAAE,UAAU,CAAC;QACjB,QAAQ,EAAE,cAAc,CAAC;KAC1B,CAAC,CAAC;IACH,gBAAgB,CAAC,EAAE,qBAAqB,GAAG,kBAAkB,GAAG,MAAM,CAAC;IACvE,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAGD,MAAM,WAAW,eAAe;IAC9B,EAAE,EAAE,MAAM,CAAC;IACX,MAAM,EAAE,OAAO,CAAC;IAChB,IAAI,EAAE,UAAU,CAAC;IACjB,QAAQ,EAAE,cAAc,CAAC;IACzB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,IAAI,CAAC;IACd,OAAO,EAAE,qBAAqB,CAAC;IAC/B,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CAC1B;AAGD,MAAM,WAAW,gBAAgB;IAC/B,IAAI,CAAC,EAAE,CAAC,MAAM,GAAG,GAAG,CAAC,EAAE,CAAC;IACxB,KAAK,CAAC,EAAE,CAAC,MAAM,GAAG,GAAG,CAAC,EAAE,CAAC;IACzB,GAAG,CAAC,EAAE,MAAM,EAAE,CAAC;IACf,GAAG,CAAC,EAAE,MAAM,EAAE,CAAC;IACf,GAAG,CAAC,EAAE,MAAM,EAAE,CAAC;IACf,GAAG,CAAC,EAAE,MAAM,EAAE,CAAC;IACf,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB;AAGD,MAAM,WAAW,qBAAqB;IACpC,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,IAAI,CAAC,EAAE,UAAU,CAAC;IAClB,IAAI,CAAC,EAAE,cAAc,CAAC;IACtB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,IAAI,CAAC,EAAE;QACL,WAAW,CAAC,EAAE,gBAAgB,CAAC;KAChC,CAAC;IACF,UAAU,CAAC,EAAE,uBAAuB,CAAC;IACrC,GAAG,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC7B,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,gBAAgB,CAAC,EAAE,MAAM,CAAC;CAC3B;AAQD;;;GAGG;AACH,qBAAa,aAAc,SAAQ,YAAY;IAC7C,OAAO,CAAC,OAAO,CAA2C;IAE1D,OAAO,CAAC,gBAAgB,CAAuE;IAE/F,OAAO,CAAC,gBAAgB,CAAkC;IAE1D,OAAO,CAAC,gBAAgB,CAA+B;IAEvD,OAAO,CAAC,iBAAiB,CAAuC;IAEhE,OAAO,CAAC,iBAAiB,CAA4C;IAErE,OAAO,CAAC,mBAAmB,CAA+C;IAE1E,OAAO,CAAC,iBAAiB,CAA8F;IAGvH,OAAO,CAAC,gBAAgB,CAAwD;IAGhF,OAAO,CAAC,IAAI,CAAsD;IAClE,OAAO,CAAC,UAAU,CAAoB;IACtC,OAAO,CAAC,YAAY,CAAkB;IAEtC,OAAO,CAAC,oBAAoB,CAAmC;IAG/D,OAAO,CAAC,kBAAkB,CAGvB;IAGH,OAAO,CAAC,gBAAgB,CAAsC;IAG9D,OAAO,CAAC,gBAAgB,CAAsD;IAG9E,OAAO,CAAC,SAAS,CAAqB;IAEtC;;;;OAIG;IACH,OAAO,CAAC,gBAAgB;IAuCxB;;;OAGG;IACH,OAAO,CAAC,mBAAmB;IAO3B;;;OAGG;IACH,OAAO,CAAC,6BAA6B;IAarC;;;OAGG;IACH,OAAO,CAAC,oBAAoB;IAO5B;;;OAGG;IACH,OAAO,CAAC,qBAAqB;IAc7B;;;OAGG;IACH,OAAO,CAAC,wBAAwB;gBAiBpB,OAAO,GAAE,qBAA0B;IAgD/C;;;;;;OAMG;IACH,OAAO,CAAC,UAAU;IAIlB;;;;;;OAMG;IACH,OAAO,CAAC,WAAW;IA2BnB;;;;;;OAMG;IACH,OAAO,CAAC,SAAS;IAsCjB;;;;;OAKG;YACW,gBAAgB;IAe9B;;;;;OAKG;YACW,UAAU;IAyCxB;;;;;;OAMG;IACH,OAAO,CAAC,uBAAuB;IAc/B;;;;;;OAMG;YACW,gBAAgB;IAyD9B;;;OAGG;YACW,WAAW;IAwBzB;;;;;OAKG;IACH,OAAO,CAAC,UAAU;IAmBlB;;;;;;;OAOG;IACH,OAAO,CAAC,kBAAkB;IA6B1B;;;OAGG;IACI,YAAY,IAAI,MAAM,CAAC,MAAM,EAAE;QAAE,SAAS,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC;IAa3E;;;OAGG;IACI,aAAa,IAAI;QACtB,OAAO,EAAE,OAAO,CAAC;QACjB,QAAQ,EAAE,MAAM,CAAC;QACjB,UAAU,EAAE,OAAO,CAAC;QACpB,cAAc,EAAE,KAAK,CAAC;YACpB,IAAI,EAAE,UAAU,CAAC;YACjB,QAAQ,EAAE,cAAc,CAAC;SAC1B,CAAC,CAAC;QACH,YAAY,EAAE,OAAO,CAAC;KACvB;IAUD;;;OAGG;IACI,YAAY,IAAI,MAAM,GAAG,SAAS;IAIzC;;;;;;;;OAQG;IACI,YAAY,CAAC,GAAG,EAAE,MAAM,GAAG,SAAS,GAAG,IAAI;IAIlD;;;;;;;;;;;;OAYG;IACU,YAAY,CAAC,OAAO,GAAE,qBAA0B,GAAG,OAAO,CAAC,MAAM,CAAC;IA2E/E;;;;;;;OAOG;YACW,0BAA0B;IAsFxC;;;;;;;OAOG;IACH,OAAO,CAAC,eAAe;IAqEvB;;;;;;;;OAQG;YACW,oBAAoB;IA8ClC;;;;OAIG;YACW,sBAAsB;IA8CpC;;;;OAIG;YACW,kBAAkB;IAmOhC;;;OAGG;IACH,OAAO,CAAC,oBAAoB;IAmB5B;;;;OAIG;IACI,SAAS,CAAC,EAAE,EAAE,MAAM,GAAG,eAAe,GAAG,SAAS;IAIzD;;;OAGG;IACI,YAAY,IAAI,MAAM,EAAE;IAI/B;;;;OAIG;IACU,WAAW,CAAC,SAAS,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,KAAK,CAAC;QAC1D,EAAE,EAAE,MAAM,CAAC;QACX,IAAI,EAAE,UAAU,CAAC;QACjB,QAAQ,EAAE,cAAc,CAAC;QACzB,MAAM,EAAE,QAAQ,GAAG,MAAM,GAAG,SAAS,CAAC;QACtC,OAAO,EAAE,IAAI,CAAC;QACd,SAAS,CAAC,EAAE,MAAM,CAAC;QACnB,IAAI,CAAC,EAAE;YACL,WAAW,CAAC,EAAE,gBAAgB,CAAC;SAChC,CAAC;KACH,CAAC,CAAC;IA2CH;;;;OAIG;IACU,aAAa,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IA2DrD;;;;OAIG;IACU,UAAU,CAAC,SAAS,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IA2B1D;;;OAGG;YACW,WAAW;IA2BzB;;;;;OAKG;IACI,aAAa,CAAC,QAAQ,EAAE,MAAM,EAAE,SAAS,EAAE,YAAY,EAAE,QAAQ,EAAE,CAAC,IAAI,EAAE,GAAG,KAAK,IAAI,GAAG,IAAI;IAyBpG;;;;;OAKG;IACI,cAAc,CAAC,QAAQ,EAAE,MAAM,EAAE,SAAS,EAAE,YAAY,EAAE,QAAQ,EAAE,CAAC,IAAI,EAAE,GAAG,KAAK,IAAI,GAAG,IAAI;IAYrG;;OAEG;IACH,OAAO,CAAC,aAAa;IAsBrB;;OAEG;IACH,OAAO,CAAC,WAAW;IAcnB;;OAEG;IACH,OAAO,CAAC,oBAAoB;IAwB5B;;OAEG;IACH,OAAO,CAAC,wBAAwB;IAiBhC;;;;;OAKG;IACI,YAAY,CAAC,QAAQ,EAAE,MAAM,EAAE,SAAS,EAAE,YAAY,GAAG,CAAC,CAAC,IAAI,EAAE,GAAG,KAAK,IAAI,CAAC,EAAE;IAcvF;;;;;;;OAOG;IACW,aAAa,CACzB,QAAQ,EAAE,MAAM,EAChB,IAAI,EAAE,MAAM,EACZ,MAAM,GAAE,GAAQ,GACf,cAAc,CAAC,GAAG,EAAE;QAAE,OAAO,EAAE,OAAO,CAAC;QAAC,MAAM,CAAC,EAAE,GAAG,CAAC;QAAC,KAAK,CAAC,EAAE,KAAK,CAAA;KAAE,EAAE,IAAI,CAAC;IAqU/E;;;;;;OAMG;IACH,OAAO,CAAC,cAAc;IAqFtB;;;;;OAKG;IACH,OAAO,CAAC,iBAAiB;IAoDzB;;;;;OAKG;IACH,OAAO,CAAC,oBAAoB;IAK5B;;;;OAIG;IACI,wBAAwB,CAAC,EAAE,EAAE,MAAM,GAAG,MAAM;IAOnD;;;;;OAKG;IACH,OAAO,CAAC,sBAAsB;IAgD9B;;;;OAIG;IACH,OAAO,CAAC,sBAAsB;IAQ9B;;;;OAIG;IACH,OAAO,CAAC,oBAAoB;IAgB5B;;;;OAIG;IACI,mBAAmB,CAAC,EAAE,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS;IAI1D;;;;OAIG;IACI,oBAAoB,CAAC,EAAE,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS;IAO3D;;;;;OAKG;IACI,oBAAoB,CAAC,EAAE,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO;IAkBjE;;;;OAIG;IACI,oBAAoB,CAAC,EAAE,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS;IAgB3D;;;OAGG;IACI,mBAAmB,IAAI,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC;IASpD;;;;OAIG;IACH,OAAO,CAAC,4BAA4B;IAsBpC;;;;;OAKG;IACU,oBAAoB,CAAC,EAAE,EAAE,MAAM,EAAE,MAAM,SAA8C,GAAG,OAAO,CAAC,OAAO,CAAC;IA8BrH;;;;OAIG;IACI,gBAAgB,CAAC,EAAE,EAAE,MAAM,GAAG;QACnC,KAAK,EAAE,MAAM,CAAC;QACd,OAAO,EAAE,OAAO,CAAC;QACjB,YAAY,EAAE,MAAM,EAAE,CAAC;QACvB,kBAAkB,CAAC,EAAE,MAAM,CAAC;QAC5B,UAAU,EAAE,KAAK,CAAC;YAChB,EAAE,EAAE,MAAM,CAAC;YACX,SAAS,EAAE,MAAM,CAAC;YAClB,OAAO,EAAE,MAAM,CAAC;YAChB,IAAI,CAAC,EAAE,MAAM,CAAC;YACd,OAAO,EAAE,OAAO,CAAC;SAClB,CAAC,CAAC;KACJ;IAqFD;;;;;;;OAOG;IACU,OAAO,CAClB,QAAQ,EAAE,MAAM,EAChB,IAAI,EAAE,MAAM,EACZ,MAAM,GAAE,GAAQ,GACf,OAAO,CAAC;QAAE,OAAO,EAAE,OAAO,CAAC;QAAC,OAAO,CAAC,EAAE,GAAG,CAAC;QAAC,KAAK,CAAC,EAAE,KAAK,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,MAAM,CAAC;QAAC,SAAS,CAAC,EAAE,GAAG,CAAA;KAAE,CAAC;IAShH;;;;;;OAMG;IACH,OAAO,CAAC,mBAAmB;IAM3B;;;OAGG;IACI,qBAAqB,IAAI,KAAK,CAAC;QACpC,IAAI,EAAE,UAAU,CAAC;QACjB,QAAQ,EAAE,cAAc,CAAC;KAC1B,CAAC;IAIF;;;;OAIG;IACI,UAAU,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO;IAYtC;;;;OAIG;IACU,aAAa,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IA2DxD;;;;OAIG;IACU,eAAe,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAqB1D;;;;;;OAMG;YACW,yBAAyB;IAMvC;;;;;;OAMG;YACW,qBAAqB;IA2GnC;;;;;;OAMG;YACW,6BAA6B;IAgC3C;;;;;;;OAOG;YACW,oBAAoB;IAiFlC;;;OAGG;IACI,kBAAkB,IAAI,KAAK,CAAC;QACjC,QAAQ,EAAE,MAAM,CAAC;QACjB,WAAW,EAAE,MAAM,CAAC;QACpB,SAAS,EAAE,MAAM,CAAC;QAClB,OAAO,EAAE,MAAM,CAAC;QAChB,UAAU,EAAE,MAAM,CAAC;QACnB,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,UAAU,EAAE,UAAU,CAAC;QACvB,cAAc,EAAE,cAAc,CAAC;KAChC,CAAC;IA8DF;;;OAGG;IACU,wBAAwB,IAAI,OAAO,CAAC,KAAK,CAAC;QACrD,QAAQ,EAAE,MAAM,CAAC;QACjB,WAAW,EAAE,MAAM,CAAC;QACpB,MAAM,EAAE,aAAa,GAAG,WAAW,GAAG,YAAY,GAAG,QAAQ,CAAC;QAC9D,OAAO,EAAE,OAAO,CAAC;QACjB,KAAK,CAAC,EAAE,MAAM,CAAC;KAChB,CAAC,CAAC;IAkEH;;;;;OAKG;YACW,0BAA0B;CAmEzC"} | ||
| {"version":3,"file":"manager.d.ts","sourceRoot":"","sources":["../../src/manager.ts"],"names":[],"mappings":"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"} |
+18
-0
@@ -38,3 +38,7 @@ export declare enum KernelEvents { | ||
| lockFileURL?: string; | ||
| autoSyncFs?: boolean; | ||
| } | ||
| export interface INativeFSHandle { | ||
| syncfs(): Promise<void>; | ||
| } | ||
| export interface IKernel extends IEventEmitter { | ||
@@ -59,2 +63,16 @@ initialize(options?: IKernelOptions): Promise<void>; | ||
| setInterruptBuffer?(buffer: Uint8Array): void; | ||
| mountFS?(mountPath: string, dirHandle?: FileSystemDirectoryHandle | null, permission?: 'read' | 'readwrite'): Promise<INativeFSHandle>; | ||
| getMountedFilesystems?(): Array<{ | ||
| mountPath: string; | ||
| permission: 'read' | 'readwrite'; | ||
| canSync: boolean; | ||
| }>; | ||
| syncFilesystem?(mountPath: string): Promise<{ | ||
| success: boolean; | ||
| error?: string; | ||
| }>; | ||
| upgradeFilesystemPermission?(mountPath: string): Promise<{ | ||
| success: boolean; | ||
| error?: string; | ||
| }>; | ||
| complete?(code: string, cursor_pos: number, parent?: any): Promise<any>; | ||
@@ -61,0 +79,0 @@ inspect?(code: string, cursor_pos: number, detail_level: 0 | 1, parent?: any): Promise<any>; |
@@ -1,1 +0,1 @@ | ||
| {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/types.ts"],"names":[],"mappings":"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"} | ||
| {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/types.ts"],"names":[],"mappings":"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"} |
+2
-2
| { | ||
| "name": "web-python-kernel", | ||
| "version": "0.1.5", | ||
| "version": "0.1.6", | ||
| "description": "A web-based Python kernel for browser environments with TypeScript support", | ||
@@ -88,2 +88,2 @@ "main": "dist/web-python-kernel.js", | ||
| } | ||
| } | ||
| } |
Sorry, the diff of this file is too big to display
Sorry, the diff of this file is too big to display
Sorry, the diff of this file is too big to display
Sorry, the diff of this file is too big to display
Sorry, the diff of this file is too big to display
Sorry, the diff of this file is too big to display
Sorry, the diff of this file is too big to display
Sorry, the diff of this file is too big to display
Sorry, the diff of this file is too big to display
Uses eval
Supply chain riskPackage uses dynamic code execution (e.g., eval()), which is a dangerous practice. This can prevent the code from running in certain environments and increases the risk that the code may contain exploits or malicious behavior.
Found 1 instance in 1 package
Long strings
Supply chain riskContains long string literals, which may be a sign of obfuscated or packed code.
Found 1 instance in 1 package
URL strings
Supply chain riskPackage contains fragments of external URLs or IP addresses, which the package may be accessing at runtime.
Found 1 instance in 1 package
Uses eval
Supply chain riskPackage uses dynamic code execution (e.g., eval()), which is a dangerous practice. This can prevent the code from running in certain environments and increases the risk that the code may contain exploits or malicious behavior.
Found 1 instance in 1 package
AI-detected potential code anomaly
Supply chain riskAI has identified unusual behaviors that may pose a security risk.
Found 1 instance in 1 package
Long strings
Supply chain riskContains long string literals, which may be a sign of obfuscated or packed code.
Found 1 instance in 1 package
URL strings
Supply chain riskPackage contains fragments of external URLs or IP addresses, which the package may be accessing at runtime.
Found 1 instance in 1 package
3195903
12.25%10291
12.16%75
7.14%