476c89ce3d
Mode mains-libres : écoute en boucle déclenchée par le wake-word « CHLOVA … » (extractCommand), micro en pause pendant le TTS pour éviter l'auto-écoute ; réponses lues d'office. Bouton Libre + indicateur. 100% navigateur. Build OK. Palier de risque : reversible (front). Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
37 lines
1.4 KiB
Markdown
37 lines
1.4 KiB
Markdown
# web — UI CHLOVA
|
|
|
|
Client web/PWA du backend CHLOVA. **Phase 4.** Style dark HUD (voir
|
|
`../docs/ui-design.md`). React 19 + Vite 8 + Tailwind 4 + react-router 7.
|
|
|
|
## Dev
|
|
```bash
|
|
npm install
|
|
npm run dev # http://localhost:5173 ; proxy /api → backend :8080
|
|
npm run build # → web/dist (servi same-origin par le backend en prod)
|
|
npm run typecheck
|
|
```
|
|
Le backend doit tourner avec l'auth configurée (`CHLOVA_ADMIN_*`, voir
|
|
`orchestrator` → `npm run provision-auth`).
|
|
|
|
## Structure
|
|
| Fichier | Rôle |
|
|
|---|---|
|
|
| `src/api.ts` | Client API (login, chat, review, state). |
|
|
| `src/auth.tsx` | Contexte JWT (localStorage) + login/logout. |
|
|
| `src/App.tsx` | Router + shell (garde : pas de token → Login). |
|
|
| `src/pages/Login.tsx` | Login fort (mdp + TOTP). |
|
|
| `src/pages/Chat.tsx` | Conversation agent (v0.23.0). |
|
|
| `src/pages/Review.tsx` | Need-review : approuver/refuser (v0.24.0). |
|
|
|
|
## Voix (Phase 6)
|
|
100 % navigateur (Web Speech API), zéro backend/GPU :
|
|
- **Parler** : dictée push-to-talk (fr-FR) → envoyée à l'agent.
|
|
- **Voix ON/OFF** : lecture vocale des réponses (TTS), réglage persistant.
|
|
- **Libre** : mains-libres, déclenché par le wake-word « CHLOVA … » ; le micro se
|
|
met en pause pendant la synthèse pour éviter l'auto-écoute.
|
|
|
|
STT = Chrome/Edge (webkit) ; TTS = large support. Dégrade proprement sinon.
|
|
|
|
## Périmètre
|
|
Login → Chat (+ voix) → Review. App RN : phase ultérieure (API commune réutilisée).
|