[tool.black] line-length = 100 target-version = ["py312"] extend-exclude = '(\.venv|alembic/versions)' [tool.isort] profile = "black" line_length = 100 skip = [".venv", "alembic/versions"] [project] name = "openclaw-agency-backend" version = "0.1.0" requires-python = ">=3.12" dependencies = [ "fastapi==0.128.0", "uvicorn[standard]==0.30.6", "sqlmodel==0.0.22", "sqlalchemy[asyncio]==2.0.34", "alembic==1.13.2", "psycopg[binary]==3.3.2", "pydantic-settings==2.5.2", "python-dotenv==1.0.1", "websockets==12.0", "rq==1.16.2", "redis==5.1.1", "fastapi-clerk-auth==0.0.9", "sse-starlette==2.1.3", "jinja2==3.1.6", "fastapi-pagination==0.15.9", ] [project.optional-dependencies] dev = [ "black==24.10.0", "flake8==7.1.1", "httpx==0.27.0", "isort==5.13.2", "mypy==1.11.2", "pytest==8.3.3", "pytest-asyncio==0.24.0", "pytest-cov==6.0.0", "coverage[toml]==7.6.10", "ruff==0.6.9", ] [tool.mypy] python_version = "3.12" strict = true plugins = ["pydantic.mypy"] files = ["app", "scripts"] mypy_path = ["typings"] show_error_codes = true [tool.pytest.ini_options] asyncio_default_fixture_loop_scope = "function" [tool.coverage.run] branch = true source = ["app"] # Migrations are generated artifacts; testing them doesn't add coverage signal. omit = ["alembic/versions/*"] [tool.coverage.report] show_missing = true skip_covered = true # NOTE: Current baseline coverage is low; we publish coverage.xml in CI but # don't fail the build until the test suite expands. Tighten toward 100% in # follow-up PRs as coverage grows. fail_under = 0