feat: add /clear command to TUI
This commit is contained in:
@@ -58,6 +58,7 @@ type model struct {
|
|||||||
transientSteps []string
|
transientSteps []string
|
||||||
currentStream string
|
currentStream string
|
||||||
currentReasoning string
|
currentReasoning string
|
||||||
|
cancel context.CancelFunc
|
||||||
isThinking bool
|
isThinking bool
|
||||||
err error
|
err error
|
||||||
ready bool
|
ready bool
|
||||||
@@ -66,6 +67,17 @@ type model struct {
|
|||||||
renderer *glamour.TermRenderer
|
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 {
|
type agentResponseMsg struct {
|
||||||
response string
|
response string
|
||||||
err error
|
err error
|
||||||
@@ -211,7 +223,7 @@ func (m model) renderMessage(msg sidekick.Message) string {
|
|||||||
|
|
||||||
if m.renderer != nil {
|
if m.renderer != nil {
|
||||||
if reasoning != "" {
|
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"
|
reasoning = strings.TrimSpace(r) + "\n"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -247,7 +259,7 @@ func (m *model) updateViewportContent() {
|
|||||||
reasoning := m.currentReasoning
|
reasoning := m.currentReasoning
|
||||||
if m.renderer != nil {
|
if m.renderer != nil {
|
||||||
if reasoning != "" {
|
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"
|
reasoning = strings.TrimSpace(r) + "\n"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -320,6 +332,20 @@ func (m model) Update(msg tea.Msg) (tea.Model, tea.Cmd) {
|
|||||||
return m, nil
|
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{
|
m.history = append(m.history, sidekick.Message{
|
||||||
Role: sidekick.MessageRoleUser,
|
Role: sidekick.MessageRoleUser,
|
||||||
Content: v,
|
Content: v,
|
||||||
|
|||||||
Reference in New Issue
Block a user