mirror of
https://github.com/R0m1k3/Loki.git
synced 2026-10-24 15:38:12 +02:00
Fichiers : le panneau se redessine seul
Il ne se remplissait qu'à l'ouverture ; tout ce que l'agent écrivait ensuite (rapports, captures, scripts) et chaque pièce jointe déposée restaient invisibles tant qu'on ne cliquait pas « rafraîchir ». filesOnActivity, regroupé à 400 ms : appelé à chaque résultat d'outil, en fin de tour et après un dépôt. Rien pendant le rejeu du journal ni panneau fermé — l'ouverture recharge de toute façon. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01XFhcmBMUXdK6UesdGUgFPH
This commit is contained in:
1 parent
475d523e4a
commit
9d2ff33943
4 files changed
+22
-3
No files matched your search
@@ -198,7 +198,8 @@ document.documentElement.setAttribute('data-side',localStorage.getItem('loki-sid
|
|||||||
<!-- Fichiers : ce qui appartient à la DISCUSSION ouverte — pièces jointes
|
<!-- Fichiers : ce qui appartient à la DISCUSSION ouverte — pièces jointes
|
||||||
déposées, captures, ce que l'agent y a écrit. Panneau de DROITE, symétrique
|
déposées, captures, ce que l'agent y a écrit. Panneau de DROITE, symétrique
|
||||||
des réglages à gauche, ouvert et fermé par le bouton dossier du pied de
|
des réglages à gauche, ouvert et fermé par le bouton dossier du pied de
|
||||||
carte. Il ne se remplit qu'à l'ouverture (loadFiles) — un ReadDir à chaque
|
carte. Il ne se remplit qu'à l'ouverture (loadFiles), puis se redessine seul
|
||||||
|
à chaque résultat d'outil, fin de tour ou dépôt (filesOnActivity) — un ReadDir à chaque
|
||||||
chargement de page pour un panneau fermé serait payé par tout le monde et
|
chargement de page pour un panneau fermé serait payé par tout le monde et
|
||||||
utile à personne. -->
|
utile à personne. -->
|
||||||
<div id="files-backdrop" onclick="toggleFiles()"></div>
|
<div id="files-backdrop" onclick="toggleFiles()"></div>
|
||||||
|
|||||||
@@ -466,7 +466,8 @@ function handleDelta(d){
|
|||||||
if(T.serverStats) renderStats(T.contentEl||T.reasonEl, T.serverStats);
|
if(T.serverStats) renderStats(T.contentEl||T.reasonEl, T.serverStats);
|
||||||
else if(T.contentEl) paintStats(T.contentEl); // sans mesures serveur, la durée reste
|
else if(T.contentEl) paintStats(T.contentEl); // sans mesures serveur, la durée reste
|
||||||
paintTurnClock(); // fige le total au-dessus de la carte
|
paintTurnClock(); // fige le total au-dessus de la carte
|
||||||
setBusy(false); if(!REPLAYING && typeof loadConversations==='function') loadConversations(); return; }
|
setBusy(false); if(!REPLAYING && typeof loadConversations==='function') loadConversations();
|
||||||
|
if(typeof filesOnActivity==='function') filesOnActivity(); return; }
|
||||||
if(d.error){ settleBlocks(); removeTyping(); T.contentEl=null; T.reasonEl=null; const eb=addMsg('assistant',''); eb.classList.add('errmsg'); renderBody(eb, d.error); return; }
|
if(d.error){ settleBlocks(); removeTyping(); T.contentEl=null; T.reasonEl=null; const eb=addMsg('assistant',''); eb.classList.add('errmsg'); renderBody(eb, d.error); return; }
|
||||||
if(d.compacting!==undefined){ setCompacting(d.compacting); return; }
|
if(d.compacting!==undefined){ setCompacting(d.compacting); return; }
|
||||||
if(d.compacted){ setCompacting(false); addCompactMark(); return; }
|
if(d.compacted){ setCompacting(false); addCompactMark(); return; }
|
||||||
@@ -504,7 +505,8 @@ function handleDelta(d){
|
|||||||
// Carte à image : retirée de la liste du tour, sinon le repli de fin de
|
// Carte à image : retirée de la liste du tour, sinon le repli de fin de
|
||||||
// tour (collapseAll) la fermerait quand même.
|
// tour (collapseAll) la fermerait quand même.
|
||||||
if(tu.image && T.pendingToolEl){ const i=T.turnCollapsibles.indexOf(T.pendingToolEl); if(i>=0) T.turnCollapsibles.splice(i,1); }
|
if(tu.image && T.pendingToolEl){ const i=T.turnCollapsibles.indexOf(T.pendingToolEl); if(i>=0) T.turnCollapsibles.splice(i,1); }
|
||||||
T.pendingToolEl=null; if(tu.name==='mem_add'||tu.name==='mem_edit') loadMem(); }
|
T.pendingToolEl=null; if(tu.name==='mem_add'||tu.name==='mem_edit') loadMem();
|
||||||
|
if(typeof filesOnActivity==='function') filesOnActivity(); }
|
||||||
return; }
|
return; }
|
||||||
if(d.drop_reasoning){
|
if(d.drop_reasoning){
|
||||||
smoothReset(); cancelRender(); // le bloc raisonnement disparaît : rien à rendre
|
smoothReset(); cancelRender(); // le bloc raisonnement disparaît : rien à rendre
|
||||||
|
|||||||
@@ -365,6 +365,7 @@ window.addEventListener('drop', e=>{
|
|||||||
// rouge, elle dit déjà ce qui s'est passé.
|
// rouge, elle dit déjà ce qui s'est passé.
|
||||||
async function attachPaths(){
|
async function attachPaths(){
|
||||||
await Promise.all(ATTACH.filter(a=>a.state==='queued').map(uploadAttach));
|
await Promise.all(ATTACH.filter(a=>a.state==='queued').map(uploadAttach));
|
||||||
|
if(typeof filesOnActivity==='function') filesOnActivity(); // les dépôts apparaissent dans le panneau Fichiers
|
||||||
return ATTACH.filter(a=>a.state==='ok'&&a.path).map(a=>a.path);
|
return ATTACH.filter(a=>a.state==='ok'&&a.path).map(a=>a.path);
|
||||||
}
|
}
|
||||||
renderAttach();
|
renderAttach();
|
||||||
@@ -263,6 +263,21 @@ function filesOnConvChange(){
|
|||||||
if(FILES_OPEN) loadFiles('');
|
if(FILES_OPEN) loadFiles('');
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Quelque chose a pu changer sur disque : un outil vient de rendre son résultat
|
||||||
|
// (l'agent écrit un rapport, une capture, un script), le tour est fini, une
|
||||||
|
// pièce jointe vient d'être déposée. Le panneau se redessine tout seul —
|
||||||
|
// jusqu'ici il fallait cliquer « rafraîchir » pour voir apparaître ce que
|
||||||
|
// l'agent venait d'écrire. Regroupé : une rafale d'appels d'outils ne
|
||||||
|
// déclenche qu'une lecture. Panneau fermé ou rejeu du journal : rien à faire,
|
||||||
|
// l'ouverture recharge de toute façon.
|
||||||
|
let filesRefreshT = 0;
|
||||||
|
function filesOnActivity(){
|
||||||
|
if(!FILES_OPEN) return;
|
||||||
|
if(typeof REPLAYING !== 'undefined' && REPLAYING) return;
|
||||||
|
clearTimeout(filesRefreshT);
|
||||||
|
filesRefreshT = setTimeout(()=>{ filesRefreshT = 0; loadFiles(); }, 400);
|
||||||
|
}
|
||||||
|
|
||||||
// Date courte : l'heure pour aujourd'hui, la date sinon. Ce qu'on veut savoir,
|
// Date courte : l'heure pour aujourd'hui, la date sinon. Ce qu'on veut savoir,
|
||||||
// c'est « est-ce que ça vient du tour que je viens de lancer ? ».
|
// c'est « est-ce que ça vient du tour que je viens de lancer ? ».
|
||||||
document.addEventListener('DOMContentLoaded', initFiles);
|
document.addEventListener('DOMContentLoaded', initFiles);
|
||||||
|
|||||||
Reference in new issue
Block a user