Files
Timmy-time-dashboard/pyproject.toml
Alexander Payne ca60483268 feat: pytest-cov configuration and test audit cleanup
Add full pytest-cov configuration with fail_under=60% threshold,
HTML/XML report targets, and proper exclude_lines. Fix websocket
history test to use public broadcast() API instead of manually
manipulating internals. Audit confirmed 491 tests at 71.2% coverage.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-22 20:42:58 -05:00

110 lines
2.3 KiB
TOML

[build-system]
requires = ["hatchling"]
build-backend = "hatchling.build"
[project]
name = "timmy-time"
version = "1.0.0"
description = "Mission Control for sovereign AI agents"
readme = "README.md"
requires-python = ">=3.11"
license = { text = "MIT" }
dependencies = [
"agno[sqlite]>=1.4.0",
"ollama>=0.3.0",
"openai>=1.0.0",
"fastapi>=0.115.0",
"uvicorn[standard]>=0.32.0",
"jinja2>=3.1.0",
"httpx>=0.27.0",
"python-multipart>=0.0.12",
"aiofiles>=24.0.0",
"typer>=0.12.0",
"rich>=13.0.0",
"pydantic-settings>=2.0.0",
"websockets>=12.0",
]
[project.optional-dependencies]
dev = [
"pytest>=8.0.0",
"pytest-asyncio>=0.24.0",
"pytest-cov>=5.0.0",
]
# Big-brain: run 8B / 70B / 405B models locally via layer-by-layer loading.
# pip install ".[bigbrain]"
# On Apple Silicon: pip install "airllm[mlx]" for the MLX-accelerated backend.
bigbrain = [
"airllm>=2.9.0",
]
# Swarm: Redis-backed pub/sub for multi-agent communication.
# pip install ".[swarm]"
swarm = [
"redis>=5.0.0",
]
# Voice: text-to-speech output via pyttsx3.
# pip install ".[voice]"
voice = [
"pyttsx3>=2.90",
]
# Telegram: bridge Telegram messages to Timmy via python-telegram-bot.
# pip install ".[telegram]"
telegram = [
"python-telegram-bot>=21.0",
]
[project.scripts]
timmy = "timmy.cli:main"
timmy-serve = "timmy_serve.cli:main"
self-tdd = "self_tdd.watchdog:main"
[tool.hatch.build.targets.wheel]
sources = {"src" = ""}
include = [
"src/timmy",
"src/timmy_serve",
"src/dashboard",
"src/config.py",
"src/self_tdd",
"src/swarm",
"src/websocket",
"src/voice",
"src/notifications",
"src/shortcuts",
"src/telegram_bot",
]
[tool.pytest.ini_options]
testpaths = ["tests"]
pythonpath = ["src"]
asyncio_mode = "auto"
asyncio_default_fixture_loop_scope = "function"
addopts = "-v --tb=short"
[tool.coverage.run]
source = ["src"]
omit = [
"*/tests/*",
"src/dashboard/routes/mobile_test.py",
]
[tool.coverage.report]
show_missing = true
skip_empty = true
precision = 1
exclude_lines = [
"pragma: no cover",
"if __name__ == .__main__.",
"if TYPE_CHECKING:",
"raise NotImplementedError",
"@abstractmethod",
]
# Fail CI if coverage drops below this threshold
fail_under = 60
[tool.coverage.html]
directory = "htmlcov"
[tool.coverage.xml]
output = "coverage.xml"