mirror of
https://github.com/R0m1k3/Loki.git
synced 2026-10-23 23:18:13 +02:00
v0.6.3 : texte non coupe autour des outils, garde-fous d'outils retires, retours UI
- 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.
This commit is contained in:
1 parent
a3a9c36367
commit
92c350bdb8
16 files changed
+297
-134
No files matched your search
@@ -227,15 +227,30 @@ function saveChat(){ try{ localStorage.setItem('jean.chat', JSON.stringify(msgs)
|
||||
// Source de vérité = SERVEUR : on ouvre le flux d'abonnement permanent qui rejoue
|
||||
// tout le fil (texte, outils, vitesses via les horodatages serveur, raisonnement)
|
||||
// puis suit le direct. Partagé par tous les appareils.
|
||||
// Voile de chargement du fil. setChatLoading(null) le masque, setChatLoading(txt)
|
||||
// l'affiche avec ce libellé (« chargement… » au départ, « connexion au serveur… »
|
||||
// si le flux tombe). Sans lui, une connexion lente affiche un chat vide qu'on ne
|
||||
// distingue pas d'une conversation réellement vide.
|
||||
function setChatLoading(msg){
|
||||
const el=document.getElementById('chat-loading');
|
||||
if(!el) return;
|
||||
if(!msg){ el.classList.remove('show'); return; }
|
||||
document.getElementById('chat-loading-text').textContent=msg;
|
||||
el.classList.add('show');
|
||||
}
|
||||
function restoreChat(){
|
||||
// On masque le chat le temps du replay pour ne pas voir défiler le haut puis
|
||||
// sauter en bas (effet de clignotement). Il est révélé, positionné en bas, au
|
||||
// signal {caught_up}. Filet de sécurité : révélé quoi qu'il arrive après 2s.
|
||||
const c=chatEl(); c.style.opacity='0';
|
||||
setChatLoading('chargement de la conversation…');
|
||||
// Si {caught_up} tarde au-delà de 2s (replay anormalement long), on révèle quand
|
||||
// même — et on saute en bas DIRECTEMENT (scrollMaybe est neutralisé tant que
|
||||
// REPLAYING, donc on force ici le positionnement).
|
||||
// REPLAYING, donc on force ici le positionnement). Le voile, lui, RESTE : tant
|
||||
// que le replay n'est pas fini, ce qui est affiché est incomplet et il faut le
|
||||
// dire. Il finit de toute façon par tomber au {caught_up} ou au filet de 15s.
|
||||
setTimeout(()=>{ c.style.transition='opacity .15s'; c.style.opacity='1'; c.scrollTop=c.scrollHeight; }, 2000);
|
||||
setTimeout(()=>{ setChatLoading(null); }, 15000);
|
||||
connectStream();
|
||||
}
|
||||
function onKey(e){ if(e.key==='Enter' && !e.shiftKey){ e.preventDefault(); send(); } }
|
||||
|
||||
Reference in new issue
Block a user