mirror of
https://github.com/R0m1k3/EveFlow.git
synced 2026-10-11 17:29:03 +02:00
Complete rewrite of the application: - Toolchain: Electron 44, Vite 8, React 19, TypeScript 5.9, Zustand, Vitest; main process rewritten in TypeScript (electron/), typed IPC contract (shared/), sandboxed renderer with webSecurity on and an HTTP/SSE proxy in the main process. - Voice: AudioWorklet microphone capture at 16 kHz with adaptive energy VAD and auto-stop, WAV encoder, OpenAI-compatible STT, TTS queue with sentence-level streaming, prefetch and Web Audio playback feeding an analyser; hands-free mode, global push-to-talk hotkey, system-voice fallback. - Hermes: full API client (capabilities, health, models, skills, toolsets, sessions, jobs) with automatic transport selection: runs API (SSE lifecycle, approvals, steer, stop) > sessions stream > chat completions with local tools; tolerant event normalisation; webhook receiver hardened (secret, size limit). - UI: JARVIS arc-reactor core on Canvas 2D reacting to the real audio signal, holographic HUD layout (transcript, core, Hermes ops panel with tools/crons/ skills/sessions/link tabs, telemetry), settings drawer, approval modals, compact floating widget, four themes, tray icon and global shortcuts. - Removed the 3D Eve robot, three.js and legacy assets; migrated 1.x settings. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_017Wn5VX9HNbJ7N54hR24u9Y
112 lines
6.3 KiB
Markdown
112 lines
6.3 KiB
Markdown
# EveFlow 2 — Interface vocale JARVIS pour Hermes Agent
|
|
|
|
[](https://github.com/R0m1k3/EveFlow/actions)
|
|
[](https://github.com/R0m1k3/EveFlow/releases)
|
|
[](LICENSE)
|
|
|
|
**EveFlow** est un compagnon de bureau Windows qui transforme [Hermes Agent](https://hermes-agent.nousresearch.com/) en assistant vocal à la JARVIS : un noyau holographique réactif au son, une conversation en streaming, les outils, sous-agents, approbations, crons, skills et sessions d'Hermes pilotés depuis un seul HUD.
|
|
|
|
La version 2 est une réécriture complète : plus de robot 3D, un pipeline vocal fiable (AudioWorklet + détection d'activité vocale), un client Hermes qui exploite l'API serveur complète (runs SSE, sessions, jobs, capabilities) et une architecture Electron sécurisée (sandbox, `webSecurity` actif, réseau proxifié par le processus principal).
|
|
|
|
---
|
|
|
|
## Fonctionnalités
|
|
|
|
### Noyau JARVIS
|
|
* Arc reactor rendu en Canvas 2D : anneaux gradués, arcs segmentés et spectre radial calculé sur le **vrai signal audio** (voix synthétisée ou microphone).
|
|
* États visuels : veille, écoute, analyse (outils en cours), transmission, attention (approbation), anomalie, succès.
|
|
* Quatre thèmes (arc cyan, gold, crimson, emerald), mode animations réduites.
|
|
* Mode compact flottant toujours au premier plan, opacité réglable.
|
|
|
|
### Voix
|
|
* **Capture micro** via AudioWorklet à 16 kHz, sans monitoring du micro dans les haut-parleurs, avec annulation d'écho et réduction de bruit.
|
|
* **Détection d'activité vocale** (seuil adaptatif, sensibilité et silence de fin réglables) : l'enregistrement s'arrête tout seul quand vous avez fini de parler.
|
|
* **Mains libres** : le micro se réactive après chaque réponse.
|
|
* **STT** : n'importe quelle API `/v1/audio/transcriptions` compatible OpenAI (Qwen3-ASR, Whisper, Speaches, faster-whisper-server, LocalAI, OpenAI). Repli sur la reconnaissance Chromium.
|
|
* **TTS** : API `/v1/audio/speech` compatible OpenAI (Kokoro, Piper, OpenAI…), voix système Windows ou Google Translate. Lecture phrase par phrase pendant le streaming, préchargement du segment suivant, coupure instantanée.
|
|
* Raccourcis globaux : `Ctrl+Shift+Espace` (micro), `Ctrl+Shift+J` (afficher/masquer), `Ctrl+Shift+Échap` (couper la voix).
|
|
|
|
### Hermes, toute la puissance
|
|
* Découverte automatique via `GET /v1/capabilities` et `GET /health/detailed`, choix du transport le plus riche :
|
|
1. **Runs API** (`POST /v1/runs` + `GET /v1/runs/{id}/events`) : deltas, outils, sous-agents, `approval.request`, `run.completed`, arrêt (`/stop`) et injection de consignes en cours de run (`/steer`).
|
|
2. **Sessions API** (`/api/sessions/{id}/chat/stream`) : mémoire côté serveur, fork, suppression, relecture de l'historique.
|
|
3. **Chat completions** OpenAI (`/v1/chat/completions`) avec `hermes.tool.progress`, continuité de session (`X-Hermes-Session-Id`) et outils EveFlow côté client (état du HUD, fichiers partagés, notifications).
|
|
* Mémoire longue durée via `X-Hermes-Session-Key`.
|
|
* **Approbations** d'outils affichées dans le HUD : une fois, pour la session, toujours, refuser.
|
|
* **Crons** : création en langage naturel (`every 1h`, `weekdays at 9am`, `in 30m`, expression cron), pause/reprise, exécution immédiate, édition, historique des résultats lus à voix haute.
|
|
* **Skills et toolsets** exposés par le serveur, **sessions** navigables.
|
|
* **Webhook local** (`POST http://<pc>:7842/eveflow/hook`) pour recevoir les livraisons de crons, le miroir Telegram ou n'importe quel script, avec secret optionnel.
|
|
* Images inline (URL, data URL, fichiers du dossier partagé `Documents/EveFlow_Shared`).
|
|
|
|
### Système
|
|
* Télémétrie réelle : charge CPU, mémoire, fréquence, FPS, uptime.
|
|
* Journal sur disque (`%APPDATA%/eveflow/eveflow.log`), icône de zone de notification, instance unique.
|
|
|
|
---
|
|
|
|
## Stack
|
|
|
|
* Electron 44 (sandbox, contextIsolation, `webSecurity` actif, proxy HTTP en streaming dans le main process)
|
|
* React 19 + Vite 8 + TypeScript 5.9 + Zustand
|
|
* Canvas 2D, Web Audio (AudioWorklet, AnalyserNode)
|
|
* Vitest pour les tests unitaires (SSE, VAD, WAV, normalisation d'événements Hermes)
|
|
|
|
```
|
|
electron/ processus principal (fenêtre, tray, raccourcis, IPC, webhook, proxy HTTP)
|
|
shared/ contrat IPC + normalisation des pushs webhook (main + renderer)
|
|
src/lib transport, SSE, persistance, utilitaires texte
|
|
src/services hermes/ (client, événements, outils locaux) voice/ (capture, VAD, STT, TTS)
|
|
src/state stores Zustand (settings, chat, hermes, voice)
|
|
src/components hud/ chat/ panels/ settings/ compact/
|
|
tests/ vitest
|
|
```
|
|
|
|
---
|
|
|
|
## Prérequis côté Hermes
|
|
|
|
Activez le serveur API dans la configuration Hermes (`~/.hermes/config.yaml`) ou via l'environnement :
|
|
|
|
```
|
|
API_SERVER_ENABLED=true
|
|
API_SERVER_PORT=8642
|
|
API_SERVER_KEY=<votre clé>
|
|
```
|
|
|
|
Puis lancez `hermes gateway`. Renseignez l'URL (`http://<hôte>:8642`) et la clé dans **Paramètres → Hermes** et cliquez **Tester la liaison**. Le transport choisi apparaît dans la barre supérieure.
|
|
|
|
Pour recevoir les résultats de crons ou le miroir d'autres canaux dans EveFlow, faites pointer une livraison Hermes (script, webhook, `deliver`) vers `http://<ip-du-pc>:7842/eveflow/hook` avec un JSON tel que :
|
|
|
|
```json
|
|
{ "role": "assistant", "text": "Rapport terminé", "source": "telegram" }
|
|
{ "event": "run.completed", "input": "question", "output": "réponse" }
|
|
{ "event": "job.completed", "job": { "name": "Rapport" }, "output": "…", "status": "ok" }
|
|
```
|
|
|
|
---
|
|
|
|
## Développement
|
|
|
|
```bash
|
|
npm install
|
|
npm start # Vite + Electron (rechargement à chaud du renderer)
|
|
npm test # tests unitaires
|
|
npm run typecheck # renderer + main process
|
|
```
|
|
|
|
Sans Electron, `npm run dev` puis `http://127.0.0.1:5173/` (ou `?mode=compact`) permet de travailler l'interface dans un navigateur ; les appels réseau passent alors directement par `fetch` (CORS requis côté serveur).
|
|
|
|
## Packaging Windows
|
|
|
|
```bash
|
|
npm run dist
|
|
```
|
|
|
|
L'installateur NSIS est produit dans `out/`. Le workflow GitHub Actions construit l'exécutable sur chaque tag `v*`.
|
|
|
|
---
|
|
|
|
## Licence
|
|
|
|
MIT.
|