@@ -119,11 +119,11 @@ func (m *messageListCmp) handleMessageEvent(event pubsub.Event[message.Message])
119119 m.handleChildSession(event)
120120 return nil
121121 }
122−
122+
123123 if m.messageExists(event.Payload.ID) {
124124 return nil
125125 }
126−
126+
127127 return m.handleNewMessage(event.Payload)
128128 case pubsub.UpdatedEvent:
129129 return m.handleUpdateAssistantMessage(event.Payload)
@@ -192,22 +192,22 @@ func (m *messageListCmp) findToolCallByID(items []util.Model, toolCallID string)
192192func (m *messageListCmp) handleUpdateAssistantMessage(msg message.Message) tea.Cmd {
193193 var cmds []tea.Cmd
194194 items := m.listCmp.Items()
195−
195+
196196 // Find existing assistant message and tool calls for this message
197197 assistantIndex, existingToolCalls := m.findAssistantMessageAndToolCalls(items, msg.ID)
198−
198+
199199 logging.Info("Update Assistant Message", "msg", msg, "assistantMessageInx", assistantIndex, "toolCalls", existingToolCalls)
200−
200+
201201 // Handle assistant message content
202202 if cmd := m.updateAssistantMessageContent(msg, assistantIndex); cmd != nil {
203203 cmds = append(cmds, cmd)
204204 }
205−
205+
206206 // Handle tool calls
207207 if cmd := m.updateToolCalls(msg, existingToolCalls); cmd != nil {
208208 cmds = append(cmds, cmd)
209209 }
210−
210+
211211 return tea.Batch(cmds...)
212212}
213213
@@ -215,7 +215,7 @@ func (m *messageListCmp) handleUpdateAssistantMessage(msg message.Message) tea.C
215215func (m *messageListCmp) findAssistantMessageAndToolCalls(items []util.Model, messageID string) (int, map[int]messages.ToolCallCmp) {
216216 assistantIndex := NotFound
217217 toolCalls := make(map[int]messages.ToolCallCmp)
218−
218+
219219 // Search backwards as messages are more likely to be at the end
220220 for i := len(items) - 1; i >= 0; i-- {
221221 item := items[i]
@@ -229,7 +229,7 @@ func (m *messageListCmp) findAssistantMessageAndToolCalls(items []util.Model, me
229229 }
230230 }
231231 }
232−
232+
233233 return assistantIndex, toolCalls
234234}
235235
@@ -238,10 +238,10 @@ func (m *messageListCmp) updateAssistantMessageContent(msg message.Message, assi
238238 if assistantIndex == NotFound {
239239 return nil
240240 }
241−
241+
242242 shouldShowMessage := m.shouldShowAssistantMessage(msg)
243243 hasToolCallsOnly := len(msg.ToolCalls()) > 0 && msg.Content().Text == ""
244−
244+
245245 if shouldShowMessage {
246246 m.listCmp.UpdateItem(
247247 assistantIndex,
@@ -253,7 +253,7 @@ func (m *messageListCmp) updateAssistantMessageContent(msg message.Message, assi
253253 } else if hasToolCallsOnly {
254254 m.listCmp.DeleteItem(assistantIndex)
255255 }
256−
256+
257257 return nil
258258}
259259
@@ -265,13 +265,13 @@ func (m *messageListCmp) shouldShowAssistantMessage(msg message.Message) bool {
265265// updateToolCalls handles updates to tool calls, updating existing ones and adding new ones.
266266func (m *messageListCmp) updateToolCalls(msg message.Message, existingToolCalls map[int]messages.ToolCallCmp) tea.Cmd {
267267 var cmds []tea.Cmd
268−
268+
269269 for _, tc := range msg.ToolCalls() {
270270 if cmd := m.updateOrAddToolCall(tc, existingToolCalls, msg.ID); cmd != nil {
271271 cmds = append(cmds, cmd)
272272 }
273273 }
274−
274+
275275 return tea.Batch(cmds...)
276276}
277277
@@ -285,7 +285,7 @@ func (m *messageListCmp) updateOrAddToolCall(tc message.ToolCall, existingToolCa
285285 return nil
286286 }
287287 }
288−
288+
289289 // Add new tool call if not found
290290 return m.listCmp.AppendItem(messages.NewToolCallCmp(messageID, tc))
291291}
@@ -293,7 +293,7 @@ func (m *messageListCmp) updateOrAddToolCall(tc message.ToolCall, existingToolCa
293293// handleNewAssistantMessage processes new assistant messages and their tool calls.
294294func (m *messageListCmp) handleNewAssistantMessage(msg message.Message) tea.Cmd {
295295 var cmds []tea.Cmd
296−
296+
297297 // Add assistant message if it should be displayed
298298 if m.shouldShowAssistantMessage(msg) {
299299 cmd := m.listCmp.AppendItem(
@@ -304,13 +304,13 @@ func (m *messageListCmp) handleNewAssistantMessage(msg message.Message) tea.Cmd
304304 )
305305 cmds = append(cmds, cmd)
306306 }
307−
307+
308308 // Add tool calls
309309 for _, tc := range msg.ToolCalls() {
310310 cmd := m.listCmp.AppendItem(messages.NewToolCallCmp(msg.ID, tc))
311311 cmds = append(cmds, cmd)
312312 }
313−
313+
314314 return tea.Batch(cmds...)
315315}
316316
@@ -319,26 +319,26 @@ func (m *messageListCmp) SetSession(session session.Session) tea.Cmd {
319319 if m.session.ID == session.ID {
320320 return nil
321321 }
322−
322+
323323 m.session = session
324324 sessionMessages, err := m.app.Messages.List(context.Background(), session.ID)
325325 if err != nil {
326326 return util.ReportError(err)
327327 }
328−
328+
329329 if len(sessionMessages) == 0 {
330330 return m.listCmp.SetItems([]util.Model{})
331331 }
332−
332+
333333 // Initialize with first message timestamp
334334 m.lastUserMessageTime = sessionMessages[0].CreatedAt
335−
335+
336336 // Build tool result map for efficient lookup
337337 toolResultMap := m.buildToolResultMap(sessionMessages)
338−
338+
339339 // Convert messages to UI components
340340 uiMessages := m.convertMessagesToUI(sessionMessages, toolResultMap)
341−
341+
342342 return m.listCmp.SetItems(uiMessages)
343343}
344344
@@ -356,7 +356,7 @@ func (m *messageListCmp) buildToolResultMap(messages []message.Message) map[stri
356356// convertMessagesToUI converts database messages to UI components.
357357func (m *messageListCmp) convertMessagesToUI(sessionMessages []message.Message, toolResultMap map[string]message.ToolResult) []util.Model {
358358 uiMessages := make([]util.Model, 0)
359−
359+
360360 for _, msg := range sessionMessages {
361361 switch msg.Role {
362362 case message.User:
@@ -366,14 +366,14 @@ func (m *messageListCmp) convertMessagesToUI(sessionMessages []message.Message,
366366 uiMessages = append(uiMessages, m.convertAssistantMessage(msg, toolResultMap)...)
367367 }
368368 }
369−
369+
370370 return uiMessages
371371}
372372
373373// convertAssistantMessage converts an assistant message and its tool calls to UI components.
374374func (m *messageListCmp) convertAssistantMessage(msg message.Message, toolResultMap map[string]message.ToolResult) []util.Model {
375375 var uiMessages []util.Model
376−
376+
377377 // Add assistant message if it should be displayed
378378 if m.shouldShowAssistantMessage(msg) {
379379 uiMessages = append(
@@ -384,30 +384,30 @@ func (m *messageListCmp) convertAssistantMessage(msg message.Message, toolResult
384384 ),
385385 )
386386 }
387−
387+
388388 // Add tool calls with their results and status
389389 for _, tc := range msg.ToolCalls() {
390390 options := m.buildToolCallOptions(tc, msg, toolResultMap)
391391 uiMessages = append(uiMessages, messages.NewToolCallCmp(msg.ID, tc, options...))
392392 }
393−
393+
394394 return uiMessages
395395}
396396
397397// buildToolCallOptions creates options for tool call components based on results and status.
398398func (m *messageListCmp) buildToolCallOptions(tc message.ToolCall, msg message.Message, toolResultMap map[string]message.ToolResult) []messages.ToolCallOption {
399399 var options []messages.ToolCallOption
400−
400+
401401 // Add tool result if available
402402 if tr, ok := toolResultMap[tc.ID]; ok {
403403 options = append(options, messages.WithToolCallResult(tr))
404404 }
405−
405+
406406 // Add cancelled status if applicable
407407 if msg.FinishPart() != nil && msg.FinishPart().Reason == message.FinishReasonCanceled {
408408 options = append(options, messages.WithToolCallCancelled())
409409 }
410−
410+
411411 return options
412412}
413413