Captures d'écran : visibles en entier, jamais repliées d'office

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 <noreply@anthropic.com>
This commit is contained in:
MichaelandClaude Fable 5 committed 2026-08-20 22:58:29 +02:00
1 parent 66072e4047
commit 50fccdc9ad
7 files changed
+28 -8

No files matched your search

+12 -2
View File
@@ -693,6 +693,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
@@ -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
+8 -2
View File
@@ -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
+4
View File
@@ -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