75635bdc8cfbc9d9bac9c1943335e050617170d9
Les progress « started » d'une même entité s'empilaient en plusieurs turns et n'étaient dédupliqués qu'a posteriori par scan linéaire du tableau de turns, d'où des doublons visibles et un affichage retardé (re-scan par chunk). appendProgress opérait directement sur turns[] (chaque « started » y était poussé puis retrouvé/remplacé par recherche séquentielle). Désormais: - ChatViewState (turns + entityProgressMap): la Map indexée par « entité\0bucket » (started/completed) est l'unique source de vérité pour les progress en cours; - les progress « started » ne deviennent des turns qu'au flush (completeChatViewProgress sur final/error), supprimant la duplication et rendant l'affichage immédiat; - « completed » merge depuis l'entrée running de la Map puis la retire, au lieu de scanner le tableau; - turnsIndicateBusy s'appuie sur la taille de la Map (état vivant) en plus du scan des turns. Tests: déduplication des progress par entité (started répétés → une seule entrée, flush au final), fusion « completed » depuis la Map, état busy reflété par la Map, et rendu non dupliqué sur l'enchaînement started/completed/final.
fix(chat): reprise robuste au retour d'un layout non conversationnel (composer verrouillé selon l'état réel, replay complet du scrollback, plus de fausse terminaison 'no reply') (#190)
docs(architecture): §22.2 — persistance plugin-owned hors projet & purge à la désinstallation (#138)
The file is empty.
Description
Languages
Rust
80.5%
TypeScript
19.4%