lefthook.yml
Rama main · réplica de lectura del repositorio original.
# lefthook.yml - git hooks for ego-lite
#
# Enable hooks:
# cd package/ego-browser && npm install
#
# lefthook is a package/ego-browser devDependency. npm install runs the
# prepare script, which installs hooks into the repository's .git/hooks.
#
# The git root is the repository root, while the JS package lives in
# package/ego-browser. Commands cd into that package when needed.
pre-commit:
parallel: false
commands:
branch-up-to-date:
run: |
git fetch --quiet origin dev 2>/dev/null || { echo "⚠ skip branch-freshness check: cannot fetch origin/dev (offline?)"; exit 0; }
if git merge-base --is-ancestor FETCH_HEAD HEAD; then
exit 0
fi
echo "✗ Your branch is behind origin/dev — sync before committing:"
echo " git fetch origin dev && git rebase origin/dev # or: git merge origin/dev"
exit 1
style-check:
run: |
files=$(git diff --cached --name-only --diff-filter=ACMR | grep -E '^(package/ego-browser|plugins)/.*\.(ts|mjs|js|json|md)$' | grep -v '^skills/ego-browser/learnings/' || true)
[ -z "$files" ] && exit 0
package/ego-browser/node_modules/.bin/prettier --check $files
vulnerability-audit:
run: |
git diff --cached --name-only --diff-filter=ACMR | grep -q '^package/ego-browser/' || exit 0
cd package/ego-browser && npm audit --registry=https://registry.npmjs.org --audit-level=moderate
smoke-test:
run: |
git diff --cached --name-only --diff-filter=ACMR | grep -Eq '^(package/ego-browser/|skills/ego-browser/)' || exit 0
cd package/ego-browser && npm test
site-skill-validation:
run: |
git diff --cached --name-only --diff-filter=ACMR | grep -Eq '^(package/ego-browser/(src/learning/|scripts/validate-site-skills\.ts)|skills/ego-browser/learnings/)' || exit 0
cd package/ego-browser && npm run validate:site-skills
plugin-skill-sync:
# Lefthook runs commands in name order, so this refreshes the plugin's
# copy of the entry Skill before plugin-tests checks it.
run: |
git diff --cached --name-only | grep -q '^skills/ego-browser/' || exit 0
node plugins/scripts/sync-skills.mjs ego --staged
plugin-tests:
run: |
git diff --cached --name-only --diff-filter=ACMR | grep -Eq '^(plugins/|skills/ego-browser/|package/ego-browser/skill-body/|\.agents/plugins/|\.claude-plugin/|\.cursor-plugin/)' || exit 0
npm --prefix plugins/ego test
e2e-test:
run: |
git diff --cached --name-only --diff-filter=ACMR | grep -Eq '^(package/ego-browser/|skills/ego-browser/)' || exit 0
cd package/ego-browser && npm run e2e
post-commit:
commands:
plugin-skill-index:
# `git commit <paths>` commits plugin-skill-sync's copy from a temporary
# index, so the real index keeps the old copy. Point it back at HEAD.
run: |
copy=plugins/ego/skills/ego-browser
if git diff --quiet HEAD -- "$copy" && ! git diff --cached --quiet -- "$copy"; then
git reset -q -- "$copy"
fi