@@ -35,13 +35,14 @@ type GlobToolRenderContext struct{}
3535
3636// RenderTool implements the [ToolRenderer] interface.
3737func (g *GlobToolRenderContext) RenderTool(sty *styles.Styles, width int, opts *ToolRenderOpts) string {
38+ cappedWidth := cappedMessageWidth(width)
3839 if opts.IsPending() {
3940 return pendingTool(sty, "Glob", opts.Anim)
4041 }
4142
4243 var params tools.GlobParams
4344 if err := json.Unmarshal([]byte(opts.ToolCall.Input), ¶ms); err != nil {
44− return toolErrorContent(sty, &message.ToolResult{Content: "Invalid parameters"}, width)
45+ return toolErrorContent(sty, &message.ToolResult{Content: "Invalid parameters"}, cappedWidth)
4546 }
4647
4748 toolParams := []string{params.Pattern}
@@ -49,12 +50,12 @@ func (g *GlobToolRenderContext) RenderTool(sty *styles.Styles, width int, opts *
4950 toolParams = append(toolParams, "path", params.Path)
5051 }
5152
52− header := toolHeader(sty, opts.Status, "Glob", width, opts.Compact, toolParams...)
53+ header := toolHeader(sty, opts.Status, "Glob", cappedWidth, opts.Compact, toolParams...)
5354 if opts.Compact {
5455 return header
5556 }
5657
57− if earlyState, ok := toolEarlyStateContent(sty, opts, width); ok {
58+ if earlyState, ok := toolEarlyStateContent(sty, opts, cappedWidth); ok {
5859 return joinToolParts(header, earlyState)
5960 }
6061
@@ -62,7 +63,7 @@ func (g *GlobToolRenderContext) RenderTool(sty *styles.Styles, width int, opts *
6263 return header
6364 }
6465
65− bodyWidth := width - toolBodyLeftPaddingTotal
66+ bodyWidth := cappedWidth - toolBodyLeftPaddingTotal
6667 body := sty.Tool.Body.Render(toolOutputPlainContent(sty, opts.Result.Content, bodyWidth, opts.ExpandedContent))
6768 return joinToolParts(header, body)
6869}
@@ -93,13 +94,14 @@ type GrepToolRenderContext struct{}
9394
9495// RenderTool implements the [ToolRenderer] interface.
9596func (g *GrepToolRenderContext) RenderTool(sty *styles.Styles, width int, opts *ToolRenderOpts) string {
97+ cappedWidth := cappedMessageWidth(width)
9698 if opts.IsPending() {
9799 return pendingTool(sty, "Grep", opts.Anim)
98100 }
99101
100102 var params tools.GrepParams
101103 if err := json.Unmarshal([]byte(opts.ToolCall.Input), ¶ms); err != nil {
102− return toolErrorContent(sty, &message.ToolResult{Content: "Invalid parameters"}, width)
104+ return toolErrorContent(sty, &message.ToolResult{Content: "Invalid parameters"}, cappedWidth)
103105 }
104106
105107 toolParams := []string{params.Pattern}
@@ -113,12 +115,12 @@ func (g *GrepToolRenderContext) RenderTool(sty *styles.Styles, width int, opts *
113115 toolParams = append(toolParams, "literal", "true")
114116 }
115117
116− header := toolHeader(sty, opts.Status, "Grep", width, opts.Compact, toolParams...)
118+ header := toolHeader(sty, opts.Status, "Grep", cappedWidth, opts.Compact, toolParams...)
117119 if opts.Compact {
118120 return header
119121 }
120122
121− if earlyState, ok := toolEarlyStateContent(sty, opts, width); ok {
123+ if earlyState, ok := toolEarlyStateContent(sty, opts, cappedWidth); ok {
122124 return joinToolParts(header, earlyState)
123125 }
124126
@@ -126,7 +128,7 @@ func (g *GrepToolRenderContext) RenderTool(sty *styles.Styles, width int, opts *
126128 return header
127129 }
128130
129− bodyWidth := width - toolBodyLeftPaddingTotal
131+ bodyWidth := cappedWidth - toolBodyLeftPaddingTotal
130132 body := sty.Tool.Body.Render(toolOutputPlainContent(sty, opts.Result.Content, bodyWidth, opts.ExpandedContent))
131133 return joinToolParts(header, body)
132134}
@@ -157,13 +159,14 @@ type LSToolRenderContext struct{}
157159
158160// RenderTool implements the [ToolRenderer] interface.
159161func (l *LSToolRenderContext) RenderTool(sty *styles.Styles, width int, opts *ToolRenderOpts) string {
162+ cappedWidth := cappedMessageWidth(width)
160163 if opts.IsPending() {
161164 return pendingTool(sty, "List", opts.Anim)
162165 }
163166
164167 var params tools.LSParams
165168 if err := json.Unmarshal([]byte(opts.ToolCall.Input), ¶ms); err != nil {
166− return toolErrorContent(sty, &message.ToolResult{Content: "Invalid parameters"}, width)
169+ return toolErrorContent(sty, &message.ToolResult{Content: "Invalid parameters"}, cappedWidth)
167170 }
168171
169172 path := params.Path
@@ -172,12 +175,12 @@ func (l *LSToolRenderContext) RenderTool(sty *styles.Styles, width int, opts *To
172175 }
173176 path = fsext.PrettyPath(path)
174177
175− header := toolHeader(sty, opts.Status, "List", width, opts.Compact, path)
178+ header := toolHeader(sty, opts.Status, "List", cappedWidth, opts.Compact, path)
176179 if opts.Compact {
177180 return header
178181 }
179182
180− if earlyState, ok := toolEarlyStateContent(sty, opts, width); ok {
183+ if earlyState, ok := toolEarlyStateContent(sty, opts, cappedWidth); ok {
181184 return joinToolParts(header, earlyState)
182185 }
183186
@@ -185,7 +188,7 @@ func (l *LSToolRenderContext) RenderTool(sty *styles.Styles, width int, opts *To
185188 return header
186189 }
187190
188− bodyWidth := width - toolBodyLeftPaddingTotal
191+ bodyWidth := cappedWidth - toolBodyLeftPaddingTotal
189192 body := sty.Tool.Body.Render(toolOutputPlainContent(sty, opts.Result.Content, bodyWidth, opts.ExpandedContent))
190193 return joinToolParts(header, body)
191194}
@@ -216,13 +219,14 @@ type SourcegraphToolRenderContext struct{}
216219
217220// RenderTool implements the [ToolRenderer] interface.
218221func (s *SourcegraphToolRenderContext) RenderTool(sty *styles.Styles, width int, opts *ToolRenderOpts) string {
222+ cappedWidth := cappedMessageWidth(width)
219223 if opts.IsPending() {
220224 return pendingTool(sty, "Sourcegraph", opts.Anim)
221225 }
222226
223227 var params tools.SourcegraphParams
224228 if err := json.Unmarshal([]byte(opts.ToolCall.Input), ¶ms); err != nil {
225− return toolErrorContent(sty, &message.ToolResult{Content: "Invalid parameters"}, width)
229+ return toolErrorContent(sty, &message.ToolResult{Content: "Invalid parameters"}, cappedWidth)
226230 }
227231
228232 toolParams := []string{params.Query}
@@ -233,12 +237,12 @@ func (s *SourcegraphToolRenderContext) RenderTool(sty *styles.Styles, width int,
233237 toolParams = append(toolParams, "context", formatNonZero(params.ContextWindow))
234238 }
235239
236− header := toolHeader(sty, opts.Status, "Sourcegraph", width, opts.Compact, toolParams...)
240+ header := toolHeader(sty, opts.Status, "Sourcegraph", cappedWidth, opts.Compact, toolParams...)
237241 if opts.Compact {
238242 return header
239243 }
240244
241− if earlyState, ok := toolEarlyStateContent(sty, opts, width); ok {
245+ if earlyState, ok := toolEarlyStateContent(sty, opts, cappedWidth); ok {
242246 return joinToolParts(header, earlyState)
243247 }
244248
@@ -246,7 +250,7 @@ func (s *SourcegraphToolRenderContext) RenderTool(sty *styles.Styles, width int,
246250 return header
247251 }
248252
249− bodyWidth := width - toolBodyLeftPaddingTotal
253+ bodyWidth := cappedWidth - toolBodyLeftPaddingTotal
250254 body := sty.Tool.Body.Render(toolOutputPlainContent(sty, opts.Result.Content, bodyWidth, opts.ExpandedContent))
251255 return joinToolParts(header, body)
252256}