[project] name = "mistral-vibe" version = "2.11.0" description = "Minimal CLI coding agent by Mistral" readme = "README.md" requires-python = ">=3.12" license = { text = "Apache-2.0" } authors = [{ name = "Mistral AI" }] keywords = [ "ai", "cli", "coding-assistant", "mistral", "llm", "developer-tools", ] classifiers = [ "Development Status :: 5 - Production/Stable", "Intended Audience :: Developers", "License :: OSI Approved :: Apache Software License", "Operating System :: OS Independent", "Programming Language :: Python", "Programming Language :: Python :: 3", "Programming Language :: Python :: 3.12", "Topic :: Software Development", "Topic :: Software Development :: Libraries :: Python Modules", "Topic :: Utilities", ] dependencies = [ "agent-client-protocol==0.9.0", "annotated-types==0.7.0", "anyio==4.13.0", "attrs==26.1.0", "beautifulsoup4==4.14.3", "cachetools==7.0.6", "certifi==2026.4.22", "cffi==2.0.0", "charset-normalizer==3.4.7", "click==8.3.3 ; sys_platform != 'emscripten'", "colorama==0.4.6 ; sys_platform == 'win32'", "cryptography==47.0.0", "eval-type-backport==0.3.1", "gitdb==4.0.12", "gitpython==3.1.47", "giturlparse==0.14.0", "google-auth==2.49.2", "googleapis-common-protos==1.74.0", "h11==0.16.0", "httpcore==1.0.9", "httpx==0.28.1", "httpx-sse==0.4.3", "idna==3.13", "importlib-metadata==8.7.1", "jaraco-classes==3.4.0", "jaraco-context==6.1.2", "jaraco-functools==4.4.0", "jeepney==0.9.0 ; sys_platform == 'linux'", "jsonpatch==1.33", "jsonpath-python==1.1.5", "jsonpointer==3.1.1", "jsonschema==4.26.0", "jsonschema-specifications==2025.9.1", "keyring==25.7.0", "linkify-it-py==2.1.0", "markdown-it-py==4.0.0", "markdownify==1.2.2", "mcp==1.27.0", "mdit-py-plugins==0.5.0", "mdurl==0.1.2", "mistralai==2.4.4", "more-itertools==11.0.2", "opentelemetry-api==1.39.1", "opentelemetry-exporter-otlp-proto-common==1.39.1", "opentelemetry-exporter-otlp-proto-http==1.39.1", "opentelemetry-proto==1.39.1", "opentelemetry-sdk==1.39.1", "opentelemetry-semantic-conventions==0.60b1", "packaging==26.2", "pexpect==4.9.0", "platformdirs==4.9.6", "protobuf==6.33.6", "ptyprocess==0.7.0", "pyasn1==0.6.3", "pyasn1-modules==0.4.2", "pycparser==3.0 ; implementation_name != 'PyPy'", "pydantic==2.13.3", "pydantic-core==2.46.3", "pydantic-settings==2.14.0", "pygments==2.20.0", "pyjwt==2.12.1", "pyperclip==1.11.0", "python-dateutil==2.9.0.post0", "python-dotenv==1.2.2", "python-multipart==0.0.27", "pywin32==311 ; sys_platform == 'win32'", "pywin32-ctypes==0.2.3 ; sys_platform == 'win32'", "pyyaml==6.0.3", "referencing==0.37.0", "requests==2.33.1", "rich==15.0.0", "rpds-py==0.30.0", "secretstorage==3.5.0 ; sys_platform == 'linux'", "six==1.17.0", "smmap==5.0.3", "sounddevice==0.5.5", "soupsieve==2.8.3", "sse-starlette==3.4.1", "starlette==1.0.0", "textual==8.2.7", "textual-speedups==0.2.1", "tomli-w==1.2.0", "tree-sitter==0.25.2", "tree-sitter-bash==0.25.1", "typing-extensions==4.15.0", "typing-inspection==0.4.2", "uc-micro-py==2.0.0", "urllib3==2.6.3", "uvicorn==0.46.0 ; sys_platform != 'emscripten'", "watchfiles==1.1.1", "websockets==16.0", "zipp==3.23.1", "zstandard==0.25.0", ] [project.urls] Homepage = "https://github.com/mistralai/mistral-vibe" Repository = "https://github.com/mistralai/mistral-vibe" Issues = "https://github.com/mistralai/mistral-vibe/issues" Documentation = "https://github.com/mistralai/mistral-vibe#readme" [build-system] requires = ["hatchling", "hatch-vcs", "editables"] build-backend = "hatchling.build" [tool.hatch.metadata] allow-direct-references = true [tool.hatch.build.targets.wheel] include = ["vibe/"] [project.scripts] vibe = "vibe.cli.entrypoint:main" vibe-acp = "vibe.acp.entrypoint:main" [tool.uv] exclude-newer = "7 days" exclude-newer-package = { agent-client-protocol = false, mistralai = false, textual = false } package = true required-version = ">=0.8.0" [dependency-groups] dev = [ "debugpy>=1.8.19", "pre-commit>=4.2.0", "pyinstrument>=5.1.2", "pyright>=1.1.403", "pytest>=8.3.5", "pytest-asyncio>=1.2.0", "pytest-textual-snapshot>=1.1.0", "pytest-timeout>=2.4.0", "pytest-xdist>=3.8.0", "respx>=0.22.0", "ruff>=0.14.5", "tomlkit>=0.13.0", "twine>=5.0.0", "typos>=1.34.0", "vulture>=2.14", ] build = [ "altgraph==0.17.5", "macholib==1.16.4 ; sys_platform == 'darwin'", "packaging==26.2", "pefile==2024.8.26 ; sys_platform == 'win32'", "pyinstaller==6.20.0", "pyinstaller-hooks-contrib==2026.4", "pywin32-ctypes==0.2.3 ; sys_platform == 'win32'", "setuptools==82.0.1", "truststore==0.10.4", ] [tool.pyright] pythonVersion = "3.12" reportMissingTypeStubs = false reportPrivateImportUsage = false include = ["vibe/**/*.py", "tests/**/*.py"] exclude = ["pyinstaller/"] venvPath = "." venv = ".venv" [tool.ruff] include = ["vibe/**/*.py", "tests/**/*.py"] exclude = ["pyinstaller/"] line-length = 88 target-version = "py312" preview = true [tool.ruff.format] skip-magic-trailing-comma = true [tool.ruff.lint] select = [ "F", "I", "D2", "UP", "TID", "ANN", "PLR", "B0", "B905", "DOC102", "RUF022", "RUF010", "RUF012", "RUF019", "RUF100", ] ignore = ["D203", "D205", "D213", "ANN401", "PLR6301"] [tool.ruff.lint.per-file-ignores] "tests/*" = ["ANN", "PLR"] [tool.ruff.lint.flake8-tidy-imports] ban-relative-imports = "all" [tool.ruff.lint.isort] known-first-party = ["vibe"] force-sort-within-sections = true split-on-trailing-comma = false combine-as-imports = true force-wrap-aliases = false order-by-type = true required-imports = ["from __future__ import annotations"] [tool.ruff.lint.pylint] max-public-methods = 26 max-positional-args = 10 max-statements = 50 max-branches = 15 max-locals = 15 max-args = 10 max-returns = 6 max-nested-blocks = 5 [tool.vulture] ignore_decorators = ["@*"] [tool.pytest.ini_options] addopts = "-vvvv -q -n auto --durations=10 --import-mode=importlib --maxschedchunk=1" timeout = 10 filterwarnings = [ # (e2e) streaming mock server is started in a thread; and the cli is spawn in a fork "ignore:This process \\(pid=.*\\) is multi-threaded, use of forkpty\\(\\) may lead to deadlocks in the child\\.:DeprecationWarning", ]