diff --git a/requirements.txt b/requirements.txt index 80dc0d96..defec383 100644 --- a/requirements.txt +++ b/requirements.txt @@ -48,3 +48,25 @@ pytest>=7.4.0,<8.0.0 pytest-cov>=4.1.0,<5.0.0 pytest-mock>=3.11.0,<4.0.0 mypy>=1.5.0,<2.0.0 + +# ─────────────────────────────────────────────────────────────────────── +# Optional dependencies — the code imports these inside try/except +# blocks and gracefully degrades when missing. Install them for the +# full feature set, or skip them for a minimal install. +# ─────────────────────────────────────────────────────────────────────── +# +# scipy — sub-pixel interpolation in +# src/common/scroll_helper.py for smoother +# scrolling. Falls back to a simpler shift algorithm. +# pip install 'scipy>=1.10.0,<2.0.0' +# +# psutil — per-plugin resource monitoring in +# src/plugin_system/resource_monitor.py. The monitor +# silently no-ops when missing (PSUTIL_AVAILABLE = False). +# pip install 'psutil>=5.9.0,<6.0.0' +# +# Flask-Limiter — request rate limiting in web_interface/app.py +# (accidental-abuse protection, not security). The +# web interface starts without rate limiting when +# this is missing. +# pip install 'Flask-Limiter>=3.5.0,<4.0.0'