thanks for the interest. here's how to get involved.
git clone https://github.com/StressTestor/pr-prism.git
cd pr-prism
npm install
npm run build
npm testrequires node >= 20. run node --version to check.
src/
cli.ts — commander-based CLI (thin wrapper)
index.ts — public API exports
config.ts — zod-validated YAML config + env loading
github.ts — GraphQL-based GitHub ingestion
embeddings.ts — multi-provider embedding (ollama, jina, openai, voyage, kimi)
store.ts — sqlite + sqlite-vec storage layer
cluster.ts — cosine similarity clustering
scorer.ts — PR quality scoring signals
reviewer.ts — multi-provider LLM review
vision.ts — vision document alignment checking
similarity.ts — vector math utilities
types.ts — shared type definitions
most likely contribution. here's the pattern:
- add a new class in
src/embeddings.tsimplementing theEmbeddingProviderinterface - add the provider name to the config schema in
src/config.ts - add env var loading in
loadEnvConfig() - add a case to the provider factory in
createEmbeddingProvider() - add tests in
src/__tests__/
same pattern applies for LLM providers in src/reviewer.ts.
- add the command in
src/cli.tsusing commander - keep CLI logic thin — call into the programmatic API from
src/index.ts - support
--jsonflag for machine-readable output
npm test # run once
npm run test:watch # watch modeproject uses biome for linting and formatting.
npm run lint # check
npm run format # auto-fix- keep commits granular and descriptive
- use lowercase, imperative mood: "add X", "fix Y", not "Added X" or "Fixes Y"
- open an issue before starting large changes
- PRs should target
main - include a brief description of what changed and why
- if adding a provider, include a test that runs against a mock/fixture (don't require live API keys in CI)