From 50fccdc9ad7d8aeb8bf8c9b2256390059ad348ad Mon Sep 17 00:00:00 2001 From: Michael SCHAL Date: Thu, 20 Aug 2026 22:58:29 +0200 Subject: [PATCH] =?UTF-8?q?Captures=20d'=C3=A9cran=20:=20visibles=20en=20e?= =?UTF-8?q?ntier,=20jamais=20repli=C3=A9es=20d'office?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit La carte d'outil qui porte une capture (web_screenshot) échappe au plafond de 280 px — l'image se montrait par le trou d'une serrure — et au repli automatique : l'image EST le résultat, la replier la cachait sitôt prise. Elle garde son max-height propre (420 px) et s'ouvre plein écran au clic. Retirée de la liste de repli du tour pour survivre aussi au repli de fin de tour. Au rejeu du journal, elle arrive repliée comme le reste de l'historique. Version 0.12.2. Co-Authored-By: Claude Fable 5 --- cmd/loki/resource_windows_amd64.syso | Bin 7768 -> 7768 bytes cmd/loki/resource_windows_arm64.syso | Bin 7768 -> 7768 bytes cmd/loki/versioninfo.json | 6 +++--- internal/loki/run.go | 2 +- internal/loki/ui/index.html | 14 ++++++++++++-- internal/loki/ui/src/js/09-stream.js | 10 ++++++++-- internal/loki/ui/src/styles.css | 4 ++++ 7 files changed, 28 insertions(+), 8 deletions(-) diff --git a/cmd/loki/resource_windows_amd64.syso b/cmd/loki/resource_windows_amd64.syso index ba18d1f63f7ab507c7928a192853966f433edb1b..d1f6d1c5bbf862addd5d255ca08882645d0a7629 100644 GIT binary patch delta 35 ocmca%bHirCFG)@&1|9|wVA{+q#m>ZNw3%BboRQIJaZNxS3lfoRQIRaZNw3%BboRQIJaZNxS3lfoRQIRa.body{min-width:0} .msg.collapsible.collapsed .bodywrap{opacity:0;margin-top:0} /* Composer = un seul bloc cohérent : barre de contexte intégrée en tête (fine @@ -6611,8 +6615,14 @@ function handleDelta(d){ // tour continue, et rien d'autre n'est visible). Sinon, comportement inchangé. if(!tu.done || viewOn('hide-tools')) showTyping('tool'); // Résultat arrivé : la carte est finie, elle se replie tout de suite (en - // direct seulement — au rejeu elle est déjà née repliée). - if(tu.done){ if(!REPLAYING && T.pendingToolEl) collapseBody(T.pendingToolEl); T.pendingToolEl=null; if(tu.name==='mem_add'||tu.name==='mem_edit') loadMem(); } + // direct seulement — au rejeu elle est déjà née repliée). SAUF une capture + // d'écran : l'image EST le résultat, la replier la cacherait sitôt prise. + if(tu.done){ + if(!REPLAYING && T.pendingToolEl && !tu.image) collapseBody(T.pendingToolEl); + // Carte à image : retirée de la liste du tour, sinon le repli de fin de + // 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); } + T.pendingToolEl=null; if(tu.name==='mem_add'||tu.name==='mem_edit') loadMem(); } return; } if(d.drop_reasoning){ smoothReset(); cancelRender(); // le bloc raisonnement disparaît : rien à rendre diff --git a/internal/loki/ui/src/js/09-stream.js b/internal/loki/ui/src/js/09-stream.js index 6b4a20f..2603256 100644 --- a/internal/loki/ui/src/js/09-stream.js +++ b/internal/loki/ui/src/js/09-stream.js @@ -485,8 +485,14 @@ function handleDelta(d){ // tour continue, et rien d'autre n'est visible). Sinon, comportement inchangé. if(!tu.done || viewOn('hide-tools')) showTyping('tool'); // Résultat arrivé : la carte est finie, elle se replie tout de suite (en - // direct seulement — au rejeu elle est déjà née repliée). - if(tu.done){ if(!REPLAYING && T.pendingToolEl) collapseBody(T.pendingToolEl); T.pendingToolEl=null; if(tu.name==='mem_add'||tu.name==='mem_edit') loadMem(); } + // direct seulement — au rejeu elle est déjà née repliée). SAUF une capture + // d'écran : l'image EST le résultat, la replier la cacherait sitôt prise. + if(tu.done){ + if(!REPLAYING && T.pendingToolEl && !tu.image) collapseBody(T.pendingToolEl); + // Carte à image : retirée de la liste du tour, sinon le repli de fin de + // 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); } + T.pendingToolEl=null; if(tu.name==='mem_add'||tu.name==='mem_edit') loadMem(); } return; } if(d.drop_reasoning){ smoothReset(); cancelRender(); // le bloc raisonnement disparaît : rien à rendre diff --git a/internal/loki/ui/src/styles.css b/internal/loki/ui/src/styles.css index 3fed88b..20cefa1 100644 --- a/internal/loki/ui/src/styles.css +++ b/internal/loki/ui/src/styles.css @@ -662,6 +662,10 @@ textarea.sctl{min-height:76px;resize:vertical;line-height:1.5} défilant toute seule (voir flushRender, 09-stream.js). L'animation de repli garde son overflow:hidden via la hauteur inline — les deux cohabitent. */ .msg.reasoning .bodywrap,.msg.tool .bodywrap{max-height:280px;overflow-y:auto;overscroll-behavior:contain;scrollbar-width:thin} +/* Une capture d'écran ne se lit pas par le trou d'une serrure : la carte qui en + porte une échappe au plafond (l'image a déjà son propre max-height à 420 px, + cliquable plein écran via la visionneuse). */ +.msg.tool .bodywrap:has(.tool-shot){max-height:none} .msg.collapsible .bodywrap>.body{min-width:0} .msg.collapsible.collapsed .bodywrap{opacity:0;margin-top:0} /* Composer = un seul bloc cohérent : barre de contexte intégrée en tête (fine