Skip to content

Releases: Platano78/wigi-llm

v2.2.0 — Hardened: Real JSON Parsing, Safe Defaults, CI

Choose a tag to compare

@Platano78 Platano78 released this 03 Jul 17:03

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, pollHost were previously dropped on save). Malformed configs fall back to defaults instead of half-parsing.
  • Safe network defaultsstart-router.sh and gpu-vram-server.py now bind 127.0.0.1 by 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 Process is disposed (previously one leaked handle per button press)
  • Settings panel: polls the router host/port configured in buttons.json (was hardcoded 127.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.png reference, non-standard framework DLL path)
  • Static thumbnails no longer hardcode a 16 GB card; leftover SDK-template URL fixed; GpuInfo reuses a single HttpClient

Changed

  • Debug log files are now opt-in via WIGI_DEBUG=1 — released widgets no longer write to C:\temp or the Desktop continuously
  • README documents the buttons.json trust model: scriptPath runs verbatim via cmd.exe /c, so treat the file like a startup script

Removed

  • Dead ProcessLauncher.cs in the launcher

Full Changelog

See CHANGELOG.md for complete details.

v2.1.0 — Buildable, Configurable, Public-Ready

Choose a tag to compare

@Platano78 Platano78 released this 29 May 14:57

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 via vswhere (Community/Professional/Enterprise/Preview/Build Tools), so no hardcoded paths.
  • No more cryptic build failures. build.bat checks 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.bat copies Newtonsoft.Json.dll for 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} and serverPorts[] keys from buttons.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, and scripts/vram-utils.sh — the helpers router-control.sh sources 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.dll SDK requirement (and where to get it), and an explicit note that the modern dotnet CLI 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

Choose a tag to compare

@Platano78 Platano78 released this 19 May 12:51

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 /health for server nodes; tails mcp.log for 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 via CC_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 (local nvidia-smi.exe or remote gpu-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_HOME set 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.cs now routes the mcp.log path through WslPaths.UnderHome(...).
  • Normalized most widget csprojs to TargetFramework=v4.7.2 + LangVersion=5 for 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

Choose a tag to compare

@Platano78 Platano78 released this 22 Mar 02:49

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

  1. Clone this repo
  2. Copy wigidash/examples/buttons-starter.json to your WigiDash widget directory
  3. Copy icons from wigidash/icons/
  4. Edit script paths to point to your router-control.sh
  5. Restart WigiDash Manager

See the README for full setup instructions.

What's Included

  • scripts/router-control.sh — llama.cpp router interface
  • wigidash/ — WigiDash configs, setup guide, 30 custom icons
  • streamdeck/ — StreamDeck adaptation guide
  • Starter and full-fleet example configurations

License

MIT