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

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:

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 (Sailfish SDK, sfdk build / sfdk deploy) and 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.

S
Description
Client nativo Sailfish OS per Hermes WebUI con voce: chat streaming, dettatura, TTS, modalita dialogo
Readme
274 KiB
Languages
C++ 72.3%
QML 24.4%
QMake 2%
Python 1.3%