@@ -7,6 +7,7 @@ import (
9 "github.com/charmbracelet/lipgloss/v2"
9 "github.com/charmbracelet/lipgloss/v2"
10+ "github.com/charmbracelet/lipgloss/v2/tree"
10 "github.com/charmbracelet/x/ansi"
11 "github.com/charmbracelet/x/ansi"
11 "github.com/opencode-ai/opencode/internal/config"
12 "github.com/opencode-ai/opencode/internal/config"
12 "github.com/opencode-ai/opencode/internal/diff"
13 "github.com/opencode-ai/opencode/internal/diff"
@@ -93,7 +94,7 @@ func (pb *paramBuilder) build() []string {
93func (br baseRenderer) renderWithParams(v *toolCallCmp, toolName string, args []string, contentRenderer func() string) string {
94func (br baseRenderer) renderWithParams(v *toolCallCmp, toolName string, args []string, contentRenderer func() string) string {
94 width := v.textWidth()
95 width := v.textWidth()
95 if v.isNested {
96 if v.isNested {
96− width -= 3 // Adjust for nested tool call indentation
97+ width -= 4 // Adjust for nested tool call indentation
98 header := makeHeader(toolName, width, args...)
99 header := makeHeader(toolName, width, args...)
99 if v.isNested {
100 if v.isNested {
@@ -495,11 +496,15 @@ func (tr agentRenderer) Render(v *toolCallCmp) string {
495 args := newParamBuilder().addMain(prompt).build()
496 args := newParamBuilder().addMain(prompt).build()
497 header := makeHeader("Task", v.textWidth(), args...)
498 header := makeHeader("Task", v.textWidth(), args...)
498− parts := []string{header}
499+ t := tree.Root(header)
499 for _, call := range v.nestedToolCalls {
501 for _, call := range v.nestedToolCalls {
500− parts = append(parts, call.View())
502+ t.Child(call.View())
506+ t.Enumerator(tree.RoundedEnumerator).String(),
503 if v.result.ToolCallID == "" {
508 if v.result.ToolCallID == "" {
504 v.spinning = true
509 v.spinning = true
505 parts = append(parts, v.anim.View())
510 parts = append(parts, v.anim.View())