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.
11 KiB
Verlauf, Suche und Bereinigung
Gespeicherter Verlauf, aktuell angezeigter Gesprächsverlauf und komprimierter Modellkontext sind getrennte Dinge. Wählen Sie Navigation oder Filter, bevor Sie etwas löschen.
Gesamten Verlauf durchsuchen
- Öffnen Sie Chat-Verlauf durchsuchen im Unterhaltungskopf oder verwenden Sie das zugewiesene Tastenkürzel (standardmäßig Ctrl/Cmd+F).
- Wählen Sie Gesamte Sitzung oder Gesamter Arbeitsbereich und geben Sie einen Suchbegriff ein.
- Aktivieren Sie Werkzeuge und Denkblöcke einbeziehen, wenn Sie neben lesbarem Text auch technische Inhalte benötigen.
- Wählen Sie einen Auszug. Unter Gesamte Sitzung blättern Sie mit Weitere Ergebnisse durch chronologische Seiten.
Gesamte Sitzung sucht eine wörtliche Phrase ohne Beachtung der Groß-/Kleinschreibung im gespeicherten Verlauf. Gesamter Arbeitsbereich durchsucht den autorisierten Verzeichnisbaum und die Worktrees des geöffneten Projekts mit bis zu sechs Suchbegriffen und zeigt höchstens 40 beste Treffer in einer Liste. Der beste Treffer jeder Unterhaltung kommt zuerst; Titel und aktuelle Worktree-Namen bleiben in Rangfolge. Begriffe werden in Auszügen und nach In Sitzung öffnen im Zieltranskript hervorgehoben. Durchsucht werden lesbarer Text und optional Werkzeuge und Denkblöcke.
Unterhaltungsseiten zeigen beim Eintreffen der Stapel Diese Seite: … Ergebnisse · … Nachrichten durchsucht. Die Projektsuche zeigt Beste Ergebnisse: … sowie kompakte Hinweise auf Teilsuchen oder ausgeschlossene Verzeichnisse. Ist die sortierte Suche in der Laufzeit nicht verfügbar, verwenden Sie Gesamte Sitzung. Übersprungene Nachrichten werden gemeldet; starten Sie für neue Nachrichten eine neue Suche.
Das Öffnen einer leeren Suche durchsucht keinen Verlauf. Änderungen an Begriff/Umfang, Schließen des Fensters oder Verlassen der Sitzung brechen veraltete Sucharbeit ab. Verwenden Sie bei einem Lesefehler Erneut versuchen; dies sendet keinen Prompt und ändert keinen Verlauf.
Projektsuchen beginnen bei höchstens 16.384 neuesten gespeicherten Nachrichten je Ort. Weiter zurück suchen ersetzt die Liste durch die besten Treffer des nächsten älteren Fensters. Der Hinweis nennt den geprüften Bereich, je Projektort von neu nach alt. Die Rangfolge gilt nur innerhalb dieses Fensters. Änderungen an Suchtext, Bereich oder technischen Inhalten, Schließen der Suche oder Verlassen der Sitzung setzen das Fenster zurück. Eine neue Suche berücksichtigt neue Nachrichten.
Läuft ein Suchfenster ab oder ändert sich sein Verlauf, beginnt Neue Suche starten mit denselben Suchbegriffen und Optionen bei den neuesten Nachrichten. Ein Hinweis erklärt die Wiederherstellung. Bei gewöhnlichen Lesefehlern wiederholt Erneut versuchen das aktuelle Fenster.
Ergebnisse öffnen und Timeline nutzen
- Wählen Sie ein Suchergebnis der aktuellen Sitzung, um zur umgebenden Passage zu springen.
- Wählen Sie ein Ergebnis einer anderen Sitzung, um eine separate Vorschau dieser Nachricht zu öffnen; verwenden Sie In Sitzung öffnen, um an der Trefferstelle zu dieser Unterhaltung zu wechseln.
- Zeigen Sie in Nachrichten-Timeline auf eine Markierung oder fokussieren Sie sie für einen Auszug und wählen Sie sie dann zur Navigation: Ihr Block rückt nach oben, und die Markierung bleibt hervorgehoben, bis Sie scrollen; danach folgt die Hervorhebung dem Block oben im Gespräch. Über die Bedienelemente für erste/neueste Nachricht gelangen Sie zu den Enden des gespeicherten Verlaufs.
Die Timeline stellt die gesamte Sitzungsstruktur dar, auch wenn die Verlaufsanzeige nur eine begrenzte Passage enthält. Sprünge laden das Ziel, nicht jede dazwischenliegende Nachricht. Suchvorschauen anderer Sitzungen laden weder deren gesamten Verlauf noch wählen sie diese aus; nur In Sitzung öffnen wechselt die Unterhaltung.
Werkzeugmarkierungen folgen Nachrichteninhalt: Ein dort ausgeblendeter Werkzeugtyp hat keine Markierung (bei Nichts gar keine), außer einem Werkzeug, das auf eine Berechtigung wartet. Ein Schritt, der nur Werkzeuge ausgeführt hat, zeigt nur seine Werkzeugmarkierungen, ohne leere Agentenmarkierung.
Während ein Sprung lädt, bleibt die alte Passage sichtbar. Ein neuerer Sprung oder manueller Eingriff in den Verlauf ersetzt veraltete Navigation; ein fehlgeschlagener Sprung lässt die sichtbare Passage unverändert. Versuchen Sie das Ziel erneut, statt wiederholt das ganze Projekt neu zu laden. Historisches Lesen ändert nicht die Agenten-/Modellauswahl des Eingabefelds.
Bei zu schmaler Unterhaltung (unter 420 CSS-Pixeln) ist die Timeline ausgeblendet; verwenden Sie dort Suche und Verlaufssteuerung. Die gespeicherte Sichtbarkeitseinstellung wird durch diese responsive Änderung nicht gelöscht.
Richtigen Verlaufsvorgang wählen
| Vorgang | Wo | Umfang und Folgen |
|---|---|---|
| Anzeigefilter | Nachrichteninhalt oder Einstellungen → Chat | Gemeinsame Anzeigeeinstellungen; Inhalte ausblenden/einklappen, ohne sie zu löschen |
| Komprimierung | Palette Sitzung komprimieren | Native Zusammenfassung/Kontextkomprimierung der ausgewählten Sitzung, keine Löschung technischer Ausgabe |
| Einzelantwort bereinigen | Nachricht Weitere Aktionen → Tools und Denkprozesse aus dieser Antwort entfernen | Entfernt geeignete abgeschlossene technische Teile dauerhaft; behält endgültigen Text |
| Technische Sitzungsbereinigung | Palette Sitzungs-Tools und Denkprozesse entfernen | Plant über den gesamten gespeicherten Sitzungsverlauf einschließlich Nachrichten vor der Komprimierung; behält endgültigen Text und Nachrichten-/Sitzungsmetadaten |
| Sitzung löschen | Sitzungszeile Sitzung löschen oder Löschung ausgewählter Sitzungen | Löscht die native Unterhaltung und ihre nachgeordneten Untersitzungen/Verläufe nach Bestätigung rekursiv; nicht rückgängig zu machen |
| Sitzungen bereinigen | Befehlspalette | Weiter gefasste Sitzungslöschung, keine Anzeige- oder Kontextgrößeneinstellung |
Nachrichteninhalt gilt unterhaltungsübergreifend. Wählen Sie oben darin oder in Einstellungen → Chat eine Voreinstellung (Nichts, Minimal, Ausgewogen oder Alles) und passen Sie dann einzelne Zeilen an; das Voreinstellungsmenü von Nachrichteninhalt zeigt dann Benutzerdefiniert. Werkzeuge auszublenden deaktiviert sie nicht, ändert keine Berechtigungen und entfernt keine gespeicherten Ausgaben. Damit die Darstellung reaktionsfähig bleibt, zeigen sehr große Nachrichten an einer Auslassung … weitere anzeigen, und sehr langer Text oder sehr lange Werkzeugausgabe endet an einer Zeile … weitere Zeichen ausgeblendet mit Alles anzeigen oder, wenn noch viel übrig ist, … weitere anzeigen, was mehrere Schritte erfordern kann. Beides einzublenden betrifft nur die Anzeige und stellt keine gelöschten Inhalte wieder her. Ziehen Sie über die Augen- oder Pfeilschaltflächen, um mehrere Zeilen auf einmal einzustellen: Die erste Schaltfläche, die Sie verlassen, wird umgeschaltet, und jede überstrichene Schaltfläche derselben Spalte übernimmt ihren neuen Zustand. Die Unterhaltung wird aktualisiert, sobald Sie loslassen.
Sitzung komprimieren
- Wählen Sie die beabsichtigte Unterhaltung.
- Führen Sie Sitzung komprimieren in der Befehlspalette aus.
- Warten Sie auf das native Komprimierungsergebnis oder prüfen Sie Komprimierung fehlgeschlagen, bevor Sie über eine Wiederholung entscheiden.
Komprimierung ändert den Kontext, mit dem OpenCode die Sitzung fortsetzt. Sie garantiert keine Löschung früherer gespeicherter Nachrichten: Vollverlaufssuche und technische Bereinigung erreichen weiterhin Inhalte vor der Komprimierung. Verwenden Sie Komprimierung nicht als Ersatz zum Löschen sensibler gespeicherter Verläufe.
Werkzeuge und Denkprozesse entfernen
- Wählen Sie die Einzelantwort-Aktion oder führen Sie Sitzungs-Tools und Denkprozesse entfernen für die ausgewählte Sitzung aus.
- Prüfen Sie die geplanten Werkzeug-/Denkprozesszahlen und Warnungen zu übersprungenen Inhalten.
- Bestätigen Sie Entfernen. Verfolgen Sie bei ganzen Sitzungen den Fortschritt über dem Verlauf und verwenden Sie bei Bedarf die Abbruchsteuerung.
Nur geeignete abgeschlossene Werkzeuge und Denkprozesse werden entfernt. Aktive/unvollständige Inhalte werden nicht bereinigt, ebenso wenig eine Nachricht, die in der von OpenCode gelesenen Form (einschließlich angehängter Dateien) größer als 16 MB ist und als übersprungener Inhalt zählt; geänderte Inhalte werden abgelehnt, statt den bestätigten Umfang stillschweigend auszuweiten. Endgültiger Text und Nachrichten-/Sitzungsmetadaten bleiben erhalten, entfernte technische Ausgaben lassen sich aber nicht wiederherstellen. Sichern Sie benötigte Inhalte vor der Bestätigung.
Sitzungsbereinigung ist nicht über die gesamte Sitzung atomar. Frühere erfolgreiche Entfernungen bleiben bestehen, wenn eine spätere Nachricht einen Konflikt oder Fehler verursacht. Abbrechen stoppt künftige Stapel; ein bereits versandter Stapel wird nicht zurückgerollt und kann weiterhin festgeschrieben werden.
Warten Sie bei belegtem Speicher, bis aktuelle Ausführungs-/Speicherarbeit beendet ist. Laden Sie bei einer geänderten Nachricht neu und wählen Sie erneut aus. Verbinden/öffnen Sie bei nicht verfügbarem Plugin CodeNomad erneut und prüfen Sie vor dem Wiederholen den Fehler. Aktualisieren und beurteilen Sie nach ungewisser Antwort die verbleibenden Inhalte; nehmen Sie weder an, dass nichts geschehen ist, noch dass die gesamte Sitzung bereinigt wurde.
Sitzungen löschen und bereinigen
Das Löschen einer übergeordneten Sitzung löscht auch deren nachgeordnete Untersitzungen und ihren Verlauf. Prüfen Sie die Unterhaltungsfamilie vor dem Bestätigen. Die Bereinigung von Missionsspezialisten ist anders: Sie behält Sitzungen mit Kindern.
- Bevorzugen Sie Sitzung löschen in einer bestimmten Zeile, wenn Sie genau wissen, welche Unterhaltung entfernt werden soll.
- Führen Sie für umfassendere Wartung Sitzungen bereinigen aus und lesen Sie die Bestätigung Tiefenbereinigung der Sitzungen.
- Bestätigen Sie nur, wenn leere Sitzungen, abgeschlossene Subagenten-Sitzungen und ungenutzte Forks entfernt werden dürfen.
Die Bereinigung arbeitet mit den bekannten Sitzungskandidaten des aktuellen Projekts und kann mehr als leere Hauptsitzungen entfernen. Sie ist keine Archivierung und nicht rückgängig zu machen. Verwenden Sie sie nicht bloß, um eine volle Seitenleiste aufzuräumen. Die unabhängige Einstellung Automatische Bereinigung leerer Sitzungen ist enger gefasst: Sie prüft echte Leere, statt einen ungeladenen Verlauf als leer zu behandeln.
Löschen entfernt Unterhaltungen, keine Git-Commits, und macht keine Dateisystem-/externen Auswirkungen rückgängig. Bei teilweise erfolgreicher Bereinigung bleiben bereits gelöschte Sitzungen gelöscht. Prüfen Sie vor dem Wiederholen die verbleibende Liste und Fehler. Siehe Unterhaltungen zu Forks/Rücknahme und Projekte zum Löschen temporärer Ordner oder Worktrees.