Thank you for your interest in contributing to UXC!
- Rust 1.70 or later
- Git
- GitHub account
-
Fork the repository
-
Clone your fork:
git clone https://github.com/YOUR_USERNAME/uxc.git cd uxc -
Add upstream remote:
git remote add upstream https://github.com/holon-run/uxc.git
-
Install dependencies:
cargo build
feature/- New featuresfix/- Bug fixesdocs/- Documentationrefactor/- Code refactoring
Example: feature/openapi-parser
-
Create a branch:
git checkout -b feature/your-feature-name
-
Make your changes
-
Format code:
cargo fmt
-
Build TypeScript package when touching
packages/**:npm ci npm run build:ts
-
Run linter:
cargo clippy -- -D warnings
-
Run tests:
cargo test UXC_BIN=$PWD/target/debug/uxc npm run test:ts
-
Debug with logging:
# Run with info logs to see HTTP requests/responses RUST_LOG=info cargo run -- https://api.example.com list # Run with debug logs for detailed diagnostics RUST_LOG=debug cargo run -- https://api.example.com list # Enable logs for specific modules only RUST_LOG=uxc::adapters::openapi=debug cargo run -- https://api.example.com list
-
Commit changes:
git add . git commit -m "feat: add OpenAPI schema parser"
-
Push to your fork:
git push origin feature/your-feature-name
-
Create a pull request
This repository includes a reusable Codex skill at skills/uxc.
When CLI syntax, operation naming, or output envelope changes, update skill files in the same PR:
skills/uxc/SKILL.mdskills/uxc/references/*skills/uxc/agents/openai.yaml(if prompt wording should change)
Run validation before opening a PR:
bash skills/uxc/scripts/validate.shWe follow Conventional Commits:
<type>: <description>
[optional body]
[optional footer]
feat- New featurefix- Bug fixdocs- Documentation changesrefactor- Code refactoringtest- Adding or updating testschore- Maintenance tasksperf- Performance improvements
feat: add GraphQL introspection support
Implement GraphQL introspection query to discover
available fields and types.
Closes #31
fix: handle OpenAPI 3.1 parsing errors
Add proper error handling for OpenAPI 3.1 specs
that use different schema formats.
Fixes #42
Use the same convention as commit messages:
feat: add gRPC reflection support
Include:
- What: What changes were made
- Why: Why these changes are needed
- How: How it works
- Testing: How it was tested
- Closes: Issue number (if applicable)
## What
Brief description of changes
## Why
Reason for these changes
## How
Technical approach
## Testing
- [ ] Unit tests added/updated
- [ ] Integration tests added/updated
- [ ] Manual testing performed
## Checklist
- [ ] Code formatted with `cargo fmt`
- [ ] No clippy warnings
- [ ] All tests pass
- [ ] Documentation updated
- [ ] Commit messages follow convention
## Closes
#issue_number- Be respectful and constructive
- Focus on code, not the person
- Provide specific feedback
- Suggest improvements
Maintainers will review PRs within 48 hours. Feel free to ping after 3 days if no response.
Releases are tag-driven and automated by .github/workflows/release.yml.
- Update
Cargo.tomlversion - Update
CHANGELOG.mdfor that version - Keep
packages/uxc-daemon-client/package.jsonversion in sync withCargo.toml - Run:
./scripts/release-check.sh vX.Y.Zgit tag vX.Y.Z
git push origin vX.Y.ZSee docs/release.md for full details, rollback, and troubleshooting.
See docs/skills.md for skill install and maintenance details.
cargo testcargo test --test '*'We track code coverage using cargo-llvm-cov and enforce a minimum of 65% line coverage.
To generate coverage reports locally (matching CI behavior):
# Install cargo-llvm-cov if you haven't already
cargo install cargo-llvm-cov
# Generate HTML report
cargo llvm-cov --html
# Generate coverage summary only
cargo llvm-cov --summary-only
# Open HTML report in browser
open target/llvm-cov/html/index.html # macOS
xdg-open target/llvm-cov/html/index.html # Linux
start target/llvm-cov/html/index.html # WindowsCI enforces a minimum of 65% line coverage. The CI workflow will fail if coverage falls below this threshold.
To check if your code meets the threshold locally:
cargo llvm-cov --summary-only --fail-under-lines 65This command will:
- Run all tests with coverage instrumentation
- Display coverage summary
- Exit with error if coverage is below 65%
GitHub Actions generates and uploads coverage artifacts on every PR and push to main:
- JSON Report: Machine-readable coverage data (
coverage.json) - HTML Report: Detailed browser-friendly coverage report
Download these artifacts from the Actions run page to review coverage in detail.
Test against real APIs:
# OpenAPI
cargo run -- https://petstore.swagger.io list
# GraphQL (when implemented)
cargo run -- https://graphqlzero.almansi.me/api listWhen adding a new protocol adapter:
- Implement the
Adaptertrait - Add protocol detection
- Add unit tests
- Add integration tests
- Update documentation
- Add examples
See src/adapters/mod.rs for the adapter interface.
Use rustdoc comments:
/// Parses an OpenAPI schema from the given URL.
///
/// # Arguments
///
/// * `url` - The OpenAPI schema URL
///
/// # Returns
///
/// Returns a `Result<Value>` with the parsed schema
///
/// # Errors
///
/// Returns an error if:
/// - The URL is invalid
/// - The schema is malformed
/// - Network error occurs
///
/// # Examples
///
/// ```no_run
/// use uxc::adapters::OpenAPIAdapter;
///
/// let adapter = OpenAPIAdapter::new();
/// let schema = adapter.fetch_schema("https://api.example.com").await?;
/// ```
pub async fn fetch_schema(&self, url: &str) -> Result<Value> {
// ...
}Update relevant sections in:
- README.md
- docs/ directory
- Examples in examples/
- Open an issue for bugs or feature requests
- Start a discussion for questions
- Join our Discord (when available)
By contributing, you agree that your contributions will be licensed under the MIT License.