Repository navigation
fix(cockpit): Session-Baum übersichtlich machen – weniger Ebenen, keine doppelten Labels #505
Description
Problem — P2
Der Live-Baum im Cockpit („KI-Sessions“) ist nach dem Owner-Feedback zum ersten Build mit der überarbeiteten UI (nach #465) „extrem unübersichtlich“. Punkt 1a:
„Die Sessionliste ist extrem unübersichtlich. Das bezieht sich nicht nur auf den dargestellten Text, sondern auch auf die visuelle Gestaltung.“
Zu diesem Feedback wurde nie ein Issue angelegt. #455 betrifft nur die Sessionzeilen unter Verbindungen, nicht den Cockpit-Baum.
Befund
Aus der Analyse des Feedbacks und dem aktuellen Stand:
- Zu viel technische Hierarchie.
Host → Projekt → PTY-Session → Agent(specs/GH-160/PRODUCT.md:72) erzeugt bis zu vier Einrückungsebenen, auch wenn eine Ebene keine Information trägt. - Wiederholte Namen, abgeschnittene Unterschiede. Ähnliche Session-Namen mit gleichem Präfix wiederholen sich, und der unterscheidende Teil wird am rechten Rand abgeschnitten.
- Doppelte Labels im Normalfall. Reproduzierbar mit einer lokalen Codex-Session in einem Verzeichnis ohne Git-Branch: Projekt- und Sessionzeile tragen denselben Namen direkt untereinander (
Host › X › X › Codex).- Codex-Rollouts haben keinen Session-Namen (
crates/zaplex_cockpit/src/codex_sessions.rs:1103). - Lokale Sessions haben nie PTY-Metadaten. Jede bekommt deshalb einen Fallback-Container (
crates/zaplex_cockpit/src/conductor.rs:337-358). session_identity_labelfällt dann über Name, Branch und Worktree aufproject_directory_labelzurück (app/src/cockpit/panel.rs:410-434). Das liefert genau den Projektnamen, wenn Projekt und Verzeichnis gleich heißen.- Ein Test schreibt dieses Verhalten fest (
app/src/cockpit/panel_tests.rs:271-278).
- Codex-Rollouts haben keinen Session-Namen (
- Keine visuelle Unterscheidung der Ebenen. Ähnliche Schriftgrößen und Grautöne lassen Host, Projekt, Session und Zusatzinformationen ineinanderlaufen. Das widerspricht dem bestehenden Nachtrag in refactor(cockpit): Sidebar, Verbindungen und Konten entdoppeln #160: „Section-Headline, Host, Projekt, Session und Metadaten sind typografisch unterscheidbar, nicht alle gleich formatiert.“
Entscheidung (06.10.2026): Variante „B+“
Der Owner hat am Mockup aus vier Varianten B+ gewählt. Die Vergleichswerte beziehen sich auf dieselbe Beispiel-Flotte mit 8 Sessions und 9 Agenten: heute 24 Zeilen, B+ 15.
Struktur
- Agent in der Sessionzeile. Eine PTY-Session ist eine Zeile:
- Statusglyph, Sessiontitel, darunter Provider-Icon, Provider und Modell, getrennt nur durch Abstand.
- Eigene Agent-Zeilen gibt es nur, wenn eine PTY mehrere Agenten hat.
- Projekt und Session verschmelzen, wenn ein Projekt genau eine PTY-Session hat, mit oder ohne eigenen Titel (Entscheidung vom 08.10.2026). Der Projektname führt und behält Vorrang. Der eigene Titel der Session, etwa der Branch, folgt gedimmt mit Abstand und weicht bei Platzmangel zuerst. Ein Titel, der nur den Projektnamen wiederholt, entfällt. Zwei direkt untereinanderstehende gleiche Labels gibt es nicht mehr. In einem Projekt mit mehreren Sessions zeigt eine Session ohne eigenen Titel ihren Agenten einzeilig als Überschrift.
- Gemeinsamer Präfix: Teilt ein Titel mit mindestens einem Geschwister einen Namensanfang, wird dieser gekürzt und gedimmt dargestellt (
vault-curator-…), der unterscheidende Rest hell. Der volle Name steht im Tooltip und in den Details.
3a. Lange Titel kürzen in der Mitte (Entscheidung vom 08.10.2026): Ein langer Titel behält sein kurzes letztes Segment und kürzt davor (feat/checkout-re…-step-2), sonst am Ende. Kann der sichtbare Titel kürzer sein, steht der volle im Tooltip.
3b. Keine Trennzeichen (Entscheidung vom 08.10.2026): Titelteile, Provider und Modell trennen Abstand und Tonwert, keine Mittelpunkte. - Das Datenmodell
Host → Projekt → PTY-Session → Agent(#spec T1) bleibt unverändert. Die Regeln betreffen nur die Darstellung.
Visuelle Regeln
- Feste Glyph-Spalte: Jede Zeile reserviert die Glyph-Spalte, auch ohne Glyph. Titel einer Ebene beginnen auf derselben Achse. Die zweite Zeile beginnt auf der Achse des Titels (#spec C5).
- Provider-Icon führt die Agentangabe, gedämpft (
style.rs::provider_icon). Der Providername bleibt als Text sichtbar. - Ruhende Sessions sind leiser: Der Titel einer Session im Leerlauf nutzt die gedämpfte Textrolle, laufende und wartende Sessions die primäre. Amber bleibt ausschließlich „wartet auf dich“.
- Typografische Stufen aus Theme-Rollen, ohne hartkodierte Farben:
- Host: primär, halbfett
- Projekt: sekundär, kleiner
- Session: primär
- Agentangabe: gedämpft, kleiner
- Fokussierte Session: Die Session des aktiven Panes trägt eine dauerhafte Akzent-Hinterlegung über die ganze Zeile (
CONTROL_RADIUS4).- Hover ändert weiterhin nur die Farbe.
- Kein Task-Peek-Overlay beim Hovern, siehe [UI-Implementierung] Abgestimmten Premium-Entwurf für Sidebar, Sessions und Mehrhost-Panes umsetzen #459.
- Abstände statt Linien: Vor Host- und Projektgruppen steht zusätzlicher Abstand. Es gibt keine Trennlinien oder Rahmen im Baum.
- Zähler stehen nur an zugeklappten Containern (#spec T3), auch bei „N Agenten“.
Abgelöste Regel: „Jede Sessionzeile ist genau eine Zeile“ (Cockpit-Redesign v2). Sessionzeilen werden zweizeilig, Titel oben, Agent und Modell darunter. Bei der üblichen Sidebarbreite würde der Titel einzeilig sonst abgeschnitten.
Referenz: Das private Mockup-Artefakt „Zaplex Session-Baum – Varianten“ (Board „B+ – visuell verfeinert“) ist die Entscheidungsgrundlage. Im Implementierungs-PR wird es anonymisiert nach docs/ui/ übernommen. Mit ihm werden specs/GH-160/PRODUCT.md (Punkt 4), TECH.md und docs/ui/cockpit-sidebar-connections.html#spec nachgezogen.
Nicht-Ziele
- Keine Statusprosa oder Kontextmetriken im Baum (refactor(cockpit): Sidebar, Verbindungen und Konten entdoppeln #160 bleibt gültig).
- Keine Änderung an der Trennung von KI-Sessions und KI-Konten. Die ist feat(sidebar): KI-Sessions und KI-Konten als eigene Sidebar-Ansichten trennen #504.
- Keine Änderung an der Session-Erkennung.
Erwartung / Abnahme
- Die Regeln 1–11 sind umgesetzt. Spec, TECH und HTML-Spec sind im selben PR nachgezogen, mit anonymisiertem Mockup unter
docs/ui/. - Keine zwei direkt untereinanderstehenden Zeilen mit identischem Label.
- Bei mehreren ähnlich benannten Sessions ist der unterscheidende Teil bei üblicher und minimaler Sidebarbreite sichtbar.
- Host, Projekt, Session und Agent-Metadaten sind typografisch unterscheidbar, in hell und dunkel.
- Eine reale Flotte mit mehreren Hosts, Projekten und parallelen Sessions ist als native Aufnahme abgenommen.
Regressionstests
tree_never_repeats_parent_label_in_child_rowsimilar_session_names_show_distinguishing_suffixsingle_untitled_session_merges_into_project_rowmultiple_agents_in_one_pty_render_child_rowstree_rows_reserve_glyph_slot_for_text_axisidle_session_title_uses_muted_rolefocused_session_row_has_stable_highlightexpanded_container_shows_no_count
Bezug: #504 (Trennung Sessions/Konten), #160, #459, #455. Zeilenangaben beziehen sich auf 9ce5af67c. Kein Build und kein Test ausgeführt.
Activity
fix(cockpit): Lange Titel mittig kürzen, Einzelsessions zusammenlegen…
fix(cockpit): Verzeichnistitel ohne Projektnamen, Tooltip für jeden T…
fix(cockpit): Identische Titel nie kürzen, Sessionname wie Projekt üb…
fix(cockpit): Tonwert zusammengelegter Zeilen, fester Rest bei Präfix…
fix(cockpit): Hostzeile trägt Fokus und Tooltip, leeres cwd ist kein …
Merge pull request #529 from byte5ai/feat/sidebar-sessions-accounts
iret77 commentedon Oct 9, 2026
Abschluss
Erledigt: Darstellung B+ umgesetzt mit #529 (Merge
b813a4759), einschließlich der Entscheidungen vom 08.10. (zusammengelegte Projektzeile, Mittelkürzung, keine Trennpunkte). Die Abnahmematrix in #160 bestätigt die Umsetzung. Ergänzt in #537 (Mergeac693dbd1): Die Marke◆verwalteter Agents hat jetzt einen lokalisierten Tooltip, und der Hierarchie-Test prüft alle vier Ebenen. #537 behebt außerdem den statischen Guard, den der Tooltip am Hosttitel aus #529 gebrochen hatte.Regressionstests:
tree_never_repeats_parent_label_in_child_row,similar_session_names_show_distinguishing_suffix,single_untitled_session_merges_into_project_row,multiple_agents_in_one_pty_render_child_rows,idle_session_title_uses_muted_role,focused_session_row_has_stable_highlight: vorhanden.expanded_container_shows_no_count: vorhanden alsexpanded_containers_hide_counts(panel_tests.rs).tree_rows_reserve_glyph_slot_for_text_axis: nicht als Test geschrieben, weil es reine Layoutgeometrie ist. Jede Zeilenart setztempty_slot()oderchevron_slot()mitGLYPH_COL_WIDTHvor den Titel.Nicht verifiziert: Compile, Clippy, Tests und Screenshots laufen erst im nächsten gebündelten ci-batch. Der letzte Lauf auf
b813a4759war aus den zwei in #537 behobenen Gründen rot. Typografie in hell und dunkel ist nicht visuell geprüft.