# Contributing to DeepSeek CLI Thank you for your interest in contributing to DeepSeek CLI! This document provides guidelines and instructions for contributing. ## Getting Started ### Prerequisites - Rust 1.85 or later (edition 2024) - Cargo package manager - Git ### Setting Up Development Environment 1. Fork and clone the repository: ```bash git clone https://github.com/YOUR_USERNAME/DeepSeek-CLI.git cd DeepSeek-CLI ``` 2. Build the project: ```bash cargo build ``` 3. Run tests: ```bash cargo test ``` 4. Run with development settings: ```bash cargo run ``` ## Development Workflow ### Code Style - Run `cargo fmt` before committing to ensure consistent formatting - Run `cargo clippy` and address all warnings - Follow Rust naming conventions (snake_case for functions/variables, CamelCase for types) - Add documentation comments for public APIs ### Testing - Write tests for new functionality - Ensure all existing tests pass: `cargo test` - For integration tests, use the `tests/` directory ### Commit Messages Use clear, descriptive commit messages following conventional commits: - `feat:` New feature - `fix:` Bug fix - `docs:` Documentation changes - `refactor:` Code refactoring - `test:` Adding or updating tests - `chore:` Maintenance tasks Example: `feat: add --doctor command for system diagnostics` ## Project Structure ``` src/ ├── main.rs # Entry point and CLI definition ├── config.rs # Configuration management ├── client.rs # HTTP client for DeepSeek API ├── llm_client.rs # LLM abstraction layer ├── models.rs # Data structures ├── mcp.rs # Model Context Protocol support ├── hooks.rs # Hook system for extensibility ├── skills.rs # Skills/plugin system ├── core/ # Core engine components │ ├── engine.rs # Main agent loop │ ├── session.rs # Session management │ └── ... ├── tools/ # Built-in tools │ ├── shell.rs # Shell execution │ ├── file.rs # File operations │ └── ... ├── tui/ # Terminal UI │ ├── app.rs # Application state │ ├── ui.rs # Rendering logic │ └── ... └── sandbox/ # Sandbox execution (macOS) ``` ## Submitting Changes 1. Create a feature branch from `main`: ```bash git checkout -b feat/your-feature ``` 2. Make your changes and commit them 3. Ensure CI passes: ```bash cargo fmt --check cargo clippy cargo test ``` 4. Push your branch and create a Pull Request 5. Describe your changes clearly in the PR description ## Pull Request Guidelines - Keep PRs focused on a single change - Update documentation if needed - Add tests for new functionality - Ensure CI passes before requesting review ## Reporting Issues When reporting issues, please include: - Operating system and version - Rust version (`rustc --version`) - DeepSeek CLI version (`deepseek --version`) - Steps to reproduce the issue - Expected vs actual behavior - Relevant error messages or logs ## Code of Conduct Be respectful and inclusive. We welcome contributors of all backgrounds and experience levels. ## License By contributing to DeepSeek CLI, you agree that your contributions will be licensed under the MIT License. ## Questions? Feel free to open an issue for any questions about contributing.