Thank you for your interest in contributing to the ContextForge Plugin Extensibility Framework Plugins. This document describes how to contribute effectively.
- All contributions are made via pull requests against the
mainbranch. - Use the GitHub issue tracker to report bugs and propose features.
- All commits must be signed (DCO sign-off).
Before implementing a new feature or adding a new plugin, open an issue to discuss the design. This avoids wasted effort and ensures alignment with project goals.
Raise an issue describing the bug before submitting a PR. Reference the issue number in your PR.
Each plugin lives in its own top-level directory (e.g., rate_limiter/). New plugins should follow the established pattern:
- A
pyproject.tomlwith maturin as the build backend (for Rust+Python plugins) or setuptools (for pure Python plugins). - A
Makefilewith standard targets:build,install,test,test-python,test-all,fmt,clippy,check-all,clean. - A
README.mddocumenting configuration, usage, and limitations. - A
plugin-manifest.yamlinside the Python package directory with an explicitkindinmodule.objectform. - A matching plugin entry point in
pyproject.tomlunder[project.entry-points."cpex.plugins"]inmodule:objectform. - A
tests/directory with pytest tests.
Pull requests require review and approval from at least one maintainer before merging.
This project is licensed under the Apache License 2.0. All source files must include the SPDX license header:
# Copyright <year>
# SPDX-License-Identifier: Apache-2.0
For Rust files:
// Copyright <year>
// SPDX-License-Identifier: Apache-2.0
All commits must be signed off to certify that you have the right to submit the contribution under the project's license. Use git commit -s to add the sign-off line automatically.
Use GitHub Issues for bug reports, feature requests, and general discussion.
- Python 3.11+ with type hints.
- Use
snake_casefor functions and variables,PascalCasefor classes,UPPER_CASEfor constants. - Format with Black (line length 200) and isort.
- Lint with Ruff.
- Follow standard Rust conventions (
rustfmt,clippy). - Use
cargo fmtbefore committing. - All clippy warnings must be resolved (
clippy -- -D warnings).
All source files should include a copyright notice and SPDX license identifier. See existing files for the format.