Files
Timmy-time-dashboard/pyproject.toml
Alexander Whitestone 51140fb7f0 test: remove hardcoded sleeps, add pytest-timeout (#69)
- Replace fixed time.sleep() calls with intelligent polling or WebDriverWait
- Add pytest-timeout dependency and --timeout=30 to prevent hangs
- Fixes test flakiness and improves test suite speed

Co-authored-by: Alexander Payne <apayne@MM.local>
2026-02-26 22:52:36 -05:00

141 lines
3.2 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",
"GitPython>=3.1.40",
"moviepy>=2.0.0",
"requests>=2.31.0",
]
[project.optional-dependencies]
dev = [
"pytest>=8.0.0",
"pytest-asyncio>=0.24.0",
"pytest-cov>=5.0.0",
"pytest-timeout>=2.3.0",
"selenium>=4.20.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",
]
# Discord: bridge Discord messages to Timmy with native thread support.
# pip install ".[discord]"
# Optional: pip install pyzbar Pillow (for QR code invite detection)
discord = [
"discord.py>=2.3.0",
]
# Creative: GPU-accelerated image, music, and video generation.
# pip install ".[creative]"
creative = [
"diffusers>=0.30.0",
"transformers>=4.40.0",
"accelerate>=0.30.0",
"torch>=2.2.0",
"safetensors>=0.4.0",
"ace-step>=1.5.0",
]
[project.scripts]
timmy = "timmy.cli:main"
timmy-serve = "timmy_serve.cli:main"
self-tdd = "self_coding.self_tdd.watchdog:main"
self-modify = "self_coding.self_modify.cli:main"
[tool.hatch.build.targets.wheel]
sources = {"src" = ""}
include = [
"src/config.py",
"src/creative",
"src/dashboard",
"src/hands",
"src/infrastructure",
"src/integrations",
"src/lightning",
"src/mcp",
"src/scripture",
"src/self_coding",
"src/spark",
"src/swarm",
"src/timmy",
"src/timmy_serve",
]
[tool.pytest.ini_options]
testpaths = ["tests"]
pythonpath = ["src", "tests"]
asyncio_mode = "auto"
asyncio_default_fixture_loop_scope = "function"
addopts = "-v --tb=short --timeout=30"
markers = [
"unit: Unit tests (fast, no I/O)",
"integration: Integration tests (may use SQLite)",
"dashboard: Dashboard route tests",
"swarm: Swarm coordinator tests",
"slow: Tests that take >1 second",
]
[tool.coverage.run]
source = ["src"]
omit = [
"*/tests/*",
]
[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"