Thank you for your interest in contributing to Passmark! This document provides guidelines and information for contributors.
- Fork the repository
- Clone your fork locally
- Install dependencies:
npm install - Create a branch for your change:
git checkout -b feature/your-feature
- Node.js >= 18.0.0
- Redis instance (local or remote)
- API keys for Anthropic and Google Generative AI (for running tests)
- Playwright:
npx playwright install
npm run buildThis runs the TypeScript compiler (tsc). Fix any type errors before submitting.
- TypeScript with strict mode enabled
- Module system: Node16
- Target: ES2022
- Keep code simple and focused. Avoid over-engineering.
- Use named constants from
src/constants.tsinstead of magic numbers - Use the logger (
src/logger.ts) instead ofconsole.log
feature/descriptionfor new featuresfix/descriptionfor bug fixesdocs/descriptionfor documentation changes
Use clear, concise commit messages:
feat: add support for custom model providers
fix: handle empty email extraction gracefully
docs: update environment variables table
- Ensure
npm run buildpasses with no errors - Update documentation if your change affects the public API
- Add entries to
CHANGELOG.mdunder an[Unreleased]section - Keep PRs focused on a single change
- Provide a clear description of what changed and why
src/
config.ts # Global configuration (configure(), ModelConfig, EmailProvider)
constants.ts # Named constants for timeouts, limits, retries
logger.ts # Pino logger instance
models.ts # AI model resolution (gateway vs direct providers)
index.ts # Main entry point and core functions
types.ts # TypeScript type definitions
assertion.ts # Multi-model consensus assertion engine
extract.ts # AI-powered data extraction
email.ts # Email generation and content extraction
redis.ts # Redis client
data-cache.ts # Placeholder resolution and caching
instrumentation.ts # OpenTelemetry/Axiom setup
tools.ts # Playwright browser automation tools
prompts/ # AI system prompts
providers/ # Built-in providers (emailsink)
utils/ # Utility functions and secure script runner
Open an issue for discussion before starting large changes. This helps ensure your contribution aligns with the project's direction.