chore : import initial du package veille-ia-gen_ynh (packaging v2, helpers 2.1)

Extrait du dépôt veille-ia-gen (socle phase 0).
manifest validé contre le schéma officiel manifest.v2.schema.json ;
sha256 de l'archive sources en placeholder jusqu'à la release v0.1.0.
This commit is contained in:
cyber-mawonaj
2026-08-01 09:44:31 -04:00
commit c6caa5024f
16 changed files with 466 additions and 0 deletions
+3
View File
@@ -0,0 +1,3 @@
README.html
*.log
.DS_Store
+11
View File
@@ -0,0 +1,11 @@
# Environnement applicatif de veille-ia (chargé par systemd via EnvironmentFile).
# Régénéré par les scripts du package (ynh_config_add) — ne pas éditer à la main.
# Dossier de données persistant : registre/profils YAML + dépôt git interne.
DATA_DIR=__DATA_DIR__
# Endpoint Ollama (optionnel : dégradation gracieuse si injoignable).
OLLAMA_URL=__OLLAMA_URL__
# Token Bearer protégeant POST /api/alerts (généré à l'install — secret).
ALERTS_TOKEN=__ALERTS_TOKEN__
+14
View File
@@ -0,0 +1,14 @@
#sub_path_only rewrite ^__PATH__$ __PATH__/ permanent;
location __PATH__/ {
# Reverse proxy vers le serveur Node (adapter-node).
# Pas de '/' final à proxy_pass : l'URI complète (avec le sous-chemin) est
# transmise, ce qui correspond au paths.base configuré au build de l'app.
proxy_pass http://127.0.0.1:__PORT__;
# Transmet l'identité SSO (Ynh-User…) après authentification SSOwat, et vide
# ces headers pour les requêtes client (non spoofable).
include proxy_params_with_auth;
client_max_body_size 10M;
}
+41
View File
@@ -0,0 +1,41 @@
[Unit]
Description=Veille IA — observatoire de veille sur les modèles IA (SvelteKit)
After=network.target
[Service]
Type=simple
User=__APP__
Group=__APP__
WorkingDirectory=__INSTALL_DIR__/app
Environment="PATH=__PATH_WITH_NODEJS__"
Environment="NODE_ENV=production"
Environment="HOST=127.0.0.1"
Environment="PORT=__PORT__"
Environment="ORIGIN=https://__DOMAIN____PATH__"
# DATA_DIR, OLLAMA_URL, ALERTS_TOKEN (fichier posé à l'install, chmod 400)
EnvironmentFile=__INSTALL_DIR__/app/.env
ExecStart=__NODEJS_DIR__/node build/index.js
# Logs vers journald : yunohost service log __APP__
StandardOutput=journal
StandardError=journal
SyslogIdentifier=__APP__
# Sandboxing (niveau modéré : le service doit pouvoir lancer git dans le data_dir,
# phase 1 — simple-git — et joindre Ollama en HTTP sortant).
NoNewPrivileges=yes
PrivateTmp=yes
ProtectSystem=full
ProtectKernelModules=yes
ProtectKernelTunables=yes
ProtectControlGroups=yes
RestrictRealtime=yes
RestrictAddressFamilies=AF_UNIX AF_INET AF_INET6 AF_NETLINK
LockPersonality=yes
SystemCallArchitectures=native
CapabilityBoundingSet=
[Install]
WantedBy=multi-user.target
+17
View File
@@ -0,0 +1,17 @@
## Administration de Veille IA
### Ollama (optionnel)
L'app fonctionne sans Ollama (dégradation gracieuse). Pour activer le classifieur LLM, indiquez l'URL de votre endpoint Ollama à l'install (ou éditez `/var/www/veille-ia/app/.env` puis `systemctl restart veille-ia`). Ollama peut tourner sur une autre machine joignable en HTTP (LAN, wireguard).
### Données
Registre et profils (YAML + git interne) : `/home/yunohost.app/veille-ia`. Sauvegardés par le script de backup standard. Non supprimés à la désinstallation sauf `--purge`.
### Alertes (webhook)
`POST /api/alerts` est protégé par un token Bearer généré à l'install, visible dans `/var/www/veille-ia/app/.env` (`ALERTS_TOKEN`). À configurer côté Node-RED (flows fournis dans le dépôt source, dossier `nodered-flows/`).
### Journaux
`yunohost service log veille-ia` (journald).
+9
View File
@@ -0,0 +1,9 @@
Veille IA is a personal watchtower for generative AI models: releases, licenses, rankings, with a recommendation engine based on project profiles.
- **Model registry**: single source of truth (git-versioned YAML), anti-hallucination rule (unverified field = "to be checked")
- **Project profiles**: legal constraints per production context
- **Recommendation engine**: ranked, justified shortlist with warnings
- **Alert inbox**: events classified by a local LLM (Ollama), pushed from Node-RED
- **Markdown export**: guides and rankings regenerated from the registry
Private application (YunoHost SSO), 100% open source (AGPL-3.0), no paid API.
+9
View File
@@ -0,0 +1,9 @@
Veille IA est un observatoire personnel de veille sur les modèles IA génératifs : sorties, licences, classements, avec un moteur de recommandation par profils de projets.
- **Registre des modèles** : source de vérité unique (YAML versionné git), règle anti-hallucination (champ non vérifié = « à vérifier »)
- **Profils de projets** : contraintes juridiques par contexte de production
- **Moteur de recommandation** : shortlist classée et justifiée, avec warnings
- **Inbox d'alertes** : événements classifiés par un LLM local (Ollama), poussés depuis Node-RED
- **Export markdown** : guides et classements régénérés depuis le registre
Application privée (SSO YunoHost), 100 % open-source (AGPL-3.0), aucune API payante.
+69
View File
@@ -0,0 +1,69 @@
#:schema https://raw.githubusercontent.com/YunoHost/apps/main/schemas/manifest.v2.schema.json
packaging_format = 2
id = "veille-ia"
name = "Veille IA"
description.en = "Personal watchtower for generative AI models (releases, licenses, rankings)"
description.fr = "Observatoire personnel de veille sur les modèles IA génératifs (sorties, licences, classements)"
version = "0.1.0~ynh1"
maintainers = ["cyber-mawonaj"]
[upstream]
license = "AGPL-3.0-or-later"
code = "https://labola.o-k-i.net/cyber-mawonaj/veille-ia-gen"
[integration]
yunohost = ">= 12.1"
helpers_version = "2.1"
architectures = "all"
multi_instance = false
ldap = false
sso = true
disk = "300M"
ram.build = "1G"
ram.runtime = "150M"
[install]
[install.domain]
type = "domain"
[install.path]
type = "path"
default = "/veille"
[install.init_main_permission]
# App privée : "all_users" = SSO requis (remplace l'ancienne question is_public).
type = "group"
default = "all_users"
[install.ollama_url]
ask.fr = "URL de l'endpoint Ollama (optionnel — l'app fonctionne sans, en mode dégradé)"
ask.en = "Ollama endpoint URL (optional — the app works without it, in degraded mode)"
type = "string"
default = "http://127.0.0.1:11434"
optional = true
[resources]
# Archive de l'app, publiée par tag sur la forge (procédure de release : README racine).
# ⚠️ sha256 à recalculer après chaque tag : sha256sum vX.Y.Z.tar.gz
[resources.sources.main]
url = "https://labola.o-k-i.net/cyber-mawonaj/veille-ia-gen/archive/v0.1.0.tar.gz"
sha256 = "TODO_SHA256_A_CALCULER_APRES_LE_TAG_v0.1.0"
autoupdate.strategy = "latest_forgejo_tag"
[resources.system_user]
[resources.install_dir]
[resources.data_dir]
[resources.permissions]
main.url = "/"
[resources.ports]
[resources.nodejs]
version = "24"
+28
View File
@@ -0,0 +1,28 @@
#!/bin/bash
# Variables et fonctions communes aux scripts du package veille-ia_ynh.
# Normalise le chemin YNH pour paths.base de SvelteKit ("/" -> "" ; sinon "/veille").
veille_ia_base_path() {
if [ "$path" = "/" ]; then
echo ""
else
echo "$path"
fi
}
# Installe les dépendances, build l'app (avec le bon sous-chemin), puis élague
# les devDependencies pour ne garder que le runtime.
veille_ia_build_app() {
pushd "$install_dir/app"
ynh_hide_warnings ynh_exec_as_app npm ci
ynh_hide_warnings ynh_exec_as_app env BASE_PATH="$(veille_ia_base_path)" npm run build
ynh_hide_warnings ynh_exec_as_app npm prune --omit=dev
popd
}
# (Re)génère le fichier d'environnement applicatif et verrouille ses droits.
veille_ia_write_env() {
ynh_config_add --template="env" --destination="$install_dir/app/.env"
chmod 400 "$install_dir/app/.env"
chown "$app:$app" "$install_dir/app/.env"
}
Executable
+19
View File
@@ -0,0 +1,19 @@
#!/bin/bash
source ../settings/scripts/_common.sh
source /usr/share/yunohost/helpers
ynh_print_info "Déclaration des fichiers à sauvegarder..."
# Code + build + .env (reconstruisible, mais sauvegardé pour une restauration rapide).
ynh_backup "$install_dir"
# Données : registre/profils YAML + dépôt git interne.
# (Ignoré par le backup de sécurité pré-upgrade — comportement standard du cœur.)
ynh_backup "$data_dir"
ynh_backup "/etc/nginx/conf.d/$domain.d/$app.conf"
ynh_backup "/etc/systemd/system/$app.service"
ynh_print_info "Sauvegarde de veille-ia terminée"
+42
View File
@@ -0,0 +1,42 @@
#!/bin/bash
source _common.sh
source /usr/share/yunohost/helpers
#=================================================
# STOP SYSTEMD SERVICE
#=================================================
ynh_script_progression "Arrêt du service systemd de veille-ia..."
ynh_systemctl --service="$app" --action="stop"
#=================================================
# UPDATE NGINX CONFIGURATION
#=================================================
ynh_script_progression "Mise à jour de la configuration nginx de veille-ia..."
# $domain/$path pointent déjà vers les nouvelles valeurs ($old_domain/$old_path
# et $change_domain/$change_path sont disponibles si besoin).
ynh_config_change_url_nginx
#=================================================
# RE-BUILD THE APP WITH THE NEW BASE PATH
#=================================================
ynh_script_progression "Re-build de veille-ia pour le nouveau chemin..."
# paths.base est figé au build (SvelteKit) : le changement de chemin impose
# un re-build avec le nouveau BASE_PATH.
veille_ia_build_app
# .env : régénéré pour rester cohérent (ORIGIN systemd suit __DOMAIN____PATH__
# via ynh_config_change_url_nginx ; le .env ne contient pas le domaine).
veille_ia_write_env
#=================================================
# START SYSTEMD SERVICE
#=================================================
ynh_script_progression "Démarrage du service systemd de veille-ia..."
ynh_systemctl --service="$app" --action="start"
ynh_script_progression "Changement d'URL de veille-ia terminé"
+58
View File
@@ -0,0 +1,58 @@
#!/bin/bash
source _common.sh
source /usr/share/yunohost/helpers
#=================================================
# RETRIEVE ARGUMENTS FROM THE MANIFEST AND GENERATE SETTINGS
#=================================================
ynh_script_progression "Récupération des paramètres de veille-ia..."
# Token protégeant POST /api/alerts (webhook Node-RED) — secret généré à l'install.
alerts_token="$(ynh_string_random 48)"
ynh_app_setting_set --key=alerts_token --value="$alerts_token"
#=================================================
# DEPLOY APP FILES
#=================================================
ynh_script_progression "Déploiement des fichiers de veille-ia..."
# Archive du tag de la forge (ressource sources.main du manifest), pré-téléchargée.
ynh_setup_source --dest_dir="$install_dir"
# L'app SvelteKit vit dans le sous-dossier app/ du dépôt.
chown -R "$app:$app" "$install_dir"
#=================================================
# BUILD THE APP
#=================================================
ynh_script_progression "Installation des dépendances et build de veille-ia..."
veille_ia_build_app
#=================================================
# APP CONFIGURATION
#=================================================
ynh_script_progression "Ajout de la configuration de veille-ia..."
veille_ia_write_env
#=================================================
# SYSTEM CONFIGURATION
#=================================================
ynh_script_progression "Ajout de la configuration système pour veille-ia..."
ynh_config_add_nginx
ynh_config_add_systemd
yunohost service add "$app" --description="Observatoire de veille sur les modèles IA"
#=================================================
# START SYSTEMD SERVICE
#=================================================
ynh_script_progression "Démarrage du service systemd de veille-ia..."
ynh_systemctl --service="$app" --action="start"
ynh_script_progression "Installation de veille-ia terminée"
Executable
+18
View File
@@ -0,0 +1,18 @@
#!/bin/bash
source _common.sh
source /usr/share/yunohost/helpers
ynh_script_progression "Suppression de la configuration système de veille-ia..."
# Les ressources (user, dossiers, port, nodejs, permissions) sont déprovisionnées
# automatiquement par le cœur après ce script. Le data_dir est conservé sauf --purge.
if ynh_hide_warnings yunohost service status "$app" >/dev/null; then
yunohost service remove "$app"
fi
ynh_config_remove_systemd
ynh_config_remove_nginx
ynh_script_progression "Suppression de veille-ia terminée"
+54
View File
@@ -0,0 +1,54 @@
#!/bin/bash
source ../settings/scripts/_common.sh
source /usr/share/yunohost/helpers
#=================================================
# RESTORE THE APP MAIN DIRECTORY
#=================================================
ynh_script_progression "Restauration du dossier principal de veille-ia..."
# Les ressources (user, dossiers, port, nodejs) sont re-provisionnées par le cœur
# AVANT ce script. $domain, $path, $install_dir, $data_dir… sont rechargés.
ynh_restore "$install_dir"
chown -R "$app:$app" "$install_dir"
#=================================================
# RE-BUILD THE APP
#=================================================
ynh_script_progression "Réinstallation des dépendances et build de veille-ia..."
# Le build restauré est régénéré proprement (version de node, sous-chemin).
veille_ia_build_app
veille_ia_write_env
#=================================================
# RESTORE THE DATA DIRECTORY
#=================================================
ynh_script_progression "Restauration du dossier de données de veille-ia..."
ynh_restore "$data_dir"
chown -R "$app:$app" "$data_dir"
#=================================================
# RESTORE SYSTEM CONFIGURATIONS
#=================================================
ynh_script_progression "Restauration de la configuration système de veille-ia..."
ynh_restore "/etc/nginx/conf.d/$domain.d/$app.conf"
ynh_restore "/etc/systemd/system/$app.service"
systemctl enable "$app.service" --quiet
yunohost service add "$app" --description="Observatoire de veille sur les modèles IA"
#=================================================
# RELOAD NGINX AND START THE APP
#=================================================
ynh_script_progression "Rechargement de nginx et démarrage de veille-ia..."
ynh_systemctl --service="$app" --action="start"
ynh_systemctl --service=nginx --action=reload
ynh_script_progression "Restauration de veille-ia terminée"
+67
View File
@@ -0,0 +1,67 @@
#!/bin/bash
source _common.sh
source /usr/share/yunohost/helpers
#=================================================
# STOP SYSTEMD SERVICE
#=================================================
ynh_script_progression "Arrêt du service systemd de veille-ia..."
ynh_systemctl --service="$app" --action="stop"
#=================================================
# ENSURE DOWNWARD COMPATIBILITY
#=================================================
ynh_script_progression "Vérification des paramètres de veille-ia..."
# Token d'alertes : créé à l'install ; le régénère si absent (installs anciennes).
if [ -z "${alerts_token:-}" ]; then
alerts_token="$(ynh_string_random 48)"
ynh_app_setting_set --key=alerts_token --value="$alerts_token"
fi
#=================================================
# UPGRADE SOURCE FILES
#=================================================
ynh_script_progression "Mise à jour des fichiers de veille-ia..."
# Un backup de sécurité a déjà été réalisé par le cœur. Remplacement complet :
# le .env est régénéré juste après depuis les settings persistants.
ynh_setup_source --dest_dir="$install_dir" --full_replace
chown -R "$app:$app" "$install_dir"
#=================================================
# RE-BUILD THE APP
#=================================================
ynh_script_progression "Installation des dépendances et build de veille-ia..."
veille_ia_build_app
#=================================================
# UPDATE APP CONFIGURATION
#=================================================
ynh_script_progression "Mise à jour de la configuration de veille-ia..."
veille_ia_write_env
#=================================================
# UPDATE SYSTEM CONFIGURATION
#=================================================
ynh_script_progression "Mise à jour de la configuration système pour veille-ia..."
ynh_config_add_nginx
ynh_config_add_systemd
yunohost service add "$app" --description="Observatoire de veille sur les modèles IA"
#=================================================
# START SYSTEMD SERVICE
#=================================================
ynh_script_progression "Démarrage du service systemd de veille-ia..."
ynh_systemctl --service="$app" --action="start"
ynh_script_progression "Mise à jour de veille-ia terminée"
+7
View File
@@ -0,0 +1,7 @@
#:schema https://raw.githubusercontent.com/YunoHost/apps/main/schemas/tests.v1.schema.json
test_format = 1.0
# Le minimum suffit : les tests (install.root, install.subdir, backup_restore,
# upgrade, change_url…) sont déduits automatiquement du manifest.
[default]