fix: truncate the diff on the messages

Kujtim Hoxha created

Change summary

internal/tui/components/chat/messages/renderer.go | 22 +++++++++++++---
1 file changed, 17 insertions(+), 5 deletions(-)

Detailed changes

internal/tui/components/chat/messages/renderer.go 🔗

@@ -257,6 +257,7 @@ type editRenderer struct {
 
 // Render displays the edited file with a formatted diff of changes
 func (er editRenderer) Render(v *toolCallCmp) string {
+	t := styles.CurrentTheme()
 	var params tools.EditParams
 	var args []string
 	if err := er.unmarshalParams(v.call.Input, &params); err == nil {
@@ -277,7 +278,18 @@ func (er editRenderer) Render(v *toolCallCmp) string {
 		if v.textWidth() > 120 {
 			formatter = formatter.Split()
 		}
-		return formatter.String()
+		// add a messagfe to the bottom if the content was truncated
+		formatted := formatter.String()
+		if lipgloss.Height(formatted) > responseContextHeight {
+			contentLines := strings.Split(formatted, "\n")
+			truncateMessage := t.S().Muted.
+				Background(t.BgBaseLighter).
+				PaddingLeft(2).
+				Width(v.textWidth() - 4).
+				Render(fmt.Sprintf("… (%d lines)", len(contentLines)-responseContextHeight))
+			formatted = strings.Join(contentLines[:responseContextHeight], "\n") + "\n" + truncateMessage
+		}
+		return formatted
 	})
 }
 
@@ -556,7 +568,7 @@ func renderParamList(nested bool, paramsWidth int, params ...string) string {
 	}
 	mainParam := params[0]
 	if len(mainParam) > paramsWidth {
-		mainParam = mainParam[:paramsWidth-3] + "..."
+		mainParam = mainParam[:paramsWidth-3] + "…"
 	}
 
 	if len(params) == 1 {
@@ -596,9 +608,9 @@ func renderParamList(nested bool, paramsWidth int, params ...string) string {
 	}
 
 	if nested {
-		return t.S().Muted.Render(ansi.Truncate(mainParam, paramsWidth, "..."))
+		return t.S().Muted.Render(ansi.Truncate(mainParam, paramsWidth, "…"))
 	}
-	return t.S().Subtle.Render(ansi.Truncate(mainParam, paramsWidth, "..."))
+	return t.S().Subtle.Render(ansi.Truncate(mainParam, paramsWidth, "…"))
 }
 
 // earlyState returns immediately‑rendered error/cancelled/ongoing states.
@@ -651,7 +663,7 @@ func renderPlainContent(v *toolCallCmp, content string) string {
 		out = append(out, t.S().Muted.
 			Background(t.BgBaseLighter).
 			Width(width).
-			Render(fmt.Sprintf("... (%d lines)", len(lines)-responseContextHeight)))
+			Render(fmt.Sprintf("… (%d lines)", len(lines)-responseContextHeight)))
 	}
 	return strings.Join(out, "\n")
 }