@@ -830,11 +830,14 @@ func (m *UI) loadNestedToolCalls(items []chat.MessageItem) {
830// if the message is a tool result it will update the corresponding tool call message
830// if the message is a tool result it will update the corresponding tool call message
831func (m *UI) appendSessionMessage(msg message.Message) tea.Cmd {
831func (m *UI) appendSessionMessage(msg message.Message) tea.Cmd {
832 var cmds []tea.Cmd
832 var cmds []tea.Cmd
833+ atBottom := m.chat.list.AtBottom()
833 existing := m.chat.MessageItem(msg.ID)
835 existing := m.chat.MessageItem(msg.ID)
834 if existing != nil {
836 if existing != nil {
835 // message already exists, skip
837 // message already exists, skip
836 return nil
838 return nil
838 switch msg.Role {
841 switch msg.Role {
839 case message.User:
842 case message.User:
840 m.lastUserMessageTime = msg.CreatedAt
843 m.lastUserMessageTime = msg.CreatedAt
@@ -860,14 +863,18 @@ func (m *UI) appendSessionMessage(msg message.Message) tea.Cmd {
862 m.chat.AppendMessages(items...)
865 m.chat.AppendMessages(items...)
863− if cmd := m.chat.ScrollToBottomAndAnimate(); cmd != nil {
867+ if cmd := m.chat.ScrollToBottomAndAnimate(); cmd != nil {
864− cmds = append(cmds, cmd)
868+ cmds = append(cmds, cmd)
866 if msg.FinishPart() != nil && msg.FinishPart().Reason == message.FinishReasonEndTurn {
871 if msg.FinishPart() != nil && msg.FinishPart().Reason == message.FinishReasonEndTurn {
867 infoItem := chat.NewAssistantInfoItem(m.com.Styles, &msg, time.Unix(m.lastUserMessageTime, 0))
872 infoItem := chat.NewAssistantInfoItem(m.com.Styles, &msg, time.Unix(m.lastUserMessageTime, 0))
868 m.chat.AppendMessages(infoItem)
873 m.chat.AppendMessages(infoItem)
869− if cmd := m.chat.ScrollToBottomAndAnimate(); cmd != nil {
875+ if cmd := m.chat.ScrollToBottomAndAnimate(); cmd != nil {
870− cmds = append(cmds, cmd)
876+ cmds = append(cmds, cmd)
873 case message.Tool:
880 case message.Tool:
@@ -879,6 +886,11 @@ func (m *UI) appendSessionMessage(msg message.Message) tea.Cmd {
880 if toolMsgItem, ok := toolItem.(chat.ToolMessageItem); ok {
887 if toolMsgItem, ok := toolItem.(chat.ToolMessageItem); ok {
881 toolMsgItem.SetResult(&tr)
888 toolMsgItem.SetResult(&tr)
890+ if cmd := m.chat.ScrollToBottomAndAnimate(); cmd != nil {
891+ cmds = append(cmds, cmd)