v3.19.1
A correctness/UX bug-fix sweep (the "Tier-0" batch).
Fixed
- LSP diagnostics actually work.
diagnostics()was a no-op stub; it now reads the asynctextDocument/publishDiagnosticsnotification and returns a real list. New/lsp diagnostics <file>renders them, and the editor-bridgeGET /diagnosticsendpoint returns the documented list shape. - MCP stdio channel no longer desyncs.
_sendcorrelates responses by JSON-RPCidand skips notifications / server-initiated requests / non-JSON log lines — a notification arriving before the response used to be mistaken for it, permanently shifting every later reply by one. - Transient failover no longer sticks.
self.modelis restored after the turn instead of silently moving you off your chosen provider for the rest of the session. /embedand/ragpreflight the local embedding model (nomic-embed-text) and offer to pull it, instead of silently reportingEmbedded 0 files./compacton Claude keeps its summary instruction, and the context estimate accounts for images + system/tool-schema overhead so auto-compact triggers in time.
Changed
- UX:
/searchengine choice persists;/voicechecks for an OpenAI key up front (and uses the system temp dir, not/tmp); file-watch#AI:triggers print a hint to press Enter; the regex repo map labels Java/C symbols by keyword/type, not a leadingpublic/static.
667 tests passing.