436e5a9cb5
Consolidates 5 follow-up PRs onto the a2a-work branch: 1. Reply-capture fix (#56437): adapter.send() now only resolves the blocked RPC Future when metadata['notify'] is True (the gateway's final-reply marker). Interim sends no longer short-circuit the response. Also accepts **kwargs in connect() for reconnect compat. 2. Slash command passthrough (#53743): wrap_inbound() passes /-prefixed text through unwrapped so the gateway command processor sees it. Fixes /sethome deadlock during A2A onboarding. Documented security trade-off (bearer auth at network layer compensates). 3. Routable URL in Agent Card (#53736): _build_card() now derives URL from A2A_PUBLIC_URL env > X-Forwarded-Host/Host header > bind host. Fixes k8s bug where Agent Card advertised 0.0.0.0. 4. contextId multi-turn memory (#53756): _handle_inbound_task() now checks top-level params.contextId first (A2A spec), falls back to params.message.contextId (legacy). Outbound a2a_call also sends contextId at both top-level and inside message. 5. Type checker fixes (#53759): TypedDict for _SCHEMAS, _FunctionSchema, _ToolSchema. Removes str() band-aid casts. All 45 tests pass including new tests for each fix. Zero core files modified — only plugins/platforms/a2a/ and tests/. Credits: @davidrobertson (#56437), @knoal (#53736, #53743, #53756, #53759), @kuangmi-bit (slash command bug report), @gfdsa (k8s URL bug report), @shivasymbl (#45996 userContext OBO).