From 98d12be667706c00eb031ebf2be3488d4e7e88ba Mon Sep 17 00:00:00 2001 From: llalitkumarrr Date: Wed, 17 Jun 2026 20:10:42 +0530 Subject: [PATCH 1/3] fix(runners): support message modification in workflows via before_run_callback Fixes a bug in `_run_node_async` where the return value of `before_run_callback` was being swallowed and discarded during workflow execution. Changes introduced: - Captures `corrected_user_message` from the callback response. - Updates `node_input` and `ic.user_content` to pass the modified message into the Workflow graph engine. - Pops the original un-sanitized user event from `ic.session.events` to prevent dirty duplicates in the conversation history before appending the modified event. --- src/google/adk/runners.py | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/src/google/adk/runners.py b/src/google/adk/runners.py index c85ac6ff94..c7d861a543 100644 --- a/src/google/adk/runners.py +++ b/src/google/adk/runners.py @@ -528,7 +528,18 @@ async def _run_node_async( yield user_event # Run before_run callbacks - await ic.plugin_manager.run_before_run_callback(invocation_context=ic) + corrected_user_message = await ic.plugin_manager.run_before_run_callback(invocation_context=ic) + if corrected_user_message is not None: + if isinstance(corrected_user_message, types.Content): + node_input = corrected_user_message + ic.user_content = corrected_user_message + if hasattr(ic.session, 'events') and len(ic.session.events) > 0: + ic.session.events.pop() + user_event = await self._append_user_event( + ic, corrected_user_message + ) + if yield_user_message and user_event: + yield user_event # 3. Start root node in background from .agents.base_agent import BaseAgent From 07a8d212f2a25b3ebc5967b50be04af73ba425d6 Mon Sep 17 00:00:00 2001 From: llalitkumarrr Date: Wed, 17 Jun 2026 20:20:52 +0530 Subject: [PATCH 2/3] Refactor line breaks for improved readability --- src/google/adk/runners.py | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/src/google/adk/runners.py b/src/google/adk/runners.py index c7d861a543..7c46b3cf3f 100644 --- a/src/google/adk/runners.py +++ b/src/google/adk/runners.py @@ -528,16 +528,16 @@ async def _run_node_async( yield user_event # Run before_run callbacks - corrected_user_message = await ic.plugin_manager.run_before_run_callback(invocation_context=ic) + corrected_user_message = await ic.plugin_manager.run_before_run_callback( + invocation_context=ic + ) if corrected_user_message is not None: if isinstance(corrected_user_message, types.Content): node_input = corrected_user_message ic.user_content = corrected_user_message if hasattr(ic.session, 'events') and len(ic.session.events) > 0: - ic.session.events.pop() - user_event = await self._append_user_event( - ic, corrected_user_message - ) + ic.session.events.pop() + user_event = await self._append_user_event(ic, corrected_user_message) if yield_user_message and user_event: yield user_event From 6ea267cb54e6a03b8fe8bb65353532091d632a31 Mon Sep 17 00:00:00 2001 From: llalitkumarrr Date: Wed, 17 Jun 2026 20:28:21 +0530 Subject: [PATCH 3/3] Update runners.py --- src/google/adk/runners.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/google/adk/runners.py b/src/google/adk/runners.py index 7c46b3cf3f..03d5198e98 100644 --- a/src/google/adk/runners.py +++ b/src/google/adk/runners.py @@ -529,7 +529,7 @@ async def _run_node_async( # Run before_run callbacks corrected_user_message = await ic.plugin_manager.run_before_run_callback( - invocation_context=ic + invocation_context=ic ) if corrected_user_message is not None: if isinstance(corrected_user_message, types.Content):