iai-mcp-opencode/CONTRIBUTING.md

103 lines
3 KiB
Markdown
Raw Normal View History

2026-05-10 20:42:02 -07:00
# Contributing to iai-mcp
Thanks for considering a contribution. This project is small and opinionated. Read this before opening a large PR.
## Scope
iai-mcp is a local memory layer for MCP-over-stdio hosts. Contributions that fit the scope:
- Bug fixes in capture, recall, consolidation, daemon lifecycle, or the MCP wrapper.
- New bench harnesses, or improvements to existing ones.
- Documentation fixes and clarifications.
- Platform support (Linux, Windows) once the abstractions are ready.
- Compatibility with additional MCP-over-stdio hosts (with evidence it was tested end to end).
Contributions outside scope (will likely be declined):
- Cloud sync, remote storage, or any network-exposed surface beyond the existing local UNIX socket.
- Major architectural rewrites without prior discussion in an issue.
- Replacing the three-tier memory model (episodic / semantic / procedural).
- Telemetry of any kind.
If you're not sure, open an issue first to discuss before writing code.
## Development setup
```bash
git clone https://github.com/CodeAbra/iai-mcp.git
cd iai-mcp
python3.12 -m venv .venv
source .venv/bin/activate
pip install -e ".[dev]"
```
Build the TypeScript MCP wrapper:
```bash
cd mcp-wrapper
npm install
npm run build
cd ..
```
## Tests
```bash
pytest
```
A handful of daemon and bridge tests are sensitive to test-pollution and may pass cleanly on a rerun. The harness retries up to twice automatically. If a test fails three times, it's a real failure.
For changes to a specific area, the relevant test files:
- Capture: `tests/test_capture_*`
- Recall: `tests/test_recall_*`
- Consolidation: `tests/test_consolidation_*`, `tests/test_sleep_*`
- Daemon lifecycle: `tests/test_daemon_*`, `tests/test_fsm_*`
- MCP wrapper: `mcp-wrapper/test/`
## Lint
```bash
ruff check src/ tests/
ruff format --check src/ tests/
```
PRs are expected to pass `ruff check` clean.
## Benchmarks
If your change touches retrieval, capture, or consolidation, include before/after numbers from the relevant bench in the PR description:
```bash
python -m bench.verbatim
python -m bench.neural_map
python -m bench.tokens
python -m bench.longmemeval_blind --split S --out /tmp/out.json
```
Don't tune to the bench. The LongMemEval-S run is blind on purpose.
## Commit style
- Imperative mood: `Fix X`, `Add Y`, not `Fixed X` or `Adding Y`.
- One logical change per commit.
- Keep messages short. One-line subject, body only when motivation is non-obvious.
## Pull requests
- Small PRs land faster than large ones.
- Reference the issue your PR addresses.
- Include test coverage for changed behaviour, or explain in the PR description why it isn't applicable.
- For retrieval / capture / consolidation changes, include bench re-runs.
The PR template will prompt for the relevant items.
## Reporting issues that involve security
Do not open a public issue for anything that looks like a security defect. See [SECURITY.md](SECURITY.md) for the private reporting flow.
## Code of conduct
By participating, you agree to follow the [Code of Conduct](CODE_OF_CONDUCT.md).