mirror of
https://github.com/openswarm-ai/openswarm.git
synced 2026-09-14 05:37:40 +02:00
52 lines
2.2 KiB
Python
52 lines
2.2 KiB
Python
from backend.core.Agent.Agent import Agent
|
|
from backend.core.tools.shared_structs.Toolkit import Toolkit
|
|
from backend.core.tools.make_builtin_toolkit.make_builtin_toolkit import make_builtin_toolkit
|
|
from backend.apps.agents.COMMS_MANAGER.COMMS_MANAGER import CommsManager
|
|
from backend.apps.tools.tools import load_user_toolkit, load_builtin_permissions
|
|
from typing import Dict, Optional
|
|
from typeguard import typechecked
|
|
from backend.core.tools.shared_structs.TOOL_PERMISSIONS import TOOL_PERMISSIONS
|
|
|
|
|
|
@typechecked
|
|
def p_apply_builtin_permission_overrides(toolkit: Toolkit, permissions: dict[str, TOOL_PERMISSIONS]) -> None:
|
|
"""Walk the toolkit tree and apply user-saved builtin permission overrides."""
|
|
if toolkit.tools is not None:
|
|
for tool in toolkit.tools:
|
|
sdk_name: str = tool.to_sdk_args()
|
|
if sdk_name in permissions:
|
|
perm: TOOL_PERMISSIONS = permissions[sdk_name]
|
|
tool.permission = perm
|
|
if toolkit.nested_toolkits is not None:
|
|
for nested in toolkit.nested_toolkits:
|
|
p_apply_builtin_permission_overrides(nested, permissions)
|
|
|
|
|
|
@typechecked
|
|
def build_agent_toolkit(agent: Agent, sessions: Dict[str, Agent], comms_manager: CommsManager) -> Toolkit:
|
|
"""Build the full toolkit tree: builtin tools + user-installed MCP tools.
|
|
|
|
Also applies saved builtin permission overrides.
|
|
"""
|
|
builtin_toolkit: Toolkit = make_builtin_toolkit(agent, sessions, comms_manager.send_browser_command)
|
|
user_toolkit: Optional[Toolkit] = load_user_toolkit()
|
|
|
|
full_toolkit: Optional[Toolkit] = None
|
|
if user_toolkit is not None:
|
|
full_toolkit = Toolkit(
|
|
name="root",
|
|
description="All available tools",
|
|
nested_toolkits=[builtin_toolkit, user_toolkit],
|
|
)
|
|
else:
|
|
full_toolkit = builtin_toolkit
|
|
assert full_toolkit is not None, "Full toolkit should never be None"
|
|
|
|
builtin_permissions: Optional[dict[str, TOOL_PERMISSIONS]] = load_builtin_permissions()
|
|
if builtin_permissions is not None:
|
|
p_apply_builtin_permission_overrides(
|
|
toolkit=full_toolkit,
|
|
permissions=builtin_permissions,
|
|
)
|
|
|
|
return full_toolkit |