diff --git a/.husky/pre-commit b/.husky/pre-commit new file mode 100755 index 00000000..ea358f72 --- /dev/null +++ b/.husky/pre-commit @@ -0,0 +1,21 @@ +#!/bin/sh + +# Get list of staged files before running check +STAGED_FILES=$(git diff --cached --name-only) + +# Run the check script (formatting, linting, and type checking) +echo "Running formatting, linting, and type checking..." +npm run check +if [ $? -ne 0 ]; then + echo "❌ Checks failed. Please fix the errors before committing." + exit 1 +fi + +# Restage files that were previously staged and may have been modified by formatting +for file in $STAGED_FILES; do + if [ -f "$file" ]; then + git add "$file" + fi +done + +echo "✅ All pre-commit checks passed!" \ No newline at end of file diff --git a/package-lock.json b/package-lock.json index 43036fa5..fe555185 100644 --- a/package-lock.json +++ b/package-lock.json @@ -11,6 +11,7 @@ "devDependencies": { "@biomejs/biome": "^2.1.4", "@types/node": "^22.10.5", + "husky": "^9.1.7", "tsx": "^4.20.3", "typescript": "^5.9.2" }, @@ -658,6 +659,30 @@ "dev": true, "license": "MIT" }, + "node_modules/ansi-regex": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.1.0.tgz", + "integrity": "sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==", + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-regex?sponsor=1" + } + }, + "node_modules/ansi-styles": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", + "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, "node_modules/chalk": { "version": "5.5.0", "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.5.0.tgz", @@ -740,6 +765,22 @@ "url": "https://github.com/privatenumber/get-tsconfig?sponsor=1" } }, + "node_modules/husky": { + "version": "9.1.7", + "resolved": "https://registry.npmjs.org/husky/-/husky-9.1.7.tgz", + "integrity": "sha512-5gs5ytaNjBrh5Ow3zrvdUUY+0VxIuWVL4i9irt6friV+BqdCfmV11CQTWMiBYWHbXhco+J1kHfTOUkePhCDvMA==", + "dev": true, + "license": "MIT", + "bin": { + "husky": "bin.js" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/typicode" + } + }, "node_modules/resolve-pkg-maps": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/resolve-pkg-maps/-/resolve-pkg-maps-1.0.0.tgz", @@ -750,6 +791,33 @@ "url": "https://github.com/privatenumber/resolve-pkg-maps?sponsor=1" } }, + "node_modules/signal-exit": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", + "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", + "license": "ISC", + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/strip-ansi": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", + "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", + "license": "MIT", + "dependencies": { + "ansi-regex": "^6.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/strip-ansi?sponsor=1" + } + }, "node_modules/tsx": { "version": "4.20.3", "resolved": "https://registry.npmjs.org/tsx/-/tsx-4.20.3.tgz", @@ -795,7 +863,7 @@ "version": "0.5.8", "license": "MIT", "dependencies": { - "@mariozechner/pi-tui": "^0.5.7", + "@mariozechner/pi-tui": "^0.5.8", "@types/glob": "^8.1.0", "chalk": "^5.5.0", "glob": "^11.0.3", @@ -853,26 +921,6 @@ "version": "5.1.2", "license": "MIT" }, - "packages/agent/node_modules/ansi-regex": { - "version": "6.1.0", - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/ansi-regex?sponsor=1" - } - }, - "packages/agent/node_modules/ansi-styles": { - "version": "6.2.1", - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, "packages/agent/node_modules/color-convert": { "version": "2.0.1", "license": "MIT", @@ -1054,16 +1102,6 @@ "node": ">=8" } }, - "packages/agent/node_modules/signal-exit": { - "version": "4.1.0", - "license": "ISC", - "engines": { - "node": ">=14" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, "packages/agent/node_modules/string-width": { "version": "5.1.2", "license": "MIT", @@ -1113,19 +1151,6 @@ "node": ">=8" } }, - "packages/agent/node_modules/strip-ansi": { - "version": "7.1.0", - "license": "MIT", - "dependencies": { - "ansi-regex": "^6.0.1" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/strip-ansi?sponsor=1" - } - }, "packages/agent/node_modules/strip-ansi-cjs": { "name": "strip-ansi", "version": "6.0.1", @@ -1239,7 +1264,7 @@ "version": "0.5.8", "license": "MIT", "dependencies": { - "@mariozechner/pi-agent": "^0.5.7", + "@mariozechner/pi-agent": "^0.5.8", "chalk": "^5.5.0" }, "bin": { diff --git a/package.json b/package.json index 3c0232da..186dc90d 100644 --- a/package.json +++ b/package.json @@ -16,11 +16,13 @@ "version:set": "npm version -ws", "prepublish": "npm run clean && npm run build && npm run check", "publish": "npm run prepublish && npm publish -ws --access public", - "publish:dry": "npm run prepublish && npm publish -ws --access public --dry-run" + "publish:dry": "npm run prepublish && npm publish -ws --access public --dry-run", + "prepare": "husky" }, "devDependencies": { "@biomejs/biome": "^2.1.4", "@types/node": "^22.10.5", + "husky": "^9.1.7", "tsx": "^4.20.3", "typescript": "^5.9.2" },