- Startseite
- Documentation
- TUI
- `/tree`-Befehlsreferenz
`/tree`-Befehlsreferenz
/tree öffnet den interaktiven Sitzungsbaum-Navigator. Er ermöglicht es Ihnen, zu einem beliebigen Eintrag in der aktuellen Sitzungsdatei zu springen und von diesem Punkt aus fortzufahren.
Dies ist eine dateiinterne Blattverschiebung, kein neuer Sitzungsexport.
Was /tree bewirkt
Abschnitt betitelt „Was /tree bewirkt“- Erstellt einen Baum aus den aktuellen Sitzungseinträgen (
SessionManager.getTree()) - Öffnet
TreeSelectorComponentmit Tastaturnavigation, Filtern und Suche - Bei Auswahl wird
AgentSession.navigateTree(targetId, { summarize, customInstructions })aufgerufen - Baut den sichtbaren Chat vom neuen Blattpfad aus neu auf
- Füllt optional den Editor-Text vor, wenn eine Benutzer-/benutzerdefinierte Nachricht ausgewählt wird
Primäre Implementierung:
src/modes/controllers/input-controller.ts(/tree, Tastenkürzel-Verdrahtung, Doppel-Escape-Verhalten)src/modes/controllers/selector-controller.ts(Baum-UI-Start + Zusammenfassungs-Prompt-Ablauf)src/modes/components/tree-selector.ts(Navigation, Filter, Suche, Labels, Rendering)src/session/agent-session.ts(navigateTreeBlattwechsel + optionale Zusammenfassung)src/session/session-manager.ts(getTree,branch,branchWithSummary,resetLeaf, Label-Persistenz)
Wie man ihn öffnet
Abschnitt betitelt „Wie man ihn öffnet“Jede der folgenden Methoden öffnet denselben Selektor:
/tree- Konfigurierte Tastenkürzel-Aktion
tree - Doppel-Escape bei leerem Editor, wenn
doubleEscapeAction = "tree"(Standard) /branchwenndoubleEscapeAction = "tree"(leitet zum Baum-Selektor statt zum Nur-Benutzer-Verzweigungswähler weiter)
Baum-UI-Modell
Abschnitt betitelt „Baum-UI-Modell“Der Baum wird aus den Eltern-Zeigern der Sitzungseinträge (id / parentId) gerendert.
- Kinder werden nach Zeitstempel aufsteigend sortiert (ältere zuerst, neuere weiter unten)
- Der aktive Zweig (Pfad von der Wurzel zum aktuellen Blatt) ist mit einem Aufzählungszeichen markiert
- Labels (falls vorhanden) werden als
[label]vor dem Knotentext gerendert - Falls mehrere Wurzeln existieren (verwaiste/unterbrochene Elternketten), werden sie unter einer virtuellen Verzweigungswurzel angezeigt
Example tree view (active path marked with •):
├─ user: "Start task"│ └─ assistant: "Plan"│ ├─ • user: "Try approach A"│ │ └─ • assistant: "A result"│ │ └─ • [milestone] user: "Continue A"│ └─ user: "Try approach B"│ └─ assistant: "B result"Der Selektor zentriert sich um die aktuelle Auswahl und zeigt bis zu:
max(5, floor(terminalHeight / 2))Zeilen
Tastenkürzel innerhalb des Baum-Selektors
Abschnitt betitelt „Tastenkürzel innerhalb des Baum-Selektors“Up/Down: Auswahl verschieben (umhüllend)Left/Right: Seite hoch / Seite runterEnter: Knoten auswählenEsc: Suche löschen, falls aktiv; andernfalls Selektor schließenCtrl+C: Selektor schließenTippen: An Suchanfrage anhängenBackspace: Suchzeichen löschenShift+L: Label des ausgewählten Eintrags bearbeiten/löschenCtrl+O: Filter vorwärts durchschaltenShift+Ctrl+O: Filter rückwärts durchschaltenAlt+D/T/U/L/A: Direkt zu einem bestimmten Filtermodus springen
Filter und Suchsemantik
Abschnitt betitelt „Filter und Suchsemantik“Filtermodi (TreeList):
defaultno-toolsuser-onlylabeled-onlyall
default
Abschnitt betitelt „default“Zeigt die meisten Gesprächsknoten, blendet aber verwaltungstechnische Eintragstypen aus:
labelcustommodel_changethinking_level_change
no-tools
Abschnitt betitelt „no-tools“Wie default, blendet zusätzlich toolResult-Nachrichten aus.
user-only
Abschnitt betitelt „user-only“Nur message-Einträge, bei denen die Rolle user ist.
labeled-only
Abschnitt betitelt „labeled-only“Nur Einträge, die aktuell zu einem Label aufgelöst werden.
Alles im Sitzungsbaum, einschließlich Verwaltungs-/benutzerdefinierter Einträge.
Verhalten bei reinen Tool-Assistenten-Knoten
Abschnitt betitelt „Verhalten bei reinen Tool-Assistenten-Knoten“Assistenten-Nachrichten, die nur Tool-Aufrufe enthalten (kein Text), werden standardmäßig in allen gefilterten Ansichten ausgeblendet, es sei denn:
- Die Nachricht ist fehlerhaft/abgebrochen (
stopReasonnichtstop/toolUse), oder - es ist das aktuelle Blatt (wird immer sichtbar gehalten)
Suchverhalten
Abschnitt betitelt „Suchverhalten“- Die Anfrage wird durch Leerzeichen tokenisiert
- Der Abgleich ist nicht groß-/kleinschreibungssensitiv
- Alle Token müssen übereinstimmen (UND-Semantik)
- Durchsuchbarer Text umfasst Label, Rolle und typspezifischen Inhalt (Nachrichtentext, Verzweigungszusammenfassungstext, benutzerdefinierter Typ, Tool-Befehlsausschnitte usw.)
Auswahlergebnisse (wichtig)
Abschnitt betitelt „Auswahlergebnisse (wichtig)“navigateTree berechnet das neue Blattverhalten anhand des ausgewählten Eintragstyps:
Auswahl einer user-Nachricht
Abschnitt betitelt „Auswahl einer user-Nachricht“- Das neue Blatt wird die
parentIddes ausgewählten Eintrags - Wenn der Elternknoten
nullist (Wurzel-Benutzernachricht), wird das Blatt auf die Wurzel zurückgesetzt (resetLeaf()) - Der ausgewählte Nachrichtentext wird zur Bearbeitung/erneuten Übermittlung in den Editor kopiert
Auswahl einer custom_message
Abschnitt betitelt „Auswahl einer custom_message“- Gleiche Blattregel wie bei Benutzernachrichten (
parentId) - Der Textinhalt wird extrahiert und in den Editor kopiert
Auswahl eines Nicht-Benutzer-Knotens (Assistent/Tool/Zusammenfassung/Kompaktierung/benutzerdefinierte Verwaltung/usw.)
Abschnitt betitelt „Auswahl eines Nicht-Benutzer-Knotens (Assistent/Tool/Zusammenfassung/Kompaktierung/benutzerdefinierte Verwaltung/usw.)“- Das neue Blatt wird die ID des ausgewählten Knotens
- Der Editor wird nicht vorausgefüllt
Auswahl des aktuellen Blatts
Abschnitt betitelt „Auswahl des aktuellen Blatts“- Keine Aktion; der Selektor schließt sich mit “Bereits an diesem Punkt”
Selection decision (simplified):
selected node │ ├─ is current leaf? ── yes ──> close selector (no-op) │ ├─ is user/custom_message? ── yes ──> leaf := parentId (or resetLeaf for root) │ + prefill editor text │ └─ otherwise ──> leaf := selected node id + no editor prefillZusammenfassung-bei-Wechsel-Ablauf
Abschnitt betitelt „Zusammenfassung-bei-Wechsel-Ablauf“Der Zusammenfassungs-Prompt wird durch branchSummary.enabled gesteuert (Standard: false).
Wenn aktiviert, fragt die UI nach der Knotenauswahl:
Keine ZusammenfassungZusammenfassenMit benutzerdefiniertem Prompt zusammenfassen
Ablaufdetails:
- Escape im Zusammenfassungs-Prompt öffnet den Baum-Selektor erneut
- Abbruch des benutzerdefinierten Prompts kehrt zur Zusammenfassungsauswahl-Schleife zurück
- Während der Zusammenfassung zeigt die UI einen Ladeindikator und bindet
EscanabortBranchSummary() - Wenn die Zusammenfassung abgebrochen wird, öffnet sich der Baum-Selektor erneut und es wird keine Verschiebung angewendet
navigateTree-Interna:
- Sammelt verlassene Zweigeinträge vom alten Blatt bis zum gemeinsamen Vorfahren
- Löst
session_before_treeaus (Erweiterungen können abbrechen oder Zusammenfassung einfügen) - Verwendet den Standard-Zusammenfasser nur wenn angefordert und benötigt
- Wendet die Verschiebung an mit:
branchWithSummary(...)wenn eine Zusammenfassung existiertbranch(newLeafId)für Nicht-Wurzel-Verschiebung ohne ZusammenfassungresetLeaf()für Wurzel-Verschiebung ohne Zusammenfassung
- Ersetzt die Agentenkonversation durch den neu aufgebauten Sitzungskontext
- Löst
session_treeaus
Hinweis: Wenn der Benutzer eine Zusammenfassung anfordert, aber nichts zusammenzufassen ist, wird die Navigation fortgesetzt, ohne einen Zusammenfassungseintrag zu erstellen.
Label-Bearbeitungen in der Baum-UI rufen appendLabelChange(targetId, label) auf.
- Nicht-leeres Label setzt/aktualisiert das aufgelöste Label
- Leeres Label löscht es
- Labels werden als Nur-Anhängen-
label-Einträge gespeichert - Baumknoten zeigen den aufgelösten Label-Zustand an, nicht den rohen Label-Eintragsverlauf
/tree im Vergleich zu benachbarten Operationen
Abschnitt betitelt „/tree im Vergleich zu benachbarten Operationen“| Operation | Geltungsbereich | Ergebnis |
|---|---|---|
/tree | Aktuelle Sitzungsdatei | Verschiebt das Blatt zum ausgewählten Punkt (gleiche Datei) |
/branch | Normalerweise aktuelle Sitzungsdatei -> neue Sitzungsdatei | Verzweigt standardmäßig von der ausgewählten Benutzer-Nachricht in eine neue Sitzungsdatei; wenn doubleEscapeAction = "tree", öffnet /branch stattdessen die Baumnavigations-UI |
/fork | Gesamte aktuelle Sitzung | Dupliziert die Sitzung in eine neue persistierte Sitzungsdatei |
/resume | Sitzungsliste | Wechselt zu einer anderen Sitzungsdatei |
Wichtige Unterscheidung: /tree ist ein Navigations-/Repositionierungswerkzeug innerhalb einer Sitzungsdatei. /branch, /fork und /resume ändern alle den Sitzungsdatei-Kontext.
Operator-Workflows
Abschnitt betitelt „Operator-Workflows“Von einem früheren Benutzer-Prompt erneut ausführen, ohne den aktuellen Zweig zu verlieren
Abschnitt betitelt „Von einem früheren Benutzer-Prompt erneut ausführen, ohne den aktuellen Zweig zu verlieren“/tree- Frühere Benutzernachricht suchen/auswählen
Keine Zusammenfassungwählen (oder zusammenfassen, falls benötigt)- Vorausgefüllten Text im Editor bearbeiten
- Absenden
Effekt: Ein neuer Zweig wächst vom ausgewählten Punkt innerhalb derselben Sitzungsdatei.
Aktuellen Zweig mit Kontextbrodkrümel verlassen
Abschnitt betitelt „Aktuellen Zweig mit Kontextbrodkrümel verlassen“branchSummary.enabledaktivieren/treeund Zielknoten auswählenZusammenfassenwählen (oder benutzerdefinierten Prompt)
Effekt: Ein branch_summary-Eintrag wird an der Zielposition angehängt, bevor fortgefahren wird.
Versteckte Verwaltungseinträge untersuchen
Abschnitt betitelt „Versteckte Verwaltungseinträge untersuchen“/treeAlt+Adrücken (alle)- Nach
model,thinking,customoder Labels suchen
Effekt: Vollständige interne Zeitleiste inspizieren, nicht nur Gesprächsknoten.
Ankerpunkte für spätere Sprünge markieren
Abschnitt betitelt „Ankerpunkte für spätere Sprünge markieren“/tree- Zu einem Eintrag navigieren
Shift+Lund Label setzen- Später
Alt+L(labeled-only) für schnelle Sprünge verwenden
Effekt: Schnelle Navigation zwischen dauerhaften Verzweigungslandmarken.