@@ -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,30 +192,30 @@ 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
214214// findAssistantMessageAndToolCalls locates the assistant message and its tool calls.
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,15 +285,15 @@ 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}
292292
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
0 commit comments