fix: deduplicate tool calls in streaming by tracking IDs
Tool calls were being duplicated in the streaming footer when the same
tool call was received across multiple streaming chunks. This caused
spam where the same "(co is updating memory)" block appeared multiple
times.
Changes:
- Add uid=501(cameron) gid=20(staff) groups=20(staff),12(everyone),61(localaccounts),79(_appserverusr),80(admin),81(_appserveradm),701(com.apple.sharepoint.group.1),33(_appstore),98(_lpadmin),100(_lpoperator),204(_developer),250(_analyticsusers),395(com.apple.access_ftp),398(com.apple.access_screensharing),399(com.apple.access_ssh),400(com.apple.access_remote_ae) field to toolCalls array in currentStream state
- Track tool calls by ID and skip duplicates in handleStreamingChunk
- Use toolCall.id as React key instead of array index for stability
This ensures each unique tool call only appears once in the streaming UI.