Changelog

All notable changes to NeuroSkill™ are documented here, following Keep a Changelog conventions. Dates are release dates in UTC.

v0.0.55

Latest

Added

  • 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.