mirror of
https://github.com/openswarm-ai/openswarm.git
synced 2026-09-11 12:17:45 +02:00
138 lines
5.6 KiB
Python
138 lines
5.6 KiB
Python
"""Browser tool schemas, constants, and system prompt."""
|
|
|
|
BROWSER_TOOLS_SCHEMA = [
|
|
{
|
|
"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."
|
|
),
|
|
"input_schema": {"type": "object", "properties": {}, "required": []},
|
|
},
|
|
{
|
|
"name": "BrowserGetText",
|
|
"description": "Get the visible text content of the browser page. Returns up to 15000 characters.",
|
|
"input_schema": {"type": "object", "properties": {}, "required": []},
|
|
},
|
|
{
|
|
"name": "BrowserNavigate",
|
|
"description": "Navigate the browser to a URL.",
|
|
"input_schema": {
|
|
"type": "object",
|
|
"properties": {"url": {"type": "string", "description": "The URL to navigate to."}},
|
|
"required": ["url"],
|
|
},
|
|
},
|
|
{
|
|
"name": "BrowserClick",
|
|
"description": "Click an element identified by a CSS selector. Use BrowserGetElements first to discover valid selectors.",
|
|
"input_schema": {
|
|
"type": "object",
|
|
"properties": {"selector": {"type": "string", "description": "CSS selector of the element to click."}},
|
|
"required": ["selector"],
|
|
},
|
|
},
|
|
{
|
|
"name": "BrowserType",
|
|
"description": "Type text into an input element. Clears existing value first.",
|
|
"input_schema": {
|
|
"type": "object",
|
|
"properties": {
|
|
"selector": {"type": "string", "description": "CSS selector of the input element."},
|
|
"text": {"type": "string", "description": "The text to type."},
|
|
},
|
|
"required": ["selector", "text"],
|
|
},
|
|
},
|
|
{
|
|
"name": "BrowserEvaluate",
|
|
"description": "Evaluate a JavaScript expression in the browser page and return the result.",
|
|
"input_schema": {
|
|
"type": "object",
|
|
"properties": {"expression": {"type": "string", "description": "JavaScript expression to evaluate."}},
|
|
"required": ["expression"],
|
|
},
|
|
},
|
|
{
|
|
"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."
|
|
),
|
|
"input_schema": {
|
|
"type": "object",
|
|
"properties": {
|
|
"selector": {
|
|
"type": "string",
|
|
"description": "Optional CSS selector to scope the search (e.g. 'form', '#main'). Defaults to 'body'.",
|
|
},
|
|
},
|
|
"required": [],
|
|
},
|
|
},
|
|
{
|
|
"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."
|
|
),
|
|
"input_schema": {
|
|
"type": "object",
|
|
"properties": {
|
|
"direction": {"type": "string", "enum": ["up", "down"], "description": "Scroll direction. Defaults to 'down'."},
|
|
"amount": {"type": "number", "description": "Pixels to scroll. Defaults to 500."},
|
|
},
|
|
"required": [],
|
|
},
|
|
},
|
|
{
|
|
"name": "BrowserWait",
|
|
"description": (
|
|
"Wait for a specified duration. Useful after navigation or actions that "
|
|
"trigger page loads. Min 100ms, max 10000ms."
|
|
),
|
|
"input_schema": {
|
|
"type": "object",
|
|
"properties": {"milliseconds": {"type": "number", "description": "Duration to wait in milliseconds. Defaults to 1000."}},
|
|
"required": [],
|
|
},
|
|
},
|
|
]
|
|
|
|
ACTION_MAP = {
|
|
"BrowserScreenshot": "screenshot",
|
|
"BrowserGetText": "get_text",
|
|
"BrowserNavigate": "navigate",
|
|
"BrowserClick": "click",
|
|
"BrowserType": "type",
|
|
"BrowserEvaluate": "evaluate",
|
|
"BrowserGetElements": "get_elements",
|
|
"BrowserScroll": "scroll",
|
|
"BrowserWait": "wait",
|
|
}
|
|
|
|
SYSTEM_PROMPT = (
|
|
"You are a browser automation agent. You control a single browser tab and "
|
|
"execute the task you are given.\n\n"
|
|
"Strategy:\n"
|
|
"1. Start by taking a screenshot to understand the page.\n"
|
|
"2. After navigation, use BrowserWait (1-3 seconds) to let the page finish loading.\n"
|
|
"3. Use BrowserScroll to scroll through pages — do NOT use BrowserEvaluate with "
|
|
"window.scrollBy() as many sites use nested scroll containers that BrowserScroll "
|
|
"handles automatically.\n"
|
|
"4. Use BrowserGetElements BEFORE clicking or typing to discover valid CSS selectors.\n"
|
|
"5. After performing actions, take a screenshot to verify the result.\n"
|
|
"6. If an action fails, try alternative selectors or approaches.\n"
|
|
"7. When the task is complete, provide a clear summary of what you accomplished.\n\n"
|
|
"Important notes:\n"
|
|
"- BrowserGetText returns up to 15000 chars of visible text — use it to read page content.\n"
|
|
"- BrowserScroll returns position info including atTop/atBottom — use this to know when "
|
|
"you've reached the end of the page.\n"
|
|
"- For complex SPAs (Notion, Gmail, etc.), prefer BrowserScroll over BrowserEvaluate for scrolling.\n"
|
|
"- Avoid looping: if scrolling shows no new content (scrolled 0px), you're at the boundary.\n\n"
|
|
"You have access ONLY to browser tools. Do not ask the user questions — "
|
|
"complete the task autonomously to the best of your ability."
|
|
)
|
|
|
|
MAX_TURNS = 25
|