Browse Source

feat: hide tool calls

adamdottv 9 months ago
parent
commit
efaba6c5b8

+ 30 - 17
internal/tui/components/chat/list.go

@@ -26,19 +26,21 @@ type cacheItem struct {
 	content []uiMessage
 }
 type messagesCmp struct {
-	app           *app.App
-	width, height int
-	viewport      viewport.Model
-	session       session.Session
-	messages      []message.Message
-	uiMessages    []uiMessage
-	currentMsgID  string
-	cachedContent map[string]cacheItem
-	spinner       spinner.Model
-	rendering     bool
-	attachments   viewport.Model
+	app             *app.App
+	width, height   int
+	viewport        viewport.Model
+	session         session.Session
+	messages        []message.Message
+	uiMessages      []uiMessage
+	currentMsgID    string
+	cachedContent   map[string]cacheItem
+	spinner         spinner.Model
+	rendering       bool
+	attachments     viewport.Model
+	showToolMessages bool
 }
 type renderFinishedMsg struct{}
+type ToggleToolMessagesMsg struct{}
 
 type MessageKeys struct {
 	PageDown     key.Binding
@@ -76,6 +78,12 @@ func (m *messagesCmp) Update(msg tea.Msg) (tea.Model, tea.Cmd) {
 	case dialog.ThemeChangedMsg:
 		m.rerender()
 		return m, nil
+	case ToggleToolMessagesMsg:
+		m.showToolMessages = !m.showToolMessages
+		// Clear the cache to force re-rendering of all messages
+		m.cachedContent = make(map[string]cacheItem)
+		m.renderView()
+		return m, nil
 	case SessionSelectedMsg:
 		if msg.ID != m.session.ID {
 			cmd := m.SetSession(msg)
@@ -217,6 +225,7 @@ func (m *messagesCmp) renderView() {
 				m.currentMsgID,
 				m.width,
 				pos,
+				m.showToolMessages,
 			)
 			for _, msg := range assistantMessages {
 				m.uiMessages = append(m.uiMessages, msg)
@@ -382,7 +391,10 @@ func (m *messagesCmp) help() string {
 			baseStyle.Foreground(t.TextMuted()).Bold(true).Render(" to send the message,"),
 			baseStyle.Foreground(t.TextMuted()).Bold(true).Render(" write"),
 			baseStyle.Foreground(t.Text()).Bold(true).Render(" \\"),
-			baseStyle.Foreground(t.TextMuted()).Bold(true).Render(" and enter to add a new line"),
+			baseStyle.Foreground(t.TextMuted()).Bold(true).Render(" and enter to add a new line,"),
+			baseStyle.Foreground(t.TextMuted()).Bold(true).Render(" press"),
+			baseStyle.Foreground(t.Text()).Bold(true).Render(" ctrl+h"),
+			baseStyle.Foreground(t.TextMuted()).Bold(true).Render(" to toggle tool messages"),
 		)
 	}
 	return baseStyle.
@@ -471,10 +483,11 @@ func NewMessagesCmp(app *app.App) tea.Model {
 	vp.KeyMap.HalfPageUp = messageKeys.HalfPageUp
 	vp.KeyMap.HalfPageDown = messageKeys.HalfPageDown
 	return &messagesCmp{
-		app:           app,
-		cachedContent: make(map[string]cacheItem),
-		viewport:      vp,
-		spinner:       s,
-		attachments:   attachmets,
+		app:             app,
+		cachedContent:   make(map[string]cacheItem),
+		viewport:        vp,
+		spinner:         s,
+		attachments:     attachmets,
+		showToolMessages: true,
 	}
 }

+ 17 - 13
internal/tui/components/chat/message.go

@@ -134,6 +134,7 @@ func renderAssistantMessage(
 	focusedUIMessageId string,
 	width int,
 	position int,
+	showToolMessages bool,
 ) []uiMessage {
 	messages := []uiMessage{}
 	content := msg.Content().String()
@@ -212,19 +213,22 @@ func renderAssistantMessage(
 		position++ // for the space
 	}
 
-	for i, toolCall := range msg.ToolCalls() {
-		toolCallContent := renderToolMessage(
-			toolCall,
-			allMessages,
-			messagesService,
-			focusedUIMessageId,
-			false,
-			width,
-			i+1,
-		)
-		messages = append(messages, toolCallContent)
-		position += toolCallContent.height
-		position++ // for the space
+	// Only render tool messages if they should be shown
+	if showToolMessages {
+		for i, toolCall := range msg.ToolCalls() {
+			toolCallContent := renderToolMessage(
+				toolCall,
+				allMessages,
+				messagesService,
+				focusedUIMessageId,
+				false,
+				width,
+				i+1,
+			)
+			messages = append(messages, toolCallContent)
+			position += toolCallContent.height
+			position++ // for the space
+		}
 	}
 	return messages
 }

+ 9 - 2
internal/tui/page/chat.go

@@ -26,8 +26,9 @@ type chatPage struct {
 }
 
 type ChatKeyMap struct {
-	NewSession key.Binding
-	Cancel     key.Binding
+	NewSession   key.Binding
+	Cancel       key.Binding
+	ToggleTools  key.Binding
 }
 
 var keyMap = ChatKeyMap{
@@ -39,6 +40,10 @@ var keyMap = ChatKeyMap{
 		key.WithKeys("esc"),
 		key.WithHelp("esc", "cancel"),
 	),
+	ToggleTools: key.NewBinding(
+		key.WithKeys("ctrl+h"),
+		key.WithHelp("ctrl+h", "toggle tools"),
+	),
 }
 
 func (p *chatPage) Init() tea.Cmd {
@@ -98,6 +103,8 @@ func (p *chatPage) Update(msg tea.Msg) (tea.Model, tea.Cmd) {
 				p.app.CoderAgent.Cancel(p.session.ID)
 				return p, nil
 			}
+		case key.Matches(msg, keyMap.ToggleTools):
+			return p, util.CmdHandler(chat.ToggleToolMessagesMsg{})
 		}
 	}
 	u, cmd := p.layout.Update(msg)