- Templates paramétrés (data/workflows/templates/) : substitution de variables
({{modele_checkpoint}}, {{resolution}}, {{resolution_largeur/hauteur}},
{{vram_profile}}) — jamais de réécriture de topologie (PRD §4.6)
- Génération de JSON concrets (/workflows) + régénération automatique à chaque
écriture du registre, commit git ; suppression si le modèle disparaît
- Champ comfyui_checkpoint ajouté au schéma et au formulaire registre ;
génération refusée tant qu'il est null (anti-hallucination)
- Smoke test : prompt canari sans modèle (EmptyImage→PreviewImage) posté sur
COMFYUI_URL/prompt, statut remonté dans l'UI, dégradation gracieuse
- Endpoint de téléchargement /workflows/fichier/[nom]
- Tests : 11 nouveaux cas (substitution, conversion numérique, variable
inconnue, paliers VRAM, résolution invalide, checkpoint null, smoke test
accepté/refusé/injoignable)
- Package YNH : question comfyui_url + COMFYUI_URL dans l'env applicatif
- Vérifié : check/lint/test (38)/build verts, autofixer propre, test fumée
HTTP complet (seed templates, refus sans checkpoint, génération, JSON
concret correct, téléchargement, smoke test dégradé, commits git)
veille-ia
Observatoire personnel de veille sur les modèles IA génératifs (sorties, licences, classements), avec moteur de recommandation par profils de projets. Application privée, self-hosted, packagée pour YunoHost. Licence AGPL-3.0.
- Spécification fonctionnelle :
plan_prd_veille_ia.md - Conventions frontend (prioritaires) :
SPECS_SVELTE.md
Structure du dépôt
| Chemin | Contenu |
|---|---|
app/ |
Application SvelteKit (Svelte 5 runes, TypeScript strict, adapter-node) |
nodered-flows/ |
Flows Node-RED exportés (phase 2 — à venir) |
Le package YunoHost vit dans son dépôt dédié : cyber-mawonaj/veille-ia-gen_ynh (clone local : ../veille-ia-gen_ynh).
Développement local (hors YunoHost)
Prérequis : Node 24 LTS, npm.
cd app
npm ci
npm run dev:local # zéro config : utilisateur SSO simulé (dev), token d'alertes factice, données dans ./data
npm run dev:local injecte DEV_USER=dev (utilisateur SSO simulé — dev uniquement), ALERTS_TOKEN=dev-token-local (pour tester POST /api/alerts) et DATA_DIR=./data. L'app est sur http://localhost:5173, connectée en tant que dev.
Pour tester finement une variable précise, copie .env.example en .env et utilise npm run dev. Sans DEV_USER, l'accueil public minimal est affiché et toute autre route renvoie 401 — comme en production sans header SSO.
Variables d'environnement
| Variable | Défaut | Rôle |
|---|---|---|
DATA_DIR |
./data (relatif à app/) |
Dossier persistant : YAML + git interne. En prod : /home/yunohost.app/veille-ia |
OLLAMA_URL |
http://127.0.0.1:11434 |
Endpoint Ollama. Optionnel : dégradation gracieuse si injoignable |
ALERTS_TOKEN |
(aucun) | Token Bearer de POST /api/alerts. Généré à l'install YNH, jamais commité |
COMFYUI_URL |
http://127.0.0.1:8188 |
API ComfyUI pour les smoke tests. Dégradation gracieuse si injoignable |
SSO_HEADER |
ynh-user |
Header HTTP injecté par SSOwat portant l'utilisateur authentifié |
DEV_USER |
(aucun) | Dev uniquement : simule un utilisateur SSO. Ignoré en production |
BASE_PATH |
(aucun) | Build uniquement : sous-chemin de montage (ex. /veille) pour paths.base |
Qualité (à faire passer avant chaque commit)
npm run check # svelte-check : 0 erreur, 0 warning
npm run lint # prettier + eslint
npm run test # vitest
npm run build # build adapter-node
Packaging YunoHost (dépôt veille-ia-gen_ynh)
Packaging v2 vérifié contre la documentation officielle (août 2026) et le schéma
manifest.v2.schema.json. Helpers 2.1 (ynh_config_add_nginx, ynh_config_add_systemd…).
Ressources : ports, nodejs (24), system_user, install_dir (/var/www/veille-ia),
data_dir (/home/yunohost.app/veille-ia). App privée : permission all_users,
identité transmise via le header Ynh-User (proxy_params_with_auth).
Procédure de release (à suivre avant toute installation)
Le package consomme une archive de tag publiée sur la forge :
- Pousser le dépôt sur
https://labola.o-k-i.net/cyber-mawonaj/veille-ia-gen(procédure :doc2sveltekit-transition/GITEA.md— dépôt créé sans initialisation). - Taguer :
git tag v0.1.0 && git push gitea v0.1.0. - Télécharger
https://labola.o-k-i.net/cyber-mawonaj/veille-ia-gen/archive/v0.1.0.tar.gzet calculer son sha256. - Mettre à jour
manifest.tomldans le dépôtveille-ia-gen_ynh:version = "0.1.0~ynh1",resources.sources.main.urletsha256(le placeholderTODO_…actuel bloque volontairement toute installation), commit + push. - Vérifier avec
package_check(sur une machine YunoHost de test) : viser niveau ≥ 7.
Installation (sur le serveur)
yunohost app install https://labola.o-k-i.net/cyber-mawonaj/veille-ia-gen_ynh
# ou depuis un clone local : yunohost app install /chemin/vers/veille-ia-gen_ynh
L'install : déploie l'archive, npm ci + build (avec BASE_PATH = chemin d'install), génère ALERTS_TOKEN, écrit /var/www/veille-ia/app/.env (chmod 400), configure nginx + systemd (logs journald).
Ollama
Optionnel. Si le paquet ollama_ynh est indisponible : Ollama sur la machine locale du porteur, exposé au serveur via wireguard/LAN — renseigner OLLAMA_URL à l'install (question du manifest) ou dans /var/www/veille-ia/app/.env. L'app démarre et fonctionne sans (dégradation gracieuse).
État d'avancement
- Phase 0 — socle SvelteKit (SSO, thème OKI, CSP) + packaging YNH + dev local
- Phase 1 — registre + profils + moteur de recommandation + export markdown
- Seeds au premier démarrage :
registre_modeles.yaml(PRD §4.1),profils_projets.yaml(5 profils), templates markdown — commit git initial automatique dans leDATA_DIR - CRUD registre (
/registre) et profils (/profils) : form actions, validation Zod, commit git à chaque écriture, champs tri-état (null = « à vérifier ») - Moteur de recommandation : page
/recommander+ APIPOST /api/recommander(JSON{profil_id, filtres: {modalite?, vram_max?}}, SSO requis) — filtrage dur puis scoring pondéré, justification et warnings par modèle - Exporteur markdown (
/exports) : templates éditables, génération des guides depuis le registre, commit git par document
- Seeds au premier démarrage :
- Phase 2 — inbox alertes + flows Node-RED
POST /api/alerts: token Bearer (ALERTS_TOKEN, comparaison en temps constant), schéma d'alerte du PRD §4.4 validé par Zod, 503 si non configuré- Inbox
/alertes: filtres par profil impacté et statut, actions « Marquer traité » et « Créer/MAJ fiche » (pré-remplissage du formulaire registre depuis l'alerte, sans inventer de champ) nodered-flows/: 4 flows importables (rss-ingest, license-watch, classifier avec le prompt figé du PRD §6, notify) — nœuds core uniquement, configuration par variables d'env
- Phase 3 — templates ComfyUI + smoke tests
- Templates paramétrés (
data/workflows/templates/) : substitution de variables ({{modele_checkpoint}},{{resolution}},{{vram_profile}}…), jamais de réécriture de topologie - Génération de JSON concrets (
/workflows) + régénération automatique à chaque modification du registre, commit git ; suppression si le modèle disparaît - Champ
comfyui_checkpointdans le registre ; génération refusée tant qu'il est null (anti-hallucination) - Smoke test : prompt canari sans modèle (EmptyImage→PreviewImage) posté sur
COMFYUI_URL/prompt, statut remonté dans l'UI, dégradation gracieuse si injoignable
- Templates paramétrés (
- Phase 4 — durcissement (i18n gcf/en, niveau 8 package_check)