Skip to content

Commit a08fe26

Browse files
committed
fix thinking tokens pushing the ui off the screen
pass thinking tokens through the renderer so lines wrap the term width correctly and height calculations remain consistent Signed-off-by: Christopher Petito <chrisjpetito@gmail.com>
1 parent e42a71d commit a08fe26

1 file changed

Lines changed: 16 additions & 2 deletions

File tree

internal/tui/components/message/message.go

Lines changed: 16 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ package message
22

33
import (
44
"fmt"
5+
"regexp"
56
"strings"
67

78
"github.com/charmbracelet/bubbles/v2/spinner"
@@ -96,8 +97,15 @@ func (mv *messageModel) Render(int) string {
9697
if msg.Content == "" {
9798
return mv.spinner.View()
9899
}
99-
text := senderPrefix(msg.Sender) + msg.Content
100-
return styles.MutedStyle.Italic(true).Render("Thinking: " + text)
100+
text := "Thinking: " + senderPrefix(msg.Sender) + msg.Content
101+
// Render through the markdown renderer to ensure proper wrapping to width
102+
rendered, err := mv.renderer.Render(text)
103+
if err != nil {
104+
return styles.MutedStyle.Italic(true).Render(text)
105+
}
106+
// Strip ANSI from inner rendering so muted style fully applies
107+
clean := stripANSI(strings.TrimRight(rendered, "\n\r\t "))
108+
return styles.MutedStyle.Italic(true).Render(clean)
101109
case types.MessageTypeShellOutput:
102110
if rendered, err := mv.renderer.Render(fmt.Sprintf("```console\n%s\n```", msg.Content)); err == nil {
103111
return strings.TrimRight(rendered, "\n\r\t ")
@@ -143,3 +151,9 @@ func (mv *messageModel) SetSize(width, height int) tea.Cmd {
143151
func (mv *messageModel) GetSize() (width, height int) {
144152
return mv.width, mv.height
145153
}
154+
155+
var ansiEscape = regexp.MustCompile("\x1b\\[[0-9;]*m")
156+
157+
func stripANSI(s string) string {
158+
return ansiEscape.ReplaceAllString(s, "")
159+
}

0 commit comments

Comments
 (0)