diff --git a/internal/tui/components/chat/chat.go b/internal/tui/components/chat/chat.go index 0e6a95937476de9f33b1c5c0dd15e0489c645c43..71f6e1e66ed7d6d1ad80486c1017d02af14b11f4 100644 --- a/internal/tui/components/chat/chat.go +++ b/internal/tui/components/chat/chat.go @@ -337,7 +337,7 @@ func (m *messageListCmp) updateToolCalls(msg message.Message, existingToolCalls var cmds []tea.Cmd for _, tc := range msg.ToolCalls() { - if cmd := m.updateOrAddToolCall(tc, existingToolCalls, msg.ID); cmd != nil { + if cmd := m.updateOrAddToolCall(msg, tc, existingToolCalls); cmd != nil { cmds = append(cmds, cmd) } } @@ -346,18 +346,21 @@ func (m *messageListCmp) updateToolCalls(msg message.Message, existingToolCalls } // updateOrAddToolCall updates an existing tool call or adds a new one. -func (m *messageListCmp) updateOrAddToolCall(tc message.ToolCall, existingToolCalls map[int]messages.ToolCallCmp, messageID string) tea.Cmd { +func (m *messageListCmp) updateOrAddToolCall(msg message.Message, tc message.ToolCall, existingToolCalls map[int]messages.ToolCallCmp) tea.Cmd { // Try to find existing tool call for index, existingTC := range existingToolCalls { if tc.ID == existingTC.GetToolCall().ID { existingTC.SetToolCall(tc) + if msg.FinishPart() != nil && msg.FinishPart().Reason == message.FinishReasonCanceled { + existingTC.SetCancelled() + } m.listCmp.UpdateItem(index, existingTC) return nil } } // Add new tool call if not found - return m.listCmp.AppendItem(messages.NewToolCallCmp(messageID, tc)) + return m.listCmp.AppendItem(messages.NewToolCallCmp(msg.ID, tc)) } // handleNewAssistantMessage processes new assistant messages and their tool calls.