From 607165b866b8fe2bdbaee89d2b202e05b4aa10be Mon Sep 17 00:00:00 2001 From: haikdc Date: Thu, 2 Apr 2026 15:13:14 -0700 Subject: [PATCH] [Haik]: refactored the browser toolkit into 2 sub toolkits (one for delegation and one for actions) --- .../make_builtin_toolkit.py | 5 +- .../handlers/browser_action_input_schemas.py | 31 +++++ .../handlers/make_browser_action_handler.py | 22 ++++ .../make_browser_actions_toolkit.py | 122 ++++++++++++++++++ .../make_create_browser_agent_handler.py | 4 +- .../make_invoke_browser_agent_handler.py | 0 .../handlers/utils/format_browser_result.py | 0 .../handlers/utils/run_browser_loop.py | 6 +- .../utils/temp_sub_utils/model_ids.py | 0 .../handlers/utils/temp_sub_utils/schemas.py | 0 .../make_browser_delegation_toolkit.py | 44 +++++++ .../browser_toolkit/make_browser_toolkit.py | 41 ++---- 12 files changed, 236 insertions(+), 39 deletions(-) create mode 100644 backend/apps/agents/HaikFix/tools/make_builtin_toolkit/open_swarm_toolkits/browser_toolkit/make_browser_actions_toolkit/handlers/browser_action_input_schemas.py create mode 100644 backend/apps/agents/HaikFix/tools/make_builtin_toolkit/open_swarm_toolkits/browser_toolkit/make_browser_actions_toolkit/handlers/make_browser_action_handler.py create mode 100644 backend/apps/agents/HaikFix/tools/make_builtin_toolkit/open_swarm_toolkits/browser_toolkit/make_browser_actions_toolkit/make_browser_actions_toolkit.py rename backend/apps/agents/HaikFix/tools/make_builtin_toolkit/open_swarm_toolkits/browser_toolkit/{ => make_browser_delegation_toolkit}/handlers/make_create_browser_agent_handler.py (84%) rename backend/apps/agents/HaikFix/tools/make_builtin_toolkit/open_swarm_toolkits/browser_toolkit/{ => make_browser_delegation_toolkit}/handlers/make_invoke_browser_agent_handler.py (100%) rename backend/apps/agents/HaikFix/tools/make_builtin_toolkit/open_swarm_toolkits/browser_toolkit/{ => make_browser_delegation_toolkit}/handlers/utils/format_browser_result.py (100%) rename backend/apps/agents/HaikFix/tools/make_builtin_toolkit/open_swarm_toolkits/browser_toolkit/{ => make_browser_delegation_toolkit}/handlers/utils/run_browser_loop.py (88%) rename backend/apps/agents/HaikFix/tools/make_builtin_toolkit/open_swarm_toolkits/browser_toolkit/{ => make_browser_delegation_toolkit}/handlers/utils/temp_sub_utils/model_ids.py (100%) rename backend/apps/agents/HaikFix/tools/make_builtin_toolkit/open_swarm_toolkits/browser_toolkit/{ => make_browser_delegation_toolkit}/handlers/utils/temp_sub_utils/schemas.py (100%) create mode 100644 backend/apps/agents/HaikFix/tools/make_builtin_toolkit/open_swarm_toolkits/browser_toolkit/make_browser_delegation_toolkit/make_browser_delegation_toolkit.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 3587f3ea..50843d63 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,9 +1,9 @@ # BUILTIN_TOOLKIT.py -from typing import Dict, Callable +from typing import Dict +from typeguard import typechecked 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.pre_existing_toolkits.FILESYSTEM_TOOLKIT import FILESYSTEM_TOOLKIT @@ -14,6 +14,7 @@ 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 +@typechecked def make_builtin_toolkit( parent: Agent, agent_registry: Dict[str, Agent], diff --git a/backend/apps/agents/HaikFix/tools/make_builtin_toolkit/open_swarm_toolkits/browser_toolkit/make_browser_actions_toolkit/handlers/browser_action_input_schemas.py b/backend/apps/agents/HaikFix/tools/make_builtin_toolkit/open_swarm_toolkits/browser_toolkit/make_browser_actions_toolkit/handlers/browser_action_input_schemas.py new file mode 100644 index 00000000..4fb865b0 --- /dev/null +++ b/backend/apps/agents/HaikFix/tools/make_builtin_toolkit/open_swarm_toolkits/browser_toolkit/make_browser_actions_toolkit/handlers/browser_action_input_schemas.py @@ -0,0 +1,31 @@ +from typing_extensions import NotRequired +from typing import TypedDict + +class BrowserScreenshotInput(TypedDict): + pass + +class BrowserGetTextInput(TypedDict): + pass + +class BrowserNavigateInput(TypedDict): + url: str + +class BrowserClickInput(TypedDict): + selector: str + +class BrowserTypeInput(TypedDict): + selector: str + text: str + +class BrowserEvaluateInput(TypedDict): + expression: str + +class BrowserGetElementsInput(TypedDict): + selector: NotRequired[str] + +class BrowserScrollInput(TypedDict): + direction: NotRequired[str] + amount: NotRequired[float] + +class BrowserWaitInput(TypedDict): + milliseconds: NotRequired[float] diff --git a/backend/apps/agents/HaikFix/tools/make_builtin_toolkit/open_swarm_toolkits/browser_toolkit/make_browser_actions_toolkit/handlers/make_browser_action_handler.py b/backend/apps/agents/HaikFix/tools/make_builtin_toolkit/open_swarm_toolkits/browser_toolkit/make_browser_actions_toolkit/handlers/make_browser_action_handler.py new file mode 100644 index 00000000..fc39e8da --- /dev/null +++ b/backend/apps/agents/HaikFix/tools/make_builtin_toolkit/open_swarm_toolkits/browser_toolkit/make_browser_actions_toolkit/handlers/make_browser_action_handler.py @@ -0,0 +1,22 @@ +from typing import Dict, Any +from typeguard import typechecked +from backend.apps.agents.HaikFix.Agent.shared_structs.Message.agent_outputs import ToolResponse +from backend.apps.agents.browser.executor import execute_browser_tool, _format_tool_result + +@typechecked +def make_browser_action_handler(tool_name: str, browser_id: str, tab_id: str): + async def handler(args: Dict[str, Any]) -> ToolResponse: + result = await execute_browser_tool(tool_name, args, browser_id, tab_id) + if "error" in result: + return { + "content": [ + { + "type": "text", + "text": f"Error: {result['error']}", + }, + ], + "is_error": True, + } + content_blocks = _format_tool_result(result, tool_name) + return {"content": content_blocks} + return handler diff --git a/backend/apps/agents/HaikFix/tools/make_builtin_toolkit/open_swarm_toolkits/browser_toolkit/make_browser_actions_toolkit/make_browser_actions_toolkit.py b/backend/apps/agents/HaikFix/tools/make_builtin_toolkit/open_swarm_toolkits/browser_toolkit/make_browser_actions_toolkit/make_browser_actions_toolkit.py new file mode 100644 index 00000000..9ddaaaaa --- /dev/null +++ b/backend/apps/agents/HaikFix/tools/make_builtin_toolkit/open_swarm_toolkits/browser_toolkit/make_browser_actions_toolkit/make_browser_actions_toolkit.py @@ -0,0 +1,122 @@ +from typeguard import typechecked +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.make_browser_actions_toolkit.handlers.browser_action_input_schemas import ( + BrowserScreenshotInput, + BrowserGetTextInput, + BrowserNavigateInput, + BrowserClickInput, + BrowserTypeInput, + BrowserEvaluateInput, + BrowserGetElementsInput, + BrowserScrollInput, + BrowserWaitInput, +) +from backend.apps.agents.HaikFix.tools.make_builtin_toolkit.open_swarm_toolkits.browser_toolkit.make_browser_actions_toolkit.handlers.make_browser_action_handler import make_browser_action_handler + +SERVER_NAME = "openswarm-browser-actions" + +@typechecked +def make_browser_actions_toolkit(browser_id: str, tab_id: str = "") -> Toolkit: + return Toolkit( + name="browser_actions", + description="Low-level browser automation actions for a single browser tab", + tools=[ + SDK_MCP_Tool( + name="BrowserScreenshot", + description=( + "Capture a screenshot of the browser page. Returns the screenshot as a " + "base64-encoded PNG image. Use this to see what is currently displayed." + ), + deferred=False, + permission="allow", + server_name=SERVER_NAME, + input_schema=BrowserScreenshotInput, + handler=make_browser_action_handler("BrowserScreenshot", browser_id, tab_id), + ), + SDK_MCP_Tool( + name="BrowserGetText", + description="Get the visible text content of the browser page. Returns up to 15000 characters.", + deferred=False, + permission="allow", + server_name=SERVER_NAME, + input_schema=BrowserGetTextInput, + handler=make_browser_action_handler("BrowserGetText", browser_id, tab_id), + ), + SDK_MCP_Tool( + name="BrowserNavigate", + description="Navigate the browser to a URL.", + deferred=False, + permission="allow", + server_name=SERVER_NAME, + input_schema=BrowserNavigateInput, + handler=make_browser_action_handler("BrowserNavigate", browser_id, tab_id), + ), + SDK_MCP_Tool( + name="BrowserClick", + description=( + "Click an element identified by a CSS selector. " + "Use BrowserGetElements first to discover valid selectors." + ), + deferred=False, + permission="allow", + server_name=SERVER_NAME, + input_schema=BrowserClickInput, + handler=make_browser_action_handler("BrowserClick", browser_id, tab_id), + ), + SDK_MCP_Tool( + name="BrowserType", + description="Type text into an input element. Clears existing value first.", + deferred=False, + permission="allow", + server_name=SERVER_NAME, + input_schema=BrowserTypeInput, + handler=make_browser_action_handler("BrowserType", browser_id, tab_id), + ), + SDK_MCP_Tool( + name="BrowserEvaluate", + description="Evaluate a JavaScript expression in the browser page and return the result.", + deferred=False, + permission="allow", + server_name=SERVER_NAME, + input_schema=BrowserEvaluateInput, + handler=make_browser_action_handler("BrowserEvaluate", browser_id, tab_id), + ), + SDK_MCP_Tool( + name="BrowserGetElements", + description=( + "Get a list of interactive elements on the page with CSS selectors. " + "Call this BEFORE clicking or typing so you know which selectors are valid." + ), + deferred=False, + permission="allow", + server_name=SERVER_NAME, + input_schema=BrowserGetElementsInput, + handler=make_browser_action_handler("BrowserGetElements", browser_id, tab_id), + ), + SDK_MCP_Tool( + name="BrowserScroll", + description=( + "Scroll the page up or down. Automatically finds the correct scrollable " + "container. Returns scroll position info including whether top/bottom has been reached." + ), + deferred=False, + permission="allow", + server_name=SERVER_NAME, + input_schema=BrowserScrollInput, + handler=make_browser_action_handler("BrowserScroll", browser_id, tab_id), + ), + SDK_MCP_Tool( + name="BrowserWait", + description=( + "Wait for a specified duration. Useful after navigation or actions that " + "trigger page loads. Min 100ms, max 10000ms." + ), + deferred=False, + permission="allow", + server_name=SERVER_NAME, + input_schema=BrowserWaitInput, + handler=make_browser_action_handler("BrowserWait", browser_id, tab_id), + ), + ], + ) \ No newline at end of file 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/make_browser_delegation_toolkit/handlers/make_create_browser_agent_handler.py similarity index 84% rename from backend/apps/agents/HaikFix/tools/make_builtin_toolkit/open_swarm_toolkits/browser_toolkit/handlers/make_create_browser_agent_handler.py rename to backend/apps/agents/HaikFix/tools/make_builtin_toolkit/open_swarm_toolkits/browser_toolkit/make_browser_delegation_toolkit/handlers/make_create_browser_agent_handler.py index 9ac11457..83b7538d 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/make_browser_delegation_toolkit/handlers/make_create_browser_agent_handler.py @@ -3,8 +3,8 @@ 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.tools.make_builtin_toolkit.open_swarm_toolkits.browser_toolkit.make_browser_delegation_toolkit.handlers.utils.run_browser_loop import run_browser_loop +from backend.apps.agents.HaikFix.tools.make_builtin_toolkit.open_swarm_toolkits.browser_toolkit.make_browser_delegation_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 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/make_browser_delegation_toolkit/handlers/make_invoke_browser_agent_handler.py similarity index 100% rename from backend/apps/agents/HaikFix/tools/make_builtin_toolkit/open_swarm_toolkits/browser_toolkit/handlers/make_invoke_browser_agent_handler.py rename to backend/apps/agents/HaikFix/tools/make_builtin_toolkit/open_swarm_toolkits/browser_toolkit/make_browser_delegation_toolkit/handlers/make_invoke_browser_agent_handler.py diff --git a/backend/apps/agents/HaikFix/tools/make_builtin_toolkit/open_swarm_toolkits/browser_toolkit/handlers/utils/format_browser_result.py b/backend/apps/agents/HaikFix/tools/make_builtin_toolkit/open_swarm_toolkits/browser_toolkit/make_browser_delegation_toolkit/handlers/utils/format_browser_result.py similarity index 100% rename from backend/apps/agents/HaikFix/tools/make_builtin_toolkit/open_swarm_toolkits/browser_toolkit/handlers/utils/format_browser_result.py rename to backend/apps/agents/HaikFix/tools/make_builtin_toolkit/open_swarm_toolkits/browser_toolkit/make_browser_delegation_toolkit/handlers/utils/format_browser_result.py diff --git a/backend/apps/agents/HaikFix/tools/make_builtin_toolkit/open_swarm_toolkits/browser_toolkit/handlers/utils/run_browser_loop.py b/backend/apps/agents/HaikFix/tools/make_builtin_toolkit/open_swarm_toolkits/browser_toolkit/make_browser_delegation_toolkit/handlers/utils/run_browser_loop.py similarity index 88% rename from backend/apps/agents/HaikFix/tools/make_builtin_toolkit/open_swarm_toolkits/browser_toolkit/handlers/utils/run_browser_loop.py rename to backend/apps/agents/HaikFix/tools/make_builtin_toolkit/open_swarm_toolkits/browser_toolkit/make_browser_delegation_toolkit/handlers/utils/run_browser_loop.py index 8f4b5e8f..8824846b 100644 --- a/backend/apps/agents/HaikFix/tools/make_builtin_toolkit/open_swarm_toolkits/browser_toolkit/handlers/utils/run_browser_loop.py +++ b/backend/apps/agents/HaikFix/tools/make_builtin_toolkit/open_swarm_toolkits/browser_toolkit/make_browser_delegation_toolkit/handlers/utils/run_browser_loop.py @@ -5,9 +5,9 @@ from typing import Dict, List, Any # TODO: fix this shit cuh from backend.apps.agents.browser.executor import execute_browser_tool, _format_tool_result -from backend.apps.agents.HaikFix.tools.make_builtin_toolkit.open_swarm_toolkits.browser_toolkit.handlers.utils.temp_sub_utils.model_ids import is_valid_model_id -from backend.apps.agents.HaikFix.tools.make_builtin_toolkit.open_swarm_toolkits.browser_toolkit.handlers.utils.temp_sub_utils.model_ids import get_anthropic_client -from backend.apps.agents.HaikFix.tools.make_builtin_toolkit.open_swarm_toolkits.browser_toolkit.handlers.utils.temp_sub_utils.schemas import BROWSER_TOOLS_SCHEMA, SYSTEM_PROMPT, MAX_TURNS +from backend.apps.agents.HaikFix.tools.make_builtin_toolkit.open_swarm_toolkits.browser_toolkit.make_browser_delegation_toolkit.handlers.utils.temp_sub_utils.model_ids import is_valid_model_id +from backend.apps.agents.HaikFix.tools.make_builtin_toolkit.open_swarm_toolkits.browser_toolkit.make_browser_delegation_toolkit.handlers.utils.temp_sub_utils.model_ids import get_anthropic_client +from backend.apps.agents.HaikFix.tools.make_builtin_toolkit.open_swarm_toolkits.browser_toolkit.make_browser_delegation_toolkit.handlers.utils.temp_sub_utils.schemas import BROWSER_TOOLS_SCHEMA, SYSTEM_PROMPT, MAX_TURNS async def run_browser_loop( task: str, diff --git a/backend/apps/agents/HaikFix/tools/make_builtin_toolkit/open_swarm_toolkits/browser_toolkit/handlers/utils/temp_sub_utils/model_ids.py b/backend/apps/agents/HaikFix/tools/make_builtin_toolkit/open_swarm_toolkits/browser_toolkit/make_browser_delegation_toolkit/handlers/utils/temp_sub_utils/model_ids.py similarity index 100% rename from backend/apps/agents/HaikFix/tools/make_builtin_toolkit/open_swarm_toolkits/browser_toolkit/handlers/utils/temp_sub_utils/model_ids.py rename to backend/apps/agents/HaikFix/tools/make_builtin_toolkit/open_swarm_toolkits/browser_toolkit/make_browser_delegation_toolkit/handlers/utils/temp_sub_utils/model_ids.py diff --git a/backend/apps/agents/HaikFix/tools/make_builtin_toolkit/open_swarm_toolkits/browser_toolkit/handlers/utils/temp_sub_utils/schemas.py b/backend/apps/agents/HaikFix/tools/make_builtin_toolkit/open_swarm_toolkits/browser_toolkit/make_browser_delegation_toolkit/handlers/utils/temp_sub_utils/schemas.py similarity index 100% rename from backend/apps/agents/HaikFix/tools/make_builtin_toolkit/open_swarm_toolkits/browser_toolkit/handlers/utils/temp_sub_utils/schemas.py rename to backend/apps/agents/HaikFix/tools/make_builtin_toolkit/open_swarm_toolkits/browser_toolkit/make_browser_delegation_toolkit/handlers/utils/temp_sub_utils/schemas.py diff --git a/backend/apps/agents/HaikFix/tools/make_builtin_toolkit/open_swarm_toolkits/browser_toolkit/make_browser_delegation_toolkit/make_browser_delegation_toolkit.py b/backend/apps/agents/HaikFix/tools/make_builtin_toolkit/open_swarm_toolkits/browser_toolkit/make_browser_delegation_toolkit/make_browser_delegation_toolkit.py new file mode 100644 index 00000000..377c5440 --- /dev/null +++ b/backend/apps/agents/HaikFix/tools/make_builtin_toolkit/open_swarm_toolkits/browser_toolkit/make_browser_delegation_toolkit/make_browser_delegation_toolkit.py @@ -0,0 +1,44 @@ +from typeguard import typechecked +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.make_browser_delegation_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.make_browser_delegation_toolkit.handlers.make_invoke_browser_agent_handler import ( + make_invoke_browser_agent_handler, InvokeBrowserAgentInput, +) +from backend.apps.agents.HaikFix.Agent.Agent import Agent + + +@typechecked +def make_browser_delegation_toolkit(parent: Agent) -> 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), + ), + 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 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 94b882d3..e416246c 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 @@ -1,42 +1,19 @@ +from backend.apps.agents.HaikFix.tools.make_builtin_toolkit.open_swarm_toolkits.browser_toolkit.make_browser_actions_toolkit.make_browser_actions_toolkit import make_browser_actions_toolkit +from backend.apps.agents.HaikFix.tools.make_builtin_toolkit.open_swarm_toolkits.browser_toolkit.make_browser_delegation_toolkit.make_browser_delegation_toolkit import make_browser_delegation_toolkit 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 typing import Dict from backend.apps.agents.HaikFix.Agent.Agent import Agent -def make_browser_toolkit(parent: Agent, create_browser_card_fn) -> Toolkit: +def make_browser_toolkit( + parent: Agent, +) -> 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), - ), + nested_toolkits=[ + make_browser_delegation_toolkit(parent), + make_browser_actions_toolkit(parent), ], ) \ No newline at end of file