May 9, 2026

v0.6.0: voice overhaul, live models, code diet

Chalie v0

Chalie v0.6.0 shipped with a major voice synthesis refactor that removed 350 lines of band-aid code and replaced the entire TTS pipeline with a direct call to Kokoro.create(). The previous pool, phonemize lock, chunker, retry, trimmer, and saturation detector were all working around problems caused by calling private internals instead of the public API. The new path reduces voice.py by 659 LOC and eliminates DC-saturation issues.

Voice reliability further improved: the run.sh stamp now only marks voice dependencies installed on a successful pip install, allowing automatic retry on the next launch. Backend routes return a structured 503 with an actionable hint when deps are missing, and the UI hides mic/speaker icons until voice health confirms readiness, preventing user confusion.

Provider management gained live model fetching: a keyup-debounced API call replaces hardcoded model lists. The manual Refresh button was removed; model lists auto-populate on tab switch when credentials are present, and newly added providers auto-activate when none is selected. Ollama’s redundant multi-select panel was dropped, leaving a single dropdown fed by the live endpoint.

A broad dead-code elimination effort removed unused surface across MemoryStore (hash subsystem, zset/string helpers), DocumentService, NewsService, WriteQueue, tool utilities, EventBusService, RefreshableLLMService, and over 40 zero-caller methods. Together these drops cut more than 900 LOC with no behavioral change.

A Docker publish race was fixed by passing the tag directly to install.sh via build-arg, avoiding a GitHub API call that could race with release publication. Several other fixes landed: forced MIME types on Windows, a legibility fix for the PWA install dialog, and a refresh of the Gemini model list against the current API.

  • Voice synthesis: 659 LOC removed, replaced chunk pipeline with Kokoro.create()

  • Provider models: debounced API fetch replaces hardcoded lists, manual Refresh button removed

  • Dead code: >900 LOC removed across MemoryStore, services, and utilities

  • Voice UX: mic/speaker icons hidden until ready; missing deps show actionable hint

  • Docker release: tag passed directly to install.sh to eliminate GitHub API race

  • Misc: static MIME fix for Windows, Gemini model list refresh, PWA dialog legibility