Thanks for helping improve q-ring! This guide covers the dev environment, project conventions, and the release-adjacent files you must keep in sync.
-
Node ≥ 18 (CI runs 22, releases build on 24) and pnpm — the exact pnpm version is pinned via the
packageManagerfield inpackage.json(usecorepack enableand it resolves automatically). -
Install and build:
pnpm install pnpm run build
-
Useful scripts:
Script What it does pnpm run typechecktsc --noEmitpnpm run lintESLint over src/, zero warnings allowedpnpm testvitest in watch mode pnpm run test:cisingle vitest run (what CI runs) pnpm run buildbundles the dashboard client, then tsup → dist/pnpm run formatprettier over src/andscripts/ -
Tests and sandboxes can point the audit log elsewhere with
QRING_AUDIT_DIR(directory is created if missing); default is~/.config/q-ring/audit.jsonl. -
QRING_DEBUG=1makes the CLI print full stack traces instead of one-line errors. -
Optional local pre-commit:
qring hook:install(uses this package'sprecommithook whenqringis on yourPATH).
- Base your work on
develop;maintracks releases. - Commit messages follow Conventional Commits (
feat:,fix:,chore:, with optional scope — e.g.fix(ci): …), matching the existing history and the Dependabot config. - Before opening a PR, run
pnpm run lint,pnpm run typecheck, andpnpm run test:ci— the PR template checklist mirrors CI.
- CLI ↔ MCP parity: docs/cli-mcp-parity.md maps every CLI command to its MCP tool. Update it when adding, renaming, or removing either surface.
- Editor plugins: after changing plugin content:
- Skills are generated — edit only
cursor-plugin/skills/*/SKILL.md, then runpnpm run plugin:gen-skillsto regenerate the Claude Code skills and Kiro steering files, and commit the output. CI (pnpm run check:parity) fails if they drift, if the plugins' command/agent/skill sets diverge, if doc'd MCP tool counts don't match the code, or if manifest versions are stale. - Cursor:
pnpm run plugin:synccopiescursor-plugin/to~/.cursor/plugins/local/my-plugin. - Kiro:
pnpm run plugin:sync:kirocopieskiro-plugin/mcp.json,steering/, andhooks/into~/.kiro. - Claude Code:
pnpm run plugin:sync:claudecopies the plugin into the current project (--userfor~/.claude).
- Skills are generated — edit only
- Versions:
pnpm run sync-versionsstampspackage.json's version into the Cursor and Claude Code plugin manifests,server.json, andSECURITY.md. It runs automatically onprepublishOnly. - Dashboard client:
src/core/dashboard-client.tsis generated fromsrc/dashboard-client/main.js— runpnpm run build:dashboardafter editing the client and commit the regenerated file. - CHANGELOG: add your change under
[Unreleased]inCHANGELOG.md(Keep a Changelog format).
Do not open a public issue for vulnerabilities — follow SECURITY.md.
By contributing you agree your work is licensed under AGPL-3.0-only, the same license as the project.