Skip to content

Commit 264e49e

Browse files
authored
Merge pull request #1026 from dgageot/better-handoffs
Better handoffs
2 parents cae249e + a900099 commit 264e49e

4 files changed

Lines changed: 54 additions & 4 deletions

File tree

pkg/tui/components/tool/factory.go

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ import (
44
"github.com/docker/cagent/pkg/tools/builtin"
55
"github.com/docker/cagent/pkg/tui/components/tool/defaulttool"
66
"github.com/docker/cagent/pkg/tui/components/tool/editfile"
7+
"github.com/docker/cagent/pkg/tui/components/tool/handoff"
78
"github.com/docker/cagent/pkg/tui/components/tool/readfile"
89
"github.com/docker/cagent/pkg/tui/components/tool/shell"
910
"github.com/docker/cagent/pkg/tui/components/tool/todotool"
@@ -46,6 +47,7 @@ func newDefaultRegistry() *Registry {
4647
registry := NewRegistry()
4748

4849
registry.Register(builtin.ToolNameTransferTask, transfertask.New)
50+
registry.Register(builtin.ToolNameHandoff, handoff.New)
4951
registry.Register(builtin.ToolNameEditFile, editfile.New)
5052
registry.Register(builtin.ToolNameWriteFile, writefile.New)
5153
registry.Register(builtin.ToolNameReadFile, readfile.New)
Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,48 @@
1+
package handoff
2+
3+
import (
4+
"encoding/json"
5+
6+
tea "charm.land/bubbletea/v2"
7+
8+
"github.com/docker/cagent/pkg/tools/builtin"
9+
"github.com/docker/cagent/pkg/tui/core/layout"
10+
"github.com/docker/cagent/pkg/tui/service"
11+
"github.com/docker/cagent/pkg/tui/styles"
12+
"github.com/docker/cagent/pkg/tui/types"
13+
)
14+
15+
// Component is a specialized component for rendering handoff tool calls.
16+
type Component struct {
17+
message *types.Message
18+
}
19+
20+
func New(
21+
msg *types.Message,
22+
_ *service.SessionState,
23+
) layout.Model {
24+
return &Component{
25+
message: msg,
26+
}
27+
}
28+
29+
func (c *Component) SetSize(int, int) tea.Cmd {
30+
return nil
31+
}
32+
33+
func (c *Component) Init() tea.Cmd {
34+
return nil
35+
}
36+
37+
func (c *Component) Update(tea.Msg) (layout.Model, tea.Cmd) {
38+
return c, nil
39+
}
40+
41+
func (c *Component) View() string {
42+
var params builtin.HandoffArgs
43+
if err := json.Unmarshal([]byte(c.message.ToolCall.Function.Arguments), &params); err != nil {
44+
return "" // TODO: Partial tool call
45+
}
46+
47+
return styles.AgentBadgeStyle.Render("["+c.message.Sender+"]") + styles.MutedStyle.Render("hands off to") + styles.AgentBadgeStyle.Render("["+params.Agent+"]")
48+
}

pkg/tui/components/tool/transfertask/transfertask.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,7 @@ func (c *Component) View() string {
4444
return "" // TODO: Partial tool call
4545
}
4646

47-
badge := styles.TransferBadgeStyle.Render(c.message.Sender + " -> " + params.Agent + ": ")
47+
badge := styles.AgentBadgeStyle.Render("["+c.message.Sender+"]") + styles.MutedStyle.Render("transfers task to") + styles.AgentBadgeStyle.Render("["+params.Agent+"]"+":")
4848
content := styles.MutedStyle.Render(params.Task)
49-
return badge + "\n" + content
49+
return badge + "\n\n" + content
5050
}

pkg/tui/components/toolcommon/common.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,7 @@ func FormatToolResult(content string, width int) string {
3838
}
3939

4040
padding := styles.ToolCallResult.Padding().GetHorizontalPadding()
41-
availableWidth := max(width-2-padding, 10) // Minimum readable width
41+
availableWidth := max(width-5-padding, 10) // Minimum readable width
4242

4343
lines := wrapLines(formattedContent, availableWidth)
4444

@@ -51,7 +51,7 @@ func FormatToolResult(content string, width int) string {
5151

5252
trimmedContent := strings.Join(lines, "\n")
5353
if trimmedContent != "" {
54-
return "\n" + styles.ToolCallResult.Render(styles.ToolCallResultKey.Render("\n-> "+header+":")+"\n"+trimmedContent)
54+
return styles.ToolCallResult.Render(styles.ToolCallResultKey.Render("\n-> "+header+":") + "\n" + trimmedContent)
5555
}
5656

5757
return ""

0 commit comments

Comments
 (0)