summaryrefslogtreecommitdiff
path: root/tools.go
diff options
context:
space:
mode:
Diffstat (limited to 'tools.go')
-rw-r--r--tools.go225
1 files changed, 225 insertions, 0 deletions
diff --git a/tools.go b/tools.go
index a9bb9c0..715701b 100644
--- a/tools.go
+++ b/tools.go
@@ -1362,6 +1362,18 @@ var fnMap = map[string]fnSig{
"todo_update": todoUpdate,
"todo_delete": todoDelete,
"summarize_chat": summarizeChat,
+ // playwright tools
+ "pw_start": pwStart,
+ "pw_stop": pwStop,
+ "pw_is_running": pwIsRunning,
+ "pw_navigate": pwNavigate,
+ "pw_click": pwClick,
+ "pw_fill": pwFill,
+ "pw_extract_text": pwExtractText,
+ "pw_screenshot": pwScreenshot,
+ "pw_screenshot_and_view": pwScreenshotAndView,
+ "pw_wait_for_selector": pwWaitForSelector,
+ "pw_drag": pwDrag,
}
func registerWindowTools() {
@@ -1958,4 +1970,217 @@ func init() {
},
)
}
+ if browserAvailable {
+ baseTools = append(baseTools,
+ models.Tool{
+ Type: "function",
+ Function: models.ToolFunc{
+ Name: "pw_start",
+ Description: "Start a Playwright browser instance. Call this first before using other pw_ tools. Uses headless mode by default (set PlaywrightHeadless=false in config for GUI).",
+ Parameters: models.ToolFuncParams{
+ Type: "object",
+ Required: []string{},
+ Properties: map[string]models.ToolArgProps{},
+ },
+ },
+ },
+ models.Tool{
+ Type: "function",
+ Function: models.ToolFunc{
+ Name: "pw_stop",
+ Description: "Stop the Playwright browser instance. Call when done with browser automation.",
+ Parameters: models.ToolFuncParams{
+ Type: "object",
+ Required: []string{},
+ Properties: map[string]models.ToolArgProps{},
+ },
+ },
+ },
+ models.Tool{
+ Type: "function",
+ Function: models.ToolFunc{
+ Name: "pw_is_running",
+ Description: "Check if Playwright browser is currently running.",
+ Parameters: models.ToolFuncParams{
+ Type: "object",
+ Required: []string{},
+ Properties: map[string]models.ToolArgProps{},
+ },
+ },
+ },
+ models.Tool{
+ Type: "function",
+ Function: models.ToolFunc{
+ Name: "pw_navigate",
+ Description: "Navigate to a URL in the browser.",
+ Parameters: models.ToolFuncParams{
+ Type: "object",
+ Required: []string{"url"},
+ Properties: map[string]models.ToolArgProps{
+ "url": models.ToolArgProps{
+ Type: "string",
+ Description: "URL to navigate to",
+ },
+ },
+ },
+ },
+ },
+ models.Tool{
+ Type: "function",
+ Function: models.ToolFunc{
+ Name: "pw_click",
+ Description: "Click on an element using CSS selector. Use 'index' for multiple matches (default 0).",
+ Parameters: models.ToolFuncParams{
+ Type: "object",
+ Required: []string{"selector"},
+ Properties: map[string]models.ToolArgProps{
+ "selector": models.ToolArgProps{
+ Type: "string",
+ Description: "CSS selector for the element to click",
+ },
+ "index": models.ToolArgProps{
+ Type: "string",
+ Description: "optional index for multiple matches (default 0)",
+ },
+ },
+ },
+ },
+ },
+ models.Tool{
+ Type: "function",
+ Function: models.ToolFunc{
+ Name: "pw_fill",
+ Description: "Fill an input field with text using CSS selector.",
+ Parameters: models.ToolFuncParams{
+ Type: "object",
+ Required: []string{"selector", "text"},
+ Properties: map[string]models.ToolArgProps{
+ "selector": models.ToolArgProps{
+ Type: "string",
+ Description: "CSS selector for the input element",
+ },
+ "text": models.ToolArgProps{
+ Type: "string",
+ Description: "text to fill into the input",
+ },
+ "index": models.ToolArgProps{
+ Type: "string",
+ Description: "optional index for multiple matches (default 0)",
+ },
+ },
+ },
+ },
+ },
+ models.Tool{
+ Type: "function",
+ Function: models.ToolFunc{
+ Name: "pw_extract_text",
+ Description: "Extract text content from the page or specific elements using CSS selector. Use 'body' for all page text.",
+ Parameters: models.ToolFuncParams{
+ Type: "object",
+ Required: []string{"selector"},
+ Properties: map[string]models.ToolArgProps{
+ "selector": models.ToolArgProps{
+ Type: "string",
+ Description: "CSS selector (use 'body' for all page text)",
+ },
+ },
+ },
+ },
+ },
+ models.Tool{
+ Type: "function",
+ Function: models.ToolFunc{
+ Name: "pw_screenshot",
+ Description: "Take a screenshot of the page or a specific element. Returns file path to saved image.",
+ Parameters: models.ToolFuncParams{
+ Type: "object",
+ Required: []string{},
+ Properties: map[string]models.ToolArgProps{
+ "selector": models.ToolArgProps{
+ Type: "string",
+ Description: "optional CSS selector for element to screenshot",
+ },
+ "full_page": models.ToolArgProps{
+ Type: "string",
+ Description: "optional: 'true' to capture full page (default false)",
+ },
+ },
+ },
+ },
+ },
+ models.Tool{
+ Type: "function",
+ Function: models.ToolFunc{
+ Name: "pw_screenshot_and_view",
+ Description: "Take a screenshot and return the image for viewing. Use when model needs to see the screenshot.",
+ Parameters: models.ToolFuncParams{
+ Type: "object",
+ Required: []string{},
+ Properties: map[string]models.ToolArgProps{
+ "selector": models.ToolArgProps{
+ Type: "string",
+ Description: "optional CSS selector for element to screenshot",
+ },
+ "full_page": models.ToolArgProps{
+ Type: "string",
+ Description: "optional: 'true' to capture full page (default false)",
+ },
+ },
+ },
+ },
+ },
+ models.Tool{
+ Type: "function",
+ Function: models.ToolFunc{
+ Name: "pw_wait_for_selector",
+ Description: "Wait for an element to appear on the page.",
+ Parameters: models.ToolFuncParams{
+ Type: "object",
+ Required: []string{"selector"},
+ Properties: map[string]models.ToolArgProps{
+ "selector": models.ToolArgProps{
+ Type: "string",
+ Description: "CSS selector to wait for",
+ },
+ "timeout": models.ToolArgProps{
+ Type: "string",
+ Description: "optional timeout in ms (default 30000)",
+ },
+ },
+ },
+ },
+ },
+ models.Tool{
+ Type: "function",
+ Function: models.ToolFunc{
+ Name: "pw_drag",
+ Description: "Drag the mouse from one point to another.",
+ Parameters: models.ToolFuncParams{
+ Type: "object",
+ Required: []string{"x1", "y1", "x2", "y2"},
+ Properties: map[string]models.ToolArgProps{
+ "x1": models.ToolArgProps{
+ Type: "string",
+ Description: "starting X coordinate",
+ },
+ "y1": models.ToolArgProps{
+ Type: "string",
+ Description: "starting Y coordinate",
+ },
+ "x2": models.ToolArgProps{
+ Type: "string",
+ Description: "ending X coordinate",
+ },
+ "y2": models.ToolArgProps{
+ Type: "string",
+ Description: "ending Y coordinate",
+ },
+ },
+ },
+ },
+ },
+ )
+ toolSysMsg += browserToolSysMsg
+ }
}