Thank you for your interest in contributing to SoloFlow! This document provides guidelines and information for contributors.
- Code of Conduct
- How Can I Contribute?
- Development Setup
- Code Style
- Testing
- Pull Request Process
- Reporting Bugs
- Feature Requests
This project and everyone participating in it is governed by our Code of Conduct. By participating, you are expected to uphold this code.
- Check if the bug has already been reported in Issues
- If not, create a new issue with:
- Clear title and description
- Steps to reproduce
- Expected vs actual behavior
- Environment details (OS, Python version)
- Open an issue with the
enhancementlabel - Describe the feature and its use case
- Explain why it would be valuable
- Fork the repository
- Create a feature branch (
git checkout -b feature/amazing-feature) - Make your changes
- Add tests for new functionality
- Ensure all tests pass
- Commit your changes (
git commit -m 'feat: add amazing feature') - Push to the branch (
git push origin feature/amazing-feature) - Open a Pull Request
# Clone your fork
git clone https://github.com/YOUR_USERNAME/SoloFlow.git
cd SoloFlow
# No dependencies needed - pure Python!
# Run tests
python -m pytest tests/ -v- Follow PEP 8
- Use type hints where appropriate
- Write docstrings for public functions and classes
- Keep functions focused and small
Follow Conventional Commits:
<type>(<scope>): <description>
[optional body]
[optional footer]
Types:
feat: New featurefix: Bug fixdocs: Documentationstyle: Code style (no logic change)refactor: Code refactoringtest: Adding testschore: Maintenance tasks
Examples:
feat(memory): add Ebbinghaus forgetting curve implementation
fix(dag): correct cycle detection in complex graphs
docs(readme): update quick start guide
test(routing): add unit tests for TaskClassifier
# All tests
python -m pytest tests/ -v
# Specific module
python -m pytest tests/mcp/ -v
python -m pytest tests/trace/ -v
# With coverage
pip install pytest-cov
python -m pytest tests/ --cov=hermes_plugin --cov-report=html- Place tests in the
tests/directory - Mirror the source structure (e.g.,
tests/mcp/test_mcp_tools.py) - Use descriptive test names
- Test both success and failure cases
- Use fixtures for common setup
Example:
import pytest
from mcp.registry import MCPToolRegistry
@pytest.fixture
def registry():
return MCPToolRegistry()
def test_register_tool(registry):
async def handler(**kwargs):
return {"result": "ok"}
registry.register(
name="test_tool",
description="A test tool",
input_schema={"type": "object", "properties": {}},
handler=handler,
)
tools = registry.list_tools()
assert len(tools) == 1
assert tools[0]["name"] == "test_tool"- Update documentation if needed
- Add tests for new functionality
- Ensure CI passes - all tests must pass
- Request review from maintainers
- Address feedback promptly
- Squash commits if requested
## Description
Brief description of changes
## Type of Change
- [ ] Bug fix
- [ ] New feature
- [ ] Documentation update
- [ ] Refactoring
- [ ] Test addition
## Testing
- [ ] All existing tests pass
- [ ] New tests added for new functionality
- [ ] Manual testing performed
## Checklist
- [ ] Code follows project style guidelines
- [ ] Self-review completed
- [ ] Documentation updated
- [ ] No breaking changes (or documented)- Create directory:
your_module/ - Add
__init__.pywith exports - Add
README.mdwith usage examples - Add tests in
tests/your_module/ - Update main
README.md
When adding features, consider which ETCLOVG layer they belong to:
- E (Execution) - Runtime, sandboxes, isolation
- T (Tool Interface) - MCP, tool protocols
- C (Context) - Memory, knowledge management
- L (Lifecycle) - Orchestration, state machines
- O (Observability) - Tracing, logging, metrics
- V (Verification) - Testing, evaluation, quality
- G (Governance) - Security, permissions, audit
Feel free to open an issue or reach out to the maintainers.
Thank you for contributing to SoloFlow! 🚀