Thank you for your interest in contributing! This project is an independent, community-driven implementation of the RPG-Encoder concepts described in the research papers. Contributions of all kinds are welcome.
This project is not affiliated with Microsoft Research. It is an independent implementation built from publicly available research papers. When contributing:
- Do not include any code from the official Microsoft implementation
- Reference the papers for algorithmic details, not any proprietary code
- Ensure all contributions are your own original work or properly licensed
- Rust 1.85+ (install via rustup)
# Build all crates
cargo build --workspace
# Run all tests (640+ test cases)
cargo test --workspace
# Check for lint issues
cargo clippy --workspace --all-targets -- -D warnings
# Check formatting
cargo fmt --all -- --checkAll four checks must pass before submitting a PR. CI enforces these automatically.
crates/
├── rpg-core Core types: RPGraph, Entity, HierarchyNode, storage, config
├── rpg-parser Tree-sitter parsing for 15 languages (entities + dependencies)
├── rpg-encoder LLM integration, 3-phase pipeline, incremental evolution
├── rpg-nav Navigation: search, fetch, explore, TOON serialization
├── rpg-cli CLI binary
└── rpg-mcp MCP server binary
- Benchmarks — Evaluate search/localization quality on real repositories
- Language support — Improve existing extractors or add tree-sitter support for additional languages
- Search quality — Improve scoring, ranking, and result relevance
- Documentation — Usage guides, tutorials, examples
- Add the tree-sitter grammar dependency to
Cargo.toml - Implement entity extraction in
crates/rpg-parser/src/entities/ - Implement dependency extraction in
crates/rpg-parser/src/deps/ - Register the language in
crates/rpg-parser/src/languages.rs - Add tests in
crates/rpg-parser/tests/
See existing language implementations (e.g., python_entities.rs, rust_deps.rs) as templates.
- Add the handler method in
crates/rpg-mcp/src/tools.rswith#[tool(...)]attribute - Define a params struct with
JsonSchema+Deserialize - Add a test in
crates/rpg-mcp/tests/tool_handlers.rs
- Follow existing patterns in the codebase
- Use
anyhow::Resultfor fallible functions in binaries,thiserrorfor library errors - Keep functions focused — prefer small, testable units
- Write tests for new functionality
- No unnecessary abstractions — solve the problem at hand
- Fork the repo and create a feature branch
- Make your changes with tests
- Ensure all checks pass:
cargo test && cargo clippy -- -D warnings && cargo fmt -- --check - Open a PR with a clear description of what and why
- Link any related issues
- Use GitHub Issues for bugs, feature requests, and questions
- Include steps to reproduce for bugs
- Include relevant version info (
rpg-encoder info, Rust version, OS)
By contributing, you agree that your contributions will be licensed under the MIT License.