Files
strukto-ai--mirage/CONTRIBUTING.md
T
wehub-resource-sync bcbd1bdb22
Integ / changes (push) Has been skipped
Pre-commit / pre-commit (push) Failing after 1s
CLI exit codes / changes (push) Has been skipped
Test (Install) / changes (push) Has been skipped
Test (Python) / changes (push) Has been skipped
Test (TypeScript) / changes (push) Has been skipped
CLI exit codes / cli-gate (push) Has been cancelled
Test (Install) / test-install-gate (push) Has been cancelled
Integ / integ-gate (push) Has been cancelled
Test (Python) / test-python-gate (push) Has been cancelled
Test (TypeScript) / test-typescript-gate (push) Has been cancelled
Test (Install) / python-minimal (3.12) (push) Has been cancelled
Test (Install) / python-minimal (3.11) (push) Has been cancelled
Test (Install) / python-extra (agno, mirage.agents.agno) (push) Has been cancelled
Test (Install) / python-extra (chroma, mirage.resource.chroma) (push) Has been cancelled
Test (Install) / python-extra (pdf, mirage.core.filetype.pdf) (push) Has been cancelled
Integ / integ (push) Has been cancelled
Integ / integ-database (push) Has been cancelled
Integ / integ-database-ts (push) Has been cancelled
Integ / integ-data (push) Has been cancelled
Integ / integ-ssh (push) Has been cancelled
Integ / integ-ssh-ts (push) Has been cancelled
Test (Python) / audit (push) Has been cancelled
Test (TypeScript) / test (push) Has been cancelled
Test (TypeScript) / python-fs-shim (push) Has been cancelled
CLI exit codes / Python CLI (push) Has been cancelled
CLI exit codes / TypeScript CLI (push) Has been cancelled
CLI exit codes / Cross-language snapshot interop (push) Has been cancelled
Test (Python) / test (push) Has been cancelled
Test (Python) / import-isolation (deepagents, openai, mirage.agents.openai_agents) (push) Has been cancelled
Test (Python) / import-isolation (deepagents, pydantic-ai, mirage.agents.pydantic_ai) (push) Has been cancelled
Integ / integ-ts (push) Has been cancelled
Integ / integ-fuse (push) Has been cancelled
Test (Install) / python-extra (databricks, mirage.resource.databricks_volume) (push) Has been cancelled
Test (Install) / python-extra (deepagents, mirage.agents.langchain) (push) Has been cancelled
Test (Install) / python-extra (email, mirage.resource.email) (push) Has been cancelled
Test (Install) / python-extra (fuse, mirage.fuse.mount) (push) Has been cancelled
Test (Install) / python-extra (hdf5, mirage.core.filetype.hdf5) (push) Has been cancelled
Test (Install) / python-extra (hf, mirage.resource.hf_buckets) (push) Has been cancelled
Test (Install) / python-extra (lancedb, mirage.resource.lancedb) (push) Has been cancelled
Test (Install) / python-extra (langfuse, mirage.resource.langfuse) (push) Has been cancelled
Test (Install) / python-extra (mongodb, mirage.resource.mongodb) (push) Has been cancelled
Test (Install) / python-extra (nextcloud, mirage.resource.nextcloud) (push) Has been cancelled
Test (Install) / python-extra (openai, mirage.agents.openai_agents) (push) Has been cancelled
Test (Install) / python-extra (openhands, mirage.agents.openhands, 3.12) (push) Has been cancelled
Test (Install) / python-extra (parquet, mirage.core.filetype.parquet) (push) Has been cancelled
Test (Install) / python-extra (postgres, mirage.resource.postgres) (push) Has been cancelled
Test (Install) / python-extra (pydantic-ai, mirage.agents.pydantic_ai) (push) Has been cancelled
Test (Install) / python-extra (qdrant, mirage.resource.qdrant) (push) Has been cancelled
Test (Install) / python-extra (redis, mirage.resource.redis) (push) Has been cancelled
Test (Install) / python-extra (s3, mirage.resource.s3) (push) Has been cancelled
Test (Install) / python-extra (ssh, mirage.resource.ssh) (push) Has been cancelled
Test (Install) / ts-minimal (push) Has been cancelled
chore: import upstream snapshot with attribution
2026-07-13 12:30:44 +08:00

3.3 KiB

Contributing to Mirage

Thank you for your interest in contributing to Mirage. Mirage is a unified virtual filesystem for AI agents, with Python and TypeScript implementations in one repository.

Contribution Guidelines

We prefer small, well-tested contributions that solve real user problems.

  • Open an issue or discussion before starting non-trivial features, API changes, or large refactors.
  • Link related issues or discussions in your pull request.
  • Keep pull requests focused. Split unrelated changes into separate PRs.
  • Include tests for bug fixes and new behavior when practical.
  • Update affected docs and examples when behavior changes.
  • AI-assisted contributions are fine, but they must be reviewed, edited, and tested by a human before submission. Bulk low-signal generated submissions may be closed.

Repository Layout

  • python/ contains the Python package, tests, pyproject.toml, and uv.lock.
  • typescript/ contains the TypeScript monorepo and packages.
  • docs/, examples/, and .github/ are shared across both implementations.

Run Python commands from python/. Run TypeScript commands from typescript/.

Development Setup

Install Python dependencies:

cd python
uv sync --all-extras

Install TypeScript dependencies:

cd typescript
pnpm install

Examples under examples/python/ load .env.development from the repository root. Run them from the root with the Python virtualenv interpreter:

./python/.venv/bin/python examples/python/s3/s3.py

Common Commands

Run Python tests:

cd python
uv run pytest

Run Python formatting and linting from the repository root:

./python/.venv/bin/pre-commit run --all-files

Run TypeScript checks:

cd typescript
pnpm typecheck
pnpm test
pnpm lint
pnpm format:check

Build TypeScript packages:

cd typescript
pnpm build

If you change Python dependencies, use uv add and commit the updated lock file. If you change TypeScript dependencies, use pnpm and commit the updated lock file.

Code Style

  • Represent filesystem paths with PathSpec, not raw strings, in Python APIs.
  • Keep imports at the top of files.
  • Avoid circular imports. Fix the dependency direction instead of using lazy function-local imports.
  • Do not silently swallow exceptions. Let unexpected errors propagate, or log clearly when an error is intentionally ignored.
  • Do not call asyncio.run() from sync code that may run inside an existing event loop.
  • Keep comments and docstrings useful and concise. When adding docstring Args, include argument types.

Pull Request Checklist

Before opening a PR:

  • The change is scoped to one bug, feature, or documentation improvement.
  • Related issues or discussions are linked.
  • Tests were added or updated when relevant.
  • Affected docs and examples were updated.
  • Formatting, linting, and tests pass locally, or the PR explains why a check could not be run.

Useful PR title prefixes:

  • feat: for new features
  • fix: for bug fixes
  • docs: for documentation changes
  • refactor: for code restructuring
  • test: for test-only changes
  • chore: for maintenance work

Getting Help

Use GitHub issues for bugs, feature requests, and design discussions. For faster conversation, join the Mirage Discord linked from the README.