An easy-to-use platform for EEG experimentation in the classroom

cleanup reference; remove old ignored files

+16 -43
+1 -28
.gitignore
··· 7 7 *.pid 8 8 *.seed 9 9 10 - # Directory for instrumented libs generated by jscoverage/JSCover 11 - lib-cov 12 - 13 10 # Coverage directory used by tools like istanbul 14 11 coverage 15 12 16 - # Grunt intermediate storage (http://gruntjs.com/creating-plugins#storing-task-files) 17 - .grunt 18 - 19 - # node-waf configuration 20 - .lock-wscript 21 - 22 - # Compiled binary addons (http://nodejs.org/api/addons.html) 23 - build/Release 13 + # Compiled binary addons 24 14 .eslintcache 25 15 26 16 # Dependency directory ··· 35 25 out 36 26 dist 37 27 38 - # Old webpack build artifacts 39 - app/main.prod.js 40 - app/main.prod.js.map 41 - app/renderer.prod.js 42 - app/renderer.prod.js.map 43 - app/style.css 44 - app/style.css.map 45 - dll 46 - main.js 47 - main.js.map 48 - 49 28 .idea 50 - npm-debug.log.* 51 - *.css.d.ts 52 - *.sass.d.ts 53 - *.scss.d.ts 54 29 keys.js 55 - 56 - app/utils/pyodide/src 57 30 src/renderer/utils/webworker/src
+2 -2
.llms/CLAUDE.md
··· 24 24 - `src/renderer/` — React renderer process 25 25 - `src/preload/` — Electron preload scripts 26 26 - `src/renderer/experiments/` — Lab.js experiment files 27 - - `src/renderer/utils/pyodide/` — Pyodide WASM Python runtime 27 + - `src/renderer/utils/webworker/` — Pyodide WASM Python runtime 28 28 29 29 ## Dev Workflow 30 30 ```bash ··· 45 45 - Keep Electron main/renderer separation strict — use preload IPC bridges 46 46 47 47 ## Out of Scope 48 - - Do not modify `src/renderer/utils/pyodide/src/` directly; it is managed by `InstallPyodide.js` 48 + - Do not modify `src/renderer/utils/webworker/src/` directly; it is managed by `InstallPyodide.js` 49 49 - Do not alter `electron-builder` publish config without confirming release intent 50 50 51 51 ## LLM Context
+1 -1
eslint.config.mjs
··· 23 23 'dist/**', 24 24 'coverage/**', 25 25 '.worktrees/**', 26 - 'src/renderer/utils/pyodide/src/**', 26 + 'src/renderer/utils/webworker/src/**', 27 27 '**/*.css.d.ts', 28 28 '**/*.scss.d.ts', 29 29 ],
+3 -3
internals/scripts/InstallMNE.mjs
··· 12 12 * Part 2 — Pure-Python packages (from PyPI) 13 13 * MNE itself and its pure-Python dependencies (pooch, tqdm, platformdirs) 14 14 * are not bundled with Pyodide. These are downloaded as py3-none-any 15 - * wheels into src/renderer/utils/pyodide/src/packages/ and installed via 15 + * wheels into src/renderer/utils/webworker/src/packages/ and installed via 16 16 * micropip at worker startup. A manifest.json is written there so the 17 17 * worker knows the exact filenames. 18 18 * ··· 29 29 // Paths 30 30 // --------------------------------------------------------------------------- 31 31 32 - const PYODIDE_DIR = path.resolve('src/renderer/utils/pyodide/src/pyodide'); 32 + const PYODIDE_DIR = path.resolve('src/renderer/utils/webworker/src/pyodide'); 33 33 const LOCK_FILE = path.join(PYODIDE_DIR, 'pyodide-lock.json'); 34 34 35 - const PACKAGES_DIR = path.resolve('src/renderer/utils/pyodide/src/packages'); 35 + const PACKAGES_DIR = path.resolve('src/renderer/utils/webworker/src/packages'); 36 36 const MANIFEST_FILE = path.join(PACKAGES_DIR, 'manifest.json'); 37 37 38 38 // ---------------------------------------------------------------------------
+2 -2
internals/scripts/InstallPyodide.mjs
··· 4 4 * publicDir so Vite can serve it as static assets. 5 5 * 6 6 * Source: node_modules/pyodide/ 7 - * Dest: src/renderer/utils/pyodide/src/pyodide/ 7 + * Dest: src/renderer/utils/webworker/src/pyodide/ 8 8 * 9 9 * Key files copied: 10 10 * pyodide.mjs – ESM entry point (imported by the web worker via npm) ··· 36 36 37 37 const _require = createRequire(import.meta.url); 38 38 39 - const DEST_DIR = path.resolve('src/renderer/utils/pyodide/src/pyodide'); 39 + const DEST_DIR = path.resolve('src/renderer/utils/webworker/src/pyodide'); 40 40 const VERSION_FILE = path.join(DEST_DIR, '.pyodide-version'); 41 41 42 42 // Files to exclude from the copy.
+1 -1
package.json
··· 98 98 "filter": "**/*" 99 99 }, 100 100 { 101 - "from": "./src/renderer/utils/pyodide/src/", 101 + "from": "./src/renderer/utils/webworker/src/", 102 102 "to": "pyodide", 103 103 "filter": "**/*" 104 104 }
+2 -2
src/renderer/epics/pyodideEpics.ts
··· 23 23 loadPatches, 24 24 applyPatches, 25 25 loadUtils, 26 - } from '../utils/pyodide'; 26 + } from '../utils/webworker'; 27 27 import { 28 28 EMOTIV_CHANNELS, 29 29 DEVICES, 30 30 MUSE_CHANNELS, 31 31 PYODIDE_VARIABLE_NAMES, 32 32 } from '../constants/constants'; 33 - import { parseSingleQuoteJSON } from '../utils/pyodide/functions'; 33 + import { parseSingleQuoteJSON } from '../utils/webworker/functions'; 34 34 35 35 import { readFiles } from '../utils/filesystem/read'; 36 36
+3 -3
src/renderer/utils/webworker/webworker.js
··· 10 10 * 11 11 * 2. `indexURL: '/pyodide/'` — tells pyodide where to find pyodide-lock.json 12 12 * and binary package wheels (.whl). These are served from publicDir: 13 - * src/renderer/utils/pyodide/src/pyodide/ 13 + * src/renderer/utils/webworker/src/pyodide/ 14 14 * which is populated by: 15 15 * • InstallPyodide.mjs (copies pyodide-lock.json + runtime from npm) 16 16 * • InstallMNE.mjs (downloads binary wheels from Pyodide CDN) ··· 27 27 28 28 async function initPyodide() { 29 29 // indexURL tells pyodide where to load pyodide-lock.json and binary wheels. 30 - // The publicDir (src/renderer/utils/pyodide/src/) is served at the web root, 31 - // so /pyodide/ maps to src/renderer/utils/pyodide/src/pyodide/. 30 + // The publicDir (src/renderer/utils/webworker/src/) is served at the web root, 31 + // so /pyodide/ maps to src/renderer/utils/webworker/src/pyodide/. 32 32 const pyodide = await loadPyodide({ indexURL: '/pyodide/' }); 33 33 34 34 // Load binary packages from locally served .whl files.
+1 -1
vite.config.ts
··· 46 46 // Serve the pyodide runtime files as static assets so Vite does NOT 47 47 // transform them. Files in publicDir are served verbatim at the root URL: 48 48 // /pyodide/pyodide.mjs, /pyodide/pyodide.asm.js, /packages/*.whl, etc. 49 - publicDir: path.resolve(__dirname, 'src/renderer/utils/pyodide/src'), 49 + publicDir: path.resolve(__dirname, 'src/renderer/utils/webworker/src'), 50 50 plugins: [ 51 51 react({ 52 52 jsxRuntime: 'classic', // React 16 does not ship react/jsx-runtime