From efea6e0a7b48b19318fd3fc94b6408ae0f35c6d4 Mon Sep 17 00:00:00 2001 From: AUTHENSOR Date: Wed, 16 Sep 2026 13:35:15 -0500 Subject: [PATCH] Enforce user-role canonicalization on runner inbound messages (fixes #7142) Apply the same forced-user rule the A2A converter already uses to Runner inbound new_message content: a caller-supplied role must not survive into the provider call, and session-restore must not accept arbitrary authors that bypass fencing. --- src/google/adk/runners.py | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/google/adk/runners.py b/src/google/adk/runners.py index 55f2616655..ec014c4c85 100644 --- a/src/google/adk/runners.py +++ b/src/google/adk/runners.py @@ -1081,7 +1081,11 @@ async def run_async( """ run_config = run_config or RunConfig() - if new_message and not new_message.role: + if new_message: + # Inbound caller content is user-authored regardless of transport; the + # A2A request converter already canonicalizes roles this way. A + # caller-supplied role ('model', 'system', ...) must not survive into + # session history or provider requests. new_message.role = 'user' from .agents.llm_agent import LlmAgent