a2aproject / a2aproject/a2a-inspector
Message-kind responses with data parts are not rendered in chat
- Vorherrschende Sprache
- TypeScript
- Sterne
- 490
- Forks
- 152
- PR-Merge-Kennzahlen
- Keine gemergten PRs in 30 T.
Beschreibung
## Summary
The chat UI does not render agent responses when the response is a `message`-kind event containing `data` parts (structured JSON). The message is received by the inspector but nothing is displayed.
## Root Cause
In `frontend/src/script.ts`, the `case 'message'` handler inside the `socket.on('agent_response', ...)` listener only looks for `text` parts:
```typescript
const textPart = event.parts?.find(p => p.text);
if (textPart && textPart.text) {
// render text
}
```
If all parts are `data` parts (i.e. `kind: 'data'`, `data: {...}`), `textPart` is `undefined` and nothing is rendered — the message arrives but is silently dropped in the UI.
The `processPart` helper function already handles `data` parts correctly (renders as formatted `
` JSON), but it is only called in the `task`, `status-update`, and `artifact-update` cases — not in the `message` case.
## Steps to Reproduce
1. Connect the inspector to an A2A v1.0 agent that returns an **immediate Message response** (i.e. uses the synchronous workflow — enqueues a `Message` object rather than a `Task` with artifacts)
2. Send any message
3. The agent's response arrives (visible in the Debug Console) but the chat window remains empty
## Expected Behaviour
Structured data returned in a `message`-kind response should be rendered as formatted JSON in the chat window, consistent with how `data` parts are rendered in `artifact-update` responses.
## Proposed Fix
Replace the text-only lookup with a loop over all parts using the existing `processPart` helper:
```typescript
case 'message': {
const allContent: string[] = [];
event.parts?.forEach(p => {
const content = processPart(p);
if (content) allContent.push(content);
});
if (allContent.length > 0) {
const combinedContent = allContent.join('');
const messageHtml = ` ${combinedContent}`;
appendMessage('agent', messageHtml, displayMessageId, true, validationErrors);
}
break;
}
```
This renders `text`, `data`, and `file` parts in message responses using the same logic already used for artifacts.
## Context
Discovered while validating a Google Maps A2A v1.0 agent (`a2a-sdk` based) that uses the immediate Message response pattern for synchronous skill calls.
Beitragsleitfaden
Bewertung
Dieses Issue wurde noch nicht bewertet.