From 6381e32acd1c8d35525dcef73f5d5cee2c845d8b Mon Sep 17 00:00:00 2001 From: ciregenz Date: Mon, 23 Mar 2026 18:48:05 -0700 Subject: [PATCH] [eric] add back browser agent cancel_event from haik's branch --- backend/apps/agents/browser_agent.py | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/backend/apps/agents/browser_agent.py b/backend/apps/agents/browser_agent.py index d48bb70c..1056c4f1 100644 --- a/backend/apps/agents/browser_agent.py +++ b/backend/apps/agents/browser_agent.py @@ -304,6 +304,7 @@ async def run_browser_agent( _browser_perms = load_builtin_permissions() session_id = uuid4().hex + cancel_event = asyncio.Event() session = AgentSession( id=session_id, name=f"Browser Agent", @@ -315,6 +316,7 @@ async def run_browser_agent( system_prompt=SYSTEM_PROMPT, parent_session_id=parent_session_id, ) + session._cancel_event = cancel_event agent_manager.sessions[session_id] = session await ws_manager.send_to_session(session_id, "agent:status", { @@ -355,6 +357,9 @@ async def run_browser_agent( try: for turn in range(MAX_TURNS): + if cancel_event.is_set(): + break + if _use_openai_client: # OpenAI-compatible format (9Router) import json as _json @@ -451,7 +456,12 @@ async def run_browser_agent( break tool_results = [] + cancelled = False for tu in tool_uses: + if cancel_event.is_set(): + cancelled = True + break + policy = _browser_perms.get(tu.name, "always_allow") if policy == "deny": @@ -539,6 +549,16 @@ async def run_browser_agent( else: messages.append({"role": "user", "content": tool_results}) + if cancelled: + break + + if cancel_event.is_set(): + session.status = "stopped" + await ws_manager.send_to_session(session_id, "agent:status", { + "session_id": session_id, + "status": "stopped", + }) + summary_parts = text_parts if text_parts else ["Task completed."] summary = "\n".join(summary_parts)