vibe/CONTRIBUTING.md
Clément Sirieix b23f49e5f4
v2.9.5 (#676)
Co-authored-by: Clément Drouin <clement.drouin@mistral.ai>
Co-authored-by: Kim-Adeline Miguel <51720070+kimadeline@users.noreply.github.com>
Co-authored-by: Mathias Gesbert <mathias.gesbert@mistral.ai>
Co-authored-by: allansimon-mistral <allan.simon@ext.mistral.ai>
Co-authored-by: Mistral Vibe <vibe@mistral.ai>
2026-05-07 13:55:56 +02:00

211 lines
5.5 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# Contributing to Mistral Vibe
Thank you for your interest in Mistral Vibe! We appreciate your enthusiasm and support.
## Current Status
**Mistral Vibe is in active development** — our team is iterating quickly and making lots of changes under the hood. Because of this pace, we may be slower than usual when reviewing PRs and issues.
**We especially encourage**:
- **Bug reports** Help us uncover and squash issues
- **Feedback & ideas** Tell us what works, what doesn't, and what could be even better
- **Documentation improvements** Suggest clarity improvements or highlight missing pieces
## How to Provide Feedback
### Bug Reports
If you encounter a bug, please open an issue with the following information:
1. **Description**: A clear description of the bug
2. **Steps to Reproduce**: Detailed steps to reproduce the issue
3. **Expected Behavior**: What you expected to happen
4. **Actual Behavior**: What actually happened
5. **Environment**:
- Python version
- Operating system
- Vibe version
6. **Error Messages**: Any error messages or stack traces
7. **Configuration**: Relevant parts of your `config.toml` (redact any sensitive information)
### Feature Requests and Feedback
We'd love to hear your ideas! When submitting feedback or feature request discussions:
1. **Avoid duplicates**: Check opened discussions before creating a new one
2. **Clear Description**: Explain what you'd like to see or improve
3. **Use Case**: Describe your use case and why this would be valuable
4. **Alternatives**: If applicable, mention any alternatives you've considered
## Development Setup
This section is for developers who want to set up the repository for local development, even though we're not currently accepting contributions.
### Prerequisites
- Python 3.12 or higher
- [uv](https://github.com/astral-sh/uv) - Modern Python package manager
### Setup
1. Clone the repository:
```bash
git clone <repository-url>
cd mistral-vibe
```
2. Install dependencies:
```bash
uv sync --all-extras
```
This will install both runtime and development dependencies.
3. (Optional) Install pre-commit hooks:
```bash
uv run pre-commit install
```
Pre-commit hooks will automatically run checks before each commit.
### Logging Configuration
Logs are written to `~/.vibe/logs/vibe.log` by default. Control logging via environment variables:
| Variable | Description | Default |
|----------|-------------|---------|
| `LOG_LEVEL` | Logging level (`DEBUG`, `INFO`, `WARNING`, `ERROR`, `CRITICAL`) | `WARNING` |
| `LOG_MAX_BYTES` | Max log file size in bytes before rotation | `10485760` (10 MB) |
| `DEBUG_MODE` | When `true`, forces `DEBUG` logging (and attaches `debugpy` on `localhost:5678` under `vibe-acp`) | - |
Example:
```bash
LOG_LEVEL=DEBUG uv run vibe
```
You can also view logs in real-time within the application by pressing `Ctrl+\` to open the debug console.
### Running Tests
Run all tests:
```bash
uv run pytest
```
Run tests with verbose output:
```bash
uv run pytest -v
```
Run a specific test file:
```bash
uv run pytest tests/test_agent_tool_call.py
```
### Profiling
Vibe ships a lightweight profiler module (`vibe.cli.profiler`) that wraps [pyinstrument](https://github.com/joerick/pyinstrument). It silently no-ops when pyinstrument is not installed or the `VIBE_PROFILE` env var is unset, so instrumentation can stay in the code with zero overhead in normal use.
**1. Add profiling calls** around the code you want to measure:
```python
from vibe.cli import profiler
profiler.start("startup")
# ... code to measure ...
profiler.stop_and_print()
```
Only one profiler can run at a time. The label passed to `start()` is used to name the output file. Each call to `stop_and_print` writes an HTML report (`<label>-profile.html`) and prints a text summary to stderr.
**2. Run with profiling enabled:**
```bash
VIBE_PROFILE=1 uv run vibe
```
Without `VIBE_PROFILE=1`, all `start` / `stop_and_print` calls are no-ops.
### Linting and Type Checking
#### Ruff (Linting and Formatting)
Check for linting issues (without fixing):
```bash
uv run ruff check .
```
Auto-fix linting issues:
```bash
uv run ruff check --fix .
```
Format code:
```bash
uv run ruff format .
```
Check formatting without modifying files (useful for CI):
```bash
uv run ruff format --check .
```
#### Pyright (Type Checking)
Run type checking:
```bash
uv run pyright
```
#### Pre-commit Hooks
Run all pre-commit hooks manually:
```bash
uv run pre-commit run --all-files
```
The pre-commit hooks include:
- Ruff (linting and formatting)
- Pyright (type checking)
- Typos (spell checking)
- YAML/TOML validation
- Action validator (for GitHub Actions)
### Code Style
- **Line length**: 88 characters (Black-compatible)
- **Type hints**: Required for all functions and methods
- **Docstrings**: Follow Google-style docstrings
- **Formatting**: Use Ruff for both linting and formatting
- **Type checking**: Use Pyright (configured in `pyproject.toml`)
See `pyproject.toml` for detailed configuration of Ruff and Pyright.
## Code Contributions
While we're not accepting code contributions at the moment, we may open up contributions in the future. When that happens, we'll update this document with:
- Pull request process
- Contribution guidelines
- Review process
## Questions?
If you have questions about using Mistral Vibe, please check the [README](README.md) first. For other inquiries, feel free to open a discussion or issue.
Thank you for helping make Mistral Vibe better! 🙏