- Home
- Documentation
- TUI
- Riferimento al comando `/tree`
Riferimento al comando `/tree`
/tree apre il navigatore interattivo Session Tree. Consente di passare a qualsiasi voce nel file di sessione corrente e di continuare da quel punto.
Si tratta di uno spostamento a foglia nel file, non di un’esportazione in una nuova sessione.
Cosa fa /tree
Sezione intitolata “Cosa fa /tree”- Costruisce un albero dalle voci della sessione corrente (
SessionManager.getTree()) - Apre
TreeSelectorComponentcon navigazione da tastiera, filtri e ricerca - Alla selezione, chiama
AgentSession.navigateTree(targetId, { summarize, customInstructions }) - Ricostruisce la chat visibile dal nuovo percorso foglia
- Opzionalmente precompila il testo dell’editor quando si seleziona un messaggio utente/personalizzato
Implementazione principale:
src/modes/controllers/input-controller.ts(cablaggio di/tree, tasti di scelta rapida, comportamento doppio escape)src/modes/controllers/selector-controller.ts(avvio dell’interfaccia ad albero + flusso di richiesta sommario)src/modes/components/tree-selector.ts(navigazione, filtri, ricerca, etichette, rendering)src/session/agent-session.ts(commutazione di foglia connavigateTree+ sommario opzionale)src/session/session-manager.ts(getTree,branch,branchWithSummary,resetLeaf, persistenza etichette)
Come aprirlo
Sezione intitolata “Come aprirlo”Ognuno dei seguenti comandi apre lo stesso selettore:
/tree- azione tasto di scelta rapida configurata
tree - doppio escape su editor vuoto quando
doubleEscapeAction = "tree"(predefinito) /branchquandodoubleEscapeAction = "tree"(reindirizza al selettore ad albero invece che al selettore di rami solo-utente)
Modello di interfaccia utente ad albero
Sezione intitolata “Modello di interfaccia utente ad albero”L’albero viene renderizzato dai puntatori ai genitori delle voci di sessione (id / parentId).
- I figli sono ordinati per timestamp in modo crescente (i più vecchi prima, i più recenti in basso)
- Il ramo attivo (percorso dalla radice alla foglia corrente) è contrassegnato con un punto elenco
- Le etichette (se presenti) vengono visualizzate come
[etichetta]prima del testo del nodo - Se esistono più radici (catene di genitori orfane/interrotte), vengono mostrate sotto una radice ramificata virtuale
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"Il selettore si ricentra attorno alla selezione corrente e mostra fino a:
max(5, floor(terminalHeight / 2))righe
Tasti di scelta rapida nel selettore ad albero
Sezione intitolata “Tasti di scelta rapida nel selettore ad albero”Su/Giù: sposta la selezione (con avvolgimento)Sinistra/Destra: pagina su / pagina giùInvio: seleziona nodoEsc: cancella la ricerca se attiva; altrimenti chiude il selettoreCtrl+C: chiude il selettoreDigita: aggiunge alla query di ricercaBackspace: elimina un carattere dalla ricercaShift+L: modifica/cancella l’etichetta sulla voce selezionataCtrl+O: cicla il filtro in avantiShift+Ctrl+O: cicla il filtro all’indietroAlt+D/T/U/L/A: passa direttamente a una specifica modalità filtro
Filtri e semantica della ricerca
Sezione intitolata “Filtri e semantica della ricerca”Modalità filtro (TreeList):
defaultno-toolsuser-onlylabeled-onlyall
default
Sezione intitolata “default”Mostra la maggior parte dei nodi conversazionali, ma nasconde i tipi di voci di contabilità:
labelcustommodel_changethinking_level_change
no-tools
Sezione intitolata “no-tools”Uguale a default, ma nasconde anche i messaggi toolResult.
user-only
Sezione intitolata “user-only”Solo voci message con ruolo user.
labeled-only
Sezione intitolata “labeled-only”Solo voci che attualmente risolvono a un’etichetta.
Tutto nell’albero della sessione, incluse le voci di contabilità/personalizzate.
Comportamento dei nodi assistente solo-strumenti
Sezione intitolata “Comportamento dei nodi assistente solo-strumenti”I messaggi dell’assistente che contengono solo chiamate agli strumenti (nessun testo) sono nascosti per impostazione predefinita in tutte le viste filtrate a meno che:
- il messaggio sia in errore/interrotto (
stopReasondiverso dastop/toolUse), oppure - sia la foglia corrente (sempre mantenuta visibile)
Comportamento della ricerca
Sezione intitolata “Comportamento della ricerca”- La query viene tokenizzata per spazi
- La corrispondenza non distingue maiuscole/minuscole
- Tutti i token devono corrispondere (semantica AND)
- Il testo ricercabile include etichetta, ruolo e contenuto specifico per tipo (testo del messaggio, testo del sommario del ramo, tipo personalizzato, frammenti di comandi degli strumenti, ecc.)
Esiti della selezione (importante)
Sezione intitolata “Esiti della selezione (importante)”navigateTree calcola il nuovo comportamento della foglia dal tipo di voce selezionata:
Selezione di un messaggio user
Sezione intitolata “Selezione di un messaggio user”- La nuova foglia diventa il
parentIddella voce selezionata - Se il genitore è
null(messaggio utente radice), la foglia viene reimpostata alla radice (resetLeaf()) - Il testo del messaggio selezionato viene copiato nell’editor per la modifica/reinvio
Selezione di un custom_message
Sezione intitolata “Selezione di un custom_message”- Stessa regola di foglia dei messaggi utente (
parentId) - Il contenuto testuale viene estratto e copiato nell’editor
Selezione di un nodo non-utente (assistente/strumento/sommario/compattazione/contabilità personalizzata/ecc.)
Sezione intitolata “Selezione di un nodo non-utente (assistente/strumento/sommario/compattazione/contabilità personalizzata/ecc.)”- La nuova foglia diventa l’id del nodo selezionato
- L’editor non viene precompilato
Selezione della foglia corrente
Sezione intitolata “Selezione della foglia corrente”- Nessuna operazione; il selettore si chiude con “Already at this point”
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 prefillFlusso sommario alla commutazione
Sezione intitolata “Flusso sommario alla commutazione”Il prompt del sommario è controllato da branchSummary.enabled (predefinito: false).
Quando abilitato, dopo aver selezionato un nodo l’interfaccia chiede:
No summarySummarizeSummarize with custom prompt
Dettagli del flusso:
- Escape nel prompt del sommario riapre il selettore ad albero
- La cancellazione del prompt personalizzato ritorna al ciclo di scelta del sommario
- Durante la riepilogazione, l’interfaccia mostra un indicatore di caricamento e associa
EscaabortBranchSummary() - Se la riepilogazione viene interrotta, il selettore ad albero si riapre e nessuno spostamento viene applicato
Funzionamento interno di navigateTree:
- Raccoglie le voci del ramo abbandonato dalla vecchia foglia all’antenato comune
- Emette
session_before_tree(le estensioni possono annullare o iniettare un sommario) - Usa il riepilogatore predefinito solo se richiesto e necessario
- Applica lo spostamento con:
branchWithSummary(...)quando esiste un sommariobranch(newLeafId)per uno spostamento non-radice senza sommarioresetLeaf()per uno spostamento radice senza sommario
- Sostituisce la conversazione dell’agente con il contesto della sessione ricostruito
- Emette
session_tree
Nota: se l’utente richiede un sommario ma non c’è nulla da riepilogare, la navigazione procede senza creare una voce di sommario.
Etichette
Sezione intitolata “Etichette”Le modifiche alle etichette nell’interfaccia ad albero chiamano appendLabelChange(targetId, label).
- un’etichetta non vuota imposta/aggiorna l’etichetta risolta
- un’etichetta vuota la cancella
- le etichette sono archiviate come voci
labelin sola aggiunta - i nodi dell’albero mostrano lo stato dell’etichetta risolta, non la cronologia grezza delle voci di etichetta
/tree vs operazioni adiacenti
Sezione intitolata “/tree vs operazioni adiacenti”| Operazione | Ambito | Risultato |
|---|---|---|
/tree | File di sessione corrente | Sposta la foglia al punto selezionato (stesso file) |
/branch | Di solito file di sessione corrente -> nuovo file di sessione | Per impostazione predefinita crea un ramo dal messaggio utente selezionato in un nuovo file di sessione; se doubleEscapeAction = "tree", /branch apre l’interfaccia di navigazione ad albero |
/fork | Intera sessione corrente | Duplica la sessione in un nuovo file di sessione persistente |
/resume | Elenco sessioni | Passa a un altro file di sessione |
Distinzione fondamentale: /tree è uno strumento di navigazione/riposizionamento all’interno di un file di sessione. /branch, /fork e /resume cambiano tutti il contesto del file di sessione.
Flussi di lavoro operatore
Sezione intitolata “Flussi di lavoro operatore”Rieseguire da un prompt utente precedente senza perdere il ramo corrente
Sezione intitolata “Rieseguire da un prompt utente precedente senza perdere il ramo corrente”/tree- cerca/seleziona il messaggio utente precedente
- scegli
No summary(o riepilogare se necessario) - modifica il testo precompilato nell’editor
- invia
Effetto: un nuovo ramo cresce dal punto selezionato all’interno dello stesso file di sessione.
Lasciare il ramo corrente con un riferimento contestuale
Sezione intitolata “Lasciare il ramo corrente con un riferimento contestuale”- abilita
branchSummary.enabled /treee seleziona il nodo di destinazione- scegli
Summarize(o un prompt personalizzato)
Effetto: una voce branch_summary viene aggiunta alla posizione di destinazione prima di continuare.
Ispezionare le voci di contabilità nascoste
Sezione intitolata “Ispezionare le voci di contabilità nascoste”/tree- premi
Alt+A(all) - cerca
model,thinking,custom, o le etichette
Effetto: ispeziona la cronologia interna completa, non solo i nodi conversazionali.
Aggiungere segnalibri ai punti cardine per salti successivi
Sezione intitolata “Aggiungere segnalibri ai punti cardine per salti successivi”/tree- spostati sulla voce
Shift+Le imposta l’etichetta- in seguito usa
Alt+L(labeled-only) per navigare rapidamente
Effetto: navigazione rapida tra punti di riferimento duraturi del ramo.