Changelog
All notable changes to NeuroSkill™ are documented here, following Keep a Changelog conventions. Dates are release dates in UTC.
v0.0.55
LatestAdded
- History — Calendar heatmap view with Year, Month (default), Week, and Day granularity via a segmented titlebar control.
- Year view — GitHub-style contribution heatmap with weekly columns, month labels, and emerald intensity legend. Click any day to drill into the day view.
- Month view — traditional calendar grid with per-day session counts and heat-colored backgrounds.
- Week view — 24-hour timeline grid per day with canvas-rendered epoch dots (one per 5-second EEG embedding), color-coded by session.
- Day view — epoch dot canvas below the 24h bar with session color legend, label count summary, and amber triangle label markers.
- LLM hardware fit prediction — `get_model_hardware_fit` command using llmfit-core to predict whether each catalog model will run on the user's hardware.
- Per-quant fit badges in LLM settings: 🟢 Runs great / 🟡 Runs well / 🟠 Tight fit / 🔴 Won't fit, with hover tooltip for run mode, memory breakdown, and estimated speed.
- Chat tool calling with four built-in tools: Date & Time, Location (IP geolocation), Web Search (DuckDuckGo), and Web Fetch.
- JSON Schema argument validation for tool calls, configurable execution mode (parallel/sequential), max tool rounds, and max calls per round.
- Rich tool-execution lifecycle events via IPC: ToolExecutionStart and ToolExecutionEnd, with BeforeToolCallFn/AfterToolCallFn hook definitions.
- Qwen3.5 27B Claude 4.6 Opus Reasoning Distilled model family (17 quant variants) added to LLM catalog.
- OmniCoder 9B model family (13 quant variants) — coding-focused 9B model added to LLM catalog.
Changed
- Refactored CustomTitleBar.svelte — collapsed macOS and Windows/Linux branches into shared Svelte 5 snippets (975 → 533 lines, 45% reduction).
- Titlebar tints red when Bluetooth adapter is unavailable (uses --color-error token, respects light/dark themes).
- Assistant turn rendering split into separate bubbles for lead-in text, tool activity, collapsed thinking, and final response.
- Replaced blinking text cursor during LLM inference with a spinning SVG arc on the avatar column.
Fixed
- Fixed partial tool-call JSON fences and </think> tags leaking into chat response bubbles.
- Fixed bold/italic not rendering when models emit extra spaces inside ** delimiters or punctuation-adjacent CommonMark edge cases.
- Fixed multi-tool calls emitted as a single dict object (e.g. Qwen3-style models).
- Fixed multi-tool and multi-round rendering where text concatenated across rounds.
- Fixed mmproj crash when the vision projector file is missing — added exists() guard and file-size sanity check.
- Fixed corrupted Vulkan GPU state when an incompatible mmproj file was loaded — disabled clip warmup at init time.
- Fixed Linux WebKit startup abort on Wayland caused by stacker::maybe_grow swapping the main-thread stack.
- Fixed Linux app auto-close after startup caused by implicit RunEvent::ExitRequested handling.
- Fixed LLM catalog crash on Windows caused by symlinks checked out as plain-text files.
- Fixed mw75 RFCOMM build and Send bound violations on Windows (bumped to mw75 v0.0.6).
- Fixed latest.json encoding across all three platform CIs — consistent UTF-8 without BOM.
- Fixed German locale syntax error (corrupted duplicate fragment).
- Fixed 12 failing tests after EEG_CHANNELS bump to 12.
- Fixed Tailwind v4 Invalid declaration: onMount dev-server errors.
- Fixed Windows CI PowerShell parse errors from non-ASCII characters — added UTF-8 BOM to .ps1 files.
- Fixed LINUX.md path in packaging scripts.
v0.0.36
Added
- Initial public release of NeuroSkill™.
- Dashboard — live multi-channel EEG waveforms, spectrograms, 5-band power bars, FAA gauge, 60+ metrics, blink and jaw-clench detection, GPU utilisation, device status.
- Settings — Device, Signal Processing (notch 50/60 Hz, bandpass, overlap), Appearance (dark/light/system theme), Shortcuts.
- Label window — free-text annotation with ⌘Enter submit, exact-timestamp storage in labels.sqlite.
- WebSocket API — status, label, calibrate commands; eeg-bands, muse-status, label-created event streams.
- mDNS service registration (_neuroskill™._tcp) for auto-discovery from LAN clients.
- Support for Muse 2 (MU-02), Muse S Gen 1 (MU-03), and Muse S Gen 2 (MU-04).
- Raw EEG saved to CSV continuously at 256 Hz.
- Command palette — fuzzy-searchable (⌘K), all windows and actions accessible.
- Multilingual support — English and German (Deutsch) at launch.
- PPG metrics — heart rate, RMSSD, SDNN, pNN50, LF/HF ratio, respiratory rate, SpO₂ estimate, perfusion index, and Baevsky Stress Index. Requires Muse 2 or Muse S.
- Automatic sleep staging — sessions ≥ 30 minutes are classified into Wake / N1 / N2 / N3 / REM using per-AASM band-power ratio heuristics. Full hypnogram with efficiency, onset latency, and bout statistics.
- Calibration window — guided alternating-action tasks (configurable actions, duration, breaks, repeat count). Labels auto-saved with exact timestamps.
- Compare window — A/B session comparison with side-by-side band powers, all 60+ metrics, FAA, and time-series charts.
- WebSocket sleep and compare commands.
- IMU metrics — head pitch, roll, stillness index, nod count, shake count.
- ZUNA neural embedding encoder — runs on your GPU via wgpu, producing 32-dimensional embedding vectors every 5 seconds.
- HNSW vector similarity search — approximate nearest-neighbour search across your entire recording history with configurable k and ef.
- Search window — query embeddings by time range, view cosine-distance ranked results, and click any result to jump to that session moment.
- Brain Nebula™ — GPU-accelerated UMAP dimensionality reduction via fast-umap + CubeCL backend. Interactive Three.js viewer with orbit, zoom, and label linking.
- Setup Wizard — five-step onboarding: Welcome → Bluetooth → Fit check → Calibration → Done.
- History window — scrollable list of all past sessions with per-session duration, epoch count, and quality summary.
- WebSocket search, sessions, umap, and umap_poll commands.
- OpenBCI board support — Ganglion (4ch, BLE/WiFi), Cyton (8ch, USB/WiFi), Cyton+Daisy (16ch, USB/WiFi), and Galea (24ch, UDP). Configure in Settings → OpenBCI; any board can run alongside a Muse headset simultaneously. The first 4 channels drive real-time analysis; all channels saved to CSV.
- Sleep staging comparison in the Compare window — side-by-side hypnograms for two sessions with Wake / N1 / N2 / N3 / REM breakdown and transition analysis.
- Brain Nebula™ overlay in Compare window — project embeddings from both sessions into the same interactive space to visualise state separation.
- CLI (cli.ts) with 9 commands, mDNS auto-discovery, session-aware defaults, colorised output, --json mode, and live Brain Nebula™ progress bars.
- French language (fr) — all metrics, tooltips, help text, and UI strings translated.
- Accessibility panel — font size, high-contrast mode, colorblind-safe palettes (deuteranopia, protanopia, tritanopia), reduced-motion toggle.
- WebSocket compare command now auto-enqueues a Brain Nebula™ projection job and returns estimated completion time.
- Consciousness metrics panel — three new research metrics (LZC, Wakefulness, Information Integration) computed from EEG complexity, arousal indices, and coherence. Backed by Casali et al. (2013) and Tononi (2004).
- Headache & Migraine research correlates — two new experimental EEG biomarkers (headache_index, migraine_index) derived from interictal QEEG literature (Bjørk et al. 2009). Research/informational only — not clinical diagnostic tools.
- Voice-guided calibration (TTS) — on-device English text-to-speech (kittentts-rs / espeak-ng) announces each calibration phase, breaks, and completion without requiring network access.
Changed
- Band power computation switched from periodogram to Welch method (4 overlapping windows) for lower variance estimates.
- Dashboard layout split into tabbed panels to accommodate PPG and IMU metric groups without requiring a wider window.
Improved
- HNSW index loading deferred to app idle time to avoid startup latency spike.
- Embedding overlap is now configurable (0 – 4.5 s) in Settings → Signal Processing.
- HNSW search performance improved ~40 % by pre-loading daily index files into memory on session open.
- GPU pipeline latency reduced to ~125 ms end-to-end (was ~180 ms) by overlapping FFT and metric computation passes.
- Setup Wizard now shows animated per-channel signal quality bars in real time during the fit-check step.
- Dashboard layout is now fully configurable — drag-and-drop panel reordering persisted in settings.json.
Fixed
- Memory leak in the GPU pipeline on sessions longer than 2 hours. The staging buffer was not being flushed between HNSW index writes.
- Notch filter at 60 Hz was also attenuating 50 Hz when the notch width was set wider than default.
- App occasionally crashed on startup when ~/.neuroskill™/ did not exist on first launch.
- FFT window alignment was off by one sample for channels with non-zero phase offset.
- Muse S Gen 2 (MU-04) would occasionally fail to reconnect after the device entered low-power sleep. BLE reconnect now retries with exponential backoff up to 5 times.
- Brain Nebula™ cache keys collided for sessions starting at the same UTC second on different days.
- Label timestamps were off by the system timezone offset when the host was not set to UTC.
- Memory was not freed when closing the Search window while a Brain Nebula™ job was in-flight.