[project] name = "vibe-bot" version = "0.1.0" description = "Generate an infinite number of bots. Vibed for your pleasure." readme = "README.md" requires-python = ">=3.13" dependencies = [ "discord>=2.3.2", "openai>=2.24.0", "requests>=2.32.5", "types-requests>=2.32.4.20260107", "numpy>=1.24.0", "pytest>=9.0.2", "python-dotenv>=1.2.2", "pytest-env>=1.5.0", "kokoro-tts>=2.3.1", "mypy>=2.1.0", ] [project.optional-dependencies] dev = [ "ruff>=0.12.0", "pyright>=1.1.398", "mypy>=1.17.0", "black>=25.1.0", ] [tool.uv] required-environments = [ "sys_platform == 'linux' and platform_machine == 'x86_64'", ] [tool.ruff] target-version = "py313" line-length = 88 [tool.ruff.lint] select = ["ALL"] ignore = [ "PLR0913", "PLR0915", "S101", "ASYNC210", "D205", "N806", "ISC001", # Test-specific ignores "PLC0415", # imports not at top-level (needed for async test mocking) "S108", # /tmp paths in tests "ARG001", # unused fixture arguments (needed for fixture chain) "ANN401", # Any type usage (needed for CustomBotManager typing) "PLR2004", # magic number comparisons "SLF001", # private member access (testing internals) "TRY002", # custom exception classes "TRY003", # long exception messages "EM101", # string literals in exceptions "TC003", # stdlib import in type-checking block "F401", # unused imports (bytesio used in isinstance) ] [tool.ruff.lint.isort] known-first-party = ["vibe_bot"] [tool.mypy] strict = true python_version = "3.13" warn_return_any = true warn_unused_configs = true disallow_untyped_defs = true disallow_incomplete_defs = true check_untyped_defs = true disallow_untyped_decorators = true no_implicit_optional = true [tool.pyright] typeCheckingMode = "strict" pythonVersion = "3.13" reportMissingTypeStubs = false reportUnknownVariableType = false reportUnknownMemberType = false reportUnknownArgumentType = false reportPrivateUsage = false [tool.black] line-length = 88 target-version = ["py313"] [tool.pytest.ini_options] filterwarnings = [ "ignore::pytest.PytestUnraisableExceptionWarning", ]