diff --git a/autobot-backend/skills/builtin/browser_automation.py b/autobot-backend/skills/builtin/browser_automation.py deleted file mode 100644 index a6a2aef2b..000000000 --- a/autobot-backend/skills/builtin/browser_automation.py +++ /dev/null @@ -1,121 +0,0 @@ -# AutoBot - AI-Powered Automation Platform -# Copyright (c) 2025 mrveiss -# Author: mrveiss -""" -Browser Automation Skill (Issue #731) - -Web scraping, form filling, and browser-based automation -using Playwright integration. -""" - -import logging -from typing import Any, Dict - -from skills.base_skill import BaseSkill, SkillConfigField, SkillManifest - -logger = logging.getLogger(__name__) - - -class BrowserAutomationSkill(BaseSkill): - """Browser automation for web scraping and interaction.""" - - @staticmethod - def get_manifest() -> SkillManifest: - """Return browser automation manifest.""" - return SkillManifest( - name="browser-automation", - version="1.0.0", - description="Web scraping and browser automation via Playwright", - author="mrveiss", - category="automation", - dependencies=[], - config={ - "headless": SkillConfigField( - type="bool", - default=True, - description="Run browser in headless mode", - ), - "timeout_ms": SkillConfigField( - type="int", - default=30000, - description="Default navigation timeout in milliseconds", - ), - "browser": SkillConfigField( - type="string", - default="chromium", - description="Browser engine to use", - choices=["chromium", "firefox", "webkit"], - ), - }, - tools=[ - "scrape_page", - "fill_form", - "take_screenshot", - ], - triggers=["url_requested"], - tags=["browser", "scraping", "automation", "playwright", "web"], - ) - - async def execute(self, action: str, params: Dict[str, Any]) -> Dict[str, Any]: - """Execute browser automation action.""" - handlers = { - "scrape_page": self._scrape_page, - "fill_form": self._fill_form, - "take_screenshot": self._take_screenshot, - } - handler = handlers.get(action) - if not handler: - return {"success": False, "error": f"Unknown action: {action}"} - return await handler(params) - - async def _scrape_page(self, params: Dict[str, Any]) -> Dict[str, Any]: - """Scrape content from a web page. - - Helper for execute (Issue #731). - """ - url = params.get("url") - if not url: - return {"success": False, "error": "url is required"} - - return { - "success": True, - "url": url, - "headless": self._config.get("headless", True), - "browser": self._config.get("browser", "chromium"), - "status": "queued", - "message": f"Page scrape queued for {url}", - } - - async def _fill_form(self, params: Dict[str, Any]) -> Dict[str, Any]: - """Fill and submit a web form. - - Helper for execute (Issue #731). - """ - url = params.get("url") - fields = params.get("fields", {}) - if not url: - return {"success": False, "error": "url is required"} - - return { - "success": True, - "url": url, - "field_count": len(fields), - "status": "queued", - "message": f"Form fill queued for {url}", - } - - async def _take_screenshot(self, params: Dict[str, Any]) -> Dict[str, Any]: - """Take a screenshot of a web page. - - Helper for execute (Issue #731). - """ - url = params.get("url") - if not url: - return {"success": False, "error": "url is required"} - - return { - "success": True, - "url": url, - "status": "queued", - "message": f"Screenshot queued for {url}", - }