# Full pinned dependency set for the dev clone, CI, and the Docker image —
# i.e. everything, including all optional features. PyPI / pipx consumers
# get a LEANER default and opt into extras instead (see pyproject.toml
# [project.optional-dependencies]):
#
#   pip install watchtower-podman           # lean: API + DB + Podman + deploy
#   pip install 'watchtower-podman[ssh]'     # + SSH/rsync deploys (fabric)
#   pip install 'watchtower-podman[agent]'   # + LLM agent / self-heal (openai)
#   pip install 'watchtower-podman[queue]'   # + durable build queue (redis/rq)
#   pip install 'watchtower-podman[all]'     # the same full set as this file
#
# The fabric / openai / redis / rq lines below are the optional ones; they
# stay here so the dev clone and CI always exercise every code path.

# Core
fastapi==0.115.0
uvicorn==0.29.0
# Required by FastAPI to parse multipart/form-data (photo-backup file uploads
# in api/photos.py). Declared in pyproject too — MUST stay here because the
# packaged desktop bundle installs deps from THIS file, and without it the
# backend crashes at startup when FastAPI registers the upload route.
python-multipart==0.0.28
# Note: `[standard]` extras (uvloop, httptools, watchfiles) gave a small
# perf win on Linux/Mac but uvloop has no Windows wheels. When the
# Release workflow's Linux runner builds the win_amd64 Python bundle,
# pip evaluates the marker against the build host (Linux) instead of
# the target, tries to install uvloop, and fails. The perf gain isn't
# worth blocking Windows installer releases.
pydantic==2.5.0
pydantic-settings==2.1.0
python-dotenv==1.0.0

# Database
sqlalchemy==2.0.23
psycopg2-binary==2.9.9
alembic==1.13.1

# Utilities
pyyaml>=6.0
apscheduler>=3.10.0
requests==2.31.0
# podman Python SDK only has Linux binaries — skip on macOS/Windows
podman==5.0.0; sys_platform == "linux"

# HTTP client (used in tests and health checks)
httpx==0.25.2

# Rate limiting — protects auth and webhook endpoints from brute force /
# DoS even on single-operator installs without a CDN/WAF in front.
slowapi>=0.1.9

# ── Optional features (pyproject extras; lazy-imported in code) ───────────────
# Present here so the dev clone / CI / Docker image exercise every path.
# Lean PyPI installs skip these unless the matching extra is requested.

# [ssh] SSH/rsync deploys (legacy JSON-file path). The DB-path deploy
# runner uses plain ssh/rsync, so fabric is only for watchtower-deploy.
fabric==3.2.2

# [queue] Durable build queue. watchtower.queue falls back to in-process
# execution when REDIS_URL is unset, so dev / desktop installs without
# Redis still work.
redis==5.0.1
rq==1.16.2

# [agent] LLM agent — talks to ANY OpenAI-compatible chat-completions
# endpoint (Ollama, LM Studio, vLLM, llama.cpp, OpenAI, OpenRouter,
# LiteLLM, etc.). WatchTower itself is provider-agnostic.
openai>=1.50.0
