diff --git a/cmd/loki/resource_windows_amd64.syso b/cmd/loki/resource_windows_amd64.syso index 24702e0..ba18d1f 100644 Binary files a/cmd/loki/resource_windows_amd64.syso and b/cmd/loki/resource_windows_amd64.syso differ diff --git a/cmd/loki/resource_windows_arm64.syso b/cmd/loki/resource_windows_arm64.syso index beb42b4..af598cb 100644 Binary files a/cmd/loki/resource_windows_arm64.syso and b/cmd/loki/resource_windows_arm64.syso differ diff --git a/cmd/loki/versioninfo.json b/cmd/loki/versioninfo.json index 4c59626..7e669dc 100644 --- a/cmd/loki/versioninfo.json +++ b/cmd/loki/versioninfo.json @@ -3,13 +3,13 @@ "FileVersion": { "Major": 0, "Minor": 12, - "Patch": 0, + "Patch": 1, "Build": 0 }, "ProductVersion": { "Major": 0, "Minor": 12, - "Patch": 0, + "Patch": 1, "Build": 0 }, "FileFlagsMask": "3f", @@ -25,7 +25,7 @@ "LegalCopyright": "Copyright (c) 2026 Loki contributors. MIT License.", "OriginalFilename": "loki.exe", "ProductName": "Loki", - "ProductVersion": "0.12.0", + "ProductVersion": "0.12.1", "Comments": "https://github.com/R0m1k3/Loki — projet open source (MIT)" }, "VarFileInfo": { diff --git a/internal/loki/run.go b/internal/loki/run.go index fa353f3..0e6a7e0 100644 --- a/internal/loki/run.go +++ b/internal/loki/run.go @@ -10,7 +10,7 @@ import ( "strings" ) -const Version = "0.12.0" +const Version = "0.12.1" // Main est le vrai main() du binaire (cmd/loki ne fait que l'appeler). func Main() { diff --git a/internal/loki/ui/index.html b/internal/loki/ui/index.html index ee6db5c..44a3711 100644 --- a/internal/loki/ui/index.html +++ b/internal/loki/ui/index.html @@ -6601,12 +6601,18 @@ function handleDelta(d){ if(d.tool_used){ settleBlocks(); // le bloc texte précédent (raisonnement/contenu) est terminé killTyping('tool'); T.contentEl=null; T.reasonEl=null; const tu=d.tool_used; + // Une carte reste OUVERTE tant que SA section travaille (hauteur bornée à + // 280 px, défilement qui suit l'écriture), et se replie DÈS qu'elle est + // finie : l'outil à son résultat (tu.done, plus bas), le raisonnement quand + // le bloc suivant démarre (collapseAll à la création de la carte suivante). if(!T.pendingToolEl){ collapseAll(T.turnCollapsibles); T.pendingToolEl=addMsg('tool',''); if(REPLAYING||viewOn('fold-tools')) collapseInstant(T.pendingToolEl); T.turnCollapsibles.push(T.pendingToolEl); } renderToolMsg(T.pendingToolEl, tu); // Outils masqués : on garde l'indicateur même quand l'appel est terminé (le // tour continue, et rien d'autre n'est visible). Sinon, comportement inchangé. if(!tu.done || viewOn('hide-tools')) showTyping('tool'); - if(tu.done){ T.pendingToolEl=null; if(tu.name==='mem_add'||tu.name==='mem_edit') loadMem(); } + // 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(); } 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 b26127c..6b4a20f 100644 --- a/internal/loki/ui/src/js/09-stream.js +++ b/internal/loki/ui/src/js/09-stream.js @@ -475,12 +475,18 @@ function handleDelta(d){ if(d.tool_used){ settleBlocks(); // le bloc texte précédent (raisonnement/contenu) est terminé killTyping('tool'); T.contentEl=null; T.reasonEl=null; const tu=d.tool_used; + // Une carte reste OUVERTE tant que SA section travaille (hauteur bornée à + // 280 px, défilement qui suit l'écriture), et se replie DÈS qu'elle est + // finie : l'outil à son résultat (tu.done, plus bas), le raisonnement quand + // le bloc suivant démarre (collapseAll à la création de la carte suivante). if(!T.pendingToolEl){ collapseAll(T.turnCollapsibles); T.pendingToolEl=addMsg('tool',''); if(REPLAYING||viewOn('fold-tools')) collapseInstant(T.pendingToolEl); T.turnCollapsibles.push(T.pendingToolEl); } renderToolMsg(T.pendingToolEl, tu); // Outils masqués : on garde l'indicateur même quand l'appel est terminé (le // tour continue, et rien d'autre n'est visible). Sinon, comportement inchangé. if(!tu.done || viewOn('hide-tools')) showTyping('tool'); - if(tu.done){ T.pendingToolEl=null; if(tu.name==='mem_add'||tu.name==='mem_edit') loadMem(); } + // 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(); } return; } if(d.drop_reasoning){ smoothReset(); cancelRender(); // le bloc raisonnement disparaît : rien à rendre