pyyaml<7,>=6.0
tomli<3,>=2.3
tomli-w<2,>=1.0
python-box<8,>=7.3
typer<1,>=0.19
click<9,>=8.3
rich<15,>=14.2
structlog<26,>=25.0
aiosqlite<1,>=0.21
aiosmtplib<5,>=4.0
websockets<16,>=15.0
jinja2<4,>=3.1.5
humanize<5,>=4.11
httpx<1,>=0.28
authlib<2,>=1.6.9
pendulum<4,>=3.0

[all]
pytest<9,>=8.4
pytest-cov<8,>=7.0
pytest-asyncio<2,>=1.2
ruff<1,>=0.14
mypy<2,>=1.18
types-PyYAML<7,>=6.0
sphinx<9,>=8.1
furo<2026,>=2025.9
myst-parser<5,>=4.0
sphinx-autodoc-typehints<4,>=3.0
sphinx-togglebutton<1,>=0.3
sphinx-design<0.7,>=0.6
build<2,>=1.3
twine<7,>=6.2
tox<5,>=4.31
pre-commit<5,>=4.0
boto3<2,>=1.35
moto[ses]<6,>=5.0
awscli-local<1,>=0.22

[build]
build<2,>=1.3
twine<7,>=6.2

[db-crypto]
sqlcipher3<1,>=0.5

[dev]
pytest<9,>=8.4
pytest-cov<8,>=7.0
pytest-asyncio<2,>=1.2
ruff<1,>=0.14
mypy<2,>=1.18
types-PyYAML<7,>=6.0
pre-commit<5,>=4.0
boto3<2,>=1.35
moto[ses]<6,>=5.0

[docs]
sphinx<9,>=8.1
furo<2026,>=2025.9
myst-parser<5,>=4.0
sphinx-autodoc-typehints<4,>=3.0
sphinx-togglebutton<1,>=0.3
sphinx-design<0.7,>=0.6

[infra-tools]
awscli-local<1,>=0.22

[ses]
boto3<2,>=1.35

[textual]
textual<7,>=6.3

[tox]
tox<5,>=4.31
