| """ |
| WebArena (Docker) Login Helper for MCPMark |
| ========================================== |
| |
| This helper exposes basic browser configuration for agents. Authentication is |
| not required for the public WebArena environment; isolation is handled via |
| Docker containerization in the state manager. |
| """ |
|
|
| from __future__ import annotations |
|
|
| from pathlib import Path |
| from typing import Optional |
|
|
| from src.base.login_helper import BaseLoginHelper |
| from src.logger import get_logger |
|
|
| logger = get_logger(__name__) |
|
|
|
|
| class PlaywrightLoginHelper(BaseLoginHelper): |
| """ |
| Minimal login helper. It does not launch browsers; that is handled by |
| the Playwright MCP client. It simply exposes configuration parameters such |
| as headless mode and an optional storage state file path. |
| """ |
|
|
| def __init__( |
| self, |
| *, |
| browser: str = "chromium", |
| headless: bool = True, |
| state_path: Optional[str | Path] = None, |
| base_url: Optional[str] = None, |
| ) -> None: |
| super().__init__() |
| self.browser_name = browser |
| self.headless = headless |
| self.state_path = ( |
| Path(state_path or Path.cwd() / "playwright_state.json") |
| .expanduser() |
| .resolve() |
| ) |
| self.base_url = base_url |
| logger.info( |
| "Initialized WebArenaLoginHelper (browser=%s, headless=%s)", |
| browser, |
| headless, |
| ) |
|
|
| def login(self, **kwargs) -> bool: |
| """ |
| No-op login. For WebArena we don't need credentials; we only provide |
| configuration for the MCP to open a browser. |
| """ |
| logger.info("WebArenaLoginHelper login: no-op") |
| return True |
|
|
| def is_authenticated(self) -> bool: |
| return True |
|
|
| def get_credentials(self) -> dict: |
| return { |
| "browser": self.browser_name, |
| "headless": self.headless, |
| "state_path": str(self.state_path), |
| "base_url": self.base_url, |
| } |
|
|
| def close(self) -> None: |
| |
| pass |
|
|