[build-system] requires = ["hatchling"] build-backend = "hatchling.build" [project] name = "billo-release-agent" version = "0.1.0" description = "LangGraph-based release automation agent for Billo" requires-python = ">=3.12" dependencies = [ "langgraph>=0.3.30", "langgraph-checkpoint-postgres>=2.0.15", "fastapi>=0.115.0", "uvicorn[standard]>=0.34.0", "httpx>=0.28.0", "anthropic>=0.52.0", "pydantic>=2.11.0", "pydantic-settings>=2.8.0", "psycopg[binary]>=3.2.0", "psycopg-pool>=3.2.0", ] [project.optional-dependencies] dev = [ "pytest>=8.3.0", "pytest-asyncio>=0.25.0", "pytest-cov>=6.1.0", "ruff>=0.11.0", "psycopg[binary]>=3.2.0", "psycopg-pool>=3.2.0", ] [tool.hatch.build.targets.wheel] packages = ["src/release_agent"] [tool.pytest.ini_options] testpaths = ["tests"] asyncio_mode = "auto" pythonpath = ["."] addopts = "--cov=src/release_agent --cov-report=term-missing --cov-fail-under=80" [tool.coverage.run] source = ["src/release_agent"] [tool.coverage.report] exclude_lines = [ "pragma: no cover", "if TYPE_CHECKING:", "raise NotImplementedError", ] [tool.ruff] line-length = 100 target-version = "py312" [tool.ruff.lint] select = ["E", "F", "I", "N", "UP", "B", "SIM"] ignore = ["E501"]