Un .gguf pose sur un disque externe etait invisible dans l'UI : la liste
des modeles ne scannait que JEAN_HOME et un preset pointant ailleurs
affichait « introuvable ». On peut desormais declarer des dossiers de
modeles supplementaires (replies derriere une ligne dans l'editeur de
preset, persistes dans model_dirs.json, ou via JEAN_MODEL_DIRS).
Acces distant : la pastille affiche « non connecte » au lieu de rester
vide quand le serveur n'est lie a aucun compte.
- Flux : le reliquat retenu par la garde « </think> » est vidé dès qu'un appel
d'outil arrive, au lieu de la fin du flux. Sans ça il partait APRÈS
l'événement d'outil et la fin de phrase — souvent coupée en plein mot —
atterrissait dans une bulle séparée sous l'outil.
- Le plafond d'appels d'outils par tour (TOOL_LIMIT) et l'anti-boucle « appel
identique répété » sont SUPPRIMÉS : ils coupaient des tours légitimes (une
recherche enchaîne facilement des dizaines d'appels). Le bouton stop reste
le seul frein. Endpoint /api/agent/tool-limit et son interrupteur retirés.
- Prompt système : « You are Jean » (majuscule) — le modèle recopiait la casse
et se présentait en minuscule.
- UI : titres du menu tous en monospace capitales via une seule règle (la casse
vient du CSS, plus du HTML).
- UI : le message envoyé s'affiche tout de suite en gris (« envoi… ») et
s'éclaircit quand le serveur le confirme ; il ne disparaît plus pendant
l'aller-retour, et il est retiré si l'envoi échoue.
- UI : voile de chargement du fil (« chargement de la conversation… » /
« connexion au serveur… ») — un chat vide ne se confond plus avec une
connexion lente.
- UI mobile : hauteur de coque 100dvh hors PWA (100vh en PWA), et plus aucun
défilement du document. Le mode PWA est détecté par navigator.standalone :
le média display-mode ne matche pas, faute de manifeste.
Une cle en clair dans config.env finit dans les copier-coller de depannage.
Elle vit desormais dans $JEAN_HOME/.crawl4ai_key en 0600, comme la cle de
completion (.api_key) ; les installations qui l'avaient dans config.env sont
migrees a la premiere lecture, et l'ecriture efface toute trace residuelle.
Approche proposee par @feanor91 dans la PR #15 — merci a lui.
- Apparence repensee : la liste ne montre plus que les FAMILLES de theme
(Classique, AJEAN, Doux, ChatGPT) avec un interrupteur clair/sombre, au lieu
d'une entree par variante. Nouveau theme « ChatGPT sombre » (fond quasi noir).
- Le theme par defaut redevient « clair ».
- Nouveau reglage « police », independant du theme : du theme / Mono / Systeme /
Lexend / Serif (Lexend n'est telechargee que si elle est choisie).
- Le mode « complet / simple » laisse place a quatre interrupteurs : masquer le
raisonnement, masquer les appels d'outils, garder les bulles repliees, barre
laterale escamotable (tiroir meme sur ordinateur). L'ancien reglage est repris.
- Cle API du serveur Crawl4AI reglable depuis l'UI (et `jean internet key`) :
envoyee en Authorization: Bearer sur toutes les requetes, jamais relue par
l'API (indice sur 4 caracteres), preservee au changement de preset.
- Mise en page : colonne de lecture bornee a 900 px en mode escamotable, marges
d'origine sinon ; tiroir de meme largeur que la barre fixe ; bouton ☰ qui ne
recouvre plus le fil ; logo et numero de version recales.
- config.env stocke MODEL sous forme de nom de fichier : sous systemd/launchd
le WorkingDirectory vaut JEAN_HOME, mais une app de bureau demarre avec
cwd=/ et llama-server ne trouvait pas le .gguf. cmdServe resout desormais
MODEL et BIN relatifs contre JEAN_HOME, et le service en mode utilisateur
fixe cmd.Dir (macOS + Windows).
- erreur explicite << modele introuvable : <chemin> >> au lieu d'un echec muet
- bandeau d'alerte quand l'app tourne depuis une copie AppTranslocation
(app non signee ouverte depuis Telechargements) : chemin different a chaque
lancement, instances concurrentes, maj du moteur impossible
- dyld IGNORE LD_LIBRARY_PATH : sur macOS les .dylib livrees a cote de
llama-server n'etaient pas trouvees, le moteur mourait sans un mot
- nouvelle route GET /api/service/log (journalctl sous Linux, fichier de
log ailleurs) + panneau repliable ouvert en cliquant la pastille d'etat :
on voit enfin POURQUOI un modele ne charge pas
- /etc/jean n'est pas ecrivable par une app lancee depuis le Finder ->
repli sur ~/Library/Application Support/jean (sauf sudo jean install)
- /api/ram lisait /proc/meminfo uniquement : ajout sysctl+vm_stat (macOS)
et GlobalMemoryStatusEx (Windows, qui ne remontait rien non plus)
- PATH herite du Finder complete avec Homebrew/MacPorts : sans ca cmake,
git et brew sont invisibles pour la compilation du backend
Jean peut désormais se connecter à des serveurs MCP tiers pour enrichir la
palette d'outils de l'IA (accès fichiers, bases de données, APIs métier…).
- Transports stdio (process local npx/uvx/binaire) et http (Streamable HTTP
distant, en-têtes d'auth possibles), via le SDK officiel go-sdk.
- Outils namespacés mcp__<serveur>__<outil>, exposés seulement en mode agent
(même niveau de confiance que le shell : exécution de code sur l'hôte).
- Sessions persistantes (connexion paresseuse + cachée, reconnexion auto).
- Gestion complète dans l'UI web : ajout/édition de serveurs, activation par
serveur ET par outil (pour maîtriser le contexte), état de connexion en direct.
- Config dans mcp.json (format Claude Desktop mcpServers, copiable).
Nouvel endpoint /api/ram (lecture /proc/meminfo, used/total en Mo, 0 hors Linux)
et bloc RAM dans la sidebar a cote du GPU, rafraichi toutes les 3 s. Masque si
pas de /proc/meminfo (Windows/mac).