Releases: Platano78/wigi-llm
Release list
v2.2.0 — Hardened: Real JSON Parsing, Safe Defaults, CI
What's New
This release finishes the hardening pass on the daily-driver launcher and makes the repo's defaults safe for anyone who copy-pastes them.
Highlights
- Real JSON parsing for
buttons.json— a dependency-free recursive-descent parser (JsonConfig.cs) replaces the old regex parser, which silently truncated at the first]inside any value. The writer now escapes strings properly and round-trips every field (router,serverPorts,radioGroup,pollHostwere previously dropped on save). Malformed configs fall back to defaults instead of half-parsing. - Safe network defaults —
start-router.shandgpu-vram-server.pynow bind127.0.0.1by default. The llama.cpp router API (model load/unload + inference) has no auth, so LAN exposure is an explicit opt-in (ROUTER_HOST=0.0.0.0/--bind 0.0.0.0), documented in the README. - CI for repo invariants — GitHub Actions now validates example JSON, shellchecks the scripts, compiles the VRAM server, and enforces the paired active/off icon convention on every push and PR.
Fixed
- Launcher thread safety: dictionaries shared between the 30 FPS render thread and button-exec threads are now lock-guarded
- Process handle leak: every launched
Processis disposed (previously one leaked handle per button press) - Settings panel: polls the router host/port configured in
buttons.json(was hardcoded127.0.0.1:8081) with a 750 ms timeout instead of a blocking connect on the UI thread - Clipboard Agent couldn't build from a fresh clone (phantom
icon.pngreference, non-standard framework DLL path) - Static thumbnails no longer hardcode a 16 GB card; leftover SDK-template URL fixed;
GpuInforeuses a singleHttpClient
Changed
- Debug log files are now opt-in via
WIGI_DEBUG=1— released widgets no longer write toC:\tempor the Desktop continuously - README documents the
buttons.jsontrust model:scriptPathruns verbatim viacmd.exe /c, so treat the file like a startup script
Removed
- Dead
ProcessLauncher.csin the launcher
Full Changelog
See CHANGELOG.md for complete details.
v2.1.0 — Buildable, Configurable, Public-Ready
This release makes Wigi-LLM something anyone can clone, build, and run — not just the author's box. The focus is buildability, configurability, and a clean public face. It's fully backward-compatible: existing buttons.json configs keep working unchanged.
Highlights
🔧 Anyone can build it now
- Every widget has
build.bat+deploy.bat. Builds are edition-agnostic — they find Visual Studio / Build Tools viavswhere(Community/Professional/Enterprise/Preview/Build Tools), so no hardcoded paths. - No more cryptic build failures.
build.batchecks for the .NET Framework 4.7.2 targeting pack up front and, if it's missing, points you straight at the Developer Pack download — instead of a confusing MSBuild error. deploy.batcopiesNewtonsoft.Json.dllfor the two widgets that need it at runtime (Context Monitor, Control Panel).
⚙️ Configurable without recompiling
- The LLM Launcher now reads optional top-level
router{host, port}andserverPorts[]keys frombuttons.json— run your router on a non-default host/port without touching C#. Defaults match the previous hardcoded values.
📦 Ships the scripts it actually needs
- Added
scripts/start-router.sh,scripts/kill-all-llm.sh, andscripts/vram-utils.sh— the helpersrouter-control.shsources and calls. A fresh clone now works standalone.
📖 Public-facing README + screenshots
- A complete "build a widget yourself" guide: requirements with download links, the
WigiDashWidgetFramework.dllSDK requirement (and where to get it), and an explicit note that the moderndotnetCLI can't build these classic .NET Framework projects. - Every one of the 12 widgets is defined with its display name and source folder.
- A screenshot gallery plus a hero shot of the LLM Launcher running on the panel.
🧹 Sanitized for public release
- Scrubbed personal data: private IPs, usernames, home paths, setup-specific ports — and redacted a private IP/domain out of a widget screenshot.
- Removed internal planning docs; gave Context Monitor and Control Panel unique assembly GUIDs (they shared a placeholder).
Upgrade notes
Nothing required. To use the new launcher config, optionally add router/serverPorts to your buttons.json (see the README config reference); omit them to keep current behavior.
Full changelog: CHANGELOG.md · Compare: v2.0.0...v2.1.0
v2.0.0 — Widget Suite + MCP/Claude Integration
What's New in v2.0.0
This release is a major scope expansion. v1.0.0 was a control-panel for one-touch model loading. v2.0.0 is a full widget suite — a panel-as-control-surface for the whole local LLM + Claude Code stack.
The daily-driver remains LLM Launcher (config-driven via buttons.json). Everything else is experimental — they work and they're documented, but they're reference implementations more than polished products.
Highlights
- LLM Launcher source in-repo — was external; now
wigidash/src/LLMLauncherWidget/(~2,100 LoC). Per-button tokens/sec readout added. - MCP Pulse — live MCP server topology + tool-call activity. Polls the MCP gateway
/healthfor server nodes; tailsmcp.logfor activity beams. Three render modes via double-tap. - Context Monitor (revived) — Claude Code context watcher across all live sessions. Per-session statusline files (
/dev/shm/claude_statusline_*.json), stale-filtered, sorted by most-recent activity. Top-right shows Anthropic 5h/7d subscription quota with reset countdown. Animated procedural pixel mascot whose mood tracks the top session's tier. Three animation intensities viaCC_ANIMATION_INTENSITY. - Brain Monitor (autopilot mode) — full-screen 4×2 visual with autopilot inference shooter game gated by token-delta.
- Integration Health — service health for an HTTP/WSL stack with start/stop/restart actions.
- Control Panel — quick-action button grid for git / build / test / deploy.
- LLM Stats — dedicated 1×1 / 2×1 tokens/sec readout.
- Shared
WslPaths.cs— translates WSL POSIX paths to Windows UNC with env-var override (WSL_DISTRO,WSL_USER_HOME,WSL_USER) and auto-discovery fallback when the Windows and WSL usernames differ. - Shared
GpuInfo.cs— VRAM detection (localnvidia-smi.exeor remotegpu-vram-server.py) with a 5s cache.
Breaking Changes
- Repo renamed: LLM Deck → Wigi-LLM. Update bookmarks; the old name is gone.
- StreamDeck section removed. It was never tested in practice. Fork v1.0.0 if you need it as a starting point.
- Per-environment config now via env vars. Widgets that touch WSL (Context Monitor, MCP Pulse, Integration Health) need
WSL_DISTRO/WSL_USER_HOMEset on the Windows side (or rely on auto-discovery). See the Per-environment configuration section of the README.
Other Changes
- Share-readiness pass: scrubbed hardcoded personal paths from source.
MCPPulseWidget/ActivityLog.csnow routes the mcp.log path throughWslPaths.UnderHome(...). - Normalized most widget csprojs to
TargetFramework=v4.7.2+LangVersion=5for parity with the WigiDash framework's historical C# 5 surface. (A few imported widgets still use C# 6+ syntax — README documents the split.) - 14 paired pixel-art icons (was 15 — one model preset retired).
- Documentation: full env-var resolution order,
setx-quoting gotcha, Explorer.exe inheritance behavior, build/deploy DLL-lock dance.
Hardware Support
| Panel | Status |
|---|---|
| G.SKILL WigiDash | Full support (buttons.json + 13 C# widgets) |
| Any macro pad | Works with anything that runs shell commands (via router-control.sh) |
| Elgato StreamDeck | Removed in v2.0.0 — fork v1.0.0 if you need it |
Quick Start
Same as before — clone, build the LLM Launcher widget, copy the icons + a buttons-starter.json to your widget folder, edit scriptPath to point at your WSL home. Full instructions in README.md.
Full Changelog
See git log v1.0.0..v2.0.0 — 40 commits, ~135 files added.
v1.0.0 — Wigi-LLM: Physical Control Panel for Local LLM Fleets
What Is This
LLM Deck turns a G.SKILL WigiDash touchscreen panel (or Elgato StreamDeck) into a one-touch hardware control panel for managing local LLM models on llama.cpp.
Instead of typing terminal commands to switch models, you tap a physical button. The panel shows real-time status — green means loaded, red means off. Radio group behavior ensures only one model is loaded at a time, respecting your GPU's VRAM limits.
Born from a real production setup running 7+ local models on an RTX 5080 16GB with a remote AI utility machine.
Features
- One-touch model switching — tap a button, model loads
- Radio group mutual exclusion — loading one model auto-unloads the previous
- Real-time health polling — green (loaded) / red (off) status on every button
- WSL2 bridge — Windows panel triggers Linux scripts seamlessly
- Remote machine monitoring — poll models running on network machines
- Kill switch — stop all LLM processes instantly
- Custom pixel art icons — 15 icon pairs included
- router-control.sh — full CLI for llama.cpp router API (list, switch, load, unload, status)
Supported Hardware
| Panel | Status |
|---|---|
| G.SKILL WigiDash | Full support with buttons.json configs |
| Elgato StreamDeck | Manual setup guide (no plugin yet — contributions welcome) |
| Any macro pad | Works with anything that can run shell commands |
Quick Start
- Clone this repo
- Copy
wigidash/examples/buttons-starter.jsonto your WigiDash widget directory - Copy icons from
wigidash/icons/ - Edit script paths to point to your
router-control.sh - Restart WigiDash Manager
See the README for full setup instructions.
What's Included
scripts/router-control.sh— llama.cpp router interfacewigidash/— WigiDash configs, setup guide, 30 custom iconsstreamdeck/— StreamDeck adaptation guide- Starter and full-fleet example configurations
License
MIT