From 91fc6377ecff3ac2df05e092e1c9c9ceed36bd44 Mon Sep 17 00:00:00 2001 From: haikdc Date: Thu, 2 Apr 2026 14:32:37 -0700 Subject: [PATCH] [Haik]: browser toolkit seems done, now gonna work on the rest of the browser stuff maybe? --- .../make_builtin_toolkit.py | 10 +++-- .../make_create_browser_agent_handler.py | 19 ++++++--- .../make_invoke_browser_agent_handler.py | 29 +++++++++++++ .../browser_toolkit/make_browser_toolkit.py | 42 +++++++++++++++++++ 4 files changed, 91 insertions(+), 9 deletions(-) create mode 100644 backend/apps/agents/HaikFix/tools/make_builtin_toolkit/open_swarm_toolkits/browser_toolkit/handlers/make_invoke_browser_agent_handler.py diff --git a/backend/apps/agents/HaikFix/tools/make_builtin_toolkit/make_builtin_toolkit.py b/backend/apps/agents/HaikFix/tools/make_builtin_toolkit/make_builtin_toolkit.py index 88c33d20..3587f3ea 100644 --- a/backend/apps/agents/HaikFix/tools/make_builtin_toolkit/make_builtin_toolkit.py +++ b/backend/apps/agents/HaikFix/tools/make_builtin_toolkit/make_builtin_toolkit.py @@ -1,10 +1,10 @@ # BUILTIN_TOOLKIT.py -from typing import Dict +from typing import Dict, Callable from backend.apps.agents.HaikFix.tools.shared_structs.Toolkit import Toolkit from backend.apps.agents.HaikFix.tools.make_builtin_toolkit.open_swarm_toolkits.agents_toolkit.make_agents_toolkit import make_agents_toolkit # TODO: add browser toolkit -# from backend.apps.agents.HaikFix.tools.make_builtin_toolkit.open_swarm_toolkits.browser_toolkit.make_browser_toolkit import make_browser_toolkit +from backend.apps.agents.HaikFix.tools.make_builtin_toolkit.open_swarm_toolkits.browser_toolkit.make_browser_toolkit import make_browser_toolkit from backend.apps.agents.HaikFix.tools.make_builtin_toolkit.pre_existing_toolkits.FILESYSTEM_TOOLKIT import FILESYSTEM_TOOLKIT from backend.apps.agents.HaikFix.tools.make_builtin_toolkit.pre_existing_toolkits.INTERACTION_TOOLKIT import INTERACTION_TOOLKIT @@ -14,12 +14,16 @@ from backend.apps.agents.HaikFix.tools.make_builtin_toolkit.pre_existing_toolkit from backend.apps.agents.HaikFix.tools.make_builtin_toolkit.pre_existing_toolkits.SYSTEM_TOOLKIT import SYSTEM_TOOLKIT from backend.apps.agents.HaikFix.Agent.Agent import Agent -def make_builtin_toolkit(parent: Agent, agent_registry: Dict[str, Agent]) -> Toolkit: +def make_builtin_toolkit( + parent: Agent, + agent_registry: Dict[str, Agent], +) -> Toolkit: return Toolkit( name="builtin", description="Builtin tools", nested_toolkits=[ make_agents_toolkit(parent, agent_registry), + make_browser_toolkit(parent), FILESYSTEM_TOOLKIT, INTERACTION_TOOLKIT, PLANNING_TOOLKIT, diff --git a/backend/apps/agents/HaikFix/tools/make_builtin_toolkit/open_swarm_toolkits/browser_toolkit/handlers/make_create_browser_agent_handler.py b/backend/apps/agents/HaikFix/tools/make_builtin_toolkit/open_swarm_toolkits/browser_toolkit/handlers/make_create_browser_agent_handler.py index 1d0a5898..9ac11457 100644 --- a/backend/apps/agents/HaikFix/tools/make_builtin_toolkit/open_swarm_toolkits/browser_toolkit/handlers/make_create_browser_agent_handler.py +++ b/backend/apps/agents/HaikFix/tools/make_builtin_toolkit/open_swarm_toolkits/browser_toolkit/handlers/make_create_browser_agent_handler.py @@ -1,7 +1,5 @@ import asyncio -import logging from typing import TypedDict -from typing_extensions import NotRequired from typeguard import typechecked from backend.apps.agents.HaikFix.Agent.shared_structs.Message.agent_outputs import ToolResponse @@ -9,26 +7,35 @@ from backend.apps.agents.HaikFix.tools.make_builtin_toolkit.open_swarm_toolkits. from backend.apps.agents.HaikFix.tools.make_builtin_toolkit.open_swarm_toolkits.browser_toolkit.handlers.utils.format_browser_result import format_browser_result from backend.apps.agents.HaikFix.Agent.Agent import Agent +# NOTE: Legacy dependancy. TODO: fix this shit cuh +from backend.apps.agents.browser.runner import _create_browser_card + class CreateBrowserAgentInput(TypedDict): task: str - url: NotRequired[str] @typechecked def make_create_browser_agent_handler( parent: Agent, - create_browser_card_fn, ): async def handler(args: CreateBrowserAgentInput) -> ToolResponse: task = args["task"] url = args.get("url", "") - browser_id = await create_browser_card_fn( + browser_id = await _create_browser_card( dashboard_id=parent.config.session_id or "", url=url, parent_session_id=parent.session_id, ) if not browser_id: - return {"content": [{"type": "text", "text": "Error: failed to create browser card"}], "is_error": True} + return { + "content": [ + { + "type": "text", + "text": "Error: failed to create browser agent", + }, + ], + "is_error": True, + } await asyncio.sleep(2.0) diff --git a/backend/apps/agents/HaikFix/tools/make_builtin_toolkit/open_swarm_toolkits/browser_toolkit/handlers/make_invoke_browser_agent_handler.py b/backend/apps/agents/HaikFix/tools/make_builtin_toolkit/open_swarm_toolkits/browser_toolkit/handlers/make_invoke_browser_agent_handler.py new file mode 100644 index 00000000..5c422c26 --- /dev/null +++ b/backend/apps/agents/HaikFix/tools/make_builtin_toolkit/open_swarm_toolkits/browser_toolkit/handlers/make_invoke_browser_agent_handler.py @@ -0,0 +1,29 @@ +from typing import TypedDict +from typeguard import typechecked + +from backend.apps.agents.HaikFix.Agent.shared_structs.Message.agent_outputs import ToolResponse +from backend.apps.agents.HaikFix.tools.make_builtin_toolkit.open_swarm_toolkits.browser_toolkit.handlers.utils.run_browser_loop import run_browser_loop +from backend.apps.agents.HaikFix.tools.make_builtin_toolkit.open_swarm_toolkits.browser_toolkit.handlers.utils.format_browser_result import format_browser_result +from backend.apps.agents.HaikFix.Agent.Agent import Agent + + +class InvokeBrowserAgentInput(TypedDict): + browser_id: str + task: str + + +@typechecked +def make_invoke_browser_agent_handler(parent: Agent): + async def handler(args: InvokeBrowserAgentInput) -> ToolResponse: + browser_id = args["browser_id"] + task = args["task"] + + result = await run_browser_loop( + task=task, + browser_id=browser_id, + model=parent.model, + ) + + return format_browser_result(result, browser_id) + + return handler \ No newline at end of file diff --git a/backend/apps/agents/HaikFix/tools/make_builtin_toolkit/open_swarm_toolkits/browser_toolkit/make_browser_toolkit.py b/backend/apps/agents/HaikFix/tools/make_builtin_toolkit/open_swarm_toolkits/browser_toolkit/make_browser_toolkit.py index e69de29b..94b882d3 100644 --- a/backend/apps/agents/HaikFix/tools/make_builtin_toolkit/open_swarm_toolkits/browser_toolkit/make_browser_toolkit.py +++ b/backend/apps/agents/HaikFix/tools/make_builtin_toolkit/open_swarm_toolkits/browser_toolkit/make_browser_toolkit.py @@ -0,0 +1,42 @@ +from backend.apps.agents.HaikFix.tools.shared_structs.Toolkit import Toolkit +from backend.apps.agents.HaikFix.tools.shared_structs.MCP_Tool import SDK_MCP_Tool +from backend.apps.agents.HaikFix.tools.make_builtin_toolkit.open_swarm_toolkits.browser_toolkit.handlers.make_create_browser_agent_handler import ( + make_create_browser_agent_handler, CreateBrowserAgentInput, +) +from backend.apps.agents.HaikFix.tools.make_builtin_toolkit.open_swarm_toolkits.browser_toolkit.handlers.make_invoke_browser_agent_handler import ( + make_invoke_browser_agent_handler, InvokeBrowserAgentInput, +) +from backend.apps.agents.HaikFix.Agent.Agent import Agent + + +def make_browser_toolkit(parent: Agent, create_browser_card_fn) -> Toolkit: + return Toolkit( + name="browser", + description="Tools for browser automation", + tools=[ + SDK_MCP_Tool( + name="CreateBrowserAgent", + description=( + "Create a new browser and run a task on it. A dedicated browser agent " + "will autonomously navigate, click, type, and return a summary plus screenshot." + ), + deferred=False, + permission="allow", + server_name="openswarm-browser", + input_schema=CreateBrowserAgentInput, + handler=make_create_browser_agent_handler(parent, create_browser_card_fn), + ), + SDK_MCP_Tool( + name="InvokeBrowserAgent", + description=( + "Run a task on an existing browser. The browser agent will autonomously " + "perform the task and return a summary plus screenshot." + ), + deferred=False, + permission="allow", + server_name="openswarm-browser", + input_schema=InvokeBrowserAgentInput, + handler=make_invoke_browser_agent_handler(parent), + ), + ], + ) \ No newline at end of file