Custom Endpoint, rebuilt
Each Custom Endpoint now has a stable Provider ID slug, a separate Display name, a manual Models list (model-id + label pairs), and a Headers block for endpoints that authenticate via custom headers. Reserved slugs are rejected and an empty Models list still falls back to /v1/models auto-discovery. Existing endpoints migrate automatically — nothing to redo.
Every saved endpoint can be edited in place: Display name, base URL, API key, Models, or Headers, without deleting and rebuilding. The edit form sends a JSON Merge Patch delta so changing one header never touches the others, and soft-deleted rows are reversible with an Undo button before you save. The API key is only cleared via the explicit Clear key action — empty inputs are safe.
Rapid-MLX, one-click uninstall
The Rapid-MLX panel has a new Uninstall button that stops the runtime, deletes downloaded MLX model snapshots from the HuggingFace cache, clears OpenYak's saved configuration, and surfaces the brew/pip command for removing the user-installed binary itself. Freed-bytes accounting is now accurate — the previous calculation followed symlinks in the HuggingFace cache and effectively double-counted every blob.
Provider lifecycle polish
Disable→enable on a Custom Endpoint now correctly re-registers the provider. GET /config/providers self-heals stale unregistrations on read. Saving an unchanged field no longer triggers a model refresh — editing only Display name doesn't poke /v1/models. Custom endpoint create / update / heal each refresh only the affected provider instead of doing a full cross-provider sweep. 91 new backend unit tests landed with this release.
Quieter chat header
The floating SESSION USAGE card on the chat header is gone, and the pricing pill that sat to the left of the submit button is gone. Token usage stays available in the dedicated Usage tab.