tui

package
v0.10.0 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Oct 30, 2026 License: EUPL-1.2 Imports: 35 Imported by: 0

Documentation

Overview

Package tui contient l'interface interactive de tenon. Ce fichier est la logique pure (sans Bubble Tea) qui transforme les événements de l'engine en éléments affichables.

Index

Constants

View Source
const (
	// SandboxOn : les commandes shell sont confinées.
	SandboxOn = "sandboxed"
	// SandboxOff : les commandes shell ne sont pas confinées.
	SandboxOff = "not sandboxed"
)

Valeurs de Options.Sandbox.

Variables

View Source
var ErrTurnNotFinished = errors.New("tui: the turn did not finish")

ErrTurnNotFinished signale qu'à la sortie de la TUI le tour annulé n'a pas rendu la main dans le délai imparti.

Functions

func Run

func Run(ctx context.Context, eng Engine, opts Options, in io.Reader, out io.Writer) error

Run lance la TUI en plein écran jusqu'à ce que l'utilisateur quitte.

func ThemeNames added in v0.10.0

func ThemeNames() []string

ThemeNames renvoie les noms des thèmes, le thème par défaut en premier.

Types

type Engine

type Engine interface {
	// Subscribe renvoie un abonnement aux événements ; l'engine bloque quand
	// son tampon est plein, la TUI doit donc le lire en continu.
	Subscribe() <-chan event.Event
	// SubmitInput exécute un tour (texte simple ou skill développé) et rend
	// la main à sa fin.
	SubmitInput(ctx context.Context, sessionID string, in engine.Input) error
	// Respond répond à une demande de permission.
	Respond(permissionID string, r engine.Reply) error
	// RewindPoints, RewindPlan et Rewind : /rewind (points récents d'abord,
	// plan sans effet, exécution).
	RewindPoints(sessionID string) []checkpoint.Point
	RewindPlan(sessionID string, toSeq uint64) (checkpoint.Plan, error)
	// Remember : /remember (écriture directe d'une note, sans approbation).
	Remember(sessionID string, scope memory.Scope, text string) (memory.Entry, []string, error)
	Rewind(ctx context.Context, sessionID string, toSeq uint64, mode engine.RewindMode, preview checkpoint.Plan, overwrite []string) (engine.RewindResult, error)
}

Engine est la partie de l'engine dont la TUI a besoin.

type Item

type Item struct {
	Kind      ItemKind
	Text      string // texte affiché (assistant : accumulé pendant le streaming)
	Tool      string // ItemTool
	Detail    string // ItemTool : commande ou chemins ; résultat abrégé
	Status    string // ItemTool : "pending", "ok", "error", "denied"
	Streaming bool   // ItemAssistant en cours
	// Parent est le call_id de l'appel « agent » dont un sous-agent a émis
	// cet outil ("" pour l'agent principal) ; Iterations vaut le nombre
	// d'itérations d'un sous-agent terminé.
	Parent     string
	Iterations int
	// contains filtered or unexported fields
}

Item est un élément de la conversation affichée.

type ItemKind

type ItemKind int

ItemKind distingue les éléments affichables.

const (
	ItemBanner ItemKind = iota
	ItemUser
	ItemAssistant
	ItemTool
	ItemNotice
	ItemError
)

type Model

type Model struct {
	// contains filtered or unexported fields
}

Model est le modèle Bubble Tea de la TUI.

func New

func New(eng Engine, opts Options) Model

New crée le modèle et s'abonne aux événements de eng.

func (Model) Init

func (m Model) Init() tea.Cmd

Init lance la lecture de l'abonnement, et l'animation d'ouverture.

func (Model) Update

func (m Model) Update(msg tea.Msg) (tea.Model, tea.Cmd)

Update applique un message, puis ajuste la saisie à la vue (cadre de l'accueil ou toute la largeur).

func (Model) View

func (m Model) View() string

View rend la conversation, la saisie et la barre d'état ; aucune ligne ne dépasse la largeur courante.

type Options

type Options struct {
	Lang i18n.Lang
	// Theme est le thème de la TUI ([ui] theme ; "" ou inconnu : tenon).
	Theme string
	// Animation active l'animation d'ouverture ([ui] animation).
	Animation     bool
	SessionID     string
	Provider      llm.ProviderInfo
	ContextWindow int
	// SessionTokens : total de jetons déjà compté (session reprise).
	SessionTokens int64
	ProjectRoot   string
	// Profile est le profil de conformité actif, affiché dans la barre
	// d'état ("" : aucun profil).
	Profile string
	// Policy est la ligne de la politique d'organisation, déjà traduite
	// (« policy: acme-dev v3 (key …) »), affichée sous celle du profil
	// ("" : aucune politique, aucune ligne).
	Policy string
	// Local est le fournisseur local du routage ("" : celui de
	// SessionStarted, ou le fournisseur courant s'il est local).
	Local string
	// Version est la version affichée dans l'accueil ("dev" si vide).
	Version string
	// Redact masque tout texte venu des événements avant affichage (même
	// fonction que le mode non interactif) ; nil : aucun masquage.
	Redact func(string) string
	// DescribeMCP renvoie le serveur MCP (identifiant, juridiction, pays) d'un
	// outil ; nil : registre du paquet mcp.
	DescribeMCP func(tool string) (event.MCPServerInfo, bool)
	// Notices sont des avis du démarrage (avertissements MCP) placés en tête
	// de la conversation, nettoyés et masqués par Redact.
	Notices []string
	// Skills est le catalogue des skills (/<nom>, /skills, complétion) ;
	// nil : aucun skill.
	Skills *skills.Catalog
	// Agents est le catalogue des agents (/agents) ; nil : aucun agent.
	Agents *agents.Catalog
	// Hooks est l'ensemble des hooks chargés (/hooks) ; nil : aucun hook.
	Hooks *hooks.Set
	// Memory est le store mémoire (/memory) ; nil : mémoire coupée, /memory
	// et /remember répondent « memory: disabled by <MemoryDisabledBy> ».
	Memory *memory.Store
	// MemoryDisabledBy : "policy" ou "config" ("" : config).
	MemoryDisabledBy string
	// MemoryWriteSeqs : séquences des MemoryWritten de la session reprise
	// (--resume), pour l'avis de /rewind.
	MemoryWriteSeqs []uint64
	// Resumed indique une session reprise (--resume) : le fil s'affiche
	// directement, sans l'accueil.
	Resumed bool
	// Sandbox est l'état d'isolation des commandes shell, pour la pastille de
	// la barre d'état : SandboxOn, SandboxOff, ou "" (inconnu : aucune pastille).
	Sandbox string
	// Providers sont les fournisseurs configurés, par identifiant : pays et
	// juridiction des envois du panneau latéral et des badges (Usage ne porte
	// pas de pays) ; nil : pays inconnus.
	Providers map[string]llm.ProviderInfo
	// History sont les événements de la session reprise (--resume) : ils
	// restaurent le panneau latéral seul (titre, envois, fichiers, jetons,
	// jauge), jamais la transcription.
	History []event.Event
	// Sessions sont les sessions passées du dossier (palette Ctrl+P), la plus
	// récente d'abord ; la session courante en est exclue à l'affichage.
	Sessions []session.Summary
	// Now remplace l'horloge (délai d'armement des acceptations, double
	// Ctrl+C). Réservé aux tests ; nil : time.Now.
	Now func() time.Time
}

Options configure la TUI.

type Theme added in v0.10.0

type Theme struct {
	Name string
	// Structure : fond (badges) et, sur fond clair, texte (cadres, logo).
	Structure lipgloss.Color
	// StructureDark remplace Structure comme couleur de texte sur fond sombre
	// ("" : Structure), pour garder un contraste d'au moins 4,5:1.
	StructureDark lipgloss.Color
	// Accent : titres, outils, fin du dégradé du logo.
	Accent lipgloss.Color
	// OK : réussite, juridiction UE, ajouts.
	OK lipgloss.Color
	// Alert : avertissement (ambre : hors UE, juridiction inconnue).
	Alert lipgloss.Color
	// Error : lignes d'erreur et suppressions d'un diff (rouge).
	Error lipgloss.Color
	// Muted : texte atténué (avis, aides).
	Muted lipgloss.Color
	// Text : texte courant ("" : couleur du terminal).
	Text lipgloss.Color
	// Selection : fond de l'entrée sélectionnée (palette, listes).
	Selection lipgloss.Color
}

Theme est la palette de rôles d'un thème de la TUI ; tout rendu coloré passe par ces rôles (jamais par une couleur en dur).

func ThemeByName added in v0.10.0

func ThemeByName(name string) (Theme, bool)

ThemeByName renvoie le thème de ce nom.

func (Theme) StructureFg added in v0.10.0

func (t Theme) StructureFg(dark bool) lipgloss.Color

StructureFg renvoie la couleur de texte de Structure : la variante claire sur fond sombre (dark), Structure sinon.

type Transcript

type Transcript struct {
	// contains filtered or unexported fields
}

Transcript accumule les éléments affichables d'une session. Tout texte venu des événements est masqué (redact) avant d'être conservé.

func NewTranscript

func NewTranscript(l i18n.Lang) *Transcript

NewTranscript crée une transcription vide dans la langue l.

func (*Transcript) Apply

func (t *Transcript) Apply(ev event.Event)

Apply intègre un événement ; les types inconnus sont ignorés.

func (*Transcript) Busy

func (t *Transcript) Busy() bool

Busy indique qu'un tour est en cours (entre UserMessage et TurnCompleted).

func (*Transcript) Items

func (t *Transcript) Items() []Item

Items renvoie une copie des éléments.

func (*Transcript) SetRedact

func (t *Transcript) SetRedact(f func(string) string)

SetRedact remplace la fonction de masquage (nil : aucun masquage).

Directories

Path Synopsis
Package diff calcule l'aperçu des modifications affiché par la TUI avant qu'une écriture (write_file / edit_file) soit approuvée.
Package diff calcule l'aperçu des modifications affiché par la TUI avant qu'une écriture (write_file / edit_file) soit approuvée.

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL