diff --git a/.gitignore b/.gitignore index b177d2b..eb02e03 100644 --- a/.gitignore +++ b/.gitignore @@ -7,20 +7,10 @@ pids *.pid *.seed -# Directory for instrumented libs generated by jscoverage/JSCover -lib-cov - # Coverage directory used by tools like istanbul coverage -# Grunt intermediate storage (http://gruntjs.com/creating-plugins#storing-task-files) -.grunt - -# node-waf configuration -.lock-wscript - -# Compiled binary addons (http://nodejs.org/api/addons.html) -build/Release +# Compiled binary addons .eslintcache # Dependency directory @@ -35,23 +25,6 @@ release out dist -# Old webpack build artifacts -app/main.prod.js -app/main.prod.js.map -app/renderer.prod.js -app/renderer.prod.js.map -app/style.css -app/style.css.map -dll -main.js -main.js.map - .idea -npm-debug.log.* -*.css.d.ts -*.sass.d.ts -*.scss.d.ts keys.js - -app/utils/pyodide/src src/renderer/utils/webworker/src diff --git a/.llms/CLAUDE.md b/.llms/CLAUDE.md index a133315..853b9ac 100644 --- a/.llms/CLAUDE.md +++ b/.llms/CLAUDE.md @@ -24,7 +24,7 @@ A priority for this codebase is extensibility modularity and hackability. There - `src/renderer/` — React renderer process - `src/preload/` — Electron preload scripts - `src/renderer/experiments/` — Lab.js experiment files -- `src/renderer/utils/pyodide/` — Pyodide WASM Python runtime +- `src/renderer/utils/webworker/` — Pyodide WASM Python runtime ## Dev Workflow ```bash @@ -45,7 +45,7 @@ npm run package # Build + package for current platform - Keep Electron main/renderer separation strict — use preload IPC bridges ## Out of Scope -- Do not modify `src/renderer/utils/pyodide/src/` directly; it is managed by `InstallPyodide.js` +- Do not modify `src/renderer/utils/webworker/src/` directly; it is managed by `InstallPyodide.js` - Do not alter `electron-builder` publish config without confirming release intent ## LLM Context diff --git a/eslint.config.mjs b/eslint.config.mjs index 7e24f86..50539aa 100644 --- a/eslint.config.mjs +++ b/eslint.config.mjs @@ -23,7 +23,7 @@ export default [ 'dist/**', 'coverage/**', '.worktrees/**', - 'src/renderer/utils/pyodide/src/**', + 'src/renderer/utils/webworker/src/**', '**/*.css.d.ts', '**/*.scss.d.ts', ], diff --git a/internals/scripts/InstallMNE.mjs b/internals/scripts/InstallMNE.mjs index 090807b..37e9870 100644 --- a/internals/scripts/InstallMNE.mjs +++ b/internals/scripts/InstallMNE.mjs @@ -12,7 +12,7 @@ * Part 2 — Pure-Python packages (from PyPI) * MNE itself and its pure-Python dependencies (pooch, tqdm, platformdirs) * are not bundled with Pyodide. These are downloaded as py3-none-any - * wheels into src/renderer/utils/pyodide/src/packages/ and installed via + * wheels into src/renderer/utils/webworker/src/packages/ and installed via * micropip at worker startup. A manifest.json is written there so the * worker knows the exact filenames. * @@ -29,10 +29,10 @@ import chalk from 'chalk'; // Paths // --------------------------------------------------------------------------- -const PYODIDE_DIR = path.resolve('src/renderer/utils/pyodide/src/pyodide'); +const PYODIDE_DIR = path.resolve('src/renderer/utils/webworker/src/pyodide'); const LOCK_FILE = path.join(PYODIDE_DIR, 'pyodide-lock.json'); -const PACKAGES_DIR = path.resolve('src/renderer/utils/pyodide/src/packages'); +const PACKAGES_DIR = path.resolve('src/renderer/utils/webworker/src/packages'); const MANIFEST_FILE = path.join(PACKAGES_DIR, 'manifest.json'); // --------------------------------------------------------------------------- diff --git a/internals/scripts/InstallPyodide.mjs b/internals/scripts/InstallPyodide.mjs index 16973e1..665f1c2 100644 --- a/internals/scripts/InstallPyodide.mjs +++ b/internals/scripts/InstallPyodide.mjs @@ -4,7 +4,7 @@ * publicDir so Vite can serve it as static assets. * * Source: node_modules/pyodide/ - * Dest: src/renderer/utils/pyodide/src/pyodide/ + * Dest: src/renderer/utils/webworker/src/pyodide/ * * Key files copied: * pyodide.mjs – ESM entry point (imported by the web worker via npm) @@ -36,7 +36,7 @@ import chalk from 'chalk'; const _require = createRequire(import.meta.url); -const DEST_DIR = path.resolve('src/renderer/utils/pyodide/src/pyodide'); +const DEST_DIR = path.resolve('src/renderer/utils/webworker/src/pyodide'); const VERSION_FILE = path.join(DEST_DIR, '.pyodide-version'); // Files to exclude from the copy. diff --git a/package.json b/package.json index 8f4ae5a..766fc98 100644 --- a/package.json +++ b/package.json @@ -98,7 +98,7 @@ "filter": "**/*" }, { - "from": "./src/renderer/utils/pyodide/src/", + "from": "./src/renderer/utils/webworker/src/", "to": "pyodide", "filter": "**/*" } diff --git a/src/renderer/epics/pyodideEpics.ts b/src/renderer/epics/pyodideEpics.ts index 6337db2..dfc40b0 100644 --- a/src/renderer/epics/pyodideEpics.ts +++ b/src/renderer/epics/pyodideEpics.ts @@ -23,14 +23,14 @@ import { loadPatches, applyPatches, loadUtils, -} from '../utils/pyodide'; +} from '../utils/webworker'; import { EMOTIV_CHANNELS, DEVICES, MUSE_CHANNELS, PYODIDE_VARIABLE_NAMES, } from '../constants/constants'; -import { parseSingleQuoteJSON } from '../utils/pyodide/functions'; +import { parseSingleQuoteJSON } from '../utils/webworker/functions'; import { readFiles } from '../utils/filesystem/read'; diff --git a/src/renderer/utils/webworker/webworker.js b/src/renderer/utils/webworker/webworker.js index 4e37315..a599f27 100644 --- a/src/renderer/utils/webworker/webworker.js +++ b/src/renderer/utils/webworker/webworker.js @@ -10,7 +10,7 @@ * * 2. `indexURL: '/pyodide/'` — tells pyodide where to find pyodide-lock.json * and binary package wheels (.whl). These are served from publicDir: - * src/renderer/utils/pyodide/src/pyodide/ + * src/renderer/utils/webworker/src/pyodide/ * which is populated by: * • InstallPyodide.mjs (copies pyodide-lock.json + runtime from npm) * • InstallMNE.mjs (downloads binary wheels from Pyodide CDN) @@ -27,8 +27,8 @@ import { loadPyodide } from 'pyodide'; async function initPyodide() { // indexURL tells pyodide where to load pyodide-lock.json and binary wheels. - // The publicDir (src/renderer/utils/pyodide/src/) is served at the web root, - // so /pyodide/ maps to src/renderer/utils/pyodide/src/pyodide/. + // The publicDir (src/renderer/utils/webworker/src/) is served at the web root, + // so /pyodide/ maps to src/renderer/utils/webworker/src/pyodide/. const pyodide = await loadPyodide({ indexURL: '/pyodide/' }); // Load binary packages from locally served .whl files. diff --git a/vite.config.ts b/vite.config.ts index 7ecc428..fc29693 100644 --- a/vite.config.ts +++ b/vite.config.ts @@ -46,7 +46,7 @@ export default defineConfig({ // Serve the pyodide runtime files as static assets so Vite does NOT // transform them. Files in publicDir are served verbatim at the root URL: // /pyodide/pyodide.mjs, /pyodide/pyodide.asm.js, /packages/*.whl, etc. - publicDir: path.resolve(__dirname, 'src/renderer/utils/pyodide/src'), + publicDir: path.resolve(__dirname, 'src/renderer/utils/webworker/src'), plugins: [ react({ jsxRuntime: 'classic', // React 16 does not ship react/jsx-runtime