[project] name = "bitcadence" version = "0.6.0" description = "BitCadence: a governed job board for AI agents - approval gates, immutable audit, and Drumline shared memory. Every agent. One beat." readme = "README.md" requires-python = ">=3.9" license = { text = "LicenseRef-Prosperity-3.0.0" } authors = [ { name = "Batoncadence LLC" } ] keywords = ["ai-agents", "orchestration", "mcp", "governance", "self-hosted", "audit", "human-in-the-loop"] classifiers = [ "Programming Language :: Python :: 3", "License :: Free for non-commercial use", "Operating System :: OS Independent", "Development Status :: 4 - Beta", "Intended Audience :: Developers", "Intended Audience :: System Administrators", "Topic :: System :: Distributed Computing", ] dependencies = [ "fastapi>=0.100.0", "uvicorn>=0.20.0", "supabase>=1.0.0,<3.0.0", "httpx>=0.24.0", "authlib>=1.3.2,<2.0.0", "itsdangerous>=2.1.2,<3.0.0", "cryptography>=41.0.0", "rich>=13.0.0", "typer>=0.9.0", "loguru>=0.7.0", "python-dotenv>=1.0.0", "websockets>=11.0", # Upper bound is deliberate: mcp 2.0.0 (the 2026-07-28 spec) removed # mcp.server.fastmcp entirely. mcp_server.py supports both majors via a # compat import, but an unbounded pin would let a future 3.x break a fresh # install silently - which is exactly what >=1.2.0 alone did the day 2.0.0 # shipped. "mcp>=1.2.0,<3.0.0", "pyyaml>=6.0", "requests>=2.28.0", "psutil>=5.9.0", "filelock>=3.12.0", # Arrow-key menu for bare `bitcadence`; the menu falls back to numbers without it. "prompt_toolkit>=3.0.43,<4.0.0", "tomli>=2.0.0; python_version < '3.11'", # Windows ships no IANA timezone database, so stdlib zoneinfo cannot resolve # names like "America/New_York" - which every timezone-aware schedule needs. "tzdata; sys_platform == 'win32'", ] [project.urls] Homepage = "https://bitcadence.ai" Repository = "https://github.com/mastalink/BitCadence" Documentation = "https://github.com/mastalink/BitCadence/tree/main/docs" Changelog = "https://github.com/mastalink/BitCadence/blob/main/CHANGELOG.md" [project.optional-dependencies] desktop = ["pystray>=0.19.5", "Pillow>=10.0"] # Optional AWS integrations (ntfy topic from Secrets Manager, SNS email # backup, S3 vault). Code imports boto3 lazily; without it these quietly # no-op with "ModuleNotFoundError" in the gateway log. aws = ["boto3>=1.34"] dev = [ "pytest>=7.0.0", "pytest-asyncio>=0.21.0", "pytest-cov>=4.0.0", ] # Optional desktop status light. Headless servers must not need this. tray = [ "pystray>=0.19.5", "pillow>=10.0.0", ] [project.scripts] mco = "mco.cli:main" bitcadence = "mco.cli:main" [project.gui-scripts] bitcadence-desktop = "mco.desktop.app:main" [build-system] requires = ["setuptools>=61.0.0", "wheel"] build-backend = "setuptools.build_meta" [tool.setuptools.packages.find] where = ["src"] [tool.setuptools.package-data] mco = ["static/*.html", "migrations/*.sql"] [tool.pytest.ini_options] minversion = "6.0" addopts = "-ra -q" testpaths = [ "tests", ] asyncio_mode = "auto"