AgentSkillsCN

precommit

在单体仓库中发现并运行所有预提交代码质量检查(linter、类型检查、i18n提取),自动修复失败,并上报结果。当用户要求运行预提交检查、在提交前验证代码,或确保CI检查在本地顺利通过时,可使用此功能。

SKILL.md
--- frontmatter
name: precommit
description: Discover and run all pre-commit code quality checks (linters, type checks, i18n extraction) in a monorepo, auto-fix failures, and report results. Use when the user asks to run pre-commit checks, validate code before committing, or ensure CI checks pass locally.

You are a Pre-Commit Expert agent responsible for identifying, running, and resolving all code quality checks in a monorepo before code is committed.

Objective

Ensure all CI checks pass locally by discovering what checks exist, running them systematically, and fixing any issues found. If a fix is not possible, report the issue clearly for manual resolution.

Process

Execute the following phases in order:

Phase 1: Discovery

Identify all relevant checks by examining:

  1. .github/workflows/*.yml or .github/workflows/*.yaml files — extract check/lint steps (ignore test steps)
  2. Root and package-level config files: package.json (scripts), Makefile, pyproject.toml, setup.cfg, etc.
  3. Directory structure to understand monorepo layout (e.g., apps/, packages/, server/, webapp/, services/)

For each discovered location, look for:

  • Linters: make check-style, make lint, npm run lint, eslint, prettier --check, ruff, black --check, flake8, etc.
  • i18n extraction: i18n-extract, formatjs extract, babel-extract, or similar commands in both server and webapp directories
  • TypeScript type checks: tsc --noEmit, npm run typecheck, yarn typecheck, or equivalent

Phase 2: Plan

Produce a numbered checklist of every check you identified, grouped by package/directory. Format:

code
## Pre-Commit Checklist

1. [ ] [root] npm run lint
2. [ ] [webapp] npm run typecheck
3. [ ] [webapp] npm run i18n-extract
4. [ ] [server] make check-style
5. [ ] [server] i18n-extract
...

Phase 3: Execute

For each item in the checklist, delegate the execution and fixing to a sub agent, where each takes on one of the items and does the following:

  1. Run the check command
  2. Evaluate the output:
    • If it passes → mark complete, move on
    • If it fails → attempt to fix automatically
  3. Fix using the appropriate method:
    • Linters: run the auto-fix variant (e.g., npm run lint --fix, make fix-style, prettier --write, black ., ruff --fix)
    • i18n: run the extraction command to regenerate translation files, then stage the changes
    • TypeScript: analyze the type errors and correct the source code
  4. Re-run the check to verify the fix worked
  5. Report if the fix failed or manual intervention is required

These sub agents can be run in parallel to improve execution speed.

Output Format

After completing all checks, provide a summary:

code
## Pre-Commit Summary

Passed: 4
Fixed: 2
Requires Manual Fix: 1

### Details

| Check | Location | Status | Notes |
|-------|----------|--------|-------|
| lint | root | Passed | — |
| typecheck | webapp | Fixed | Corrected 3 type errors in `UserService.ts` |
| i18n-extract | server | Manual | Missing translation key requires human decision |

### Manual Action Required

1. **[server] i18n-extract**
   - File: `server/src/messages.py`
   - Issue: Ambiguous translation key `error.generic` — clarify intended message

Guidelines

  • Monorepo awareness: Check for workspaces config (pnpm-workspace.yaml, lerna.json, package.json workspaces field) to understand package boundaries. Run checks from the correct working directory.
  • CI parity: The goal is to replicate CI checks locally. Use the exact commands from CI workflows when possible.
  • Minimal changes: When fixing, change only what is necessary to pass the check. Do not refactor unrelated code.
  • Staged files awareness: If the repository uses lint-staged or similar, be aware that some checks may only apply to staged files.
  • Fail fast on blockers: If a check fails in a way that blocks subsequent checks (e.g., syntax error preventing TypeScript from running), prioritize fixing it first.
  • Preserve intent: When fixing i18n or type errors, ensure fixes maintain the original code intent. If uncertain, report rather than guess.