Files
openswarm/backend/apps/tools_lib/models.py
T
ciregenz 1b6d747326 [eric] merge #107 (pierre): app-use OPENSWARM_APP bridge + AppAgent
# Conflicts:
#	electron/main.js
#	frontend/src/app/pages/Views/ViewPreview.tsx
2026-06-29 21:34:11 -07:00

104 lines
7.1 KiB
Python

from pydantic import BaseModel, Field
from typing import Optional, Any
from uuid import uuid4
class BuiltinTool(BaseModel):
name: str
display_name: Optional[str] = None
description: str
category: str = "filesystem"
deferred: bool = False
BUILTIN_TOOLS: list[BuiltinTool] = [
# Core tools (always loaded)
BuiltinTool(name="Read", description="Read files and directories from the filesystem", category="filesystem"),
BuiltinTool(name="Edit", description="Make targeted edits to existing files using search and replace", category="filesystem"),
BuiltinTool(name="Write", description="Create new files or overwrite existing files", category="filesystem"),
BuiltinTool(name="Bash", description="Execute shell commands in a terminal", category="system"),
BuiltinTool(name="Glob", description="Find files matching glob and wildcard patterns", category="search"),
BuiltinTool(name="Grep", description="Search file contents using regular expressions", category="search"),
BuiltinTool(name="AskUserQuestion", description="Ask the user a question and wait for their response", category="interaction"),
# Deferred tools (loaded via ToolSearch on demand)
BuiltinTool(name="WebSearch", description="Search the web for real-time information", category="search", deferred=True),
BuiltinTool(name="WebFetch", description="Fetch and read content from a URL", category="search", deferred=True),
BuiltinTool(name="NotebookEdit", description="Edit Jupyter notebook cells", category="filesystem", deferred=True),
BuiltinTool(name="TodoWrite", description="Write and manage a structured todo list", category="planning", deferred=True),
BuiltinTool(name="EnterPlanMode", description="Enter plan mode for designing solutions", category="planning", deferred=True),
BuiltinTool(name="ExitPlanMode", description="Exit plan mode and return to execution", category="planning", deferred=True),
BuiltinTool(name="EnterWorktree", description="Enter a git worktree for isolated work", category="system", deferred=True),
BuiltinTool(name="TaskOutput", description="Read output from a background task", category="system", deferred=True),
BuiltinTool(name="TaskStop", description="Stop a running background task", category="system", deferred=True),
BuiltinTool(name="CronCreate", description="Create a scheduled or recurring task", category="scheduling", deferred=True),
BuiltinTool(name="CronList", description="List all scheduled tasks", category="scheduling", deferred=True),
BuiltinTool(name="CronDelete", description="Delete a scheduled task", category="scheduling", deferred=True),
# Skills
BuiltinTool(name="Skill", description="Load an installed skill's instructions on demand so the agent can find and use the right skill itself", category="skills"),
# Agent tools
BuiltinTool(name="Agent", display_name="CreateAgent", description="Spawn a sub-agent to handle a complex subtask", category="agents"),
BuiltinTool(name="InvokeAgent", description="Invoke a copy of an existing agent with a new message, preserving full conversation context", category="agents"),
# Browser delegation tools (Layer 1, what the main agent calls)
BuiltinTool(name="CreateBrowserAgent", description="Create a new browser and run a task on it", category="browser_delegation"),
BuiltinTool(name="BrowserAgent", description="Delegate a browser task to an existing browser agent", category="browser_delegation"),
BuiltinTool(name="BrowserAgents", description="Run multiple browser tasks in parallel on existing browsers", category="browser_delegation"),
BuiltinTool(name="AppAgent", description="Operate one of the user's OpenSwarm-built apps through its native bridge or native input", category="browser_delegation"),
# Browser action tools (Layer 2, what the sub-agent executes)
BuiltinTool(name="BrowserScreenshot", description="Capture a screenshot of the browser page", category="browser_action"),
BuiltinTool(name="BrowserNavigate", description="Navigate the browser to a URL", category="browser_action"),
BuiltinTool(name="BrowserClick", description="Click an element by CSS selector", category="browser_action"),
BuiltinTool(name="BrowserType", description="Type text into an input element", category="browser_action"),
BuiltinTool(name="BrowserEvaluate", description="Execute JavaScript in the browser", category="browser_action"),
BuiltinTool(name="BrowserGetText", description="Get visible text content of the page", category="browser_action"),
BuiltinTool(name="BrowserGetElements", description="List interactive elements with CSS selectors", category="browser_action"),
BuiltinTool(name="BrowserScroll", description="Scroll the page up or down", category="browser_action"),
BuiltinTool(name="BrowserWait", description="Wait for page loads or animations", category="browser_action"),
BuiltinTool(name="BrowserPressKey", description="Press a keyboard key (native event, works on sites that ignore JS-dispatched events)", category="browser_action"),
BuiltinTool(name="BrowserListInteractives", description="List interactive elements via the accessibility tree (works on hostile sites with no semantic HTML)", category="browser_action"),
BuiltinTool(name="BrowserClickIndex", description="Click an element by its index from BrowserListInteractives (uses native mouse events)", category="browser_action"),
BuiltinTool(name="BrowserBatch", description="Run a sequence of browser actions in one tool call with URL-change abort guard", category="browser_action"),
BuiltinTool(name="ReportProgress", description="Record evaluation of previous action, working memory, and next goal (required before action tools)", category="browser_action"),
BuiltinTool(name="RequestHumanIntervention", description="Pause the browser agent and ask the user for help (login, captcha, 2FA, etc.)", category="browser_action"),
]
class ToolDefinition(BaseModel):
model_config = {"extra": "ignore"}
id: str = Field(default_factory=lambda: uuid4().hex)
name: str
description: str = ""
command: str = ""
mcp_config: dict[str, Any] = Field(default_factory=dict)
credentials: dict[str, str] = Field(default_factory=dict)
auth_type: str = "none"
auth_status: str = "none"
oauth_tokens: dict[str, Any] = Field(default_factory=dict)
tool_permissions: dict[str, Any] = Field(default_factory=dict)
connected_account_email: Optional[str] = None
enabled: bool = True
class ToolCreate(BaseModel):
name: str
description: str = ""
command: str = ""
mcp_config: dict[str, Any] = Field(default_factory=dict)
credentials: dict[str, str] = Field(default_factory=dict)
auth_type: str = "none"
auth_status: str = "none"
class ToolUpdate(BaseModel):
name: Optional[str] = None
description: Optional[str] = None
command: Optional[str] = None
mcp_config: Optional[dict[str, Any]] = None
credentials: Optional[dict[str, str]] = None
auth_type: Optional[str] = None
auth_status: Optional[str] = None
oauth_tokens: Optional[dict[str, Any]] = None
tool_permissions: Optional[dict[str, Any]] = None
connected_account_email: Optional[str] = None
enabled: Optional[bool] = None