| 249 | } |
| 250 | |
| 251 | func extractText(event a2a.Event) string { |
| 252 | var parts a2a.ContentParts |
| 253 | |
| 254 | switch e := event.(type) { |
| 255 | case *a2a.TaskStatusUpdateEvent: |
| 256 | if e.Status.Message != nil { |
| 257 | parts = e.Status.Message.Parts |
| 258 | } |
| 259 | case *a2a.TaskArtifactUpdateEvent: |
| 260 | if e.Artifact != nil { |
| 261 | parts = e.Artifact.Parts |
| 262 | } |
| 263 | case *a2a.Message: |
| 264 | parts = e.Parts |
| 265 | case *a2a.Task: |
| 266 | if e.Status.Message != nil { |
| 267 | parts = e.Status.Message.Parts |
| 268 | } |
| 269 | } |
| 270 | |
| 271 | var sb strings.Builder |
| 272 | for _, part := range parts { |
| 273 | switch p := part.(type) { |
| 274 | case *a2a.TextPart: |
| 275 | sb.WriteString(p.Text) |
| 276 | case a2a.TextPart: |
| 277 | sb.WriteString(p.Text) |
| 278 | } |
| 279 | } |
| 280 | return sb.String() |
| 281 | } |
| 282 | |
| 283 | func sanitizeToolName(name string) string { |
| 284 | result := strings.Map(func(r rune) rune { |