Files
harbour-hermes/docs/BUILD.md
T
kaneda 479edb0f99 fix(sessions): lista vuota sul device — modello C++ con ruoli (v0.1.2)
Causa: su Qt 5.6 (kit Sailfish 5.1) una QVariantList di QVariantMap
usata come model non fa risolvere i campi nei delegate QML
(model.title/message_count/updated_at = undefined -> righe vuote), pur
con payload corretto dal server (verificato con cattura reale del 12/09).

- Nuovo src/sessionsmodel.{h,cpp}: QAbstractListModel con ruoli
  session_id/title/message_count/updated_at; api.sessions ora e' il
  modello, api.sessionsCount per lo stato "nessuna sessione"
- /api/sessions con sidebar_source=webui&exclude_hidden=1 (come la
  sidebar del browser: solo sessioni WebUI, niente CLI/cron/nascoste)
- SessionsPage: describe(message_count, updated_at) con parametri espliciti
- PROTOCOL.md: payload sessions verificato + nota del pitfall Qt 5.6
2026-09-12 08:47:28 +02:00

108 lines
3.8 KiB
Markdown

# Build: compilazione, test e deploy
## 1. Prerequisiti SDK
- Sailfish SDK (testato su 5.1.0.11) con target del dispositivo aarch64:
`SailfishOS-5.0.0.62-aarch64` (Jolla Phone 2026) o equivalente.
- Nel target SDK serve **QtMultimedia** (registrazione/riproduzione):
se `pkgconfig(Qt5Multimedia)` non è trovato in fase di build, installa il
pacchetto devel nel target:
```bash
sfdk tools exec SailfishOS-5.0.0.62-aarch64 zypper install -y qt5-qtmultimedia-devel
```
(oppure via Qt Creator: Tools → Sailfish OS → Manage targets → Packages,
oppure `sfdk target install` con un RPM locale.)
## 2. Build e deploy dell'app
```bash
cd harbour-hermes
sfdk build # genera RPMS/
sfdk deploy # installa sul device collegato
```
Note:
- Il target è Qt 5.6: il codice del core è scritto per compilare anche lì
(niente API Qt > 5.6; per il TTS si usa `audio/mpeg` di edge-tts).
- Il profilo SailJail è nel `rpm/harbour-hermes.desktop`
(`Internet;Audio;Microphone`) e deve restare allineato a
`setOrganizationName("harbour")` / `setApplicationName("hermes")` in `main.cpp`.
- Al primo uso del microfono Sailfish chiede il consenso al permesso
**Microphone**.
## 3. Test del core in locale (senza SDK)
Il core (ApiClient, ChatModel, parser SSE, Recorder, Player) si compila anche
su desktop con Qt 5.15 per i test:
```bash
# Qt desktop (qui: Qt 5.15.2 nel kit locali)
export PATH=<Qt5.15>/gcc_64/bin:$PATH
mkdir -p /tmp/hh-test && cd /tmp/hh-test
qmake /percorso/harbour-hermes/tests/core_test.pro
make -j4
```
- **Unit** (parser SSE): `./core-test`
- **Integrazione live**: `./core-test --live`
richiede un'istanza di prova di hermes-webui su `http://127.0.0.1:8899`
con password in `/tmp/hermes-probe/pw` e l'audio di prova in
`/tmp/hermes-probe/out/prova.ogg` (vedi note in `tests/core_test.cpp`).
Il flusso coperto: login → nuova sessione → turno con streaming → TTS →
trascrizione.
Nota desktop: se manca `libGL.so` di sviluppo, creare un symlink
`libGL.so -> /usr/lib/x86_64-linux-gnu/libGL.so.1` e assicurarsi che
`core_test.pro` punti lì (`GLSTUB`), oppure lanciare con `LD_LIBRARY_PATH`
puntato alla lib dir di Qt.
Nota desktop 2: Qt5Multimedia richiede `libpulse-mainloop-glib.so.0`
(pacchetto `libpulse-mainloop-glib0`, non installato su questo server).
Senza sudo si estrae dal .deb:
```bash
mkdir -p /tmp/hh-libs && cd /tmp/hh-libs
apt-get download libpulse-mainloop-glib0
dpkg-deb -x libpulse-mainloop-glib0_*.deb ext
export LD_LIBRARY_PATH=/tmp/hh-libs/ext/usr/lib/x86_64-linux-gnu:<Qt>/gcc_64/lib
```
Esecuzione: `./core-test` (unit) e `./core-test --live` (integrazione,
richiede il probe WebUI su :8899). Esito 12/09/2026: unit 9/9, live completo OK.
## 4. Tarball per la build da Qt Creator
```bash
cd /home/kaneda/workspace
tar czf harbour-hermes-0.1.2.tar.gz \
--transform 's,^harbour-hermes,harbour-hermes-0.1.2,' \
--exclude='.git' harbour-hermes
```
Lo spec si aspetta la directory `harbour-hermes-0.1.2/` (pattern degli altri
progetti: cercato in modo robusto anche per i sorgenti live di sfdk).
## 5. Dipendenze lato server (WebUI)
- `/api/transcribe` richiede un provider STT attivo sul server
(qui: faster-whisper locale — verificato con `/api/transcribe/capability`).
- `/api/tts` con engine `edge` non richiede chiavi API.
- Le voci italiane di edge sono state aggiunte all'allowlist del server
(patch a `hermes-webui/api/routes.py` + test
`tests/test_italian_voices_tts_allowlist.py`): per attivarle **riavviare
il servizio WebUI** (`sudo systemctl restart hermes-webui`).
- Per una dettatura italiana corretta impostare in `~/.hermes/config.yaml`:
```yaml
stt:
provider: local
local:
model: base
language: it
```
(senza, whisper può tradurre/maltrascrivere l'italiano). Richiede il
riavvio del WebUI.