suna/backend/core/utils/tool_groups.py

1115 lines
38 KiB
Python

from typing import Dict, List, Any, Optional
from dataclasses import dataclass
@dataclass
class ToolMethod:
name: str
display_name: str
description: str
enabled: bool = True
is_core: bool = False
@dataclass
class ToolGroup:
name: str
display_name: str
description: str
tool_class: str
methods: List[ToolMethod]
enabled: bool = True
is_core: bool = False
TOOL_GROUPS: Dict[str, ToolGroup] = {
"sb_files_tool": ToolGroup(
name="sb_files_tool",
display_name="File Operations",
description="Create, read, edit, and manage files in the workspace",
tool_class="SandboxFilesTool",
methods=[
ToolMethod(
name="create_file",
display_name="Create File",
description="Create new files with content",
enabled=True
),
ToolMethod(
name="str_replace",
display_name="String Replace",
description="Replace specific text in files",
enabled=True
),
ToolMethod(
name="full_file_rewrite",
display_name="Full File Rewrite",
description="Completely rewrite file contents",
enabled=True
),
ToolMethod(
name="edit_file",
display_name="Edit File",
description="AI-powered file editing with instructions",
enabled=True
),
ToolMethod(
name="delete_file",
display_name="Delete File",
description="Delete files from workspace",
enabled=True
),
]
),
"sb_shell_tool": ToolGroup(
name="sb_shell_tool",
display_name="Shell Operations",
description="Execute shell commands and manage terminal sessions",
tool_class="SandboxShellTool",
methods=[
ToolMethod(
name="execute_command",
display_name="Execute Command",
description="Execute shell commands in tmux sessions",
enabled=True
),
ToolMethod(
name="check_command_output",
display_name="Check Command Output",
description="Check the output of running commands",
enabled=True
),
ToolMethod(
name="terminate_command",
display_name="Terminate Command",
description="Terminate running commands",
enabled=True
),
ToolMethod(
name="list_commands",
display_name="List Commands",
description="List all running commands",
enabled=True
),
]
),
"web_search_tool": ToolGroup(
name="web_search_tool",
display_name="Web Search",
description="Search the web and scrape content for research",
tool_class="SandboxWebSearchTool",
methods=[
ToolMethod(
name="web_search",
display_name="Web Search",
description="Search the web using Tavily API",
enabled=True
),
ToolMethod(
name="scrape_webpage",
display_name="Scrape Webpage",
description="Scrape webpage content using Firecrawl",
enabled=True
),
]
),
"sb_vision_tool": ToolGroup(
name="sb_vision_tool",
display_name="Vision & Image Analysis",
description="Analyze images and visual content with AI",
tool_class="SandboxVisionTool",
methods=[
ToolMethod(
name="load_image",
display_name="Load Image",
description="Load and analyze images with AI vision",
enabled=True
),
ToolMethod(
name="clear_images_from_context",
display_name="Clear Images",
description="Clear images from analysis context",
enabled=True
),
]
),
"sb_image_edit_tool": ToolGroup(
name="sb_image_edit_tool",
display_name="Image Editing",
description="Edit and manipulate images with AI",
tool_class="SandboxImageEditTool",
methods=[
ToolMethod(
name="image_edit_or_generate",
display_name="Edit or Generate Image",
description="Edit existing images or generate new ones with AI",
enabled=True
),
]
),
"browser_tool": ToolGroup(
name="browser_tool",
display_name="Browser Automation",
description="Automate web browser interactions and navigation",
tool_class="BrowserTool",
methods=[
ToolMethod(
name="browser_navigate_to",
display_name="Navigate To URL",
description="Navigate browser to specific URL",
enabled=True
),
ToolMethod(
name="browser_act",
display_name="Browser Action",
description="Perform actions like clicking, typing, scrolling",
enabled=True
),
ToolMethod(
name="browser_extract_content",
display_name="Extract Content",
description="Extract text and data from web pages",
enabled=True
),
ToolMethod(
name="browser_screenshot",
display_name="Take Screenshot",
description="Capture screenshots of web pages",
enabled=True
),
]
),
"sb_presentation_tool": ToolGroup(
name="sb_presentation_tool",
display_name="Presentations",
description="Create and manage presentations",
tool_class="SandboxPresentationTool",
methods=[
ToolMethod(
name="create_slide",
display_name="Create Slide",
description="Create individual slides with content",
enabled=True
),
ToolMethod(
name="list_slides",
display_name="List Slides",
description="List all slides in presentations",
enabled=True
),
ToolMethod(
name="delete_slide",
display_name="Delete Slide",
description="Delete slides from presentations",
enabled=True
),
ToolMethod(
name="list_presentations",
display_name="List Presentations",
description="List all available presentations",
enabled=True
),
ToolMethod(
name="delete_presentation",
display_name="Delete Presentation",
description="Delete entire presentations",
enabled=True
),
ToolMethod(
name="present_presentation",
display_name="Present Presentation",
description="Present completed presentations to user",
enabled=True
),
]
),
"sb_sheets_tool": ToolGroup(
name="sb_sheets_tool",
display_name="Spreadsheets",
description="Create and manipulate spreadsheet data",
tool_class="SandboxSheetsTool",
methods=[
ToolMethod(
name="update_sheet",
display_name="Update Sheet",
description="Update spreadsheet cells and data",
enabled=True
),
ToolMethod(
name="view_sheet",
display_name="View Sheet",
description="View and read spreadsheet data",
enabled=True
),
ToolMethod(
name="create_sheet",
display_name="Create Sheet",
description="Create new spreadsheets",
enabled=True
),
ToolMethod(
name="analyze_sheet",
display_name="Analyze Sheet",
description="Analyze spreadsheet data and patterns",
enabled=True
),
ToolMethod(
name="visualize_sheet",
display_name="Visualize Sheet",
description="Create visualizations from spreadsheet data",
enabled=True
),
ToolMethod(
name="format_sheet",
display_name="Format Sheet",
description="Format spreadsheet appearance and styling",
enabled=True
),
]
),
"task_list_tool": ToolGroup(
name="task_list_tool",
display_name="Task Management",
description="Create and manage task lists",
tool_class="TaskListTool",
is_core=True,
methods=[
ToolMethod(
name="create_task_list",
display_name="Create Task List",
description="Create and manage task lists",
enabled=True,
is_core=True
),
]
),
"expand_message_tool": ToolGroup(
name="expand_message_tool",
display_name="Message Expansion",
description="Expand truncated messages from conversations",
tool_class="ExpandMessageTool",
is_core=True,
methods=[
ToolMethod(
name="expand_message",
display_name="Expand Message",
description="Expand truncated messages",
enabled=True,
is_core=True
),
]
),
"sb_deploy_tool": ToolGroup(
name="sb_deploy_tool",
display_name="Deployment",
description="Deploy applications and services",
tool_class="SandboxDeployTool",
methods=[
ToolMethod(
name="deploy",
display_name="Deploy Application",
description="Deploy applications and services",
enabled=True
),
]
),
"sb_expose_tool": ToolGroup(
name="sb_expose_tool",
display_name="Port Management",
description="Expose services and manage ports",
tool_class="SandboxExposeTool",
methods=[
ToolMethod(
name="expose_port",
display_name="Expose Port",
description="Expose services on specific ports",
enabled=True
),
]
),
"image_search_tool": ToolGroup(
name="image_search_tool",
display_name="Image Search",
description="Search for images using SERPER API",
tool_class="SandboxImageSearchTool",
methods=[
ToolMethod(
name="image_search",
display_name="Image Search",
description="Search for images with batch support",
enabled=True
),
]
),
"data_providers_tool": ToolGroup(
name="data_providers_tool",
display_name="Data Providers",
description="Access to data providers and external APIs",
tool_class="DataProvidersTool",
methods=[
ToolMethod(
name="get_data_provider_endpoints",
display_name="Get Data Provider Endpoints",
description="List available data provider endpoints",
enabled=True
),
ToolMethod(
name="execute_data_provider_call",
display_name="Execute Data Provider Call",
description="Execute calls to external data providers",
enabled=True
),
]
),
"agent_config_tool": ToolGroup(
name="agent_config_tool",
display_name="Agent Configuration",
description="Configure agent settings, tools, and integrations",
tool_class="AgentConfigTool",
methods=[
ToolMethod(
name="update_agent",
display_name="Update Agent",
description="Update agent configuration and settings",
enabled=True
),
ToolMethod(
name="get_current_agent_config",
display_name="Get Agent Config",
description="Get current agent configuration",
enabled=True
),
]
),
"mcp_search_tool": ToolGroup(
name="mcp_search_tool",
display_name="MCP Search",
description="Search and discover MCP servers and integrations",
tool_class="MCPSearchTool",
methods=[
ToolMethod(
name="search_mcp_servers",
display_name="Search MCP Servers",
description="Search for available MCP server integrations",
enabled=True
),
ToolMethod(
name="get_app_details",
display_name="Get App Details",
description="Get detailed information about MCP apps",
enabled=True
),
ToolMethod(
name="discover_user_mcp_servers",
display_name="Discover User MCP Servers",
description="Discover user's available MCP servers",
enabled=True
),
]
),
"credential_profile_tool": ToolGroup(
name="credential_profile_tool",
display_name="Credential Management",
description="Manage credential profiles for secure authentication",
tool_class="CredentialProfileTool",
methods=[
ToolMethod(
name="get_credential_profiles",
display_name="Get Credential Profiles",
description="List all available credential profiles",
enabled=True
),
ToolMethod(
name="create_credential_profile",
display_name="Create Credential Profile",
description="Create new credential profiles for authentication",
enabled=True
),
ToolMethod(
name="configure_profile_for_agent",
display_name="Configure Profile for Agent",
description="Configure credential profile for agent use",
enabled=True
),
ToolMethod(
name="delete_credential_profile",
display_name="Delete Credential Profile",
description="Delete existing credential profiles",
enabled=True
),
]
),
"trigger_tool": ToolGroup(
name="trigger_tool",
display_name="Triggers",
description="Create and manage automated triggers",
tool_class="TriggerTool",
methods=[
ToolMethod(
name="create_scheduled_trigger",
display_name="Create Scheduled Trigger",
description="Create time-based scheduled triggers",
enabled=True
),
ToolMethod(
name="get_scheduled_triggers",
display_name="Get Scheduled Triggers",
description="List all scheduled triggers",
enabled=True
),
ToolMethod(
name="delete_scheduled_trigger",
display_name="Delete Scheduled Trigger",
description="Delete scheduled triggers",
enabled=True
),
ToolMethod(
name="toggle_scheduled_trigger",
display_name="Toggle Scheduled Trigger",
description="Enable or disable scheduled triggers",
enabled=True
),
ToolMethod(
name="list_event_trigger_apps",
display_name="List Event Trigger Apps",
description="List available apps for event triggers",
enabled=True
),
ToolMethod(
name="list_app_event_triggers",
display_name="List App Event Triggers",
description="List event triggers for specific apps",
enabled=True
),
ToolMethod(
name="create_event_trigger",
display_name="Create Event Trigger",
description="Create event-based triggers",
enabled=True
),
]
),
"sb_kb_tool": ToolGroup(
name="sb_kb_tool",
display_name="Knowledge Base",
description="Manage knowledge base content",
tool_class="SandboxKbTool",
methods=[
ToolMethod(
name="init_kb",
display_name="Initialize Knowledge Base",
description="Initialize the kb-fusion binary and optionally sync knowledge base",
enabled=True
),
ToolMethod(
name="search_files",
display_name="Search Files",
description="Perform semantic search on files using kb-fusion",
enabled=True
),
ToolMethod(
name="cleanup_kb",
display_name="Cleanup Knowledge Base",
description="Perform maintenance and cleanup operations",
enabled=True
),
ToolMethod(
name="ls_kb",
display_name="List Knowledge Base Files",
description="List indexed files in the knowledge base",
enabled=True
),
ToolMethod(
name="global_kb_sync",
display_name="Sync Global Knowledge Base",
description="Sync agent's knowledge base files to sandbox",
enabled=True
),
ToolMethod(
name="global_kb_create_folder",
display_name="Create Knowledge Base Folder",
description="Create a new folder in the global knowledge base",
enabled=True
),
ToolMethod(
name="global_kb_upload_file",
display_name="Upload File to Knowledge Base",
description="Upload a file from sandbox to the global knowledge base",
enabled=True
),
ToolMethod(
name="global_kb_delete_item",
display_name="Delete Knowledge Base Item",
description="Delete a file or folder from the global knowledge base",
enabled=True
),
ToolMethod(
name="global_kb_enable_item",
display_name="Enable/Disable Knowledge Base Item",
description="Enable or disable a knowledge base file for this agent",
enabled=True
),
ToolMethod(
name="global_kb_list_contents",
display_name="List Knowledge Base Contents",
description="List all folders and files in the global knowledge base",
enabled=True
),
]
),
"sb_design_tool": ToolGroup(
name="sb_design_tool",
display_name="Design Tool",
description="Create and edit design elements",
tool_class="SandboxDesignerTool",
methods=[
ToolMethod(
name="designer_create_or_edit",
display_name="Create or Edit Design",
description="Create new designs or edit existing ones",
enabled=True
),
]
),
"sb_presentation_outline_tool": ToolGroup(
name="sb_presentation_outline_tool",
display_name="Presentation Outline",
description="Create structured presentation outlines",
tool_class="SandboxPresentationOutlineTool",
methods=[
ToolMethod(
name="create_outline",
display_name="Create Outline",
description="Create presentation outlines",
enabled=True
),
]
),
"sb_upload_file_tool": ToolGroup(
name="sb_upload_file_tool",
display_name="File Upload",
description="Upload files to the workspace",
tool_class="SandboxUploadFileTool",
methods=[
ToolMethod(
name="upload_file",
display_name="Upload File",
description="Upload files to workspace",
enabled=True
),
]
),
"sb_docs_tool": ToolGroup(
name="sb_docs_tool",
display_name="Document Editor",
description="Create and edit documents with TipTap",
tool_class="SandboxDocsTool",
methods=[
ToolMethod(
name="create_document",
display_name="Create Document",
description="Create new documents with rich text content",
enabled=True
),
ToolMethod(
name="read_document",
display_name="Read Document",
description="Read the content of a document",
enabled=True
),
ToolMethod(
name="list_documents",
display_name="List Documents",
description="List all documents in the workspace",
enabled=True
),
ToolMethod(
name="delete_document",
display_name="Delete Document",
description="Delete a document from the workspace",
enabled=True
),
ToolMethod(
name="get_format_guide",
display_name="Get Format Guide",
description="Get TipTap-compatible HTML format guide",
enabled=True
),
]
),
"agent_creation_tool": ToolGroup(
name="agent_creation_tool",
display_name="Agent Creation",
description="Create new agents (Suna only)",
tool_class="AgentCreationTool",
methods=[
ToolMethod(
name="create_new_agent",
display_name="Create New Agent",
description="Create completely new AI agents",
enabled=True
),
ToolMethod(
name="search_mcp_servers_for_agent",
display_name="Search MCP Servers",
description="Search MCP servers for agent integration",
enabled=True
),
ToolMethod(
name="get_mcp_server_details",
display_name="Get MCP Server Details",
description="Get detailed MCP server information",
enabled=True
),
ToolMethod(
name="create_credential_profile_for_agent",
display_name="Create Credential Profile",
description="Create credential profiles for agents",
enabled=True
),
ToolMethod(
name="discover_mcp_tools_for_agent",
display_name="Discover MCP Tools",
description="Discover available MCP tools for agents",
enabled=True
),
ToolMethod(
name="configure_agent_integration",
display_name="Configure Agent Integration",
description="Configure integrations for new agents",
enabled=True
),
ToolMethod(
name="create_agent_scheduled_trigger",
display_name="Create Scheduled Trigger",
description="Create scheduled triggers for agents",
enabled=True
),
ToolMethod(
name="list_agent_scheduled_triggers",
display_name="List Scheduled Triggers",
description="List agent scheduled triggers",
enabled=True
),
ToolMethod(
name="toggle_agent_scheduled_trigger",
display_name="Toggle Scheduled Trigger",
description="Enable/disable agent scheduled triggers",
enabled=True
),
ToolMethod(
name="delete_agent_scheduled_trigger",
display_name="Delete Scheduled Trigger",
description="Delete agent scheduled triggers",
enabled=True
),
ToolMethod(
name="update_agent_config",
display_name="Update Agent Config",
description="Update existing agent configurations",
enabled=True
),
]
),
"sb_browser_tool": ToolGroup(
name="sb_browser_tool",
display_name="Browser Automation (Advanced)",
description="Advanced browser automation with full UI interaction capabilities",
tool_class="SandboxBrowserTool",
methods=[
ToolMethod(
name="browser_navigate_to",
display_name="Navigate To URL",
description="Navigate browser to specific URL",
enabled=True
),
ToolMethod(
name="browser_go_back",
display_name="Go Back",
description="Navigate back in browser history",
enabled=True
),
ToolMethod(
name="browser_wait",
display_name="Wait",
description="Wait for specified number of seconds",
enabled=True
),
ToolMethod(
name="browser_click_element",
display_name="Click Element",
description="Click on an element by index",
enabled=True
),
ToolMethod(
name="browser_input_text",
display_name="Input Text",
description="Input text into an element",
enabled=True
),
ToolMethod(
name="browser_send_keys",
display_name="Send Keys",
description="Send keyboard keys (Enter, Escape, shortcuts)",
enabled=True
),
ToolMethod(
name="browser_switch_tab",
display_name="Switch Tab",
description="Switch to a different browser tab",
enabled=True
),
ToolMethod(
name="browser_close_tab",
display_name="Close Tab",
description="Close a browser tab",
enabled=True
),
ToolMethod(
name="browser_scroll_down",
display_name="Scroll Down",
description="Scroll down the page",
enabled=True
),
ToolMethod(
name="browser_scroll_up",
display_name="Scroll Up",
description="Scroll up the page",
enabled=True
),
ToolMethod(
name="browser_scroll_to_text",
display_name="Scroll To Text",
description="Scroll to specific text on the page",
enabled=True
),
ToolMethod(
name="browser_get_dropdown_options",
display_name="Get Dropdown Options",
description="Get all options from a dropdown element",
enabled=True
),
ToolMethod(
name="browser_select_dropdown_option",
display_name="Select Dropdown Option",
description="Select an option from a dropdown by text",
enabled=True
),
ToolMethod(
name="browser_drag_drop",
display_name="Drag and Drop",
description="Perform drag and drop operation",
enabled=True
),
ToolMethod(
name="browser_click_coordinates",
display_name="Click Coordinates",
description="Click at specific X,Y coordinates",
enabled=True
),
]
),
"people_search_tool": ToolGroup(
name="people_search_tool",
display_name="People Search",
description="Search for people using LinkedIn",
tool_class="PeopleSearchTool",
methods=[
ToolMethod(
name="people_search",
display_name="People Search",
description="Search for people using LinkedIn",
enabled=True
),
]
),
"company_search_tool": ToolGroup(
name="company_search_tool",
display_name="Company Search",
description="Search for companies using natural language queries",
tool_class="CompanySearchTool",
methods=[
ToolMethod(
name="company_search",
display_name="Company Search",
description="Search for companies using natural language queries",
enabled=True
),
]
),
"paper_search_tool": ToolGroup(
name="paper_search_tool",
display_name="Paper Search",
description="Search for papers using natural language queries",
tool_class="PaperSearchTool",
methods=[
ToolMethod(
name="paper_search",
display_name="Paper Search",
description="Search for papers using natural language queries",
enabled=True
),
]
),
# "sb_document_parser_tool": ToolGroup(
# name="sb_document_parser_tool",
# display_name="Document Parser",
# description="Parse documents using Chunkr AI",
# tool_class="SandboxDocumentParserTool",
# methods=[
# ToolMethod(
# name="parse_document",
# display_name="Parse Document",
# description="Parse documents using Chunkr AI",
# enabled=True
# ),
# ]
# ),
"sb_web_dev_tool": ToolGroup(
name="sb_web_dev_tool",
display_name="Web Development",
description="Create and manage web development projects with Vite and React",
tool_class="SandboxWebDevTool",
methods=[
ToolMethod(
name="create_vite_react_project",
display_name="Create Vite React Project",
description="Create a new Vite React project",
enabled=True
),
ToolMethod(
name="get_project_structure",
display_name="Get Project Structure",
description="Get the file structure of a project",
enabled=True
),
ToolMethod(
name="build_project",
display_name="Build Project",
description="Build a web project for production",
enabled=True
),
ToolMethod(
name="start_dev_server",
display_name="Start Dev Server",
description="Start development server",
enabled=True
),
ToolMethod(
name="start_preview_server",
display_name="Start Preview Server",
description="Start preview server for built project",
enabled=True
),
]
),
"sb_templates_tool": ToolGroup(
name="sb_templates_tool",
display_name="Project Templates",
description="Discover and scaffold web project templates",
tool_class="SandboxTemplatesTool",
methods=[
ToolMethod(
name="list_templates",
display_name="List Templates",
description="List available project templates",
enabled=True
),
ToolMethod(
name="scaffold_from_template",
display_name="Scaffold From Template",
description="Create project from template",
enabled=True
),
]
),
"computer_use_tool": ToolGroup(
name="computer_use_tool",
display_name="Computer Automation",
description="Automate computer interactions including GUI control",
tool_class="ComputerUseTool",
methods=[
ToolMethod(
name="screenshot",
display_name="Take Screenshot",
description="Capture screenshot of current screen",
enabled=True
),
ToolMethod(
name="click",
display_name="Click",
description="Click at coordinates or on elements",
enabled=True
),
ToolMethod(
name="type",
display_name="Type Text",
description="Type text into active element",
enabled=True
),
ToolMethod(
name="key",
display_name="Press Keys",
description="Press keyboard keys and shortcuts",
enabled=True
),
ToolMethod(
name="scroll",
display_name="Scroll",
description="Scroll in specified direction",
enabled=True
),
]
),
"message_tool": ToolGroup(
name="message_tool",
display_name="User Communication",
description="Enhanced communication tools for user interaction",
tool_class="MessageTool",
is_core=True,
methods=[
ToolMethod(
name="ask",
display_name="Ask Question",
description="Ask users questions during task execution",
enabled=True,
is_core=True
),
ToolMethod(
name="web_browser_takeover",
display_name="Request Browser Takeover",
description="Request user takeover of browser interaction",
enabled=True
),
ToolMethod(
name="complete",
display_name="Complete Task",
description="Signal task completion and enter complete state",
enabled=True,
is_core=True
),
ToolMethod(
name="wait",
display_name="Wait",
description="Pause execution for specified duration",
enabled=True
),
]
),
}
def get_tool_group(tool_name: str) -> Optional[ToolGroup]:
return TOOL_GROUPS.get(tool_name)
def get_all_tool_groups() -> Dict[str, ToolGroup]:
return TOOL_GROUPS
def get_enabled_methods_for_tool(tool_name: str, config: Dict[str, Any]) -> List[str]:
tool_group = get_tool_group(tool_name)
if not tool_group:
return []
tool_config = config.get(tool_name, True)
if isinstance(tool_config, bool) and not tool_config:
return []
if tool_config is True:
return [method.name for method in tool_group.methods if method.enabled]
if isinstance(tool_config, dict):
if not tool_config.get('enabled', True):
return []
methods_config = tool_config.get('methods', {})
enabled_methods = []
for method in tool_group.methods:
method_enabled = method.enabled
if method.name in methods_config:
method_config = methods_config[method.name]
if isinstance(method_config, bool):
method_enabled = method_config
elif isinstance(method_config, dict):
method_enabled = method_config.get('enabled', method.enabled)
if method_enabled:
enabled_methods.append(method.name)
return enabled_methods
return [method.name for method in tool_group.methods if method.enabled]
def validate_tool_config(config: Dict[str, Any]) -> Dict[str, Any]:
normalized_config = {}
for tool_name, tool_config in config.items():
tool_group = get_tool_group(tool_name)
if not tool_group:
normalized_config[tool_name] = tool_config
continue
if tool_group.is_core:
normalized_config[tool_name] = True
continue
if isinstance(tool_config, bool):
normalized_config[tool_name] = tool_config
elif isinstance(tool_config, dict):
validated_config = {
'enabled': tool_config.get('enabled', True),
'methods': {}
}
methods_config = tool_config.get('methods', {})
for method in tool_group.methods:
if method.name in methods_config:
method_config = methods_config[method.name]
if isinstance(method_config, bool):
validated_config['methods'][method.name] = method_config
elif isinstance(method_config, dict):
validated_config['methods'][method.name] = {
'enabled': method_config.get('enabled', method.enabled)
}
else:
validated_config['methods'][method.name] = method.enabled
else:
validated_config['methods'][method.name] = method.enabled
normalized_config[tool_name] = validated_config
else:
normalized_config[tool_name] = True
return normalized_config