From 939ebc8a8377c13f32225a4a7ced056baaaf766b Mon Sep 17 00:00:00 2001 From: Luxferre Date: Sun, 22 Mar 2026 17:09:13 +0200 Subject: [PATCH] feat: add /clear command to TUI --- cmd/sidekick-tui/main.go | 30 ++++++++++++++++++++++++++++-- 1 file changed, 28 insertions(+), 2 deletions(-) diff --git a/cmd/sidekick-tui/main.go b/cmd/sidekick-tui/main.go index 39f8d06..e63b48e 100644 --- a/cmd/sidekick-tui/main.go +++ b/cmd/sidekick-tui/main.go @@ -58,6 +58,7 @@ type model struct { transientSteps []string currentStream string currentReasoning string + cancel context.CancelFunc isThinking bool err error ready bool @@ -66,6 +67,17 @@ type model struct { renderer *glamour.TermRenderer } +func (m model) formatReasoning(reasoning string) string { + if reasoning == "" { + return "" + } + lines := strings.Split(strings.TrimSpace(reasoning), "\n") + for i, line := range lines { + lines[i] = "> " + line + } + return "> *Thinking:*\n>\n" + strings.Join(lines, "\n") + "\n" +} + type agentResponseMsg struct { response string err error @@ -211,7 +223,7 @@ func (m model) renderMessage(msg sidekick.Message) string { if m.renderer != nil { if reasoning != "" { - if r, err := m.renderer.Render("> *Thinking:*\n>\n> " + reasoning); err == nil { + if r, err := m.renderer.Render(m.formatReasoning(reasoning)); err == nil { reasoning = strings.TrimSpace(r) + "\n" } } @@ -247,7 +259,7 @@ func (m *model) updateViewportContent() { reasoning := m.currentReasoning if m.renderer != nil { if reasoning != "" { - if r, err := m.renderer.Render("> *Thinking:*\n>\n> " + reasoning); err == nil { + if r, err := m.renderer.Render(m.formatReasoning(reasoning)); err == nil { reasoning = strings.TrimSpace(r) + "\n" } } @@ -320,6 +332,20 @@ func (m model) Update(msg tea.Msg) (tea.Model, tea.Cmd) { return m, nil } + trimmed := strings.TrimSpace(v) + if trimmed == "/clear" { + m.history = []sidekick.Message{ + {Role: sidekick.MessageRoleSystem, Content: "Context cleared."}, + } + m.currentStream = "" + m.currentReasoning = "" + m.transientSteps = nil + m.textarea.Reset() + m.updateViewportContent() + m.viewport.GotoBottom() + return m, nil + } + m.history = append(m.history, sidekick.Message{ Role: sidekick.MessageRoleUser, Content: v,