diff --git a/brain/app/main.py b/brain/app/main.py
index f4005e3..4fdcf38 100644
--- a/brain/app/main.py
+++ b/brain/app/main.py
@@ -26,7 +26,7 @@ from app.infrastructure.ollama_model_installer import ensure_ollama_embedding_mo
app = FastAPI(
title="LoreMind Brain",
description="Backend IA pour la génération de contenu narratif.",
- version="0.17.2",
+ version="0.17.3",
)
logger = logging.getLogger(__name__)
diff --git a/core/pom.xml b/core/pom.xml
index ebfef0c..fdd897b 100644
--- a/core/pom.xml
+++ b/core/pom.xml
@@ -14,7 +14,7 @@
com.loremind
loremind-core
- 0.17.2
+ 0.17.3
LoreMind Core
Backend Core - Architecture Hexagonale
diff --git a/core/src/main/java/com/loremind/infrastructure/desktop/DesktopBrowserOpener.java b/core/src/main/java/com/loremind/infrastructure/desktop/DesktopBrowserOpener.java
index 4e507df..20677a2 100644
--- a/core/src/main/java/com/loremind/infrastructure/desktop/DesktopBrowserOpener.java
+++ b/core/src/main/java/com/loremind/infrastructure/desktop/DesktopBrowserOpener.java
@@ -7,6 +7,8 @@ import org.springframework.context.annotation.Profile;
import org.springframework.context.event.EventListener;
import org.springframework.stereotype.Component;
+import java.awt.SplashScreen;
+
/**
* En mode bureau (profil "local"), ouvre le navigateur par defaut sur
* l'application des que le serveur est pret. L'app n'ayant pas de fenetre
@@ -25,7 +27,26 @@ public class DesktopBrowserOpener {
@EventListener(ApplicationReadyEvent.class)
public void onReady() {
+ // Ferme le splash natif (affiche par la JVM via -splash des le double-clic)
+ // juste avant d'ouvrir le navigateur : le relais visuel est assure.
+ closeSplash();
log.info("[Desktop] Application prete — ouverture du navigateur.");
DesktopSingleInstance.openAppInBrowser();
}
+
+ /**
+ * Ferme l'ecran de demarrage si l'app a ete lancee avec {@code -splash:...}
+ * (cas des installeurs jpackage). No-op silencieux sinon (lancement dev sans
+ * splash, ou environnement sans affichage).
+ */
+ private void closeSplash() {
+ try {
+ SplashScreen splash = SplashScreen.getSplashScreen();
+ if (splash != null) {
+ splash.close();
+ }
+ } catch (Exception e) {
+ log.debug("[Desktop] Pas de splash a fermer : {}", e.getMessage());
+ }
+ }
}
diff --git a/installers/desktop/build-linux.sh b/installers/desktop/build-linux.sh
index fa813ab..052facd 100644
--- a/installers/desktop/build-linux.sh
+++ b/installers/desktop/build-linux.sh
@@ -165,6 +165,9 @@ cp "$jar" "$STAGE_DIR/loremind-core.jar"
[[ -d "$BRAIN_EMBED/python" ]] || { err "Brain introuvable (brain/dist-embed-linux). Relancez sans --skip-brain."; exit 1; }
mkdir -p "$STAGE_DIR/brain"
cp -r "$BRAIN_EMBED/." "$STAGE_DIR/brain/"
+
+# Splash : copie dans la charge utile -> atterrit dans $APPDIR/splash.png (cf. -splash plus bas).
+[[ -f "$SCRIPT_DIR/splash.png" ]] && cp "$SCRIPT_DIR/splash.png" "$STAGE_DIR/splash.png"
ok "Charge utile prete ($STAGE_DIR)"
# --- 5. jpackage -> app-image ----------------------------------------------
@@ -191,7 +194,8 @@ jpackage \
--main-class org.springframework.boot.loader.launch.JarLauncher \
--dest "$OUT_DIR" \
--java-options '-Dspring.profiles.active=local' \
- --java-options "-Dbrain.sidecar.command=$BRAIN_CMD"
+ --java-options "-Dbrain.sidecar.command=$BRAIN_CMD" \
+ --java-options '-splash:$APPDIR/splash.png'
APPIMG_SRC="$OUT_DIR/$APP_NAME" # dossier produit par jpackage (avec espace)
[[ -d "$APPIMG_SRC" ]] || { err "app-image jpackage introuvable ($APPIMG_SRC)."; exit 1; }
diff --git a/installers/desktop/build-windows.ps1 b/installers/desktop/build-windows.ps1
index e3cfd98..146d462 100644
--- a/installers/desktop/build-windows.ps1
+++ b/installers/desktop/build-windows.ps1
@@ -59,6 +59,7 @@ $StageDir = Join-Path $CoreDir 'target\dist-input' # charge utile jpackage
$OutDir = Join-Path $CoreDir 'target\dist-out' # .msi produit
$IconFile = Join-Path $PSScriptRoot 'app-icon.ico' # icone de l'app (.msi + raccourcis)
$WixDir = Join-Path $PSScriptRoot 'wix' # main.wxs surcharge (case "Lancer" en fin d'install)
+$SplashFile = Join-Path $PSScriptRoot 'splash.png' # ecran de demarrage (affiche par la JVM via -splash)
# --- Version (numerique pour MSI) ------------------------------------------
if (-not $Version) {
@@ -192,6 +193,9 @@ if (-not (Test-Path $BrainEmbed)) { Write-Err "Brain introuvable (brain/dist-emb
$stageBrain = Join-Path $StageDir 'brain'
New-Item -ItemType Directory -Force -Path $stageBrain | Out-Null
Copy-Item (Join-Path $BrainEmbed '*') $stageBrain -Recurse
+
+# Splash : copie dans la charge utile -> atterrit dans $APPDIR\splash.png (cf. -splash plus bas).
+if (Test-Path $SplashFile) { Copy-Item $SplashFile (Join-Path $StageDir 'splash.png') }
Write-Ok "Charge utile prete ($StageDir)"
# --- 5. jpackage -> .msi ---------------------------------------------------
@@ -237,6 +241,7 @@ jpackage `
--dest $OutDir `
--java-options '-Dspring.profiles.active=local' `
--java-options "-Dbrain.sidecar.command=$brainCmd" `
+ --java-options '-splash:$APPDIR\splash.png' `
--win-per-user-install `
--win-upgrade-uuid 'a7c4e1d2-9b3f-4e6a-8d05-1f2c3b4a5e6d' `
--win-menu --win-menu-group 'DM Loremind' `
diff --git a/installers/desktop/splash.png b/installers/desktop/splash.png
new file mode 100644
index 0000000..5c9f021
Binary files /dev/null and b/installers/desktop/splash.png differ
diff --git a/web/package-lock.json b/web/package-lock.json
index 8cf2eff..889106d 100644
--- a/web/package-lock.json
+++ b/web/package-lock.json
@@ -1,12 +1,12 @@
{
"name": "loremind-web",
- "version": "0.17.2",
+ "version": "0.17.3",
"lockfileVersion": 3,
"requires": true,
"packages": {
"": {
"name": "loremind-web",
- "version": "0.17.2",
+ "version": "0.17.3",
"dependencies": {
"@angular/animations": "^21.2.16",
"@angular/common": "^21.2.16",
diff --git a/web/package.json b/web/package.json
index 7c4e96f..275ed97 100644
--- a/web/package.json
+++ b/web/package.json
@@ -1,6 +1,6 @@
{
"name": "loremind-web",
- "version": "0.17.2",
+ "version": "0.17.3",
"description": "LoreMind Frontend - Angular",
"scripts": {
"ng": "ng",