feat: add browser automation tool using Vercel agent-browser

- Add src/tools/browser.rs with BrowserTool implementation
- Wraps agent-browser CLI for AI-optimized web browsing
- Supports: open, snapshot, click, fill, type, screenshot, wait, etc.
- Uses refs (@e1, @e2) from accessibility snapshots for precise element selection
- JSON output mode for LLM integration
- Security: allowlist-only domains, blocks private/local hosts
- Add session_name to BrowserConfig for persistent sessions
- Register BrowserTool in tools/mod.rs alongside BrowserOpenTool

All tests pass.
This commit is contained in:
argenis de la rosa 2026-02-14 15:46:36 -05:00
parent 153d6ff149
commit 554f6e9ea5
5 changed files with 1084 additions and 15 deletions

View file

@ -1,3 +1,4 @@
pub mod browser;
pub mod browser_open;
pub mod composio;
pub mod file_read;
@ -8,6 +9,7 @@ pub mod memory_store;
pub mod shell;
pub mod traits;
pub use browser::BrowserTool;
pub use browser_open::BrowserOpenTool;
pub use composio::ComposioTool;
pub use file_read::FileReadTool;
@ -50,10 +52,17 @@ pub fn all_tools(
];
if browser_config.enabled {
// Add legacy browser_open tool for simple URL opening
tools.push(Box::new(BrowserOpenTool::new(
security.clone(),
browser_config.allowed_domains.clone(),
)));
// Add full browser automation tool (agent-browser)
tools.push(Box::new(BrowserTool::new(
security.clone(),
browser_config.allowed_domains.clone(),
browser_config.session_name.clone(),
)));
}
if let Some(key) = composio_key {
@ -92,6 +101,7 @@ mod tests {
let browser = BrowserConfig {
enabled: false,
allowed_domains: vec!["example.com".into()],
session_name: None,
};
let tools = all_tools(&security, mem, None, &browser);
@ -113,6 +123,7 @@ mod tests {
let browser = BrowserConfig {
enabled: true,
allowed_domains: vec!["example.com".into()],
session_name: None,
};
let tools = all_tools(&security, mem, None, &browser);