v0.12.4
Immutable
release. Only release title and notes can be modified.
[0.12.4] - 2026-06-22 - MINXG Chat rewrite + flicker-free picker + safe print
MINXG Chat rebuild
- A proper REPL replaces the old "you > " stub.
tui_chat()now lives entirely inmultiligua_cli/tui_chat.py
and ships a polished three-region UI: a top status bar
(provider · model · host · depth/cost), a scrolling conversation
thread that streams tokens underrich.live, and a
helper-rich bottom input box. The brand label inside the banner is
MINXG Chat(formerly the ambiguous "chat CLI") — the change
is documented in README §Tutorial A. - Brand refactor. The hard-coded product name in the chat
surface,/help, README, and DEVELOPER.md is consolidated under
tui_chat._BRAND = "MINXG Chat". Updating the brand now means
changing one constant. - Streaming faithful to upstream events.
_streamconsumestext / thinking / tool_call / tool_result / done / errorevents fromNexusOrchestrator.chat_streamand
renders tool calls as inline→ name (Nms)widgets with a
yellow anti-loop warning line if the safety guard fires.
In-place reconfiguration (no chat restart)
- New slash commands:
/setup,/provider [slug],/model [name],/url [URL],/apikey [KEY],/lang [code],
/history. They hot-swap the orchestrator, save the config
atomically (tmp + os.replace), and re-paint the status bar
without dropping the session. /provider <slug>is non-interactive (omit the slug for the
picker)./model <name>tries to fetchGET /modelsfrom the
current provider; if the API is reachable, the picker shows the
real list of available models. If the fetch fails, it falls back
to the provider'sdefault_modeland accepts typed input./setupreruns the wizard with the existing config as
defaults, then re-renders the chat banner — no more "exit chat
→minxg setup→ re-enter chat" round-trip./apikeyis masked before being written to disk, the way
the wizard has always done it. Naked key payloads no longer leak
to log files.
Bug fixes
MinxgMenuno longer flickers under Termux. The old
_renderforkedclearon every arrow-key press and wiped the
whole scrollback; the new implementation paints in place using
\033[<n>A(cursor up) +\033[J(erase to end of screen), so
the chat scrollback stays intact and no full-screen flicker
shows up under tmux/SSH/screen.print_error / print_success / print_info / print_warning / print_dimno longer crash on user messages that contain
brackets. A new_escape_markupescapes[and]in
inbound strings before handing them to rich, so URLs, exception
messages and model names with brackets stop raising
rich.errors.MarkupErrorinside the chat prompt.
NUANCE alignment
- The new
_save_config(atomic write) centralises every
one-shot setter that previously hand-rolledyaml.dump—
minxg model <name>,minxg api <url>,minxg key <key>,
minxg lang <code>now share one error-handling path. - All chat-side saves log a friendly
Config saved to .../
Save failed: <hint>line so the user can see exactly which
file was touched (and why) — instead of dumping a yaml
traceback on top of a half-finished wizard panel.
The format is based on Keep a Changelog,
and this project adheres to Semantic Versioning.