mirror of
https://github.com/Alkatrazz24/Funk-lab.git
synced 2026-07-08 06:24:42 +02:00
feat(stt): lancement & cycle de vie du client — auto-start, app de bureau, auto-update (#18)
* feat(stt): auto-start via `stt --install-service` (phase 6) Ajoute `stt --install-service` / `--uninstall-service` : génère et active un service systemd --user (lié à graphical-session.target) qui lance le HUD + voix à l'ouverture de session. Le kiosk existant (ui.kiosk) fournit l'« écran Jarvis ». - cli : _service_unit (génération du unit, fonction pure testable), _cmd_install_service (écrit le unit + import-environment DISPLAY/WAYLAND + daemon-reload/enable/start), _cmd_uninstall_service. - Docs : admin/ia/stt.md (phase 6 → ✅, section Auto-start + caveat DISPLAY), stt/README. - Bump client 0.2.1 → 0.3.0. Phase 6 de la roadmap STT. Reste : test sur poste, outils Hermes (7). Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_017Qjq5jHiqNepnobJpHYpCa * feat(stt): app de bureau (fenêtre type Discord) + auto-update Rend STT lançable comme une application de bureau et ajoute la mise à jour intégrée. - Mode fenêtre « app » : _open_browser ouvre le HUD en fenêtre chromeless (--app=, type Discord) en plus du kiosk plein écran ; support Brave ajouté. Sélection via --window {app,kiosk,none} ou [ui].window_mode. - stt --install-desktop / --uninstall-desktop : entrée .desktop + icône (stt/hud/icon.svg, aussi favicon du HUD) → STT dans le menu/dock, lance --window app. - stt --update : pipx reinstall depuis la source git (via clé SSH), affiche « ancienne → nouvelle » ; stt --version. - Docs (admin/ia/stt.md, stt/README) + config (window_mode) + bump 0.3.0 → 0.4.0. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_017Qjq5jHiqNepnobJpHYpCa * fix(stt): détection navigateur cross-distro (AlmaLinux/Fedora + Debian/Ubuntu) _open_browser tente les binaires natifs (rpm + deb : brave-browser / chromium / chromium-browser / google-chrome…) puis Flatpak (com.brave.Browser, org.chromium.Chromium, com.google.Chrome…), sinon repli sur le navigateur par défaut. systemd --user, lanceurs .desktop et pipx sont déjà identiques sur les deux familles. Doc : note de compatibilité distros. Bump 0.4.0 → 0.4.1. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_017Qjq5jHiqNepnobJpHYpCa * docs(stt): journal 2026-06-18 + PROGRESS + ligne STT du CLAUDE.md - progress/2026-06-18.md : HUD avancé, auto-start, app de bureau, auto-update, cross-distro - PROGRESS.md : entrée du jour - CLAUDE.md : ligne STT enrichie (HUD, auto-start, app de bureau, auto-update) Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_017Qjq5jHiqNepnobJpHYpCa * feat(stt): fenêtre app autonome (profil + WM class dédiés, hors session Brave) Le mode app s'attachait à la session Brave de l'utilisateur (même profil/icône) → « ça sent le Brave ». On lance désormais une instance séparée : --class=STT-Funk + --user-data-dir dédié (~/.local/share/stt/app-profile), et le .desktop déclare StartupWMClass=STT-Funk → fenêtre autonome avec sa propre icône de barre des tâches. (Flatpak : --class seul, sandbox.) Une vraie fenêtre native (pywebview) reste une option ultérieure. Bump 0.4.1 → 0.4.2. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_017Qjq5jHiqNepnobJpHYpCa --------- Co-authored-by: Claude <noreply@anthropic.com>
This commit is contained in:
parent
2658f92c2f
commit
5f1e34dad9
12 changed files with 444 additions and 17 deletions
|
|
@ -12,10 +12,11 @@ Objectif ultérieur : « agir sur le homelab » via les outils de Hermes (phase
|
|||
> ✅ **2026-06-17** — déployé in-cluster (ArgoCD), mémoire court-terme (5a) + long-terme (5b)
|
||||
> **validées sur cible**, embeddings dédiés nomic `:1238` (5d) + fix thinking Qwen3 `/no_think`
|
||||
> (5e).
|
||||
> ✅ **2026-06-18** — HUD avancé (4) implémenté (design **Claude Design**) : avatar portrait
|
||||
> réactif (anneau/ping/spinner), transcript à bulles, drawer Réglages **câblé au backend**
|
||||
> (reset / mode cerveau / mot de réveil à chaud). Reste : test audio bout-en-bout sur le poste
|
||||
> (phase 1), portraits réels + test HUD sur cible, auto-start (6), outils Hermes (7).
|
||||
> ✅ **2026-06-18** — HUD avancé (4) + auto-start (6). HUD : design **Claude Design** (avatar
|
||||
> portrait réactif, transcript à bulles, drawer Réglages **câblé au backend** : reset / mode
|
||||
> cerveau / mot de réveil à chaud). Auto-start : `stt --install-service` (systemd --user).
|
||||
> App de bureau : `stt --install-desktop` (fenêtre type Discord) ; auto-update : `stt --update`.
|
||||
> Reste : test audio bout-en-bout (phase 1), portraits réels + test sur cible, outils Hermes (7).
|
||||
|
||||
---
|
||||
|
||||
|
|
@ -29,7 +30,7 @@ Objectif ultérieur : « agir sur le homelab » via les outils de Hermes (phase
|
|||
| Modèle local **ou** Claude | LiteLLM `:4000` + `hermes-default` + `hermes-switch qwen\|claude` | ✅ opérationnel |
|
||||
| Agir sur le homelab | Hermes Agent (`:8080`, profils funk-ai/system/monitor/brain) | ✅ opérationnel |
|
||||
| Voix (STT + TTS + wake word) | `tools/hermes-voice/` — faster-whisper + Piper + webrtcvad | ✅ existe (CLI only) |
|
||||
| Démarrage auto au boot | pattern `systemd --user` (`tools/hermes-voice/install-service.sh`) | ✅ éprouvé |
|
||||
| Démarrage auto au boot | `stt --install-service` (systemd --user) — repris du pattern `tools/hermes-voice/` | ✅ |
|
||||
| Mémoire sémantique | Qdrant `:6333` + RAG (`rag-query`/`rag-ingest`) sur s01 | ✅ Qdrant réparé 17/06 (RAG `funk-docs` à re-ingérer) |
|
||||
|
||||
Maillon réellement manquant : **l'interface graphique HUD** + le packaging + la mémoire perso.
|
||||
|
|
@ -157,6 +158,71 @@ Côté client, pilotable depuis `stt/client/config/` + l'écran de réglages du
|
|||
|
||||
---
|
||||
|
||||
## Auto-start (service systemd --user)
|
||||
|
||||
Lancer le HUD + voix automatiquement à l'ouverture de session (écran « Jarvis ») :
|
||||
|
||||
```bash
|
||||
stt --install-service # écrit ~/.config/systemd/user/stt.service, enable + start
|
||||
stt --uninstall-service # retire le service
|
||||
```
|
||||
|
||||
Le unit est lié à `graphical-session.target` (démarre avec la session graphique, s'arrête avec).
|
||||
Suivi : `systemctl --user status|restart stt`, `journalctl --user -u stt -f`.
|
||||
|
||||
**Caveat DISPLAY** : un service `systemd --user` n'hérite de `DISPLAY`/`WAYLAND_DISPLAY` que si la
|
||||
session graphique les a importés dans le gestionnaire user. `--install-service` exécute un
|
||||
`systemctl --user import-environment DISPLAY WAYLAND_DISPLAY XAUTHORITY` (best-effort). Si le kiosk
|
||||
ne s'ouvre pas : vérifier que le bureau peuple `graphical-session.target` (GNOME/KDE le font), ou
|
||||
lancer `stt` via les « applications au démarrage » du bureau. Le kiosk est piloté par `[ui].kiosk`
|
||||
(défaut `true`).
|
||||
|
||||
**Boot sans login** (borne dédiée) : `sudo loginctl enable-linger "$USER"` + auto-login du bureau —
|
||||
la session graphique démarre au boot et tire le service.
|
||||
|
||||
---
|
||||
|
||||
## Application de bureau & mise à jour
|
||||
|
||||
**Lancer STT comme une appli** (fenêtre dédiée type Discord, pas un onglet) :
|
||||
|
||||
```bash
|
||||
stt --install-desktop # entrée de menu (.desktop) + icône → épinglable au dock
|
||||
stt --uninstall-desktop # la retirer
|
||||
```
|
||||
|
||||
Le lanceur exécute `stt --window app` : le HUD s'ouvre en fenêtre *chromeless* (`--app=` de
|
||||
Chromium/Brave). Modes via `--window` ou `[ui].window_mode` : `app` (fenêtre), `kiosk` (plein
|
||||
écran, défaut du service), `none` (n'ouvre rien). L'icône est `stt/hud/icon.svg` (aussi favicon).
|
||||
La fenêtre tourne dans un **profil + une WM class dédiés** (`--class=STT-Funk`, `--user-data-dir`
|
||||
sous `~/.local/share/stt/app-profile`) → **instance autonome** avec sa propre icône/entrée de barre
|
||||
des tâches (associée au `.desktop` via `StartupWMClass`), séparée de ta session Brave. (Une vraie
|
||||
fenêtre native sans navigateur — via `pywebview` — reste possible plus tard si besoin.)
|
||||
|
||||
> ⚠️ Le lanceur de bureau et le service systemd (kiosk) utilisent les **mêmes ports** (9300/9301) :
|
||||
> n'en faire tourner qu'un à la fois. Borne dédiée → service kiosk ; usage à la demande → lanceur
|
||||
> de bureau (et `stt --uninstall-service`).
|
||||
|
||||
**Mettre à jour** (sans désinstaller/réinstaller à la main) :
|
||||
|
||||
```bash
|
||||
stt --update # pipx reinstall depuis la source git (via ta clé SSH) — affiche ancienne → nouvelle
|
||||
stt --version # version installée
|
||||
```
|
||||
|
||||
`--update` re-récupère la dernière version depuis la branche/source d'installation. Pré-requis :
|
||||
avoir installé via `pipx` depuis git. Astuce : toujours bumper la version du paquet à chaque
|
||||
release, sinon le cache de build pipx/uv peut resservir l'ancienne (cf. `pyproject.toml`).
|
||||
|
||||
**Compatibilité distros** : tout le client repose sur des standards communs — `systemd --user`,
|
||||
lanceurs `.desktop` (XDG `~/.local/share/applications/`), `pipx` — donc **identique sur
|
||||
AlmaLinux/Fedora (RHEL) et Debian/Ubuntu**. Seul le navigateur diffère : `_open_browser` teste
|
||||
les binaires natifs (rpm + deb) puis **Flatpak** (`com.brave.Browser`, `org.chromium.Chromium`…),
|
||||
sinon repli sur le navigateur par défaut. `update-desktop-database` (`desktop-file-utils`) est
|
||||
optionnel — son absence n'empêche rien.
|
||||
|
||||
---
|
||||
|
||||
## Roadmap
|
||||
|
||||
| Phase | Objectif | État |
|
||||
|
|
@ -171,7 +237,7 @@ Côté client, pilotable depuis `stt/client/config/` + l'écran de réglages du
|
|||
| **5c — Réparation Qdrant** | drop `funk-docs` corrompu + restart (s01) | ✅ (17/06) |
|
||||
| **5d — Embeddings dédiés** | `nomic-embed-text` (dim 768) sur gpu-01 `:1238` → recherche plus précise | ✅ (rôle llama_server + migration auto collection) |
|
||||
| **5e — Fix thinking Qwen3** | `/no_think` (content vide / timeout 502) + fallback reasoning_content | ✅ (17/06) |
|
||||
| **6 — Auto-start client** | `install-service.sh` (systemd --user) + kiosk | ⏳ |
|
||||
| **6 — Auto-start client** | `stt --install-service` (systemd --user, `graphical-session.target`) + kiosk | ✅ (à tester sur poste) |
|
||||
| **7 — Outils Hermes** | « agir sur Funk » via gateway `:8080` (API à spécifier) | ⏳ |
|
||||
|
||||
### État (validé sur cible)
|
||||
|
|
@ -179,8 +245,9 @@ Côté client, pilotable depuis `stt/client/config/` + l'écran de réglages du
|
|||
Serveur déployé in-cluster via ArgoCD (image `sha-<commit>` gérée par CI). Mémoire **5a + 5b
|
||||
validées en prod** : court-terme (historique de session) et long-terme (rappel cross-session
|
||||
« Felix », `points_count` confirmé via `/v1/memory/health`). HUD avancé (4) **implémenté**
|
||||
(design Claude Design, câblé au websocket backend). Reste côté poste : test audio bout-en-bout
|
||||
(micro → STT → serveur → TTS) et test du HUD avec portraits réels.
|
||||
(design Claude Design, câblé au websocket backend) ; auto-start (6) via `stt --install-service`.
|
||||
Reste côté poste : test audio bout-en-bout (micro → STT → serveur → TTS) et test du HUD/kiosk
|
||||
avec portraits réels.
|
||||
|
||||
---
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue