[build-system] requires = ["setuptools>=68.0", "wheel"] build-backend = "setuptools.build_meta" [project] name = "opensre" version = "0.1" description = "Open-source SRE agent for automated incident investigation and root cause analysis. Automatically analyzes alerts from Slack, Grafana, Datadog, and other tooling." readme = "README.md" requires-python = ">=3.12" license = { text = "Apache-2.0" } authors = [ { name = "OpenSRE", email = "support@opensre.com" }, ] keywords = ["sre", "devops", "incident", "rca", "llm", "ai", "agent", "observability"] dependencies = [ # Core AI/Agent "anthropic>=0.77.1", "mcp>=1.27.0", "openai>=2.0.0", "litellm>=1.90.0", # Data validation "pydantic>=2.12.5,<3", "pydantic-settings>=2.12.0,<3", "kubernetes>=28.1.0", # HTTP and async "httpx[socks]>=0.27.0", "aiohttp>=3.9.0", "fastapi>=0.135.3", "uvicorn[standard]>=0.30.0", # Authentication "PyJWT>=2.13.0", # Cap below 49: cryptography 49.0.0 dropped x86-64 macOS wheels, which breaks # the frozen darwin-x64 release binary (PyInstaller bundles a broken _openssl # extension and the binary crashes at startup). Keep 48.x until the darwin-x64 # release target is dropped. "cryptography>=48.0.1,<49", "keyring>=23.0.1", # AWS "boto3>=1.42.88", # Utilities "python-dotenv>=1.2.2", "click>=8.1.0", "rich>=15.0.0", "questionary>=2.1.1", "prompt_toolkit>=3.0.0", "PyYAML>=6.0", "numpy>=1.26.0", "tzdata>=2026.1", # OpenTelemetry "opentelemetry-api>=1.41.0", "opentelemetry-sdk>=1.20.0", "opentelemetry-exporter-otlp-proto-http>=1.41.0", "opentelemetry-instrumentation>=0.40b0", "opentelemetry-instrumentation-botocore>=0.40b0", "opentelemetry-instrumentation-requests>=0.40b0", # Tracer "tracer_decorator", # Google APIs "google-api-python-client>=2.194.0,<3.0.0", "google-auth>=2.0.0,<3.0.0", # MongoDB "pymongo>=4.6.0,<6.0.0", # Redis "redis>=5.0.0,<9.0.0", # Signature verfication for discord "PyNaCl>=1.5.0", # MariaDB "pymysql>=1.1.0,<2.0.0", # ClickHouse (used by first-class SigNoz + ClickHouse integrations) "clickhouse-connect>=0.15.1,<1.0.0", "sentry-sdk>=2.59.0", # File locking for atomic store operations "filelock>=3.29.0", "psutil>=5.9", # Scheduler for cron-driven deliveries "APScheduler>=3.10.0,<4.0.0", ] [project.urls] Homepage = "https://github.com/Tracer-Cloud/opensre" Repository = "https://github.com/Tracer-Cloud/opensre" Issues = "https://github.com/Tracer-Cloud/opensre/issues" Changelog = "https://github.com/Tracer-Cloud/opensre/releases" [project.scripts] opensre = "surfaces.cli.__main__:main" [project.optional-dependencies] dev = [ "pre-commit>=4.0.0", "pytest>=8.0.0", "pytest-asyncio>=1.3.0", "pytest-cov>=7.1.0", "pytest-xdist>=3.5.0", "ruff>=0.4.0", "mypy>=1.10.0", "import-linter>=2.0", "types-requests", "types-psycopg2", "types-PyMySQL", "types-PyYAML", "types-psutil", "boto3-stubs[essential]", "huggingface_hub>=0.26.0", "datasets>=3.0.0", ] release-dist = [ "build>=1.2.0", "twine>=6.0.0", ] release-binary = [ "pyinstaller>=6.3.0", ] # Backward-compatible aggregate extra. release = [ "build>=1.2.0", "twine>=6.0.0", "pyinstaller>=6.3.0", ] opensre-hub = [ "huggingface_hub>=0.26.0", "datasets>=3.0.0", ] kafka = [ "confluent-kafka>=2.14.0", ] # Backward-compatible no-op extra; ClickHouse is now a core dependency. clickhouse = [ "clickhouse-connect>=0.15.1", ] postgresql = [ "psycopg2-binary>=2.9.0,<3.0.0", ] azure_sql = [ "pyodbc>=5.1.0,<6.0.0", ] [tool.setuptools.packages.find] include = [ "config*", "core*", "gateway*", "integrations*", "platform*", "surfaces*", "tests*", "tools*", ] [tool.setuptools.package-data] "surfaces.cli" = ["investigation/sample_alerts/*.json"] "core.agent_harness.prompts" = ["skills/*.md"] # With pytest-xdist (-n auto), each worker writes a fragment; put them under # .pytest_cache/ (already gitignored) instead of .coverage..* at repo root. [tool.coverage.run] data_file = ".pytest_cache/.coverage" [tool.vulture] paths = [ "config", "core", "gateway", "integrations", "platform", "surfaces", "tools", ] exclude = [ "tools/simple_tools.py", # explicitly skipped by the registry ] ignore_decorators = [ "@*.command", # Click / Typer subcommands "@*.group", "@*.callback", "@app.*", # FastAPI routes "@*router.*", # FastAPI sub-routers (discord_router etc.) "@field_validator", # Pydantic validators "@model_validator", "@validator", "@cache", "@lru_cache", "@tool", # @tools.tool_decorator.tool registrations "@mcp.tool", "@register*", ] ignore_names = [ "shell_complete", "format_help", "show", # Click overrides "_normalize_*", # Pydantic field validators "_require_*", # Pydantic model validators "on_thread_*", "on_assistant_*", "on_cron_*", "discord_interactions", "health_check", "version_check", "deep_health_check", "investigate_stream", ] # uv installs this PEP 735 group by default (`uv sync`; omit with `--no-dev`). # `pre-commit` is also under `[project.optional-dependencies] dev` for `pip install .[dev]`. [dependency-groups] dev = [ "pre-commit>=4.0.0", "pytest>=9.0.3", "pytest-cov>=7.1.0", "types-psutil>=7.2.2.20260408", "types-PyYAML>=6.0.12", "import-linter>=2.0", ]