[build-system] requires = ["hatchling>=1.21.0"] build-backend = "hatchling.build" [project] name = "cleverclaude" version = "2.0.0" description = "CleverClaude - Advanced AI Agent Orchestration System" readme = "README.md" requires-python = ">=3.11" license = {text = "MIT"} authors = [ {name = "CleverClaude Team", email = "dev@cleverclaude.ai"}, ] keywords = [ "ai", "agents", "orchestration", "swarm", "mcp", "cleverclaude", "automation", "coordination", "distributed", "async", "neural", "hive-mind" ] classifiers = [ "Development Status :: 5 - Production/Stable", "Environment :: Console", "Environment :: Web Environment", "Framework :: AsyncIO", "Framework :: FastAPI", "Intended Audience :: Developers", "Intended Audience :: System Administrators", "License :: OSI Approved :: MIT License", "Operating System :: OS Independent", "Programming Language :: Python :: 3", "Programming Language :: Python :: 3.11", "Programming Language :: Python :: 3.12", "Programming Language :: Python :: 3.13", "Topic :: Scientific/Engineering :: Artificial Intelligence", "Topic :: Software Development :: Libraries :: Python Modules", "Topic :: System :: Distributed Computing", "Typing :: Typed", ] dependencies = [ # Core Framework "fastapi[all]>=0.104.0", "uvicorn[standard]>=0.24.0", "pydantic>=2.5.0", "pydantic-settings>=2.1.0", # CLI Framework "click>=8.1.7", "rich>=13.7.0", "textual>=0.45.0", "typer>=0.9.0", # Async & Concurrency "asyncio-mqtt>=0.11.1", "aiofiles>=23.2.1", "aioredis>=2.0.1", "httpx>=0.25.2", "websockets>=12.0", # Database & Storage "sqlalchemy[asyncio]>=2.0.23", "alembic>=1.13.0", "aiosqlite>=0.19.0", "redis>=5.0.1", # Task Processing "celery[redis]>=5.3.4", "dramatiq[redis]>=1.15.0", # Monitoring & Observability "structlog>=23.2.0", "prometheus-client>=0.19.0", "opentelemetry-api>=1.21.0", "opentelemetry-sdk>=1.21.0", "opentelemetry-instrumentation>=0.42b0", # Security & Auth "pyjwt[crypto]>=2.8.0", "passlib[bcrypt]>=1.7.4", "python-multipart>=0.0.6", # Configuration & Serialization "pyyaml>=6.0.1", "toml>=0.10.2", "jsonschema>=4.20.0", # Utilities "nanoid>=2.0.0", "python-dateutil>=2.8.2", "psutil>=5.9.6", "tenacity>=8.2.3", # MCP Protocol Support "msgpack>=1.0.7", "cbor2>=5.5.0", "orjson>=3.9.10", ] [project.optional-dependencies] dev = [ # Testing "pytest>=7.4.3", "pytest-asyncio>=0.21.1", "pytest-cov>=4.1.0", "pytest-mock>=3.12.0", "hypothesis>=6.92.0", "factory-boy>=3.3.0", "behave>=1.2.6", # Code Quality "ruff>=0.4.0", "mypy>=1.7.1", "pyright>=1.1.400", "pre-commit>=3.8.0", # Development Tools "uv>=0.8.0", "nox>=2025.4.22", "ipython>=8.18.1", "jupyter>=1.0.0", "watchfiles>=0.21.0", ] benchmark = [ "locust>=2.18.0", "matplotlib>=3.8.2", "pandas>=2.1.4", "seaborn>=0.13.0", ] docs = [ "mkdocs>=1.5.3", "mkdocs-material>=9.6.0", "mkdocs-mermaid2-plugin>=1.1.1", "mkdocstrings[python]>=0.24.0", "mike>=2.0.0", ] all = [ "cleverclaude[dev,benchmark,docs]", ] [project.urls] Homepage = "https://git.cleverthis.com/cleverthis/base/base-python" Documentation = "https://cleverthis.github.io/cleverclaude" Repository = "https://git.cleverthis.com/cleverthis/base/base-python" Issues = "https://git.cleverthis.com/cleverthis/base/base-python/issues" [project.scripts] cleverclaude = "cleverclaude.cli:main" cc = "cleverclaude.cli:main" cleverclaude-server = "cleverclaude.server:run_server" cleverclaude-worker = "cleverclaude.worker:run_worker" cleverclaude-monitor = "cleverclaude.monitoring:run_monitor" [tool.hatch.build.targets.wheel] packages = ["src/cleverclaude"] [tool.ruff] line-length = 120 target-version = "py313" src = ["src", "features"] [tool.ruff.lint] select = [ "E", # pycodestyle errors "W", # pycodestyle warnings "F", # pyflakes "I", # isort "B", # flake8-bugbear "C4", # flake8-comprehensions "UP", # pyupgrade "ARG", # flake8-unused-arguments "PTH", # flake8-use-pathlib "SIM", # flake8-simplify "TID", # flake8-tidy-imports "RUF", # Ruff-specific rules ] ignore = [] [tool.ruff.lint.per-file-ignores] "__init__.py" = ["F401"] [tool.ruff.format] quote-style = "double" indent-style = "space" docstring-code-format = true [tool.coverage.run] source = ["src"] branch = true omit = [ "*/tests/*", "*/test_*", "*/__pycache__/*", "*/venv/*", "*/.venv/*", "*/.nox/*", ] [tool.coverage.report] exclude_lines = [ "pragma: no cover", "def __repr__", "if self.debug:", "if settings.DEBUG", "raise AssertionError", "raise NotImplementedError", "if 0:", "if __name__ == .__main__.:", "class .*\\bProtocol\\):", "@(abc\\.)?abstractmethod", ] show_missing = true precision = 2 skip_covered = false [tool.coverage.html] directory = "htmlcov"