Compare commits
4 Commits
dc66199177
...
5bc038acd8
| Author | SHA1 | Date | |
|---|---|---|---|
| 5bc038acd8 | |||
| f347dcd357 | |||
| 46fea8d53c | |||
| e05b26563f |
4
.github/workflows/desktop-release.yml
vendored
4
.github/workflows/desktop-release.yml
vendored
@@ -249,7 +249,7 @@ jobs:
|
||||
uses: softprops/action-gh-release@v2
|
||||
with:
|
||||
tag_name: ${{ steps.ver.outputs.tag }}
|
||||
files: core/target/dist-out/*.AppImage
|
||||
files: core/target/dist-out/DM_Loremind*.AppImage
|
||||
fail_on_unmatched_files: true
|
||||
|
||||
# BETA uniquement : artefact PRIVE (pas de release publique).
|
||||
@@ -258,5 +258,5 @@ jobs:
|
||||
uses: actions/upload-artifact@v4
|
||||
with:
|
||||
name: loremind-beta-${{ steps.ver.outputs.version }}-appimage
|
||||
path: core/target/dist-out/*.AppImage
|
||||
path: core/target/dist-out/DM_Loremind*.AppImage
|
||||
retention-days: 90
|
||||
|
||||
@@ -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-beta",
|
||||
version="0.18.0",
|
||||
)
|
||||
|
||||
logger = logging.getLogger(__name__)
|
||||
|
||||
@@ -14,7 +14,7 @@
|
||||
|
||||
<groupId>com.loremind</groupId>
|
||||
<artifactId>loremind-core</artifactId>
|
||||
<version>0.17.2-beta</version>
|
||||
<version>0.18.0</version>
|
||||
<name>LoreMind Core</name>
|
||||
<description>Backend Core - Architecture Hexagonale</description>
|
||||
|
||||
|
||||
@@ -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());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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; }
|
||||
@@ -235,7 +239,9 @@ chmod +x "$APPDIR/AppRun"
|
||||
|
||||
# e) appimagetool (telecharge si absent). --appimage-extract-and-run : evite
|
||||
# d'exiger FUSE (absent des runners CI).
|
||||
TOOL="$OUT_DIR/appimagetool-x86_64.AppImage"
|
||||
# /!\ HORS de $OUT_DIR : sinon ce .AppImage (l'outil) serait pris pour un livrable
|
||||
# et attache a la release a cote du vrai DM_Loremind-*.AppImage.
|
||||
TOOL="$CORE_DIR/target/appimagetool-x86_64.AppImage"
|
||||
if [[ ! -x "$TOOL" ]]; then
|
||||
curl -fsSL -o "$TOOL" \
|
||||
https://github.com/AppImage/appimagetool/releases/download/continuous/appimagetool-x86_64.AppImage
|
||||
|
||||
@@ -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' `
|
||||
|
||||
BIN
installers/desktop/splash.png
Normal file
BIN
installers/desktop/splash.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 26 KiB |
@@ -1,7 +1,7 @@
|
||||
#Requires -Version 5.1
|
||||
<#
|
||||
.SYNOPSIS
|
||||
Installeur officiel de LoreMindMJ pour Windows 10/11.
|
||||
Installeur officiel de DM Loremind pour Windows 10/11.
|
||||
|
||||
.DESCRIPTION
|
||||
Script d'installation pas-a-pas qui :
|
||||
@@ -18,7 +18,7 @@
|
||||
Le code source de ce script est public et auditable a l'adresse indiquee dans .LINK.
|
||||
|
||||
.PARAMETER InstallDir
|
||||
Dossier d'installation. Defaut : %LOCALAPPDATA%\LoreMind
|
||||
Dossier d'installation. Defaut : %LOCALAPPDATA%\DM Loremind
|
||||
|
||||
.PARAMETER ComposeUrl
|
||||
URL du fichier docker-compose.yml a recuperer. Defaut : version officielle du depot.
|
||||
@@ -39,7 +39,7 @@
|
||||
.NOTES
|
||||
Auteur : ietm64
|
||||
Licence : AGPL-3.0
|
||||
Projet : LoreMindMJ - assistant pour Maitres de Jeu de JDR
|
||||
Projet : DM Loremind - assistant pour Maitres de Jeu de JDR
|
||||
Version : 0.8.3
|
||||
|
||||
.LINK
|
||||
@@ -48,7 +48,7 @@
|
||||
|
||||
[CmdletBinding()]
|
||||
param(
|
||||
[string]$InstallDir = "$env:LOCALAPPDATA\LoreMind",
|
||||
[string]$InstallDir = "$env:LOCALAPPDATA\DM Loremind",
|
||||
[string]$ComposeUrl = "https://raw.githubusercontent.com/IGMLcreation/LoreMind/main/docker-compose.yml",
|
||||
[int]$WebPort = 8081,
|
||||
[switch]$NonInteractive
|
||||
@@ -142,7 +142,7 @@ if (-not (Test-Admin)) {
|
||||
|
||||
Write-Host ""
|
||||
Write-Host "============================================================"
|
||||
Write-Host " LoreMindMJ - Installeur Windows" -ForegroundColor Magenta
|
||||
Write-Host " DM Loremind - Installeur Windows" -ForegroundColor Magenta
|
||||
Write-Host "============================================================"
|
||||
Write-Host ""
|
||||
|
||||
@@ -250,7 +250,7 @@ if ($llmProvider -eq 'onemin' -and -not $NonInteractive) {
|
||||
# pare-feu pour que Docker puisse l'atteindre sans exposer le port.
|
||||
# 2. Embarque : Ollama tourne dans un conteneur Docker dedie (profile local-ollama).
|
||||
# 3. Aucun : on n'installe rien tout de suite. L'utilisateur configurera
|
||||
# Ollama plus tard via la page Parametres de LoreMind.
|
||||
# Ollama plus tard via la page Parametres de DM Loremind.
|
||||
$ollamaMode = 'embedded' # valeurs : 'host' | 'embedded' | 'none'
|
||||
$ollamaBaseUrl = 'http://ollama:11434'
|
||||
if ($llmProvider -eq 'ollama') {
|
||||
@@ -298,7 +298,7 @@ if ($llmProvider -eq 'ollama') {
|
||||
# sera installe plus tard sur l'hote. L'utilisateur peut aussi changer
|
||||
# l'URL via la page Parametres pour pointer vers un Ollama distant.
|
||||
$ollamaBaseUrl = 'http://host.docker.internal:11434'
|
||||
Write-Warn2 "Aucun Ollama ne sera installe pour le moment. Configurez-le plus tard via la page Parametres de LoreMind."
|
||||
Write-Warn2 "Aucun Ollama ne sera installe pour le moment. Configurez-le plus tard via la page Parametres de DM Loremind."
|
||||
}
|
||||
}
|
||||
|
||||
@@ -404,7 +404,7 @@ if ($ollamaMode -eq 'embedded' -and $llmProvider -eq 'ollama') {
|
||||
$url = "http://localhost:$WebPort"
|
||||
Write-Host ""
|
||||
Write-Host "============================================================" -ForegroundColor Green
|
||||
Write-Host " LoreMindMJ est lance !" -ForegroundColor Green
|
||||
Write-Host " DM Loremind est lance !" -ForegroundColor Green
|
||||
Write-Host "============================================================" -ForegroundColor Green
|
||||
Write-Host " URL : $url"
|
||||
Write-Host " Identifiant : $adminUser"
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
#!/usr/bin/env bash
|
||||
# ==========================================================================
|
||||
# Installeur LoreMindMJ pour Linux (Debian/Ubuntu/Fedora/Arch)
|
||||
# Installeur DM Loremind pour Linux (Debian/Ubuntu/Fedora/Arch)
|
||||
# Usage :
|
||||
# curl -fsSL https://raw.githubusercontent.com/IGMLcreation/LoreMind/main/installers/install.sh | bash
|
||||
# ==========================================================================
|
||||
@@ -71,7 +71,7 @@ install_docker() {
|
||||
# ---------------------------------------------------------------------------
|
||||
echo
|
||||
echo "============================================================"
|
||||
echo -e " ${c_cyan}LoreMindMJ - Installeur Linux${c_off}"
|
||||
echo -e " ${c_cyan}DM Loremind - Installeur Linux${c_off}"
|
||||
echo "============================================================"
|
||||
echo
|
||||
|
||||
@@ -169,7 +169,7 @@ if [ "$LLM_PROVIDER" = "ollama" ]; then
|
||||
# sera installe plus tard sur l'hote. L'utilisateur peut aussi
|
||||
# changer l'URL via la page Parametres pour un Ollama distant.
|
||||
OLLAMA_BASE_URL_VAL="http://host.docker.internal:11434"
|
||||
warn "Aucun Ollama ne sera installe pour le moment. Configurez-le plus tard via la page Parametres de LoreMind."
|
||||
warn "Aucun Ollama ne sera installe pour le moment. Configurez-le plus tard via la page Parametres de DM Loremind."
|
||||
;;
|
||||
esac
|
||||
fi
|
||||
@@ -268,7 +268,7 @@ fi
|
||||
URL="http://localhost:${WEB_PORT}"
|
||||
echo
|
||||
echo -e "${c_green}============================================================${c_off}"
|
||||
echo -e "${c_green} LoreMindMJ est lance !${c_off}"
|
||||
echo -e "${c_green} DM Loremind est lance !${c_off}"
|
||||
echo -e "${c_green}============================================================${c_off}"
|
||||
echo " URL : $URL"
|
||||
echo " Identifiant : $ADMIN_USERNAME"
|
||||
|
||||
@@ -1,10 +1,10 @@
|
||||
#Requires -Version 5.1
|
||||
<#
|
||||
.SYNOPSIS
|
||||
Configuration securisee d'Ollama hote pour LoreMindMJ (Windows).
|
||||
Configuration securisee d'Ollama hote pour DM Loremind (Windows).
|
||||
|
||||
.DESCRIPTION
|
||||
But : permettre au conteneur Docker LoreMind d'atteindre l'Ollama installe
|
||||
But : permettre au conteneur Docker DM Loremind d'atteindre l'Ollama installe
|
||||
sur l'hote, SANS exposer Ollama sur le LAN ni Internet.
|
||||
|
||||
Strategie (specifique a Docker Desktop / WSL2 sur Windows) :
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
#!/usr/bin/env bash
|
||||
# ============================================================================
|
||||
# LoreMindMJ - Configuration securisee d'Ollama hote (Linux)
|
||||
# DM Loremind - Configuration securisee d'Ollama hote (Linux)
|
||||
# ----------------------------------------------------------------------------
|
||||
# But : permettre au conteneur Docker de LoreMind d'atteindre l'Ollama
|
||||
# installe sur l'hote, SANS l'exposer sur le LAN ni Internet.
|
||||
|
||||
4
web/package-lock.json
generated
4
web/package-lock.json
generated
@@ -1,12 +1,12 @@
|
||||
{
|
||||
"name": "loremind-web",
|
||||
"version": "0.17.2-beta",
|
||||
"version": "0.18.0",
|
||||
"lockfileVersion": 3,
|
||||
"requires": true,
|
||||
"packages": {
|
||||
"": {
|
||||
"name": "loremind-web",
|
||||
"version": "0.17.2-beta",
|
||||
"version": "0.18.0",
|
||||
"dependencies": {
|
||||
"@angular/animations": "^21.2.16",
|
||||
"@angular/common": "^21.2.16",
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "loremind-web",
|
||||
"version": "0.17.2-beta",
|
||||
"version": "0.18.0",
|
||||
"description": "LoreMind Frontend - Angular",
|
||||
"scripts": {
|
||||
"ng": "ng",
|
||||
|
||||
@@ -77,15 +77,13 @@ export class LanguageService {
|
||||
}
|
||||
|
||||
private resolveInitialLang(): string {
|
||||
// 1) Choix mémorisé (sélecteur in-app) → prioritaire.
|
||||
const stored = this.read();
|
||||
if (stored && this.languages.some((l) => l.code === stored)) {
|
||||
return stored;
|
||||
}
|
||||
const browser = this.translate.getBrowserLang();
|
||||
if (browser && this.languages.some((l) => l.code === browser)) {
|
||||
return browser;
|
||||
}
|
||||
return this.defaultLang;
|
||||
// 2) Sinon, détection du système : français → fr, toute autre langue → en.
|
||||
return this.translate.getBrowserLang() === 'fr' ? 'fr' : 'en';
|
||||
}
|
||||
|
||||
private read(): string | null {
|
||||
|
||||
Reference in New Issue
Block a user