From 66e5d51dcf641a75ef833eea8d3000836f49755e Mon Sep 17 00:00:00 2001 From: linuztx Date: Thu, 26 Mar 2026 22:23:32 +0800 Subject: [PATCH] fix: stop typing indicator on agent error or generation failure --- .../monologue_end/_90_wa_typing_cleanup.py | 33 +++++++++++++++++++ 1 file changed, 33 insertions(+) create mode 100644 plugins/_whatsapp_integration/extensions/python/monologue_end/_90_wa_typing_cleanup.py diff --git a/plugins/_whatsapp_integration/extensions/python/monologue_end/_90_wa_typing_cleanup.py b/plugins/_whatsapp_integration/extensions/python/monologue_end/_90_wa_typing_cleanup.py new file mode 100644 index 000000000..3bf23e3b6 --- /dev/null +++ b/plugins/_whatsapp_integration/extensions/python/monologue_end/_90_wa_typing_cleanup.py @@ -0,0 +1,33 @@ +from helpers.extension import Extension +from helpers import plugins +from plugins._whatsapp_integration.helpers.handler import ( + CTX_WA_CHAT_ID, + CTX_WA_TYPING_ACTIVE, +) +from plugins._whatsapp_integration.helpers import bridge_manager, wa_client + + +PLUGIN_NAME = "_whatsapp_integration" + + +class WhatsAppTypingCleanup(Extension): + + async def execute(self, **kwargs): # type: ignore[override] + if not self.agent: + return + + context = self.agent.context + + if not context.data.get(CTX_WA_TYPING_ACTIVE): + return + + chat_id = context.data.get(CTX_WA_CHAT_ID, "") + if not chat_id: + return + + config = plugins.get_plugin_config(PLUGIN_NAME) or {} + port = int(config.get("bridge_port", 3100)) + base_url = bridge_manager.get_bridge_url(port) + + await wa_client.send_typing(base_url, chat_id, paused=True) + context.data[CTX_WA_TYPING_ACTIVE] = False