micro--go-micro
6950870dd9
* a2a: conform to external A2A clients — well-known path + spec SSE events The A2A gateway interoperated go-micro-to-go-micro but a real external client (ADK, LangGraph, a2a-SDK) would not: - Discovery: served the Agent Card at /.well-known/agent.json, but A2A 0.3.0 discovers it at /.well-known/agent-card.json. Serve both, with agent-card.json canonical and agent.json a legacy alias — per-agent, per-skill, and at the single-agent top level. - message/stream emitted repeated full Task snapshots. External SSE clients parse by `kind` and stop on `final:true`; a Task snapshot has neither, so they never terminate. Emit spec-shaped TaskArtifactUpdate (append) chunks and close with a TaskStatusUpdate final:true. The non-streaming and resubscribe paths also close with a terminal marker. - A streaming error set both `result` and `error` in one JSON-RPC response (strict clients reject it). Emit a failed status-update instead — never result and error together. Tests assert the canonical card path, the status-update/artifact-update event shapes ending in final:true, and that no response carries both result and error. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01CmdEY7pYmV5zzwCjNJ4ykL * harness: update a2a-streaming to the spec-shaped stream events The A2A gateway now emits artifact-update deltas and a terminal status-update (final:true) instead of repeated full Task snapshots, so the conformance harness must reassemble the answer from the append artifact-update chunks and assert the final:true marker. This makes the harness a stronger spec check rather than a snapshot-shape check. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01CmdEY7pYmV5zzwCjNJ4ykL * agent: update a2a stream test to spec-shaped events TestA2AStreamUsesAgentChatPathWithTools decoded the last SSE event as a completed Task snapshot with artifacts. The gateway now closes the stream with a status-update (final:true) and carries the answer as append artifact-update deltas, so reassemble the answer from those deltas and assert the terminal completed status-update instead. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01CmdEY7pYmV5zzwCjNJ4ykL --------- Co-authored-by: Claude <noreply@anthropic.com>
Internal related things