feat(chat): markdown formattato nella chat + testo pulito per la voce (v0.5.2)

- src/markdown.{h,cpp}: convertitore minimale, due funzioni:
  * toRichText() -> HTML per QML Text.RichText: grassetti (**x**/__x__),
    corsivi (*x*/_x_ con confini di parola per non toccare snake_case),
    titoli (#), liste (-/1.), citazioni (>), codice (`x` e blocchi ```,
    in monospace), link [t](u) -> solo testo, barrato ~~x~~; escape di
    < & > contro injection nel rich text
  * toSpeech() -> testo piatto per il TTS: via recinti di codice, marcatori
    di titoli/liste/citazioni, enfasi, backtick; link/immagini -> testo;
    tabelle | a | b | -> "a, b"; righe vuote compattate
- ChatModel: nuovo ruolo contentRich (calcolato in C++, testabile);
  incluso nei dataChanged dello streaming
- ChatPage: le bolle dell'assistente usano contentRich con
  textFormat: Text.RichText; i messaggi utente restano testo semplice
- ApiClient::speak(): il testo passa da Markdown::toSpeech (niente più
  simboli di formattazione letti ad alta voce)
- core-test: 19 casi nuovi per il convertitore (tutti locali, senza device)

Verificato: build zero warning + unit test completi.
This commit is contained in:
2026-09-13 08:04:19 +02:00
parent 257f9a079e
commit 7428d42b92
13 changed files with 320 additions and 14 deletions
+8 -1
View File
@@ -1,6 +1,6 @@
Name: harbour-hermes
Summary: Client for the Hermes Web UI with voice
Version: 0.5.1
Version: 0.5.2
Release: 1
Group: Qt/Qt
License: MIT
@@ -25,6 +25,13 @@ Sessions list, chat with live streaming replies, voice dictation
(server-side TTS), plus a hands-free conversation mode.
%changelog
* Sun Sep 13 2026 Carlo Baratto <carlo@carlobaratto.it> - 0.5.2-1
- Chat: le risposte di Hermes sono mostrate formattate (grassetti, corsivi,
titoli, liste, citazioni, codice, link) con un convertitore markdown ->
rich text minimale (src/markdown.*, testato nel core-test); i messaggi
dell'utente restano testo semplice
- TTS: il markdown viene ripulito prima della sintesi (niente più "asterisco
asterisco" letto ad alta voce)
* Sun Sep 13 2026 Carlo Baratto <carlo@carlobaratto.it> - 0.5.1-1
- Fix blocco sullo splash all'avvio: watchdog con timeout su tutte le
richieste (QNAM non ne applica: una richiesta senza risposta lasciava