UI web d'admin + garde-fou recettes premium (supplément hors abonnement)

- Refus des recettes payantes (chargeSetting) à la sélection, override allow_premium
- Recipe.surcharge_cents/is_premium exposés dans summary(); propose() les exclut
- hellofresh/webui.py : page d'admin + API JSON montées sur FastMCP (/, /api/*)
  édition à chaud des excludes et préférences (liked/disliked)
This commit is contained in:
jerem
2026-06-18 18:07:12 +02:00
parent a14ce4664b
commit 61ee7f02a4
6 changed files with 358 additions and 10 deletions

View File

@@ -35,9 +35,11 @@ intervention ni re-sync. Le navigateur headless ne sert plus que de filet de sec
```
Hermes ──HTTP──▶ server.py (FastMCP, :9200/mcp)
navigateur ──▶ server.py (UI admin, :9200/)
├─ hellofresh/auth.py session storage_state + refresh HTTP /gw/refresh
├─ hellofresh/api.py httpx : menu, détails, deliveries, PUT cart
├─ hellofresh/filter.py exclusion (coco !) + scoring préférences
├─ hellofresh/webui.py page d'admin + API JSON (édition à chaud)
└─ config/ excludes.json · prefs.json · endpoints.json
```
@@ -129,10 +131,24 @@ Enregistrer AntiCoco dans la config MCP de Hermes (côté homelab), URL
| `hf_next_delivery()` | **prochaine box réellement sélectionnée** (≈4 recettes) + date/cutoff, images servables — prêt Telegram |
| `hf_favorites()` | recettes **favorites** du compte (images servables) |
| `hf_get_menu(week)` | toutes les recettes, avec `contains_excluded` et `is_favorite` |
| `hf_propose(week, count=0)` | shortlist **sans coco**, classée par préférences |
| `hf_confirm_selection(week, recipe_ids)` | **écrit** la sélection (refuse la coco) |
| `hf_propose(week, count=0)` | shortlist **sans coco ni premium**, classée par préférences |
| `hf_confirm_selection(week, recipe_ids, allow_premium=False)` | **écrit** la sélection (refuse coco **et** recettes payantes hors abonnement) |
| `hf_get_excludes()` / `hf_add_exclude(term)` / `hf_remove_exclude(term)` | gérer la liste d'exclusion |
Les recettes premium (supplément, `chargeSetting` côté HelloFresh) portent `is_premium` /
`surcharge_eur` dans chaque réponse. `hf_confirm_selection` les refuse par défaut ;
`allow_premium=True` accepte sciemment le surcoût.
## Interface web d'admin
Sur le **même port que MCP** : `http://127.0.0.1:9200/` (MCP reste sur `/mcp`).
Édition à chaud (prise en compte au prochain appel, sans redémarrage) de :
- la **liste d'exclusion** (coco & co) ;
- les **préférences** de scoring `liked` / `disliked`.
Le port est bindé sur `127.0.0.1` du homelab : y accéder via tunnel SSH
(`ssh -L 9200:127.0.0.1:9200 homelab`) puis ouvrir `http://localhost:9200/`.
## Configuration
- `config/excludes.json` — ingrédients bannis (matching insensible casse/accents). Coco déjà listée.