From 7eb6c7f4890da1cf0d1b0eae6dacca723861e7b8 Mon Sep 17 00:00:00 2001 From: kenyonxu Date: Wed, 20 May 2026 11:43:43 +0800 Subject: [PATCH] =?UTF-8?q?fix(acp):=20deliver=20final=5Fresponse=20after?= =?UTF-8?q?=20streaming=20=E2=80=94=20transform=5Fllm=5Foutput=20hook=20no?= =?UTF-8?q?w=20visible?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit When streaming is active, streamed_message=True skipped the final_response update, causing plugin hooks like transform_llm_output to be silently invisible. Remove the `not streamed_message` guard so the final response (possibly transformed by plugins) is always delivered to the ACP client. --- acp_adapter/server.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/acp_adapter/server.py b/acp_adapter/server.py index fbdee70527a..7910e2fd8fe 100644 --- a/acp_adapter/server.py +++ b/acp_adapter/server.py @@ -1534,7 +1534,9 @@ class HermesACPAgent(acp.Agent): ) except Exception: logger.debug("Failed to auto-title ACP session %s", session_id, exc_info=True) - if final_response and conn and not streamed_message: + if final_response and conn: + # Always deliver the final response — plugins may have transformed + # it after streaming finished (e.g. transform_llm_output hook). update = acp.update_agent_message_text(final_response) await conn.session_update(session_id, update)