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
This commit is contained in:
2026-09-12 08:47:28 +02:00
parent 98139be96a
commit 479edb0f99
11 changed files with 157 additions and 30 deletions
+24 -13
View File
@@ -30,32 +30,43 @@ server ha una password impostata.
## 2. Sessioni
`GET /api/sessions` → lista per la sidebar:
`GET /api/sessions?sidebar_source=webui&exclude_hidden=1` → lista per la
sidebar (stessi parametri del frontend web: solo sessioni WebUI visibili;
senza parametri arrivano anche le CLI/cron e le nascoste — lista più lunga).
**Cattura reale del 12/09/2026** (chiavi verificate):
```json
{
"sessions": [
{
"session_id": "171ff18f9313",
"title": "Webui Session",
"session_id": "20260907_123845_c7e52d",
"title": "Diagnosi guasto YunoHost",
"workspace": "/home/kaneda/.hermes/profiles/carlo/home/workspace",
"model": "deepseek-v4-flash",
"model_provider": "deepseek",
"message_count": 2,
"created_at": 1785701975.8797414,
"updated_at": 1785701985.0872252,
"pinned": false, "archived": false,
"message_count": 163,
"created_at": 1788707925.6,
"updated_at": 1788778530.726691,
"pinned": false, "archived": false, "project_id": null,
"profile": "default",
"source_tag": "webui", "session_source": "webui",
"is_cli_session": false, "is_streaming": false,
"active_stream_id": null
"source_tag": "webui", "raw_source": "webui",
"session_source": "webui", "source_label": "WebUI",
"parent_session_id": null
}
],
"active_profile": "default",
"server_time": 1789188804.1041577
"sidebar_reference_sessions": [ "..." ],
"cli_count": 4, "archived_count": 0,
"archived_webui_count": 0, "archived_cli_count": 0,
"include_archived": false, "all_profiles": false,
"active_profile": "default"
}
```
⚠ Qt 5.6 (kit Sailfish 5.1): i campi di questi oggetti NON si risolvono nei
delegate QML quando il modello è una QVariantList (`model.campo` = undefined
→ righe vuote pur con dati corretti dal server). Il client usa un
QAbstractListModel C++ (`SessionsModel`) con ruoli `session_id`, `title`,
`message_count`, `updated_at`.
`GET /api/session?session_id=ID` → `{"session": { ... }}` con in più:
- `messages`: array di `{"role": "user"|"assistant", "content": "...",