CodeNomad/docs/help/fr/history.md
Pascal André 5bc483d08d
feat(ui): toggle several rows at once by dragging across toggles (#1221)
Setting many rows of the same kind (Message content eyes, session
selection checkboxes, model visibility) took one click per row. Image
editors let users drag across a column of layer eyes instead; CodeNomad
now does the same.

Pressing a toggle and dragging out of it flips it, and every toggle of
the same column or list the pointer then crosses takes that new state;
toggles already in that state stay as they are. Releasing the button
clicks nothing, including the first toggle when the drag returns to it.
It works for mouse and pen; touch drags keep scrolling, and a touch
landing during a mouse drag leaves the sweep going.

Implementation: `lib/toggle-sweep.ts` installs one capture listener on
first use. Toggles opt in with `data-toggle-sweep={toggleSweepGroup(...)}`,
one group per column or list, so the Message content eyes and chevrons
sweep separately and exclusive selectors (tabs, presets) never sweep.
Each toggle changes through its own click, so its handlers, disabled
state and accessibility are unchanged; state is read from `checked`
(labels stand for their checkbox) or `aria-pressed`/`aria-checked`. The
drag is sampled every 4 px so fast moves skip no row, text selection
and native drag are blocked during a sweep, the trailing click is
swallowed, and a sweep whose release went elsewhere ends at the next
move without the button. `afterSweep` defers costly work until the
sweep ends.

Groups: Message content visibility and expansion columns, session
selection checkboxes, right-panel customization (built-in tabs and
Status sections; extension activation is a trust decision and stays
out), notification routing, model visibility, and the multi-select
options of agent forms and provider sign-in forms.

Message content dropped clicks made while a save was pending and showed
a row only once the server confirmed it, re-rendering the transcript
for each. Rows now show their requested state at once; a sweep saves
once, on release, so the transcript re-renders once. Saves run in
order and each batch of rows is sealed as it joins the queue, so a
later click never jumps ahead of a preset change nor rides along with a
sweep still held.

Notification routing shows each box at once, writes the whole table
once per sweep, runs its writes one after another so an older table
never lands last, and asks for System permission once per gesture.
Model visibility already showed pending changes and wrote them in
order.

Validation: browser regressions in transcript-presets (a single jump
across four eyes with slow saves, shown during the drag with nothing
saved, then one write on release; a hidden row that stays hidden; a
release back on the origin; the chevron column alone; a held sweep not
persisted by queued saves; a row clicked after a preset applying after
it), session-search (both directions, a release over a row title
opening no session, a lost release leaving no sweep, a touch mid-drag)
and notification-routing (one write per sweep, serialized writes with
the last winning, one permission request). Each fails with its part of
the fix removed. Two gatekeeper rounds ended with no P0-P2 finding; the
user validated the behaviour in a separate Electron dev instance.
dev-docs/UI_CONVENTIONS.md and dev-docs/TRANSCRIPT.md record the
convention, and the help describes the gesture in all ten languages.
2026-10-31 00:49:50 +01:00

11 KiB
Raw Permalink Blame History

Historique, recherche et nettoyage

L’historique enregistré, ce que la transcription affiche actuellement et le contexte compacté du modèle sont distincts. Préférez la navigation ou le filtrage avant toute suppression.

  1. Ouvrez Rechercher dans l'historique du chat dans l’en-tête de conversation, ou utilisez son raccourci configuré (Ctrl/Cmd+F par défaut).
  2. Sélectionnez Session entière ou Workspace entier et saisissez un terme.
  3. Activez Inclure les outils et réflexions si vous avez besoin du contenu technique en plus du texte lisible.
  4. Sélectionnez un extrait. Dans Session entière, utilisez Résultats suivants pour parcourir les pages chronologiques.

Session entière recherche une expression littérale sans tenir compte de la casse dans l’historique enregistré. Workspace entier classe les résultats de l’arborescence et des worktrees autorisés du projet ouvert à partir de six termes au maximum et affiche les 40 meilleurs dans une liste. Le meilleur résultat de chaque conversation apparaît d’abord, avec son titre et son worktree actuel dans l’ordre du classement. Les termes sont surlignés dans les extraits et dans la conversation après Ouvrir dans la session. Le contenu recherché comprend le texte lisible et, en option, les outils et réflexions.

Les pages de conversation affichent Cette page : … résultats · … messages parcourus à mesure que les lots arrivent. Le projet affiche Meilleurs résultats : … et des avis compacts pour les analyses partielles ou les dossiers exclus. Si le classement est indisponible dans cet environnement, utilisez Session entière. Les messages ignorés sont signalés ; relancez la recherche pour inclure les nouveaux messages.

Ouvrir une recherche vide ne parcourt pas l’historique. Changer la requête/la portée, fermer la fenêtre ou quitter la session annule le travail de recherche obsolète. Si une lecture échoue, utilisez Réessayer ; cela n’envoie pas de prompt et ne modifie pas l’historique.

L’analyse commence par les 16 384 messages enregistrés les plus récents au maximum par emplacement. Chercher plus loin dans le passé remplace la liste par les meilleurs résultats de la fenêtre précédente. La note indique la plage examinée, du plus récent au plus ancien dans chaque emplacement du projet. Le classement porte uniquement sur cette fenêtre. Modifier la requête, la portée ou l’option de contenu technique, fermer la recherche ou quitter la session réinitialise la fenêtre. Une nouvelle recherche inclut les nouveaux messages.

Si une fenêtre de recherche expire ou si son historique change, Relancer la recherche repart des messages les plus récents avec la même requête et les mêmes options. Une note explique cette reprise. Pour un échec de lecture ordinaire, Réessayer relance la fenêtre actuelle.

Ouvrir les résultats et utiliser la chronologie

  1. Choisissez un résultat de la session actuelle pour atteindre le passage qui l’entoure.
  2. Choisissez un résultat d’une autre session pour ouvrir un aperçu distinct de ce message ; utilisez Ouvrir dans la session pour aller à cette conversation, à l’emplacement du résultat.
  3. Dans Chronologie des messages, survolez ou focalisez un marqueur pour un extrait, puis sélectionnez-le pour naviguer : son bloc passe en haut et le marqueur reste en surbrillance jusqu’à ce que vous fassiez défiler, après quoi la surbrillance suit le bloc en haut de la conversation. Utilisez les commandes premier/dernier message pour revenir aux extrémités de l’historique enregistré.

La chronologie représente toute la structure de session même si la transcription ne contient qu’un passage borné. Les sauts chargent la destination sans récupérer tous les messages intermédiaires. Les aperçus de résultats d’autres sessions ne chargent pas leur transcription entière et ne les sélectionnent pas ; seul Ouvrir dans la session change de conversation.

Les marqueurs d’outils suivent Contenu des messages : un type d’outil masqué là n’a pas de marqueur (aucun avec Rien), sauf un outil en attente d’une autorisation. Une étape qui n’a exécuté que des outils n’affiche que ses marqueurs d’outils, sans marqueur d’agent vide.

Pendant un saut, l’ancien passage reste visible. Un saut plus récent ou une interaction manuelle avec la transcription remplace la navigation obsolète ; un saut échoué laisse le passage visible intact. Réessayez la destination plutôt que de recharger sans cesse tout le projet. La lecture historique ne modifie pas la sélection agent/modèle de la zone de saisie.

La chronologie est masquée si la conversation est trop étroite (moins de 420 pixels CSS) ; utilisez alors la recherche et les commandes de transcription. Sa préférence de visibilité enregistrée n’est pas effacée par cette adaptation.

Choisir la bonne opération sur l’historique

Opération Où Portée et conséquence
Filtrage d’affichage Contenu des messages, ou Paramètres → Chat Préférences d’affichage de transcription partagées ; masque/replie le contenu sans le supprimer
Compactage Palette Compacter la session Résumé/compactage natif du contexte de la session sélectionnée, pas une suppression des sorties techniques
Nettoyage d’une réponse Message Plus d'actions → Supprimer les outils et raisonnements de cette réponse Retire définitivement les parties techniques terminées admissibles ; conserve le texte final
Nettoyage technique de session Palette Supprimer les outils et raisonnements de la session Planifie sur tout l’historique enregistré, y compris avant compactage ; conserve le texte final et les métadonnées de message/session
Supprimer une session Ligne de session Supprimer la session, ou suppression des sessions sélectionnées Supprime récursivement la conversation native, ses sous-sessions descendantes et leur historique après confirmation ; aucune annulation
Nettoyer les sessions Palette de commandes Suppression plus large de sessions, pas un réglage d’affichage ou de taille du contexte

Contenu des messages s’applique à toutes les conversations. Choisissez un préréglage (Rien, Minimal, Équilibré ou Tout) en haut de cette fenêtre ou dans Paramètres → Chat, puis ajustez les lignes individuelles ; le menu de préréglage de Contenu des messages affiche alors Personnalisé. Masquer les outils ne désactive pas les outils, ne change pas les autorisations et ne retire pas les sorties enregistrées. Pour préserver la fluidité de l’affichage, les messages très volumineux affichent Afficher … de plus dans un intervalle omis, et les textes ou sorties d’outils très longs s’arrêtent à une ligne … caractères de plus masqués avec Tout afficher, ou Afficher … de plus lorsqu’il en reste beaucoup, ce qui peut demander plusieurs étapes. Révéler l’un ou l’autre ne concerne que l’affichage et ne récupère pas du contenu supprimé. Faites glisser le pointeur sur ses boutons œil ou chevron pour régler plusieurs lignes d'un coup : le premier bouton que vous quittez bascule, et chaque bouton survolé dans la même colonne prend son nouvel état. La conversation se met à jour quand vous relâchez le bouton.

Compacter une session

  1. Sélectionnez la conversation voulue.
  2. Exécutez Compacter la session depuis la palette de commandes.
  3. Attendez le résultat du compactage natif ou consultez Échec du compactage avant de décider de réessayer.

Le compactage change le contexte utilisé par OpenCode pour poursuivre la session. Il ne promet pas d’effacer les anciens messages enregistrés : la recherche dans tout l’historique et le nettoyage technique peuvent encore atteindre le contenu antérieur. Ne compactez pas à la place de supprimer un historique sensible enregistré.

Retirer les outils et raisonnements

  1. Choisissez l’action d’une seule réponse, ou exécutez Supprimer les outils et raisonnements de la session pour la session sélectionnée.
  2. Vérifiez les nombres d’outils/raisonnements prévus et les avertissements de contenu ignoré.
  3. Confirmez Supprimer. Pour une session entière, suivez la progression au-dessus de la transcription et utilisez sa commande d’annulation au besoin.

Seuls les outils et raisonnements terminés admissibles sont retirés. Le contenu actif/incomplet n’est pas élagué, pas plus qu’un message de plus de 16 Mo tel qu’OpenCode le lit (fichiers joints compris), qui compte comme contenu ignoré ; un contenu modifié est refusé plutôt que d’élargir silencieusement votre confirmation. Le texte final et les métadonnées de message/session restent, mais les sorties techniques supprimées ne sont pas récupérables. Préservez ce dont vous avez besoin avant de confirmer.

Le nettoyage n’est pas atomique sur toute la session. Les suppressions antérieures réussies restent si un message ultérieur entre en conflit ou échoue. L’annulation arrête les lots futurs ; elle n’annule pas un lot déjà envoyé, qui peut encore être appliqué.

Pour une erreur de stockage occupé, attendez la fin de l’exécution/du travail de stockage actuel. Pour un message modifié, rechargez et sélectionnez à nouveau. Pour un plugin indisponible, reconnectez/rouvrez CodeNomad et inspectez l’erreur avant de réessayer. Après une réponse incertaine, actualisez et évaluez le contenu restant ; ne supposez ni que rien ne s’est passé ni que toute la session a été nettoyée.

Supprimer et nettoyer les sessions

Supprimer une session parente supprime aussi ses sous-sessions descendantes et leur historique. Inspectez la famille avant de confirmer. Le nettoyage des spécialistes d’une Mission est différent : il conserve les sessions qui ont des enfants.

  1. Préférez Supprimer la session sur une ligne précise lorsque vous savez exactement quelle conversation doit disparaître.
  2. Pour une maintenance plus large, exécutez Nettoyer les sessions et lisez la confirmation Nettoyage approfondi des sessions.
  3. Confirmez uniquement si les sessions vides, les sessions de sous-agents terminées et les bifurcations inutilisées peuvent être supprimées.

Le nettoyage agit sur les sessions candidates connues du projet actuel et peut retirer davantage que les seules sessions principales vides. Ce n’est pas un archivage et il n’y a pas d’annulation. Ne l’utilisez pas simplement pour masquer une barre latérale chargée. La préférence indépendante Nettoyage auto des sessions vides est plus restreinte : elle vérifie qu’une session est réellement vide au lieu de considérer une transcription non chargée comme vide.

La suppression retire des conversations, pas des commits Git, et n’annule pas les effets sur le système de fichiers ou les services externes. Si le nettoyage ne réussit qu’en partie, les sessions déjà supprimées le restent. Vérifiez la liste restante et les erreurs avant de réessayer. Voir Conversations pour les bifurcations/annulations et Projets pour supprimer des dossiers temporaires ou worktrees.