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.