File tree Expand file tree Collapse file tree
Expand file tree Collapse file tree Original file line number Diff line number Diff line change 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 )
Original file line number Diff line number Diff line change 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+ }
Original file line number Diff line number Diff 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}
Original file line number Diff line number Diff 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 ""
You can’t perform that action at this time.
0 commit comments