@@ -268,16 +268,24 @@ func (m *UI) Update(msg tea.Msg) (tea.Model, tea.Cmd) {
268268 switch m.state {
269269 case uiChat:
270270 if msg.Y <= 0 {
271− m.chat.ScrollBy(-1)
271+ if cmd := m.chat.ScrollBy(-1); cmd != nil {
272+ cmds = append(cmds, cmd)
273+ }
272274 if !m.chat.SelectedItemInView() {
273275 m.chat.SelectPrev()
274− m.chat.ScrollToSelected()
276+ if cmd := m.chat.ScrollToSelected(); cmd != nil {
277+ cmds = append(cmds, cmd)
278+ }
275279 }
276280 } else if msg.Y >= m.chat.Height()-1 {
277− m.chat.ScrollBy(1)
281+ if cmd := m.chat.ScrollBy(1); cmd != nil {
282+ cmds = append(cmds, cmd)
283+ }
278284 if !m.chat.SelectedItemInView() {
279285 m.chat.SelectNext()
280− m.chat.ScrollToSelected()
286+ if cmd := m.chat.ScrollToSelected(); cmd != nil {
287+ cmds = append(cmds, cmd)
288+ }
281289 }
282290 }
283291
@@ -302,16 +310,24 @@ func (m *UI) Update(msg tea.Msg) (tea.Model, tea.Cmd) {
302310 case uiChat:
303311 switch msg.Button {
304312 case tea.MouseWheelUp:
305− m.chat.ScrollBy(-5)
313+ if cmd := m.chat.ScrollBy(-5); cmd != nil {
314+ cmds = append(cmds, cmd)
315+ }
306316 if !m.chat.SelectedItemInView() {
307317 m.chat.SelectPrev()
308− m.chat.ScrollToSelected()
318+ if cmd := m.chat.ScrollToSelected(); cmd != nil {
319+ cmds = append(cmds, cmd)
320+ }
309321 }
310322 case tea.MouseWheelDown:
311− m.chat.ScrollBy(5)
323+ if cmd := m.chat.ScrollBy(5); cmd != nil {
324+ cmds = append(cmds, cmd)
325+ }
312326 if !m.chat.SelectedItemInView() {
313327 m.chat.SelectNext()
314− m.chat.ScrollToSelected()
328+ if cmd := m.chat.ScrollToSelected(); cmd != nil {
329+ cmds = append(cmds, cmd)
330+ }
315331 }
316332 }
317333 }
@@ -379,7 +395,9 @@ func (m *UI) setSessionMessages(msgs []message.Message) tea.Cmd {
379395 }
380396
381397 m.chat.SetMessages(items...)
382− m.chat.ScrollToBottom()
398+ if cmd := m.chat.ScrollToBottom(); cmd != nil {
399+ cmds = append(cmds, cmd)
400+ }
383401 m.chat.SelectLast()
384402 return tea.Batch(cmds...)
385403}
@@ -396,7 +414,9 @@ func (m *UI) appendSessionMessage(msg message.Message) tea.Cmd {
396414 }
397415 }
398416 m.chat.AppendMessages(items...)
399− m.chat.ScrollToBottom()
417+ if cmd := m.chat.ScrollToBottom(); cmd != nil {
418+ cmds = append(cmds, cmd)
419+ }
400420 return tea.Batch(cmds...)
401421}
402422
@@ -558,40 +578,64 @@ func (m *UI) handleKeyPressMsg(msg tea.KeyPressMsg) tea.Cmd {
558578 cmds = append(cmds, m.textarea.Focus())
559579 m.chat.Blur()
560580 case key.Matches(msg, m.keyMap.Chat.Up):
561− m.chat.ScrollBy(-1)
581+ if cmd := m.chat.ScrollBy(-1); cmd != nil {
582+ cmds = append(cmds, cmd)
583+ }
562584 if !m.chat.SelectedItemInView() {
563585 m.chat.SelectPrev()
564− m.chat.ScrollToSelected()
586+ if cmd := m.chat.ScrollToSelected(); cmd != nil {
587+ cmds = append(cmds, cmd)
588+ }
565589 }
566590 case key.Matches(msg, m.keyMap.Chat.Down):
567− m.chat.ScrollBy(1)
591+ if cmd := m.chat.ScrollBy(1); cmd != nil {
592+ cmds = append(cmds, cmd)
593+ }
568594 if !m.chat.SelectedItemInView() {
569595 m.chat.SelectNext()
570− m.chat.ScrollToSelected()
596+ if cmd := m.chat.ScrollToSelected(); cmd != nil {
597+ cmds = append(cmds, cmd)
598+ }
571599 }
572600 case key.Matches(msg, m.keyMap.Chat.UpOneItem):
573601 m.chat.SelectPrev()
574− m.chat.ScrollToSelected()
602+ if cmd := m.chat.ScrollToSelected(); cmd != nil {
603+ cmds = append(cmds, cmd)
604+ }
575605 case key.Matches(msg, m.keyMap.Chat.DownOneItem):
576606 m.chat.SelectNext()
577− m.chat.ScrollToSelected()
607+ if cmd := m.chat.ScrollToSelected(); cmd != nil {
608+ cmds = append(cmds, cmd)
609+ }
578610 case key.Matches(msg, m.keyMap.Chat.HalfPageUp):
579− m.chat.ScrollBy(-m.chat.Height() / 2)
611+ if cmd := m.chat.ScrollBy(-m.chat.Height() / 2); cmd != nil {
612+ cmds = append(cmds, cmd)
613+ }
580614 m.chat.SelectFirstInView()
581615 case key.Matches(msg, m.keyMap.Chat.HalfPageDown):
582− m.chat.ScrollBy(m.chat.Height() / 2)
616+ if cmd := m.chat.ScrollBy(m.chat.Height() / 2); cmd != nil {
617+ cmds = append(cmds, cmd)
618+ }
583619 m.chat.SelectLastInView()
584620 case key.Matches(msg, m.keyMap.Chat.PageUp):
585− m.chat.ScrollBy(-m.chat.Height())
621+ if cmd := m.chat.ScrollBy(-m.chat.Height()); cmd != nil {
622+ cmds = append(cmds, cmd)
623+ }
586624 m.chat.SelectFirstInView()
587625 case key.Matches(msg, m.keyMap.Chat.PageDown):
588− m.chat.ScrollBy(m.chat.Height())
626+ if cmd := m.chat.ScrollBy(m.chat.Height()); cmd != nil {
627+ cmds = append(cmds, cmd)
628+ }
589629 m.chat.SelectLastInView()
590630 case key.Matches(msg, m.keyMap.Chat.Home):
591− m.chat.ScrollToTop()
631+ if cmd := m.chat.ScrollToTop(); cmd != nil {
632+ cmds = append(cmds, cmd)
633+ }
592634 m.chat.SelectFirst()
593635 case key.Matches(msg, m.keyMap.Chat.End):
594− m.chat.ScrollToBottom()
636+ if cmd := m.chat.ScrollToBottom(); cmd != nil {
637+ cmds = append(cmds, cmd)
638+ }
595639 m.chat.SelectLast()
596640 default:
597641 handleGlobalKeys(msg)