[project]
name = "openbrowser-ai"
dynamic = ["version"]
description = "Agentic browser automation using LangGraph and raw CDP"
readme = "README.md"
requires-python = ">=3.12"
dependencies = [
    "langgraph",
    "langchain-core>=0.3.0",
    "langchain-openai>=0.2.0",
    "pydantic>=2.0.0",
    "pydantic-settings>=2.0.0",
    "playwright",
    "python-dotenv",
    "httpx>=0.28.1",
    "websockets>=15.0.1",
    "aiofiles",
    "cdp-use",
    "google-genai>=0.2.0",
    "bubus>=1.5.6",
    "litellm==1.80.0",
    "pillow>=11.0.0",
    "rich>=13.0.0",
    "click>=8.1.8",
    "psutil>=7.2.0",
    "markdownify>=0.11.6",
    "imageio>=2.37.2",
    "imageio-ffmpeg>=0.6.0",
    "numpy>=2.4.0",
    "openai>=1.99.5,<2.0.0",
    "browser-use==0.9.5",
]

[project.optional-dependencies]
cli = ["textual>=3.2.0"]
video = ["imageio[ffmpeg]", "numpy"]
anthropic = ["anthropic>=0.68.0"]
groq = ["groq>=0.30.0"]
ollama = ["ollama>=0.5.1"]
aws = ["boto3"]
azure = ["openai"]
telemetry = ["posthog>=3.7.0"]
pdf = ["pypdf", "reportlab"]
dev = [
    "pytest>=9.0.2",
    "pytest-asyncio>=1.0.0",
    "pytest-cov>=6.0.0",
]
all = [
    "textual>=3.2.0",
    "imageio[ffmpeg]",
    "numpy",
    "anthropic>=0.68.0",
    "groq>=0.30.0",
    "ollama>=0.5.1",
    "boto3",
    "posthog>=3.7.0",
    "pypdf",
    "reportlab",
]

[project.scripts]
openbrowser-ai = "openbrowser.cli:main"

[build-system]
requires = ["hatchling", "hatch-vcs"]
build-backend = "hatchling.build"

[tool.hatch.version]
source = "vcs"

[tool.hatch.build.targets.wheel]
packages = ["src/openbrowser"]

# Include non-Python files (markdown system prompts) in the wheel
artifacts = [
    "*.md",
]

[tool.pytest.ini_options]
testpaths = ["tests"]
pythonpath = ["."]
asyncio_mode = "auto"
asyncio_default_fixture_loop_scope = "function"
asyncio_default_test_loop_scope = "function"
markers = [
    "asyncio: mark tests as async tests",
]
