feat(stt): entrée texte HUD + finitions client + doc incident LLM/GPU

Regroupe le travail postérieur à la PR #18 (squash-mergée), rebasé proprement
sur main :

- HUD : composer texte (chat clavier sans micro) — {"type":"text"} →
  VoiceEngine.respond_text (hors boucle audio), lock _respond (voix ⟂ texte)
- App autonome : fenêtre app/kiosk via profil + WM class dédiés (hors Brave)
- Auto-update non destructif : `stt --update` = pipx upgrade (ne laisse plus
  l'install cassée en cas d'échec réseau)
- Terminal propre : --log-level=3 + sortie navigateur vers DEVNULL
- Docs : admin/incidents-llm-gpu.md (journal d'inférence dédié) — incident
  2026-06-19 llama-server gelé (/health OK mais génération bloquée → 502),
  + HUD README / stt.md (composer), bump 0.4.x → 0.5.1

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
alkatrazz 2026-06-19 14:53:36 +02:00
parent 5f1e34dad9
commit 181df0a5c3
10 changed files with 293 additions and 40 deletions

View file

@ -14,6 +14,9 @@ renvoyer les réglages.
du personnage si aucune image (voir [`avatars/README.md`](avatars/README.md)).
- **Label d'état** : veille / écoute / réflexion / réponse.
- **Transcript** : bulles utilisateur / assistant (+ tag du modèle) / erreur.
- **Composer texte** (sous le transcript) : champ + bouton « Envoyer » pour
dialoguer **au clavier** sans micro — Entrée envoie, Maj+Entrée saute une ligne.
Le texte passe par le même cerveau que le vocal (modèle local / avancé).
- **Indicateur de connexion** websocket (point + libellé), reconnexion auto.
- **Drawer Réglages** (engrenage) : intensité de l'accent (thème), avatar, voix,
mot de réveil, mode cerveau (local/avancé), no-think, reset conversation.
@ -29,14 +32,18 @@ Reçus du backend (diffusés à tous les HUD connectés) :
| `{"type":"assistant","text":…,"mode":…}` | bulle assistant (+ tag modèle) |
| `{"type":"error","text":…}` | bulle d'erreur |
Envoyés au backend à chaque changement de réglage :
Envoyés au backend :
```json
{"type":"settings","data":{"brainMode":"local","wakeword":"…","action":"reset"}}
{"type":"text","text":"quelle heure est-il ?"}
```
Le serveur applique `action:reset`, `brainMode` (→ modèle LiteLLM) et `wakeword`
**à chaud** (`_apply_settings` dans `stt/ui/app.py`). Les réglages purement
**à chaud** (`_apply_settings` dans `stt/ui/app.py`). Un message `text` est traité
comme un tour de conversation (`VoiceEngine.respond_text`, hors boucle audio) : le
backend renvoie alors les événements `user` puis `assistant` — le HUD n'ajoute donc
pas la bulle utilisateur lui-même quand il est connecté. Les réglages purement
visuels (intensité d'accent, avatar) sont persistés côté navigateur (localStorage).
## Prévisualiser sans backend