Files
harbour-hermes/README.md
T
kaneda db75d5fea1 fix(settings): le impostazioni ora persistono davvero dal launcher (v0.5.3)
Causa (il "solito" problema dei progetti Sailfish): QSettings di default
scrive in ~/.config/harbour/hermes.conf, FUORI dalla directory che la
sandbox SailJail rende persistente (~/.config/harbour/hermes/). Dal
launcher le modifiche finivano in una vista effimera e sparivano a ogni
riavvio; da terminale invece restavano (da qui l'effetto "a volte si' a
volte no"). Stesso problema gia' risolto in harbour-calibreweb e
harbour-quill con il percorso esplicito.

- Settings: QSettings(configPath(), IniFormat) con configPath() =
  AppConfigLocation + "/hermes.conf" (mkpath della directory)
- store(): ogni setter fa setValue + sync immediato (nessuna modifica
  persa se il sistema termina l'app)
- migrateIfNeeded(): al primo avvio importa i valori rimasti nel vecchio
  percorso di default (~/.config/harbour/hermes.conf, piu' i path legacy
  nemo/defaultuser)
- diagnostica: log del file impostazioni e dei valori letti all'avvio
- core-test: test di persistenza (scrittura con una istanza, rilettura
  con una SECONDA istanza: prova che passa dal file su disco)
2026-09-13 13:53:17 +02:00

85 lines
3.8 KiB
Markdown

# harbour-hermes
Native **Sailfish OS** client for the **Hermes Web UI** (`hermes-webui`):
chat with your Hermes agent from the phone — and use it with your **voice**.
## Features
- Sign in to your Hermes Web UI (session cookie persisted; password never stored)
- Sessions list, new session, open any session
- Chat with **live streaming** replies (SSE token deltas)
- **Voice dictation**: tap Mic, speak, tap Stop → server-side Whisper
transcription lands in the composer (optionally sent right away)
- **Read aloud**: server-side TTS (voice/engine configurable) played through
QMediaPlayer; optional auto-read of every completed reply
- **Voice dialog (hands-free)**: continuous listen → transcribe → send →
read-aloud loop, auto-stopping on speech pauses (tunable)
- **Localized UI**: English (source), Italian, French and German — follows
the system language
- **Profile selection**: pick which server profile's sessions to show
(Settings → Sessions; per-client via the WebUI signed cookie)
- Cancel a running turn, resync from server state, cover page
## Requirements
- Sailfish OS 4.4+ (developed against Sailfish 5.1)
- A running `hermes-webui` instance reachable over HTTPS (the address is
configured in the app — nothing is compiled in)
- Sailjail permissions `Internet;Audio;Microphone` (declared in the .desktop)
## Configuration
No configuration is compiled into the binary: everything lives in the app's
Settings (persisted in `~/.config/harbour/hermes.conf`, sandbox-persistent).
Defaults are neutral — empty means "the server decides" — and the login screen
requires a server address.
| Setting | Meaning |
|---|---|
| Server | Hermes Web UI address, e.g. `https://hermes.example.com` (required) |
| Profile | server profile whose sessions are shown (empty = server's active) |
| Read-aloud voice / TTS engine | empty = server defaults |
| Voice/engine presets | comma-separated lists used to fill the pickers |
| Read replies aloud | auto-play every reply (off by default) |
| Send right after dictation | auto-send when dictation lands (on by default) |
| Auto-stop pause / Mic sensitivity | voice-dialog tuning (1.5 s / medium) |
| Max recording time | voice-dialog safety cap (60 s) |
> **Read-aloud voices depend on your server.** The selected voice is sent to
> `hermes-webui`'s `/api/tts`, which only accepts voices present in its Edge
> TTS allowlist (`api/routes.py`; upstream ships Chinese, English, French and
> Indonesian voices). If your server rejects a voice (`400 invalid voice`),
> pick another one, leave the voice empty (server default), or add your
> language's voices to your own `hermes-webui`.
## Localization
The UI follows the system language: English is the source language, and
Italian, French and German translations live in `translations/*.ts`. At build
time (`sailfishapp_i18n`) the `.qm` files are generated and installed to
`/usr/share/harbour-hermes/translations`, where the app loads them on startup.
After changing UI strings:
```bash
lupdate -no-obsolete -recursive src qml \
-ts translations/harbour-hermes-it.ts \
translations/harbour-hermes-fr.ts \
translations/harbour-hermes-de.ts
# then edit the .ts files and rebuild
```
## Build
See [docs/BUILD.md](docs/BUILD.md) (Sailfish SDK, `sfdk build` / `sfdk deploy`)
and [docs/PROTOCOL.md](docs/PROTOCOL.md) for the HTTP/SSE protocol the app
speaks (validated live against a real instance).
## Status
Version 0.5.3 — protocol and C++ core validated against a real `hermes-webui`
(login, sessions, streaming chat, TTS, STT, voice dialog, profile selection);
UI in English, Italian, French and German; replies rendered as formatted
markdown and cleaned before read-aloud; settings persist correctly from the
launcher (SailJail-safe config path); every request has a watchdog timeout;
on-device testing still ongoing.